@polyester/sdk 0.27.1 → 0.27.2
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/CHANGELOG.md +6 -0
- package/dist/catalogs/snapshot-validation.js +3 -1
- package/dist/catalogs/snapshot-validation.js.map +1 -1
- package/dist/gen/marketdata/v1/marketdata_pb.d.ts +46 -26
- package/dist/gen/marketdata/v1/marketdata_pb.d.ts.map +1 -1
- package/dist/gen/marketdata/v1/marketdata_pb.js +1 -1
- package/dist/gen/marketdata/v1/marketdata_pb.js.map +1 -1
- package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts +3 -2
- package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts.map +1 -1
- package/dist/gen/marketoverview/v1/marketoverview_pb.js.map +1 -1
- package/dist/services/candles/candles.schemas.d.ts.map +1 -1
- package/dist/services/candles/candles.schemas.js +13 -11
- package/dist/services/candles/candles.schemas.js.map +1 -1
- package/dist/services/heatmap/heatmap.schemas.d.ts +4 -4
- package/dist/services/market-data/market-data.schemas.js +14 -2
- package/dist/services/market-data/market-data.schemas.js.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.js +2 -1
- package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
- package/dist/services/orderbook/orderbook.schemas.d.ts +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +1 -1
- package/dist/services/trades/trades.schemas.d.ts +1 -1
- package/dist/shared/catalog-config.d.ts +4 -0
- package/dist/shared/catalog-config.d.ts.map +1 -1
- package/dist/shared/catalog-config.js.map +1 -1
- package/dist/shared/decimal-surface.d.ts +4 -0
- package/dist/shared/decimal-surface.d.ts.map +1 -1
- package/dist/shared/decimal-surface.js +5 -0
- package/dist/shared/decimal-surface.js.map +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketoverview_pb.js","names":[],"sources":["../../../../src/gen/marketoverview/v1/marketoverview_pb.ts"],"sourcesContent":["// @generated by protoc-gen-es v2.13.0 with parameter \"target=ts,import_extension=js\"\n// @generated from file marketoverview/v1/marketoverview.proto (package marketoverview.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_polyester_api_options } from \"../../polyester/api/options_pb.js\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file marketoverview/v1/marketoverview.proto.\n */\nexport const file_marketoverview_v1_marketoverview: GenFile = /*@__PURE__*/\n fileDesc(\"CiZtYXJrZXRvdmVydmlldy92MS9tYXJrZXRvdmVydmlldy5wcm90bxIRbWFya2V0b3ZlcnZpZXcudjEiOQoLRXJyb3JEZXRhaWwSKgoEY29kZRgBIAEoDjIcLm1hcmtldG92ZXJ2aWV3LnYxLkVycm9yQ29kZSJaCglTcGFya2xpbmUSOAoIaW50ZXJ2YWwYASABKA4yJC5tYXJrZXRvdmVydmlldy52MS5TcGFya2xpbmVJbnRlcnZhbEIAEhMKC2Nsb3NlX3RpY2tzGAIgAygDIqsECg5NYXJrZXRPdmVydmlldxIRCglzeW1ib2xfaWQYASABKA0SGAoQbGFzdF9wcmljZV90aWNrcxgDIAEoAxIYChBsYXN0X3RyYWRlX3RzX25zGAQgASgEEhYKDmNoYW5nZV8yNGhfYnBzGAUgASgFEhYKDmhpZ2hfMjRoX3RpY2tzGAYgASgDEhUKDWxvd18yNGhfdGlja3MYByABKAMSIwoWdm9sdW1lXzI0aF9iYXNlX3NjYWxlZBgIIAEoA0gAiAEBEiQKF3ZvbHVtZV8yNGhfcXVvdGVfc2NhbGVkGA4gASgDSAGIAQESIgoVdm9sdW1lXzI0aF91c2Rfc2NhbGVkGBEgASgDSAKIAQESFAoMbGlzdGVkX3RzX25zGA8gASgEEhYKDmJlc3RfYmlkX3RpY2tzGAkgASgDEhsKE2Jlc3RfYmlkX3F0eV9zY2FsZWQYCiABKAMSFgoOYmVzdF9hc2tfdGlja3MYCyABKAMSGwoTYmVzdF9hc2tfcXR5X3NjYWxlZBgMIAEoAxIwCgpzcGFya2xpbmVzGA0gAygLMhwubWFya2V0b3ZlcnZpZXcudjEuU3BhcmtsaW5lEhkKEWluZGV4X3ByaWNlX3RpY2tzGBAgASgDQhkKF192b2x1bWVfMjRoX2Jhc2Vfc2NhbGVkQhoKGF92b2x1bWVfMjRoX3F1b3RlX3NjYWxlZEIYChZfdm9sdW1lXzI0aF91c2Rfc2NhbGVkIqACChlMaXN0TWFya2V0T3ZlcnZpZXdSZXF1ZXN0EhMKCXN5bWJvbF9pZBgBIAMoDUIAEg8KBWxpbWl0GAIgASgNQgASFAoKcGFnZV90b2tlbhgDIAEoCUIAEjQKCG9yZGVyX2J5GAQgASgOMiAubWFya2V0b3ZlcnZpZXcudjEuTWFya2V0T3JkZXJCeUIAEjAKBHNvcnQYBSABKA4yIC5tYXJrZXRvdmVydmlldy52MS5Tb3J0RGlyZWN0aW9uQgASGgoSaW5jbHVkZV9zcGFya2xpbmVzGAYgASgIEkMKE3NwYXJrbGluZV9pbnRlcnZhbHMYByADKA4yJC5tYXJrZXRvdmVydmlldy52MS5TcGFya2xpbmVJbnRlcnZhbEIAImsKGkxpc3RNYXJrZXRPdmVydmlld1Jlc3BvbnNlEjIKB21hcmtldHMYASADKAsyIS5tYXJrZXRvdmVydmlldy52MS5NYXJrZXRPdmVydmlldxIZCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAlCACJYChNNYXJrZXRPdmVydmlld0JhdGNoEjIKB21hcmtldHMYASADKAsyIS5tYXJrZXRvdmVydmlldy52MS5NYXJrZXRPdmVydmlldxINCgV0c19ucxgCIAEoBCIyChtHZXRTcG90Vm9sdW1lSGlzdG9yeVJlcXVlc3QSEwoJc3ltYm9sX2lkGAEgAygNQgAiRAoUU3BvdFBhaXJWb2x1bWVTZXJpZXMSEQoJc3ltYm9sX2lkGAEgASgNEhkKEXZvbHVtZV91c2Rfc2NhbGVkGAIgAygSIsEBChxHZXRTcG90Vm9sdW1lSGlzdG9yeVJlc3BvbnNlEg4KBmJ1Y2tldBgBIAEoCRIUCgxzdGFydF90c19zZWMYAiABKAcSEgoKZW5kX3RzX3NlYxgDIAEoBxIOCgZwb2ludHMYBCABKA0SNgoFcGFpcnMYBSADKAsyJy5tYXJrZXRvdmVydmlldy52MS5TcG90UGFpclZvbHVtZVNlcmllcxIfChd0b3RhbF92b2x1bWVfdXNkX3NjYWxlZBgGIAMoEiJnChBDdXJyZW5jeU1ldGFkYXRhEgwKBGNvZGUYASABKAkSHAoUZGVmYXVsdF9lbmdsaXNoX25hbWUYAiABKAkSDgoGc3ltYm9sGAMgASgJEhcKD2ZyYWN0aW9uX2RpZ2l0cxgEIAEoDSIkCiJHZXRDdXJyZW5jeUNvbnZlcnNpb25Db25maWdSZXF1ZXN0IpIBCiNHZXRDdXJyZW5jeUNvbnZlcnNpb25Db25maWdSZXNwb25zZRIxCgRmaWF0GAEgAygLMiMubWFya2V0b3ZlcnZpZXcudjEuQ3VycmVuY3lNZXRhZGF0YRI4CgtzdGFibGVjb2lucxgCIAMoCzIjLm1hcmtldG92ZXJ2aWV3LnYxLkN1cnJlbmN5TWV0YWRhdGEiPAoSRmlhdENvbnZlcnNpb25SYXRlEgwKBGNvZGUYASABKAkSGAoQdW5pdHNfcGVyX3VzZF9lOBgCIAEoAyJ0ChZGaWF0Q29udmVyc2lvblNuYXBzaG90EjQKBXJhdGVzGAEgAygLMiUubWFya2V0b3ZlcnZpZXcudjEuRmlhdENvbnZlcnNpb25SYXRlEhUKDXNvdXJjZV90c19zZWMYAiABKAQSDQoFc3RhbGUYAyABKAgiZwoYU3RhYmxlY29pbkNvbnZlcnNpb25SYXRlEgwKBGNvZGUYASABKAkSFwoPdXNkX3Blcl91bml0X2U4GAIgASgDEhUKDXNvdXJjZV90c19zZWMYAyABKAQSDQoFc3RhbGUYBCABKAgiIwohR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNSZXF1ZXN0IrgBCiJHZXRDdXJyZW5jeUNvbnZlcnNpb25SYXRlc1Jlc3BvbnNlEjcKBGZpYXQYASABKAsyKS5tYXJrZXRvdmVydmlldy52MS5GaWF0Q29udmVyc2lvblNuYXBzaG90EkAKC3N0YWJsZWNvaW5zGAIgAygLMisubWFya2V0b3ZlcnZpZXcudjEuU3RhYmxlY29pbkNvbnZlcnNpb25SYXRlEhcKD3NuYXBzaG90X3RzX3NlYxgDIAEoBCqAAQoRU3BhcmtsaW5lSW50ZXJ2YWwSIgoeU1BBUktMSU5FX0lOVEVSVkFMX1VOU1BFQ0lGSUVEEAASEAoMU1BBUktMSU5FXzFIEAESEQoNU1BBUktMSU5FXzI0SBACEhAKDFNQQVJLTElORV8xVxADEhAKDFNQQVJLTElORV8xTRAEKpwBCg1NYXJrZXRPcmRlckJ5Eh8KG01BUktFVF9PUkRFUl9CWV9VTlNQRUNJRklFRBAAEhsKF09SREVSX0JZX0NIQU5HRV8yNEhfQlBTEAESGwoXT1JERVJfQllfVk9MVU1FXzI0SF9VU0QQAhIXChNPUkRFUl9CWV9MQVNUX1BSSUNFEAMSFwoTT1JERVJfQllfREFURV9BRERFRBAEKkwKDVNvcnREaXJlY3Rpb24SHgoaU09SVF9ESVJFQ1RJT05fVU5TUEVDSUZJRUQQABIMCghTT1JUX0FTQxABEg0KCVNPUlRfREVTQxACKrkBCglFcnJvckNvZGUSGgoWRVJST1JfQ09ERV9VTlNQRUNJRklFRBAAEhoKFkVSUk9SX0NPREVfQkFEX1JFUVVFU1QQARIfChtFUlJPUl9DT0RFX0lOVkFMSURfQVJHVU1FTlQQAhIYChRFUlJPUl9DT0RFX05PVF9GT1VORBADEhoKFkVSUk9SX0NPREVfVU5BVkFJTEFCTEUQBBIdChlFUlJPUl9DT0RFX1VQU1RSRUFNX0VSUk9SEAUypgQKFU1hcmtldE92ZXJ2aWV3U2VydmljZRKOAQobR2V0Q3VycmVuY3lDb252ZXJzaW9uQ29uZmlnEjUubWFya2V0b3ZlcnZpZXcudjEuR2V0Q3VycmVuY3lDb252ZXJzaW9uQ29uZmlnUmVxdWVzdBo2Lm1hcmtldG92ZXJ2aWV3LnYxLkdldEN1cnJlbmN5Q29udmVyc2lvbkNvbmZpZ1Jlc3BvbnNlIgASiwEKGkdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzEjQubWFya2V0b3ZlcnZpZXcudjEuR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNSZXF1ZXN0GjUubWFya2V0b3ZlcnZpZXcudjEuR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNSZXNwb25zZSIAEnkKFEdldFNwb3RWb2x1bWVIaXN0b3J5Ei4ubWFya2V0b3ZlcnZpZXcudjEuR2V0U3BvdFZvbHVtZUhpc3RvcnlSZXF1ZXN0Gi8ubWFya2V0b3ZlcnZpZXcudjEuR2V0U3BvdFZvbHVtZUhpc3RvcnlSZXNwb25zZSIAEnMKEkxpc3RNYXJrZXRPdmVydmlldxIsLm1hcmtldG92ZXJ2aWV3LnYxLkxpc3RNYXJrZXRPdmVydmlld1JlcXVlc3QaLS5tYXJrZXRvdmVydmlldy52MS5MaXN0TWFya2V0T3ZlcnZpZXdSZXNwb25zZSIAQlBaTmdpdGh1Yi5jb20vRmFicmljLUxhYnMvcG9seWVzdGVyLXNkay1nby9nZW4vbWFya2V0b3ZlcnZpZXcvdjE7bWFya2V0b3ZlcnZpZXd2MWIGcHJvdG8z\", [file_polyester_api_options]);\n\n/**\n * ErrorDetail carries a typed domain error code for machine-readable handling.\n *\n * @generated from message marketoverview.v1.ErrorDetail\n */\nexport type ErrorDetail = Message<\"marketoverview.v1.ErrorDetail\"> & {\n /**\n * Stable error code for programmatic matching.\n *\n * @generated from field: marketoverview.v1.ErrorCode code = 1;\n */\n code: ErrorCode;\n};\n\n/**\n * Describes the message marketoverview.v1.ErrorDetail.\n * Use `create(ErrorDetailSchema)` to create a new message.\n */\nexport const ErrorDetailSchema: GenMessage<ErrorDetail> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 0);\n\n/**\n * Sparkline contains newest-first close prices for one time range.\n *\n * @generated from message marketoverview.v1.Sparkline\n */\nexport type Sparkline = Message<\"marketoverview.v1.Sparkline\"> & {\n /**\n * Time range and sampling resolution represented by these close prices.\n *\n * @generated from field: marketoverview.v1.SparklineInterval interval = 1;\n */\n interval: SparklineInterval;\n\n /**\n * Newest-first close prices in quote units scaled by 1e6.\n *\n * @generated from field: repeated int64 close_ticks = 2;\n */\n closeTicks: bigint[];\n};\n\n/**\n * Describes the message marketoverview.v1.Sparkline.\n * Use `create(SparklineSchema)` to create a new message.\n */\nexport const SparklineSchema: GenMessage<Sparkline> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 1);\n\n/**\n * @generated from message marketoverview.v1.MarketOverview\n */\nexport type MarketOverview = Message<\"marketoverview.v1.MarketOverview\"> & {\n /**\n * Numeric spot market identifier.\n *\n * @generated from field: uint32 symbol_id = 1;\n */\n symbolId: number;\n\n /**\n * Last traded price in quote units scaled by 1e6.\n *\n * @generated from field: int64 last_price_ticks = 3;\n */\n lastPriceTicks: bigint;\n\n /**\n * Last trade timestamp in nanoseconds since epoch.\n *\n * @generated from field: uint64 last_trade_ts_ns = 4;\n */\n lastTradeTsNs: bigint;\n\n /**\n * Rolling 24h change expressed in basis points (bp). Example: +123 = +1.23%.\n *\n * @generated from field: int32 change_24h_bps = 5;\n */\n change24hBps: number;\n\n /**\n * Rolling 24h stats.\n * Highest traded price in the 24h window, in quote units scaled by 1e6.\n *\n * @generated from field: int64 high_24h_ticks = 6;\n */\n high24hTicks: bigint;\n\n /**\n * Lowest traded price in the 24h window, in quote units scaled by 1e6.\n *\n * @generated from field: int64 low_24h_ticks = 7;\n */\n low24hTicks: bigint;\n\n /**\n * Rolling 24h base volume scaled by the pair's base_quantity_scale from\n * GetSpotConfig. Omitted if the amount exceeds the signed 64-bit range.\n *\n * @generated from field: optional int64 volume_24h_base_scaled = 8;\n */\n volume24hBaseScaled?: bigint | undefined;\n\n /**\n * Rolling 24h quote volume scaled by the pair's quote_quantity_scale from\n * GetSpotConfig. Omitted if the amount exceeds the signed 64-bit range.\n *\n * @generated from field: optional int64 volume_24h_quote_scaled = 14;\n */\n volume24hQuoteScaled?: bigint | undefined;\n\n /**\n * Rolling 24h USD volume, scaled by 1e6 (one unit is 0.000001 USD).\n * Applies the current quote/USD conversion to the rolling quote volume.\n * When conversion is unavailable, USDT and USDC are valued at USD parity.\n * Omitted for other quote assets when a current conversion is unavailable.\n *\n * @generated from field: optional int64 volume_24h_usd_scaled = 17;\n */\n volume24hUsdScaled?: bigint | undefined;\n\n /**\n * Listing timestamp in nanoseconds since epoch.\n *\n * @generated from field: uint64 listed_ts_ns = 15;\n */\n listedTsNs: bigint;\n\n /**\n * Current best bid price in quote units scaled by 1e6.\n *\n * @generated from field: int64 best_bid_ticks = 9;\n */\n bestBidTicks: bigint;\n\n /**\n * Best bid quantity scaled by the pair's base_quantity_scale from\n * GetSpotConfig.\n *\n * @generated from field: int64 best_bid_qty_scaled = 10;\n */\n bestBidQtyScaled: bigint;\n\n /**\n * Current best ask price in quote units scaled by 1e6.\n *\n * @generated from field: int64 best_ask_ticks = 11;\n */\n bestAskTicks: bigint;\n\n /**\n * Best ask quantity scaled by the pair's base_quantity_scale from\n * GetSpotConfig.\n *\n * @generated from field: int64 best_ask_qty_scaled = 12;\n */\n bestAskQtyScaled: bigint;\n\n /**\n * Optional sparklines (requested explicitly).\n *\n * @generated from field: repeated marketoverview.v1.Sparkline sparklines = 13;\n */\n sparklines: Sparkline[];\n\n /**\n * Current multi-venue index price in quote units scaled by 1e6.\n * Zero when no fresh, valid index price is available.\n *\n * @generated from field: int64 index_price_ticks = 16;\n */\n indexPriceTicks: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.MarketOverview.\n * Use `create(MarketOverviewSchema)` to create a new message.\n */\nexport const MarketOverviewSchema: GenMessage<MarketOverview> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 2);\n\n/**\n * @generated from message marketoverview.v1.ListMarketOverviewRequest\n */\nexport type ListMarketOverviewRequest = Message<\"marketoverview.v1.ListMarketOverviewRequest\"> & {\n /**\n * Filter by stable numeric pair IDs from GetSpotConfig. When empty, returns\n * all enabled markets.\n *\n * @generated from field: repeated uint32 symbol_id = 1;\n */\n symbolId: number[];\n\n /**\n * Maximum number of markets to return. Defaults to 50 when omitted; maximum\n * is 2000.\n *\n * @generated from field: uint32 limit = 2;\n */\n limit: number;\n\n /**\n * Opaque keyset cursor from a previous response. The cursor is exclusive and\n * bound to symbol IDs, sort key, and sort direction. Sparkline options\n * affect only response enrichment and may change between pages.\n *\n * @generated from field: string page_token = 3;\n */\n pageToken: string;\n\n /**\n * Sort key. When unset/UNSPECIFIED, defaults to descending 24h USD volume.\n *\n * @generated from field: marketoverview.v1.MarketOrderBy order_by = 4;\n */\n orderBy: MarketOrderBy;\n\n /**\n * Sort direction (DESC=newest/highest first).\n *\n * @generated from field: marketoverview.v1.SortDirection sort = 5;\n */\n sort: SortDirection;\n\n /**\n * When true, include sparklines in each MarketOverview.\n *\n * @generated from field: bool include_sparklines = 6;\n */\n includeSparklines: boolean;\n\n /**\n * Which sparklines to include. If empty and include_sparklines is true,\n * server defaults to 24h.\n *\n * @generated from field: repeated marketoverview.v1.SparklineInterval sparkline_intervals = 7;\n */\n sparklineIntervals: SparklineInterval[];\n};\n\n/**\n * Describes the message marketoverview.v1.ListMarketOverviewRequest.\n * Use `create(ListMarketOverviewRequestSchema)` to create a new message.\n */\nexport const ListMarketOverviewRequestSchema: GenMessage<ListMarketOverviewRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 3);\n\n/**\n * @generated from message marketoverview.v1.ListMarketOverviewResponse\n */\nexport type ListMarketOverviewResponse = Message<\"marketoverview.v1.ListMarketOverviewResponse\"> & {\n /**\n * Market overview rows for the requested page.\n *\n * @generated from field: repeated marketoverview.v1.MarketOverview markets = 1;\n */\n markets: MarketOverview[];\n\n /**\n * Opaque cursor for the next page. Empty when no more results exist.\n *\n * @generated from field: string next_page_token = 2;\n */\n nextPageToken: string;\n};\n\n/**\n * Describes the message marketoverview.v1.ListMarketOverviewResponse.\n * Use `create(ListMarketOverviewResponseSchema)` to create a new message.\n */\nexport const ListMarketOverviewResponseSchema: GenMessage<ListMarketOverviewResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 4);\n\n/**\n * MarketOverviewBatch is a websocket payload carrying batched market overview\n * updates. It is published to a single all-markets channel at a fixed cadence.\n *\n * @generated from message marketoverview.v1.MarketOverviewBatch\n */\nexport type MarketOverviewBatch = Message<\"marketoverview.v1.MarketOverviewBatch\"> & {\n /**\n * Market overviews included in this batch.\n *\n * @generated from field: repeated marketoverview.v1.MarketOverview markets = 1;\n */\n markets: MarketOverview[];\n\n /**\n * Batch publish timestamp in nanoseconds since epoch.\n *\n * @generated from field: uint64 ts_ns = 2;\n */\n tsNs: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.MarketOverviewBatch.\n * Use `create(MarketOverviewBatchSchema)` to create a new message.\n */\nexport const MarketOverviewBatchSchema: GenMessage<MarketOverviewBatch> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 5);\n\n/**\n * A finite spot-volume chart request; no pagination or arbitrary time range.\n *\n * @generated from message marketoverview.v1.GetSpotVolumeHistoryRequest\n */\nexport type GetSpotVolumeHistoryRequest = Message<\"marketoverview.v1.GetSpotVolumeHistoryRequest\"> & {\n /**\n * Pair IDs from GetSpotConfig; empty selects every configured pair separately.\n * At most 2000 distinct positive IDs. Unknown IDs are rejected. If the full\n * universe exceeds 2000 pairs, specify a filter; results are never truncated.\n *\n * @generated from field: repeated uint32 symbol_id = 1;\n */\n symbolId: number[];\n};\n\n/**\n * Describes the message marketoverview.v1.GetSpotVolumeHistoryRequest.\n * Use `create(GetSpotVolumeHistoryRequestSchema)` to create a new message.\n */\nexport const GetSpotVolumeHistoryRequestSchema: GenMessage<GetSpotVolumeHistoryRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 6);\n\n/**\n * One pair appears exactly once, regardless of its base and quote assets.\n * REST renders the scaled amounts as decimal strings in volumeUsd.\n *\n * @generated from message marketoverview.v1.SpotPairVolumeSeries\n */\nexport type SpotPairVolumeSeries = Message<\"marketoverview.v1.SpotPairVolumeSeries\"> & {\n /**\n * Stable numeric pair ID; clients may group these series by base asset.\n *\n * @generated from field: uint32 symbol_id = 1;\n */\n symbolId: number;\n\n /**\n * Trailing-24h USD amounts scaled by 1e6, oldest first. Exactly points values,\n * aligned with the shared response grid. Zero means no executed trades in\n * the window. USD values round down once per contributing 15-minute bucket.\n *\n * @generated from field: repeated sint64 volume_usd_scaled = 2;\n */\n volumeUsdScaled: bigint[];\n};\n\n/**\n * Describes the message marketoverview.v1.SpotPairVolumeSeries.\n * Use `create(SpotPairVolumeSeriesSchema)` to create a new message.\n */\nexport const SpotPairVolumeSeriesSchema: GenMessage<SpotPairVolumeSeries> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 7);\n\n/**\n * Aligned columnar trailing-24h USD series over the most recent 24 hours.\n * The grid always contains 97 samples ending at the latest completed UTC\n * quarter-hour. Index i maps to start_ts_sec + i * 900 seconds. Each sample\n * covers [sample time - 24h, sample time); only the preceding 48 hours contribute.\n * USD conversion uses historical quote/USD prices at each completed bucket\n * boundary. When conversion is unavailable, USDT and USDC are valued at USD parity.\n * If any contributing trade cannot be valued, or a USD amount overflows,\n * the RPC fails as unavailable; partial or zero-filled valuations are not returned.\n * Intervals without executed trades are zero. Results may be reused for 15 seconds.\n *\n * @generated from message marketoverview.v1.GetSpotVolumeHistoryResponse\n */\nexport type GetSpotVolumeHistoryResponse = Message<\"marketoverview.v1.GetSpotVolumeHistoryResponse\"> & {\n /**\n * Sampling interval between points; currently always \"15m\".\n *\n * @generated from field: string bucket = 1;\n */\n bucket: string;\n\n /**\n * First sample timestamp in seconds since Unix epoch (UTC), inclusive.\n *\n * @generated from field: fixed32 start_ts_sec = 2;\n */\n startTsSec: number;\n\n /**\n * Last sample timestamp in seconds since Unix epoch (UTC), inclusive.\n *\n * @generated from field: fixed32 end_ts_sec = 3;\n */\n endTsSec: number;\n\n /**\n * Number of aligned values in every pair array and the total array; always 97.\n *\n * @generated from field: uint32 points = 4;\n */\n points: number;\n\n /**\n * Pairs ordered by ascending symbol_id; at most 2000, each included once.\n *\n * @generated from field: repeated marketoverview.v1.SpotPairVolumeSeries pairs = 5;\n */\n pairs: SpotPairVolumeSeries[];\n\n /**\n * Sum across selected pairs, USD scaled by 1e6. Exactly points values,\n * oldest first. REST renders decimal strings in totalVolumeUsd.\n * Do not sum overlapping trailing-24h samples to obtain period traded volume.\n *\n * @generated from field: repeated sint64 total_volume_usd_scaled = 6;\n */\n totalVolumeUsdScaled: bigint[];\n};\n\n/**\n * Describes the message marketoverview.v1.GetSpotVolumeHistoryResponse.\n * Use `create(GetSpotVolumeHistoryResponseSchema)` to create a new message.\n */\nexport const GetSpotVolumeHistoryResponseSchema: GenMessage<GetSpotVolumeHistoryResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 8);\n\n/**\n * CurrencyMetadata supplies stable defaults for display conversion. Clients may\n * localize names, symbols, and number formatting for the user's locale.\n *\n * @generated from message marketoverview.v1.CurrencyMetadata\n */\nexport type CurrencyMetadata = Message<\"marketoverview.v1.CurrencyMetadata\"> & {\n /**\n * Uppercase currency or stablecoin code, such as EUR or USDT.\n *\n * @generated from field: string code = 1;\n */\n code: string;\n\n /**\n * Default English display name.\n *\n * @generated from field: string default_english_name = 2;\n */\n defaultEnglishName: string;\n\n /**\n * Representative local display symbol; multiple currencies may share a symbol.\n * Uses the code when the selected local display data has no distinct visible symbol.\n *\n * @generated from field: string symbol = 3;\n */\n symbol: string;\n\n /**\n * Default display fraction digits, including zero for currencies such as JPY.\n * This is a formatting default, not rate precision, token decimals, or cash rounding.\n * Stablecoins use two display fraction digits.\n *\n * @generated from field: uint32 fraction_digits = 4;\n */\n fractionDigits: number;\n};\n\n/**\n * Describes the message marketoverview.v1.CurrencyMetadata.\n * Use `create(CurrencyMetadataSchema)` to create a new message.\n */\nexport const CurrencyMetadataSchema: GenMessage<CurrencyMetadata> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 9);\n\n/**\n * GetCurrencyConversionConfigRequest has no parameters.\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionConfigRequest\n */\nexport type GetCurrencyConversionConfigRequest = Message<\"marketoverview.v1.GetCurrencyConversionConfigRequest\"> & {\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionConfigRequest.\n * Use `create(GetCurrencyConversionConfigRequestSchema)` to create a new message.\n */\nexport const GetCurrencyConversionConfigRequestSchema: GenMessage<GetCurrencyConversionConfigRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 10);\n\n/**\n * GetCurrencyConversionConfigResponse contains finite, cacheable display metadata.\n * It remains available before any rates have been observed.\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionConfigResponse\n */\nexport type GetCurrencyConversionConfigResponse = Message<\"marketoverview.v1.GetCurrencyConversionConfigResponse\"> & {\n /**\n * Supported fiat currencies, including USD, ordered by code.\n *\n * @generated from field: repeated marketoverview.v1.CurrencyMetadata fiat = 1;\n */\n fiat: CurrencyMetadata[];\n\n /**\n * Supported stablecoins (USDC and USDT), ordered by code.\n *\n * @generated from field: repeated marketoverview.v1.CurrencyMetadata stablecoins = 2;\n */\n stablecoins: CurrencyMetadata[];\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionConfigResponse.\n * Use `create(GetCurrencyConversionConfigResponseSchema)` to create a new message.\n */\nexport const GetCurrencyConversionConfigResponseSchema: GenMessage<GetCurrencyConversionConfigResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 11);\n\n/**\n * FiatConversionRate states the fiat currency units equal to one US dollar.\n *\n * @generated from message marketoverview.v1.FiatConversionRate\n */\nexport type FiatConversionRate = Message<\"marketoverview.v1.FiatConversionRate\"> & {\n /**\n * Supported fiat currency code.\n *\n * @generated from field: string code = 1;\n */\n code: string;\n\n /**\n * Fiat currency units per 1 USD, scaled by 1e8. USD has the identity value 1e8.\n *\n * @generated from field: int64 units_per_usd_e8 = 2;\n */\n unitsPerUsdE8: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.FiatConversionRate.\n * Use `create(FiatConversionRateSchema)` to create a new message.\n */\nexport const FiatConversionRateSchema: GenMessage<FiatConversionRate> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 12);\n\n/**\n * FiatConversionSnapshot contains all supported fiat rates from one observation.\n *\n * @generated from message marketoverview.v1.FiatConversionSnapshot\n */\nexport type FiatConversionSnapshot = Message<\"marketoverview.v1.FiatConversionSnapshot\"> & {\n /**\n * Complete fiat rates, including USD, ordered by code.\n *\n * @generated from field: repeated marketoverview.v1.FiatConversionRate rates = 1;\n */\n rates: FiatConversionRate[];\n\n /**\n * Shared source observation time in seconds since the Unix epoch (UTC).\n *\n * @generated from field: uint64 source_ts_sec = 2;\n */\n sourceTsSec: bigint;\n\n /**\n * True once the source observation is at least two hours old.\n *\n * @generated from field: bool stale = 3;\n */\n stale: boolean;\n};\n\n/**\n * Describes the message marketoverview.v1.FiatConversionSnapshot.\n * Use `create(FiatConversionSnapshotSchema)` to create a new message.\n */\nexport const FiatConversionSnapshotSchema: GenMessage<FiatConversionSnapshot> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 13);\n\n/**\n * StablecoinConversionRate states the observed USD value of one stablecoin unit.\n *\n * @generated from message marketoverview.v1.StablecoinConversionRate\n */\nexport type StablecoinConversionRate = Message<\"marketoverview.v1.StablecoinConversionRate\"> & {\n /**\n * Supported stablecoin code (USDC or USDT).\n *\n * @generated from field: string code = 1;\n */\n code: string;\n\n /**\n * USD per 1 stablecoin unit, scaled by 1e8. This is an observed price, not a fixed peg.\n *\n * @generated from field: int64 usd_per_unit_e8 = 2;\n */\n usdPerUnitE8: bigint;\n\n /**\n * This stablecoin's source observation time in seconds since the Unix epoch (UTC).\n *\n * @generated from field: uint64 source_ts_sec = 3;\n */\n sourceTsSec: bigint;\n\n /**\n * True once this stablecoin's source observation is at least five seconds old.\n *\n * @generated from field: bool stale = 4;\n */\n stale: boolean;\n};\n\n/**\n * Describes the message marketoverview.v1.StablecoinConversionRate.\n * Use `create(StablecoinConversionRateSchema)` to create a new message.\n */\nexport const StablecoinConversionRateSchema: GenMessage<StablecoinConversionRate> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 14);\n\n/**\n * GetCurrencyConversionRatesRequest has no parameters.\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionRatesRequest\n */\nexport type GetCurrencyConversionRatesRequest = Message<\"marketoverview.v1.GetCurrencyConversionRatesRequest\"> & {\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionRatesRequest.\n * Use `create(GetCurrencyConversionRatesRequestSchema)` to create a new message.\n */\nexport const GetCurrencyConversionRatesRequestSchema: GenMessage<GetCurrencyConversionRatesRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 15);\n\n/**\n * GetCurrencyConversionRatesResponse groups rates by their USD conversion direction.\n * Last-known observations remain available with staleness indicated. Before any\n * observation is available, the request fails with unavailable (HTTP 503).\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionRatesResponse\n */\nexport type GetCurrencyConversionRatesResponse = Message<\"marketoverview.v1.GetCurrencyConversionRatesResponse\"> & {\n /**\n * Complete fiat snapshot; absent until a complete snapshot has been observed.\n *\n * @generated from field: marketoverview.v1.FiatConversionSnapshot fiat = 1;\n */\n fiat?: FiatConversionSnapshot | undefined;\n\n /**\n * Observed stablecoin rates ordered by code. Unobserved stablecoins are omitted.\n *\n * @generated from field: repeated marketoverview.v1.StablecoinConversionRate stablecoins = 2;\n */\n stablecoins: StablecoinConversionRate[];\n\n /**\n * Response construction time in seconds since the Unix epoch (UTC).\n *\n * @generated from field: uint64 snapshot_ts_sec = 3;\n */\n snapshotTsSec: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionRatesResponse.\n * Use `create(GetCurrencyConversionRatesResponseSchema)` to create a new message.\n */\nexport const GetCurrencyConversionRatesResponseSchema: GenMessage<GetCurrencyConversionRatesResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 16);\n\n/**\n * SparklineInterval identifies the time range and sampling resolution for a\n * sparkline.\n *\n * @generated from enum marketoverview.v1.SparklineInterval\n */\nexport enum SparklineInterval {\n /**\n * Unspecified interval. When requested, server may default to 24H.\n *\n * @generated from enum value: SPARKLINE_INTERVAL_UNSPECIFIED = 0;\n */\n SPARKLINE_INTERVAL_UNSPECIFIED = 0,\n\n /**\n * 1 hour sparkline. Typically returns up to 60 points (1-minute buckets).\n *\n * @generated from enum value: SPARKLINE_1H = 1;\n */\n SPARKLINE_1H = 1,\n\n /**\n * 24 hour sparkline. Typically returns up to 96 points (15-minute buckets).\n *\n * @generated from enum value: SPARKLINE_24H = 2;\n */\n SPARKLINE_24H = 2,\n\n /**\n * 1 week sparkline. Typically returns up to 168 points (1-hour buckets).\n *\n * @generated from enum value: SPARKLINE_1W = 3;\n */\n SPARKLINE_1W = 3,\n\n /**\n * 1 month sparkline. Typically returns up to 180 points (4-hour buckets).\n *\n * @generated from enum value: SPARKLINE_1M = 4;\n */\n SPARKLINE_1M = 4,\n}\n\n/**\n * Describes the enum marketoverview.v1.SparklineInterval.\n */\nexport const SparklineIntervalSchema: GenEnum<SparklineInterval> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 0);\n\n/**\n * @generated from enum marketoverview.v1.MarketOrderBy\n */\nexport enum MarketOrderBy {\n /**\n * @generated from enum value: MARKET_ORDER_BY_UNSPECIFIED = 0;\n */\n MARKET_ORDER_BY_UNSPECIFIED = 0,\n\n /**\n * Sort by absolute 24h change (basis points).\n *\n * @generated from enum value: ORDER_BY_CHANGE_24H_BPS = 1;\n */\n ORDER_BY_CHANGE_24H_BPS = 1,\n\n /**\n * Sort by canonical USD 24h volume. Unvalued markets sort last in either direction.\n *\n * @generated from enum value: ORDER_BY_VOLUME_24H_USD = 2;\n */\n ORDER_BY_VOLUME_24H_USD = 2,\n\n /**\n * Sort by last price in quote units scaled by 1e6.\n *\n * @generated from enum value: ORDER_BY_LAST_PRICE = 3;\n */\n ORDER_BY_LAST_PRICE = 3,\n\n /**\n * Sort by listing time (new listings first).\n *\n * @generated from enum value: ORDER_BY_DATE_ADDED = 4;\n */\n ORDER_BY_DATE_ADDED = 4,\n}\n\n/**\n * Describes the enum marketoverview.v1.MarketOrderBy.\n */\nexport const MarketOrderBySchema: GenEnum<MarketOrderBy> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 1);\n\n/**\n * @generated from enum marketoverview.v1.SortDirection\n */\nexport enum SortDirection {\n /**\n * @generated from enum value: SORT_DIRECTION_UNSPECIFIED = 0;\n */\n SORT_DIRECTION_UNSPECIFIED = 0,\n\n /**\n * Ascending (oldest/lowest first).\n *\n * @generated from enum value: SORT_ASC = 1;\n */\n SORT_ASC = 1,\n\n /**\n * Descending (newest/highest first).\n *\n * @generated from enum value: SORT_DESC = 2;\n */\n SORT_DESC = 2,\n}\n\n/**\n * Describes the enum marketoverview.v1.SortDirection.\n */\nexport const SortDirectionSchema: GenEnum<SortDirection> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 2);\n\n/**\n * ErrorCode is a stable domain error code enum for Market Overview.\n * It is used for consistent error surfaces across ConnectRPC and REST.\n *\n * @generated from enum marketoverview.v1.ErrorCode\n */\nexport enum ErrorCode {\n /**\n * @generated from enum value: ERROR_CODE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * @generated from enum value: ERROR_CODE_BAD_REQUEST = 1;\n */\n BAD_REQUEST = 1,\n\n /**\n * @generated from enum value: ERROR_CODE_INVALID_ARGUMENT = 2;\n */\n INVALID_ARGUMENT = 2,\n\n /**\n * @generated from enum value: ERROR_CODE_NOT_FOUND = 3;\n */\n NOT_FOUND = 3,\n\n /**\n * @generated from enum value: ERROR_CODE_UNAVAILABLE = 4;\n */\n UNAVAILABLE = 4,\n\n /**\n * @generated from enum value: ERROR_CODE_UPSTREAM_ERROR = 5;\n */\n UPSTREAM_ERROR = 5,\n}\n\n/**\n * Describes the enum marketoverview.v1.ErrorCode.\n */\nexport const ErrorCodeSchema: GenEnum<ErrorCode> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 3);\n\n/**\n * List ticker-style market overview rows with optional sparklines.\n * Supports symbol filtering, sorting, and pagination controls.\n *\n * @generated from service marketoverview.v1.MarketOverviewService\n */\nexport const MarketOverviewService: GenService<{\n /**\n * Get supported fiat and stablecoin display metadata with default English names,\n * symbols, and fraction digits. Clients may localize presentation.\n *\n * @generated from rpc marketoverview.v1.MarketOverviewService.GetCurrencyConversionConfig\n */\n getCurrencyConversionConfig: {\n methodKind: \"unary\";\n input: typeof GetCurrencyConversionConfigRequestSchema;\n output: typeof GetCurrencyConversionConfigResponseSchema;\n },\n /**\n * Get fiat units per USD and USD per stablecoin unit, grouped with source freshness.\n *\n * @generated from rpc marketoverview.v1.MarketOverviewService.GetCurrencyConversionRates\n */\n getCurrencyConversionRates: {\n methodKind: \"unary\";\n input: typeof GetCurrencyConversionRatesRequestSchema;\n output: typeof GetCurrencyConversionRatesResponseSchema;\n },\n /**\n * Get aligned pair-level and total trailing-24h USD volume, sampled every\n * 15 minutes over the latest day. Unavailable valuations fail the request.\n *\n * @generated from rpc marketoverview.v1.MarketOverviewService.GetSpotVolumeHistory\n */\n getSpotVolumeHistory: {\n methodKind: \"unary\";\n input: typeof GetSpotVolumeHistoryRequestSchema;\n output: typeof GetSpotVolumeHistoryResponseSchema;\n },\n /**\n * @generated from rpc marketoverview.v1.MarketOverviewService.ListMarketOverview\n */\n listMarketOverview: {\n methodKind: \"unary\";\n input: typeof ListMarketOverviewRequestSchema;\n output: typeof ListMarketOverviewResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_marketoverview_v1_marketoverview, 0);\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAa,wCACX,uBAAS,oqJAAoqJ,CAAC,0BAA0B,CAAC;;;;;AAoB3sJ,MAAa,oBACX,0BAAY,uCAAuC,CAAC;;;;;AA2BtD,MAAa,kBACX,0BAAY,uCAAuC,CAAC;;;;;AAoItD,MAAa,uBACX,0BAAY,uCAAuC,CAAC;;;;;AAiEtD,MAAa,kCACX,0BAAY,uCAAuC,CAAC;;;;;AAyBtD,MAAa,mCACX,0BAAY,uCAAuC,CAAC;;;;;AA4BtD,MAAa,4BACX,0BAAY,uCAAuC,CAAC;;;;;AAsBtD,MAAa,oCACX,0BAAY,uCAAuC,CAAC;;;;;AA8BtD,MAAa,6BACX,0BAAY,uCAAuC,CAAC;;;;;AAiEtD,MAAa,qCACX,0BAAY,uCAAuC,CAAC;;;;;AA6CtD,MAAa,yBACX,0BAAY,uCAAuC,CAAC;;;;;AActD,MAAa,2CACX,0BAAY,uCAAuC,EAAE;;;;;AA4BvD,MAAa,4CACX,0BAAY,uCAAuC,EAAE;;;;;AA2BvD,MAAa,2BACX,0BAAY,uCAAuC,EAAE;;;;;AAkCvD,MAAa,+BACX,0BAAY,uCAAuC,EAAE;;;;;AAyCvD,MAAa,iCACX,0BAAY,uCAAuC,EAAE;;;;;AAcvD,MAAa,0CACX,0BAAY,uCAAuC,EAAE;;;;;AAoCvD,MAAa,2CACX,0BAAY,uCAAuC,EAAE;;;;;;;AAQvD,IAAY,oBAAL,yBAAA,mBAAA;;;;;;CAML,kBAAA,kBAAA,oCAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,kBAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,mBAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,kBAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,kBAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,0BACX,uBAAS,uCAAuC,CAAC;;;;AAKnD,IAAY,gBAAL,yBAAA,eAAA;;;;CAIL,cAAA,cAAA,iCAAA,KAAA;;;;;;CAOA,cAAA,cAAA,6BAAA,KAAA;;;;;;CAOA,cAAA,cAAA,6BAAA,KAAA;;;;;;CAOA,cAAA,cAAA,yBAAA,KAAA;;;;;;CAOA,cAAA,cAAA,yBAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,sBACX,uBAAS,uCAAuC,CAAC;;;;AAKnD,IAAY,gBAAL,yBAAA,eAAA;;;;CAIL,cAAA,cAAA,gCAAA,KAAA;;;;;;CAOA,cAAA,cAAA,cAAA,KAAA;;;;;;CAOA,cAAA,cAAA,eAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,sBACX,uBAAS,uCAAuC,CAAC;;;;;;;AAQnD,IAAY,YAAL,yBAAA,WAAA;;;;CAIL,UAAA,UAAA,iBAAA,KAAA;;;;CAKA,UAAA,UAAA,iBAAA,KAAA;;;;CAKA,UAAA,UAAA,sBAAA,KAAA;;;;CAKA,UAAA,UAAA,eAAA,KAAA;;;;CAKA,UAAA,UAAA,iBAAA,KAAA;;;;CAKA,UAAA,UAAA,oBAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,kBACX,uBAAS,uCAAuC,CAAC;;;;;;;AAQnD,MAAa,wBA0CX,0BAAY,uCAAuC,CAAC"}
|
|
1
|
+
{"version":3,"file":"marketoverview_pb.js","names":[],"sources":["../../../../src/gen/marketoverview/v1/marketoverview_pb.ts"],"sourcesContent":["// @generated by protoc-gen-es v2.13.0 with parameter \"target=ts,import_extension=js\"\n// @generated from file marketoverview/v1/marketoverview.proto (package marketoverview.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_polyester_api_options } from \"../../polyester/api/options_pb.js\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file marketoverview/v1/marketoverview.proto.\n */\nexport const file_marketoverview_v1_marketoverview: GenFile = /*@__PURE__*/\n fileDesc(\"CiZtYXJrZXRvdmVydmlldy92MS9tYXJrZXRvdmVydmlldy5wcm90bxIRbWFya2V0b3ZlcnZpZXcudjEiOQoLRXJyb3JEZXRhaWwSKgoEY29kZRgBIAEoDjIcLm1hcmtldG92ZXJ2aWV3LnYxLkVycm9yQ29kZSJaCglTcGFya2xpbmUSOAoIaW50ZXJ2YWwYASABKA4yJC5tYXJrZXRvdmVydmlldy52MS5TcGFya2xpbmVJbnRlcnZhbEIAEhMKC2Nsb3NlX3RpY2tzGAIgAygDIqsECg5NYXJrZXRPdmVydmlldxIRCglzeW1ib2xfaWQYASABKA0SGAoQbGFzdF9wcmljZV90aWNrcxgDIAEoAxIYChBsYXN0X3RyYWRlX3RzX25zGAQgASgEEhYKDmNoYW5nZV8yNGhfYnBzGAUgASgFEhYKDmhpZ2hfMjRoX3RpY2tzGAYgASgDEhUKDWxvd18yNGhfdGlja3MYByABKAMSIwoWdm9sdW1lXzI0aF9iYXNlX3NjYWxlZBgIIAEoA0gAiAEBEiQKF3ZvbHVtZV8yNGhfcXVvdGVfc2NhbGVkGA4gASgDSAGIAQESIgoVdm9sdW1lXzI0aF91c2Rfc2NhbGVkGBEgASgDSAKIAQESFAoMbGlzdGVkX3RzX25zGA8gASgEEhYKDmJlc3RfYmlkX3RpY2tzGAkgASgDEhsKE2Jlc3RfYmlkX3F0eV9zY2FsZWQYCiABKAMSFgoOYmVzdF9hc2tfdGlja3MYCyABKAMSGwoTYmVzdF9hc2tfcXR5X3NjYWxlZBgMIAEoAxIwCgpzcGFya2xpbmVzGA0gAygLMhwubWFya2V0b3ZlcnZpZXcudjEuU3BhcmtsaW5lEhkKEWluZGV4X3ByaWNlX3RpY2tzGBAgASgDQhkKF192b2x1bWVfMjRoX2Jhc2Vfc2NhbGVkQhoKGF92b2x1bWVfMjRoX3F1b3RlX3NjYWxlZEIYChZfdm9sdW1lXzI0aF91c2Rfc2NhbGVkIqACChlMaXN0TWFya2V0T3ZlcnZpZXdSZXF1ZXN0EhMKCXN5bWJvbF9pZBgBIAMoDUIAEg8KBWxpbWl0GAIgASgNQgASFAoKcGFnZV90b2tlbhgDIAEoCUIAEjQKCG9yZGVyX2J5GAQgASgOMiAubWFya2V0b3ZlcnZpZXcudjEuTWFya2V0T3JkZXJCeUIAEjAKBHNvcnQYBSABKA4yIC5tYXJrZXRvdmVydmlldy52MS5Tb3J0RGlyZWN0aW9uQgASGgoSaW5jbHVkZV9zcGFya2xpbmVzGAYgASgIEkMKE3NwYXJrbGluZV9pbnRlcnZhbHMYByADKA4yJC5tYXJrZXRvdmVydmlldy52MS5TcGFya2xpbmVJbnRlcnZhbEIAImsKGkxpc3RNYXJrZXRPdmVydmlld1Jlc3BvbnNlEjIKB21hcmtldHMYASADKAsyIS5tYXJrZXRvdmVydmlldy52MS5NYXJrZXRPdmVydmlldxIZCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAlCACJYChNNYXJrZXRPdmVydmlld0JhdGNoEjIKB21hcmtldHMYASADKAsyIS5tYXJrZXRvdmVydmlldy52MS5NYXJrZXRPdmVydmlldxINCgV0c19ucxgCIAEoBCIyChtHZXRTcG90Vm9sdW1lSGlzdG9yeVJlcXVlc3QSEwoJc3ltYm9sX2lkGAEgAygNQgAiRAoUU3BvdFBhaXJWb2x1bWVTZXJpZXMSEQoJc3ltYm9sX2lkGAEgASgNEhkKEXZvbHVtZV91c2Rfc2NhbGVkGAIgAygSIsEBChxHZXRTcG90Vm9sdW1lSGlzdG9yeVJlc3BvbnNlEg4KBmJ1Y2tldBgBIAEoCRIUCgxzdGFydF90c19zZWMYAiABKAcSEgoKZW5kX3RzX3NlYxgDIAEoBxIOCgZwb2ludHMYBCABKA0SNgoFcGFpcnMYBSADKAsyJy5tYXJrZXRvdmVydmlldy52MS5TcG90UGFpclZvbHVtZVNlcmllcxIfChd0b3RhbF92b2x1bWVfdXNkX3NjYWxlZBgGIAMoEiJnChBDdXJyZW5jeU1ldGFkYXRhEgwKBGNvZGUYASABKAkSHAoUZGVmYXVsdF9lbmdsaXNoX25hbWUYAiABKAkSDgoGc3ltYm9sGAMgASgJEhcKD2ZyYWN0aW9uX2RpZ2l0cxgEIAEoDSIkCiJHZXRDdXJyZW5jeUNvbnZlcnNpb25Db25maWdSZXF1ZXN0IpIBCiNHZXRDdXJyZW5jeUNvbnZlcnNpb25Db25maWdSZXNwb25zZRIxCgRmaWF0GAEgAygLMiMubWFya2V0b3ZlcnZpZXcudjEuQ3VycmVuY3lNZXRhZGF0YRI4CgtzdGFibGVjb2lucxgCIAMoCzIjLm1hcmtldG92ZXJ2aWV3LnYxLkN1cnJlbmN5TWV0YWRhdGEiPAoSRmlhdENvbnZlcnNpb25SYXRlEgwKBGNvZGUYASABKAkSGAoQdW5pdHNfcGVyX3VzZF9lOBgCIAEoAyJ0ChZGaWF0Q29udmVyc2lvblNuYXBzaG90EjQKBXJhdGVzGAEgAygLMiUubWFya2V0b3ZlcnZpZXcudjEuRmlhdENvbnZlcnNpb25SYXRlEhUKDXNvdXJjZV90c19zZWMYAiABKAQSDQoFc3RhbGUYAyABKAgiZwoYU3RhYmxlY29pbkNvbnZlcnNpb25SYXRlEgwKBGNvZGUYASABKAkSFwoPdXNkX3Blcl91bml0X2U4GAIgASgDEhUKDXNvdXJjZV90c19zZWMYAyABKAQSDQoFc3RhbGUYBCABKAgiIwohR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNSZXF1ZXN0IrgBCiJHZXRDdXJyZW5jeUNvbnZlcnNpb25SYXRlc1Jlc3BvbnNlEjcKBGZpYXQYASABKAsyKS5tYXJrZXRvdmVydmlldy52MS5GaWF0Q29udmVyc2lvblNuYXBzaG90EkAKC3N0YWJsZWNvaW5zGAIgAygLMisubWFya2V0b3ZlcnZpZXcudjEuU3RhYmxlY29pbkNvbnZlcnNpb25SYXRlEhcKD3NuYXBzaG90X3RzX3NlYxgDIAEoBCqAAQoRU3BhcmtsaW5lSW50ZXJ2YWwSIgoeU1BBUktMSU5FX0lOVEVSVkFMX1VOU1BFQ0lGSUVEEAASEAoMU1BBUktMSU5FXzFIEAESEQoNU1BBUktMSU5FXzI0SBACEhAKDFNQQVJLTElORV8xVxADEhAKDFNQQVJLTElORV8xTRAEKpwBCg1NYXJrZXRPcmRlckJ5Eh8KG01BUktFVF9PUkRFUl9CWV9VTlNQRUNJRklFRBAAEhsKF09SREVSX0JZX0NIQU5HRV8yNEhfQlBTEAESGwoXT1JERVJfQllfVk9MVU1FXzI0SF9VU0QQAhIXChNPUkRFUl9CWV9MQVNUX1BSSUNFEAMSFwoTT1JERVJfQllfREFURV9BRERFRBAEKkwKDVNvcnREaXJlY3Rpb24SHgoaU09SVF9ESVJFQ1RJT05fVU5TUEVDSUZJRUQQABIMCghTT1JUX0FTQxABEg0KCVNPUlRfREVTQxACKrkBCglFcnJvckNvZGUSGgoWRVJST1JfQ09ERV9VTlNQRUNJRklFRBAAEhoKFkVSUk9SX0NPREVfQkFEX1JFUVVFU1QQARIfChtFUlJPUl9DT0RFX0lOVkFMSURfQVJHVU1FTlQQAhIYChRFUlJPUl9DT0RFX05PVF9GT1VORBADEhoKFkVSUk9SX0NPREVfVU5BVkFJTEFCTEUQBBIdChlFUlJPUl9DT0RFX1VQU1RSRUFNX0VSUk9SEAUypgQKFU1hcmtldE92ZXJ2aWV3U2VydmljZRKOAQobR2V0Q3VycmVuY3lDb252ZXJzaW9uQ29uZmlnEjUubWFya2V0b3ZlcnZpZXcudjEuR2V0Q3VycmVuY3lDb252ZXJzaW9uQ29uZmlnUmVxdWVzdBo2Lm1hcmtldG92ZXJ2aWV3LnYxLkdldEN1cnJlbmN5Q29udmVyc2lvbkNvbmZpZ1Jlc3BvbnNlIgASiwEKGkdldEN1cnJlbmN5Q29udmVyc2lvblJhdGVzEjQubWFya2V0b3ZlcnZpZXcudjEuR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNSZXF1ZXN0GjUubWFya2V0b3ZlcnZpZXcudjEuR2V0Q3VycmVuY3lDb252ZXJzaW9uUmF0ZXNSZXNwb25zZSIAEnkKFEdldFNwb3RWb2x1bWVIaXN0b3J5Ei4ubWFya2V0b3ZlcnZpZXcudjEuR2V0U3BvdFZvbHVtZUhpc3RvcnlSZXF1ZXN0Gi8ubWFya2V0b3ZlcnZpZXcudjEuR2V0U3BvdFZvbHVtZUhpc3RvcnlSZXNwb25zZSIAEnMKEkxpc3RNYXJrZXRPdmVydmlldxIsLm1hcmtldG92ZXJ2aWV3LnYxLkxpc3RNYXJrZXRPdmVydmlld1JlcXVlc3QaLS5tYXJrZXRvdmVydmlldy52MS5MaXN0TWFya2V0T3ZlcnZpZXdSZXNwb25zZSIAQlBaTmdpdGh1Yi5jb20vRmFicmljLUxhYnMvcG9seWVzdGVyLXNkay1nby9nZW4vbWFya2V0b3ZlcnZpZXcvdjE7bWFya2V0b3ZlcnZpZXd2MWIGcHJvdG8z\", [file_polyester_api_options]);\n\n/**\n * ErrorDetail carries a typed domain error code for machine-readable handling.\n *\n * @generated from message marketoverview.v1.ErrorDetail\n */\nexport type ErrorDetail = Message<\"marketoverview.v1.ErrorDetail\"> & {\n /**\n * Stable error code for programmatic matching.\n *\n * @generated from field: marketoverview.v1.ErrorCode code = 1;\n */\n code: ErrorCode;\n};\n\n/**\n * Describes the message marketoverview.v1.ErrorDetail.\n * Use `create(ErrorDetailSchema)` to create a new message.\n */\nexport const ErrorDetailSchema: GenMessage<ErrorDetail> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 0);\n\n/**\n * Sparkline contains newest-first close prices for one time range.\n *\n * @generated from message marketoverview.v1.Sparkline\n */\nexport type Sparkline = Message<\"marketoverview.v1.Sparkline\"> & {\n /**\n * Time range and sampling resolution represented by these close prices.\n *\n * @generated from field: marketoverview.v1.SparklineInterval interval = 1;\n */\n interval: SparklineInterval;\n\n /**\n * Newest-first close prices in quote units scaled by 1e6.\n *\n * @generated from field: repeated int64 close_ticks = 2;\n */\n closeTicks: bigint[];\n};\n\n/**\n * Describes the message marketoverview.v1.Sparkline.\n * Use `create(SparklineSchema)` to create a new message.\n */\nexport const SparklineSchema: GenMessage<Sparkline> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 1);\n\n/**\n * @generated from message marketoverview.v1.MarketOverview\n */\nexport type MarketOverview = Message<\"marketoverview.v1.MarketOverview\"> & {\n /**\n * Numeric spot market identifier.\n *\n * @generated from field: uint32 symbol_id = 1;\n */\n symbolId: number;\n\n /**\n * Last traded price in quote units scaled by 1e6.\n *\n * @generated from field: int64 last_price_ticks = 3;\n */\n lastPriceTicks: bigint;\n\n /**\n * Last trade timestamp in nanoseconds since epoch.\n *\n * @generated from field: uint64 last_trade_ts_ns = 4;\n */\n lastTradeTsNs: bigint;\n\n /**\n * Rolling 24h change expressed in basis points (bp). Example: +123 = +1.23%.\n *\n * @generated from field: int32 change_24h_bps = 5;\n */\n change24hBps: number;\n\n /**\n * Rolling 24h stats.\n * Highest traded price in the 24h window, in quote units scaled by 1e6.\n *\n * @generated from field: int64 high_24h_ticks = 6;\n */\n high24hTicks: bigint;\n\n /**\n * Lowest traded price in the 24h window, in quote units scaled by 1e6.\n *\n * @generated from field: int64 low_24h_ticks = 7;\n */\n low24hTicks: bigint;\n\n /**\n * Rolling 24h base volume scaled by the base asset's\n * market_data_volume_scale from GetSpotConfig. Omitted if the amount exceeds\n * the signed 64-bit range.\n *\n * @generated from field: optional int64 volume_24h_base_scaled = 8;\n */\n volume24hBaseScaled?: bigint | undefined;\n\n /**\n * Rolling 24h quote volume scaled by the pair's quote_quantity_scale from\n * GetSpotConfig. Omitted if the amount exceeds the signed 64-bit range.\n *\n * @generated from field: optional int64 volume_24h_quote_scaled = 14;\n */\n volume24hQuoteScaled?: bigint | undefined;\n\n /**\n * Rolling 24h USD volume, scaled by 1e6 (one unit is 0.000001 USD).\n * Applies the current quote/USD conversion to the rolling quote volume.\n * When conversion is unavailable, USDT and USDC are valued at USD parity.\n * Omitted for other quote assets when a current conversion is unavailable.\n *\n * @generated from field: optional int64 volume_24h_usd_scaled = 17;\n */\n volume24hUsdScaled?: bigint | undefined;\n\n /**\n * Listing timestamp in nanoseconds since epoch.\n *\n * @generated from field: uint64 listed_ts_ns = 15;\n */\n listedTsNs: bigint;\n\n /**\n * Current best bid price in quote units scaled by 1e6.\n *\n * @generated from field: int64 best_bid_ticks = 9;\n */\n bestBidTicks: bigint;\n\n /**\n * Best bid quantity scaled by the pair's base_quantity_scale from\n * GetSpotConfig.\n *\n * @generated from field: int64 best_bid_qty_scaled = 10;\n */\n bestBidQtyScaled: bigint;\n\n /**\n * Current best ask price in quote units scaled by 1e6.\n *\n * @generated from field: int64 best_ask_ticks = 11;\n */\n bestAskTicks: bigint;\n\n /**\n * Best ask quantity scaled by the pair's base_quantity_scale from\n * GetSpotConfig.\n *\n * @generated from field: int64 best_ask_qty_scaled = 12;\n */\n bestAskQtyScaled: bigint;\n\n /**\n * Optional sparklines (requested explicitly).\n *\n * @generated from field: repeated marketoverview.v1.Sparkline sparklines = 13;\n */\n sparklines: Sparkline[];\n\n /**\n * Current multi-venue index price in quote units scaled by 1e6.\n * Zero when no fresh, valid index price is available.\n *\n * @generated from field: int64 index_price_ticks = 16;\n */\n indexPriceTicks: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.MarketOverview.\n * Use `create(MarketOverviewSchema)` to create a new message.\n */\nexport const MarketOverviewSchema: GenMessage<MarketOverview> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 2);\n\n/**\n * @generated from message marketoverview.v1.ListMarketOverviewRequest\n */\nexport type ListMarketOverviewRequest = Message<\"marketoverview.v1.ListMarketOverviewRequest\"> & {\n /**\n * Filter by stable numeric pair IDs from GetSpotConfig. When empty, returns\n * all enabled markets.\n *\n * @generated from field: repeated uint32 symbol_id = 1;\n */\n symbolId: number[];\n\n /**\n * Maximum number of markets to return. Defaults to 50 when omitted; maximum\n * is 2000.\n *\n * @generated from field: uint32 limit = 2;\n */\n limit: number;\n\n /**\n * Opaque keyset cursor from a previous response. The cursor is exclusive and\n * bound to symbol IDs, sort key, and sort direction. Sparkline options\n * affect only response enrichment and may change between pages.\n *\n * @generated from field: string page_token = 3;\n */\n pageToken: string;\n\n /**\n * Sort key. When unset/UNSPECIFIED, defaults to descending 24h USD volume.\n *\n * @generated from field: marketoverview.v1.MarketOrderBy order_by = 4;\n */\n orderBy: MarketOrderBy;\n\n /**\n * Sort direction (DESC=newest/highest first).\n *\n * @generated from field: marketoverview.v1.SortDirection sort = 5;\n */\n sort: SortDirection;\n\n /**\n * When true, include sparklines in each MarketOverview.\n *\n * @generated from field: bool include_sparklines = 6;\n */\n includeSparklines: boolean;\n\n /**\n * Which sparklines to include. If empty and include_sparklines is true,\n * server defaults to 24h.\n *\n * @generated from field: repeated marketoverview.v1.SparklineInterval sparkline_intervals = 7;\n */\n sparklineIntervals: SparklineInterval[];\n};\n\n/**\n * Describes the message marketoverview.v1.ListMarketOverviewRequest.\n * Use `create(ListMarketOverviewRequestSchema)` to create a new message.\n */\nexport const ListMarketOverviewRequestSchema: GenMessage<ListMarketOverviewRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 3);\n\n/**\n * @generated from message marketoverview.v1.ListMarketOverviewResponse\n */\nexport type ListMarketOverviewResponse = Message<\"marketoverview.v1.ListMarketOverviewResponse\"> & {\n /**\n * Market overview rows for the requested page.\n *\n * @generated from field: repeated marketoverview.v1.MarketOverview markets = 1;\n */\n markets: MarketOverview[];\n\n /**\n * Opaque cursor for the next page. Empty when no more results exist.\n *\n * @generated from field: string next_page_token = 2;\n */\n nextPageToken: string;\n};\n\n/**\n * Describes the message marketoverview.v1.ListMarketOverviewResponse.\n * Use `create(ListMarketOverviewResponseSchema)` to create a new message.\n */\nexport const ListMarketOverviewResponseSchema: GenMessage<ListMarketOverviewResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 4);\n\n/**\n * MarketOverviewBatch is a websocket payload carrying batched market overview\n * updates. It is published to a single all-markets channel at a fixed cadence.\n *\n * @generated from message marketoverview.v1.MarketOverviewBatch\n */\nexport type MarketOverviewBatch = Message<\"marketoverview.v1.MarketOverviewBatch\"> & {\n /**\n * Market overviews included in this batch.\n *\n * @generated from field: repeated marketoverview.v1.MarketOverview markets = 1;\n */\n markets: MarketOverview[];\n\n /**\n * Batch publish timestamp in nanoseconds since epoch.\n *\n * @generated from field: uint64 ts_ns = 2;\n */\n tsNs: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.MarketOverviewBatch.\n * Use `create(MarketOverviewBatchSchema)` to create a new message.\n */\nexport const MarketOverviewBatchSchema: GenMessage<MarketOverviewBatch> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 5);\n\n/**\n * A finite spot-volume chart request; no pagination or arbitrary time range.\n *\n * @generated from message marketoverview.v1.GetSpotVolumeHistoryRequest\n */\nexport type GetSpotVolumeHistoryRequest = Message<\"marketoverview.v1.GetSpotVolumeHistoryRequest\"> & {\n /**\n * Pair IDs from GetSpotConfig; empty selects every configured pair separately.\n * At most 2000 distinct positive IDs. Unknown IDs are rejected. If the full\n * universe exceeds 2000 pairs, specify a filter; results are never truncated.\n *\n * @generated from field: repeated uint32 symbol_id = 1;\n */\n symbolId: number[];\n};\n\n/**\n * Describes the message marketoverview.v1.GetSpotVolumeHistoryRequest.\n * Use `create(GetSpotVolumeHistoryRequestSchema)` to create a new message.\n */\nexport const GetSpotVolumeHistoryRequestSchema: GenMessage<GetSpotVolumeHistoryRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 6);\n\n/**\n * One pair appears exactly once, regardless of its base and quote assets.\n * REST renders the scaled amounts as decimal strings in volumeUsd.\n *\n * @generated from message marketoverview.v1.SpotPairVolumeSeries\n */\nexport type SpotPairVolumeSeries = Message<\"marketoverview.v1.SpotPairVolumeSeries\"> & {\n /**\n * Stable numeric pair ID; clients may group these series by base asset.\n *\n * @generated from field: uint32 symbol_id = 1;\n */\n symbolId: number;\n\n /**\n * Trailing-24h USD amounts scaled by 1e6, oldest first. Exactly points values,\n * aligned with the shared response grid. Zero means no executed trades in\n * the window. USD values round down once per contributing 15-minute bucket.\n *\n * @generated from field: repeated sint64 volume_usd_scaled = 2;\n */\n volumeUsdScaled: bigint[];\n};\n\n/**\n * Describes the message marketoverview.v1.SpotPairVolumeSeries.\n * Use `create(SpotPairVolumeSeriesSchema)` to create a new message.\n */\nexport const SpotPairVolumeSeriesSchema: GenMessage<SpotPairVolumeSeries> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 7);\n\n/**\n * Aligned columnar trailing-24h USD series over the most recent 24 hours.\n * The grid always contains 97 samples ending at the latest completed UTC\n * quarter-hour. Index i maps to start_ts_sec + i * 900 seconds. Each sample\n * covers [sample time - 24h, sample time); only the preceding 48 hours contribute.\n * USD conversion uses historical quote/USD prices at each completed bucket\n * boundary. When conversion is unavailable, USDT and USDC are valued at USD parity.\n * If any contributing trade cannot be valued, or a USD amount overflows,\n * the RPC fails as unavailable; partial or zero-filled valuations are not returned.\n * Intervals without executed trades are zero. Results may be reused for 15 seconds.\n *\n * @generated from message marketoverview.v1.GetSpotVolumeHistoryResponse\n */\nexport type GetSpotVolumeHistoryResponse = Message<\"marketoverview.v1.GetSpotVolumeHistoryResponse\"> & {\n /**\n * Sampling interval between points; currently always \"15m\".\n *\n * @generated from field: string bucket = 1;\n */\n bucket: string;\n\n /**\n * First sample timestamp in seconds since Unix epoch (UTC), inclusive.\n *\n * @generated from field: fixed32 start_ts_sec = 2;\n */\n startTsSec: number;\n\n /**\n * Last sample timestamp in seconds since Unix epoch (UTC), inclusive.\n *\n * @generated from field: fixed32 end_ts_sec = 3;\n */\n endTsSec: number;\n\n /**\n * Number of aligned values in every pair array and the total array; always 97.\n *\n * @generated from field: uint32 points = 4;\n */\n points: number;\n\n /**\n * Pairs ordered by ascending symbol_id; at most 2000, each included once.\n *\n * @generated from field: repeated marketoverview.v1.SpotPairVolumeSeries pairs = 5;\n */\n pairs: SpotPairVolumeSeries[];\n\n /**\n * Sum across selected pairs, USD scaled by 1e6. Exactly points values,\n * oldest first. REST renders decimal strings in totalVolumeUsd.\n * Do not sum overlapping trailing-24h samples to obtain period traded volume.\n *\n * @generated from field: repeated sint64 total_volume_usd_scaled = 6;\n */\n totalVolumeUsdScaled: bigint[];\n};\n\n/**\n * Describes the message marketoverview.v1.GetSpotVolumeHistoryResponse.\n * Use `create(GetSpotVolumeHistoryResponseSchema)` to create a new message.\n */\nexport const GetSpotVolumeHistoryResponseSchema: GenMessage<GetSpotVolumeHistoryResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 8);\n\n/**\n * CurrencyMetadata supplies stable defaults for display conversion. Clients may\n * localize names, symbols, and number formatting for the user's locale.\n *\n * @generated from message marketoverview.v1.CurrencyMetadata\n */\nexport type CurrencyMetadata = Message<\"marketoverview.v1.CurrencyMetadata\"> & {\n /**\n * Uppercase currency or stablecoin code, such as EUR or USDT.\n *\n * @generated from field: string code = 1;\n */\n code: string;\n\n /**\n * Default English display name.\n *\n * @generated from field: string default_english_name = 2;\n */\n defaultEnglishName: string;\n\n /**\n * Representative local display symbol; multiple currencies may share a symbol.\n * Uses the code when the selected local display data has no distinct visible symbol.\n *\n * @generated from field: string symbol = 3;\n */\n symbol: string;\n\n /**\n * Default display fraction digits, including zero for currencies such as JPY.\n * This is a formatting default, not rate precision, token decimals, or cash rounding.\n * Stablecoins use two display fraction digits.\n *\n * @generated from field: uint32 fraction_digits = 4;\n */\n fractionDigits: number;\n};\n\n/**\n * Describes the message marketoverview.v1.CurrencyMetadata.\n * Use `create(CurrencyMetadataSchema)` to create a new message.\n */\nexport const CurrencyMetadataSchema: GenMessage<CurrencyMetadata> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 9);\n\n/**\n * GetCurrencyConversionConfigRequest has no parameters.\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionConfigRequest\n */\nexport type GetCurrencyConversionConfigRequest = Message<\"marketoverview.v1.GetCurrencyConversionConfigRequest\"> & {\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionConfigRequest.\n * Use `create(GetCurrencyConversionConfigRequestSchema)` to create a new message.\n */\nexport const GetCurrencyConversionConfigRequestSchema: GenMessage<GetCurrencyConversionConfigRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 10);\n\n/**\n * GetCurrencyConversionConfigResponse contains finite, cacheable display metadata.\n * It remains available before any rates have been observed.\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionConfigResponse\n */\nexport type GetCurrencyConversionConfigResponse = Message<\"marketoverview.v1.GetCurrencyConversionConfigResponse\"> & {\n /**\n * Supported fiat currencies, including USD, ordered by code.\n *\n * @generated from field: repeated marketoverview.v1.CurrencyMetadata fiat = 1;\n */\n fiat: CurrencyMetadata[];\n\n /**\n * Supported stablecoins (USDC and USDT), ordered by code.\n *\n * @generated from field: repeated marketoverview.v1.CurrencyMetadata stablecoins = 2;\n */\n stablecoins: CurrencyMetadata[];\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionConfigResponse.\n * Use `create(GetCurrencyConversionConfigResponseSchema)` to create a new message.\n */\nexport const GetCurrencyConversionConfigResponseSchema: GenMessage<GetCurrencyConversionConfigResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 11);\n\n/**\n * FiatConversionRate states the fiat currency units equal to one US dollar.\n *\n * @generated from message marketoverview.v1.FiatConversionRate\n */\nexport type FiatConversionRate = Message<\"marketoverview.v1.FiatConversionRate\"> & {\n /**\n * Supported fiat currency code.\n *\n * @generated from field: string code = 1;\n */\n code: string;\n\n /**\n * Fiat currency units per 1 USD, scaled by 1e8. USD has the identity value 1e8.\n *\n * @generated from field: int64 units_per_usd_e8 = 2;\n */\n unitsPerUsdE8: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.FiatConversionRate.\n * Use `create(FiatConversionRateSchema)` to create a new message.\n */\nexport const FiatConversionRateSchema: GenMessage<FiatConversionRate> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 12);\n\n/**\n * FiatConversionSnapshot contains all supported fiat rates from one observation.\n *\n * @generated from message marketoverview.v1.FiatConversionSnapshot\n */\nexport type FiatConversionSnapshot = Message<\"marketoverview.v1.FiatConversionSnapshot\"> & {\n /**\n * Complete fiat rates, including USD, ordered by code.\n *\n * @generated from field: repeated marketoverview.v1.FiatConversionRate rates = 1;\n */\n rates: FiatConversionRate[];\n\n /**\n * Shared source observation time in seconds since the Unix epoch (UTC).\n *\n * @generated from field: uint64 source_ts_sec = 2;\n */\n sourceTsSec: bigint;\n\n /**\n * True once the source observation is at least two hours old.\n *\n * @generated from field: bool stale = 3;\n */\n stale: boolean;\n};\n\n/**\n * Describes the message marketoverview.v1.FiatConversionSnapshot.\n * Use `create(FiatConversionSnapshotSchema)` to create a new message.\n */\nexport const FiatConversionSnapshotSchema: GenMessage<FiatConversionSnapshot> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 13);\n\n/**\n * StablecoinConversionRate states the observed USD value of one stablecoin unit.\n *\n * @generated from message marketoverview.v1.StablecoinConversionRate\n */\nexport type StablecoinConversionRate = Message<\"marketoverview.v1.StablecoinConversionRate\"> & {\n /**\n * Supported stablecoin code (USDC or USDT).\n *\n * @generated from field: string code = 1;\n */\n code: string;\n\n /**\n * USD per 1 stablecoin unit, scaled by 1e8. This is an observed price, not a fixed peg.\n *\n * @generated from field: int64 usd_per_unit_e8 = 2;\n */\n usdPerUnitE8: bigint;\n\n /**\n * This stablecoin's source observation time in seconds since the Unix epoch (UTC).\n *\n * @generated from field: uint64 source_ts_sec = 3;\n */\n sourceTsSec: bigint;\n\n /**\n * True once this stablecoin's source observation is at least five seconds old.\n *\n * @generated from field: bool stale = 4;\n */\n stale: boolean;\n};\n\n/**\n * Describes the message marketoverview.v1.StablecoinConversionRate.\n * Use `create(StablecoinConversionRateSchema)` to create a new message.\n */\nexport const StablecoinConversionRateSchema: GenMessage<StablecoinConversionRate> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 14);\n\n/**\n * GetCurrencyConversionRatesRequest has no parameters.\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionRatesRequest\n */\nexport type GetCurrencyConversionRatesRequest = Message<\"marketoverview.v1.GetCurrencyConversionRatesRequest\"> & {\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionRatesRequest.\n * Use `create(GetCurrencyConversionRatesRequestSchema)` to create a new message.\n */\nexport const GetCurrencyConversionRatesRequestSchema: GenMessage<GetCurrencyConversionRatesRequest> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 15);\n\n/**\n * GetCurrencyConversionRatesResponse groups rates by their USD conversion direction.\n * Last-known observations remain available with staleness indicated. Before any\n * observation is available, the request fails with unavailable (HTTP 503).\n *\n * @generated from message marketoverview.v1.GetCurrencyConversionRatesResponse\n */\nexport type GetCurrencyConversionRatesResponse = Message<\"marketoverview.v1.GetCurrencyConversionRatesResponse\"> & {\n /**\n * Complete fiat snapshot; absent until a complete snapshot has been observed.\n *\n * @generated from field: marketoverview.v1.FiatConversionSnapshot fiat = 1;\n */\n fiat?: FiatConversionSnapshot | undefined;\n\n /**\n * Observed stablecoin rates ordered by code. Unobserved stablecoins are omitted.\n *\n * @generated from field: repeated marketoverview.v1.StablecoinConversionRate stablecoins = 2;\n */\n stablecoins: StablecoinConversionRate[];\n\n /**\n * Response construction time in seconds since the Unix epoch (UTC).\n *\n * @generated from field: uint64 snapshot_ts_sec = 3;\n */\n snapshotTsSec: bigint;\n};\n\n/**\n * Describes the message marketoverview.v1.GetCurrencyConversionRatesResponse.\n * Use `create(GetCurrencyConversionRatesResponseSchema)` to create a new message.\n */\nexport const GetCurrencyConversionRatesResponseSchema: GenMessage<GetCurrencyConversionRatesResponse> = /*@__PURE__*/\n messageDesc(file_marketoverview_v1_marketoverview, 16);\n\n/**\n * SparklineInterval identifies the time range and sampling resolution for a\n * sparkline.\n *\n * @generated from enum marketoverview.v1.SparklineInterval\n */\nexport enum SparklineInterval {\n /**\n * Unspecified interval. When requested, server may default to 24H.\n *\n * @generated from enum value: SPARKLINE_INTERVAL_UNSPECIFIED = 0;\n */\n SPARKLINE_INTERVAL_UNSPECIFIED = 0,\n\n /**\n * 1 hour sparkline. Typically returns up to 60 points (1-minute buckets).\n *\n * @generated from enum value: SPARKLINE_1H = 1;\n */\n SPARKLINE_1H = 1,\n\n /**\n * 24 hour sparkline. Typically returns up to 96 points (15-minute buckets).\n *\n * @generated from enum value: SPARKLINE_24H = 2;\n */\n SPARKLINE_24H = 2,\n\n /**\n * 1 week sparkline. Typically returns up to 168 points (1-hour buckets).\n *\n * @generated from enum value: SPARKLINE_1W = 3;\n */\n SPARKLINE_1W = 3,\n\n /**\n * 1 month sparkline. Typically returns up to 180 points (4-hour buckets).\n *\n * @generated from enum value: SPARKLINE_1M = 4;\n */\n SPARKLINE_1M = 4,\n}\n\n/**\n * Describes the enum marketoverview.v1.SparklineInterval.\n */\nexport const SparklineIntervalSchema: GenEnum<SparklineInterval> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 0);\n\n/**\n * @generated from enum marketoverview.v1.MarketOrderBy\n */\nexport enum MarketOrderBy {\n /**\n * @generated from enum value: MARKET_ORDER_BY_UNSPECIFIED = 0;\n */\n MARKET_ORDER_BY_UNSPECIFIED = 0,\n\n /**\n * Sort by absolute 24h change (basis points).\n *\n * @generated from enum value: ORDER_BY_CHANGE_24H_BPS = 1;\n */\n ORDER_BY_CHANGE_24H_BPS = 1,\n\n /**\n * Sort by canonical USD 24h volume. Unvalued markets sort last in either direction.\n *\n * @generated from enum value: ORDER_BY_VOLUME_24H_USD = 2;\n */\n ORDER_BY_VOLUME_24H_USD = 2,\n\n /**\n * Sort by last price in quote units scaled by 1e6.\n *\n * @generated from enum value: ORDER_BY_LAST_PRICE = 3;\n */\n ORDER_BY_LAST_PRICE = 3,\n\n /**\n * Sort by listing time (new listings first).\n *\n * @generated from enum value: ORDER_BY_DATE_ADDED = 4;\n */\n ORDER_BY_DATE_ADDED = 4,\n}\n\n/**\n * Describes the enum marketoverview.v1.MarketOrderBy.\n */\nexport const MarketOrderBySchema: GenEnum<MarketOrderBy> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 1);\n\n/**\n * @generated from enum marketoverview.v1.SortDirection\n */\nexport enum SortDirection {\n /**\n * @generated from enum value: SORT_DIRECTION_UNSPECIFIED = 0;\n */\n SORT_DIRECTION_UNSPECIFIED = 0,\n\n /**\n * Ascending (oldest/lowest first).\n *\n * @generated from enum value: SORT_ASC = 1;\n */\n SORT_ASC = 1,\n\n /**\n * Descending (newest/highest first).\n *\n * @generated from enum value: SORT_DESC = 2;\n */\n SORT_DESC = 2,\n}\n\n/**\n * Describes the enum marketoverview.v1.SortDirection.\n */\nexport const SortDirectionSchema: GenEnum<SortDirection> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 2);\n\n/**\n * ErrorCode is a stable domain error code enum for Market Overview.\n * It is used for consistent error surfaces across ConnectRPC and REST.\n *\n * @generated from enum marketoverview.v1.ErrorCode\n */\nexport enum ErrorCode {\n /**\n * @generated from enum value: ERROR_CODE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * @generated from enum value: ERROR_CODE_BAD_REQUEST = 1;\n */\n BAD_REQUEST = 1,\n\n /**\n * @generated from enum value: ERROR_CODE_INVALID_ARGUMENT = 2;\n */\n INVALID_ARGUMENT = 2,\n\n /**\n * @generated from enum value: ERROR_CODE_NOT_FOUND = 3;\n */\n NOT_FOUND = 3,\n\n /**\n * @generated from enum value: ERROR_CODE_UNAVAILABLE = 4;\n */\n UNAVAILABLE = 4,\n\n /**\n * @generated from enum value: ERROR_CODE_UPSTREAM_ERROR = 5;\n */\n UPSTREAM_ERROR = 5,\n}\n\n/**\n * Describes the enum marketoverview.v1.ErrorCode.\n */\nexport const ErrorCodeSchema: GenEnum<ErrorCode> = /*@__PURE__*/\n enumDesc(file_marketoverview_v1_marketoverview, 3);\n\n/**\n * List ticker-style market overview rows with optional sparklines.\n * Supports symbol filtering, sorting, and pagination controls.\n *\n * @generated from service marketoverview.v1.MarketOverviewService\n */\nexport const MarketOverviewService: GenService<{\n /**\n * Get supported fiat and stablecoin display metadata with default English names,\n * symbols, and fraction digits. Clients may localize presentation.\n *\n * @generated from rpc marketoverview.v1.MarketOverviewService.GetCurrencyConversionConfig\n */\n getCurrencyConversionConfig: {\n methodKind: \"unary\";\n input: typeof GetCurrencyConversionConfigRequestSchema;\n output: typeof GetCurrencyConversionConfigResponseSchema;\n },\n /**\n * Get fiat units per USD and USD per stablecoin unit, grouped with source freshness.\n *\n * @generated from rpc marketoverview.v1.MarketOverviewService.GetCurrencyConversionRates\n */\n getCurrencyConversionRates: {\n methodKind: \"unary\";\n input: typeof GetCurrencyConversionRatesRequestSchema;\n output: typeof GetCurrencyConversionRatesResponseSchema;\n },\n /**\n * Get aligned pair-level and total trailing-24h USD volume, sampled every\n * 15 minutes over the latest day. Unavailable valuations fail the request.\n *\n * @generated from rpc marketoverview.v1.MarketOverviewService.GetSpotVolumeHistory\n */\n getSpotVolumeHistory: {\n methodKind: \"unary\";\n input: typeof GetSpotVolumeHistoryRequestSchema;\n output: typeof GetSpotVolumeHistoryResponseSchema;\n },\n /**\n * @generated from rpc marketoverview.v1.MarketOverviewService.ListMarketOverview\n */\n listMarketOverview: {\n methodKind: \"unary\";\n input: typeof ListMarketOverviewRequestSchema;\n output: typeof ListMarketOverviewResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_marketoverview_v1_marketoverview, 0);\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAa,wCACX,uBAAS,oqJAAoqJ,CAAC,0BAA0B,CAAC;;;;;AAoB3sJ,MAAa,oBACX,0BAAY,uCAAuC,CAAC;;;;;AA2BtD,MAAa,kBACX,0BAAY,uCAAuC,CAAC;;;;;AAqItD,MAAa,uBACX,0BAAY,uCAAuC,CAAC;;;;;AAiEtD,MAAa,kCACX,0BAAY,uCAAuC,CAAC;;;;;AAyBtD,MAAa,mCACX,0BAAY,uCAAuC,CAAC;;;;;AA4BtD,MAAa,4BACX,0BAAY,uCAAuC,CAAC;;;;;AAsBtD,MAAa,oCACX,0BAAY,uCAAuC,CAAC;;;;;AA8BtD,MAAa,6BACX,0BAAY,uCAAuC,CAAC;;;;;AAiEtD,MAAa,qCACX,0BAAY,uCAAuC,CAAC;;;;;AA6CtD,MAAa,yBACX,0BAAY,uCAAuC,CAAC;;;;;AActD,MAAa,2CACX,0BAAY,uCAAuC,EAAE;;;;;AA4BvD,MAAa,4CACX,0BAAY,uCAAuC,EAAE;;;;;AA2BvD,MAAa,2BACX,0BAAY,uCAAuC,EAAE;;;;;AAkCvD,MAAa,+BACX,0BAAY,uCAAuC,EAAE;;;;;AAyCvD,MAAa,iCACX,0BAAY,uCAAuC,EAAE;;;;;AAcvD,MAAa,0CACX,0BAAY,uCAAuC,EAAE;;;;;AAoCvD,MAAa,2CACX,0BAAY,uCAAuC,EAAE;;;;;;;AAQvD,IAAY,oBAAL,yBAAA,mBAAA;;;;;;CAML,kBAAA,kBAAA,oCAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,kBAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,mBAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,kBAAA,KAAA;;;;;;CAOA,kBAAA,kBAAA,kBAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,0BACX,uBAAS,uCAAuC,CAAC;;;;AAKnD,IAAY,gBAAL,yBAAA,eAAA;;;;CAIL,cAAA,cAAA,iCAAA,KAAA;;;;;;CAOA,cAAA,cAAA,6BAAA,KAAA;;;;;;CAOA,cAAA,cAAA,6BAAA,KAAA;;;;;;CAOA,cAAA,cAAA,yBAAA,KAAA;;;;;;CAOA,cAAA,cAAA,yBAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,sBACX,uBAAS,uCAAuC,CAAC;;;;AAKnD,IAAY,gBAAL,yBAAA,eAAA;;;;CAIL,cAAA,cAAA,gCAAA,KAAA;;;;;;CAOA,cAAA,cAAA,cAAA,KAAA;;;;;;CAOA,cAAA,cAAA,eAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,sBACX,uBAAS,uCAAuC,CAAC;;;;;;;AAQnD,IAAY,YAAL,yBAAA,WAAA;;;;CAIL,UAAA,UAAA,iBAAA,KAAA;;;;CAKA,UAAA,UAAA,iBAAA,KAAA;;;;CAKA,UAAA,UAAA,sBAAA,KAAA;;;;CAKA,UAAA,UAAA,eAAA,KAAA;;;;CAKA,UAAA,UAAA,iBAAA,KAAA;;;;CAKA,UAAA,UAAA,oBAAA,KAAA;;AACF,EAAA,CAAA,CAAA;;;;AAKA,MAAa,kBACX,uBAAS,uCAAuC,CAAC;;;;;;;AAQnD,MAAa,wBA0CX,0BAAY,uCAAuC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candles.schemas.d.ts","names":[],"sources":["../../../src/services/candles/candles.schemas.ts"],"mappings":";;;;;cAQa,iBAAe,EAAA;KAEhB,YAAY,EAAE,mBAAmB;KAiBxC;EAAkB;EAAiB;;iBAsBxB,sBAAsB,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqB1C,iCAAwB;iBAuCrB,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"candles.schemas.d.ts","names":[],"sources":["../../../src/services/candles/candles.schemas.ts"],"mappings":";;;;;cAQa,iBAAe,EAAA;KAEhB,YAAY,EAAE,mBAAmB;KAiBxC;EAAkB;EAAiB;;iBAsBxB,sBAAsB,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqB1C,iCAAwB;iBAuCrB,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmC5C,8BAA8B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4CnD,SAAS,EAAE,YAAY,kBAAkB;KAGzC,YAAY,EAAE,YAAY,kBAAkB;KAC5C,iBAAiB,EAAE,YAAY,kBAAkB;KAGjD,oBAAoB,EAAE,YAAY,kBAAkB;iBAyBhD,gCAA4B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAIhC,kBAAkB,EAAE,WAAW,kBAAkB;KAEjD,yBAAyB,EAAE,WAAW,kBAAkB"}
|
|
@@ -41,7 +41,7 @@ function createCandleRowSchema(scales) {
|
|
|
41
41
|
high: scaledToDecimalOutput(data.high, priceScale),
|
|
42
42
|
low: scaledToDecimalOutput(data.low, priceScale),
|
|
43
43
|
close: scaledToDecimalOutput(data.close, priceScale),
|
|
44
|
-
volume: scaledToDecimalOutput(data.volume, scales.
|
|
44
|
+
volume: scaledToDecimalOutput(data.volume, scales.marketDataVolume(data.symbolId)),
|
|
45
45
|
quoteVolume: data.quoteVolume,
|
|
46
46
|
isClosed: data.isClosed
|
|
47
47
|
};
|
|
@@ -82,7 +82,8 @@ function scaledArrayToDecimal(values, scale) {
|
|
|
82
82
|
function createCandleColumnarSchema(scales) {
|
|
83
83
|
return v.pipe(CandleColumnarRawSchema, v.transform((d) => {
|
|
84
84
|
const priceScale = scales.price();
|
|
85
|
-
const
|
|
85
|
+
const referencePriceScale = scales.referencePrice(d.symbolId);
|
|
86
|
+
const volumeScale = scales.marketDataVolume(d.symbolId);
|
|
86
87
|
const referenceTsSec = d.referenceTsSec ?? [];
|
|
87
88
|
const hasReference = referenceTsSec.length > 0;
|
|
88
89
|
return {
|
|
@@ -98,10 +99,10 @@ function createCandleColumnarSchema(scales) {
|
|
|
98
99
|
nextPageToken: d.nextPageToken,
|
|
99
100
|
reference: hasReference ? {
|
|
100
101
|
time: referenceTsSec.map((t) => Number(t)),
|
|
101
|
-
open: scaledArrayToDecimal(d.referenceOpen ?? [],
|
|
102
|
-
high: scaledArrayToDecimal(d.referenceHigh ?? [],
|
|
103
|
-
low: scaledArrayToDecimal(d.referenceLow ?? [],
|
|
104
|
-
close: scaledArrayToDecimal(d.referenceClose ?? [],
|
|
102
|
+
open: scaledArrayToDecimal(d.referenceOpen ?? [], referencePriceScale),
|
|
103
|
+
high: scaledArrayToDecimal(d.referenceHigh ?? [], referencePriceScale),
|
|
104
|
+
low: scaledArrayToDecimal(d.referenceLow ?? [], referencePriceScale),
|
|
105
|
+
close: scaledArrayToDecimal(d.referenceClose ?? [], referencePriceScale),
|
|
105
106
|
volume: scaledArrayToDecimal(d.referenceVolume ?? [], volumeScale)
|
|
106
107
|
} : null
|
|
107
108
|
};
|
|
@@ -110,7 +111,8 @@ function createCandleColumnarSchema(scales) {
|
|
|
110
111
|
function createCandleColumnarIntSchema(scales) {
|
|
111
112
|
return v.pipe(CandleColumnarRawSchema, v.transform((d) => {
|
|
112
113
|
const priceScale = scales.price();
|
|
113
|
-
const
|
|
114
|
+
const referencePriceScale = scales.referencePrice(d.symbolId);
|
|
115
|
+
const volumeScale = scales.marketDataVolume(d.symbolId);
|
|
114
116
|
const referenceTsSec = d.referenceTsSec ?? [];
|
|
115
117
|
return {
|
|
116
118
|
symbolId: d.symbolId,
|
|
@@ -125,10 +127,10 @@ function createCandleColumnarIntSchema(scales) {
|
|
|
125
127
|
nextPageToken: d.nextPageToken,
|
|
126
128
|
reference: referenceTsSec.length > 0 ? {
|
|
127
129
|
tsSec: referenceTsSec.map((t) => Number(t)),
|
|
128
|
-
open: scaledArrayToDecimal(d.referenceOpen ?? [],
|
|
129
|
-
high: scaledArrayToDecimal(d.referenceHigh ?? [],
|
|
130
|
-
low: scaledArrayToDecimal(d.referenceLow ?? [],
|
|
131
|
-
close: scaledArrayToDecimal(d.referenceClose ?? [],
|
|
130
|
+
open: scaledArrayToDecimal(d.referenceOpen ?? [], referencePriceScale),
|
|
131
|
+
high: scaledArrayToDecimal(d.referenceHigh ?? [], referencePriceScale),
|
|
132
|
+
low: scaledArrayToDecimal(d.referenceLow ?? [], referencePriceScale),
|
|
133
|
+
close: scaledArrayToDecimal(d.referenceClose ?? [], referencePriceScale),
|
|
132
134
|
volume: scaledArrayToDecimal(d.referenceVolume ?? [], volumeScale)
|
|
133
135
|
} : null
|
|
134
136
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candles.schemas.js","names":[],"sources":["../../../src/services/candles/candles.schemas.ts"],"sourcesContent":["import { SymbolIdInputSchema } from \"../shared.js\";\nimport * as v from \"valibot\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { OptionalTimestampSecondsInputSchema } from \"../../shared/schemas.js\";\nimport { enumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { TIMEFRAMES, TimeframeCodec } from \"./candles.codecs.js\";\n\nexport const TimeframeSchema = v.picklist(TIMEFRAMES);\n\nexport type Timeframe = v.InferOutput<typeof TimeframeSchema>;\n\nfunction timeframeFromProto(value: number): DecodedEnum<Timeframe> {\n return enumLabel(TimeframeCodec.protoToOutput, value);\n}\n\nconst TimeframeInputSchema = v.pipe(\n TimeframeSchema,\n v.transform((value) => TimeframeCodec.inputToProto[value]),\n);\n\nconst OptionalPositiveNumberSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(10_000)),\n);\n\nconst OptionalBooleanSchema = v.optional(v.boolean(), false);\n\ntype TimestampInit = { seconds: bigint; nanos: number };\n\nfunction timestampFromTsSec(tsSec: bigint): TimestampInit {\n return { seconds: tsSec, nanos: 0 };\n}\n\nconst CandleRowRawSchema = v.object({\n symbolId: v.number(),\n timeframe: v.pipe(\n v.number(),\n v.transform((v) => timeframeFromProto(v)),\n ),\n tsSec: v.bigint(),\n open: v.bigint(),\n high: v.bigint(),\n low: v.bigint(),\n close: v.bigint(),\n volume: v.bigint(),\n quoteVolume: v.string(),\n isClosed: v.optional(v.boolean(), false),\n});\n\nexport function createCandleRowSchema(scales: SdkScales) {\n return v.pipe(\n CandleRowRawSchema,\n v.transform((data) => {\n const priceScale = scales.price();\n return {\n symbolId: data.symbolId,\n timeframe: data.timeframe,\n time: Number(data.tsSec),\n open: scaledToDecimalOutput(data.open, priceScale),\n high: scaledToDecimalOutput(data.high, priceScale),\n low: scaledToDecimalOutput(data.low, priceScale),\n close: scaledToDecimalOutput(data.close, priceScale),\n volume: scaledToDecimalOutput(data.volume, scales.baseQty(data.symbolId)),\n quoteVolume: data.quoteVolume,\n isClosed: data.isClosed,\n };\n }),\n );\n}\n\nexport const createCandleRowIntSchema = createCandleRowSchema;\n\nexport const CandlePointSchema = v.object({\n tsSec: v.bigint(),\n open: v.bigint(),\n high: v.bigint(),\n low: v.bigint(),\n close: v.bigint(),\n volume: v.bigint(),\n quoteVolume: v.string(),\n isClosed: v.optional(v.boolean(), false),\n});\n\nconst CandleColumnarRawSchema = v.object({\n symbolId: v.number(),\n timeframe: v.pipe(\n v.number(),\n v.transform((v) => timeframeFromProto(v)),\n ),\n tsSec: v.array(v.bigint()),\n open: v.array(v.bigint()),\n high: v.array(v.bigint()),\n low: v.array(v.bigint()),\n close: v.array(v.bigint()),\n volume: v.array(v.bigint()),\n quoteVolume: v.array(v.string()),\n referenceTsSec: v.optional(v.array(v.bigint()), []),\n referenceOpen: v.optional(v.array(v.bigint()), []),\n referenceHigh: v.optional(v.array(v.bigint()), []),\n referenceLow: v.optional(v.array(v.bigint()), []),\n referenceClose: v.optional(v.array(v.bigint()), []),\n referenceVolume: v.optional(v.array(v.bigint()), []),\n nextPageToken: v.optional(v.string(), \"\"),\n});\n\nfunction scaledArrayToDecimal(values: bigint[], scale: number): string[] {\n return values.map((value) => scaledToDecimalOutput(value, scale));\n}\n\nexport function createCandleColumnarSchema(scales: SdkScales) {\n return v.pipe(\n CandleColumnarRawSchema,\n v.transform((d) => {\n const priceScale = scales.price();\n const volumeScale = scales.baseQty(d.symbolId);\n const referenceTsSec = d.referenceTsSec ?? [];\n const hasReference = referenceTsSec.length > 0;\n return {\n symbolId: d.symbolId,\n timeframe: d.timeframe,\n time: d.tsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(d.open, priceScale),\n high: scaledArrayToDecimal(d.high, priceScale),\n low: scaledArrayToDecimal(d.low, priceScale),\n close: scaledArrayToDecimal(d.close, priceScale),\n volume: scaledArrayToDecimal(d.volume, volumeScale),\n quoteVolume: d.quoteVolume,\n nextPageToken: d.nextPageToken,\n reference: hasReference\n ? {\n time: referenceTsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(d.referenceOpen ?? [], priceScale),\n high: scaledArrayToDecimal(d.referenceHigh ?? [], priceScale),\n low: scaledArrayToDecimal(d.referenceLow ?? [], priceScale),\n close: scaledArrayToDecimal(d.referenceClose ?? [], priceScale),\n volume: scaledArrayToDecimal(d.referenceVolume ?? [], volumeScale),\n }\n : null,\n };\n }),\n );\n}\n\nexport function createCandleColumnarIntSchema(scales: SdkScales) {\n return v.pipe(\n CandleColumnarRawSchema,\n v.transform((d) => {\n const priceScale = scales.price();\n const volumeScale = scales.baseQty(d.symbolId);\n const referenceTsSec = d.referenceTsSec ?? [];\n return {\n symbolId: d.symbolId,\n timeframe: d.timeframe,\n tsSec: d.tsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(d.open, priceScale),\n high: scaledArrayToDecimal(d.high, priceScale),\n low: scaledArrayToDecimal(d.low, priceScale),\n close: scaledArrayToDecimal(d.close, priceScale),\n volume: scaledArrayToDecimal(d.volume, volumeScale),\n quoteVolume: d.quoteVolume,\n nextPageToken: d.nextPageToken,\n reference:\n referenceTsSec.length > 0\n ? {\n tsSec: referenceTsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(d.referenceOpen ?? [], priceScale),\n high: scaledArrayToDecimal(d.referenceHigh ?? [], priceScale),\n low: scaledArrayToDecimal(d.referenceLow ?? [], priceScale),\n close: scaledArrayToDecimal(d.referenceClose ?? [], priceScale),\n volume: scaledArrayToDecimal(d.referenceVolume ?? [], volumeScale),\n }\n : null,\n };\n }),\n );\n}\n\nexport type Candle = v.InferOutput<ReturnType<typeof createCandleRowSchema>>;\nexport type CandleInput = v.InferInput<ReturnType<typeof createCandleRowSchema>>;\nexport type CandleIntInput = v.InferInput<ReturnType<typeof createCandleRowIntSchema>>;\nexport type CandleInt = v.InferOutput<ReturnType<typeof createCandleRowIntSchema>>;\nexport type CandleColumnar = v.InferOutput<ReturnType<typeof createCandleColumnarSchema>>;\nexport type CandleColumnarInput = v.InferInput<ReturnType<typeof createCandleColumnarSchema>>;\nexport type CandleColumnarIntInput = v.InferInput<ReturnType<typeof createCandleColumnarIntSchema>>;\nexport type CandleColumnarInt = v.InferOutput<ReturnType<typeof createCandleColumnarIntSchema>>;\n\nexport const ListCandlesInputSchema = v.pipe(\n v.object({\n symbolId: SymbolIdInputSchema,\n timeframe: TimeframeInputSchema,\n limit: OptionalPositiveNumberSchema,\n includeIncomplete: v.optional(v.boolean(), false),\n includeReference: OptionalBooleanSchema,\n startTsSec: OptionalTimestampSecondsInputSchema,\n endTsSec: OptionalTimestampSecondsInputSchema,\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform((d) => ({\n symbolId: d.symbolId,\n timeframe: d.timeframe,\n limit: d.limit,\n includeIncomplete: d.includeIncomplete,\n includeReference: d.includeReference,\n startTime: d.startTsSec != null ? timestampFromTsSec(d.startTsSec) : undefined,\n endTime: d.endTsSec != null ? timestampFromTsSec(d.endTsSec) : undefined,\n pageToken: d.pageToken,\n })),\n);\n\nexport function createListCandlesInputSchema() {\n return ListCandlesInputSchema;\n}\n\nexport type GetCandlesInput = v.InferInput<ReturnType<typeof createListCandlesInputSchema>>;\nexport const createGetCandlesColumnsInputSchema = createListCandlesInputSchema;\nexport type GetCandlesColumnsInput = v.InferInput<ReturnType<typeof createListCandlesInputSchema>>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"candles.schemas.js","names":[],"sources":["../../../src/services/candles/candles.schemas.ts"],"sourcesContent":["import { SymbolIdInputSchema } from \"../shared.js\";\nimport * as v from \"valibot\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { OptionalTimestampSecondsInputSchema } from \"../../shared/schemas.js\";\nimport { enumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { TIMEFRAMES, TimeframeCodec } from \"./candles.codecs.js\";\n\nexport const TimeframeSchema = v.picklist(TIMEFRAMES);\n\nexport type Timeframe = v.InferOutput<typeof TimeframeSchema>;\n\nfunction timeframeFromProto(value: number): DecodedEnum<Timeframe> {\n return enumLabel(TimeframeCodec.protoToOutput, value);\n}\n\nconst TimeframeInputSchema = v.pipe(\n TimeframeSchema,\n v.transform((value) => TimeframeCodec.inputToProto[value]),\n);\n\nconst OptionalPositiveNumberSchema = v.optional(\n v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(10_000)),\n);\n\nconst OptionalBooleanSchema = v.optional(v.boolean(), false);\n\ntype TimestampInit = { seconds: bigint; nanos: number };\n\nfunction timestampFromTsSec(tsSec: bigint): TimestampInit {\n return { seconds: tsSec, nanos: 0 };\n}\n\nconst CandleRowRawSchema = v.object({\n symbolId: v.number(),\n timeframe: v.pipe(\n v.number(),\n v.transform((v) => timeframeFromProto(v)),\n ),\n tsSec: v.bigint(),\n open: v.bigint(),\n high: v.bigint(),\n low: v.bigint(),\n close: v.bigint(),\n volume: v.bigint(),\n quoteVolume: v.string(),\n isClosed: v.optional(v.boolean(), false),\n});\n\nexport function createCandleRowSchema(scales: SdkScales) {\n return v.pipe(\n CandleRowRawSchema,\n v.transform((data) => {\n const priceScale = scales.price();\n return {\n symbolId: data.symbolId,\n timeframe: data.timeframe,\n time: Number(data.tsSec),\n open: scaledToDecimalOutput(data.open, priceScale),\n high: scaledToDecimalOutput(data.high, priceScale),\n low: scaledToDecimalOutput(data.low, priceScale),\n close: scaledToDecimalOutput(data.close, priceScale),\n volume: scaledToDecimalOutput(data.volume, scales.marketDataVolume(data.symbolId)),\n quoteVolume: data.quoteVolume,\n isClosed: data.isClosed,\n };\n }),\n );\n}\n\nexport const createCandleRowIntSchema = createCandleRowSchema;\n\nexport const CandlePointSchema = v.object({\n tsSec: v.bigint(),\n open: v.bigint(),\n high: v.bigint(),\n low: v.bigint(),\n close: v.bigint(),\n volume: v.bigint(),\n quoteVolume: v.string(),\n isClosed: v.optional(v.boolean(), false),\n});\n\nconst CandleColumnarRawSchema = v.object({\n symbolId: v.number(),\n timeframe: v.pipe(\n v.number(),\n v.transform((v) => timeframeFromProto(v)),\n ),\n tsSec: v.array(v.bigint()),\n open: v.array(v.bigint()),\n high: v.array(v.bigint()),\n low: v.array(v.bigint()),\n close: v.array(v.bigint()),\n volume: v.array(v.bigint()),\n quoteVolume: v.array(v.string()),\n referenceTsSec: v.optional(v.array(v.bigint()), []),\n referenceOpen: v.optional(v.array(v.bigint()), []),\n referenceHigh: v.optional(v.array(v.bigint()), []),\n referenceLow: v.optional(v.array(v.bigint()), []),\n referenceClose: v.optional(v.array(v.bigint()), []),\n referenceVolume: v.optional(v.array(v.bigint()), []),\n nextPageToken: v.optional(v.string(), \"\"),\n});\n\nfunction scaledArrayToDecimal(values: bigint[], scale: number): string[] {\n return values.map((value) => scaledToDecimalOutput(value, scale));\n}\n\nexport function createCandleColumnarSchema(scales: SdkScales) {\n return v.pipe(\n CandleColumnarRawSchema,\n v.transform((d) => {\n const priceScale = scales.price();\n const referencePriceScale = scales.referencePrice(d.symbolId);\n const volumeScale = scales.marketDataVolume(d.symbolId);\n const referenceTsSec = d.referenceTsSec ?? [];\n const hasReference = referenceTsSec.length > 0;\n return {\n symbolId: d.symbolId,\n timeframe: d.timeframe,\n time: d.tsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(d.open, priceScale),\n high: scaledArrayToDecimal(d.high, priceScale),\n low: scaledArrayToDecimal(d.low, priceScale),\n close: scaledArrayToDecimal(d.close, priceScale),\n volume: scaledArrayToDecimal(d.volume, volumeScale),\n quoteVolume: d.quoteVolume,\n nextPageToken: d.nextPageToken,\n reference: hasReference\n ? {\n time: referenceTsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(d.referenceOpen ?? [], referencePriceScale),\n high: scaledArrayToDecimal(d.referenceHigh ?? [], referencePriceScale),\n low: scaledArrayToDecimal(d.referenceLow ?? [], referencePriceScale),\n close: scaledArrayToDecimal(d.referenceClose ?? [], referencePriceScale),\n volume: scaledArrayToDecimal(d.referenceVolume ?? [], volumeScale),\n }\n : null,\n };\n }),\n );\n}\n\nexport function createCandleColumnarIntSchema(scales: SdkScales) {\n return v.pipe(\n CandleColumnarRawSchema,\n v.transform((d) => {\n const priceScale = scales.price();\n const referencePriceScale = scales.referencePrice(d.symbolId);\n const volumeScale = scales.marketDataVolume(d.symbolId);\n const referenceTsSec = d.referenceTsSec ?? [];\n return {\n symbolId: d.symbolId,\n timeframe: d.timeframe,\n tsSec: d.tsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(d.open, priceScale),\n high: scaledArrayToDecimal(d.high, priceScale),\n low: scaledArrayToDecimal(d.low, priceScale),\n close: scaledArrayToDecimal(d.close, priceScale),\n volume: scaledArrayToDecimal(d.volume, volumeScale),\n quoteVolume: d.quoteVolume,\n nextPageToken: d.nextPageToken,\n reference:\n referenceTsSec.length > 0\n ? {\n tsSec: referenceTsSec.map((t) => Number(t)),\n open: scaledArrayToDecimal(\n d.referenceOpen ?? [],\n referencePriceScale,\n ),\n high: scaledArrayToDecimal(\n d.referenceHigh ?? [],\n referencePriceScale,\n ),\n low: scaledArrayToDecimal(d.referenceLow ?? [], referencePriceScale),\n close: scaledArrayToDecimal(\n d.referenceClose ?? [],\n referencePriceScale,\n ),\n volume: scaledArrayToDecimal(d.referenceVolume ?? [], volumeScale),\n }\n : null,\n };\n }),\n );\n}\n\nexport type Candle = v.InferOutput<ReturnType<typeof createCandleRowSchema>>;\nexport type CandleInput = v.InferInput<ReturnType<typeof createCandleRowSchema>>;\nexport type CandleIntInput = v.InferInput<ReturnType<typeof createCandleRowIntSchema>>;\nexport type CandleInt = v.InferOutput<ReturnType<typeof createCandleRowIntSchema>>;\nexport type CandleColumnar = v.InferOutput<ReturnType<typeof createCandleColumnarSchema>>;\nexport type CandleColumnarInput = v.InferInput<ReturnType<typeof createCandleColumnarSchema>>;\nexport type CandleColumnarIntInput = v.InferInput<ReturnType<typeof createCandleColumnarIntSchema>>;\nexport type CandleColumnarInt = v.InferOutput<ReturnType<typeof createCandleColumnarIntSchema>>;\n\nexport const ListCandlesInputSchema = v.pipe(\n v.object({\n symbolId: SymbolIdInputSchema,\n timeframe: TimeframeInputSchema,\n limit: OptionalPositiveNumberSchema,\n includeIncomplete: v.optional(v.boolean(), false),\n includeReference: OptionalBooleanSchema,\n startTsSec: OptionalTimestampSecondsInputSchema,\n endTsSec: OptionalTimestampSecondsInputSchema,\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform((d) => ({\n symbolId: d.symbolId,\n timeframe: d.timeframe,\n limit: d.limit,\n includeIncomplete: d.includeIncomplete,\n includeReference: d.includeReference,\n startTime: d.startTsSec != null ? timestampFromTsSec(d.startTsSec) : undefined,\n endTime: d.endTsSec != null ? timestampFromTsSec(d.endTsSec) : undefined,\n pageToken: d.pageToken,\n })),\n);\n\nexport function createListCandlesInputSchema() {\n return ListCandlesInputSchema;\n}\n\nexport type GetCandlesInput = v.InferInput<ReturnType<typeof createListCandlesInputSchema>>;\nexport const createGetCandlesColumnsInputSchema = createListCandlesInputSchema;\nexport type GetCandlesColumnsInput = v.InferInput<ReturnType<typeof createListCandlesInputSchema>>;\n"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ type TimestampInit = {
|
|
|
14
14
|
declare const GetOrderbookHeatmapInputSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
15
15
|
readonly symbolId: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>;
|
|
16
16
|
readonly interval: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["1s", "1m", "5m", "1h"], undefined>, "1s">, v.TransformAction<"1s" | "1m" | "5m" | "1h", HeatmapInterval>]>;
|
|
17
|
-
readonly depth: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly [1, 5, 10, 20, 50, 100, 200, 500, 1000], undefined>, 50>, v.TransformAction<1 | 10 | 5 | 20 | 200 | 500 |
|
|
17
|
+
readonly depth: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly [1, 5, 10, 20, 50, 100, 200, 500, 1000], undefined>, 50>, v.TransformAction<1 | 10 | 5 | 20 | 200 | 500 | 1000 | 100 | 50, HeatmapDepth>]>;
|
|
18
18
|
readonly quantityMode: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["close", "peak"], undefined>, "close">, v.TransformAction<"close" | "peak", HeatmapQuantityMode>]>;
|
|
19
19
|
readonly limit: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 20000, undefined>]>;
|
|
20
20
|
readonly startTsSec: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, number, undefined>, v.TransformAction<number, bigint>]>, undefined>;
|
|
@@ -227,7 +227,7 @@ type OrderbookHeatmapDeltaChain = ReturnType<typeof convertHeatmapDeltaChain>;
|
|
|
227
227
|
declare function createOrderbookHeatmapResponseSchema(scales: SdkScales): v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
228
228
|
readonly symbolId: v.NumberSchema<undefined>;
|
|
229
229
|
readonly interval: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, DecodedEnum<"1s" | "1m" | "5m" | "1h">>]>;
|
|
230
|
-
readonly depth: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, 1 | "unspecified" | 10 | 5 | 20 | 200 | 500 |
|
|
230
|
+
readonly depth: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, 1 | "unspecified" | 10 | 5 | 20 | 200 | 500 | 1000 | 100 | 50>]>;
|
|
231
231
|
readonly chain: v.OptionalSchema<v.ObjectSchema<{
|
|
232
232
|
readonly baseKeyframe: v.OptionalSchema<v.ObjectSchema<{
|
|
233
233
|
readonly tsSec: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, number>]>;
|
|
@@ -287,7 +287,7 @@ declare function createOrderbookHeatmapResponseSchema(scales: SdkScales): v.Sche
|
|
|
287
287
|
}, undefined>, v.TransformAction<{
|
|
288
288
|
symbolId: number;
|
|
289
289
|
interval: DecodedEnum<"1s" | "1m" | "5m" | "1h">;
|
|
290
|
-
depth: 1 | "unspecified" | 10 | 5 | 20 | 200 | 500 |
|
|
290
|
+
depth: 1 | "unspecified" | 10 | 5 | 20 | 200 | 500 | 1000 | 100 | 50;
|
|
291
291
|
chain?: {
|
|
292
292
|
baseKeyframe?: {
|
|
293
293
|
tsSec: number;
|
|
@@ -347,7 +347,7 @@ declare function createOrderbookHeatmapResponseSchema(scales: SdkScales): v.Sche
|
|
|
347
347
|
}, {
|
|
348
348
|
symbolId: number;
|
|
349
349
|
interval: DecodedEnum<"1s" | "1m" | "5m" | "1h">;
|
|
350
|
-
depth: 1 | "unspecified" | 10 | 5 | 20 | 200 | 500 |
|
|
350
|
+
depth: 1 | "unspecified" | 10 | 5 | 20 | 200 | 500 | 1000 | 100 | 50;
|
|
351
351
|
chain: {
|
|
352
352
|
baseKeyframe: {
|
|
353
353
|
tsSec: number;
|
|
@@ -44,6 +44,8 @@ const GetMarketTradesInputSchema = v.pipe(v.object({
|
|
|
44
44
|
limit: input.limit,
|
|
45
45
|
pageToken: input.pageToken
|
|
46
46
|
})));
|
|
47
|
+
/** Integer wire scales are protocol-bounded to 0..18 decimal places. */
|
|
48
|
+
const WireScaleSchema = v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(18));
|
|
47
49
|
const AssetConfigSchema = v.pipe(v.object({
|
|
48
50
|
/**
|
|
49
51
|
* Asset identifier/symbol, e.g. 'USDT', 'BTC'.
|
|
@@ -64,13 +66,18 @@ const AssetConfigSchema = v.pipe(v.object({
|
|
|
64
66
|
/**
|
|
65
67
|
* Fixed integer scaling for quantities/amounts in this asset (0..18).
|
|
66
68
|
*/
|
|
67
|
-
quantityScale: v.number()
|
|
69
|
+
quantityScale: v.number(),
|
|
70
|
+
/**
|
|
71
|
+
* Integer scale for public candle and market-overview base volume (0..18).
|
|
72
|
+
*/
|
|
73
|
+
marketDataVolumeScale: v.optional(WireScaleSchema, 0)
|
|
68
74
|
}), v.transform((a) => ({
|
|
69
75
|
symbol: a.asset,
|
|
70
76
|
ledgerId: a.ledgerId,
|
|
71
77
|
name: a.name,
|
|
72
78
|
quantityDisplayDecimals: a.quantityDisplayDecimals,
|
|
73
|
-
quantityScale: a.quantityScale
|
|
79
|
+
quantityScale: a.quantityScale,
|
|
80
|
+
marketDataVolumeScale: a.marketDataVolumeScale
|
|
74
81
|
})));
|
|
75
82
|
const PairMarketDataConfigSchema = v.optional(v.object({
|
|
76
83
|
/**
|
|
@@ -147,6 +154,11 @@ const PairConfigSchema = v.pipe(v.object({
|
|
|
147
154
|
*/
|
|
148
155
|
quoteQuantityScale: v.number(),
|
|
149
156
|
/**
|
|
157
|
+
* Integer scale for composite reference prices in candle responses (0..18).
|
|
158
|
+
* Primary market and execution prices continue to use scale 6.
|
|
159
|
+
*/
|
|
160
|
+
referencePriceScale: v.optional(WireScaleSchema, 0),
|
|
161
|
+
/**
|
|
150
162
|
* Optional scheduled listing timestamp (UTC).
|
|
151
163
|
*/
|
|
152
164
|
listingAt: v.pipe(v.optional(v.unknown()), v.transform(timestampToMs)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"market-data.schemas.js","names":[],"sources":["../../../src/services/market-data/market-data.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { SideSchema, SymbolIdInputSchema } from \"../shared.js\";\nimport {\n PAIR_STATUSES,\n type AssetConfig,\n type PairConfig,\n type PairMarketDataConfig,\n type PairStatus,\n type SpotConfig,\n} from \"../../shared/catalog-config.js\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport { timestampToMs, tsNsToTimestamp } from \"../../utils/timestamp.js\";\nimport { optionalUint64DecimalFilterSchema } from \"../../shared/schemas.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { PairStatusCodec, SideFilterCodec } from \"./market-data.codecs.js\";\n\nexport type { AssetConfig, PairConfig, PairMarketDataConfig, PairStatus, SpotConfig };\nexport { PAIR_STATUSES };\n\nexport function createMarketTradeSchema(scales: SdkScales) {\n return v.pipe(\n v.object({\n symbolId: v.number(),\n matchId: v.bigint(),\n isBuy: v.boolean(),\n priceTicks: v.bigint(),\n qtyScaled: v.bigint(),\n tsNs: v.optional(v.bigint(), 0n),\n }),\n v.transform((t) => {\n const sideLabel: v.InferOutput<typeof SideSchema> = t.isBuy ? \"buy\" : \"sell\";\n return {\n symbolId: t.symbolId,\n matchId: t.matchId.toString(),\n isBuy: t.isBuy,\n sideLabel,\n qty: scaledToDecimalOutput(t.qtyScaled, scales.baseQty(t.symbolId)),\n price: scaledToDecimalOutput(t.priceTicks, scales.price()),\n tsNs: t.tsNs.toString(),\n tsMs: tsNsToMs(t.tsNs),\n };\n }),\n );\n}\n\nexport type MarketTrade = v.InferOutput<ReturnType<typeof createMarketTradeSchema>>;\n\nexport const GetMarketTradesInputSchema = v.pipe(\n v.object({\n symbolId: SymbolIdInputSchema,\n side: v.optional(SideSchema),\n startTsNs: optionalUint64DecimalFilterSchema(\"startTsNs\"),\n endTsNs: optionalUint64DecimalFilterSchema(\"endTsNs\"),\n limit: v.optional(v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(1_000))),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform((input) => ({\n symbolId: input.symbolId,\n side: input.side ? SideFilterCodec.inputToProto[input.side] : undefined,\n startTime: tsNsToTimestamp(input.startTsNs),\n endTime: tsNsToTimestamp(input.endTsNs),\n limit: input.limit,\n pageToken: input.pageToken,\n })),\n);\n\nexport function createGetMarketTradesInputSchema() {\n return GetMarketTradesInputSchema;\n}\n\nexport type GetMarketTradesInput = v.InferInput<\n ReturnType<typeof createGetMarketTradesInputSchema>\n>;\nexport type GetMarketTradesRequest = v.InferOutput<\n ReturnType<typeof createGetMarketTradesInputSchema>\n>;\n\nexport const AssetConfigSchema = v.pipe(\n v.object({\n /**\n * Asset identifier/symbol, e.g. 'USDT', 'BTC'.\n */\n asset: v.string(),\n /**\n * Internal ledger identifier for settlement systems.\n */\n ledgerId: v.number(),\n /**\n * The friendly display name for the asset (e.g. 'Bitcoin').\n */\n name: v.string(),\n /**\n * UI-only display precision for asset amounts/balances.\n */\n quantityDisplayDecimals: v.number(),\n /**\n * Fixed integer scaling for quantities/amounts in this asset (0..18).\n */\n quantityScale: v.number(),\n }),\n v.transform((a) => ({\n symbol: a.asset,\n ledgerId: a.ledgerId,\n name: a.name,\n quantityDisplayDecimals: a.quantityDisplayDecimals,\n quantityScale: a.quantityScale,\n })),\n);\n\nexport const PairMarketDataConfigSchema = v.optional(\n v.object({\n /**\n * Available price grouping sizes for the orderbook in quote units.\n * Allows viewing orders bucketed by larger increments (e.g., [0.01, 0.1, 1, 10]).\n */\n orderbookPriceBuckets: v.array(v.number()),\n }),\n {\n orderbookPriceBuckets: [] as number[],\n },\n);\n\nfunction bpsToPercent(bps: number): number {\n return bps / 100;\n}\n\nexport const PairConfigSchema = v.pipe(\n v.object({\n /**\n * Internal engine symbol id for the pair.\n */\n symbolId: v.number(),\n /**\n * Pair symbol string, e.g. 'BTC-USDT'\n */\n symbol: v.string(),\n /**\n * Base asset symbol, e.g. 'BTC'\n */\n baseAsset: v.string(),\n /**\n * Quote asset symbol, e.g. 'USDT'\n */\n quoteAsset: v.string(),\n /**\n * (e.g., \"0.01\") - The smallest price increment allowed. If tick size is 0.01, you can price at $100.00, $100.01, $100.02... but NOT $100.005.\n */\n tickSize: v.string(),\n /**\n * (e.g., \"0.0001\") - The smallest quantity increment allowed. If step size is 0.0001, you can order 100.0000, 100.0001, 100.0002... but NOT 100.00005.\n */\n stepSize: v.string(),\n /**\n * (e.g., \"1\") - Minimum order value in quote currency. If it's \"1\" and quote is USD, your order must be worth at least $1. So you can't buy $0.50 worth of something.\n */\n minNotionalQuote: v.string(),\n /**\n * Minimum quantity you can order in base currency terms. If it's \"0.001\" for BTC, smallest order is 0.001 BTC.\n */\n minQtyBase: v.string(),\n\n /**\n * Controls whether trading fee can be deducted from what you receive when buying.\n * Example\n * - You buy 1 ETH, fee is 0.1%\n * - if `true`, you receive 0.999 ETH (fee taken from ETH you're getting)\n * - if `false`, you receive 1 ETH, but you pay the fee separately in the quote currency (e.g., extra USDT)\n */\n allowBuyFeeFromBase: v.boolean(),\n /**\n * Default market slippage for buy orders in basis points from proto.\n */\n defaultMarketSlippageBpsBuy: v.optional(v.number(), 0),\n /**\n * Default market slippage for sell orders in basis points from proto.\n */\n defaultMarketSlippageBpsSell: v.optional(v.number(), 0),\n /**\n * Maximum server/client reference-price drift in basis points from proto.\n */\n maxClientRefDriftBps: v.optional(v.number(), 0),\n\n /**\n * Market-data configuration for this pair (orderbook bucket sizes, depths).\n */\n marketdata: v.optional(PairMarketDataConfigSchema),\n /**\n * Base asset quantity scale copied from AssetConfig.quantityScale.\n */\n baseQuantityScale: v.number(),\n /**\n * Quote asset quantity scale copied from AssetConfig.quantityScale.\n */\n quoteQuantityScale: v.number(),\n /**\n * Optional scheduled listing timestamp (UTC).\n */\n listingAt: v.pipe(v.optional(v.unknown()), v.transform(timestampToMs)),\n /**\n * Optional scheduled delisting timestamp (UTC).\n */\n delistingAt: v.pipe(v.optional(v.unknown()), v.transform(timestampToMs)),\n /**\n * Operational status of the pair.\n */\n status: v.pipe(\n v.number(),\n v.transform(\n (status): PairStatus =>\n PairStatusCodec.protoToOutput[\n status as keyof typeof PairStatusCodec.protoToOutput\n ] ?? \"unknown\",\n ),\n ),\n }),\n v.transform(\n ({\n defaultMarketSlippageBpsBuy,\n defaultMarketSlippageBpsSell,\n maxClientRefDriftBps,\n ...pair\n }) => ({\n ...pair,\n defaultMarketSlippagePctBuy: bpsToPercent(defaultMarketSlippageBpsBuy),\n defaultMarketSlippagePctSell: bpsToPercent(defaultMarketSlippageBpsSell),\n maxClientRefDriftPct: bpsToPercent(maxClientRefDriftBps),\n }),\n ),\n);\n\nexport const SpotConfigSchema = v.object({\n assets: v.array(AssetConfigSchema),\n pairs: v.array(PairConfigSchema),\n tsSec: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v) * 1000),\n ),\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"market-data.schemas.js","names":[],"sources":["../../../src/services/market-data/market-data.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { SideSchema, SymbolIdInputSchema } from \"../shared.js\";\nimport {\n PAIR_STATUSES,\n type AssetConfig,\n type PairConfig,\n type PairMarketDataConfig,\n type PairStatus,\n type SpotConfig,\n} from \"../../shared/catalog-config.js\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport { timestampToMs, tsNsToTimestamp } from \"../../utils/timestamp.js\";\nimport { optionalUint64DecimalFilterSchema } from \"../../shared/schemas.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { PairStatusCodec, SideFilterCodec } from \"./market-data.codecs.js\";\n\nexport type { AssetConfig, PairConfig, PairMarketDataConfig, PairStatus, SpotConfig };\nexport { PAIR_STATUSES };\n\nexport function createMarketTradeSchema(scales: SdkScales) {\n return v.pipe(\n v.object({\n symbolId: v.number(),\n matchId: v.bigint(),\n isBuy: v.boolean(),\n priceTicks: v.bigint(),\n qtyScaled: v.bigint(),\n tsNs: v.optional(v.bigint(), 0n),\n }),\n v.transform((t) => {\n const sideLabel: v.InferOutput<typeof SideSchema> = t.isBuy ? \"buy\" : \"sell\";\n return {\n symbolId: t.symbolId,\n matchId: t.matchId.toString(),\n isBuy: t.isBuy,\n sideLabel,\n qty: scaledToDecimalOutput(t.qtyScaled, scales.baseQty(t.symbolId)),\n price: scaledToDecimalOutput(t.priceTicks, scales.price()),\n tsNs: t.tsNs.toString(),\n tsMs: tsNsToMs(t.tsNs),\n };\n }),\n );\n}\n\nexport type MarketTrade = v.InferOutput<ReturnType<typeof createMarketTradeSchema>>;\n\nexport const GetMarketTradesInputSchema = v.pipe(\n v.object({\n symbolId: SymbolIdInputSchema,\n side: v.optional(SideSchema),\n startTsNs: optionalUint64DecimalFilterSchema(\"startTsNs\"),\n endTsNs: optionalUint64DecimalFilterSchema(\"endTsNs\"),\n limit: v.optional(v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(1_000))),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform((input) => ({\n symbolId: input.symbolId,\n side: input.side ? SideFilterCodec.inputToProto[input.side] : undefined,\n startTime: tsNsToTimestamp(input.startTsNs),\n endTime: tsNsToTimestamp(input.endTsNs),\n limit: input.limit,\n pageToken: input.pageToken,\n })),\n);\n\nexport function createGetMarketTradesInputSchema() {\n return GetMarketTradesInputSchema;\n}\n\nexport type GetMarketTradesInput = v.InferInput<\n ReturnType<typeof createGetMarketTradesInputSchema>\n>;\nexport type GetMarketTradesRequest = v.InferOutput<\n ReturnType<typeof createGetMarketTradesInputSchema>\n>;\n\n/** Integer wire scales are protocol-bounded to 0..18 decimal places. */\nconst WireScaleSchema = v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(18));\n\nexport const AssetConfigSchema = v.pipe(\n v.object({\n /**\n * Asset identifier/symbol, e.g. 'USDT', 'BTC'.\n */\n asset: v.string(),\n /**\n * Internal ledger identifier for settlement systems.\n */\n ledgerId: v.number(),\n /**\n * The friendly display name for the asset (e.g. 'Bitcoin').\n */\n name: v.string(),\n /**\n * UI-only display precision for asset amounts/balances.\n */\n quantityDisplayDecimals: v.number(),\n /**\n * Fixed integer scaling for quantities/amounts in this asset (0..18).\n */\n quantityScale: v.number(),\n /**\n * Integer scale for public candle and market-overview base volume (0..18).\n */\n marketDataVolumeScale: v.optional(WireScaleSchema, 0),\n }),\n v.transform((a) => ({\n symbol: a.asset,\n ledgerId: a.ledgerId,\n name: a.name,\n quantityDisplayDecimals: a.quantityDisplayDecimals,\n quantityScale: a.quantityScale,\n marketDataVolumeScale: a.marketDataVolumeScale,\n })),\n);\n\nexport const PairMarketDataConfigSchema = v.optional(\n v.object({\n /**\n * Available price grouping sizes for the orderbook in quote units.\n * Allows viewing orders bucketed by larger increments (e.g., [0.01, 0.1, 1, 10]).\n */\n orderbookPriceBuckets: v.array(v.number()),\n }),\n {\n orderbookPriceBuckets: [] as number[],\n },\n);\n\nfunction bpsToPercent(bps: number): number {\n return bps / 100;\n}\n\nexport const PairConfigSchema = v.pipe(\n v.object({\n /**\n * Internal engine symbol id for the pair.\n */\n symbolId: v.number(),\n /**\n * Pair symbol string, e.g. 'BTC-USDT'\n */\n symbol: v.string(),\n /**\n * Base asset symbol, e.g. 'BTC'\n */\n baseAsset: v.string(),\n /**\n * Quote asset symbol, e.g. 'USDT'\n */\n quoteAsset: v.string(),\n /**\n * (e.g., \"0.01\") - The smallest price increment allowed. If tick size is 0.01, you can price at $100.00, $100.01, $100.02... but NOT $100.005.\n */\n tickSize: v.string(),\n /**\n * (e.g., \"0.0001\") - The smallest quantity increment allowed. If step size is 0.0001, you can order 100.0000, 100.0001, 100.0002... but NOT 100.00005.\n */\n stepSize: v.string(),\n /**\n * (e.g., \"1\") - Minimum order value in quote currency. If it's \"1\" and quote is USD, your order must be worth at least $1. So you can't buy $0.50 worth of something.\n */\n minNotionalQuote: v.string(),\n /**\n * Minimum quantity you can order in base currency terms. If it's \"0.001\" for BTC, smallest order is 0.001 BTC.\n */\n minQtyBase: v.string(),\n\n /**\n * Controls whether trading fee can be deducted from what you receive when buying.\n * Example\n * - You buy 1 ETH, fee is 0.1%\n * - if `true`, you receive 0.999 ETH (fee taken from ETH you're getting)\n * - if `false`, you receive 1 ETH, but you pay the fee separately in the quote currency (e.g., extra USDT)\n */\n allowBuyFeeFromBase: v.boolean(),\n /**\n * Default market slippage for buy orders in basis points from proto.\n */\n defaultMarketSlippageBpsBuy: v.optional(v.number(), 0),\n /**\n * Default market slippage for sell orders in basis points from proto.\n */\n defaultMarketSlippageBpsSell: v.optional(v.number(), 0),\n /**\n * Maximum server/client reference-price drift in basis points from proto.\n */\n maxClientRefDriftBps: v.optional(v.number(), 0),\n\n /**\n * Market-data configuration for this pair (orderbook bucket sizes, depths).\n */\n marketdata: v.optional(PairMarketDataConfigSchema),\n /**\n * Base asset quantity scale copied from AssetConfig.quantityScale.\n */\n baseQuantityScale: v.number(),\n /**\n * Quote asset quantity scale copied from AssetConfig.quantityScale.\n */\n quoteQuantityScale: v.number(),\n /**\n * Integer scale for composite reference prices in candle responses (0..18).\n * Primary market and execution prices continue to use scale 6.\n */\n referencePriceScale: v.optional(WireScaleSchema, 0),\n /**\n * Optional scheduled listing timestamp (UTC).\n */\n listingAt: v.pipe(v.optional(v.unknown()), v.transform(timestampToMs)),\n /**\n * Optional scheduled delisting timestamp (UTC).\n */\n delistingAt: v.pipe(v.optional(v.unknown()), v.transform(timestampToMs)),\n /**\n * Operational status of the pair.\n */\n status: v.pipe(\n v.number(),\n v.transform(\n (status): PairStatus =>\n PairStatusCodec.protoToOutput[\n status as keyof typeof PairStatusCodec.protoToOutput\n ] ?? \"unknown\",\n ),\n ),\n }),\n v.transform(\n ({\n defaultMarketSlippageBpsBuy,\n defaultMarketSlippageBpsSell,\n maxClientRefDriftBps,\n ...pair\n }) => ({\n ...pair,\n defaultMarketSlippagePctBuy: bpsToPercent(defaultMarketSlippageBpsBuy),\n defaultMarketSlippagePctSell: bpsToPercent(defaultMarketSlippageBpsSell),\n maxClientRefDriftPct: bpsToPercent(maxClientRefDriftBps),\n }),\n ),\n);\n\nexport const SpotConfigSchema = v.object({\n assets: v.array(AssetConfigSchema),\n pairs: v.array(PairConfigSchema),\n tsSec: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v) * 1000),\n ),\n});\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"market-overview.schemas.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"mappings":";;;;;;cA2Ba,yBAAuB,EAAA;KAExB,wBAAwB,EAAE,mBAAmB;KAO7C;EACR,UAAU,YAAY;EACtB;;cAGS,6BAA2B,EAAA;KAE5B,wBAAwB,EAAE,mBAAmB;cAE5C,0BAAwB,EAAA;KAEzB,qBAAqB,EAAE,mBAAmB;iBA2BtC,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"market-overview.schemas.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"mappings":";;;;;;cA2Ba,yBAAuB,EAAA;KAExB,wBAAwB,EAAE,mBAAmB;KAO7C;EACR,UAAU,YAAY;EACtB;;cAGS,6BAA2B,EAAA;KAE5B,wBAAwB,EAAE,mBAAmB;cAE5C,0BAAwB,EAAA;KAEzB,qBAAqB,EAAE,mBAAmB;iBA2BtC,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8ChD,iBAAiB,EAAE,YAAY,kBAAkB;cAqChD,+BAA6B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAwB9B,0BAA0B,EAAE,kBAAkB;cAE7C,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;KAa7B,yBAAyB,EAAE,kBAAkB;cAE5C,4BAA0B,EAAA,yBAAA,EAAA;;;;;;;;;;KAI3B,uBAAuB,EAAE,mBAAmB;cAE3C,iCAA+B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAchC,4BAA4B,EAAE,mBAAmB;cAEhD,wBAAsB,EAAA;;;;;;KAMvB,mBAAmB,EAAE,mBAAmB;cAEvC,gCAA8B,EAAA;;;;;;;;;;;;;;KAI/B,2BAA2B,EAAE,mBAAmB;cAY/C,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;KAIzB,qBAAqB,EAAE,mBAAmB;cAEzC,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAQ7B,yBAAyB,EAAE,mBAAmB;cAE7C,gCAA8B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;KAa/B,2BAA2B,EAAE,mBAAmB;cAE/C,+BAA6B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAQ9B,0BAA0B,EAAE,mBAAmB"}
|
|
@@ -38,6 +38,7 @@ function createMarketOverviewSchema(scales) {
|
|
|
38
38
|
const priceScale = scales.price();
|
|
39
39
|
const baseQtyScale = scales.baseQty(m.symbolId);
|
|
40
40
|
const quoteAmountScale = scales.quoteAmount(m.symbolId);
|
|
41
|
+
const volumeScale = scales.marketDataVolume(m.symbolId);
|
|
41
42
|
return {
|
|
42
43
|
symbolId: m.symbolId,
|
|
43
44
|
lastPrice: scaledToDecimalOutput(m.lastPriceTicks, priceScale),
|
|
@@ -45,7 +46,7 @@ function createMarketOverviewSchema(scales) {
|
|
|
45
46
|
change24hBps: m.change24hBps,
|
|
46
47
|
high24h: scaledToDecimalOutput(m.high24hTicks, priceScale),
|
|
47
48
|
low24h: scaledToDecimalOutput(m.low24hTicks, priceScale),
|
|
48
|
-
volume24hBase: m.volume24hBaseScaled === void 0 ? void 0 : scaledToDecimalOutput(m.volume24hBaseScaled,
|
|
49
|
+
volume24hBase: m.volume24hBaseScaled === void 0 ? void 0 : scaledToDecimalOutput(m.volume24hBaseScaled, volumeScale),
|
|
49
50
|
volume24hQuote: m.volume24hQuoteScaled === void 0 ? void 0 : scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),
|
|
50
51
|
volume24hUsd: m.volume24hUsdScaled,
|
|
51
52
|
listedTsMs: tsNsToMs(m.listedTsNs),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"market-overview.schemas.js","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { enumLabelSchema } from \"../../shared/proto-enum-codec.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { PositiveUint32InputSchema, SymbolIdInputSchema } from \"../shared.js\";\nimport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n SparklineIntervalCodec,\n MarketOverviewOrderByCodec,\n MarketOverviewSortCodec,\n} from \"./market-overview.codecs.js\";\n\nexport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n} from \"./market-overview.codecs.js\";\n\nexport {\n MarketOrderBy,\n SortDirection,\n SparklineInterval,\n} from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\n\nexport const SparklineIntervalSchema = v.picklist(SPARKLINE_INTERVAL_VALUES);\n\nexport type SparklineIntervalName = v.InferOutput<typeof SparklineIntervalSchema>;\n\nconst MarketOverviewSparklineRawSchema = v.object({\n interval: enumLabelSchema(SparklineIntervalCodec.protoToOutput),\n closeTicks: v.array(v.bigint()),\n});\n\nexport type MarketOverviewSparkline = {\n interval: DecodedEnum<SparklineIntervalName>;\n close: string[];\n};\n\nexport const MarketOverviewOrderBySchema = v.picklist(MARKET_OVERVIEW_ORDER_BY_VALUES);\n\nexport type MarketOverviewOrderBy = v.InferOutput<typeof MarketOverviewOrderBySchema>;\n\nexport const MarketOverviewSortSchema = v.picklist(MARKET_OVERVIEW_SORT_VALUES);\n\nexport type MarketOverviewSort = v.InferOutput<typeof MarketOverviewSortSchema>;\n\n/** USD amounts are always scaled by 1e6 on the wire. */\nconst UsdVolumeSchema = v.pipe(\n v.bigint(),\n v.transform((value) => scaledToDecimalOutput(value, 6)),\n);\n\nconst MarketOverviewRawSchema = v.object({\n symbolId: v.number(),\n lastPriceTicks: v.bigint(),\n lastTradeTsNs: v.optional(v.bigint(), 0n),\n change24hBps: v.number(),\n high24hTicks: v.bigint(),\n low24hTicks: v.bigint(),\n volume24hBaseScaled: v.optional(v.bigint()),\n volume24hQuoteScaled: v.optional(v.bigint()),\n volume24hUsdScaled: v.optional(UsdVolumeSchema),\n listedTsNs: v.optional(v.bigint(), 0n),\n bestBidTicks: v.bigint(),\n bestBidQtyScaled: v.bigint(),\n bestAskTicks: v.bigint(),\n bestAskQtyScaled: v.bigint(),\n sparklines: v.optional(v.array(MarketOverviewSparklineRawSchema), []),\n indexPriceTicks: v.bigint(),\n});\n\nexport function createMarketOverviewSchema(scales: SdkScales) {\n return v.pipe(\n MarketOverviewRawSchema,\n v.transform((m) => {\n const priceScale = scales.price();\n const baseQtyScale = scales.baseQty(m.symbolId);\n const quoteAmountScale = scales.quoteAmount(m.symbolId);\n return {\n symbolId: m.symbolId,\n lastPrice: scaledToDecimalOutput(m.lastPriceTicks, priceScale),\n lastTradeTsMs: tsNsToMs(m.lastTradeTsNs),\n change24hBps: m.change24hBps,\n high24h: scaledToDecimalOutput(m.high24hTicks, priceScale),\n low24h: scaledToDecimalOutput(m.low24hTicks, priceScale),\n volume24hBase:\n m.volume24hBaseScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hBaseScaled, baseQtyScale),\n volume24hQuote:\n m.volume24hQuoteScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),\n volume24hUsd: m.volume24hUsdScaled,\n listedTsMs: tsNsToMs(m.listedTsNs),\n bestBid: scaledToDecimalOutput(m.bestBidTicks, priceScale),\n bestBidQty: scaledToDecimalOutput(m.bestBidQtyScaled, baseQtyScale),\n bestAsk: scaledToDecimalOutput(m.bestAskTicks, priceScale),\n bestAskQty: scaledToDecimalOutput(m.bestAskQtyScaled, baseQtyScale),\n indexPrice:\n m.indexPriceTicks > 0n\n ? scaledToDecimalOutput(m.indexPriceTicks, priceScale)\n : undefined,\n sparklines: (m.sparklines ?? []).map(\n (s): MarketOverviewSparkline => ({\n interval: s.interval,\n close: s.closeTicks\n .map((tick) => scaledToDecimalOutput(tick, priceScale))\n .reverse(),\n }),\n ),\n };\n }),\n );\n}\n\nexport type MarketOverview = v.InferOutput<ReturnType<typeof createMarketOverviewSchema>>;\n\nconst MS_PER_24H = 86_400_000;\n\nfunction change24hBpsFromSparklineFirstLast(sparklines: MarketOverview[\"sparklines\"]): number {\n const s = sparklines.find((e) => e.interval === \"24h\") ?? sparklines[0];\n if (!s || s.close.length < 2) return 0;\n const first = Number(s.close[0] ?? 0);\n const last = Number(s.close.at(-1) ?? 0);\n if (!Number.isFinite(first) || !Number.isFinite(last)) return 0;\n if (first === 0) return 0;\n return Math.round(((last - first) / first) * 10_000);\n}\n\n/**\n * Formats the 24-hour market change percentage for display.\n */\nexport function getMarketOverview24hChangeDisplay(\n market: Pick<MarketOverview, \"change24hBps\" | \"listedTsMs\" | \"sparklines\">,\n nowMs: number = Date.now(),\n): { change24hBps: number; showNewListingSparklineInfo: boolean } {\n const api = market.change24hBps;\n const newish = api === 0 && market.listedTsMs > 0 && nowMs - market.listedTsMs < MS_PER_24H;\n if (!newish) {\n return { change24hBps: api, showNewListingSparklineInfo: false };\n }\n return {\n change24hBps: change24hBpsFromSparklineFirstLast(market.sparklines),\n showNewListingSparklineInfo: true,\n };\n}\n\nexport type MarketOverviewBatch = {\n markets: MarketOverview[];\n tsNs: bigint;\n};\n\nexport const ListMarketOverviewInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(v.array(SymbolIdInputSchema), []),\n limit: v.optional(PositiveUint32InputSchema, 500),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n orderBy: v.pipe(\n v.optional(MarketOverviewOrderBySchema, \"volume_24h_usd\"),\n v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? \"volume_24h_usd\"]),\n ),\n sort: v.pipe(\n v.optional(MarketOverviewSortSchema, \"desc\"),\n v.transform((v) => MarketOverviewSortCodec.inputToProto[v ?? \"desc\"]),\n ),\n includeSparklines: v.optional(v.boolean(), true),\n sparklineIntervals: v.pipe(\n v.optional(v.array(SparklineIntervalSchema), [\"24h\"]),\n v.transform((intervals) =>\n (intervals ?? [\"24h\"]).map((v) => SparklineIntervalCodec.inputToProto[v]),\n ),\n ),\n }),\n v.transform(({ symbolIds, ...input }) => ({ symbolId: symbolIds, ...input })),\n);\n\nexport type ListMarketOverviewInput = v.InferInput<typeof ListMarketOverviewInputSchema>;\n\nexport const SpotVolumeHistoryInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(\n v.pipe(\n v.array(SymbolIdInputSchema),\n v.transform((ids) => [...new Set(ids)]),\n v.maxLength(2000),\n ),\n [],\n ),\n }),\n v.transform(({ symbolIds }) => ({ symbolId: symbolIds })),\n);\nexport type SpotVolumeHistoryInput = v.InferInput<typeof SpotVolumeHistoryInputSchema>;\n\nexport const SpotPairVolumeSeriesSchema = v.pipe(\n v.object({ symbolId: v.number(), volumeUsdScaled: v.array(UsdVolumeSchema) }),\n v.transform(({ symbolId, volumeUsdScaled }) => ({ symbolId, volumeUsd: volumeUsdScaled })),\n);\nexport type SpotPairVolumeSeries = v.InferOutput<typeof SpotPairVolumeSeriesSchema>;\n\nexport const SpotVolumeHistoryResponseSchema = v.pipe(\n v.object({\n bucket: v.string(),\n startTsSec: v.number(),\n endTsSec: v.number(),\n points: v.number(),\n pairs: v.array(SpotPairVolumeSeriesSchema),\n totalVolumeUsdScaled: v.array(UsdVolumeSchema),\n }),\n v.transform(({ totalVolumeUsdScaled, ...response }) => ({\n ...response,\n totalVolumeUsd: totalVolumeUsdScaled,\n })),\n);\nexport type SpotVolumeHistoryResponse = v.InferOutput<typeof SpotVolumeHistoryResponseSchema>;\n\nexport const CurrencyMetadataSchema = v.object({\n code: v.string(),\n defaultEnglishName: v.string(),\n symbol: v.string(),\n fractionDigits: v.number(),\n});\nexport type CurrencyMetadata = v.InferOutput<typeof CurrencyMetadataSchema>;\n\nexport const CurrencyConversionConfigSchema = v.object({\n fiat: v.array(CurrencyMetadataSchema),\n stablecoins: v.array(CurrencyMetadataSchema),\n});\nexport type CurrencyConversionConfig = v.InferOutput<typeof CurrencyConversionConfigSchema>;\n\nconst ConversionRateSchema = v.pipe(\n v.bigint(),\n v.transform((value) => scaledToDecimalOutput(value, 8)),\n);\nconst ConversionTimestampSchema = v.pipe(\n v.bigint(),\n v.transform((value) => Number(value * 1000n)),\n v.safeInteger(),\n);\n\nexport const FiatConversionRateSchema = v.pipe(\n v.object({ code: v.string(), unitsPerUsdE8: ConversionRateSchema }),\n v.transform(({ code, unitsPerUsdE8 }) => ({ code, unitsPerUsd: unitsPerUsdE8 })),\n);\nexport type FiatConversionRate = v.InferOutput<typeof FiatConversionRateSchema>;\n\nexport const FiatConversionSnapshotSchema = v.pipe(\n v.object({\n rates: v.array(FiatConversionRateSchema),\n sourceTsSec: ConversionTimestampSchema,\n stale: v.boolean(),\n }),\n v.transform(({ sourceTsSec, ...snapshot }) => ({ ...snapshot, sourceTsMs: sourceTsSec })),\n);\nexport type FiatConversionSnapshot = v.InferOutput<typeof FiatConversionSnapshotSchema>;\n\nexport const StablecoinConversionRateSchema = v.pipe(\n v.object({\n code: v.string(),\n usdPerUnitE8: ConversionRateSchema,\n sourceTsSec: ConversionTimestampSchema,\n stale: v.boolean(),\n }),\n v.transform(({ usdPerUnitE8, sourceTsSec, ...rate }) => ({\n ...rate,\n usdPerUnit: usdPerUnitE8,\n sourceTsMs: sourceTsSec,\n })),\n);\nexport type StablecoinConversionRate = v.InferOutput<typeof StablecoinConversionRateSchema>;\n\nexport const CurrencyConversionRatesSchema = v.pipe(\n v.object({\n fiat: v.optional(FiatConversionSnapshotSchema),\n stablecoins: v.array(StablecoinConversionRateSchema),\n snapshotTsSec: ConversionTimestampSchema,\n }),\n v.transform(({ snapshotTsSec, ...response }) => ({ ...response, snapshotTsMs: snapshotTsSec })),\n);\nexport type CurrencyConversionRates = v.InferOutput<typeof CurrencyConversionRatesSchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"market-overview.schemas.js","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { enumLabelSchema } from \"../../shared/proto-enum-codec.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { PositiveUint32InputSchema, SymbolIdInputSchema } from \"../shared.js\";\nimport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n SparklineIntervalCodec,\n MarketOverviewOrderByCodec,\n MarketOverviewSortCodec,\n} from \"./market-overview.codecs.js\";\n\nexport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n} from \"./market-overview.codecs.js\";\n\nexport {\n MarketOrderBy,\n SortDirection,\n SparklineInterval,\n} from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\n\nexport const SparklineIntervalSchema = v.picklist(SPARKLINE_INTERVAL_VALUES);\n\nexport type SparklineIntervalName = v.InferOutput<typeof SparklineIntervalSchema>;\n\nconst MarketOverviewSparklineRawSchema = v.object({\n interval: enumLabelSchema(SparklineIntervalCodec.protoToOutput),\n closeTicks: v.array(v.bigint()),\n});\n\nexport type MarketOverviewSparkline = {\n interval: DecodedEnum<SparklineIntervalName>;\n close: string[];\n};\n\nexport const MarketOverviewOrderBySchema = v.picklist(MARKET_OVERVIEW_ORDER_BY_VALUES);\n\nexport type MarketOverviewOrderBy = v.InferOutput<typeof MarketOverviewOrderBySchema>;\n\nexport const MarketOverviewSortSchema = v.picklist(MARKET_OVERVIEW_SORT_VALUES);\n\nexport type MarketOverviewSort = v.InferOutput<typeof MarketOverviewSortSchema>;\n\n/** USD amounts are always scaled by 1e6 on the wire. */\nconst UsdVolumeSchema = v.pipe(\n v.bigint(),\n v.transform((value) => scaledToDecimalOutput(value, 6)),\n);\n\nconst MarketOverviewRawSchema = v.object({\n symbolId: v.number(),\n lastPriceTicks: v.bigint(),\n lastTradeTsNs: v.optional(v.bigint(), 0n),\n change24hBps: v.number(),\n high24hTicks: v.bigint(),\n low24hTicks: v.bigint(),\n volume24hBaseScaled: v.optional(v.bigint()),\n volume24hQuoteScaled: v.optional(v.bigint()),\n volume24hUsdScaled: v.optional(UsdVolumeSchema),\n listedTsNs: v.optional(v.bigint(), 0n),\n bestBidTicks: v.bigint(),\n bestBidQtyScaled: v.bigint(),\n bestAskTicks: v.bigint(),\n bestAskQtyScaled: v.bigint(),\n sparklines: v.optional(v.array(MarketOverviewSparklineRawSchema), []),\n indexPriceTicks: v.bigint(),\n});\n\nexport function createMarketOverviewSchema(scales: SdkScales) {\n return v.pipe(\n MarketOverviewRawSchema,\n v.transform((m) => {\n const priceScale = scales.price();\n const baseQtyScale = scales.baseQty(m.symbolId);\n const quoteAmountScale = scales.quoteAmount(m.symbolId);\n const volumeScale = scales.marketDataVolume(m.symbolId);\n return {\n symbolId: m.symbolId,\n lastPrice: scaledToDecimalOutput(m.lastPriceTicks, priceScale),\n lastTradeTsMs: tsNsToMs(m.lastTradeTsNs),\n change24hBps: m.change24hBps,\n high24h: scaledToDecimalOutput(m.high24hTicks, priceScale),\n low24h: scaledToDecimalOutput(m.low24hTicks, priceScale),\n volume24hBase:\n m.volume24hBaseScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hBaseScaled, volumeScale),\n volume24hQuote:\n m.volume24hQuoteScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),\n volume24hUsd: m.volume24hUsdScaled,\n listedTsMs: tsNsToMs(m.listedTsNs),\n bestBid: scaledToDecimalOutput(m.bestBidTicks, priceScale),\n bestBidQty: scaledToDecimalOutput(m.bestBidQtyScaled, baseQtyScale),\n bestAsk: scaledToDecimalOutput(m.bestAskTicks, priceScale),\n bestAskQty: scaledToDecimalOutput(m.bestAskQtyScaled, baseQtyScale),\n indexPrice:\n m.indexPriceTicks > 0n\n ? scaledToDecimalOutput(m.indexPriceTicks, priceScale)\n : undefined,\n sparklines: (m.sparklines ?? []).map(\n (s): MarketOverviewSparkline => ({\n interval: s.interval,\n close: s.closeTicks\n .map((tick) => scaledToDecimalOutput(tick, priceScale))\n .reverse(),\n }),\n ),\n };\n }),\n );\n}\n\nexport type MarketOverview = v.InferOutput<ReturnType<typeof createMarketOverviewSchema>>;\n\nconst MS_PER_24H = 86_400_000;\n\nfunction change24hBpsFromSparklineFirstLast(sparklines: MarketOverview[\"sparklines\"]): number {\n const s = sparklines.find((e) => e.interval === \"24h\") ?? sparklines[0];\n if (!s || s.close.length < 2) return 0;\n const first = Number(s.close[0] ?? 0);\n const last = Number(s.close.at(-1) ?? 0);\n if (!Number.isFinite(first) || !Number.isFinite(last)) return 0;\n if (first === 0) return 0;\n return Math.round(((last - first) / first) * 10_000);\n}\n\n/**\n * Formats the 24-hour market change percentage for display.\n */\nexport function getMarketOverview24hChangeDisplay(\n market: Pick<MarketOverview, \"change24hBps\" | \"listedTsMs\" | \"sparklines\">,\n nowMs: number = Date.now(),\n): { change24hBps: number; showNewListingSparklineInfo: boolean } {\n const api = market.change24hBps;\n const newish = api === 0 && market.listedTsMs > 0 && nowMs - market.listedTsMs < MS_PER_24H;\n if (!newish) {\n return { change24hBps: api, showNewListingSparklineInfo: false };\n }\n return {\n change24hBps: change24hBpsFromSparklineFirstLast(market.sparklines),\n showNewListingSparklineInfo: true,\n };\n}\n\nexport type MarketOverviewBatch = {\n markets: MarketOverview[];\n tsNs: bigint;\n};\n\nexport const ListMarketOverviewInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(v.array(SymbolIdInputSchema), []),\n limit: v.optional(PositiveUint32InputSchema, 500),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n orderBy: v.pipe(\n v.optional(MarketOverviewOrderBySchema, \"volume_24h_usd\"),\n v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? \"volume_24h_usd\"]),\n ),\n sort: v.pipe(\n v.optional(MarketOverviewSortSchema, \"desc\"),\n v.transform((v) => MarketOverviewSortCodec.inputToProto[v ?? \"desc\"]),\n ),\n includeSparklines: v.optional(v.boolean(), true),\n sparklineIntervals: v.pipe(\n v.optional(v.array(SparklineIntervalSchema), [\"24h\"]),\n v.transform((intervals) =>\n (intervals ?? [\"24h\"]).map((v) => SparklineIntervalCodec.inputToProto[v]),\n ),\n ),\n }),\n v.transform(({ symbolIds, ...input }) => ({ symbolId: symbolIds, ...input })),\n);\n\nexport type ListMarketOverviewInput = v.InferInput<typeof ListMarketOverviewInputSchema>;\n\nexport const SpotVolumeHistoryInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(\n v.pipe(\n v.array(SymbolIdInputSchema),\n v.transform((ids) => [...new Set(ids)]),\n v.maxLength(2000),\n ),\n [],\n ),\n }),\n v.transform(({ symbolIds }) => ({ symbolId: symbolIds })),\n);\nexport type SpotVolumeHistoryInput = v.InferInput<typeof SpotVolumeHistoryInputSchema>;\n\nexport const SpotPairVolumeSeriesSchema = v.pipe(\n v.object({ symbolId: v.number(), volumeUsdScaled: v.array(UsdVolumeSchema) }),\n v.transform(({ symbolId, volumeUsdScaled }) => ({ symbolId, volumeUsd: volumeUsdScaled })),\n);\nexport type SpotPairVolumeSeries = v.InferOutput<typeof SpotPairVolumeSeriesSchema>;\n\nexport const SpotVolumeHistoryResponseSchema = v.pipe(\n v.object({\n bucket: v.string(),\n startTsSec: v.number(),\n endTsSec: v.number(),\n points: v.number(),\n pairs: v.array(SpotPairVolumeSeriesSchema),\n totalVolumeUsdScaled: v.array(UsdVolumeSchema),\n }),\n v.transform(({ totalVolumeUsdScaled, ...response }) => ({\n ...response,\n totalVolumeUsd: totalVolumeUsdScaled,\n })),\n);\nexport type SpotVolumeHistoryResponse = v.InferOutput<typeof SpotVolumeHistoryResponseSchema>;\n\nexport const CurrencyMetadataSchema = v.object({\n code: v.string(),\n defaultEnglishName: v.string(),\n symbol: v.string(),\n fractionDigits: v.number(),\n});\nexport type CurrencyMetadata = v.InferOutput<typeof CurrencyMetadataSchema>;\n\nexport const CurrencyConversionConfigSchema = v.object({\n fiat: v.array(CurrencyMetadataSchema),\n stablecoins: v.array(CurrencyMetadataSchema),\n});\nexport type CurrencyConversionConfig = v.InferOutput<typeof CurrencyConversionConfigSchema>;\n\nconst ConversionRateSchema = v.pipe(\n v.bigint(),\n v.transform((value) => scaledToDecimalOutput(value, 8)),\n);\nconst ConversionTimestampSchema = v.pipe(\n v.bigint(),\n v.transform((value) => Number(value * 1000n)),\n v.safeInteger(),\n);\n\nexport const FiatConversionRateSchema = v.pipe(\n v.object({ code: v.string(), unitsPerUsdE8: ConversionRateSchema }),\n v.transform(({ code, unitsPerUsdE8 }) => ({ code, unitsPerUsd: unitsPerUsdE8 })),\n);\nexport type FiatConversionRate = v.InferOutput<typeof FiatConversionRateSchema>;\n\nexport const FiatConversionSnapshotSchema = v.pipe(\n v.object({\n rates: v.array(FiatConversionRateSchema),\n sourceTsSec: ConversionTimestampSchema,\n stale: v.boolean(),\n }),\n v.transform(({ sourceTsSec, ...snapshot }) => ({ ...snapshot, sourceTsMs: sourceTsSec })),\n);\nexport type FiatConversionSnapshot = v.InferOutput<typeof FiatConversionSnapshotSchema>;\n\nexport const StablecoinConversionRateSchema = v.pipe(\n v.object({\n code: v.string(),\n usdPerUnitE8: ConversionRateSchema,\n sourceTsSec: ConversionTimestampSchema,\n stale: v.boolean(),\n }),\n v.transform(({ usdPerUnitE8, sourceTsSec, ...rate }) => ({\n ...rate,\n usdPerUnit: usdPerUnitE8,\n sourceTsMs: sourceTsSec,\n })),\n);\nexport type StablecoinConversionRate = v.InferOutput<typeof StablecoinConversionRateSchema>;\n\nexport const CurrencyConversionRatesSchema = v.pipe(\n v.object({\n fiat: v.optional(FiatConversionSnapshotSchema),\n stablecoins: v.array(StablecoinConversionRateSchema),\n snapshotTsSec: ConversionTimestampSchema,\n }),\n v.transform(({ snapshotTsSec, ...response }) => ({ ...response, snapshotTsMs: snapshotTsSec })),\n);\nexport type CurrencyConversionRates = v.InferOutput<typeof CurrencyConversionRatesSchema>;\n"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ declare const GetOrderbookInputSchema: v.SchemaWithPipe<readonly [v.ObjectSchema
|
|
|
10
10
|
depth: number;
|
|
11
11
|
}, {
|
|
12
12
|
symbolId: number;
|
|
13
|
-
depth: 1 | 10 | 5 | 20 | 200 | 500 |
|
|
13
|
+
depth: 1 | 10 | 5 | 20 | 200 | 500 | 1000 | 100 | 50;
|
|
14
14
|
protoDepth: Depth;
|
|
15
15
|
}>]>;
|
|
16
16
|
type GetOrderbookInput = v.InferInput<typeof GetOrderbookInputSchema>;
|
|
@@ -295,7 +295,7 @@ declare const SubaccountActivityEventSchema: v.ObjectSchema<{
|
|
|
295
295
|
seconds: bigint;
|
|
296
296
|
nanos: number;
|
|
297
297
|
} | undefined, number | undefined>]>;
|
|
298
|
-
readonly entityKind: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, "unspecified" | "api_key" | "account" | "subaccount" | "destination" | "session" | "
|
|
298
|
+
readonly entityKind: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, "unspecified" | "api_key" | "account" | "subaccount" | "destination" | "session" | "member" | "policy" | "invite" | "security">]>;
|
|
299
299
|
readonly eventAction: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, "unspecified" | "enabled" | "disabled" | "failed" | "revoked" | "created" | "updated" | "deleted" | "removed" | "role_set" | "received" | "replied" | "blocked" | "hold_placed" | "hold_released">]>;
|
|
300
300
|
readonly source: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, "unspecified" | "web" | "mobile" | "api">]>;
|
|
301
301
|
readonly ip: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
@@ -168,7 +168,7 @@ declare const GetUserTradesInputSchema: v.SchemaWithPipe<readonly [v.UnionSchema
|
|
|
168
168
|
readonly orderId: v.OptionalSchema<v.NeverSchema<undefined>, undefined>;
|
|
169
169
|
readonly lineageId: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.TransformAction<string, bigint>]>, v.CheckAction<bigint, `${string} must be greater than zero`>]>;
|
|
170
170
|
readonly throughGeneration: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>, undefined>;
|
|
171
|
-
}, undefined>], undefined>], ({ input }: v.UnionIssue<v.NumberIssue | v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1> | v.UnionIssue<v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1>> | v.IntegerIssue<number> | v.MaxValueIssue<number, 4294967295> | v.CheckIssue<bigint> | v.BooleanIssue | v.NeverIssue | v.
|
|
171
|
+
}, undefined>], undefined>], ({ input }: v.UnionIssue<v.NumberIssue | v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1> | v.UnionIssue<v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1>> | v.IntegerIssue<number> | v.MaxValueIssue<number, 4294967295> | v.CheckIssue<bigint> | v.BooleanIssue | v.NeverIssue | v.MaxValueIssue<number, 1000> | v.MinValueIssue<number, 1> | v.UnionIssue<v.NumberIssue | v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1> | v.UnionIssue<v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1>> | v.IntegerIssue<number> | v.MaxValueIssue<number, 4294967295> | v.CheckIssue<bigint> | v.BooleanIssue | v.NeverIssue | v.MaxValueIssue<number, 1000> | v.MinValueIssue<number, 1>> | v.CheckIssue<number> | v.UnionIssue<v.NumberIssue | v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1> | v.UnionIssue<v.StringIssue | v.PicklistIssue | v.StrictObjectIssue | v.MinLengthIssue<string, 1>> | v.IntegerIssue<number> | v.MaxValueIssue<number, 4294967295> | v.CheckIssue<bigint> | v.BooleanIssue | v.NeverIssue | v.MaxValueIssue<number, 1000> | v.MinValueIssue<number, 1> | v.CheckIssue<number>>>) => "symbolId is required when afterMatchId is set" | "Provide at most one of orderId or lineageId">, v.TransformAction<{
|
|
172
172
|
symbolId?: number | undefined;
|
|
173
173
|
afterMatchId?: undefined;
|
|
174
174
|
side?: Side.BUY | Side.SELL | undefined;
|