@polyester/sdk 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +9 -9
  3. package/dist/environment.d.ts +2 -2
  4. package/dist/environment.d.ts.map +1 -1
  5. package/dist/environment.js +4 -4
  6. package/dist/environment.js.map +1 -1
  7. package/dist/gen/auth/v1/api_keys_pb.d.ts +3 -1
  8. package/dist/gen/auth/v1/api_keys_pb.d.ts.map +1 -1
  9. package/dist/gen/auth/v1/api_keys_pb.js.map +1 -1
  10. package/dist/gen/auth/v1/auth_pb.d.ts +49 -5
  11. package/dist/gen/auth/v1/auth_pb.d.ts.map +1 -1
  12. package/dist/gen/auth/v1/auth_pb.js +21 -3
  13. package/dist/gen/auth/v1/auth_pb.js.map +1 -1
  14. package/dist/gen/auth/v1/profile_pb.d.ts +7 -0
  15. package/dist/gen/auth/v1/profile_pb.d.ts.map +1 -1
  16. package/dist/gen/auth/v1/profile_pb.js +1 -1
  17. package/dist/gen/auth/v1/profile_pb.js.map +1 -1
  18. package/dist/gen/auth/v1/social_verification_pb.d.ts +12 -9
  19. package/dist/gen/auth/v1/social_verification_pb.d.ts.map +1 -1
  20. package/dist/gen/auth/v1/social_verification_pb.js.map +1 -1
  21. package/dist/gen/auth/v1/subaccounts_pb.d.ts +3 -1
  22. package/dist/gen/auth/v1/subaccounts_pb.d.ts.map +1 -1
  23. package/dist/gen/auth/v1/subaccounts_pb.js.map +1 -1
  24. package/dist/gen/chain/deposit/v1/deposit_pb.d.ts +4 -1
  25. package/dist/gen/chain/deposit/v1/deposit_pb.d.ts.map +1 -1
  26. package/dist/gen/chain/deposit/v1/deposit_pb.js.map +1 -1
  27. package/dist/gen/marketdata/v1/marketdata_pb.d.ts +20 -1
  28. package/dist/gen/marketdata/v1/marketdata_pb.d.ts.map +1 -1
  29. package/dist/gen/marketdata/v1/marketdata_pb.js +1 -1
  30. package/dist/gen/marketdata/v1/marketdata_pb.js.map +1 -1
  31. package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts +138 -13
  32. package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts.map +1 -1
  33. package/dist/gen/marketoverview/v1/marketoverview_pb.js +23 -6
  34. package/dist/gen/marketoverview/v1/marketoverview_pb.js.map +1 -1
  35. package/dist/index.d.ts +3 -3
  36. package/dist/index.js +2 -2
  37. package/dist/services/auth/auth.d.ts +7 -0
  38. package/dist/services/auth/auth.d.ts.map +1 -1
  39. package/dist/services/auth/auth.js +9 -0
  40. package/dist/services/auth/auth.js.map +1 -1
  41. package/dist/services/auth/profile/profile.schemas.d.ts +1 -0
  42. package/dist/services/auth/profile/profile.schemas.d.ts.map +1 -1
  43. package/dist/services/auth/profile/profile.schemas.js +2 -1
  44. package/dist/services/auth/profile/profile.schemas.js.map +1 -1
  45. package/dist/services/candles/candles.schemas.d.ts +9 -0
  46. package/dist/services/candles/candles.schemas.d.ts.map +1 -1
  47. package/dist/services/candles/candles.schemas.js +6 -0
  48. package/dist/services/candles/candles.schemas.js.map +1 -1
  49. package/dist/services/deposit/deposit.schemas.d.ts +1 -1
  50. package/dist/services/deposit/deposit.schemas.js +1 -1
  51. package/dist/services/deposit/deposit.schemas.js.map +1 -1
  52. package/dist/services/fees/fees.schemas.d.ts +1 -1
  53. package/dist/services/fees/fees.schemas.js +1 -1
  54. package/dist/services/fees/fees.schemas.js.map +1 -1
  55. package/dist/services/heatmap/heatmap.schemas.d.ts +4 -4
  56. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +1 -1
  57. package/dist/services/internal-transfers/internal-transfers.schemas.js +1 -1
  58. package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
  59. package/dist/services/market-overview/index.d.ts +2 -2
  60. package/dist/services/market-overview/market-overview.codecs.js +2 -2
  61. package/dist/services/market-overview/market-overview.codecs.js.map +1 -1
  62. package/dist/services/market-overview/market-overview.d.ts +7 -1
  63. package/dist/services/market-overview/market-overview.d.ts.map +1 -1
  64. package/dist/services/market-overview/market-overview.js +11 -1
  65. package/dist/services/market-overview/market-overview.js.map +1 -1
  66. package/dist/services/market-overview/market-overview.schemas.d.ts +72 -12
  67. package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
  68. package/dist/services/market-overview/market-overview.schemas.js +30 -7
  69. package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
  70. package/dist/services/market-overview/market-overview.types.d.ts +2 -2
  71. package/dist/services/orderbook/orderbook.schemas.d.ts +1 -1
  72. package/dist/services/orders/orders-batch.schemas.d.ts +14 -14
  73. package/dist/services/orders/orders-input.schemas.d.ts +1 -1
  74. package/dist/services/orders/orders-output.schemas.d.ts +6 -6
  75. package/dist/services/social-verification/social-verification.d.ts +1 -1
  76. package/dist/services/social-verification/social-verification.js +1 -1
  77. package/dist/services/social-verification/social-verification.js.map +1 -1
  78. package/dist/services/social-verification/social-verification.schemas.d.ts +17 -11
  79. package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
  80. package/dist/services/social-verification/social-verification.schemas.js +12 -5
  81. package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
  82. package/dist/services/subaccounts/subaccounts.schemas.d.ts +1 -1
  83. package/dist/services/triggers/triggers-output.schemas.d.ts +1 -1
  84. package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
  85. package/dist/services/triggers/triggers-output.schemas.js +1 -2
  86. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  87. package/dist/shared/validation.js.map +1 -1
  88. package/package.json +1 -1
@@ -8,7 +8,7 @@ const SPARKLINE_INTERVAL_VALUES = [
8
8
  ];
9
9
  const MARKET_OVERVIEW_ORDER_BY_VALUES = [
10
10
  "change_24h_bps",
11
- "volume_24h_quote",
11
+ "volume_24h_usd",
12
12
  "last_price",
13
13
  "date_added"
14
14
  ];
@@ -30,7 +30,7 @@ const SparklineIntervalCodec = {
30
30
  };
31
31
  const MarketOverviewOrderByCodec = { inputToProto: {
32
32
  change_24h_bps: 1,
33
- volume_24h_quote: 2,
33
+ volume_24h_usd: 2,
34
34
  last_price: 3,
35
35
  date_added: 4
36
36
  } };
@@ -1 +1 @@
1
- {"version":3,"file":"market-overview.codecs.js","names":[],"sources":["../../../src/services/market-overview/market-overview.codecs.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport type { InputToProto, ProtoToOutput } from \"../../utils/types.js\";\n\nexport const SPARKLINE_INTERVAL_VALUES = [\"1h\", \"24h\", \"1w\", \"1m\"] as const;\nexport type SparklineIntervalValue = (typeof SPARKLINE_INTERVAL_VALUES)[number];\n\nexport const MARKET_OVERVIEW_ORDER_BY_VALUES = [\n \"change_24h_bps\",\n \"volume_24h_quote\",\n \"last_price\",\n \"date_added\",\n] as const;\nexport type MarketOverviewOrderByValue = (typeof MARKET_OVERVIEW_ORDER_BY_VALUES)[number];\n\nexport const MARKET_OVERVIEW_SORT_VALUES = [\"asc\", \"desc\"] as const;\nexport type MarketOverviewSortValue = (typeof MARKET_OVERVIEW_SORT_VALUES)[number];\n\nexport const SparklineIntervalCodec = {\n inputToProto: {\n \"1h\": Proto.SparklineInterval.SPARKLINE_1H,\n \"24h\": Proto.SparklineInterval.SPARKLINE_24H,\n \"1w\": Proto.SparklineInterval.SPARKLINE_1W,\n \"1m\": Proto.SparklineInterval.SPARKLINE_1M,\n } satisfies InputToProto<SparklineIntervalValue, Proto.SparklineInterval>,\n protoToOutput: {\n [Proto.SparklineInterval.SPARKLINE_INTERVAL_UNSPECIFIED]: \"unspecified\",\n [Proto.SparklineInterval.SPARKLINE_1H]: \"1h\",\n [Proto.SparklineInterval.SPARKLINE_24H]: \"24h\",\n [Proto.SparklineInterval.SPARKLINE_1W]: \"1w\",\n [Proto.SparklineInterval.SPARKLINE_1M]: \"1m\",\n } satisfies ProtoToOutput<Proto.SparklineInterval, SparklineIntervalValue>,\n} as const;\n\nexport const MarketOverviewOrderByCodec = {\n inputToProto: {\n change_24h_bps: Proto.MarketOrderBy.ORDER_BY_CHANGE_24H_BPS,\n volume_24h_quote: Proto.MarketOrderBy.ORDER_BY_VOLUME_24H_QUOTE,\n last_price: Proto.MarketOrderBy.ORDER_BY_LAST_PRICE,\n date_added: Proto.MarketOrderBy.ORDER_BY_DATE_ADDED,\n } satisfies InputToProto<MarketOverviewOrderByValue, Proto.MarketOrderBy>,\n} as const;\n\nexport const MarketOverviewSortCodec = {\n inputToProto: {\n asc: Proto.SortDirection.SORT_ASC,\n desc: Proto.SortDirection.SORT_DESC,\n } satisfies InputToProto<MarketOverviewSortValue, Proto.SortDirection>,\n} as const;\n"],"mappings":";;AAGA,MAAa,4BAA4B;CAAC;CAAM;CAAO;CAAM;AAAI;AAGjE,MAAa,kCAAkC;CAC3C;CACA;CACA;CACA;AACJ;AAGA,MAAa,8BAA8B,CAAC,OAAO,MAAM;AAGzD,MAAa,yBAAyB;CAClC,cAAc;EACV,MAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;CACJ;CACA,eAAe;GAC+C,IAAA;GAClB,IAAA;GACC,IAAA;GACD,IAAA;GACA,IAAA;CAC5C;AACJ;AAEA,MAAa,6BAA6B,EACtC,cAAc;CACV,gBAAA;CACA,kBAAA;CACA,YAAA;CACA,YAAA;AACJ,EACJ;AAEA,MAAa,0BAA0B,EACnC,cAAc;CACV,KAAA;CACA,MAAA;AACJ,EACJ"}
1
+ {"version":3,"file":"market-overview.codecs.js","names":[],"sources":["../../../src/services/market-overview/market-overview.codecs.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport type { InputToProto, ProtoToOutput } from \"../../utils/types.js\";\n\nexport const SPARKLINE_INTERVAL_VALUES = [\"1h\", \"24h\", \"1w\", \"1m\"] as const;\nexport type SparklineIntervalValue = (typeof SPARKLINE_INTERVAL_VALUES)[number];\n\nexport const MARKET_OVERVIEW_ORDER_BY_VALUES = [\n \"change_24h_bps\",\n \"volume_24h_usd\",\n \"last_price\",\n \"date_added\",\n] as const;\nexport type MarketOverviewOrderByValue = (typeof MARKET_OVERVIEW_ORDER_BY_VALUES)[number];\n\nexport const MARKET_OVERVIEW_SORT_VALUES = [\"asc\", \"desc\"] as const;\nexport type MarketOverviewSortValue = (typeof MARKET_OVERVIEW_SORT_VALUES)[number];\n\nexport const SparklineIntervalCodec = {\n inputToProto: {\n \"1h\": Proto.SparklineInterval.SPARKLINE_1H,\n \"24h\": Proto.SparklineInterval.SPARKLINE_24H,\n \"1w\": Proto.SparklineInterval.SPARKLINE_1W,\n \"1m\": Proto.SparklineInterval.SPARKLINE_1M,\n } satisfies InputToProto<SparklineIntervalValue, Proto.SparklineInterval>,\n protoToOutput: {\n [Proto.SparklineInterval.SPARKLINE_INTERVAL_UNSPECIFIED]: \"unspecified\",\n [Proto.SparklineInterval.SPARKLINE_1H]: \"1h\",\n [Proto.SparklineInterval.SPARKLINE_24H]: \"24h\",\n [Proto.SparklineInterval.SPARKLINE_1W]: \"1w\",\n [Proto.SparklineInterval.SPARKLINE_1M]: \"1m\",\n } satisfies ProtoToOutput<Proto.SparklineInterval, SparklineIntervalValue>,\n} as const;\n\nexport const MarketOverviewOrderByCodec = {\n inputToProto: {\n change_24h_bps: Proto.MarketOrderBy.ORDER_BY_CHANGE_24H_BPS,\n volume_24h_usd: Proto.MarketOrderBy.ORDER_BY_VOLUME_24H_USD,\n last_price: Proto.MarketOrderBy.ORDER_BY_LAST_PRICE,\n date_added: Proto.MarketOrderBy.ORDER_BY_DATE_ADDED,\n } satisfies InputToProto<MarketOverviewOrderByValue, Proto.MarketOrderBy>,\n} as const;\n\nexport const MarketOverviewSortCodec = {\n inputToProto: {\n asc: Proto.SortDirection.SORT_ASC,\n desc: Proto.SortDirection.SORT_DESC,\n } satisfies InputToProto<MarketOverviewSortValue, Proto.SortDirection>,\n} as const;\n"],"mappings":";;AAGA,MAAa,4BAA4B;CAAC;CAAM;CAAO;CAAM;AAAI;AAGjE,MAAa,kCAAkC;CAC3C;CACA;CACA;CACA;AACJ;AAGA,MAAa,8BAA8B,CAAC,OAAO,MAAM;AAGzD,MAAa,yBAAyB;CAClC,cAAc;EACV,MAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;CACJ;CACA,eAAe;GAC+C,IAAA;GAClB,IAAA;GACC,IAAA;GACD,IAAA;GACA,IAAA;CAC5C;AACJ;AAEA,MAAa,6BAA6B,EACtC,cAAc;CACV,gBAAA;CACA,gBAAA;CACA,YAAA;CACA,YAAA;AACJ,EACJ;AAEA,MAAa,0BAA0B,EACnC,cAAc;CACV,KAAA;CACA,MAAA;AACJ,EACJ"}
@@ -3,7 +3,7 @@ import { PolyesterRequestOptions } from "../../shared/request-options.js";
3
3
  import { PolyesterRealtime } from "../../realtime/types.js";
4
4
  import { BaseSubscribeInput } from "../../shared/types.js";
5
5
  import { SdkScales } from "../../shared/decimal-surface.js";
6
- import { ListMarketOverviewInput, MarketOverview, SparklineIntervalName } from "./market-overview.schemas.js";
6
+ import { ListMarketOverviewInput, MarketOverview, SparklineIntervalName, SpotVolumeHistoryInput, SpotVolumeHistoryResponse } from "./market-overview.schemas.js";
7
7
  //#region src/services/market-overview/market-overview.d.ts
8
8
  interface SubscribeMarketOverviewInput extends BaseSubscribeInput<MarketOverview[]> {
9
9
  symbolIds?: number[];
@@ -23,6 +23,12 @@ declare class MarketOverviewService {
23
23
  markets: MarketOverview[];
24
24
  nextPageToken: string;
25
25
  }>;
26
+ /**
27
+ * Returns 97 aligned trailing-24h USD volume samples at 15-minute intervals.
28
+ * Empty symbolIds selects all pairs. Samples overlap and must not be summed
29
+ * as period volume. Unavailable valuations reject the request.
30
+ */
31
+ getSpotVolumeHistory(input?: SpotVolumeHistoryInput, options?: PolyesterRequestOptions): Promise<SpotVolumeHistoryResponse>;
26
32
  /**
27
33
  * Subscribes to public:spot:market_overview:updates:proto, fetches an initial snapshot, buffers updates until ready, and emits the merged set of latest market rows. On reconnect it refetches the snapshot before resuming updates.
28
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"market-overview.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.ts"],"mappings":";;;;;;;UAsBU,qCAAqC,mBAAmB;EAC9D;EACA;EACA,qBAAqB;;;;;cAMZ;;EAMG,YAAA,YAAY,qBAAqB,UAAU,mBAAmB,QAAQ;;;;EAU5E,KACF,QAAO,yBACP,UAAU,0BACX;IAAU,SAAS;IAAkB;;;;;EA8CxC,UAAU,OAAO"}
1
+ {"version":3,"file":"market-overview.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.ts"],"mappings":";;;;;;;UA0BU,qCAAqC,mBAAmB;EAC9D;EACA;EACA,qBAAqB;;;;;cAMZ;;EAMG,YAAA,YAAY,qBAAqB,UAAU,mBAAmB,QAAQ;;;;EAU5E,KACF,QAAO,yBACP,UAAU,0BACX;IAAU,SAAS;IAAkB;;;;;;;EAkBlC,qBACF,QAAO,wBACP,UAAU,0BACX,QAAQ;;;;EA0CX,UAAU,OAAO"}
@@ -4,7 +4,7 @@ import { toConnectCallOptions } from "../../shared/request-options.js";
4
4
  import { CatalogLookupError } from "../../catalogs/types.js";
5
5
  import { isDev } from "../../utils/is-dev.js";
6
6
  import { snapshotThenStream } from "../../realtime/snapshot-then-stream.js";
7
- import { ListMarketOverviewInputSchema, createMarketOverviewSchema } from "./market-overview.schemas.js";
7
+ import { ListMarketOverviewInputSchema, SpotVolumeHistoryInputSchema, SpotVolumeHistoryResponseSchema, createMarketOverviewSchema } from "./market-overview.schemas.js";
8
8
  import { createClient } from "@connectrpc/connect";
9
9
  //#region src/services/market-overview/market-overview.ts
10
10
  /**
@@ -34,6 +34,16 @@ var MarketOverviewService = class {
34
34
  };
35
35
  }
36
36
  /**
37
+ * Returns 97 aligned trailing-24h USD volume samples at 15-minute intervals.
38
+ * Empty symbolIds selects all pairs. Samples overlap and must not be summed
39
+ * as period volume. Unavailable valuations reject the request.
40
+ */
41
+ async getSpotVolumeHistory(input = {}, options) {
42
+ const validated = parse(SpotVolumeHistoryInputSchema, input);
43
+ const response = await this.#client.getSpotVolumeHistory(validated, toConnectCallOptions(options));
44
+ return parse(SpotVolumeHistoryResponseSchema, response);
45
+ }
46
+ /**
37
47
  * Decodes market rows, skipping any whose symbolId the catalog cannot resolve
38
48
  * (unknown or disabled pairs the backend still reports). Other errors propagate.
39
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"market-overview.js","names":["#client","Proto.MarketOverviewService","#realtime","#scales","#marketOverviewSchema","#decodeMarkets","Proto.MarketOverviewBatchSchema"],"sources":["../../../src/services/market-overview/market-overview.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport { createClient, type Client } from \"@connectrpc/connect\";\nimport { parse } from \"../../shared/validation.js\";\nimport { CatalogLookupError } from \"../../catalogs/types.js\";\nimport { isDev } from \"../../utils/is-dev.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { snapshotThenStream } from \"../../realtime/snapshot-then-stream.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { SdkScales } from \"../../shared/decimal-surface.js\";\nimport type { PublicApiTransports } from \"../../shared/transports.js\";\nimport {\n ListMarketOverviewInputSchema,\n createMarketOverviewSchema,\n type SparklineIntervalName,\n type ListMarketOverviewInput,\n type MarketOverview,\n} from \"./market-overview.schemas.js\";\n\ninterface SubscribeMarketOverviewInput extends BaseSubscribeInput<MarketOverview[]> {\n symbolIds?: number[];\n includeSparklines?: boolean;\n sparklineIntervals?: SparklineIntervalName[];\n}\n\n/**\n * Provides ticker-style per-market stats and a live merged overview stream.\n */\nexport class MarketOverviewService {\n #client: Client<typeof Proto.MarketOverviewService>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n #marketOverviewSchema: ReturnType<typeof createMarketOverviewSchema>;\n\n constructor(transports: PublicApiTransports, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(Proto.MarketOverviewService, transports.publicApi);\n this.#realtime = realtime;\n this.#scales = scales;\n this.#marketOverviewSchema = createMarketOverviewSchema(scales);\n }\n\n /**\n * Returns market overview rows with last and index prices, 24h stats, top-of-book values, listing timestamp, and optional sparklines. Supports symbol ID filtering, sorting, pagination, and sparkline interval selection.\n */\n async list(\n input: ListMarketOverviewInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ markets: MarketOverview[]; nextPageToken: string }> {\n const validatedInput = parse(ListMarketOverviewInputSchema, input);\n await this.#scales.ready();\n const res = await this.#client.listMarketOverview(\n validatedInput,\n toConnectCallOptions(options),\n );\n return {\n markets: this.#decodeMarkets(res.markets),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Decodes market rows, skipping any whose symbolId the catalog cannot resolve\n * (unknown or disabled pairs the backend still reports). Other errors propagate.\n */\n #decodeMarkets(markets: readonly Proto.MarketOverview[]): MarketOverview[] {\n const decoded: MarketOverview[] = [];\n const skipped: number[] = [];\n for (const m of markets) {\n try {\n decoded.push(parse(this.#marketOverviewSchema, m));\n } catch (error) {\n if (\n error instanceof CatalogLookupError &&\n error.domain === \"market\" &&\n error.lookup === \"symbolId\"\n ) {\n skipped.push(m.symbolId);\n continue;\n }\n throw error;\n }\n }\n if (skipped.length > 0 && isDev()) {\n console.warn(\n `[market-overview] skipped ${skipped.length} row(s) with unknown symbolId: ${skipped.join(\", \")}`,\n );\n }\n return decoded;\n }\n\n /**\n * Subscribes to public:spot:market_overview:updates:proto, fetches an initial snapshot, buffers updates until ready, and emits the merged set of latest market rows. On reconnect it refetches the snapshot before resuming updates.\n */\n subscribe(input: SubscribeMarketOverviewInput): () => void {\n const channel = \"public:spot:market_overview:updates:proto\";\n const bySymbolId = new Map<number, MarketOverview>();\n const includeSparklines = input.includeSparklines ?? true;\n const sparklineIntervals = input.sparklineIntervals ?? [\"24h\"];\n const listMarketOverview = this.list.bind(this);\n const parseMarkets = this.#decodeMarkets.bind(this);\n function emit(): void {\n input.onEvent(Array.from(bySymbolId.values()));\n }\n\n function handleMarketUpdate(m: MarketOverview): void {\n bySymbolId.set(m.symbolId, m);\n }\n\n function applyMarkets(markets: readonly MarketOverview[]): void {\n for (const market of markets) {\n handleMarketUpdate(market);\n }\n }\n\n async function fetchSnapshot(): Promise<MarketOverview[]> {\n const result = await listMarketOverview({\n symbolIds: input.symbolIds,\n includeSparklines,\n sparklineIntervals,\n });\n return result.markets;\n }\n\n const stream = snapshotThenStream({\n realtime: this.#realtime,\n channel,\n schema: Proto.MarketOverviewBatchSchema,\n maxBufferedPublications: 2000,\n snapshotErrorLog: \"Failed to fetch market overview\",\n fetchSnapshot,\n readPublication: (batch) => batch.markets ?? [],\n bufferPublicationKey: (market) => market.symbolId,\n applySnapshot: (markets, bufferedMarkets) => {\n bySymbolId.clear();\n applyMarkets(markets);\n applyMarkets(parseMarkets(bufferedMarkets));\n emit();\n },\n applyLivePublications: (markets) => {\n applyMarkets(parseMarkets(markets));\n emit();\n },\n onOpen: input.onOpen,\n onClose: input.onClose,\n onError: input.onError,\n });\n\n function dispose(): void {\n stream.unsubscribe();\n }\n\n return dispose;\n }\n}\n"],"mappings":";;;;;;;;;;;;AA+BA,IAAa,wBAAb,MAAmC;CAC/B;CACA;CACA;CACA;CAEA,YAAY,YAAiC,UAA6B,QAAmB;EACzF,KAAKA,UAAU,aAAaC,yBAA6B,WAAW,SAAS;EAC7E,KAAKC,YAAY;EACjB,KAAKC,UAAU;EACf,KAAKC,wBAAwB,2BAA2B,MAAM;CAClE;;;;CAKA,MAAM,KACF,QAAiC,CAAC,GAClC,SAC6D;EAC7D,MAAM,iBAAiB,MAAM,+BAA+B,KAAK;EACjE,MAAM,KAAKD,QAAQ,MAAM;EACzB,MAAM,MAAM,MAAM,KAAKH,QAAQ,mBAC3B,gBACA,qBAAqB,OAAO,CAChC;EACA,OAAO;GACH,SAAS,KAAKK,eAAe,IAAI,OAAO;GACxC,eAAe,IAAI;EACvB;CACJ;;;;;CAMA,eAAe,SAA4D;EACvE,MAAM,UAA4B,CAAC;EACnC,MAAM,UAAoB,CAAC;EAC3B,KAAK,MAAM,KAAK,SACZ,IAAI;GACA,QAAQ,KAAK,MAAM,KAAKD,uBAAuB,CAAC,CAAC;EACrD,SAAS,OAAO;GACZ,IACI,iBAAiB,sBACjB,MAAM,WAAW,YACjB,MAAM,WAAW,YACnB;IACE,QAAQ,KAAK,EAAE,QAAQ;IACvB;GACJ;GACA,MAAM;EACV;EAEJ,IAAI,QAAQ,SAAS,KAAK,MAAM,GAC5B,QAAQ,KACJ,6BAA6B,QAAQ,OAAO,iCAAiC,QAAQ,KAAK,IAAI,GAClG;EAEJ,OAAO;CACX;;;;CAKA,UAAU,OAAiD;EACvD,MAAM,UAAU;EAChB,MAAM,6BAAa,IAAI,IAA4B;EACnD,MAAM,oBAAoB,MAAM,qBAAqB;EACrD,MAAM,qBAAqB,MAAM,sBAAsB,CAAC,KAAK;EAC7D,MAAM,qBAAqB,KAAK,KAAK,KAAK,IAAI;EAC9C,MAAM,eAAe,KAAKC,eAAe,KAAK,IAAI;EAClD,SAAS,OAAa;GAClB,MAAM,QAAQ,MAAM,KAAK,WAAW,OAAO,CAAC,CAAC;EACjD;EAEA,SAAS,mBAAmB,GAAyB;GACjD,WAAW,IAAI,EAAE,UAAU,CAAC;EAChC;EAEA,SAAS,aAAa,SAA0C;GAC5D,KAAK,MAAM,UAAU,SACjB,mBAAmB,MAAM;EAEjC;EAEA,eAAe,gBAA2C;GAMtD,QAAO,MALc,mBAAmB;IACpC,WAAW,MAAM;IACjB;IACA;GACJ,CAAC,EAAA,CACa;EAClB;EAEA,MAAM,SAAS,mBAAmB;GAC9B,UAAU,KAAKH;GACf;GACA,QAAQI;GACR,yBAAyB;GACzB,kBAAkB;GAClB;GACA,kBAAkB,UAAU,MAAM,WAAW,CAAC;GAC9C,uBAAuB,WAAW,OAAO;GACzC,gBAAgB,SAAS,oBAAoB;IACzC,WAAW,MAAM;IACjB,aAAa,OAAO;IACpB,aAAa,aAAa,eAAe,CAAC;IAC1C,KAAK;GACT;GACA,wBAAwB,YAAY;IAChC,aAAa,aAAa,OAAO,CAAC;IAClC,KAAK;GACT;GACA,QAAQ,MAAM;GACd,SAAS,MAAM;GACf,SAAS,MAAM;EACnB,CAAC;EAED,SAAS,UAAgB;GACrB,OAAO,YAAY;EACvB;EAEA,OAAO;CACX;AACJ"}
1
+ {"version":3,"file":"market-overview.js","names":["#client","Proto.MarketOverviewService","#realtime","#scales","#marketOverviewSchema","#decodeMarkets","Proto.MarketOverviewBatchSchema"],"sources":["../../../src/services/market-overview/market-overview.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport { createClient, type Client } from \"@connectrpc/connect\";\nimport { parse } from \"../../shared/validation.js\";\nimport { CatalogLookupError } from \"../../catalogs/types.js\";\nimport { isDev } from \"../../utils/is-dev.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { snapshotThenStream } from \"../../realtime/snapshot-then-stream.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { SdkScales } from \"../../shared/decimal-surface.js\";\nimport type { PublicApiTransports } from \"../../shared/transports.js\";\nimport {\n SpotVolumeHistoryInputSchema,\n SpotVolumeHistoryResponseSchema,\n type SpotVolumeHistoryInput,\n type SpotVolumeHistoryResponse,\n ListMarketOverviewInputSchema,\n createMarketOverviewSchema,\n type SparklineIntervalName,\n type ListMarketOverviewInput,\n type MarketOverview,\n} from \"./market-overview.schemas.js\";\n\ninterface SubscribeMarketOverviewInput extends BaseSubscribeInput<MarketOverview[]> {\n symbolIds?: number[];\n includeSparklines?: boolean;\n sparklineIntervals?: SparklineIntervalName[];\n}\n\n/**\n * Provides ticker-style per-market stats and a live merged overview stream.\n */\nexport class MarketOverviewService {\n #client: Client<typeof Proto.MarketOverviewService>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n #marketOverviewSchema: ReturnType<typeof createMarketOverviewSchema>;\n\n constructor(transports: PublicApiTransports, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(Proto.MarketOverviewService, transports.publicApi);\n this.#realtime = realtime;\n this.#scales = scales;\n this.#marketOverviewSchema = createMarketOverviewSchema(scales);\n }\n\n /**\n * Returns market overview rows with last and index prices, 24h stats, top-of-book values, listing timestamp, and optional sparklines. Supports symbol ID filtering, sorting, pagination, and sparkline interval selection.\n */\n async list(\n input: ListMarketOverviewInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ markets: MarketOverview[]; nextPageToken: string }> {\n const validatedInput = parse(ListMarketOverviewInputSchema, input);\n await this.#scales.ready();\n const res = await this.#client.listMarketOverview(\n validatedInput,\n toConnectCallOptions(options),\n );\n return {\n markets: this.#decodeMarkets(res.markets),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Returns 97 aligned trailing-24h USD volume samples at 15-minute intervals.\n * Empty symbolIds selects all pairs. Samples overlap and must not be summed\n * as period volume. Unavailable valuations reject the request.\n */\n async getSpotVolumeHistory(\n input: SpotVolumeHistoryInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<SpotVolumeHistoryResponse> {\n const validated = parse(SpotVolumeHistoryInputSchema, input);\n const response = await this.#client.getSpotVolumeHistory(\n validated,\n toConnectCallOptions(options),\n );\n return parse(SpotVolumeHistoryResponseSchema, response);\n }\n\n /**\n * Decodes market rows, skipping any whose symbolId the catalog cannot resolve\n * (unknown or disabled pairs the backend still reports). Other errors propagate.\n */\n #decodeMarkets(markets: readonly Proto.MarketOverview[]): MarketOverview[] {\n const decoded: MarketOverview[] = [];\n const skipped: number[] = [];\n for (const m of markets) {\n try {\n decoded.push(parse(this.#marketOverviewSchema, m));\n } catch (error) {\n if (\n error instanceof CatalogLookupError &&\n error.domain === \"market\" &&\n error.lookup === \"symbolId\"\n ) {\n skipped.push(m.symbolId);\n continue;\n }\n throw error;\n }\n }\n if (skipped.length > 0 && isDev()) {\n console.warn(\n `[market-overview] skipped ${skipped.length} row(s) with unknown symbolId: ${skipped.join(\", \")}`,\n );\n }\n return decoded;\n }\n\n /**\n * Subscribes to public:spot:market_overview:updates:proto, fetches an initial snapshot, buffers updates until ready, and emits the merged set of latest market rows. On reconnect it refetches the snapshot before resuming updates.\n */\n subscribe(input: SubscribeMarketOverviewInput): () => void {\n const channel = \"public:spot:market_overview:updates:proto\";\n const bySymbolId = new Map<number, MarketOverview>();\n const includeSparklines = input.includeSparklines ?? true;\n const sparklineIntervals = input.sparklineIntervals ?? [\"24h\"];\n const listMarketOverview = this.list.bind(this);\n const parseMarkets = this.#decodeMarkets.bind(this);\n function emit(): void {\n input.onEvent(Array.from(bySymbolId.values()));\n }\n\n function handleMarketUpdate(m: MarketOverview): void {\n bySymbolId.set(m.symbolId, m);\n }\n\n function applyMarkets(markets: readonly MarketOverview[]): void {\n for (const market of markets) {\n handleMarketUpdate(market);\n }\n }\n\n async function fetchSnapshot(): Promise<MarketOverview[]> {\n const result = await listMarketOverview({\n symbolIds: input.symbolIds,\n includeSparklines,\n sparklineIntervals,\n });\n return result.markets;\n }\n\n const stream = snapshotThenStream({\n realtime: this.#realtime,\n channel,\n schema: Proto.MarketOverviewBatchSchema,\n maxBufferedPublications: 2000,\n snapshotErrorLog: \"Failed to fetch market overview\",\n fetchSnapshot,\n readPublication: (batch) => batch.markets ?? [],\n bufferPublicationKey: (market) => market.symbolId,\n applySnapshot: (markets, bufferedMarkets) => {\n bySymbolId.clear();\n applyMarkets(markets);\n applyMarkets(parseMarkets(bufferedMarkets));\n emit();\n },\n applyLivePublications: (markets) => {\n applyMarkets(parseMarkets(markets));\n emit();\n },\n onOpen: input.onOpen,\n onClose: input.onClose,\n onError: input.onError,\n });\n\n function dispose(): void {\n stream.unsubscribe();\n }\n\n return dispose;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAmCA,IAAa,wBAAb,MAAmC;CAC/B;CACA;CACA;CACA;CAEA,YAAY,YAAiC,UAA6B,QAAmB;EACzF,KAAKA,UAAU,aAAaC,yBAA6B,WAAW,SAAS;EAC7E,KAAKC,YAAY;EACjB,KAAKC,UAAU;EACf,KAAKC,wBAAwB,2BAA2B,MAAM;CAClE;;;;CAKA,MAAM,KACF,QAAiC,CAAC,GAClC,SAC6D;EAC7D,MAAM,iBAAiB,MAAM,+BAA+B,KAAK;EACjE,MAAM,KAAKD,QAAQ,MAAM;EACzB,MAAM,MAAM,MAAM,KAAKH,QAAQ,mBAC3B,gBACA,qBAAqB,OAAO,CAChC;EACA,OAAO;GACH,SAAS,KAAKK,eAAe,IAAI,OAAO;GACxC,eAAe,IAAI;EACvB;CACJ;;;;;;CAOA,MAAM,qBACF,QAAgC,CAAC,GACjC,SACkC;EAClC,MAAM,YAAY,MAAM,8BAA8B,KAAK;EAC3D,MAAM,WAAW,MAAM,KAAKL,QAAQ,qBAChC,WACA,qBAAqB,OAAO,CAChC;EACA,OAAO,MAAM,iCAAiC,QAAQ;CAC1D;;;;;CAMA,eAAe,SAA4D;EACvE,MAAM,UAA4B,CAAC;EACnC,MAAM,UAAoB,CAAC;EAC3B,KAAK,MAAM,KAAK,SACZ,IAAI;GACA,QAAQ,KAAK,MAAM,KAAKI,uBAAuB,CAAC,CAAC;EACrD,SAAS,OAAO;GACZ,IACI,iBAAiB,sBACjB,MAAM,WAAW,YACjB,MAAM,WAAW,YACnB;IACE,QAAQ,KAAK,EAAE,QAAQ;IACvB;GACJ;GACA,MAAM;EACV;EAEJ,IAAI,QAAQ,SAAS,KAAK,MAAM,GAC5B,QAAQ,KACJ,6BAA6B,QAAQ,OAAO,iCAAiC,QAAQ,KAAK,IAAI,GAClG;EAEJ,OAAO;CACX;;;;CAKA,UAAU,OAAiD;EACvD,MAAM,UAAU;EAChB,MAAM,6BAAa,IAAI,IAA4B;EACnD,MAAM,oBAAoB,MAAM,qBAAqB;EACrD,MAAM,qBAAqB,MAAM,sBAAsB,CAAC,KAAK;EAC7D,MAAM,qBAAqB,KAAK,KAAK,KAAK,IAAI;EAC9C,MAAM,eAAe,KAAKC,eAAe,KAAK,IAAI;EAClD,SAAS,OAAa;GAClB,MAAM,QAAQ,MAAM,KAAK,WAAW,OAAO,CAAC,CAAC;EACjD;EAEA,SAAS,mBAAmB,GAAyB;GACjD,WAAW,IAAI,EAAE,UAAU,CAAC;EAChC;EAEA,SAAS,aAAa,SAA0C;GAC5D,KAAK,MAAM,UAAU,SACjB,mBAAmB,MAAM;EAEjC;EAEA,eAAe,gBAA2C;GAMtD,QAAO,MALc,mBAAmB;IACpC,WAAW,MAAM;IACjB;IACA;GACJ,CAAC,EAAA,CACa;EAClB;EAEA,MAAM,SAAS,mBAAmB;GAC9B,UAAU,KAAKH;GACf;GACA,QAAQI;GACR,yBAAyB;GACzB,kBAAkB;GAClB;GACA,kBAAkB,UAAU,MAAM,WAAW,CAAC;GAC9C,uBAAuB,WAAW,OAAO;GACzC,gBAAgB,SAAS,oBAAoB;IACzC,WAAW,MAAM;IACjB,aAAa,OAAO;IACpB,aAAa,aAAa,eAAe,CAAC;IAC1C,KAAK;GACT;GACA,wBAAwB,YAAY;IAChC,aAAa,aAAa,OAAO,CAAC;IAClC,KAAK;GACT;GACA,QAAQ,MAAM;GACd,SAAS,MAAM;GACf,SAAS,MAAM;EACnB,CAAC;EAED,SAAS,UAAgB;GACrB,OAAO,YAAY;EACvB;EAEA,OAAO;CACX;AACJ"}
@@ -10,19 +10,20 @@ type MarketOverviewSparkline = {
10
10
  interval: DecodedEnum<SparklineIntervalName>;
11
11
  close: string[];
12
12
  };
13
- declare const MarketOverviewOrderBySchema: v.PicklistSchema<readonly ["change_24h_bps", "volume_24h_quote", "last_price", "date_added"], undefined>;
13
+ declare const MarketOverviewOrderBySchema: v.PicklistSchema<readonly ["change_24h_bps", "volume_24h_usd", "last_price", "date_added"], undefined>;
14
14
  type MarketOverviewOrderBy = v.InferOutput<typeof MarketOverviewOrderBySchema>;
15
15
  declare const MarketOverviewSortSchema: v.PicklistSchema<readonly ["asc", "desc"], undefined>;
16
16
  type MarketOverviewSort = v.InferOutput<typeof MarketOverviewSortSchema>;
17
17
  declare function createMarketOverviewSchema(scales: SdkScales): v.SchemaWithPipe<readonly [v.ObjectSchema<{
18
- readonly symbolId: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>;
18
+ readonly symbolId: v.NumberSchema<undefined>;
19
19
  readonly lastPriceTicks: v.BigintSchema<undefined>;
20
20
  readonly lastTradeTsNs: v.OptionalSchema<v.BigintSchema<undefined>, 0n>;
21
21
  readonly change24hBps: v.NumberSchema<undefined>;
22
22
  readonly high24hTicks: v.BigintSchema<undefined>;
23
23
  readonly low24hTicks: v.BigintSchema<undefined>;
24
- readonly volume24hBaseScaled: v.BigintSchema<undefined>;
25
- readonly volume24hQuoteScaled: v.BigintSchema<undefined>;
24
+ readonly volume24hBaseScaled: v.OptionalSchema<v.BigintSchema<undefined>, undefined>;
25
+ readonly volume24hQuoteScaled: v.OptionalSchema<v.BigintSchema<undefined>, undefined>;
26
+ readonly volume24hUsdScaled: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>, undefined>;
26
27
  readonly listedTsNs: v.OptionalSchema<v.BigintSchema<undefined>, 0n>;
27
28
  readonly bestBidTicks: v.BigintSchema<undefined>;
28
29
  readonly bestBidQtyScaled: v.BigintSchema<undefined>;
@@ -40,8 +41,9 @@ declare function createMarketOverviewSchema(scales: SdkScales): v.SchemaWithPipe
40
41
  change24hBps: number;
41
42
  high24hTicks: bigint;
42
43
  low24hTicks: bigint;
43
- volume24hBaseScaled: bigint;
44
- volume24hQuoteScaled: bigint;
44
+ volume24hBaseScaled?: bigint | undefined;
45
+ volume24hQuoteScaled?: bigint | undefined;
46
+ volume24hUsdScaled?: string | undefined;
45
47
  listedTsNs: bigint;
46
48
  bestBidTicks: bigint;
47
49
  bestBidQtyScaled: bigint;
@@ -59,8 +61,9 @@ declare function createMarketOverviewSchema(scales: SdkScales): v.SchemaWithPipe
59
61
  change24hBps: number;
60
62
  high24h: string;
61
63
  low24h: string;
62
- volume24hBase: string;
63
- volume24hQuote: string;
64
+ volume24hBase: string | undefined;
65
+ volume24hQuote: string | undefined;
66
+ volume24hUsd: string | undefined;
64
67
  listedTsMs: number;
65
68
  bestBid: string;
66
69
  bestBidQty: string;
@@ -74,7 +77,7 @@ declare const ListMarketOverviewInputSchema: v.SchemaWithPipe<readonly [v.Strict
74
77
  readonly symbolIds: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>, undefined>, readonly []>;
75
78
  readonly limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>, 500>;
76
79
  readonly pageToken: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, "">;
77
- readonly orderBy: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["change_24h_bps", "volume_24h_quote", "last_price", "date_added"], undefined>, "volume_24h_quote">, v.TransformAction<"change_24h_bps" | "volume_24h_quote" | "last_price" | "date_added", MarketOrderBy.ORDER_BY_CHANGE_24H_BPS | MarketOrderBy.ORDER_BY_VOLUME_24H_QUOTE | MarketOrderBy.ORDER_BY_LAST_PRICE | MarketOrderBy.ORDER_BY_DATE_ADDED>]>;
80
+ readonly orderBy: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["change_24h_bps", "volume_24h_usd", "last_price", "date_added"], undefined>, "volume_24h_usd">, v.TransformAction<"change_24h_bps" | "volume_24h_usd" | "last_price" | "date_added", MarketOrderBy.ORDER_BY_CHANGE_24H_BPS | MarketOrderBy.ORDER_BY_VOLUME_24H_USD | MarketOrderBy.ORDER_BY_LAST_PRICE | MarketOrderBy.ORDER_BY_DATE_ADDED>]>;
78
81
  readonly sort: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["asc", "desc"], undefined>, "desc">, v.TransformAction<"asc" | "desc", SortDirection.SORT_ASC | SortDirection.SORT_DESC>]>;
79
82
  readonly includeSparklines: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
80
83
  readonly sparklineIntervals: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["1h", "24h", "1w", "1m"], undefined>, undefined>, readonly ["24h"]>, v.TransformAction<("1h" | "24h" | "1w" | "1m")[], (SparklineInterval.SPARKLINE_1H | SparklineInterval.SPARKLINE_24H | SparklineInterval.SPARKLINE_1W | SparklineInterval.SPARKLINE_1M)[]>]>;
@@ -82,20 +85,77 @@ declare const ListMarketOverviewInputSchema: v.SchemaWithPipe<readonly [v.Strict
82
85
  symbolIds: number[];
83
86
  limit: number;
84
87
  pageToken: string;
85
- orderBy: MarketOrderBy.ORDER_BY_CHANGE_24H_BPS | MarketOrderBy.ORDER_BY_VOLUME_24H_QUOTE | MarketOrderBy.ORDER_BY_LAST_PRICE | MarketOrderBy.ORDER_BY_DATE_ADDED;
88
+ orderBy: MarketOrderBy.ORDER_BY_CHANGE_24H_BPS | MarketOrderBy.ORDER_BY_VOLUME_24H_USD | MarketOrderBy.ORDER_BY_LAST_PRICE | MarketOrderBy.ORDER_BY_DATE_ADDED;
86
89
  sort: SortDirection.SORT_ASC | SortDirection.SORT_DESC;
87
90
  includeSparklines: boolean;
88
91
  sparklineIntervals: (SparklineInterval.SPARKLINE_1H | SparklineInterval.SPARKLINE_24H | SparklineInterval.SPARKLINE_1W | SparklineInterval.SPARKLINE_1M)[];
89
92
  }, {
90
93
  limit: number;
91
94
  pageToken: string;
92
- orderBy: MarketOrderBy.ORDER_BY_CHANGE_24H_BPS | MarketOrderBy.ORDER_BY_VOLUME_24H_QUOTE | MarketOrderBy.ORDER_BY_LAST_PRICE | MarketOrderBy.ORDER_BY_DATE_ADDED;
95
+ orderBy: MarketOrderBy.ORDER_BY_CHANGE_24H_BPS | MarketOrderBy.ORDER_BY_VOLUME_24H_USD | MarketOrderBy.ORDER_BY_LAST_PRICE | MarketOrderBy.ORDER_BY_DATE_ADDED;
93
96
  sort: SortDirection.SORT_ASC | SortDirection.SORT_DESC;
94
97
  includeSparklines: boolean;
95
98
  sparklineIntervals: (SparklineInterval.SPARKLINE_1H | SparklineInterval.SPARKLINE_24H | SparklineInterval.SPARKLINE_1W | SparklineInterval.SPARKLINE_1M)[];
96
99
  symbolId: number[];
97
100
  }>]>;
98
101
  type ListMarketOverviewInput = v.InferInput<typeof ListMarketOverviewInputSchema>;
102
+ declare const SpotVolumeHistoryInputSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{
103
+ readonly symbolIds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>, undefined>, v.TransformAction<number[], number[]>, v.MaxLengthAction<number[], 2000, undefined>]>, readonly []>;
104
+ }, undefined>, v.TransformAction<{
105
+ symbolIds: number[];
106
+ }, {
107
+ symbolId: number[];
108
+ }>]>;
109
+ type SpotVolumeHistoryInput = v.InferInput<typeof SpotVolumeHistoryInputSchema>;
110
+ declare const SpotPairVolumeSeriesSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
111
+ readonly symbolId: v.NumberSchema<undefined>;
112
+ readonly volumeUsdScaled: v.ArraySchema<v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>, undefined>;
113
+ }, undefined>, v.TransformAction<{
114
+ symbolId: number;
115
+ volumeUsdScaled: string[];
116
+ }, {
117
+ symbolId: number;
118
+ volumeUsd: string[];
119
+ }>]>;
120
+ type SpotPairVolumeSeries = v.InferOutput<typeof SpotPairVolumeSeriesSchema>;
121
+ declare const SpotVolumeHistoryResponseSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
122
+ readonly bucket: v.StringSchema<undefined>;
123
+ readonly startTsSec: v.NumberSchema<undefined>;
124
+ readonly endTsSec: v.NumberSchema<undefined>;
125
+ readonly points: v.NumberSchema<undefined>;
126
+ readonly pairs: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
127
+ readonly symbolId: v.NumberSchema<undefined>;
128
+ readonly volumeUsdScaled: v.ArraySchema<v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>, undefined>;
129
+ }, undefined>, v.TransformAction<{
130
+ symbolId: number;
131
+ volumeUsdScaled: string[];
132
+ }, {
133
+ symbolId: number;
134
+ volumeUsd: string[];
135
+ }>]>, undefined>;
136
+ readonly totalVolumeUsdScaled: v.ArraySchema<v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>, undefined>;
137
+ }, undefined>, v.TransformAction<{
138
+ bucket: string;
139
+ startTsSec: number;
140
+ endTsSec: number;
141
+ points: number;
142
+ pairs: {
143
+ symbolId: number;
144
+ volumeUsd: string[];
145
+ }[];
146
+ totalVolumeUsdScaled: string[];
147
+ }, {
148
+ totalVolumeUsd: string[];
149
+ bucket: string;
150
+ startTsSec: number;
151
+ endTsSec: number;
152
+ points: number;
153
+ pairs: {
154
+ symbolId: number;
155
+ volumeUsd: string[];
156
+ }[];
157
+ }>]>;
158
+ type SpotVolumeHistoryResponse = v.InferOutput<typeof SpotVolumeHistoryResponseSchema>;
99
159
  //#endregion
100
- export { ListMarketOverviewInput, ListMarketOverviewInputSchema, MarketOverview, MarketOverviewOrderBy, MarketOverviewOrderBySchema, MarketOverviewSort, MarketOverviewSortSchema, MarketOverviewSparkline, SparklineIntervalName, SparklineIntervalSchema, createMarketOverviewSchema };
160
+ export { ListMarketOverviewInput, ListMarketOverviewInputSchema, MarketOverview, MarketOverviewOrderBy, MarketOverviewOrderBySchema, MarketOverviewSort, MarketOverviewSortSchema, MarketOverviewSparkline, SparklineIntervalName, SparklineIntervalSchema, SpotPairVolumeSeries, SpotPairVolumeSeriesSchema, SpotVolumeHistoryInput, SpotVolumeHistoryInputSchema, SpotVolumeHistoryResponse, SpotVolumeHistoryResponseSchema, createMarketOverviewSchema };
101
161
  //# sourceMappingURL=market-overview.schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"market-overview.schemas.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"mappings":";;;;;;cA4Ba,yBAAuB,EAAA;KAExB,wBAAwB,EAAE,mBAAmB;KAiB7C;EACR,UAAU,YAAY;EACtB;;cAGS,6BAA2B,EAAA;KAE5B,wBAAwB,EAAE,mBAAmB;cAE5C,0BAAwB,EAAA;KAEzB,qBAAqB,EAAE,mBAAmB;iBAoBtC,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsChD,iBAAiB,EAAE,YAAY,kBAAkB;cAqChD,+BAA6B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAwB9B,0BAA0B,EAAE,kBAAkB"}
1
+ {"version":3,"file":"market-overview.schemas.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"mappings":";;;;;;cA4Ba,yBAAuB,EAAA;KAExB,wBAAwB,EAAE,mBAAmB;KAiB7C;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6ChD,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"}
@@ -13,15 +13,18 @@ const MarketOverviewSparklineRawSchema = v.object({
13
13
  });
14
14
  const MarketOverviewOrderBySchema = v.picklist(MARKET_OVERVIEW_ORDER_BY_VALUES);
15
15
  const MarketOverviewSortSchema = v.picklist(MARKET_OVERVIEW_SORT_VALUES);
16
+ /** USD amounts are always scaled by 1e6 on the wire. */
17
+ const UsdVolumeSchema = v.pipe(v.bigint(), v.transform((value) => scaledToDecimalOutput(value, 6)));
16
18
  const MarketOverviewRawSchema = v.object({
17
- symbolId: SymbolIdInputSchema,
19
+ symbolId: v.number(),
18
20
  lastPriceTicks: v.bigint(),
19
21
  lastTradeTsNs: v.optional(v.bigint(), 0n),
20
22
  change24hBps: v.number(),
21
23
  high24hTicks: v.bigint(),
22
24
  low24hTicks: v.bigint(),
23
- volume24hBaseScaled: v.bigint(),
24
- volume24hQuoteScaled: v.bigint(),
25
+ volume24hBaseScaled: v.optional(v.bigint()),
26
+ volume24hQuoteScaled: v.optional(v.bigint()),
27
+ volume24hUsdScaled: v.optional(UsdVolumeSchema),
25
28
  listedTsNs: v.optional(v.bigint(), 0n),
26
29
  bestBidTicks: v.bigint(),
27
30
  bestBidQtyScaled: v.bigint(),
@@ -42,8 +45,9 @@ function createMarketOverviewSchema(scales) {
42
45
  change24hBps: m.change24hBps,
43
46
  high24h: scaledToDecimalOutput(m.high24hTicks, priceScale),
44
47
  low24h: scaledToDecimalOutput(m.low24hTicks, priceScale),
45
- volume24hBase: scaledToDecimalOutput(m.volume24hBaseScaled, baseQtyScale),
46
- volume24hQuote: scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),
48
+ volume24hBase: m.volume24hBaseScaled === void 0 ? void 0 : scaledToDecimalOutput(m.volume24hBaseScaled, baseQtyScale),
49
+ volume24hQuote: m.volume24hQuoteScaled === void 0 ? void 0 : scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),
50
+ volume24hUsd: m.volume24hUsdScaled,
47
51
  listedTsMs: tsNsToMs(m.listedTsNs),
48
52
  bestBid: scaledToDecimalOutput(m.bestBidTicks, priceScale),
49
53
  bestBidQty: scaledToDecimalOutput(m.bestBidQtyScaled, baseQtyScale),
@@ -61,7 +65,7 @@ const ListMarketOverviewInputSchema = v.pipe(v.strictObject({
61
65
  symbolIds: v.optional(v.array(SymbolIdInputSchema), []),
62
66
  limit: v.optional(PositiveUint32InputSchema, 500),
63
67
  pageToken: v.optional(v.pipe(v.string(), v.trim()), ""),
64
- orderBy: v.pipe(v.optional(MarketOverviewOrderBySchema, "volume_24h_quote"), v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? "volume_24h_quote"])),
68
+ orderBy: v.pipe(v.optional(MarketOverviewOrderBySchema, "volume_24h_usd"), v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? "volume_24h_usd"])),
65
69
  sort: v.pipe(v.optional(MarketOverviewSortSchema, "desc"), v.transform((v) => MarketOverviewSortCodec.inputToProto[v ?? "desc"])),
66
70
  includeSparklines: v.optional(v.boolean(), true),
67
71
  sparklineIntervals: v.pipe(v.optional(v.array(SparklineIntervalSchema), ["24h"]), v.transform((intervals) => (intervals ?? ["24h"]).map((v) => SparklineIntervalCodec.inputToProto[v])))
@@ -69,7 +73,26 @@ const ListMarketOverviewInputSchema = v.pipe(v.strictObject({
69
73
  symbolId: symbolIds,
70
74
  ...input
71
75
  })));
76
+ const SpotVolumeHistoryInputSchema = v.pipe(v.strictObject({ symbolIds: v.optional(v.pipe(v.array(SymbolIdInputSchema), v.transform((ids) => [...new Set(ids)]), v.maxLength(2e3)), []) }), v.transform(({ symbolIds }) => ({ symbolId: symbolIds })));
77
+ const SpotPairVolumeSeriesSchema = v.pipe(v.object({
78
+ symbolId: v.number(),
79
+ volumeUsdScaled: v.array(UsdVolumeSchema)
80
+ }), v.transform(({ symbolId, volumeUsdScaled }) => ({
81
+ symbolId,
82
+ volumeUsd: volumeUsdScaled
83
+ })));
84
+ const SpotVolumeHistoryResponseSchema = v.pipe(v.object({
85
+ bucket: v.string(),
86
+ startTsSec: v.number(),
87
+ endTsSec: v.number(),
88
+ points: v.number(),
89
+ pairs: v.array(SpotPairVolumeSeriesSchema),
90
+ totalVolumeUsdScaled: v.array(UsdVolumeSchema)
91
+ }), v.transform(({ totalVolumeUsdScaled, ...response }) => ({
92
+ ...response,
93
+ totalVolumeUsd: totalVolumeUsdScaled
94
+ })));
72
95
  //#endregion
73
- export { ListMarketOverviewInputSchema, MarketOverviewOrderBySchema, MarketOverviewSortSchema, SparklineIntervalSchema, createMarketOverviewSchema };
96
+ export { ListMarketOverviewInputSchema, MarketOverviewOrderBySchema, MarketOverviewSortSchema, SparklineIntervalSchema, SpotPairVolumeSeriesSchema, SpotVolumeHistoryInputSchema, SpotVolumeHistoryResponseSchema, createMarketOverviewSchema };
74
97
 
75
98
  //# sourceMappingURL=market-overview.schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"market-overview.schemas.js","names":["Proto.SparklineInterval"],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport * as v from \"valibot\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { requiredEnumLabel } 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: v.pipe(\n v.enum(Proto.SparklineInterval),\n v.transform((value) =>\n requiredEnumLabel(\n SparklineIntervalCodec.protoToOutput,\n value,\n \"MarketOverviewSparklineSchema\",\n \"interval\",\n ),\n ),\n ),\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\nconst MarketOverviewRawSchema = v.object({\n symbolId: SymbolIdInputSchema,\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.bigint(),\n volume24hQuoteScaled: v.bigint(),\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: scaledToDecimalOutput(m.volume24hBaseScaled, baseQtyScale),\n volume24hQuote: scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),\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_quote\"),\n v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? \"volume_24h_quote\"]),\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"],"mappings":"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"}
1
+ {"version":3,"file":"market-overview.schemas.js","names":["Proto.SparklineInterval"],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport * as v from \"valibot\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { requiredEnumLabel } 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: v.pipe(\n v.enum(Proto.SparklineInterval),\n v.transform((value) =>\n requiredEnumLabel(\n SparklineIntervalCodec.protoToOutput,\n value,\n \"MarketOverviewSparklineSchema\",\n \"interval\",\n ),\n ),\n ),\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"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName } from "./market-overview.schemas.js";
2
- export type { ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName };
1
+ import { ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName, SpotPairVolumeSeries, SpotVolumeHistoryInput, SpotVolumeHistoryResponse } from "./market-overview.schemas.js";
2
+ export type { ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName, SpotPairVolumeSeries, SpotVolumeHistoryInput, SpotVolumeHistoryResponse };
@@ -10,7 +10,7 @@ declare const GetOrderbookInputSchema: v.SchemaWithPipe<readonly [v.ObjectSchema
10
10
  depth: number;
11
11
  }, {
12
12
  symbolId: number;
13
- depth: 5 | 10 | 20 | 1 | 200 | 1000 | 500 | 50 | 100;
13
+ depth: 5 | 10 | 20 | 1 | 200 | 1000 | 500 | 100 | 50;
14
14
  protoDepth: Depth;
15
15
  }>]>;
16
16
  type GetOrderbookInput = v.InferInput<typeof GetOrderbookInputSchema>;
@@ -3140,18 +3140,18 @@ declare const GetBatchReplaceStatusResultSchema: v.SchemaWithPipe<readonly [v.Ob
3140
3140
  readonly admissionStatus: v.SchemaWithPipe<readonly [v.EnumSchema<typeof BatchReplaceAdmissionStatus, undefined>, v.TransformAction<BatchReplaceAdmissionStatus, "unspecified" | "rejected" | "admitted" | "partially_admitted">]>;
3141
3141
  readonly items: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
3142
3142
  readonly itemIndex: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
3143
- readonly phase: v.SchemaWithPipe<readonly [v.EnumSchema<typeof BatchReplacePhase, undefined>, v.TransformAction<BatchReplacePhase, "unspecified" | "terminal" | "rejected" | "admitted" | "working">]>;
3143
+ readonly phase: v.SchemaWithPipe<readonly [v.EnumSchema<typeof BatchReplacePhase, undefined>, v.TransformAction<BatchReplacePhase, "unspecified" | "terminal" | "working" | "rejected" | "admitted">]>;
3144
3144
  readonly oldOrderId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.BigintSchema<undefined>, undefined>, v.TransformAction<bigint | undefined, string | undefined>]>;
3145
3145
  readonly replacementOrderId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.BigintSchema<undefined>, undefined>, v.TransformAction<bigint | undefined, string | undefined>]>;
3146
- readonly orderStatus: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderStatus, undefined>, v.TransformAction<OrderStatus, "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled">]>;
3146
+ readonly orderStatus: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderStatus, undefined>, v.TransformAction<OrderStatus, "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected">]>;
3147
3147
  readonly code: v.StringSchema<undefined>;
3148
3148
  readonly updatedTsNs: v.BigintSchema<undefined>;
3149
3149
  }, undefined>, v.TransformAction<{
3150
3150
  itemIndex: number;
3151
- phase: "unspecified" | "terminal" | "rejected" | "admitted" | "working";
3151
+ phase: "unspecified" | "terminal" | "working" | "rejected" | "admitted";
3152
3152
  oldOrderId?: string | undefined;
3153
3153
  replacementOrderId?: string | undefined;
3154
- orderStatus: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
3154
+ orderStatus: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
3155
3155
  code: string;
3156
3156
  updatedTsNs: bigint;
3157
3157
  }, {
@@ -3159,10 +3159,10 @@ declare const GetBatchReplaceStatusResultSchema: v.SchemaWithPipe<readonly [v.Ob
3159
3159
  updatedTs: number;
3160
3160
  updatedTsNs: string;
3161
3161
  itemIndex: number;
3162
- phase: "unspecified" | "terminal" | "rejected" | "admitted" | "working";
3162
+ phase: "unspecified" | "terminal" | "working" | "rejected" | "admitted";
3163
3163
  oldOrderId?: string | undefined;
3164
3164
  replacementOrderId?: string | undefined;
3165
- orderStatus: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
3165
+ orderStatus: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
3166
3166
  }>]>, undefined>;
3167
3167
  readonly acceptedCount: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
3168
3168
  readonly rejectedCount: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
@@ -3176,10 +3176,10 @@ declare const GetBatchReplaceStatusResultSchema: v.SchemaWithPipe<readonly [v.Ob
3176
3176
  updatedTs: number;
3177
3177
  updatedTsNs: string;
3178
3178
  itemIndex: number;
3179
- phase: "unspecified" | "terminal" | "rejected" | "admitted" | "working";
3179
+ phase: "unspecified" | "terminal" | "working" | "rejected" | "admitted";
3180
3180
  oldOrderId?: string | undefined;
3181
3181
  replacementOrderId?: string | undefined;
3182
- orderStatus: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
3182
+ orderStatus: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
3183
3183
  }[];
3184
3184
  acceptedCount: number;
3185
3185
  rejectedCount: number;
@@ -3193,10 +3193,10 @@ declare const GetBatchReplaceStatusResultSchema: v.SchemaWithPipe<readonly [v.Ob
3193
3193
  updatedTs: number;
3194
3194
  updatedTsNs: string;
3195
3195
  itemIndex: number;
3196
- phase: "unspecified" | "terminal" | "rejected" | "admitted" | "working";
3196
+ phase: "unspecified" | "terminal" | "working" | "rejected" | "admitted";
3197
3197
  oldOrderId?: string | undefined;
3198
3198
  replacementOrderId?: string | undefined;
3199
- orderStatus: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
3199
+ orderStatus: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
3200
3200
  }[];
3201
3201
  acceptedCount: number;
3202
3202
  rejectedCount: number;
@@ -3210,10 +3210,10 @@ declare const GetBatchReplaceStatusResultSchema: v.SchemaWithPipe<readonly [v.Ob
3210
3210
  updatedTs: number;
3211
3211
  updatedTsNs: string;
3212
3212
  itemIndex: number;
3213
- phase: "unspecified" | "terminal" | "rejected" | "admitted" | "working";
3213
+ phase: "unspecified" | "terminal" | "working" | "rejected" | "admitted";
3214
3214
  oldOrderId?: string | undefined;
3215
3215
  replacementOrderId?: string | undefined;
3216
- orderStatus: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
3216
+ orderStatus: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
3217
3217
  }[];
3218
3218
  acceptedCount: number;
3219
3219
  rejectedCount: number;
@@ -3231,10 +3231,10 @@ declare const GetBatchReplaceStatusResultSchema: v.SchemaWithPipe<readonly [v.Ob
3231
3231
  updatedTs: number;
3232
3232
  updatedTsNs: string;
3233
3233
  itemIndex: number;
3234
- phase: "unspecified" | "terminal" | "rejected" | "admitted" | "working";
3234
+ phase: "unspecified" | "terminal" | "working" | "rejected" | "admitted";
3235
3235
  oldOrderId?: string | undefined;
3236
3236
  replacementOrderId?: string | undefined;
3237
- orderStatus: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
3237
+ orderStatus: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
3238
3238
  }[];
3239
3239
  acceptedCount: number;
3240
3240
  rejectedCount: number;
@@ -40,7 +40,7 @@ type OpenOrdersInput = v.InferInput<typeof OpenOrdersInputSchema>;
40
40
  declare const OrderHistoryInputSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{
41
41
  readonly includeAttachedRisk: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
42
42
  readonly includeAttachedRiskState: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
43
- readonly status: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["FILLED", "CANCELED", "REJECTED"], undefined>, undefined>, v.TransformAction<"FILLED" | "CANCELED" | "REJECTED" | undefined, OrderStatus.FILLED | OrderStatus.CANCELED | OrderStatus.REJECTED | undefined>]>;
43
+ readonly status: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["FILLED", "CANCELED", "REJECTED"], undefined>, undefined>, v.TransformAction<"CANCELED" | "FILLED" | "REJECTED" | undefined, OrderStatus.FILLED | OrderStatus.CANCELED | OrderStatus.REJECTED | undefined>]>;
44
44
  readonly startTsNs: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>, v.TransformAction<string | undefined, bigint | undefined>]>;
45
45
  readonly endTsNs: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>, v.TransformAction<string | undefined, bigint | undefined>]>;
46
46
  readonly symbolId: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>, undefined>, undefined>;
@@ -9,7 +9,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
9
9
  readonly symbolId: v.NumberSchema<undefined>;
10
10
  readonly clientOrderId: v.StringSchema<undefined>;
11
11
  readonly side: v.EnumSchema<typeof Side, undefined>;
12
- readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderStatus, undefined>, v.TransformAction<OrderStatus, "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled">]>;
12
+ readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderStatus, undefined>, v.TransformAction<OrderStatus, "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected">]>;
13
13
  readonly orderType: v.NumberSchema<undefined>;
14
14
  readonly timeInForce: v.NumberSchema<undefined>;
15
15
  readonly selfTradePreventionMode: v.NumberSchema<undefined>;
@@ -111,7 +111,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
111
111
  symbolId: number;
112
112
  clientOrderId: string;
113
113
  side: Side;
114
- status: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
114
+ status: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
115
115
  orderType: number;
116
116
  timeInForce: number;
117
117
  selfTradePreventionMode: number;
@@ -224,7 +224,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
224
224
  orderId: string;
225
225
  symbolId: number;
226
226
  clientOrderId: string;
227
- status: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled" | "partial";
227
+ status: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected" | "partial";
228
228
  side: "unspecified" | "buy" | "sell";
229
229
  orderType: "unspecified" | "limit" | "market";
230
230
  timeInForce: "unspecified" | "GTC" | "IOC" | "FOK";
@@ -352,7 +352,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
352
352
  readonly symbolId: v.NumberSchema<undefined>;
353
353
  readonly clientOrderId: v.StringSchema<undefined>;
354
354
  readonly side: v.EnumSchema<typeof Side, undefined>;
355
- readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderStatus, undefined>, v.TransformAction<OrderStatus, "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled">]>;
355
+ readonly status: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderStatus, undefined>, v.TransformAction<OrderStatus, "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected">]>;
356
356
  readonly orderType: v.NumberSchema<undefined>;
357
357
  readonly timeInForce: v.NumberSchema<undefined>;
358
358
  readonly selfTradePreventionMode: v.NumberSchema<undefined>;
@@ -454,7 +454,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
454
454
  symbolId: number;
455
455
  clientOrderId: string;
456
456
  side: Side;
457
- status: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled";
457
+ status: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected";
458
458
  orderType: number;
459
459
  timeInForce: number;
460
460
  selfTradePreventionMode: number;
@@ -567,7 +567,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
567
567
  orderId: string;
568
568
  symbolId: number;
569
569
  clientOrderId: string;
570
- status: "unspecified" | "pending" | "canceled" | "rejected" | "working" | "pending_cancel" | "filled" | "partial";
570
+ status: "unspecified" | "pending" | "canceled" | "pending_cancel" | "working" | "filled" | "rejected" | "partial";
571
571
  side: "unspecified" | "buy" | "sell";
572
572
  orderType: "unspecified" | "limit" | "market";
573
573
  timeInForce: "unspecified" | "GTC" | "IOC" | "FOK";
@@ -10,7 +10,7 @@ declare class SocialVerificationService {
10
10
  #private;
11
11
  constructor(transports: AuthApiTransports);
12
12
  /**
13
- * Starts or restarts provider verification for a handle, normalizing leading @, defaulting to profile verification, and returning a poly_... challenge code that expires after about 15 minutes.
13
+ * Starts or restarts provider verification. Twitter requires a handle and strips a leading @; Discord gets its identity from the authenticated bot. An omitted method uses the provider default (Twitter profile, Discord channel). Discord returns an empty challengeCode when no new challenge is issued.
14
14
  */
15
15
  start(input: StartVerificationInput, options?: PolyesterMutationOptions): Promise<StartVerificationResponse>;
16
16
  /**
@@ -13,7 +13,7 @@ var SocialVerificationService = class {
13
13
  this.#client = createClient(SocialVerificationService$1, transports.authApi);
14
14
  }
15
15
  /**
16
- * Starts or restarts provider verification for a handle, normalizing leading @, defaulting to profile verification, and returning a poly_... challenge code that expires after about 15 minutes.
16
+ * Starts or restarts provider verification. Twitter requires a handle and strips a leading @; Discord gets its identity from the authenticated bot. An omitted method uses the provider default (Twitter profile, Discord channel). Discord returns an empty challengeCode when no new challenge is issued.
17
17
  */
18
18
  async start(input, options) {
19
19
  const validated = parse(StartVerificationInputSchema, input);