@polyester/sdk 0.3.1 → 0.4.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 (311) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +63 -17
  3. package/dist/_virtual/_rolldown/runtime.js +15 -1
  4. package/dist/account-signer/types.d.ts.map +1 -1
  5. package/dist/account-signer/types.js +6 -3
  6. package/dist/account-signer/types.js.map +1 -1
  7. package/dist/browser-client.d.ts +4 -2
  8. package/dist/browser-client.d.ts.map +1 -1
  9. package/dist/browser-client.js +3 -4
  10. package/dist/browser-client.js.map +1 -1
  11. package/dist/catalogs/client-catalog.d.ts.map +1 -1
  12. package/dist/catalogs/client-catalog.js +11 -4
  13. package/dist/catalogs/client-catalog.js.map +1 -1
  14. package/dist/catalogs/index.js +1 -1
  15. package/dist/catalogs/readers.d.ts.map +1 -1
  16. package/dist/catalogs/readers.js +3 -1
  17. package/dist/catalogs/readers.js.map +1 -1
  18. package/dist/catalogs/snapshot-validation.js +132 -0
  19. package/dist/catalogs/snapshot-validation.js.map +1 -0
  20. package/dist/catalogs/snapshot.d.ts.map +1 -1
  21. package/dist/catalogs/snapshot.js +16 -7
  22. package/dist/catalogs/snapshot.js.map +1 -1
  23. package/dist/catalogs/zipper-supply.d.ts.map +1 -1
  24. package/dist/catalogs/zipper-supply.js +10 -7
  25. package/dist/catalogs/zipper-supply.js.map +1 -1
  26. package/dist/core-client.d.ts +24 -17
  27. package/dist/core-client.d.ts.map +1 -1
  28. package/dist/core-client.js +21 -3
  29. package/dist/core-client.js.map +1 -1
  30. package/dist/environment.d.ts.map +1 -1
  31. package/dist/environment.js +32 -1
  32. package/dist/environment.js.map +1 -1
  33. package/dist/index.js +3 -3
  34. package/dist/realtime/client.js +13 -2
  35. package/dist/realtime/client.js.map +1 -1
  36. package/dist/realtime/snapshot-then-stream.js +1 -1
  37. package/dist/realtime/snapshot-then-stream.js.map +1 -1
  38. package/dist/realtime/types.d.ts +2 -0
  39. package/dist/realtime/types.d.ts.map +1 -1
  40. package/dist/server-client.d.ts +17 -8
  41. package/dist/server-client.d.ts.map +1 -1
  42. package/dist/server-client.js +8 -11
  43. package/dist/server-client.js.map +1 -1
  44. package/dist/services/accounts/accounts.js +3 -3
  45. package/dist/services/accounts/accounts.js.map +1 -1
  46. package/dist/services/accounts/accounts.schemas.d.ts +13 -13
  47. package/dist/services/accounts/accounts.schemas.d.ts.map +1 -1
  48. package/dist/services/accounts/accounts.schemas.js +11 -11
  49. package/dist/services/accounts/accounts.schemas.js.map +1 -1
  50. package/dist/services/address-book/address-book.js +28 -28
  51. package/dist/services/address-book/address-book.js.map +1 -1
  52. package/dist/services/address-book/address-book.schemas.d.ts +751 -751
  53. package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
  54. package/dist/services/address-book/address-book.schemas.js +160 -160
  55. package/dist/services/address-book/address-book.schemas.js.map +1 -1
  56. package/dist/services/api-keys/api-keys.d.ts +6 -6
  57. package/dist/services/api-keys/api-keys.d.ts.map +1 -1
  58. package/dist/services/api-keys/api-keys.js +12 -12
  59. package/dist/services/api-keys/api-keys.js.map +1 -1
  60. package/dist/services/api-keys/api-keys.schemas.d.ts +62 -62
  61. package/dist/services/api-keys/api-keys.schemas.d.ts.map +1 -1
  62. package/dist/services/api-keys/api-keys.schemas.js +34 -34
  63. package/dist/services/api-keys/api-keys.schemas.js.map +1 -1
  64. package/dist/services/auth/auth.d.ts +46 -40
  65. package/dist/services/auth/auth.d.ts.map +1 -1
  66. package/dist/services/auth/auth.js +28 -25
  67. package/dist/services/auth/auth.js.map +1 -1
  68. package/dist/services/auth/profile/profile.d.ts +2 -2
  69. package/dist/services/auth/profile/profile.d.ts.map +1 -1
  70. package/dist/services/auth/profile/profile.js +7 -7
  71. package/dist/services/auth/profile/profile.js.map +1 -1
  72. package/dist/services/auth/profile/profile.schemas.d.ts +41 -41
  73. package/dist/services/auth/profile/profile.schemas.d.ts.map +1 -1
  74. package/dist/services/auth/profile/profile.schemas.js +27 -27
  75. package/dist/services/auth/profile/profile.schemas.js.map +1 -1
  76. package/dist/services/auth/session.d.ts +1 -1
  77. package/dist/services/auth/session.d.ts.map +1 -1
  78. package/dist/services/auth/session.js +6 -2
  79. package/dist/services/auth/session.js.map +1 -1
  80. package/dist/services/auth/session.schemas.js +17 -17
  81. package/dist/services/auth/session.schemas.js.map +1 -1
  82. package/dist/services/auth/session.types.d.ts +3 -2
  83. package/dist/services/auth/session.types.d.ts.map +1 -1
  84. package/dist/services/balances/balances.d.ts +1 -1
  85. package/dist/services/balances/balances.js +9 -9
  86. package/dist/services/balances/balances.js.map +1 -1
  87. package/dist/services/balances/balances.schemas.d.ts +95 -95
  88. package/dist/services/balances/balances.schemas.d.ts.map +1 -1
  89. package/dist/services/balances/balances.schemas.js +61 -61
  90. package/dist/services/balances/balances.schemas.js.map +1 -1
  91. package/dist/services/candles/candles.js +12 -12
  92. package/dist/services/candles/candles.js.map +1 -1
  93. package/dist/services/candles/candles.schemas.d.ts +70 -70
  94. package/dist/services/candles/candles.schemas.d.ts.map +1 -1
  95. package/dist/services/candles/candles.schemas.js +47 -48
  96. package/dist/services/candles/candles.schemas.js.map +1 -1
  97. package/dist/services/chain-analytics/chain-analytics.js +7 -7
  98. package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
  99. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts +68 -68
  100. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
  101. package/dist/services/chain-analytics/chain-analytics.schemas.js +29 -29
  102. package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
  103. package/dist/services/deposit/deposit.js +5 -5
  104. package/dist/services/deposit/deposit.js.map +1 -1
  105. package/dist/services/deposit/deposit.schemas.d.ts +17 -17
  106. package/dist/services/deposit/deposit.schemas.d.ts.map +1 -1
  107. package/dist/services/deposit/deposit.schemas.js +11 -11
  108. package/dist/services/deposit/deposit.schemas.js.map +1 -1
  109. package/dist/services/guard-signer/guard-signer.js +13 -13
  110. package/dist/services/guard-signer/guard-signer.js.map +1 -1
  111. package/dist/services/guard-signer/guard-signer.schemas.d.ts +75 -75
  112. package/dist/services/guard-signer/guard-signer.schemas.d.ts.map +1 -1
  113. package/dist/services/guard-signer/guard-signer.schemas.js +42 -42
  114. package/dist/services/guard-signer/guard-signer.schemas.js.map +1 -1
  115. package/dist/services/heatmap/heatmap.js +9 -9
  116. package/dist/services/heatmap/heatmap.js.map +1 -1
  117. package/dist/services/heatmap/heatmap.schemas.d.ts +144 -144
  118. package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
  119. package/dist/services/heatmap/heatmap.schemas.js +47 -47
  120. package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
  121. package/dist/services/internal-transfers/internal-transfers.js +3 -3
  122. package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
  123. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +53 -53
  124. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
  125. package/dist/services/internal-transfers/internal-transfers.schemas.js +27 -27
  126. package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
  127. package/dist/services/lifecycle/lifecycle.js +10 -10
  128. package/dist/services/lifecycle/lifecycle.js.map +1 -1
  129. package/dist/services/lifecycle/lifecycle.schemas.d.ts +614 -614
  130. package/dist/services/lifecycle/lifecycle.schemas.d.ts.map +1 -1
  131. package/dist/services/lifecycle/lifecycle.schemas.js +146 -146
  132. package/dist/services/lifecycle/lifecycle.schemas.js.map +1 -1
  133. package/dist/services/market-data/market-data.js +6 -6
  134. package/dist/services/market-data/market-data.js.map +1 -1
  135. package/dist/services/market-data/market-data.schemas.d.ts +20 -20
  136. package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
  137. package/dist/services/market-data/market-data.schemas.js +51 -55
  138. package/dist/services/market-data/market-data.schemas.js.map +1 -1
  139. package/dist/services/market-overview/market-overview.js +4 -4
  140. package/dist/services/market-overview/market-overview.js.map +1 -1
  141. package/dist/services/market-overview/market-overview.schemas.d.ts +38 -38
  142. package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
  143. package/dist/services/market-overview/market-overview.schemas.js +33 -33
  144. package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
  145. package/dist/services/mfa/mfa.js +27 -27
  146. package/dist/services/mfa/mfa.js.map +1 -1
  147. package/dist/services/mfa/mfa.schemas.d.ts +206 -206
  148. package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
  149. package/dist/services/mfa/mfa.schemas.js +83 -83
  150. package/dist/services/mfa/mfa.schemas.js.map +1 -1
  151. package/dist/services/orderbook/orderbook.d.ts +2 -2
  152. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  153. package/dist/services/orderbook/orderbook.js +5 -5
  154. package/dist/services/orderbook/orderbook.js.map +1 -1
  155. package/dist/services/orderbook/orderbook.schemas.d.ts +22 -22
  156. package/dist/services/orderbook/orderbook.schemas.d.ts.map +1 -1
  157. package/dist/services/orderbook/orderbook.schemas.js +15 -15
  158. package/dist/services/orderbook/orderbook.schemas.js.map +1 -1
  159. package/dist/services/orders/order-errors.schemas.d.ts +18 -18
  160. package/dist/services/orders/order-errors.schemas.d.ts.map +1 -1
  161. package/dist/services/orders/order-errors.schemas.js +8 -8
  162. package/dist/services/orders/order-errors.schemas.js.map +1 -1
  163. package/dist/services/orders/orders-batch.schemas.d.ts +492 -492
  164. package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
  165. package/dist/services/orders/orders-batch.schemas.js +118 -118
  166. package/dist/services/orders/orders-batch.schemas.js.map +1 -1
  167. package/dist/services/orders/orders-identifiers.schemas.js +5 -5
  168. package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
  169. package/dist/services/orders/orders-input.schemas.d.ts +657 -648
  170. package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
  171. package/dist/services/orders/orders-input.schemas.js +100 -96
  172. package/dist/services/orders/orders-input.schemas.js.map +1 -1
  173. package/dist/services/orders/orders-modify.schemas.d.ts +370 -351
  174. package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
  175. package/dist/services/orders/orders-modify.schemas.js +48 -44
  176. package/dist/services/orders/orders-modify.schemas.js.map +1 -1
  177. package/dist/services/orders/orders-output.schemas.d.ts +183 -183
  178. package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
  179. package/dist/services/orders/orders-output.schemas.js +49 -49
  180. package/dist/services/orders/orders-output.schemas.js.map +1 -1
  181. package/dist/services/orders/orders-risk.schemas.d.ts +226 -226
  182. package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
  183. package/dist/services/orders/orders-risk.schemas.js +69 -69
  184. package/dist/services/orders/orders-risk.schemas.js.map +1 -1
  185. package/dist/services/orders/orders.d.ts +8 -8
  186. package/dist/services/orders/orders.d.ts.map +1 -1
  187. package/dist/services/orders/orders.js +44 -32
  188. package/dist/services/orders/orders.js.map +1 -1
  189. package/dist/services/policies/api-key-policies/api-key-policies.d.ts +6 -6
  190. package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
  191. package/dist/services/policies/api-key-policies/api-key-policies.js +11 -11
  192. package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
  193. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts +105 -105
  194. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts.map +1 -1
  195. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js +49 -49
  196. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js.map +1 -1
  197. package/dist/services/policies/shared.d.ts +5 -5
  198. package/dist/services/policies/shared.d.ts.map +1 -1
  199. package/dist/services/policies/shared.js +10 -10
  200. package/dist/services/policies/shared.js.map +1 -1
  201. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +6 -6
  202. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
  203. package/dist/services/policies/subaccount-policies/subaccount-policies.js +13 -13
  204. package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
  205. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +124 -124
  206. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
  207. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +75 -75
  208. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
  209. package/dist/services/shared.js +11 -11
  210. package/dist/services/shared.js.map +1 -1
  211. package/dist/services/social-verification/social-verification.d.ts +3 -3
  212. package/dist/services/social-verification/social-verification.d.ts.map +1 -1
  213. package/dist/services/social-verification/social-verification.js +7 -7
  214. package/dist/services/social-verification/social-verification.js.map +1 -1
  215. package/dist/services/social-verification/social-verification.schemas.d.ts +54 -54
  216. package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
  217. package/dist/services/social-verification/social-verification.schemas.js +28 -28
  218. package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
  219. package/dist/services/subaccount-resolver.js +5 -3
  220. package/dist/services/subaccount-resolver.js.map +1 -1
  221. package/dist/services/subaccounts/subaccounts.d.ts +15 -15
  222. package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
  223. package/dist/services/subaccounts/subaccounts.js +35 -35
  224. package/dist/services/subaccounts/subaccounts.js.map +1 -1
  225. package/dist/services/subaccounts/subaccounts.schemas.d.ts +135 -135
  226. package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
  227. package/dist/services/subaccounts/subaccounts.schemas.js +72 -72
  228. package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
  229. package/dist/services/trades/trades.d.ts +2 -2
  230. package/dist/services/trades/trades.d.ts.map +1 -1
  231. package/dist/services/trades/trades.js +5 -5
  232. package/dist/services/trades/trades.js.map +1 -1
  233. package/dist/services/trades/trades.schemas.d.ts +31 -31
  234. package/dist/services/trades/trades.schemas.d.ts.map +1 -1
  235. package/dist/services/trades/trades.schemas.js +24 -24
  236. package/dist/services/trades/trades.schemas.js.map +1 -1
  237. package/dist/services/trading-withdraws/trading-withdraws.js +8 -8
  238. package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
  239. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts +45 -45
  240. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
  241. package/dist/services/trading-withdraws/trading-withdraws.schemas.js +36 -36
  242. package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
  243. package/dist/services/transfers/transfers.d.ts +1 -1
  244. package/dist/services/transfers/transfers.d.ts.map +1 -1
  245. package/dist/services/transfers/transfers.js +5 -5
  246. package/dist/services/transfers/transfers.js.map +1 -1
  247. package/dist/services/transfers/transfers.schemas.d.ts +42 -42
  248. package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
  249. package/dist/services/transfers/transfers.schemas.js +30 -30
  250. package/dist/services/transfers/transfers.schemas.js.map +1 -1
  251. package/dist/services/triggers/trigger-child-order.schemas.js +23 -23
  252. package/dist/services/triggers/trigger-child-order.schemas.js.map +1 -1
  253. package/dist/services/triggers/trigger-input.schemas.d.ts +226 -226
  254. package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
  255. package/dist/services/triggers/trigger-input.schemas.js +53 -53
  256. package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
  257. package/dist/services/triggers/triggers-output.schemas.d.ts +210 -210
  258. package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
  259. package/dist/services/triggers/triggers-output.schemas.js +152 -152
  260. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  261. package/dist/services/triggers/triggers.js +21 -21
  262. package/dist/services/triggers/triggers.js.map +1 -1
  263. package/dist/services/whiteboard/whiteboard.js +15 -15
  264. package/dist/services/whiteboard/whiteboard.js.map +1 -1
  265. package/dist/services/whiteboard/whiteboard.schemas.d.ts +379 -379
  266. package/dist/services/whiteboard/whiteboard.schemas.d.ts.map +1 -1
  267. package/dist/services/whiteboard/whiteboard.schemas.js +71 -71
  268. package/dist/services/whiteboard/whiteboard.schemas.js.map +1 -1
  269. package/dist/services/zipper/zipper.js +3 -3
  270. package/dist/services/zipper/zipper.js.map +1 -1
  271. package/dist/services/zipper/zipper.schemas.d.ts +1 -1
  272. package/dist/services/zipper/zipper.schemas.js +54 -54
  273. package/dist/services/zipper/zipper.schemas.js.map +1 -1
  274. package/dist/shared/account-scope.d.ts +6 -6
  275. package/dist/shared/account-scope.d.ts.map +1 -1
  276. package/dist/shared/account-scope.js +3 -3
  277. package/dist/shared/account-scope.js.map +1 -1
  278. package/dist/shared/connect-error-mapping.d.ts +1 -1
  279. package/dist/shared/connect-error-mapping.js +29 -3
  280. package/dist/shared/connect-error-mapping.js.map +1 -1
  281. package/dist/shared/rate-limit.schemas.d.ts +12 -12
  282. package/dist/shared/rate-limit.schemas.d.ts.map +1 -1
  283. package/dist/shared/rate-limit.schemas.js +7 -7
  284. package/dist/shared/rate-limit.schemas.js.map +1 -1
  285. package/dist/shared/schemas.js +26 -26
  286. package/dist/shared/schemas.js.map +1 -1
  287. package/dist/shared/transports.js +7 -12
  288. package/dist/shared/transports.js.map +1 -1
  289. package/dist/shared/types.d.ts +12 -0
  290. package/dist/shared/types.d.ts.map +1 -1
  291. package/dist/shared/validation.d.ts +14 -0
  292. package/dist/shared/validation.d.ts.map +1 -0
  293. package/dist/shared/validation.js +24 -0
  294. package/dist/shared/validation.js.map +1 -0
  295. package/dist/utils/connect-order-errors.js +2 -2
  296. package/dist/utils/connect-order-errors.js.map +1 -1
  297. package/dist/utils/cookies.d.ts +8 -3
  298. package/dist/utils/cookies.d.ts.map +1 -1
  299. package/dist/utils/cookies.js +7 -1
  300. package/dist/utils/cookies.js.map +1 -1
  301. package/dist/utils/event-emitter.d.ts +1 -1
  302. package/dist/utils/event-emitter.d.ts.map +1 -1
  303. package/dist/utils/event-emitter.js +4 -2
  304. package/dist/utils/event-emitter.js.map +1 -1
  305. package/dist/utils/evm.js +2 -2
  306. package/dist/utils/evm.js.map +1 -1
  307. package/dist/utils/jwt.d.ts +2 -2
  308. package/dist/utils/jwt.d.ts.map +1 -1
  309. package/dist/utils/jwt.js +2 -2
  310. package/dist/utils/jwt.js.map +1 -1
  311. package/package.json +1 -1
@@ -1,24 +1,24 @@
1
+ import { validation_exports } from "../../shared/validation.js";
1
2
  import { AccountScopeInputEntries, accountScopeToSubaccountId } from "../../shared/account-scope.js";
2
3
  import { PROTECTED_ACTION_VALUES, ProtectedActionCodec } from "./guard-signer.codecs.js";
3
- import * as v from "valibot";
4
4
  import { bytesToHex } from "@noble/hashes/utils.js";
5
5
  //#region src/services/guard-signer/guard-signer.schemas.ts
6
- const HexAddressSchema = v.pipe(v.string(), v.trim(), v.regex(/^0x[0-9a-fA-F]{40}$/));
7
- const WhitelistAddressSchema = v.pipe(v.string(), v.trim(), v.minLength(1));
8
- const GuardSignerScopedInputSchema = v.pipe(v.strictObject({ ...AccountScopeInputEntries }), v.transform(({ account }) => ({ subaccountId: accountScopeToSubaccountId(account) })));
9
- const ProtectedActionArgsInputSchema = v.variant("case", [
10
- v.strictObject({
11
- case: v.literal("externalWhitelist"),
12
- polychainChainId: v.pipe(v.number(), v.integer(), v.gtValue(0)),
13
- addresses: v.pipe(v.array(WhitelistAddressSchema), v.minLength(1))
6
+ const HexAddressSchema = validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.regex(/^0x[0-9a-fA-F]{40}$/));
7
+ const WhitelistAddressSchema = validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1));
8
+ const GuardSignerScopedInputSchema = validation_exports.pipe(validation_exports.strictObject({ ...AccountScopeInputEntries }), validation_exports.transform(({ account }) => ({ subaccountId: accountScopeToSubaccountId(account) })));
9
+ const ProtectedActionArgsInputSchema = validation_exports.variant("case", [
10
+ validation_exports.strictObject({
11
+ case: validation_exports.literal("externalWhitelist"),
12
+ polychainChainId: validation_exports.pipe(validation_exports.number(), validation_exports.integer(), validation_exports.gtValue(0)),
13
+ addresses: validation_exports.pipe(validation_exports.array(WhitelistAddressSchema), validation_exports.minLength(1))
14
14
  }),
15
- v.strictObject({
16
- case: v.literal("internalWhitelist"),
17
- addresses: v.pipe(v.array(WhitelistAddressSchema), v.minLength(1))
15
+ validation_exports.strictObject({
16
+ case: validation_exports.literal("internalWhitelist"),
17
+ addresses: validation_exports.pipe(validation_exports.array(WhitelistAddressSchema), validation_exports.minLength(1))
18
18
  }),
19
- v.strictObject({
20
- case: v.literal("whitelistRequirement"),
21
- required: v.boolean()
19
+ validation_exports.strictObject({
20
+ case: validation_exports.literal("whitelistRequirement"),
21
+ required: validation_exports.boolean()
22
22
  })
23
23
  ]);
24
24
  function toProtectedActionArgs(args) {
@@ -38,55 +38,55 @@ function toProtectedActionArgs(args) {
38
38
  value: { required: args.required }
39
39
  } };
40
40
  }
41
- const SignProtectedActionInputSchema = v.pipe(v.strictObject({
41
+ const SignProtectedActionInputSchema = validation_exports.pipe(validation_exports.strictObject({
42
42
  ...AccountScopeInputEntries,
43
- action: v.picklist(PROTECTED_ACTION_VALUES),
44
- args: v.optional(ProtectedActionArgsInputSchema)
45
- }), v.transform(({ account, action, args }) => ({
43
+ action: validation_exports.picklist(PROTECTED_ACTION_VALUES),
44
+ args: validation_exports.optional(ProtectedActionArgsInputSchema)
45
+ }), validation_exports.transform(({ account, action, args }) => ({
46
46
  subaccountId: accountScopeToSubaccountId(account),
47
47
  action: ProtectedActionCodec.inputToProto[action],
48
48
  args: args ? toProtectedActionArgs(args) : void 0
49
49
  })));
50
- const BatchSignProtectedActionInputSchema = v.pipe(v.strictObject({
50
+ const BatchSignProtectedActionInputSchema = validation_exports.pipe(validation_exports.strictObject({
51
51
  ...AccountScopeInputEntries,
52
- actions: v.pipe(v.array(v.strictObject({
53
- action: v.picklist(PROTECTED_ACTION_VALUES),
54
- args: v.optional(ProtectedActionArgsInputSchema)
55
- })), v.minLength(1, "At least one protected action is required."))
56
- }), v.transform(({ account, actions }) => ({
52
+ actions: validation_exports.pipe(validation_exports.array(validation_exports.strictObject({
53
+ action: validation_exports.picklist(PROTECTED_ACTION_VALUES),
54
+ args: validation_exports.optional(ProtectedActionArgsInputSchema)
55
+ })), validation_exports.minLength(1, "At least one protected action is required."))
56
+ }), validation_exports.transform(({ account, actions }) => ({
57
57
  subaccountId: accountScopeToSubaccountId(account),
58
58
  actions: actions.map(({ action, args }) => ({
59
59
  action: ProtectedActionCodec.inputToProto[action],
60
60
  args: args ? toProtectedActionArgs(args) : void 0
61
61
  }))
62
62
  })));
63
- const GuardSignerStatusSchema = v.object({
64
- signerAddress: v.string(),
65
- onchainSignerAddress: v.string(),
66
- initialized: v.boolean(),
67
- nonce: v.string(),
68
- nonceSpace: v.bigint()
63
+ const GuardSignerStatusSchema = validation_exports.object({
64
+ signerAddress: validation_exports.string(),
65
+ onchainSignerAddress: validation_exports.string(),
66
+ initialized: validation_exports.boolean(),
67
+ nonce: validation_exports.string(),
68
+ nonceSpace: validation_exports.bigint()
69
69
  });
70
- const GuardApprovalSchema = v.pipe(v.object({
71
- nonceSpace: v.bigint(),
72
- deadlineUnix: v.bigint(),
73
- signature: v.instance(Uint8Array)
74
- }), v.transform((approval) => ({
70
+ const GuardApprovalSchema = validation_exports.pipe(validation_exports.object({
71
+ nonceSpace: validation_exports.bigint(),
72
+ deadlineUnix: validation_exports.bigint(),
73
+ signature: validation_exports.instance(Uint8Array)
74
+ }), validation_exports.transform((approval) => ({
75
75
  nonceSpace: approval.nonceSpace.toString(),
76
76
  deadlineUnix: approval.deadlineUnix.toString(),
77
77
  signature: `0x${bytesToHex(approval.signature)}`,
78
78
  raw: approval
79
79
  })));
80
- const BatchGuardApprovalsSchema = v.object({ approvals: v.array(GuardApprovalSchema) });
81
- const CreateGuardSignerWalletResultSchema = v.object({ signerAddress: HexAddressSchema });
82
- const RotateGuardSignerWalletResultSchema = v.pipe(v.object({
80
+ const BatchGuardApprovalsSchema = validation_exports.object({ approvals: validation_exports.array(GuardApprovalSchema) });
81
+ const CreateGuardSignerWalletResultSchema = validation_exports.object({ signerAddress: HexAddressSchema });
82
+ const RotateGuardSignerWalletResultSchema = validation_exports.pipe(validation_exports.object({
83
83
  newSignerAddress: HexAddressSchema,
84
- approval: v.optional(GuardApprovalSchema)
85
- }), v.transform((result) => ({
84
+ approval: validation_exports.optional(GuardApprovalSchema)
85
+ }), validation_exports.transform((result) => ({
86
86
  newSignerAddress: result.newSignerAddress,
87
87
  approval: result.approval ?? null
88
88
  })));
89
- const ExportGuardSignerWalletResultSchema = v.object({ privateKey: v.pipe(v.string(), v.trim(), v.regex(/^0x[0-9a-fA-F]{64}$/)) });
89
+ const ExportGuardSignerWalletResultSchema = validation_exports.object({ privateKey: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.regex(/^0x[0-9a-fA-F]{64}$/)) });
90
90
  //#endregion
91
91
  export { BatchGuardApprovalsSchema, BatchSignProtectedActionInputSchema, CreateGuardSignerWalletResultSchema, ExportGuardSignerWalletResultSchema, GuardApprovalSchema, GuardSignerScopedInputSchema, GuardSignerStatusSchema, RotateGuardSignerWalletResultSchema, SignProtectedActionInputSchema };
92
92
 
@@ -1 +1 @@
1
- {"version":3,"file":"guard-signer.schemas.js","names":[],"sources":["../../../src/services/guard-signer/guard-signer.schemas.ts"],"sourcesContent":["import { bytesToHex } from \"@noble/hashes/utils.js\";\nimport * as v from \"valibot\";\nimport { PROTECTED_ACTION_VALUES, ProtectedActionCodec } from \"./guard-signer.codecs.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\n\nconst HexAddressSchema = v.pipe(v.string(), v.trim(), v.regex(/^0x[0-9a-fA-F]{40}$/));\n\nconst WhitelistAddressSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nexport const GuardSignerScopedInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n }),\n v.transform(({ account }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type GuardSignerScopedInput = v.InferInput<typeof GuardSignerScopedInputSchema>;\n\nconst ProtectedActionArgsInputSchema = v.variant(\"case\", [\n v.strictObject({\n case: v.literal(\"externalWhitelist\"),\n polychainChainId: v.pipe(v.number(), v.integer(), v.gtValue(0)),\n addresses: v.pipe(v.array(WhitelistAddressSchema), v.minLength(1)),\n }),\n v.strictObject({\n case: v.literal(\"internalWhitelist\"),\n addresses: v.pipe(v.array(WhitelistAddressSchema), v.minLength(1)),\n }),\n v.strictObject({\n case: v.literal(\"whitelistRequirement\"),\n required: v.boolean(),\n }),\n]);\n\nfunction toProtectedActionArgs(args: v.InferOutput<typeof ProtectedActionArgsInputSchema>) {\n if (args.case === \"externalWhitelist\") {\n return {\n args: {\n case: \"externalWhitelist\" as const,\n value: {\n polychainChainId: args.polychainChainId,\n addresses: args.addresses,\n },\n },\n };\n }\n\n if (args.case === \"internalWhitelist\") {\n return {\n args: {\n case: \"internalWhitelist\" as const,\n value: {\n addresses: args.addresses,\n },\n },\n };\n }\n\n return {\n args: {\n case: \"whitelistRequirement\" as const,\n value: {\n required: args.required,\n },\n },\n };\n}\n\nexport const SignProtectedActionInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n action: v.picklist(PROTECTED_ACTION_VALUES),\n args: v.optional(ProtectedActionArgsInputSchema),\n }),\n v.transform(({ account, action, args }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n action: ProtectedActionCodec.inputToProto[action],\n args: args ? toProtectedActionArgs(args) : undefined,\n })),\n);\n\nexport type SignProtectedActionInput = v.InferInput<typeof SignProtectedActionInputSchema>;\n\nexport const BatchSignProtectedActionInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n actions: v.pipe(\n v.array(\n v.strictObject({\n action: v.picklist(PROTECTED_ACTION_VALUES),\n args: v.optional(ProtectedActionArgsInputSchema),\n }),\n ),\n v.minLength(1, \"At least one protected action is required.\"),\n ),\n }),\n v.transform(({ account, actions }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n actions: actions.map(({ action, args }) => ({\n action: ProtectedActionCodec.inputToProto[action],\n args: args ? toProtectedActionArgs(args) : undefined,\n })),\n })),\n);\n\nexport type BatchSignProtectedActionInput = v.InferInput<\n typeof BatchSignProtectedActionInputSchema\n>;\n\nexport const GuardSignerStatusSchema = v.object({\n signerAddress: v.string(),\n onchainSignerAddress: v.string(),\n initialized: v.boolean(),\n nonce: v.string(),\n nonceSpace: v.bigint(),\n});\n\nexport type GuardSignerStatus = v.InferOutput<typeof GuardSignerStatusSchema>;\n\nexport const GuardApprovalSchema = v.pipe(\n v.object({\n nonceSpace: v.bigint(),\n deadlineUnix: v.bigint(),\n signature: v.instance(Uint8Array),\n }),\n v.transform((approval) => ({\n nonceSpace: approval.nonceSpace.toString(),\n deadlineUnix: approval.deadlineUnix.toString(),\n signature: `0x${bytesToHex(approval.signature)}` as `0x${string}`,\n raw: approval,\n })),\n);\n\nexport type GuardApproval = v.InferOutput<typeof GuardApprovalSchema>;\n\nexport const BatchGuardApprovalsSchema = v.object({\n approvals: v.array(GuardApprovalSchema),\n});\n\nexport type BatchGuardApprovals = v.InferOutput<typeof BatchGuardApprovalsSchema>;\n\nexport const CreateGuardSignerWalletResultSchema = v.object({\n signerAddress: HexAddressSchema,\n});\n\nexport type CreateGuardSignerWalletResult = v.InferOutput<\n typeof CreateGuardSignerWalletResultSchema\n>;\n\nexport const RotateGuardSignerWalletResultSchema = v.pipe(\n v.object({\n newSignerAddress: HexAddressSchema,\n approval: v.optional(GuardApprovalSchema),\n }),\n v.transform((result) => ({\n newSignerAddress: result.newSignerAddress,\n approval: result.approval ?? null,\n })),\n);\n\nexport type RotateGuardSignerWalletResult = v.InferOutput<\n typeof RotateGuardSignerWalletResultSchema\n>;\n\nexport const ExportGuardSignerWalletResultSchema = v.object({\n privateKey: v.pipe(v.string(), v.trim(), v.regex(/^0x[0-9a-fA-F]{64}$/)),\n});\n\nexport type ExportGuardSignerWalletResult = v.InferOutput<\n typeof ExportGuardSignerWalletResultSchema\n>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"guard-signer.schemas.js","names":["v"],"sources":["../../../src/services/guard-signer/guard-signer.schemas.ts"],"sourcesContent":["import { bytesToHex } from \"@noble/hashes/utils.js\";\nimport * as v from \"../../shared/validation.js\";\nimport { PROTECTED_ACTION_VALUES, ProtectedActionCodec } from \"./guard-signer.codecs.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\n\nconst HexAddressSchema = v.pipe(v.string(), v.trim(), v.regex(/^0x[0-9a-fA-F]{40}$/));\n\nconst WhitelistAddressSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nexport const GuardSignerScopedInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n }),\n v.transform(({ account }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type GuardSignerScopedInput = v.InferInput<typeof GuardSignerScopedInputSchema>;\n\nconst ProtectedActionArgsInputSchema = v.variant(\"case\", [\n v.strictObject({\n case: v.literal(\"externalWhitelist\"),\n polychainChainId: v.pipe(v.number(), v.integer(), v.gtValue(0)),\n addresses: v.pipe(v.array(WhitelistAddressSchema), v.minLength(1)),\n }),\n v.strictObject({\n case: v.literal(\"internalWhitelist\"),\n addresses: v.pipe(v.array(WhitelistAddressSchema), v.minLength(1)),\n }),\n v.strictObject({\n case: v.literal(\"whitelistRequirement\"),\n required: v.boolean(),\n }),\n]);\n\nfunction toProtectedActionArgs(args: v.InferOutput<typeof ProtectedActionArgsInputSchema>) {\n if (args.case === \"externalWhitelist\") {\n return {\n args: {\n case: \"externalWhitelist\" as const,\n value: {\n polychainChainId: args.polychainChainId,\n addresses: args.addresses,\n },\n },\n };\n }\n\n if (args.case === \"internalWhitelist\") {\n return {\n args: {\n case: \"internalWhitelist\" as const,\n value: {\n addresses: args.addresses,\n },\n },\n };\n }\n\n return {\n args: {\n case: \"whitelistRequirement\" as const,\n value: {\n required: args.required,\n },\n },\n };\n}\n\nexport const SignProtectedActionInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n action: v.picklist(PROTECTED_ACTION_VALUES),\n args: v.optional(ProtectedActionArgsInputSchema),\n }),\n v.transform(({ account, action, args }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n action: ProtectedActionCodec.inputToProto[action],\n args: args ? toProtectedActionArgs(args) : undefined,\n })),\n);\n\nexport type SignProtectedActionInput = v.InferInput<typeof SignProtectedActionInputSchema>;\n\nexport const BatchSignProtectedActionInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n actions: v.pipe(\n v.array(\n v.strictObject({\n action: v.picklist(PROTECTED_ACTION_VALUES),\n args: v.optional(ProtectedActionArgsInputSchema),\n }),\n ),\n v.minLength(1, \"At least one protected action is required.\"),\n ),\n }),\n v.transform(({ account, actions }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n actions: actions.map(({ action, args }) => ({\n action: ProtectedActionCodec.inputToProto[action],\n args: args ? toProtectedActionArgs(args) : undefined,\n })),\n })),\n);\n\nexport type BatchSignProtectedActionInput = v.InferInput<\n typeof BatchSignProtectedActionInputSchema\n>;\n\nexport const GuardSignerStatusSchema = v.object({\n signerAddress: v.string(),\n onchainSignerAddress: v.string(),\n initialized: v.boolean(),\n nonce: v.string(),\n nonceSpace: v.bigint(),\n});\n\nexport type GuardSignerStatus = v.InferOutput<typeof GuardSignerStatusSchema>;\n\nexport const GuardApprovalSchema = v.pipe(\n v.object({\n nonceSpace: v.bigint(),\n deadlineUnix: v.bigint(),\n signature: v.instance(Uint8Array),\n }),\n v.transform((approval) => ({\n nonceSpace: approval.nonceSpace.toString(),\n deadlineUnix: approval.deadlineUnix.toString(),\n signature: `0x${bytesToHex(approval.signature)}` as `0x${string}`,\n raw: approval,\n })),\n);\n\nexport type GuardApproval = v.InferOutput<typeof GuardApprovalSchema>;\n\nexport const BatchGuardApprovalsSchema = v.object({\n approvals: v.array(GuardApprovalSchema),\n});\n\nexport type BatchGuardApprovals = v.InferOutput<typeof BatchGuardApprovalsSchema>;\n\nexport const CreateGuardSignerWalletResultSchema = v.object({\n signerAddress: HexAddressSchema,\n});\n\nexport type CreateGuardSignerWalletResult = v.InferOutput<\n typeof CreateGuardSignerWalletResultSchema\n>;\n\nexport const RotateGuardSignerWalletResultSchema = v.pipe(\n v.object({\n newSignerAddress: HexAddressSchema,\n approval: v.optional(GuardApprovalSchema),\n }),\n v.transform((result) => ({\n newSignerAddress: result.newSignerAddress,\n approval: result.approval ?? null,\n })),\n);\n\nexport type RotateGuardSignerWalletResult = v.InferOutput<\n typeof RotateGuardSignerWalletResultSchema\n>;\n\nexport const ExportGuardSignerWalletResultSchema = v.object({\n privateKey: v.pipe(v.string(), v.trim(), v.regex(/^0x[0-9a-fA-F]{64}$/)),\n});\n\nexport type ExportGuardSignerWalletResult = v.InferOutput<\n typeof ExportGuardSignerWalletResultSchema\n>;\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { parse, validation_exports } from "../../shared/validation.js";
1
2
  import { toConnectCallOptions } from "../../shared/request-options.js";
2
3
  import { publicationHandlerErrorContext } from "../../shared/subscription-errors.js";
3
4
  import { createReadyGate } from "../../shared/decimal-surface.js";
@@ -6,11 +7,10 @@ import { HEATMAP_INTERVAL_VALUES } from "./heatmap.codecs.js";
6
7
  import { GetOrderbookHeatmapInputSchema, createOrderbookHeatmapLiveBucketSchema, createOrderbookHeatmapResponseSchema } from "./heatmap.schemas.js";
7
8
  import { create } from "@bufbuild/protobuf";
8
9
  import { createClient } from "@connectrpc/connect";
9
- import * as v from "valibot";
10
10
  //#region src/services/heatmap/heatmap.ts
11
- const SubscribeHeatmapLiveParamsSchema = v.object({
12
- symbolId: v.pipe(v.number(), v.integer(), v.gtValue(0)),
13
- interval: v.picklist(HEATMAP_INTERVAL_VALUES)
11
+ const SubscribeHeatmapLiveParamsSchema = validation_exports.object({
12
+ symbolId: validation_exports.pipe(validation_exports.number(), validation_exports.integer(), validation_exports.gtValue(0)),
13
+ interval: validation_exports.picklist(HEATMAP_INTERVAL_VALUES)
14
14
  });
15
15
  /**
16
16
  * Reads historical order book heatmap chains and streams live heatmap buckets.
@@ -32,27 +32,27 @@ var HeatmapService = class {
32
32
  * Fetches order book heatmap data for a symbol, interval, depth, and quantity mode using either an absolute time range or cursor pagination. The response includes a keyframe anchor, delta buckets, pagination metadata, and live-anchor fields when available.
33
33
  */
34
34
  async getOrderbookHeatmap(input, options) {
35
- const parsed = v.parse(GetOrderbookHeatmapInputSchema, input);
35
+ const parsed = parse(GetOrderbookHeatmapInputSchema, input);
36
36
  await this.#scales.ready();
37
37
  const res = await this.#client.getOrderbookHeatmap({
38
38
  symbolId: parsed.symbolId,
39
39
  interval: parsed.interval,
40
40
  depth: parsed.depth,
41
41
  quantityMode: parsed.quantityMode,
42
- limit: parsed.limit ?? 0,
42
+ limit: parsed.limit,
43
43
  pageToken: parsed.pageToken,
44
44
  timeRange: parsed.timeRange != null ? create(HeatmapTimeRangeSchema, {
45
45
  startTime: parsed.timeRange.startTime,
46
46
  endTime: parsed.timeRange.endTime
47
47
  }) : void 0
48
48
  }, toConnectCallOptions(options));
49
- return v.parse(this.#responseSchema, res);
49
+ return parse(this.#responseSchema, res);
50
50
  }
51
51
  /**
52
52
  * Subscribes to live heatmap buckets on public:spot:market:heatmap:{interval}:{symbolId}:proto and emits parsed bid/ask delta buckets for the selected interval.
53
53
  */
54
54
  subscribeLive(input) {
55
- const params = v.parse(SubscribeHeatmapLiveParamsSchema, {
55
+ const params = parse(SubscribeHeatmapLiveParamsSchema, {
56
56
  symbolId: input.symbolId,
57
57
  interval: input.interval
58
58
  });
@@ -63,7 +63,7 @@ var HeatmapService = class {
63
63
  schema: HeatmapLiveBucketSchema,
64
64
  onPublication: (data) => {
65
65
  gate.run(() => {
66
- const bucket = v.parse(this.#liveBucketSchema, data);
66
+ const bucket = parse(this.#liveBucketSchema, data);
67
67
  input.onEvent(bucket);
68
68
  });
69
69
  },
@@ -1 +1 @@
1
- {"version":3,"file":"heatmap.js","names":["#client","HeatmapRpc","#realtime","#scales","#responseSchema","#liveBucketSchema","ProtoHeatmapLiveBucketSchema"],"sources":["../../../src/services/heatmap/heatmap.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport { create } from \"@bufbuild/protobuf\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport {\n HeatmapService as HeatmapRpc,\n HeatmapLiveBucketSchema as ProtoHeatmapLiveBucketSchema,\n HeatmapTimeRangeSchema,\n} from \"../../gen/marketdata/v1/heatmap_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { createReadyGate, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { HEATMAP_INTERVAL_VALUES, type HeatmapIntervalValue } from \"./heatmap.codecs.js\";\nimport * as v from \"valibot\";\nimport {\n GetOrderbookHeatmapInputSchema,\n createOrderbookHeatmapLiveBucketSchema,\n createOrderbookHeatmapResponseSchema,\n type GetOrderbookHeatmapInput,\n type OrderbookHeatmapLiveBucket,\n type OrderbookHeatmapResponse,\n} from \"./heatmap.schemas.js\";\n\nexport interface OrderbookHeatmapProvider {\n getOrderbookHeatmap(\n input: GetOrderbookHeatmapInput,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookHeatmapResponse>;\n}\n\ninterface SubscribeHeatmapLiveInput extends BaseSubscribeInput<OrderbookHeatmapLiveBucket> {\n symbolId: number;\n interval: HeatmapIntervalValue;\n}\n\nconst SubscribeHeatmapLiveParamsSchema = v.object({\n symbolId: v.pipe(v.number(), v.integer(), v.gtValue(0)),\n interval: v.picklist(HEATMAP_INTERVAL_VALUES),\n});\n\n/**\n * Reads historical order book heatmap chains and streams live heatmap buckets.\n */\nexport class HeatmapService implements OrderbookHeatmapProvider {\n #client: Client<typeof HeatmapRpc>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n #responseSchema: ReturnType<typeof createOrderbookHeatmapResponseSchema>;\n #liveBucketSchema: ReturnType<typeof createOrderbookHeatmapLiveBucketSchema>;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(HeatmapRpc, transport);\n this.#realtime = realtime;\n this.#scales = scales;\n this.#responseSchema = createOrderbookHeatmapResponseSchema(scales);\n this.#liveBucketSchema = createOrderbookHeatmapLiveBucketSchema(scales);\n }\n\n /**\n * Fetches order book heatmap data for a symbol, interval, depth, and quantity mode using either an absolute time range or cursor pagination. The response includes a keyframe anchor, delta buckets, pagination metadata, and live-anchor fields when available.\n */\n async getOrderbookHeatmap(\n input: GetOrderbookHeatmapInput,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookHeatmapResponse> {\n const parsed = v.parse(GetOrderbookHeatmapInputSchema, input);\n await this.#scales.ready();\n\n const res = await this.#client.getOrderbookHeatmap(\n {\n symbolId: parsed.symbolId,\n interval: parsed.interval,\n depth: parsed.depth,\n quantityMode: parsed.quantityMode,\n limit: parsed.limit ?? 0,\n pageToken: parsed.pageToken,\n timeRange:\n parsed.timeRange != null\n ? create(HeatmapTimeRangeSchema, {\n startTime: parsed.timeRange.startTime,\n endTime: parsed.timeRange.endTime,\n })\n : undefined,\n },\n toConnectCallOptions(options),\n );\n return v.parse(this.#responseSchema, res);\n }\n\n /**\n * Subscribes to live heatmap buckets on public:spot:market:heatmap:{interval}:{symbolId}:proto and emits parsed bid/ask delta buckets for the selected interval.\n */\n subscribeLive(input: SubscribeHeatmapLiveInput): () => void {\n const params = v.parse(SubscribeHeatmapLiveParamsSchema, {\n symbolId: input.symbolId,\n interval: input.interval,\n });\n const channel = `public:spot:market:heatmap:${params.interval}:${params.symbolId}:proto`;\n const gate = createReadyGate(\n () => this.#scales.ready(),\n (error) => input.onError?.(publicationHandlerErrorContext(channel, error)),\n );\n return this.#realtime.connectProtoChannel({\n channel,\n schema: ProtoHeatmapLiveBucketSchema,\n onPublication: (data) => {\n gate.run(() => {\n const bucket = v.parse(this.#liveBucketSchema, data);\n input.onEvent(bucket);\n });\n },\n onConnected: input.onOpen,\n onDisconnected: input.onClose,\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;AAsCA,MAAM,mCAAmC,EAAE,OAAO;CAC9C,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC;CACtD,UAAU,EAAE,SAAS,uBAAuB;AAChD,CAAC;;;;AAKD,IAAa,iBAAb,MAAgE;CAC5D;CACA;CACA;CACA;CACA;CAEA,YAAY,WAAsB,UAA6B,QAAmB;EAC9E,KAAKA,UAAU,aAAaC,kBAAY,SAAS;EACjD,KAAKC,YAAY;EACjB,KAAKC,UAAU;EACf,KAAKC,kBAAkB,qCAAqC,MAAM;EAClE,KAAKC,oBAAoB,uCAAuC,MAAM;CAC1E;;;;CAKA,MAAM,oBACF,OACA,SACiC;EACjC,MAAM,SAAS,EAAE,MAAM,gCAAgC,KAAK;EAC5D,MAAM,KAAKF,QAAQ,MAAM;EAEzB,MAAM,MAAM,MAAM,KAAKH,QAAQ,oBAC3B;GACI,UAAU,OAAO;GACjB,UAAU,OAAO;GACjB,OAAO,OAAO;GACd,cAAc,OAAO;GACrB,OAAO,OAAO,SAAS;GACvB,WAAW,OAAO;GAClB,WACI,OAAO,aAAa,OACd,OAAO,wBAAwB;IAC3B,WAAW,OAAO,UAAU;IAC5B,SAAS,OAAO,UAAU;GAC9B,CAAC,IACD,KAAA;EACd,GACA,qBAAqB,OAAO,CAChC;EACA,OAAO,EAAE,MAAM,KAAKI,iBAAiB,GAAG;CAC5C;;;;CAKA,cAAc,OAA8C;EACxD,MAAM,SAAS,EAAE,MAAM,kCAAkC;GACrD,UAAU,MAAM;GAChB,UAAU,MAAM;EACpB,CAAC;EACD,MAAM,UAAU,8BAA8B,OAAO,SAAS,GAAG,OAAO,SAAS;EACjF,MAAM,OAAO,sBACH,KAAKD,QAAQ,MAAM,IACxB,UAAU,MAAM,UAAU,+BAA+B,SAAS,KAAK,CAAC,CAC7E;EACA,OAAO,KAAKD,UAAU,oBAAoB;GACtC;GACA,QAAQI;GACR,gBAAgB,SAAS;IACrB,KAAK,UAAU;KACX,MAAM,SAAS,EAAE,MAAM,KAAKD,mBAAmB,IAAI;KACnD,MAAM,QAAQ,MAAM;IACxB,CAAC;GACL;GACA,aAAa,MAAM;GACnB,gBAAgB,MAAM;GACtB,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}
1
+ {"version":3,"file":"heatmap.js","names":["v","#client","HeatmapRpc","#realtime","#scales","#responseSchema","#liveBucketSchema","v.parse","ProtoHeatmapLiveBucketSchema"],"sources":["../../../src/services/heatmap/heatmap.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport { create } from \"@bufbuild/protobuf\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport {\n HeatmapService as HeatmapRpc,\n HeatmapLiveBucketSchema as ProtoHeatmapLiveBucketSchema,\n HeatmapTimeRangeSchema,\n} from \"../../gen/marketdata/v1/heatmap_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { createReadyGate, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { HEATMAP_INTERVAL_VALUES, type HeatmapIntervalValue } from \"./heatmap.codecs.js\";\nimport * as v from \"../../shared/validation.js\";\nimport {\n GetOrderbookHeatmapInputSchema,\n createOrderbookHeatmapLiveBucketSchema,\n createOrderbookHeatmapResponseSchema,\n type GetOrderbookHeatmapInput,\n type OrderbookHeatmapLiveBucket,\n type OrderbookHeatmapResponse,\n} from \"./heatmap.schemas.js\";\n\nexport interface OrderbookHeatmapProvider {\n getOrderbookHeatmap(\n input: GetOrderbookHeatmapInput,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookHeatmapResponse>;\n}\n\ninterface SubscribeHeatmapLiveInput extends BaseSubscribeInput<OrderbookHeatmapLiveBucket> {\n symbolId: number;\n interval: HeatmapIntervalValue;\n}\n\nconst SubscribeHeatmapLiveParamsSchema = v.object({\n symbolId: v.pipe(v.number(), v.integer(), v.gtValue(0)),\n interval: v.picklist(HEATMAP_INTERVAL_VALUES),\n});\n\n/**\n * Reads historical order book heatmap chains and streams live heatmap buckets.\n */\nexport class HeatmapService implements OrderbookHeatmapProvider {\n #client: Client<typeof HeatmapRpc>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n #responseSchema: ReturnType<typeof createOrderbookHeatmapResponseSchema>;\n #liveBucketSchema: ReturnType<typeof createOrderbookHeatmapLiveBucketSchema>;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(HeatmapRpc, transport);\n this.#realtime = realtime;\n this.#scales = scales;\n this.#responseSchema = createOrderbookHeatmapResponseSchema(scales);\n this.#liveBucketSchema = createOrderbookHeatmapLiveBucketSchema(scales);\n }\n\n /**\n * Fetches order book heatmap data for a symbol, interval, depth, and quantity mode using either an absolute time range or cursor pagination. The response includes a keyframe anchor, delta buckets, pagination metadata, and live-anchor fields when available.\n */\n async getOrderbookHeatmap(\n input: GetOrderbookHeatmapInput,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookHeatmapResponse> {\n const parsed = v.parse(GetOrderbookHeatmapInputSchema, input);\n await this.#scales.ready();\n\n const res = await this.#client.getOrderbookHeatmap(\n {\n symbolId: parsed.symbolId,\n interval: parsed.interval,\n depth: parsed.depth,\n quantityMode: parsed.quantityMode,\n limit: parsed.limit,\n pageToken: parsed.pageToken,\n timeRange:\n parsed.timeRange != null\n ? create(HeatmapTimeRangeSchema, {\n startTime: parsed.timeRange.startTime,\n endTime: parsed.timeRange.endTime,\n })\n : undefined,\n },\n toConnectCallOptions(options),\n );\n return v.parse(this.#responseSchema, res);\n }\n\n /**\n * Subscribes to live heatmap buckets on public:spot:market:heatmap:{interval}:{symbolId}:proto and emits parsed bid/ask delta buckets for the selected interval.\n */\n subscribeLive(input: SubscribeHeatmapLiveInput): () => void {\n const params = v.parse(SubscribeHeatmapLiveParamsSchema, {\n symbolId: input.symbolId,\n interval: input.interval,\n });\n const channel = `public:spot:market:heatmap:${params.interval}:${params.symbolId}:proto`;\n const gate = createReadyGate(\n () => this.#scales.ready(),\n (error) => input.onError?.(publicationHandlerErrorContext(channel, error)),\n );\n return this.#realtime.connectProtoChannel({\n channel,\n schema: ProtoHeatmapLiveBucketSchema,\n onPublication: (data) => {\n gate.run(() => {\n const bucket = v.parse(this.#liveBucketSchema, data);\n input.onEvent(bucket);\n });\n },\n onConnected: input.onOpen,\n onDisconnected: input.onClose,\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;AAsCA,MAAM,mCAAmCA,mBAAE,OAAO;CAC9C,UAAUA,mBAAE,KAAKA,mBAAE,OAAO,GAAGA,mBAAE,QAAQ,GAAGA,mBAAE,QAAQ,CAAC,CAAC;CACtD,UAAUA,mBAAE,SAAS,uBAAuB;AAChD,CAAC;;;;AAKD,IAAa,iBAAb,MAAgE;CAC5D;CACA;CACA;CACA;CACA;CAEA,YAAY,WAAsB,UAA6B,QAAmB;EAC9E,KAAKC,UAAU,aAAaC,kBAAY,SAAS;EACjD,KAAKC,YAAY;EACjB,KAAKC,UAAU;EACf,KAAKC,kBAAkB,qCAAqC,MAAM;EAClE,KAAKC,oBAAoB,uCAAuC,MAAM;CAC1E;;;;CAKA,MAAM,oBACF,OACA,SACiC;EACjC,MAAM,SAASC,MAAQ,gCAAgC,KAAK;EAC5D,MAAM,KAAKH,QAAQ,MAAM;EAEzB,MAAM,MAAM,MAAM,KAAKH,QAAQ,oBAC3B;GACI,UAAU,OAAO;GACjB,UAAU,OAAO;GACjB,OAAO,OAAO;GACd,cAAc,OAAO;GACrB,OAAO,OAAO;GACd,WAAW,OAAO;GAClB,WACI,OAAO,aAAa,OACd,OAAO,wBAAwB;IAC3B,WAAW,OAAO,UAAU;IAC5B,SAAS,OAAO,UAAU;GAC9B,CAAC,IACD,KAAA;EACd,GACA,qBAAqB,OAAO,CAChC;EACA,OAAOM,MAAQ,KAAKF,iBAAiB,GAAG;CAC5C;;;;CAKA,cAAc,OAA8C;EACxD,MAAM,SAASE,MAAQ,kCAAkC;GACrD,UAAU,MAAM;GAChB,UAAU,MAAM;EACpB,CAAC;EACD,MAAM,UAAU,8BAA8B,OAAO,SAAS,GAAG,OAAO,SAAS;EACjF,MAAM,OAAO,sBACH,KAAKH,QAAQ,MAAM,IACxB,UAAU,MAAM,UAAU,+BAA+B,SAAS,KAAK,CAAC,CAC7E;EACA,OAAO,KAAKD,UAAU,oBAAoB;GACtC;GACA,QAAQK;GACR,gBAAgB,SAAS;IACrB,KAAK,UAAU;KACX,MAAM,SAASD,MAAQ,KAAKD,mBAAmB,IAAI;KACnD,MAAM,QAAQ,MAAM;IACxB,CAAC;GACL;GACA,aAAa,MAAM;GACnB,gBAAgB,MAAM;GACtB,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}