@reyaxyz/common 0.380.0 → 0.381.0
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/trading-api-types.js.map +1 -1
- package/dist/types/trading-api-types.d.ts +8 -0
- package/dist/types/trading-api-types.d.ts.map +1 -1
- package/dist/types/utils/realized-balance.d.ts +47 -0
- package/dist/types/utils/realized-balance.d.ts.map +1 -1
- package/dist/utils/realized-balance.js +61 -1
- package/dist/utils/realized-balance.js.map +1 -1
- package/package.json +2 -2
- package/src/trading-api-types.ts +8 -0
- package/src/utils/realized-balance.ts +77 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading-api-types.js","sourceRoot":"/","sources":["trading-api-types.ts"],"names":[],"mappings":";;;AAYa,QAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACjB,CAAC;AAuHF,wCAAwC;AAC3B,QAAA,uBAAuB,GAAG,EAAE,CAAC;AAE1C,6EAA6E;AAC7E,wEAAwE;AACxE,wEAAwE;AACxE,4EAA4E;AAC5E,IAAM,sBAAsB,GAAG,yCAAyC,CAAC;AAEzE;;;;GAIG;AACI,IAAM,gBAAgB,GAAG,UAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,IAAI,+BAAuB;QACtC,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC;AACX,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B;AAEF;;;;;GAKG;AACU,QAAA,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAErD,QAAA,sBAAsB,GAAkB,MAAM,CAAC;AAC/C,QAAA,oBAAoB,GAAkB,OAAO,CAAC;AAEpD,IAAM,eAAe,GAAG,UAAC,GAAY;IAC1C,OAAC,uBAAsC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAArD,CAAqD,CAAC;AAD3C,QAAA,eAAe,mBAC4B;AAExD;;;;;;GAMG;AACI,IAAM,kBAAkB,GAAG,UAAC,GAAY;IAC7C,OAAA,IAAA,uBAAe,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,8BAAsB;AAAnD,CAAmD,CAAC;AADzC,QAAA,kBAAkB,sBACuB","sourcesContent":["import { ParamsDictionary, Query } from 'express-serve-static-core';\nimport { Address, AssetPair } from './types';\nimport {\n AddressParam,\n ApiEndpoint,\n ApiInfiniteListEndpoint,\n ApiListEndpoint,\n Decimal,\n PaginatedQueryParams,\n Stringified,\n} from './api-types';\n\nexport const AccountStatusValues = {\n OPEN: 'OPEN',\n CLOSED: 'CLOSED',\n};\n\nexport type AccountStatus =\n (typeof AccountStatusValues)[keyof typeof AccountStatusValues];\n\ntype CandleResolution = '1' | '5' | '15' | '30' | '60' | '240' | '1D';\n\ntype Candle = {\n time: number;\n open: number;\n high: number;\n low: number;\n close: number;\n assetPairId: AssetPair;\n resolution: CandleResolution;\n};\n\n// Database-shaped perp execution row exposed by provider and API types.\ntype Order = {\n id: string;\n market_id: Decimal | null;\n account_id: Decimal | null;\n executed_base: Decimal | null;\n fee: Decimal | null;\n price: Decimal | null;\n is_match_order: boolean | null;\n liquidation_type: Decimal | null;\n execution_type: number | null;\n transaction_hash: string;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n event_sequence_number: bigint | null;\n exchange_id: Decimal | null;\n created_at: Date;\n counterparty_account_id: Decimal | null;\n counterparty_adl_unwind_price: Decimal | null;\n counterparty_average_entry_funding_value: Decimal | null;\n counterparty_base: Decimal | null;\n counterparty_base_multiplier: Decimal | null;\n counterparty_funding_value: Decimal | null;\n counterparty_last_price: Decimal | null;\n counterparty_last_price_timestamp: Decimal | null;\n counterparty_previous_adl_unwind_price: Decimal | null;\n counterparty_previous_average_entry_funding_value: Decimal | null;\n counterparty_previous_base_multiplier: Decimal | null;\n counterparty_previous_funding_value: Decimal | null;\n counterparty_previous_last_price: Decimal | null;\n counterparty_previous_realized_pnl: Decimal | null;\n counterparty_realized_pnl: Decimal | null;\n counterparty_session: Decimal | null;\n position_adl_unwind_price: Decimal | null;\n position_average_entry_funding_value: Decimal | null;\n position_base: Decimal | null;\n position_base_multiplier: Decimal | null;\n position_funding_value: Decimal | null;\n position_last_price: Decimal | null;\n position_last_price_timestamp: Decimal | null;\n position_previous_adl_unwind_price: Decimal | null;\n position_previous_average_entry_funding_value: Decimal | null;\n position_previous_base_multiplier: Decimal | null;\n position_previous_funding_value: Decimal | null;\n position_previous_last_price: Decimal | null;\n position_previous_realized_pnl: Decimal | null;\n position_realized_pnl: Decimal | null;\n position_session: Decimal | null;\n referrer_account_id: Decimal | null;\n referrer_fee_credit: Decimal | null;\n // V3 fields\n protocol_fee_credit: Decimal | null;\n taker_rebate_credit: Decimal | null;\n pool_fee_credit: Decimal | null;\n exchange_fee_credit: Decimal | null;\n maker_fee_credit: Decimal | null;\n maker_fee_debit: Decimal | null;\n account_order_id: bigint | null;\n counterparty_order_id: bigint | null;\n me_nonce: Decimal | null;\n};\n\ntype Position = {\n market_id: Decimal;\n account_id: Decimal;\n base: Decimal | null;\n realized_pnl: Decimal | null;\n last_price: Decimal | null;\n last_price_timestamp: Decimal | null;\n funding_value: Decimal | null;\n base_multiplier: Decimal | null;\n adl_unwind_price: Decimal | null;\n average_entry_funding_value: Decimal | null;\n session: Decimal | null;\n exchange_id: Decimal | null;\n event_sequence_number: bigint | null;\n referrer_account_id: Decimal | null;\n referrer_fee_credit: Decimal | null;\n transaction_hash: string;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n adjusted_base: Decimal | null;\n adl_realized_pnl: Decimal | null;\n};\n\n// PRO-126 Bug 7: `ConditionalOrder` + `ConditionalOrderSensitive`\n// trading-api-types retired with the rest of the legacy\n// `ConditionalOrders` DB pipeline. They modeled the legacy row shape\n// for the dead V1 `/wallet/:address/openOrders` endpoint + the dead\n// `replication:ConditionalOrdersSensitive` broadcast channel; both\n// callers have been removed.\n\ntype Account = {\n account_id: Decimal;\n name: string;\n status: AccountStatus;\n updated_timestamp_ms: Decimal;\n source: string | null;\n};\n\n// Matches the app's account-name field.\nexport const ACCOUNT_NAME_MAX_LENGTH = 25;\n\n// Control, format (bidi, zero-width), surrogate and private-use code points,\n// plus the line and paragraph separators. Not unassigned (Cn): that set\n// depends on the runtime's Unicode tables and would reject newer emoji.\n// Sequence emoji joined by U+200D (ZWJ) or tag characters are rejected too.\nconst ACCOUNT_NAME_FORBIDDEN = /[\\p{Cc}\\p{Cf}\\p{Cs}\\p{Co}\\u2028\\u2029]/u;\n\n/**\n * The trimmed account name, or null when it is not a non-empty string of at\n * most ACCOUNT_NAME_MAX_LENGTH characters free of forbidden code points.\n * Shared by the rename endpoint and the relay's account-creation name.\n */\nexport const parseAccountName = (raw: unknown): string | null => {\n if (typeof raw !== 'string') return null;\n const name = raw.trim();\n return name.length > 0 &&\n name.length <= ACCOUNT_NAME_MAX_LENGTH &&\n !ACCOUNT_NAME_FORBIDDEN.test(name)\n ? name\n : null;\n};\n\n/**\n * Allow-listed `AccountProfile.source` values, set once when the relay writes\n * the profile of a new account from `metadata.accountSource`. 'reya' is the\n * default, 'rage' the Rage Trade integration, and 'agent' marks the Agent\n * account, which the V2 API reports as `AGENTPERP`.\n */\nexport const ACCOUNT_SOURCES = ['reya', 'rage', 'agent'] as const;\nexport type AccountSource = (typeof ACCOUNT_SOURCES)[number];\nexport const DEFAULT_ACCOUNT_SOURCE: AccountSource = 'reya';\nexport const AGENT_ACCOUNT_SOURCE: AccountSource = 'agent';\n\nexport const isAccountSource = (raw: unknown): raw is AccountSource =>\n (ACCOUNT_SOURCES as readonly unknown[]).includes(raw);\n\n/**\n * The source exactly as sent when it is allow-listed, otherwise\n * DEFAULT_ACCOUNT_SOURCE. Unknown values are normalised, not rejected: the\n * account already exists on-chain when its profile is written, and rejecting\n * would only lose the account name. Matching is exact, so only 'agent' makes\n * an Agent account.\n */\nexport const parseAccountSource = (raw: unknown): AccountSource =>\n isAccountSource(raw) ? raw : DEFAULT_ACCOUNT_SOURCE;\n\n/** Body of `PUT /api/trading/wallet/:address/account/:accountId/name`. */\nexport type UpdateAccountNameBody = { name: string };\n\ntype AccountBalance = {\n account_id: Decimal | null;\n collateral: string | null;\n balance?: Decimal | null;\n delta?: Decimal | null;\n};\n\ntype spot_execution = {\n account_id: Decimal;\n counterparty_account_id: Decimal;\n // Order attribution is absent for auto-exchange executions: there is no\n // matched order, so the chain emits no exchange/order ids and the DB\n // columns are NULL. Matches the `spot_executions` Prisma model.\n exchange_id: Decimal | null;\n executed_base: Decimal;\n price: Decimal;\n account_order_id: bigint | null;\n counterparty_order_id: bigint | null;\n me_nonce: Decimal | null;\n spot_market_id: Decimal;\n is_auto_exchange: boolean;\n is_long: boolean;\n event_sequence_number: bigint;\n parent_event_sequence_number: bigint | null;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n created_at: string;\n};\n\ntype account_real_balance = {\n account_id: Decimal;\n collateral: string;\n balance: Decimal;\n rpnl: Decimal;\n event_sequence_number: bigint | null;\n transfer_event_sequence_number: bigint | null;\n parent_event_sequence_number: bigint | null;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n};\n\n// `Leverage` is still referenced by the `wallet/:address/leverages`\n// endpoint below, so it is kept; `AutoExchange` (a dead legacy type with\n// no remaining references) was removed in #2713/#2710.\ntype Leverage = {\n accountId: Decimal;\n marketId: Decimal;\n leverage: number;\n createdAt: Date;\n updatedAt: Date;\n};\n\ntype WalletStats = {\n volume_14d: Decimal;\n lookback_volume: Decimal;\n lookback_window_seconds: number;\n};\n\ntype BalanceHistoryPoint = {\n timestamp: number;\n balance: number;\n /**\n * PnL since the first point: the change in balance minus the change in\n * net deposits, withdrawals and transfers.\n */\n pnl: number;\n};\n\ntype MarketData = {\n marketId: string;\n updatedAt: number;\n longOI: number;\n shortOI: number;\n longSkewPercentage: number;\n shortSkewPercentage: number;\n openInterest?: number;\n fundingRate?: number;\n fundingRateVelocity?: number;\n longFundingValue?: number;\n shortFundingValue?: number;\n last24hVolume: number;\n priceChange24H?: number;\n priceChange24HPercentage?: number;\n maxAmountBaseLong?: number;\n maxAmountSizeLong?: number;\n maxAmountBaseShort?: number;\n maxAmountSizeShort?: number;\n /** ME mark price, despite the name. Surfaced as v2 `MarketSummary.markPrice`. */\n oraclePrice?: number;\n /**\n * Orderbook mid. Absent on an empty or one-sided book\n */\n poolPrice?: number;\n /**\n * Stork index price, rUSD-quoted (divided by USDCUSD, like the collateral\n * feeds). Surfaced as v2 `MarketSummary.oraclePrice` — the name differs\n * because the v1 `oraclePrice` above is already taken by the mark price.\n * Absent when the index feed has no fresh tick.\n */\n indexPrice?: number;\n pricesUpdatedAt?: number;\n longBaseMultiplier?: number;\n shortBaseMultiplier?: number;\n longAdlUnwindPrice?: number;\n shortAdlUnwindPrice?: number;\n depthFactor?: number;\n priceSpread?: number;\n logPriceMultiplier?: number;\n};\n\ntype SpotMarketData = {\n spotMarketId: string;\n symbol: string;\n updatedAt: number;\n volume24h: number;\n pxChange24h?: number;\n /** Stork price for the base token, rUSD-quoted (divided by USDCUSD). */\n oraclePrice?: number;\n /**\n * Spot orderbook mid, read from the ME `{depth}:bbo:<id>` key. Absent on an\n * empty or one-sided book — spot has no mark price to fall back to, unlike\n * the perp `poolPrice` above.\n */\n throttledMidPrice?: number;\n};\n\ntype MarketTrackers = {\n market_data_id: Decimal;\n passive_pool_id: Decimal | null;\n pool_account_id: Decimal | null;\n quote_token: string | null;\n quote_token_decimals: Decimal | null;\n last_funding_velocity: Decimal | null;\n last_funding_timestamp: Decimal | null;\n last_mtm_price: Decimal | null;\n last_mtm_timestamp: Decimal | null;\n long_trackers_funding_value: Decimal | null;\n last_funding_rate: Decimal | null;\n long_trackers_base_multiplier: Decimal | null;\n long_trackers_adl_unwind_price: Decimal | null;\n short_trackers_funding_value: Decimal | null;\n short_trackers_base_multiplier: Decimal | null;\n short_trackers_adl_unwind_price: Decimal | null;\n open_interest: Decimal | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n price_spread: Decimal | null;\n depth_factor: Decimal | null;\n log_price_multiplier: Decimal | null;\n mark_price: Decimal | null;\n mark_price_timestamp: Decimal | null;\n funding_rate: Decimal | null;\n funding_rate_timestamp: Decimal | null;\n};\n\nexport type TradingApiReplication<\n ReplicationTable extends ReplicationModel = never,\n Replication = never,\n> = {\n replication: ReplicationTable extends never\n ? never\n : GenericReplicationMessage<Replication, ReplicationTable>;\n};\n\nexport type TradingApiEndpoint<\n Response,\n Params,\n ReplicationTable extends ReplicationModel = never,\n Replication = Response,\n Query = never,\n> = ApiEndpoint<Response, Params, Query> &\n TradingApiReplication<ReplicationTable, Replication>;\n\nexport type TradingApiListEndpoint<\n Response,\n Params = never,\n ReplicationTable extends ReplicationModel = never,\n Replication = Response,\n Query = never,\n> = ApiListEndpoint<Response, Params, Query> &\n TradingApiReplication<ReplicationTable, Replication>;\n\nexport type TradingApiInfiniteListEndpoint<\n Response,\n Params = never,\n ReplicationTable extends ReplicationModel = never,\n Replication = Response,\n Query = PaginatedQueryParams,\n> = ApiInfiniteListEndpoint<Response, Params, Query> &\n TradingApiReplication<ReplicationTable, Replication>;\n\nexport type TradingApiSource = {\n 'poolBalance/:poolId': TradingApiEndpoint<\n {\n id: number;\n timestamp: bigint;\n pool_id: number;\n value: Decimal;\n apy: Decimal;\n share_price: Decimal;\n share_price_index: Decimal;\n } | null,\n {\n poolId?: string;\n }\n >;\n 'poolBalance/:poolId/apy-history': TradingApiEndpoint<\n { timestampInMs: number; apy: number }[],\n { poolId?: string },\n never,\n { timestampInMs: number; apy: number }[],\n { timeframeMs: string; granularity: string }\n >;\n 'wallet/:address/leverages': TradingApiListEndpoint<\n Leverage,\n { address: string },\n 'accountLeveragePerMarket'\n >;\n 'markets/data': TradingApiListEndpoint<MarketData, never, 'marketData'>;\n 'spotMarkets/data': TradingApiListEndpoint<\n SpotMarketData,\n never,\n 'spotMarketData'\n >;\n 'markets/configuration': TradingApiListEndpoint<{\n market_id: Decimal;\n risk_matrix_index: Decimal | null;\n max_open_base: Decimal | null;\n minimum_order_base: Decimal | null;\n base_spacing: Decimal | null;\n price_spacing: Decimal | null;\n oracle_node_id: string | null;\n mtm_window: Decimal | null;\n dutch_config_lambda: Decimal | null;\n dutch_config_min_base: Decimal | null;\n slippage_params_phi: Decimal | null;\n slippage_params_beta: Decimal | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n }>;\n 'markets/storage': TradingApiListEndpoint<{\n market_id: Decimal;\n quote_collateral: string | null;\n instrument_address: string | null;\n name: string | null;\n risk_block_id: Decimal | null;\n collateral_pool_id: Decimal | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n }>;\n 'markets/trackers': TradingApiListEndpoint<\n MarketTrackers,\n never,\n 'marketTrackers'\n >;\n 'market/:marketId/trackers': TradingApiEndpoint<\n MarketTrackers,\n {\n marketId: string;\n },\n 'marketTrackers'\n >;\n 'market/:marketId/data': TradingApiEndpoint<\n MarketData,\n {\n marketId: string;\n },\n 'marketData'\n >;\n 'wallet/:address/positions': TradingApiListEndpoint<\n Position,\n AddressParam,\n 'position',\n Omit<Position, 'adjusted_base' | 'adl_realized_pnl'>\n >;\n // PRO-126 Bug 7: V1 `/wallet/:address/openOrders` endpoint type\n // retired. The route+controller were removed in trading.router.ts +\n // trading.controller.ts. V2 callers should use\n // `/v2/wallet/:address/openOrders` which serves both spot and perp\n // orders from the unified ME stream via AccountOrdersMap.\n // Bridge deposits and withdrawals for a wallet. Rows are registered by the\n // Reya app when it broadcasts the source-chain transaction, and reconciled\n // by the pending-transaction cron -- nothing else writes them, which is why\n // this is a v1 app endpoint rather than part of the general v2 API.\n 'wallet/:address/bridgeTransactions': TradingApiListEndpoint<\n bridge_transactions_margin_account,\n AddressParam,\n 'BridgeTransactionsMarginAccount'\n >;\n 'wallet/:address/accounts': TradingApiListEndpoint<\n Account,\n AddressParam,\n 'AccountProfile'\n >;\n 'wallet/:address/accounts/balances': TradingApiListEndpoint<\n AccountBalance,\n AddressParam,\n 'account_balances'\n >;\n 'wallet/:address/balanceHistory/:timestamp': TradingApiListEndpoint<\n BalanceHistoryPoint,\n {\n address: string;\n timestamp: string;\n },\n never,\n BalanceHistoryPoint,\n {\n /**\n * Comma-separated ids of the wallet's accounts to sum (e.g. the main\n * account, or one sub-account). Omitted: every account of the wallet.\n */\n accountIds?: string;\n }\n >;\n riskMatrices: TradingApiListEndpoint<\n {\n blockId: Decimal;\n matrix: string[][];\n },\n {\n poolId: string;\n }\n >;\n 'candle/:assetPairId/:resolution': TradingApiEndpoint<\n Candle | null,\n {\n resolution: CandleResolution;\n assetPairId: AssetPair;\n },\n 'storkPriceCandle',\n Candle\n >;\n 'candles/:assetPairId/:resolution': TradingApiEndpoint<\n {\n t: number[];\n o: number[];\n h: number[];\n l: number[];\n c: number[];\n },\n {\n resolution: CandleResolution;\n assetPairId: AssetPair;\n },\n never,\n never,\n {\n to: string;\n from: string;\n countBack?: string;\n }\n >;\n feeTierParameters: TradingApiListEndpoint<{\n tier_id: Decimal;\n taker_fee: Decimal;\n maker_fee: Decimal;\n volume: Decimal;\n }>;\n globalFeeParameters: TradingApiEndpoint<\n {\n og_discount: Decimal;\n vltz_discount: Decimal;\n referee_discount: Decimal;\n referrer_rebate: Decimal;\n affiliate_referrer_rebate: Decimal;\n },\n never\n >;\n 'wallet/:address/configuration': TradingApiEndpoint<\n {\n tier_id: Decimal;\n og_status: boolean;\n vltz_status: boolean;\n affiliate_status: boolean;\n referee_status: boolean;\n spread_discount_status: boolean;\n main_account_id: Decimal;\n },\n {\n address: string;\n }\n >;\n 'wallet/:address/stats': TradingApiEndpoint<\n WalletStats,\n {\n address: string;\n }\n >;\n 'wallet/:address/apiWalletStatus': TradingApiEndpoint<\n {\n enabledApiWallets: string[];\n },\n {\n address: string;\n }\n >;\n rlp: TradingApiEndpoint<\n {\n tvlInUsdc: number;\n tvlInRlp: number;\n rlpUsdcPrice: number;\n apy: {\n '1d': number;\n '7d': number;\n '30d': number;\n '365d': number;\n };\n numberOfDepositors: number;\n ageSeconds: number;\n },\n never\n >;\n 'wallet/:address/rlp': TradingApiEndpoint<\n {\n balanceInUsdc: number;\n balanceInRlp: number;\n },\n {\n address: string;\n }\n >;\n 'collaterals/definitions': TradingApiEndpoint<\n {\n collaterals: CollateralDefinition[];\n },\n never\n >;\n 'collaterals/balances/wallet/:address': TradingApiEndpoint<\n {\n collaterals: CollateralWalletBalance[];\n },\n {\n address: string;\n }\n >;\n // PUT with an `UpdateAccountNameBody` and a Dynamic `Authorization: Bearer`\n // token; only the account's owner may rename it.\n 'wallet/:address/account/:accountId/name': TradingApiEndpoint<\n Account,\n {\n address: string;\n accountId: string;\n }\n >;\n};\n\nexport type Req<P = ParamsDictionary, ReqQuery = Query> = {\n params: P;\n query: ReqQuery;\n};\n\nexport type TradingApi = {\n [K in keyof TradingApiSource as K]: {\n params: TradingApiSource[K]['params'];\n query: TradingApiSource[K]['query'];\n response: Stringified<TradingApiSource[K]['response']>;\n replication: Stringified<TradingApiSource[K]['replication']>;\n };\n};\n\ntype ReplicationModel = string | never;\n\nexport type GenericReplicationMessage<T, model extends ReplicationModel> =\n | {\n model: model;\n result: T;\n operation: 'create' | 'update' | 'upsert' | 'delete';\n }\n | {\n model: model;\n result: T[];\n operation: 'updateMany';\n }\n | {\n model: model;\n result: T[];\n operation: 'createMany';\n };\n\ntype account_collateral_balance_entries = {\n id: string;\n account_id: Decimal | null;\n collateral: string | null;\n amount: Decimal | null;\n transaction_hash: string;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n};\n\ntype account_owner_updated_snapshot = {\n account_id: Decimal;\n transaction_hash: string;\n new_owner: string | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n event_sequence_number: bigint | null;\n};\n\nexport interface OrdersGatewayPermissionUpdatedStreamResult {\n owner: string;\n delegate: string;\n permission_state: boolean;\n event_sequence_number: string;\n block_number: string;\n block_timestamp: string;\n transaction_hash: string | null;\n}\n\nexport interface PerpTradeStreamPosition {\n account_id: Decimal;\n base: Decimal;\n base_multiplier: Decimal;\n funding_value: Decimal;\n adl_unwind_price: Decimal;\n last_price: Decimal;\n last_price_timestamp: Decimal;\n realized_pnl: Decimal;\n average_entry_funding_value: Decimal;\n session: Decimal;\n}\n\nexport interface PerpTradeStreamResult {\n id: string;\n event_sequence_number: Decimal;\n me_nonce: Decimal;\n market_id: Decimal;\n account_id: Decimal;\n counterparty_account_id: Decimal;\n /** Lowercased owner of `account_id`; absent for account 0 (PRO-1172). */\n account_owner?: string;\n /** Lowercased owner of `counterparty_account_id`; absent for account 0. */\n counterparty_account_owner?: string;\n executed_base: Decimal;\n fee: Decimal;\n price: Decimal;\n is_match_order: boolean;\n liquidation_type: Decimal;\n execution_type: number;\n protocol_fee_credit: Decimal;\n taker_rebate_credit: Decimal;\n pool_fee_credit: Decimal;\n exchange_fee_credit: null;\n maker_fee_credit: null;\n maker_fee_debit: null;\n account_order_id: Decimal;\n counterparty_order_id: Decimal;\n position_previous_average_entry_funding_value: Decimal;\n position_previous_adl_unwind_price: Decimal;\n position_previous_base_multiplier: Decimal;\n position_previous_funding_value: Decimal;\n position_previous_last_price: Decimal;\n position_previous_realized_pnl: Decimal;\n counterparty_previous_average_entry_funding_value: Decimal;\n counterparty_previous_adl_unwind_price: Decimal;\n counterparty_previous_base_multiplier: Decimal;\n counterparty_previous_funding_value: Decimal;\n counterparty_previous_last_price: Decimal;\n counterparty_previous_realized_pnl: Decimal;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n unique_id: bigint;\n exchange_id: Decimal;\n referrer_account_id: Decimal;\n referrer_fee_credit: Decimal;\n account: PerpTradeStreamPosition;\n counterparty: PerpTradeStreamPosition;\n}\n\nexport type PerpTradeStreamMessage = GenericReplicationMessage<\n PerpTradeStreamResult,\n 'trade'\n>;\n\nexport interface BalanceStreamSide {\n account_id: Decimal;\n balance: Decimal;\n /** Lowercased owner address (address(0) for account 0); part of the ledger enrichment. */\n owner?: string;\n}\n\n/**\n * One built leg of a Transfers event. The account ledger fields (PRO-852,\n * design §3.2) label and link the leg the same way its account_transfers row\n * is: `type` from command type and leg position, `fill_id` (ME nonce) and\n * `market_id` for perp fills settled after reya-network#752,\n * `spot_execution_sequence_number` / `spot_market_id` for spot trades and\n * auto-exchanges. Consumers that only track balances ignore them.\n */\nexport interface BalanceStreamTransfer {\n transfer_event_sequence_number: Decimal;\n collateral: string;\n from: BalanceStreamSide;\n to: BalanceStreamSide;\n // The ledger enrichment (PRO-852), included on all newly published legs;\n // a leg without it feeds the balances rail and nothing else.\n /** Position of the leg in the event's array. */\n leg_index?: number;\n /** Amount moved (`netDepositsDelta`), raw token units, always positive. */\n amount?: Decimal;\n /** TransferType label; OTHER when the leg is not recognised. */\n type?: string;\n fill_id?: Decimal | null;\n market_id?: Decimal | null;\n spot_execution_sequence_number?: Decimal | null;\n spot_market_id?: Decimal | null;\n}\n\n/** A leg as published while the ledger is on: every enrichment field present. */\nexport type EnrichedBalanceStreamTransfer = Required<\n Omit<BalanceStreamTransfer, 'from' | 'to'>\n> & {\n from: Required<BalanceStreamSide>;\n to: Required<BalanceStreamSide>;\n};\n\nexport interface BalanceStreamResult {\n event_sequence_number: Decimal;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n command_type: Decimal;\n me_nonce: Decimal | null;\n spot_market_id: Decimal | null;\n account_id: Decimal | null;\n counterparty_account_id: Decimal | null;\n /** The ME perp fill a MatchOrder entry settles; null otherwise. */\n perp_fill: { market_id: Decimal; me_nonce: Decimal } | null;\n transfers: BalanceStreamTransfer[];\n}\n\nexport type BalanceStreamMessage = GenericReplicationMessage<\n BalanceStreamResult,\n 'transfers'\n>;\n\ntype execution_bust = {\n event_sequence_number: bigint;\n market_id: Decimal;\n market_type: string;\n account_id: Decimal;\n counterparty_account_id: Decimal;\n account_order_id: bigint;\n counterparty_order_id: bigint;\n me_nonce: Decimal | null;\n exchange_id: Decimal;\n failed_base: Decimal;\n price: Decimal;\n is_long: boolean;\n reason: string;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n created_at: string;\n};\n\n// Bridge-carried money-in/out transactions, recorded as soon as the source\n// chain tx is broadcast and reconciled once the bridge delivers. Declared with\n// the database's own types; `Stringified<>` maps Date and Decimal to strings\n// for the replication payload.\ntype bridge_transactions_margin_account = {\n source_tx_hash: string;\n destination_tx_hash: string | null;\n source_chain_id: number;\n destination_chain_id: number;\n account_id: Decimal;\n status: string;\n amount: Decimal;\n type: string;\n asset_id: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\ntype ReplicationMessage =\n // Extract the union of all `replication` values from TradingApiSource\n | Exclude<TradingApiSource[keyof TradingApiSource]['replication'], never>\n // add messages that do not exists in TradingApiSource\n | GenericReplicationMessage<\n account_owner_updated_snapshot,\n 'account_owner_updated_snapshot'\n >\n | GenericReplicationMessage<\n account_collateral_balance_entries,\n 'account_collateral_balance_entries'\n >\n | GenericReplicationMessage<account_real_balance, 'account_real_balances'>\n | GenericReplicationMessage<\n OrdersGatewayPermissionUpdatedStreamResult,\n 'orders_gateway_permission'\n >\n // PRO-126 Bug 7: `ConditionalOrdersSensitive` replication channel\n // retired with the rest of the `ConditionalOrders` DB pipeline.\n // Order data flows through the ME's `{orders}:changes` stream.\n | GenericReplicationMessage<spot_execution, 'spot_executions'>\n | GenericReplicationMessage<Order, 'orders'>\n | GenericReplicationMessage<execution_bust, 'execution_busts'>\n | GenericReplicationMessage<\n bridge_transactions_margin_account,\n 'BridgeTransactionsMarginAccount'\n >;\n\nexport type SocketDepositChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaPeriphery: Address;\n vaultAddress: Address;\n connectorAddress: Address;\n msgGasLimit: string;\n bridgeTime: number;\n};\n\nexport type SocketWithdrawChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaCore: Address;\n msgGasLimit: string;\n bridgeFee: string;\n bridgeTime: number;\n};\n\nexport type LayerzeroDepositChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaPeriphery: Address;\n dstEid: number;\n extraOptions: string;\n bridgeTime: number;\n};\n\nexport type LayerzeroWithdrawChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaCore: Address;\n dstEid: number;\n bridgeFee: string;\n bridgeTime: number;\n};\n\nexport type SocketDepositInfo =\n | { enabled: false }\n | { enabled: true; chains: SocketDepositChainDetails[]; minAmount: number };\n\nexport type SocketWithdrawInfo =\n | { enabled: false }\n | { enabled: true; chains: SocketWithdrawChainDetails[]; minAmount: number };\n\nexport type LayerzeroDepositInfo =\n | { enabled: false }\n | {\n enabled: true;\n minAmount: number;\n chains: LayerzeroDepositChainDetails[];\n };\n\nexport type LayerzeroWithdrawInfo =\n | { enabled: false }\n | {\n enabled: true;\n minAmount: number;\n chains: LayerzeroWithdrawChainDetails[];\n };\n\nexport type TransferInfo = { enabled: boolean };\n\nexport type SpotInfo =\n | { enabled: false }\n | { enabled: true; spotMarketSymbol: string };\n\nexport type DisplayInfo = {\n advertisedInSpot: boolean;\n advertisedInPerp: boolean;\n displayName: string;\n displayDecimals: number;\n};\n\nexport type CollateralDefinition = {\n id: Uppercase<string>;\n address: Address;\n assetPairId: string;\n priceHaircut: string;\n liquidationDiscount: string;\n decimals: number;\n socketDepositInfo: SocketDepositInfo;\n socketWithdrawInfo: SocketWithdrawInfo;\n layerzeroDepositInfo: LayerzeroDepositInfo;\n layerzeroWithdrawInfo: LayerzeroWithdrawInfo;\n transferInfo: TransferInfo;\n spotInfo: SpotInfo;\n displayInfo: DisplayInfo;\n};\n\n// Per-collateral, per-source-chain wallet balance available to deposit. This is\n// the user's ERC20 balance of the collateral's source-chain token (what a\n// deposit spends), read via `balanceOf`. `balance` is a human-readable decimal\n// string; it is `null` when every RPC for that chain failed.\nexport type CollateralChainBalance = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n balance: string | null;\n};\n\nexport type CollateralWalletBalance = {\n id: Uppercase<string>;\n chains: CollateralChainBalance[];\n};\n\nexport type Replication = {\n [K in ReplicationMessage as `replication:${K['model']}`]: Extract<\n ReplicationMessage,\n { model: K['model'] }\n >;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"trading-api-types.js","sourceRoot":"/","sources":["trading-api-types.ts"],"names":[],"mappings":";;;AAYa,QAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACjB,CAAC;AA6HF,wCAAwC;AAC3B,QAAA,uBAAuB,GAAG,EAAE,CAAC;AAE1C,6EAA6E;AAC7E,wEAAwE;AACxE,wEAAwE;AACxE,4EAA4E;AAC5E,IAAM,sBAAsB,GAAG,yCAAyC,CAAC;AAEzE;;;;GAIG;AACI,IAAM,gBAAgB,GAAG,UAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,IAAI,+BAAuB;QACtC,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC;AACX,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B;AAEF;;;;;GAKG;AACU,QAAA,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAErD,QAAA,sBAAsB,GAAkB,MAAM,CAAC;AAC/C,QAAA,oBAAoB,GAAkB,OAAO,CAAC;AAEpD,IAAM,eAAe,GAAG,UAAC,GAAY;IAC1C,OAAC,uBAAsC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAArD,CAAqD,CAAC;AAD3C,QAAA,eAAe,mBAC4B;AAExD;;;;;;GAMG;AACI,IAAM,kBAAkB,GAAG,UAAC,GAAY;IAC7C,OAAA,IAAA,uBAAe,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,8BAAsB;AAAnD,CAAmD,CAAC;AADzC,QAAA,kBAAkB,sBACuB","sourcesContent":["import { ParamsDictionary, Query } from 'express-serve-static-core';\nimport { Address, AssetPair } from './types';\nimport {\n AddressParam,\n ApiEndpoint,\n ApiInfiniteListEndpoint,\n ApiListEndpoint,\n Decimal,\n PaginatedQueryParams,\n Stringified,\n} from './api-types';\n\nexport const AccountStatusValues = {\n OPEN: 'OPEN',\n CLOSED: 'CLOSED',\n};\n\nexport type AccountStatus =\n (typeof AccountStatusValues)[keyof typeof AccountStatusValues];\n\ntype CandleResolution = '1' | '5' | '15' | '30' | '60' | '240' | '1D';\n\ntype Candle = {\n time: number;\n open: number;\n high: number;\n low: number;\n close: number;\n assetPairId: AssetPair;\n resolution: CandleResolution;\n};\n\n// Database-shaped perp execution row exposed by provider and API types.\ntype Order = {\n id: string;\n market_id: Decimal | null;\n account_id: Decimal | null;\n executed_base: Decimal | null;\n fee: Decimal | null;\n price: Decimal | null;\n is_match_order: boolean | null;\n liquidation_type: Decimal | null;\n execution_type: number | null;\n transaction_hash: string;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n event_sequence_number: bigint | null;\n exchange_id: Decimal | null;\n created_at: Date;\n counterparty_account_id: Decimal | null;\n counterparty_adl_unwind_price: Decimal | null;\n counterparty_average_entry_funding_value: Decimal | null;\n counterparty_base: Decimal | null;\n counterparty_base_multiplier: Decimal | null;\n counterparty_funding_value: Decimal | null;\n counterparty_last_price: Decimal | null;\n counterparty_last_price_timestamp: Decimal | null;\n counterparty_previous_adl_unwind_price: Decimal | null;\n counterparty_previous_average_entry_funding_value: Decimal | null;\n counterparty_previous_base_multiplier: Decimal | null;\n counterparty_previous_funding_value: Decimal | null;\n counterparty_previous_last_price: Decimal | null;\n counterparty_previous_realized_pnl: Decimal | null;\n counterparty_realized_pnl: Decimal | null;\n counterparty_session: Decimal | null;\n position_adl_unwind_price: Decimal | null;\n position_average_entry_funding_value: Decimal | null;\n position_base: Decimal | null;\n position_base_multiplier: Decimal | null;\n position_funding_value: Decimal | null;\n position_last_price: Decimal | null;\n position_last_price_timestamp: Decimal | null;\n position_previous_adl_unwind_price: Decimal | null;\n position_previous_average_entry_funding_value: Decimal | null;\n position_previous_base_multiplier: Decimal | null;\n position_previous_funding_value: Decimal | null;\n position_previous_last_price: Decimal | null;\n position_previous_realized_pnl: Decimal | null;\n position_realized_pnl: Decimal | null;\n position_session: Decimal | null;\n referrer_account_id: Decimal | null;\n referrer_fee_credit: Decimal | null;\n // V3 fields\n protocol_fee_credit: Decimal | null;\n taker_rebate_credit: Decimal | null;\n pool_fee_credit: Decimal | null;\n exchange_fee_credit: Decimal | null;\n maker_fee_credit: Decimal | null;\n maker_fee_debit: Decimal | null;\n account_order_id: bigint | null;\n counterparty_order_id: bigint | null;\n me_nonce: Decimal | null;\n};\n\ntype Position = {\n market_id: Decimal;\n account_id: Decimal;\n base: Decimal | null;\n realized_pnl: Decimal | null;\n last_price: Decimal | null;\n last_price_timestamp: Decimal | null;\n funding_value: Decimal | null;\n base_multiplier: Decimal | null;\n adl_unwind_price: Decimal | null;\n average_entry_funding_value: Decimal | null;\n session: Decimal | null;\n /**\n * Funding settled at the position's fills since its session opened (raw\n * E18, RET-281). Stored by the indexer; absent from trade-stream rows, whose\n * consumers derive it with `nextSessionSettledFunding`. Null while unknown.\n */\n session_settled_funding?: Decimal | null;\n exchange_id: Decimal | null;\n event_sequence_number: bigint | null;\n referrer_account_id: Decimal | null;\n referrer_fee_credit: Decimal | null;\n transaction_hash: string;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n adjusted_base: Decimal | null;\n adl_realized_pnl: Decimal | null;\n};\n\n// PRO-126 Bug 7: `ConditionalOrder` + `ConditionalOrderSensitive`\n// trading-api-types retired with the rest of the legacy\n// `ConditionalOrders` DB pipeline. They modeled the legacy row shape\n// for the dead V1 `/wallet/:address/openOrders` endpoint + the dead\n// `replication:ConditionalOrdersSensitive` broadcast channel; both\n// callers have been removed.\n\ntype Account = {\n account_id: Decimal;\n name: string;\n status: AccountStatus;\n updated_timestamp_ms: Decimal;\n source: string | null;\n};\n\n// Matches the app's account-name field.\nexport const ACCOUNT_NAME_MAX_LENGTH = 25;\n\n// Control, format (bidi, zero-width), surrogate and private-use code points,\n// plus the line and paragraph separators. Not unassigned (Cn): that set\n// depends on the runtime's Unicode tables and would reject newer emoji.\n// Sequence emoji joined by U+200D (ZWJ) or tag characters are rejected too.\nconst ACCOUNT_NAME_FORBIDDEN = /[\\p{Cc}\\p{Cf}\\p{Cs}\\p{Co}\\u2028\\u2029]/u;\n\n/**\n * The trimmed account name, or null when it is not a non-empty string of at\n * most ACCOUNT_NAME_MAX_LENGTH characters free of forbidden code points.\n * Shared by the rename endpoint and the relay's account-creation name.\n */\nexport const parseAccountName = (raw: unknown): string | null => {\n if (typeof raw !== 'string') return null;\n const name = raw.trim();\n return name.length > 0 &&\n name.length <= ACCOUNT_NAME_MAX_LENGTH &&\n !ACCOUNT_NAME_FORBIDDEN.test(name)\n ? name\n : null;\n};\n\n/**\n * Allow-listed `AccountProfile.source` values, set once when the relay writes\n * the profile of a new account from `metadata.accountSource`. 'reya' is the\n * default, 'rage' the Rage Trade integration, and 'agent' marks the Agent\n * account, which the V2 API reports as `AGENTPERP`.\n */\nexport const ACCOUNT_SOURCES = ['reya', 'rage', 'agent'] as const;\nexport type AccountSource = (typeof ACCOUNT_SOURCES)[number];\nexport const DEFAULT_ACCOUNT_SOURCE: AccountSource = 'reya';\nexport const AGENT_ACCOUNT_SOURCE: AccountSource = 'agent';\n\nexport const isAccountSource = (raw: unknown): raw is AccountSource =>\n (ACCOUNT_SOURCES as readonly unknown[]).includes(raw);\n\n/**\n * The source exactly as sent when it is allow-listed, otherwise\n * DEFAULT_ACCOUNT_SOURCE. Unknown values are normalised, not rejected: the\n * account already exists on-chain when its profile is written, and rejecting\n * would only lose the account name. Matching is exact, so only 'agent' makes\n * an Agent account.\n */\nexport const parseAccountSource = (raw: unknown): AccountSource =>\n isAccountSource(raw) ? raw : DEFAULT_ACCOUNT_SOURCE;\n\n/** Body of `PUT /api/trading/wallet/:address/account/:accountId/name`. */\nexport type UpdateAccountNameBody = { name: string };\n\ntype AccountBalance = {\n account_id: Decimal | null;\n collateral: string | null;\n balance?: Decimal | null;\n delta?: Decimal | null;\n};\n\ntype spot_execution = {\n account_id: Decimal;\n counterparty_account_id: Decimal;\n // Order attribution is absent for auto-exchange executions: there is no\n // matched order, so the chain emits no exchange/order ids and the DB\n // columns are NULL. Matches the `spot_executions` Prisma model.\n exchange_id: Decimal | null;\n executed_base: Decimal;\n price: Decimal;\n account_order_id: bigint | null;\n counterparty_order_id: bigint | null;\n me_nonce: Decimal | null;\n spot_market_id: Decimal;\n is_auto_exchange: boolean;\n is_long: boolean;\n event_sequence_number: bigint;\n parent_event_sequence_number: bigint | null;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n created_at: string;\n};\n\ntype account_real_balance = {\n account_id: Decimal;\n collateral: string;\n balance: Decimal;\n rpnl: Decimal;\n event_sequence_number: bigint | null;\n transfer_event_sequence_number: bigint | null;\n parent_event_sequence_number: bigint | null;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n};\n\n// `Leverage` is still referenced by the `wallet/:address/leverages`\n// endpoint below, so it is kept; `AutoExchange` (a dead legacy type with\n// no remaining references) was removed in #2713/#2710.\ntype Leverage = {\n accountId: Decimal;\n marketId: Decimal;\n leverage: number;\n createdAt: Date;\n updatedAt: Date;\n};\n\ntype WalletStats = {\n /** The wallet's volume over the trailing 14 days. */\n volume_14d: Decimal;\n /** The wallet's volume over the trailing `lookback_window_seconds`. */\n lookback_volume: Decimal;\n lookback_window_seconds: number;\n};\n\ntype BalanceHistoryPoint = {\n timestamp: number;\n balance: number;\n /**\n * PnL since the first point: the change in balance minus the change in\n * net deposits, withdrawals and transfers.\n */\n pnl: number;\n};\n\ntype MarketData = {\n marketId: string;\n updatedAt: number;\n longOI: number;\n shortOI: number;\n longSkewPercentage: number;\n shortSkewPercentage: number;\n openInterest?: number;\n fundingRate?: number;\n fundingRateVelocity?: number;\n longFundingValue?: number;\n shortFundingValue?: number;\n last24hVolume: number;\n priceChange24H?: number;\n priceChange24HPercentage?: number;\n maxAmountBaseLong?: number;\n maxAmountSizeLong?: number;\n maxAmountBaseShort?: number;\n maxAmountSizeShort?: number;\n /** ME mark price, despite the name. Surfaced as v2 `MarketSummary.markPrice`. */\n oraclePrice?: number;\n /**\n * Orderbook mid. Absent on an empty or one-sided book\n */\n poolPrice?: number;\n /**\n * Stork index price, rUSD-quoted (divided by USDCUSD, like the collateral\n * feeds). Surfaced as v2 `MarketSummary.oraclePrice` — the name differs\n * because the v1 `oraclePrice` above is already taken by the mark price.\n * Absent when the index feed has no fresh tick.\n */\n indexPrice?: number;\n pricesUpdatedAt?: number;\n longBaseMultiplier?: number;\n shortBaseMultiplier?: number;\n longAdlUnwindPrice?: number;\n shortAdlUnwindPrice?: number;\n depthFactor?: number;\n priceSpread?: number;\n logPriceMultiplier?: number;\n};\n\ntype SpotMarketData = {\n spotMarketId: string;\n symbol: string;\n updatedAt: number;\n volume24h: number;\n pxChange24h?: number;\n /** Stork price for the base token, rUSD-quoted (divided by USDCUSD). */\n oraclePrice?: number;\n /**\n * Spot orderbook mid, read from the ME `{depth}:bbo:<id>` key. Absent on an\n * empty or one-sided book — spot has no mark price to fall back to, unlike\n * the perp `poolPrice` above.\n */\n throttledMidPrice?: number;\n};\n\ntype MarketTrackers = {\n market_data_id: Decimal;\n passive_pool_id: Decimal | null;\n pool_account_id: Decimal | null;\n quote_token: string | null;\n quote_token_decimals: Decimal | null;\n last_funding_velocity: Decimal | null;\n last_funding_timestamp: Decimal | null;\n last_mtm_price: Decimal | null;\n last_mtm_timestamp: Decimal | null;\n long_trackers_funding_value: Decimal | null;\n last_funding_rate: Decimal | null;\n long_trackers_base_multiplier: Decimal | null;\n long_trackers_adl_unwind_price: Decimal | null;\n short_trackers_funding_value: Decimal | null;\n short_trackers_base_multiplier: Decimal | null;\n short_trackers_adl_unwind_price: Decimal | null;\n open_interest: Decimal | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n price_spread: Decimal | null;\n depth_factor: Decimal | null;\n log_price_multiplier: Decimal | null;\n mark_price: Decimal | null;\n mark_price_timestamp: Decimal | null;\n funding_rate: Decimal | null;\n funding_rate_timestamp: Decimal | null;\n};\n\nexport type TradingApiReplication<\n ReplicationTable extends ReplicationModel = never,\n Replication = never,\n> = {\n replication: ReplicationTable extends never\n ? never\n : GenericReplicationMessage<Replication, ReplicationTable>;\n};\n\nexport type TradingApiEndpoint<\n Response,\n Params,\n ReplicationTable extends ReplicationModel = never,\n Replication = Response,\n Query = never,\n> = ApiEndpoint<Response, Params, Query> &\n TradingApiReplication<ReplicationTable, Replication>;\n\nexport type TradingApiListEndpoint<\n Response,\n Params = never,\n ReplicationTable extends ReplicationModel = never,\n Replication = Response,\n Query = never,\n> = ApiListEndpoint<Response, Params, Query> &\n TradingApiReplication<ReplicationTable, Replication>;\n\nexport type TradingApiInfiniteListEndpoint<\n Response,\n Params = never,\n ReplicationTable extends ReplicationModel = never,\n Replication = Response,\n Query = PaginatedQueryParams,\n> = ApiInfiniteListEndpoint<Response, Params, Query> &\n TradingApiReplication<ReplicationTable, Replication>;\n\nexport type TradingApiSource = {\n 'poolBalance/:poolId': TradingApiEndpoint<\n {\n id: number;\n timestamp: bigint;\n pool_id: number;\n value: Decimal;\n apy: Decimal;\n share_price: Decimal;\n share_price_index: Decimal;\n } | null,\n {\n poolId?: string;\n }\n >;\n 'poolBalance/:poolId/apy-history': TradingApiEndpoint<\n { timestampInMs: number; apy: number }[],\n { poolId?: string },\n never,\n { timestampInMs: number; apy: number }[],\n { timeframeMs: string; granularity: string }\n >;\n 'wallet/:address/leverages': TradingApiListEndpoint<\n Leverage,\n { address: string },\n 'accountLeveragePerMarket'\n >;\n 'markets/data': TradingApiListEndpoint<MarketData, never, 'marketData'>;\n 'spotMarkets/data': TradingApiListEndpoint<\n SpotMarketData,\n never,\n 'spotMarketData'\n >;\n 'markets/configuration': TradingApiListEndpoint<{\n market_id: Decimal;\n risk_matrix_index: Decimal | null;\n max_open_base: Decimal | null;\n minimum_order_base: Decimal | null;\n base_spacing: Decimal | null;\n price_spacing: Decimal | null;\n oracle_node_id: string | null;\n mtm_window: Decimal | null;\n dutch_config_lambda: Decimal | null;\n dutch_config_min_base: Decimal | null;\n slippage_params_phi: Decimal | null;\n slippage_params_beta: Decimal | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n }>;\n 'markets/storage': TradingApiListEndpoint<{\n market_id: Decimal;\n quote_collateral: string | null;\n instrument_address: string | null;\n name: string | null;\n risk_block_id: Decimal | null;\n collateral_pool_id: Decimal | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n }>;\n 'markets/trackers': TradingApiListEndpoint<\n MarketTrackers,\n never,\n 'marketTrackers'\n >;\n 'market/:marketId/trackers': TradingApiEndpoint<\n MarketTrackers,\n {\n marketId: string;\n },\n 'marketTrackers'\n >;\n 'market/:marketId/data': TradingApiEndpoint<\n MarketData,\n {\n marketId: string;\n },\n 'marketData'\n >;\n 'wallet/:address/positions': TradingApiListEndpoint<\n Position,\n AddressParam,\n 'position',\n Omit<Position, 'adjusted_base' | 'adl_realized_pnl'>\n >;\n // PRO-126 Bug 7: V1 `/wallet/:address/openOrders` endpoint type\n // retired. The route+controller were removed in trading.router.ts +\n // trading.controller.ts. V2 callers should use\n // `/v2/wallet/:address/openOrders` which serves both spot and perp\n // orders from the unified ME stream via AccountOrdersMap.\n // Bridge deposits and withdrawals for a wallet. Rows are registered by the\n // Reya app when it broadcasts the source-chain transaction, and reconciled\n // by the pending-transaction cron -- nothing else writes them, which is why\n // this is a v1 app endpoint rather than part of the general v2 API.\n 'wallet/:address/bridgeTransactions': TradingApiListEndpoint<\n bridge_transactions_margin_account,\n AddressParam,\n 'BridgeTransactionsMarginAccount'\n >;\n 'wallet/:address/accounts': TradingApiListEndpoint<\n Account,\n AddressParam,\n 'AccountProfile'\n >;\n 'wallet/:address/accounts/balances': TradingApiListEndpoint<\n AccountBalance,\n AddressParam,\n 'account_balances'\n >;\n 'wallet/:address/balanceHistory/:timestamp': TradingApiListEndpoint<\n BalanceHistoryPoint,\n {\n address: string;\n timestamp: string;\n },\n never,\n BalanceHistoryPoint,\n {\n /**\n * Comma-separated ids of the wallet's accounts to sum (e.g. the main\n * account, or one sub-account). Omitted: every account of the wallet.\n */\n accountIds?: string;\n }\n >;\n riskMatrices: TradingApiListEndpoint<\n {\n blockId: Decimal;\n matrix: string[][];\n },\n {\n poolId: string;\n }\n >;\n 'candle/:assetPairId/:resolution': TradingApiEndpoint<\n Candle | null,\n {\n resolution: CandleResolution;\n assetPairId: AssetPair;\n },\n 'storkPriceCandle',\n Candle\n >;\n 'candles/:assetPairId/:resolution': TradingApiEndpoint<\n {\n t: number[];\n o: number[];\n h: number[];\n l: number[];\n c: number[];\n },\n {\n resolution: CandleResolution;\n assetPairId: AssetPair;\n },\n never,\n never,\n {\n to: string;\n from: string;\n countBack?: string;\n }\n >;\n feeTierParameters: TradingApiListEndpoint<{\n tier_id: Decimal;\n taker_fee: Decimal;\n maker_fee: Decimal;\n volume: Decimal;\n }>;\n globalFeeParameters: TradingApiEndpoint<\n {\n og_discount: Decimal;\n vltz_discount: Decimal;\n referee_discount: Decimal;\n referrer_rebate: Decimal;\n affiliate_referrer_rebate: Decimal;\n },\n never\n >;\n 'wallet/:address/configuration': TradingApiEndpoint<\n {\n tier_id: Decimal;\n og_status: boolean;\n vltz_status: boolean;\n affiliate_status: boolean;\n referee_status: boolean;\n spread_discount_status: boolean;\n main_account_id: Decimal;\n },\n {\n address: string;\n }\n >;\n 'wallet/:address/stats': TradingApiEndpoint<\n WalletStats,\n {\n address: string;\n }\n >;\n 'wallet/:address/apiWalletStatus': TradingApiEndpoint<\n {\n enabledApiWallets: string[];\n },\n {\n address: string;\n }\n >;\n rlp: TradingApiEndpoint<\n {\n tvlInUsdc: number;\n tvlInRlp: number;\n rlpUsdcPrice: number;\n apy: {\n '1d': number;\n '7d': number;\n '30d': number;\n '365d': number;\n };\n numberOfDepositors: number;\n ageSeconds: number;\n },\n never\n >;\n 'wallet/:address/rlp': TradingApiEndpoint<\n {\n balanceInUsdc: number;\n balanceInRlp: number;\n },\n {\n address: string;\n }\n >;\n 'collaterals/definitions': TradingApiEndpoint<\n {\n collaterals: CollateralDefinition[];\n },\n never\n >;\n 'collaterals/balances/wallet/:address': TradingApiEndpoint<\n {\n collaterals: CollateralWalletBalance[];\n },\n {\n address: string;\n }\n >;\n // PUT with an `UpdateAccountNameBody` and a Dynamic `Authorization: Bearer`\n // token; only the account's owner may rename it.\n 'wallet/:address/account/:accountId/name': TradingApiEndpoint<\n Account,\n {\n address: string;\n accountId: string;\n }\n >;\n};\n\nexport type Req<P = ParamsDictionary, ReqQuery = Query> = {\n params: P;\n query: ReqQuery;\n};\n\nexport type TradingApi = {\n [K in keyof TradingApiSource as K]: {\n params: TradingApiSource[K]['params'];\n query: TradingApiSource[K]['query'];\n response: Stringified<TradingApiSource[K]['response']>;\n replication: Stringified<TradingApiSource[K]['replication']>;\n };\n};\n\ntype ReplicationModel = string | never;\n\nexport type GenericReplicationMessage<T, model extends ReplicationModel> =\n | {\n model: model;\n result: T;\n operation: 'create' | 'update' | 'upsert' | 'delete';\n }\n | {\n model: model;\n result: T[];\n operation: 'updateMany';\n }\n | {\n model: model;\n result: T[];\n operation: 'createMany';\n };\n\ntype account_collateral_balance_entries = {\n id: string;\n account_id: Decimal | null;\n collateral: string | null;\n amount: Decimal | null;\n transaction_hash: string;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n};\n\ntype account_owner_updated_snapshot = {\n account_id: Decimal;\n transaction_hash: string;\n new_owner: string | null;\n block_timestamp: Decimal | null;\n block_number: Decimal;\n unique_id: bigint | null;\n event_sequence_number: bigint | null;\n};\n\nexport interface OrdersGatewayPermissionUpdatedStreamResult {\n owner: string;\n delegate: string;\n permission_state: boolean;\n event_sequence_number: string;\n block_number: string;\n block_timestamp: string;\n transaction_hash: string | null;\n}\n\nexport interface PerpTradeStreamPosition {\n account_id: Decimal;\n base: Decimal;\n base_multiplier: Decimal;\n funding_value: Decimal;\n adl_unwind_price: Decimal;\n last_price: Decimal;\n last_price_timestamp: Decimal;\n realized_pnl: Decimal;\n average_entry_funding_value: Decimal;\n session: Decimal;\n}\n\nexport interface PerpTradeStreamResult {\n id: string;\n event_sequence_number: Decimal;\n me_nonce: Decimal;\n market_id: Decimal;\n account_id: Decimal;\n counterparty_account_id: Decimal;\n /** Lowercased owner of `account_id`; absent for account 0 (PRO-1172). */\n account_owner?: string;\n /** Lowercased owner of `counterparty_account_id`; absent for account 0. */\n counterparty_account_owner?: string;\n executed_base: Decimal;\n fee: Decimal;\n price: Decimal;\n is_match_order: boolean;\n liquidation_type: Decimal;\n execution_type: number;\n protocol_fee_credit: Decimal;\n taker_rebate_credit: Decimal;\n pool_fee_credit: Decimal;\n exchange_fee_credit: null;\n maker_fee_credit: null;\n maker_fee_debit: null;\n account_order_id: Decimal;\n counterparty_order_id: Decimal;\n position_previous_average_entry_funding_value: Decimal;\n position_previous_adl_unwind_price: Decimal;\n position_previous_base_multiplier: Decimal;\n position_previous_funding_value: Decimal;\n position_previous_last_price: Decimal;\n position_previous_realized_pnl: Decimal;\n counterparty_previous_average_entry_funding_value: Decimal;\n counterparty_previous_adl_unwind_price: Decimal;\n counterparty_previous_base_multiplier: Decimal;\n counterparty_previous_funding_value: Decimal;\n counterparty_previous_last_price: Decimal;\n counterparty_previous_realized_pnl: Decimal;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n unique_id: bigint;\n exchange_id: Decimal;\n referrer_account_id: Decimal;\n referrer_fee_credit: Decimal;\n account: PerpTradeStreamPosition;\n counterparty: PerpTradeStreamPosition;\n}\n\nexport type PerpTradeStreamMessage = GenericReplicationMessage<\n PerpTradeStreamResult,\n 'trade'\n>;\n\nexport interface BalanceStreamSide {\n account_id: Decimal;\n balance: Decimal;\n /** Lowercased owner address (address(0) for account 0); part of the ledger enrichment. */\n owner?: string;\n}\n\n/**\n * One built leg of a Transfers event. The account ledger fields (PRO-852,\n * design §3.2) label and link the leg the same way its account_transfers row\n * is: `type` from command type and leg position, `fill_id` (ME nonce) and\n * `market_id` for perp fills settled after reya-network#752,\n * `spot_execution_sequence_number` / `spot_market_id` for spot trades and\n * auto-exchanges. Consumers that only track balances ignore them.\n */\nexport interface BalanceStreamTransfer {\n transfer_event_sequence_number: Decimal;\n collateral: string;\n from: BalanceStreamSide;\n to: BalanceStreamSide;\n // The ledger enrichment (PRO-852), included on all newly published legs;\n // a leg without it feeds the balances rail and nothing else.\n /** Position of the leg in the event's array. */\n leg_index?: number;\n /** Amount moved (`netDepositsDelta`), raw token units, always positive. */\n amount?: Decimal;\n /** TransferType label; OTHER when the leg is not recognised. */\n type?: string;\n fill_id?: Decimal | null;\n market_id?: Decimal | null;\n spot_execution_sequence_number?: Decimal | null;\n spot_market_id?: Decimal | null;\n}\n\n/** A leg as published while the ledger is on: every enrichment field present. */\nexport type EnrichedBalanceStreamTransfer = Required<\n Omit<BalanceStreamTransfer, 'from' | 'to'>\n> & {\n from: Required<BalanceStreamSide>;\n to: Required<BalanceStreamSide>;\n};\n\nexport interface BalanceStreamResult {\n event_sequence_number: Decimal;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n command_type: Decimal;\n me_nonce: Decimal | null;\n spot_market_id: Decimal | null;\n account_id: Decimal | null;\n counterparty_account_id: Decimal | null;\n /** The ME perp fill a MatchOrder entry settles; null otherwise. */\n perp_fill: { market_id: Decimal; me_nonce: Decimal } | null;\n transfers: BalanceStreamTransfer[];\n}\n\nexport type BalanceStreamMessage = GenericReplicationMessage<\n BalanceStreamResult,\n 'transfers'\n>;\n\ntype execution_bust = {\n event_sequence_number: bigint;\n market_id: Decimal;\n market_type: string;\n account_id: Decimal;\n counterparty_account_id: Decimal;\n account_order_id: bigint;\n counterparty_order_id: bigint;\n me_nonce: Decimal | null;\n exchange_id: Decimal;\n failed_base: Decimal;\n price: Decimal;\n is_long: boolean;\n reason: string;\n block_timestamp: Decimal;\n block_number: Decimal;\n transaction_hash: string;\n created_at: string;\n};\n\n// Bridge-carried money-in/out transactions, recorded as soon as the source\n// chain tx is broadcast and reconciled once the bridge delivers. Declared with\n// the database's own types; `Stringified<>` maps Date and Decimal to strings\n// for the replication payload.\ntype bridge_transactions_margin_account = {\n source_tx_hash: string;\n destination_tx_hash: string | null;\n source_chain_id: number;\n destination_chain_id: number;\n account_id: Decimal;\n status: string;\n amount: Decimal;\n type: string;\n asset_id: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\ntype ReplicationMessage =\n // Extract the union of all `replication` values from TradingApiSource\n | Exclude<TradingApiSource[keyof TradingApiSource]['replication'], never>\n // add messages that do not exists in TradingApiSource\n | GenericReplicationMessage<\n account_owner_updated_snapshot,\n 'account_owner_updated_snapshot'\n >\n | GenericReplicationMessage<\n account_collateral_balance_entries,\n 'account_collateral_balance_entries'\n >\n | GenericReplicationMessage<account_real_balance, 'account_real_balances'>\n | GenericReplicationMessage<\n OrdersGatewayPermissionUpdatedStreamResult,\n 'orders_gateway_permission'\n >\n // PRO-126 Bug 7: `ConditionalOrdersSensitive` replication channel\n // retired with the rest of the `ConditionalOrders` DB pipeline.\n // Order data flows through the ME's `{orders}:changes` stream.\n | GenericReplicationMessage<spot_execution, 'spot_executions'>\n | GenericReplicationMessage<Order, 'orders'>\n | GenericReplicationMessage<execution_bust, 'execution_busts'>\n | GenericReplicationMessage<\n bridge_transactions_margin_account,\n 'BridgeTransactionsMarginAccount'\n >;\n\nexport type SocketDepositChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaPeriphery: Address;\n vaultAddress: Address;\n connectorAddress: Address;\n msgGasLimit: string;\n bridgeTime: number;\n};\n\nexport type SocketWithdrawChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaCore: Address;\n msgGasLimit: string;\n bridgeFee: string;\n bridgeTime: number;\n};\n\nexport type LayerzeroDepositChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaPeriphery: Address;\n dstEid: number;\n extraOptions: string;\n bridgeTime: number;\n};\n\nexport type LayerzeroWithdrawChainDetails = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n collateralName: string;\n collateralAddressInReyaCore: Address;\n dstEid: number;\n bridgeFee: string;\n bridgeTime: number;\n};\n\nexport type SocketDepositInfo =\n | { enabled: false }\n | { enabled: true; chains: SocketDepositChainDetails[]; minAmount: number };\n\nexport type SocketWithdrawInfo =\n | { enabled: false }\n | { enabled: true; chains: SocketWithdrawChainDetails[]; minAmount: number };\n\nexport type LayerzeroDepositInfo =\n | { enabled: false }\n | {\n enabled: true;\n minAmount: number;\n chains: LayerzeroDepositChainDetails[];\n };\n\nexport type LayerzeroWithdrawInfo =\n | { enabled: false }\n | {\n enabled: true;\n minAmount: number;\n chains: LayerzeroWithdrawChainDetails[];\n };\n\nexport type TransferInfo = { enabled: boolean };\n\nexport type SpotInfo =\n | { enabled: false }\n | { enabled: true; spotMarketSymbol: string };\n\nexport type DisplayInfo = {\n advertisedInSpot: boolean;\n advertisedInPerp: boolean;\n displayName: string;\n displayDecimals: number;\n};\n\nexport type CollateralDefinition = {\n id: Uppercase<string>;\n address: Address;\n assetPairId: string;\n priceHaircut: string;\n liquidationDiscount: string;\n decimals: number;\n socketDepositInfo: SocketDepositInfo;\n socketWithdrawInfo: SocketWithdrawInfo;\n layerzeroDepositInfo: LayerzeroDepositInfo;\n layerzeroWithdrawInfo: LayerzeroWithdrawInfo;\n transferInfo: TransferInfo;\n spotInfo: SpotInfo;\n displayInfo: DisplayInfo;\n};\n\n// Per-collateral, per-source-chain wallet balance available to deposit. This is\n// the user's ERC20 balance of the collateral's source-chain token (what a\n// deposit spends), read via `balanceOf`. `balance` is a human-readable decimal\n// string; it is `null` when every RPC for that chain failed.\nexport type CollateralChainBalance = {\n chainId: number;\n chainName: string;\n collateralAddress: Address;\n balance: string | null;\n};\n\nexport type CollateralWalletBalance = {\n id: Uppercase<string>;\n chains: CollateralChainBalance[];\n};\n\nexport type Replication = {\n [K in ReplicationMessage as `replication:${K['model']}`]: Extract<\n ReplicationMessage,\n { model: K['model'] }\n >;\n};\n"]}
|
|
@@ -88,6 +88,12 @@ type Position = {
|
|
|
88
88
|
adl_unwind_price: Decimal | null;
|
|
89
89
|
average_entry_funding_value: Decimal | null;
|
|
90
90
|
session: Decimal | null;
|
|
91
|
+
/**
|
|
92
|
+
* Funding settled at the position's fills since its session opened (raw
|
|
93
|
+
* E18, RET-281). Stored by the indexer; absent from trade-stream rows, whose
|
|
94
|
+
* consumers derive it with `nextSessionSettledFunding`. Null while unknown.
|
|
95
|
+
*/
|
|
96
|
+
session_settled_funding?: Decimal | null;
|
|
91
97
|
exchange_id: Decimal | null;
|
|
92
98
|
event_sequence_number: bigint | null;
|
|
93
99
|
referrer_account_id: Decimal | null;
|
|
@@ -181,7 +187,9 @@ type Leverage = {
|
|
|
181
187
|
updatedAt: Date;
|
|
182
188
|
};
|
|
183
189
|
type WalletStats = {
|
|
190
|
+
/** The wallet's volume over the trailing 14 days. */
|
|
184
191
|
volume_14d: Decimal;
|
|
192
|
+
/** The wallet's volume over the trailing `lookback_window_seconds`. */
|
|
185
193
|
lookback_volume: Decimal;
|
|
186
194
|
lookback_window_seconds: number;
|
|
187
195
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading-api-types.d.ts","sourceRoot":"/","sources":["trading-api-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trading-api-types.d.ts","sourceRoot":"/","sources":["trading-api-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,6 +71,53 @@ export declare function calculateSettledPositionPnl(position: RealizedBalancePos
|
|
|
71
71
|
* as in settlement.
|
|
72
72
|
*/
|
|
73
73
|
export declare function calculatePositionFundingSinceChange(position: RealizedBalancePosition, trackers: RealizedBalanceTrackers | undefined): BigNumber;
|
|
74
|
+
/**
|
|
75
|
+
* Raw E18 funding on an open position since its session (the contract's
|
|
76
|
+
* `position.session`) opened, positive received: the funding settled at its
|
|
77
|
+
* fills since then (positions.session_settled_funding, RET-281) plus
|
|
78
|
+
* calculatePositionFundingSinceChange. Null while the settled part is unknown
|
|
79
|
+
* (a session opened before the indexer kept it, not yet backfilled).
|
|
80
|
+
*/
|
|
81
|
+
export declare function calculatePositionFundingSinceOpen(position: RealizedBalancePosition & {
|
|
82
|
+
session_settled_funding?: {
|
|
83
|
+
toString(): string;
|
|
84
|
+
} | null;
|
|
85
|
+
}, trackers: RealizedBalanceTrackers | undefined): BigNumber | null;
|
|
86
|
+
/** A stored position's fields `nextSessionSettledFunding` reads (raw E18). */
|
|
87
|
+
export type SessionFundingPosition = {
|
|
88
|
+
base: {
|
|
89
|
+
toString(): string;
|
|
90
|
+
} | null;
|
|
91
|
+
funding_value: {
|
|
92
|
+
toString(): string;
|
|
93
|
+
} | null;
|
|
94
|
+
base_multiplier: {
|
|
95
|
+
toString(): string;
|
|
96
|
+
} | null;
|
|
97
|
+
session: {
|
|
98
|
+
toString(): string;
|
|
99
|
+
} | null;
|
|
100
|
+
session_settled_funding?: {
|
|
101
|
+
toString(): string;
|
|
102
|
+
} | null;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* positions.session_settled_funding after a fill (RET-281), as the
|
|
106
|
+
* perp-execution indexer's upsert computes it (persistPerpExecutionCte.ts):
|
|
107
|
+
* raw E18 funding settled into the position at its fills since its current
|
|
108
|
+
* session (the contract's `position.session`) opened, positive received.
|
|
109
|
+
*
|
|
110
|
+
* - No stored position, or a new session (opened from flat or flipped): 0.
|
|
111
|
+
* The opening fill's settlement belonged to the previous position. A
|
|
112
|
+
* stored position from before the `session` column has none to compare:
|
|
113
|
+
* there flat before, or the other side, opens one.
|
|
114
|
+
* - Within a session: plus computeFundingCashflow of the stored position
|
|
115
|
+
* against the fill's post-fill funding value, which within a session is
|
|
116
|
+
* the value it settled at.
|
|
117
|
+
* - Unknown (null) stays unknown; a flat position or a zero multiplier
|
|
118
|
+
* accrues nothing.
|
|
119
|
+
*/
|
|
120
|
+
export declare function nextSessionSettledFunding(previous: SessionFundingPosition | undefined, next: Pick<SessionFundingPosition, 'session' | 'funding_value' | 'base'>): string | null;
|
|
74
121
|
/**
|
|
75
122
|
* Returns raw E18 PnL aligned to collateral units. The instrument floors EACH
|
|
76
123
|
* market's PnL to quote-token precision before Core aggregates collateral info.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realized-balance.d.ts","sourceRoot":"/","sources":["utils/realized-balance.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAClC,IAAI,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,aAAa,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7C,eAAe,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,gBAAgB,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,UAAU,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1C,wFAAwF;IACxF,YAAY,CAAC,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,0BAA0B,EAAE,MAAM,CAAC;IACnC,2BAA2B,EAAE,MAAM,CAAC;IACpC,0BAA0B,EAAE,MAAM,CAAC;IACnC,2BAA2B,EAAE,MAAM,CAAC;IACpC,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,4EAA4E;AAC5E,qBAAa,sBAAuB,SAAQ,KAAK;aAE7B,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,SAAS,GAAG,cAAc;gBADlC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAAG,cAAc;CAWrD;AAaD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,EACvD,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,aAAa,CAAC,GACrD,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,SAAS,IAAI,CACZ,uBAAuB,EACrB,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,GAC5B,6BAA6B,GAC7B,aAAa,CAChB,EAED,QAAQ,EAAE,IAAI,CACZ,uBAAuB,EACvB,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,CACxD,EACD,QAAQ,EAAE,CAAC,GACV,CAAC,CAgBH;AAOD,oFAAoF;AACpF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,uBAAuB,EACjC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,EAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,SAAS,CAuEX;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,uBAAuB,EACjC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,GAC5C,SAAS,CAqBX;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,uBAAuB,EAAE,EACpC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,EAC1D,kBAAkB,EAAE,MAAM,EAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,SAAS,CAaX"}
|
|
1
|
+
{"version":3,"file":"realized-balance.d.ts","sourceRoot":"/","sources":["utils/realized-balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
29
29
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.calculateSettledAccountPnl = exports.calculatePositionFundingSinceChange = exports.calculateSettledPositionPnl = exports.positionAdjustmentTrackers = exports.trackersBehindPosition = exports.SettlementTrackerError = void 0;
|
|
32
|
+
exports.calculateSettledAccountPnl = exports.nextSessionSettledFunding = exports.calculatePositionFundingSinceOpen = exports.calculatePositionFundingSinceChange = exports.calculateSettledPositionPnl = exports.positionAdjustmentTrackers = exports.trackersBehindPosition = exports.SettlementTrackerError = void 0;
|
|
33
33
|
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
34
34
|
/** Structured cause for service metrics; calculation still fails closed. */
|
|
35
35
|
var SettlementTrackerError = /** @class */ (function (_super) {
|
|
@@ -174,6 +174,66 @@ function calculatePositionFundingSinceChange(position, trackers) {
|
|
|
174
174
|
return mulWad(divWad(funding.minus(lastFunding), multiplier), base.negated());
|
|
175
175
|
}
|
|
176
176
|
exports.calculatePositionFundingSinceChange = calculatePositionFundingSinceChange;
|
|
177
|
+
/**
|
|
178
|
+
* Raw E18 funding on an open position since its session (the contract's
|
|
179
|
+
* `position.session`) opened, positive received: the funding settled at its
|
|
180
|
+
* fills since then (positions.session_settled_funding, RET-281) plus
|
|
181
|
+
* calculatePositionFundingSinceChange. Null while the settled part is unknown
|
|
182
|
+
* (a session opened before the indexer kept it, not yet backfilled).
|
|
183
|
+
*/
|
|
184
|
+
function calculatePositionFundingSinceOpen(position, trackers) {
|
|
185
|
+
var settled = position.session_settled_funding;
|
|
186
|
+
if (settled === null || settled === undefined)
|
|
187
|
+
return null;
|
|
188
|
+
return new bignumber_js_1.default(settled.toString()).plus(calculatePositionFundingSinceChange(position, trackers));
|
|
189
|
+
}
|
|
190
|
+
exports.calculatePositionFundingSinceOpen = calculatePositionFundingSinceOpen;
|
|
191
|
+
/**
|
|
192
|
+
* positions.session_settled_funding after a fill (RET-281), as the
|
|
193
|
+
* perp-execution indexer's upsert computes it (persistPerpExecutionCte.ts):
|
|
194
|
+
* raw E18 funding settled into the position at its fills since its current
|
|
195
|
+
* session (the contract's `position.session`) opened, positive received.
|
|
196
|
+
*
|
|
197
|
+
* - No stored position, or a new session (opened from flat or flipped): 0.
|
|
198
|
+
* The opening fill's settlement belonged to the previous position. A
|
|
199
|
+
* stored position from before the `session` column has none to compare:
|
|
200
|
+
* there flat before, or the other side, opens one.
|
|
201
|
+
* - Within a session: plus computeFundingCashflow of the stored position
|
|
202
|
+
* against the fill's post-fill funding value, which within a session is
|
|
203
|
+
* the value it settled at.
|
|
204
|
+
* - Unknown (null) stays unknown; a flat position or a zero multiplier
|
|
205
|
+
* accrues nothing.
|
|
206
|
+
*/
|
|
207
|
+
function nextSessionSettledFunding(previous, next) {
|
|
208
|
+
var _a, _b;
|
|
209
|
+
if (!previous)
|
|
210
|
+
return '0';
|
|
211
|
+
var base = previous.base === null ? null : new bignumber_js_1.default(previous.base.toString());
|
|
212
|
+
if (previous.session !== null && previous.session !== undefined) {
|
|
213
|
+
if (previous.session.toString() !== String(next.session))
|
|
214
|
+
return '0';
|
|
215
|
+
}
|
|
216
|
+
else if (base === null ||
|
|
217
|
+
base.isZero() ||
|
|
218
|
+
base.gt(0) !== new bignumber_js_1.default(String(next.base)).gt(0)) {
|
|
219
|
+
return '0';
|
|
220
|
+
}
|
|
221
|
+
var settled = previous.session_settled_funding;
|
|
222
|
+
if (settled === null || settled === undefined)
|
|
223
|
+
return null;
|
|
224
|
+
var multiplier = new bignumber_js_1.default((_b = (_a = previous.base_multiplier) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : 0);
|
|
225
|
+
if (base === null || base.isZero() || !multiplier.gt(0)) {
|
|
226
|
+
return settled.toString();
|
|
227
|
+
}
|
|
228
|
+
// As the SQL: a stored position without a funding value is unknown.
|
|
229
|
+
if (previous.funding_value === null)
|
|
230
|
+
return null;
|
|
231
|
+
var delta = integer(next.funding_value, 'fill funding').minus(integer(previous.funding_value, 'position funding'));
|
|
232
|
+
return new bignumber_js_1.default(settled.toString())
|
|
233
|
+
.plus(mulWad(divWad(delta, multiplier), base.negated()))
|
|
234
|
+
.toFixed();
|
|
235
|
+
}
|
|
236
|
+
exports.nextSessionSettledFunding = nextSessionSettledFunding;
|
|
177
237
|
/**
|
|
178
238
|
* Returns raw E18 PnL aligned to collateral units. The instrument floors EACH
|
|
179
239
|
* market's PnL to quote-token precision before Core aggregates collateral info.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realized-balance.js","sourceRoot":"/","sources":["utils/realized-balance.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js';\n\n/** Raw E18 position values, from either Prisma or replication. */\nexport type RealizedBalancePosition = {\n market_id: { toString(): string };\n base: { toString(): string } | null;\n realized_pnl: { toString(): string } | null;\n funding_value: { toString(): string } | null;\n base_multiplier: { toString(): string } | null;\n adl_unwind_price: { toString(): string } | null;\n last_price: { toString(): string } | null;\n /** Block the stored trackers were written at; lets stale market trackers be ignored. */\n block_number?: { toString(): string } | null;\n};\n\nexport type RealizedBalanceTrackers = {\n longTrackersFundingValue: string;\n shortTrackersFundingValue: string;\n longTrackersBaseMultiplier: string;\n shortTrackersBaseMultiplier: string;\n longTrackersAdlUnwindPrice: string;\n shortTrackersAdlUnwindPrice: string;\n /** Block the market trackers were observed at (optional; enables the staleness guard). */\n blockNumber?: string | null;\n};\n\n/** Structured cause for service metrics; calculation still fails closed. */\nexport class SettlementTrackerError extends Error {\n constructor(\n public readonly marketId: string,\n public readonly reason: 'missing' | 'inconsistent',\n ) {\n super(\n reason === 'missing'\n ? `Missing market trackers for ${marketId}`\n : `Inconsistent ADL trackers for ${marketId}`,\n );\n // common targets ES5; restore Error subclass identity after downleveling.\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = 'SettlementTrackerError';\n }\n}\n\nconst WAD = new BigNumber('1000000000000000000');\nconst integer = (value: { toString(): string } | null, field: string) => {\n const result = new BigNumber(value?.toString() ?? NaN);\n if (!result.isInteger()) throw new Error(`Missing or invalid ${field}`);\n return result;\n};\nconst optionalBlock = (value: { toString(): string } | null | undefined) => {\n if (value === null || value === undefined) return undefined;\n const result = new BigNumber(value.toString());\n return result.isInteger() ? result : undefined;\n};\n/**\n * Market trackers older than the position's own snapshot carry nothing the\n * stored position does not already reflect. Off-chain tracker feeds can lag\n * the position stream.\n */\nexport function trackersBehindPosition(\n position: Pick<RealizedBalancePosition, 'block_number'>,\n trackers: Pick<RealizedBalanceTrackers, 'blockNumber'>,\n): boolean {\n const positionBlock = optionalBlock(position.block_number);\n const trackerBlock = optionalBlock(trackers.blockNumber);\n return !!positionBlock && !!trackerBlock && positionBlock.gt(trackerBlock);\n}\n\n/**\n * The trackers to ADL-adjust a position's quantity with, guarded the way its\n * settlement is: behind the position, its own multiplier and unwind price stand in.\n */\nexport function positionAdjustmentTrackers<\n T extends Pick<\n RealizedBalanceTrackers,\n | 'longTrackersBaseMultiplier'\n | 'shortTrackersBaseMultiplier'\n | 'longTrackersAdlUnwindPrice'\n | 'shortTrackersAdlUnwindPrice'\n | 'blockNumber'\n >,\n>(\n position: Pick<\n RealizedBalancePosition,\n 'block_number' | 'base_multiplier' | 'adl_unwind_price'\n >,\n trackers: T,\n): T {\n if (\n !trackersBehindPosition(position, trackers) ||\n position.base_multiplier === null ||\n position.adl_unwind_price === null\n )\n return trackers;\n const multiplier = position.base_multiplier.toString();\n const unwind = position.adl_unwind_price.toString();\n return {\n ...trackers,\n longTrackersBaseMultiplier: multiplier,\n shortTrackersBaseMultiplier: multiplier,\n longTrackersAdlUnwindPrice: unwind,\n shortTrackersAdlUnwindPrice: unwind,\n };\n}\n\nconst mulWad = (a: BigNumber, b: BigNumber) =>\n a.times(b).dividedToIntegerBy(WAD);\nconst divWad = (a: BigNumber, b: BigNumber) =>\n a.times(WAD).dividedToIntegerBy(b);\n\n/** Mirrors perpOB updatePerpPosition, including PRBMath truncation at each step. */\nexport function calculateSettledPositionPnl(\n position: RealizedBalancePosition,\n trackers: RealizedBalanceTrackers | undefined,\n onGuarded?: () => void,\n): BigNumber {\n const base = integer(position.base, 'position base');\n const realized = integer(position.realized_pnl, 'realized PnL');\n if (base.isZero()) return realized;\n if (!trackers)\n throw new SettlementTrackerError(position.market_id.toString(), 'missing');\n\n const long = base.isPositive();\n const funding = integer(\n long\n ? trackers.longTrackersFundingValue\n : trackers.shortTrackersFundingValue,\n 'market funding',\n );\n const multiplier = integer(\n long\n ? trackers.longTrackersBaseMultiplier\n : trackers.shortTrackersBaseMultiplier,\n 'market multiplier',\n );\n const unwind = integer(\n long\n ? trackers.longTrackersAdlUnwindPrice\n : trackers.shortTrackersAdlUnwindPrice,\n 'market unwind price',\n );\n const oldMultiplier = integer(\n position.base_multiplier,\n 'position multiplier',\n );\n const oldUnwind = integer(position.adl_unwind_price, 'position unwind price');\n const oldFunding = integer(position.funding_value, 'position funding');\n if (\n funding.eq(oldFunding) &&\n multiplier.eq(oldMultiplier) &&\n unwind.eq(oldUnwind)\n )\n return realized;\n\n // Market trackers older than the position's own snapshot carry no new\n // cashflow: the stored realized PnL already settled everything up to the\n // position's block. Treat that window as \"nothing accrued\" instead of\n // projecting a delta backwards (wrong-sign funding, or an ADL guard failure\n // below).\n if (trackersBehindPosition(position, trackers)) {\n onGuarded?.();\n return realized;\n }\n\n if (\n oldMultiplier.lte(0) ||\n multiplier.lt(0) ||\n multiplier.gt(oldMultiplier) ||\n unwind.lt(oldUnwind)\n ) {\n throw new SettlementTrackerError(\n position.market_id.toString(),\n 'inconsistent',\n );\n }\n const fundingCashflow = mulWad(\n divWad(funding.minus(oldFunding), oldMultiplier),\n base.negated(),\n );\n const unwindDelta = divWad(unwind.minus(oldUnwind), oldMultiplier);\n const initialPrice = mulWad(\n WAD.minus(divWad(multiplier, oldMultiplier)),\n integer(position.last_price, 'position price'),\n );\n const adlCashflow = mulWad(base, unwindDelta.minus(initialPrice));\n return realized.plus(fundingCashflow).plus(adlCashflow);\n}\n\n/**\n * Raw E18 funding on an open position since its size last changed (a fill,\n * liquidation or ADL unwind): the funding Core settles into the position's\n * realized PnL at its next change (`computeFundingCashflow` in perpOB), from\n * the position's stored funding value to the market trackers. The settled\n * balance already counts it (`calculateSettledPositionPnl`), so this\n * attributes it to the position and must never be added to a balance.\n * Positive means the position received funding.\n *\n * The stored base over the stored multiplier is the same ratio as the\n * ADL-adjusted base over the current multiplier, so no ADL adjustment is\n * needed. Market trackers behind the position's own snapshot accrue nothing,\n * as in settlement.\n */\nexport function calculatePositionFundingSinceChange(\n position: RealizedBalancePosition,\n trackers: RealizedBalanceTrackers | undefined,\n): BigNumber {\n const base = integer(position.base, 'position base');\n if (base.isZero()) return new BigNumber(0);\n if (!trackers)\n throw new SettlementTrackerError(position.market_id.toString(), 'missing');\n if (trackersBehindPosition(position, trackers)) return new BigNumber(0);\n const funding = integer(\n base.isPositive()\n ? trackers.longTrackersFundingValue\n : trackers.shortTrackersFundingValue,\n 'market funding',\n );\n const lastFunding = integer(position.funding_value, 'position funding');\n const multiplier = integer(position.base_multiplier, 'position multiplier');\n if (multiplier.lte(0)) {\n throw new SettlementTrackerError(\n position.market_id.toString(),\n 'inconsistent',\n );\n }\n return mulWad(divWad(funding.minus(lastFunding), multiplier), base.negated());\n}\n\n/**\n * Returns raw E18 PnL aligned to collateral units. The instrument floors EACH\n * market's PnL to quote-token precision before Core aggregates collateral info.\n * Funding is the stored market tracker delta; do not extrapolate it with time.\n */\nexport function calculateSettledAccountPnl(\n positions: RealizedBalancePosition[],\n trackers: Partial<Record<string, RealizedBalanceTrackers>>,\n collateralDecimals: number,\n onGuarded?: () => void,\n): BigNumber {\n return positions.reduce((sum, position) => {\n const pnl = calculateSettledPositionPnl(\n position,\n trackers[position.market_id.toString()],\n onGuarded,\n );\n const rounded = pnl\n .shiftedBy(collateralDecimals - 18)\n .integerValue(BigNumber.ROUND_FLOOR)\n .shiftedBy(18 - collateralDecimals);\n return sum.plus(rounded);\n }, new BigNumber(0));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"realized-balance.js","sourceRoot":"/","sources":["utils/realized-balance.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js';\n\n/** Raw E18 position values, from either Prisma or replication. */\nexport type RealizedBalancePosition = {\n market_id: { toString(): string };\n base: { toString(): string } | null;\n realized_pnl: { toString(): string } | null;\n funding_value: { toString(): string } | null;\n base_multiplier: { toString(): string } | null;\n adl_unwind_price: { toString(): string } | null;\n last_price: { toString(): string } | null;\n /** Block the stored trackers were written at; lets stale market trackers be ignored. */\n block_number?: { toString(): string } | null;\n};\n\nexport type RealizedBalanceTrackers = {\n longTrackersFundingValue: string;\n shortTrackersFundingValue: string;\n longTrackersBaseMultiplier: string;\n shortTrackersBaseMultiplier: string;\n longTrackersAdlUnwindPrice: string;\n shortTrackersAdlUnwindPrice: string;\n /** Block the market trackers were observed at (optional; enables the staleness guard). */\n blockNumber?: string | null;\n};\n\n/** Structured cause for service metrics; calculation still fails closed. */\nexport class SettlementTrackerError extends Error {\n constructor(\n public readonly marketId: string,\n public readonly reason: 'missing' | 'inconsistent',\n ) {\n super(\n reason === 'missing'\n ? `Missing market trackers for ${marketId}`\n : `Inconsistent ADL trackers for ${marketId}`,\n );\n // common targets ES5; restore Error subclass identity after downleveling.\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = 'SettlementTrackerError';\n }\n}\n\nconst WAD = new BigNumber('1000000000000000000');\nconst integer = (value: { toString(): string } | null, field: string) => {\n const result = new BigNumber(value?.toString() ?? NaN);\n if (!result.isInteger()) throw new Error(`Missing or invalid ${field}`);\n return result;\n};\nconst optionalBlock = (value: { toString(): string } | null | undefined) => {\n if (value === null || value === undefined) return undefined;\n const result = new BigNumber(value.toString());\n return result.isInteger() ? result : undefined;\n};\n/**\n * Market trackers older than the position's own snapshot carry nothing the\n * stored position does not already reflect. Off-chain tracker feeds can lag\n * the position stream.\n */\nexport function trackersBehindPosition(\n position: Pick<RealizedBalancePosition, 'block_number'>,\n trackers: Pick<RealizedBalanceTrackers, 'blockNumber'>,\n): boolean {\n const positionBlock = optionalBlock(position.block_number);\n const trackerBlock = optionalBlock(trackers.blockNumber);\n return !!positionBlock && !!trackerBlock && positionBlock.gt(trackerBlock);\n}\n\n/**\n * The trackers to ADL-adjust a position's quantity with, guarded the way its\n * settlement is: behind the position, its own multiplier and unwind price stand in.\n */\nexport function positionAdjustmentTrackers<\n T extends Pick<\n RealizedBalanceTrackers,\n | 'longTrackersBaseMultiplier'\n | 'shortTrackersBaseMultiplier'\n | 'longTrackersAdlUnwindPrice'\n | 'shortTrackersAdlUnwindPrice'\n | 'blockNumber'\n >,\n>(\n position: Pick<\n RealizedBalancePosition,\n 'block_number' | 'base_multiplier' | 'adl_unwind_price'\n >,\n trackers: T,\n): T {\n if (\n !trackersBehindPosition(position, trackers) ||\n position.base_multiplier === null ||\n position.adl_unwind_price === null\n )\n return trackers;\n const multiplier = position.base_multiplier.toString();\n const unwind = position.adl_unwind_price.toString();\n return {\n ...trackers,\n longTrackersBaseMultiplier: multiplier,\n shortTrackersBaseMultiplier: multiplier,\n longTrackersAdlUnwindPrice: unwind,\n shortTrackersAdlUnwindPrice: unwind,\n };\n}\n\nconst mulWad = (a: BigNumber, b: BigNumber) =>\n a.times(b).dividedToIntegerBy(WAD);\nconst divWad = (a: BigNumber, b: BigNumber) =>\n a.times(WAD).dividedToIntegerBy(b);\n\n/** Mirrors perpOB updatePerpPosition, including PRBMath truncation at each step. */\nexport function calculateSettledPositionPnl(\n position: RealizedBalancePosition,\n trackers: RealizedBalanceTrackers | undefined,\n onGuarded?: () => void,\n): BigNumber {\n const base = integer(position.base, 'position base');\n const realized = integer(position.realized_pnl, 'realized PnL');\n if (base.isZero()) return realized;\n if (!trackers)\n throw new SettlementTrackerError(position.market_id.toString(), 'missing');\n\n const long = base.isPositive();\n const funding = integer(\n long\n ? trackers.longTrackersFundingValue\n : trackers.shortTrackersFundingValue,\n 'market funding',\n );\n const multiplier = integer(\n long\n ? trackers.longTrackersBaseMultiplier\n : trackers.shortTrackersBaseMultiplier,\n 'market multiplier',\n );\n const unwind = integer(\n long\n ? trackers.longTrackersAdlUnwindPrice\n : trackers.shortTrackersAdlUnwindPrice,\n 'market unwind price',\n );\n const oldMultiplier = integer(\n position.base_multiplier,\n 'position multiplier',\n );\n const oldUnwind = integer(position.adl_unwind_price, 'position unwind price');\n const oldFunding = integer(position.funding_value, 'position funding');\n if (\n funding.eq(oldFunding) &&\n multiplier.eq(oldMultiplier) &&\n unwind.eq(oldUnwind)\n )\n return realized;\n\n // Market trackers older than the position's own snapshot carry no new\n // cashflow: the stored realized PnL already settled everything up to the\n // position's block. Treat that window as \"nothing accrued\" instead of\n // projecting a delta backwards (wrong-sign funding, or an ADL guard failure\n // below).\n if (trackersBehindPosition(position, trackers)) {\n onGuarded?.();\n return realized;\n }\n\n if (\n oldMultiplier.lte(0) ||\n multiplier.lt(0) ||\n multiplier.gt(oldMultiplier) ||\n unwind.lt(oldUnwind)\n ) {\n throw new SettlementTrackerError(\n position.market_id.toString(),\n 'inconsistent',\n );\n }\n const fundingCashflow = mulWad(\n divWad(funding.minus(oldFunding), oldMultiplier),\n base.negated(),\n );\n const unwindDelta = divWad(unwind.minus(oldUnwind), oldMultiplier);\n const initialPrice = mulWad(\n WAD.minus(divWad(multiplier, oldMultiplier)),\n integer(position.last_price, 'position price'),\n );\n const adlCashflow = mulWad(base, unwindDelta.minus(initialPrice));\n return realized.plus(fundingCashflow).plus(adlCashflow);\n}\n\n/**\n * Raw E18 funding on an open position since its size last changed (a fill,\n * liquidation or ADL unwind): the funding Core settles into the position's\n * realized PnL at its next change (`computeFundingCashflow` in perpOB), from\n * the position's stored funding value to the market trackers. The settled\n * balance already counts it (`calculateSettledPositionPnl`), so this\n * attributes it to the position and must never be added to a balance.\n * Positive means the position received funding.\n *\n * The stored base over the stored multiplier is the same ratio as the\n * ADL-adjusted base over the current multiplier, so no ADL adjustment is\n * needed. Market trackers behind the position's own snapshot accrue nothing,\n * as in settlement.\n */\nexport function calculatePositionFundingSinceChange(\n position: RealizedBalancePosition,\n trackers: RealizedBalanceTrackers | undefined,\n): BigNumber {\n const base = integer(position.base, 'position base');\n if (base.isZero()) return new BigNumber(0);\n if (!trackers)\n throw new SettlementTrackerError(position.market_id.toString(), 'missing');\n if (trackersBehindPosition(position, trackers)) return new BigNumber(0);\n const funding = integer(\n base.isPositive()\n ? trackers.longTrackersFundingValue\n : trackers.shortTrackersFundingValue,\n 'market funding',\n );\n const lastFunding = integer(position.funding_value, 'position funding');\n const multiplier = integer(position.base_multiplier, 'position multiplier');\n if (multiplier.lte(0)) {\n throw new SettlementTrackerError(\n position.market_id.toString(),\n 'inconsistent',\n );\n }\n return mulWad(divWad(funding.minus(lastFunding), multiplier), base.negated());\n}\n\n/**\n * Raw E18 funding on an open position since its session (the contract's\n * `position.session`) opened, positive received: the funding settled at its\n * fills since then (positions.session_settled_funding, RET-281) plus\n * calculatePositionFundingSinceChange. Null while the settled part is unknown\n * (a session opened before the indexer kept it, not yet backfilled).\n */\nexport function calculatePositionFundingSinceOpen(\n position: RealizedBalancePosition & {\n session_settled_funding?: { toString(): string } | null;\n },\n trackers: RealizedBalanceTrackers | undefined,\n): BigNumber | null {\n const settled = position.session_settled_funding;\n if (settled === null || settled === undefined) return null;\n return new BigNumber(settled.toString()).plus(\n calculatePositionFundingSinceChange(position, trackers),\n );\n}\n\n/** A stored position's fields `nextSessionSettledFunding` reads (raw E18). */\nexport type SessionFundingPosition = {\n base: { toString(): string } | null;\n funding_value: { toString(): string } | null;\n base_multiplier: { toString(): string } | null;\n session: { toString(): string } | null;\n session_settled_funding?: { toString(): string } | null;\n};\n\n/**\n * positions.session_settled_funding after a fill (RET-281), as the\n * perp-execution indexer's upsert computes it (persistPerpExecutionCte.ts):\n * raw E18 funding settled into the position at its fills since its current\n * session (the contract's `position.session`) opened, positive received.\n *\n * - No stored position, or a new session (opened from flat or flipped): 0.\n * The opening fill's settlement belonged to the previous position. A\n * stored position from before the `session` column has none to compare:\n * there flat before, or the other side, opens one.\n * - Within a session: plus computeFundingCashflow of the stored position\n * against the fill's post-fill funding value, which within a session is\n * the value it settled at.\n * - Unknown (null) stays unknown; a flat position or a zero multiplier\n * accrues nothing.\n */\nexport function nextSessionSettledFunding(\n previous: SessionFundingPosition | undefined,\n next: Pick<SessionFundingPosition, 'session' | 'funding_value' | 'base'>,\n): string | null {\n if (!previous) return '0';\n const base =\n previous.base === null ? null : new BigNumber(previous.base.toString());\n if (previous.session !== null && previous.session !== undefined) {\n if (previous.session.toString() !== String(next.session)) return '0';\n } else if (\n base === null ||\n base.isZero() ||\n base.gt(0) !== new BigNumber(String(next.base)).gt(0)\n ) {\n return '0';\n }\n const settled = previous.session_settled_funding;\n if (settled === null || settled === undefined) return null;\n const multiplier = new BigNumber(previous.base_multiplier?.toString() ?? 0);\n if (base === null || base.isZero() || !multiplier.gt(0)) {\n return settled.toString();\n }\n // As the SQL: a stored position without a funding value is unknown.\n if (previous.funding_value === null) return null;\n const delta = integer(next.funding_value, 'fill funding').minus(\n integer(previous.funding_value, 'position funding'),\n );\n return new BigNumber(settled.toString())\n .plus(mulWad(divWad(delta, multiplier), base.negated()))\n .toFixed();\n}\n\n/**\n * Returns raw E18 PnL aligned to collateral units. The instrument floors EACH\n * market's PnL to quote-token precision before Core aggregates collateral info.\n * Funding is the stored market tracker delta; do not extrapolate it with time.\n */\nexport function calculateSettledAccountPnl(\n positions: RealizedBalancePosition[],\n trackers: Partial<Record<string, RealizedBalanceTrackers>>,\n collateralDecimals: number,\n onGuarded?: () => void,\n): BigNumber {\n return positions.reduce((sum, position) => {\n const pnl = calculateSettledPositionPnl(\n position,\n trackers[position.market_id.toString()],\n onGuarded,\n );\n const rounded = pnl\n .shiftedBy(collateralDecimals - 18)\n .integerValue(BigNumber.ROUND_FLOOR)\n .shiftedBy(18 - collateralDecimals);\n return sum.plus(rounded);\n }, new BigNumber(0));\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reyaxyz/common",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.381.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"test:coverage": "npx jest test --coverage",
|
|
42
42
|
"generate:coverage-badges": "npx istanbul-badges-readme --silent"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "c2725622a8d6b4008c44d048684b18c8178ebf71"
|
|
45
45
|
}
|
package/src/trading-api-types.ts
CHANGED
|
@@ -105,6 +105,12 @@ type Position = {
|
|
|
105
105
|
adl_unwind_price: Decimal | null;
|
|
106
106
|
average_entry_funding_value: Decimal | null;
|
|
107
107
|
session: Decimal | null;
|
|
108
|
+
/**
|
|
109
|
+
* Funding settled at the position's fills since its session opened (raw
|
|
110
|
+
* E18, RET-281). Stored by the indexer; absent from trade-stream rows, whose
|
|
111
|
+
* consumers derive it with `nextSessionSettledFunding`. Null while unknown.
|
|
112
|
+
*/
|
|
113
|
+
session_settled_funding?: Decimal | null;
|
|
108
114
|
exchange_id: Decimal | null;
|
|
109
115
|
event_sequence_number: bigint | null;
|
|
110
116
|
referrer_account_id: Decimal | null;
|
|
@@ -238,7 +244,9 @@ type Leverage = {
|
|
|
238
244
|
};
|
|
239
245
|
|
|
240
246
|
type WalletStats = {
|
|
247
|
+
/** The wallet's volume over the trailing 14 days. */
|
|
241
248
|
volume_14d: Decimal;
|
|
249
|
+
/** The wallet's volume over the trailing `lookback_window_seconds`. */
|
|
242
250
|
lookback_volume: Decimal;
|
|
243
251
|
lookback_window_seconds: number;
|
|
244
252
|
};
|
|
@@ -226,6 +226,83 @@ export function calculatePositionFundingSinceChange(
|
|
|
226
226
|
return mulWad(divWad(funding.minus(lastFunding), multiplier), base.negated());
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
+
/**
|
|
230
|
+
* Raw E18 funding on an open position since its session (the contract's
|
|
231
|
+
* `position.session`) opened, positive received: the funding settled at its
|
|
232
|
+
* fills since then (positions.session_settled_funding, RET-281) plus
|
|
233
|
+
* calculatePositionFundingSinceChange. Null while the settled part is unknown
|
|
234
|
+
* (a session opened before the indexer kept it, not yet backfilled).
|
|
235
|
+
*/
|
|
236
|
+
export function calculatePositionFundingSinceOpen(
|
|
237
|
+
position: RealizedBalancePosition & {
|
|
238
|
+
session_settled_funding?: { toString(): string } | null;
|
|
239
|
+
},
|
|
240
|
+
trackers: RealizedBalanceTrackers | undefined,
|
|
241
|
+
): BigNumber | null {
|
|
242
|
+
const settled = position.session_settled_funding;
|
|
243
|
+
if (settled === null || settled === undefined) return null;
|
|
244
|
+
return new BigNumber(settled.toString()).plus(
|
|
245
|
+
calculatePositionFundingSinceChange(position, trackers),
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/** A stored position's fields `nextSessionSettledFunding` reads (raw E18). */
|
|
250
|
+
export type SessionFundingPosition = {
|
|
251
|
+
base: { toString(): string } | null;
|
|
252
|
+
funding_value: { toString(): string } | null;
|
|
253
|
+
base_multiplier: { toString(): string } | null;
|
|
254
|
+
session: { toString(): string } | null;
|
|
255
|
+
session_settled_funding?: { toString(): string } | null;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* positions.session_settled_funding after a fill (RET-281), as the
|
|
260
|
+
* perp-execution indexer's upsert computes it (persistPerpExecutionCte.ts):
|
|
261
|
+
* raw E18 funding settled into the position at its fills since its current
|
|
262
|
+
* session (the contract's `position.session`) opened, positive received.
|
|
263
|
+
*
|
|
264
|
+
* - No stored position, or a new session (opened from flat or flipped): 0.
|
|
265
|
+
* The opening fill's settlement belonged to the previous position. A
|
|
266
|
+
* stored position from before the `session` column has none to compare:
|
|
267
|
+
* there flat before, or the other side, opens one.
|
|
268
|
+
* - Within a session: plus computeFundingCashflow of the stored position
|
|
269
|
+
* against the fill's post-fill funding value, which within a session is
|
|
270
|
+
* the value it settled at.
|
|
271
|
+
* - Unknown (null) stays unknown; a flat position or a zero multiplier
|
|
272
|
+
* accrues nothing.
|
|
273
|
+
*/
|
|
274
|
+
export function nextSessionSettledFunding(
|
|
275
|
+
previous: SessionFundingPosition | undefined,
|
|
276
|
+
next: Pick<SessionFundingPosition, 'session' | 'funding_value' | 'base'>,
|
|
277
|
+
): string | null {
|
|
278
|
+
if (!previous) return '0';
|
|
279
|
+
const base =
|
|
280
|
+
previous.base === null ? null : new BigNumber(previous.base.toString());
|
|
281
|
+
if (previous.session !== null && previous.session !== undefined) {
|
|
282
|
+
if (previous.session.toString() !== String(next.session)) return '0';
|
|
283
|
+
} else if (
|
|
284
|
+
base === null ||
|
|
285
|
+
base.isZero() ||
|
|
286
|
+
base.gt(0) !== new BigNumber(String(next.base)).gt(0)
|
|
287
|
+
) {
|
|
288
|
+
return '0';
|
|
289
|
+
}
|
|
290
|
+
const settled = previous.session_settled_funding;
|
|
291
|
+
if (settled === null || settled === undefined) return null;
|
|
292
|
+
const multiplier = new BigNumber(previous.base_multiplier?.toString() ?? 0);
|
|
293
|
+
if (base === null || base.isZero() || !multiplier.gt(0)) {
|
|
294
|
+
return settled.toString();
|
|
295
|
+
}
|
|
296
|
+
// As the SQL: a stored position without a funding value is unknown.
|
|
297
|
+
if (previous.funding_value === null) return null;
|
|
298
|
+
const delta = integer(next.funding_value, 'fill funding').minus(
|
|
299
|
+
integer(previous.funding_value, 'position funding'),
|
|
300
|
+
);
|
|
301
|
+
return new BigNumber(settled.toString())
|
|
302
|
+
.plus(mulWad(divWad(delta, multiplier), base.negated()))
|
|
303
|
+
.toFixed();
|
|
304
|
+
}
|
|
305
|
+
|
|
229
306
|
/**
|
|
230
307
|
* Returns raw E18 PnL aligned to collateral units. The instrument floors EACH
|
|
231
308
|
* market's PnL to quote-token precision before Core aggregates collateral info.
|