@polyester/sdk 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/_virtual/_rolldown/runtime.js +1 -15
  3. package/dist/catalogs/snapshot-validation.js +63 -63
  4. package/dist/catalogs/snapshot-validation.js.map +1 -1
  5. package/dist/core-client.d.ts +9 -0
  6. package/dist/core-client.d.ts.map +1 -1
  7. package/dist/core-client.js +21 -0
  8. package/dist/core-client.js.map +1 -1
  9. package/dist/gen/fees/v1/fees_pb.d.ts +124 -0
  10. package/dist/gen/fees/v1/fees_pb.d.ts.map +1 -0
  11. package/dist/gen/fees/v1/fees_pb.js +39 -0
  12. package/dist/gen/fees/v1/fees_pb.js.map +1 -0
  13. package/dist/gen/index.d.ts +4 -1
  14. package/dist/gen/index.js +4 -1
  15. package/dist/gen/ratelimit/v1/ratelimit_pb.d.ts +223 -0
  16. package/dist/gen/ratelimit/v1/ratelimit_pb.d.ts.map +1 -0
  17. package/dist/gen/ratelimit/v1/ratelimit_pb.js +86 -0
  18. package/dist/gen/ratelimit/v1/ratelimit_pb.js.map +1 -0
  19. package/dist/gen/vip/v1/vip_pb.d.ts +277 -0
  20. package/dist/gen/vip/v1/vip_pb.d.ts.map +1 -0
  21. package/dist/gen/vip/v1/vip_pb.js +60 -0
  22. package/dist/gen/vip/v1/vip_pb.js.map +1 -0
  23. package/dist/index.d.ts +8 -1
  24. package/dist/services/accounts/accounts.js +1 -1
  25. package/dist/services/accounts/accounts.js.map +1 -1
  26. package/dist/services/accounts/accounts.schemas.d.ts +13 -13
  27. package/dist/services/accounts/accounts.schemas.d.ts.map +1 -1
  28. package/dist/services/accounts/accounts.schemas.js +11 -11
  29. package/dist/services/accounts/accounts.schemas.js.map +1 -1
  30. package/dist/services/address-book/address-book.js.map +1 -1
  31. package/dist/services/address-book/address-book.schemas.d.ts +751 -751
  32. package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
  33. package/dist/services/address-book/address-book.schemas.js +160 -159
  34. package/dist/services/address-book/address-book.schemas.js.map +1 -1
  35. package/dist/services/api-keys/api-keys.d.ts +6 -6
  36. package/dist/services/api-keys/api-keys.d.ts.map +1 -1
  37. package/dist/services/api-keys/api-keys.js.map +1 -1
  38. package/dist/services/api-keys/api-keys.schemas.d.ts +62 -62
  39. package/dist/services/api-keys/api-keys.schemas.d.ts.map +1 -1
  40. package/dist/services/api-keys/api-keys.schemas.js +34 -34
  41. package/dist/services/api-keys/api-keys.schemas.js.map +1 -1
  42. package/dist/services/auth/auth.d.ts +39 -39
  43. package/dist/services/auth/auth.d.ts.map +1 -1
  44. package/dist/services/auth/auth.js +19 -18
  45. package/dist/services/auth/auth.js.map +1 -1
  46. package/dist/services/auth/profile/profile.d.ts +2 -2
  47. package/dist/services/auth/profile/profile.d.ts.map +1 -1
  48. package/dist/services/auth/profile/profile.js +3 -2
  49. package/dist/services/auth/profile/profile.js.map +1 -1
  50. package/dist/services/auth/profile/profile.schemas.d.ts +41 -41
  51. package/dist/services/auth/profile/profile.schemas.d.ts.map +1 -1
  52. package/dist/services/auth/profile/profile.schemas.js +27 -27
  53. package/dist/services/auth/profile/profile.schemas.js.map +1 -1
  54. package/dist/services/auth/session.schemas.js +17 -17
  55. package/dist/services/auth/session.schemas.js.map +1 -1
  56. package/dist/services/balances/balances.d.ts.map +1 -1
  57. package/dist/services/balances/balances.js +3 -2
  58. package/dist/services/balances/balances.js.map +1 -1
  59. package/dist/services/balances/balances.schemas.d.ts +95 -95
  60. package/dist/services/balances/balances.schemas.d.ts.map +1 -1
  61. package/dist/services/balances/balances.schemas.js +61 -61
  62. package/dist/services/balances/balances.schemas.js.map +1 -1
  63. package/dist/services/candles/candles.d.ts.map +1 -1
  64. package/dist/services/candles/candles.js +5 -4
  65. package/dist/services/candles/candles.js.map +1 -1
  66. package/dist/services/candles/candles.schemas.d.ts +64 -64
  67. package/dist/services/candles/candles.schemas.d.ts.map +1 -1
  68. package/dist/services/candles/candles.schemas.js +47 -47
  69. package/dist/services/candles/candles.schemas.js.map +1 -1
  70. package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
  71. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts +68 -68
  72. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
  73. package/dist/services/chain-analytics/chain-analytics.schemas.js +29 -29
  74. package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
  75. package/dist/services/deposit/deposit.js.map +1 -1
  76. package/dist/services/deposit/deposit.schemas.d.ts +17 -17
  77. package/dist/services/deposit/deposit.schemas.d.ts.map +1 -1
  78. package/dist/services/deposit/deposit.schemas.js +11 -11
  79. package/dist/services/deposit/deposit.schemas.js.map +1 -1
  80. package/dist/services/fees/fees.d.ts +19 -0
  81. package/dist/services/fees/fees.d.ts.map +1 -0
  82. package/dist/services/fees/fees.js +32 -0
  83. package/dist/services/fees/fees.js.map +1 -0
  84. package/dist/services/fees/fees.schemas.d.ts +28 -0
  85. package/dist/services/fees/fees.schemas.d.ts.map +1 -0
  86. package/dist/services/fees/fees.schemas.js +25 -0
  87. package/dist/services/fees/fees.schemas.js.map +1 -0
  88. package/dist/services/fees/fees.types.d.ts +2 -0
  89. package/dist/services/fees/index.d.ts +3 -0
  90. package/dist/services/guard-signer/guard-signer.js.map +1 -1
  91. package/dist/services/guard-signer/guard-signer.schemas.d.ts +75 -75
  92. package/dist/services/guard-signer/guard-signer.schemas.d.ts.map +1 -1
  93. package/dist/services/guard-signer/guard-signer.schemas.js +42 -42
  94. package/dist/services/guard-signer/guard-signer.schemas.js.map +1 -1
  95. package/dist/services/heatmap/heatmap.d.ts.map +1 -1
  96. package/dist/services/heatmap/heatmap.js +5 -4
  97. package/dist/services/heatmap/heatmap.js.map +1 -1
  98. package/dist/services/heatmap/heatmap.schemas.d.ts +138 -138
  99. package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
  100. package/dist/services/heatmap/heatmap.schemas.js +47 -47
  101. package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
  102. package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
  103. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +53 -53
  104. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
  105. package/dist/services/internal-transfers/internal-transfers.schemas.js +27 -27
  106. package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
  107. package/dist/services/lifecycle/lifecycle.d.ts.map +1 -1
  108. package/dist/services/lifecycle/lifecycle.js +3 -2
  109. package/dist/services/lifecycle/lifecycle.js.map +1 -1
  110. package/dist/services/lifecycle/lifecycle.schemas.d.ts +614 -614
  111. package/dist/services/lifecycle/lifecycle.schemas.d.ts.map +1 -1
  112. package/dist/services/lifecycle/lifecycle.schemas.js +146 -146
  113. package/dist/services/lifecycle/lifecycle.schemas.js.map +1 -1
  114. package/dist/services/market-data/market-data.d.ts.map +1 -1
  115. package/dist/services/market-data/market-data.js +4 -3
  116. package/dist/services/market-data/market-data.js.map +1 -1
  117. package/dist/services/market-data/market-data.schemas.d.ts +19 -19
  118. package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
  119. package/dist/services/market-data/market-data.schemas.js +50 -50
  120. package/dist/services/market-data/market-data.schemas.js.map +1 -1
  121. package/dist/services/market-overview/market-overview.d.ts.map +1 -1
  122. package/dist/services/market-overview/market-overview.js +3 -2
  123. package/dist/services/market-overview/market-overview.js.map +1 -1
  124. package/dist/services/market-overview/market-overview.schemas.d.ts +37 -37
  125. package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
  126. package/dist/services/market-overview/market-overview.schemas.js +33 -33
  127. package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
  128. package/dist/services/mfa/mfa.js +1 -1
  129. package/dist/services/mfa/mfa.js.map +1 -1
  130. package/dist/services/mfa/mfa.schemas.d.ts +206 -206
  131. package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
  132. package/dist/services/mfa/mfa.schemas.js +83 -83
  133. package/dist/services/mfa/mfa.schemas.js.map +1 -1
  134. package/dist/services/orderbook/orderbook.d.ts +2 -2
  135. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  136. package/dist/services/orderbook/orderbook.js +3 -2
  137. package/dist/services/orderbook/orderbook.js.map +1 -1
  138. package/dist/services/orderbook/orderbook.schemas.d.ts +23 -23
  139. package/dist/services/orderbook/orderbook.schemas.d.ts.map +1 -1
  140. package/dist/services/orderbook/orderbook.schemas.js +15 -15
  141. package/dist/services/orderbook/orderbook.schemas.js.map +1 -1
  142. package/dist/services/orders/order-errors.schemas.d.ts +18 -18
  143. package/dist/services/orders/order-errors.schemas.d.ts.map +1 -1
  144. package/dist/services/orders/order-errors.schemas.js +8 -8
  145. package/dist/services/orders/order-errors.schemas.js.map +1 -1
  146. package/dist/services/orders/orders-batch.schemas.d.ts +492 -492
  147. package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
  148. package/dist/services/orders/orders-batch.schemas.js +117 -117
  149. package/dist/services/orders/orders-batch.schemas.js.map +1 -1
  150. package/dist/services/orders/orders-identifiers.schemas.js +5 -5
  151. package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
  152. package/dist/services/orders/orders-input.schemas.d.ts +648 -648
  153. package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
  154. package/dist/services/orders/orders-input.schemas.js +95 -95
  155. package/dist/services/orders/orders-input.schemas.js.map +1 -1
  156. package/dist/services/orders/orders-modify.schemas.d.ts +351 -351
  157. package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
  158. package/dist/services/orders/orders-modify.schemas.js +44 -44
  159. package/dist/services/orders/orders-modify.schemas.js.map +1 -1
  160. package/dist/services/orders/orders-output.schemas.d.ts +179 -179
  161. package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
  162. package/dist/services/orders/orders-output.schemas.js +49 -49
  163. package/dist/services/orders/orders-output.schemas.js.map +1 -1
  164. package/dist/services/orders/orders-risk.schemas.d.ts +226 -226
  165. package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
  166. package/dist/services/orders/orders-risk.schemas.js +69 -69
  167. package/dist/services/orders/orders-risk.schemas.js.map +1 -1
  168. package/dist/services/orders/orders.d.ts +6 -6
  169. package/dist/services/orders/orders.d.ts.map +1 -1
  170. package/dist/services/orders/orders.js +4 -3
  171. package/dist/services/orders/orders.js.map +1 -1
  172. package/dist/services/policies/api-key-policies/api-key-policies.d.ts +6 -6
  173. package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
  174. package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
  175. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts +105 -105
  176. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts.map +1 -1
  177. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js +49 -49
  178. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js.map +1 -1
  179. package/dist/services/policies/shared.d.ts +5 -5
  180. package/dist/services/policies/shared.d.ts.map +1 -1
  181. package/dist/services/policies/shared.js +10 -10
  182. package/dist/services/policies/shared.js.map +1 -1
  183. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +6 -6
  184. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
  185. package/dist/services/policies/subaccount-policies/subaccount-policies.js +3 -2
  186. package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
  187. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +124 -124
  188. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
  189. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +75 -75
  190. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
  191. package/dist/services/rate-limits/index.d.ts +4 -0
  192. package/dist/services/rate-limits/rate-limits.codecs.d.ts +6 -0
  193. package/dist/services/rate-limits/rate-limits.codecs.d.ts.map +1 -0
  194. package/dist/services/rate-limits/rate-limits.codecs.js +11 -0
  195. package/dist/services/rate-limits/rate-limits.codecs.js.map +1 -0
  196. package/dist/services/rate-limits/rate-limits.d.ts +24 -0
  197. package/dist/services/rate-limits/rate-limits.d.ts.map +1 -0
  198. package/dist/services/rate-limits/rate-limits.js +40 -0
  199. package/dist/services/rate-limits/rate-limits.js.map +1 -0
  200. package/dist/services/rate-limits/rate-limits.schemas.d.ts +58 -0
  201. package/dist/services/rate-limits/rate-limits.schemas.d.ts.map +1 -0
  202. package/dist/services/rate-limits/rate-limits.schemas.js +30 -0
  203. package/dist/services/rate-limits/rate-limits.schemas.js.map +1 -0
  204. package/dist/services/rate-limits/rate-limits.types.d.ts +3 -0
  205. package/dist/services/shared.js +11 -11
  206. package/dist/services/shared.js.map +1 -1
  207. package/dist/services/social-verification/social-verification.d.ts +3 -3
  208. package/dist/services/social-verification/social-verification.d.ts.map +1 -1
  209. package/dist/services/social-verification/social-verification.js.map +1 -1
  210. package/dist/services/social-verification/social-verification.schemas.d.ts +54 -54
  211. package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
  212. package/dist/services/social-verification/social-verification.schemas.js +28 -28
  213. package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
  214. package/dist/services/subaccounts/subaccounts.d.ts +14 -14
  215. package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
  216. package/dist/services/subaccounts/subaccounts.js +9 -8
  217. package/dist/services/subaccounts/subaccounts.js.map +1 -1
  218. package/dist/services/subaccounts/subaccounts.schemas.d.ts +137 -137
  219. package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
  220. package/dist/services/subaccounts/subaccounts.schemas.js +72 -72
  221. package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
  222. package/dist/services/trades/trades.d.ts +2 -2
  223. package/dist/services/trades/trades.d.ts.map +1 -1
  224. package/dist/services/trades/trades.js +3 -2
  225. package/dist/services/trades/trades.js.map +1 -1
  226. package/dist/services/trades/trades.schemas.d.ts +31 -31
  227. package/dist/services/trades/trades.schemas.d.ts.map +1 -1
  228. package/dist/services/trades/trades.schemas.js +24 -24
  229. package/dist/services/trades/trades.schemas.js.map +1 -1
  230. package/dist/services/trading-withdraws/trading-withdraws.js +1 -1
  231. package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
  232. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts +45 -45
  233. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
  234. package/dist/services/trading-withdraws/trading-withdraws.schemas.js +36 -36
  235. package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
  236. package/dist/services/transfers/transfers.d.ts.map +1 -1
  237. package/dist/services/transfers/transfers.js +3 -2
  238. package/dist/services/transfers/transfers.js.map +1 -1
  239. package/dist/services/transfers/transfers.schemas.d.ts +42 -42
  240. package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
  241. package/dist/services/transfers/transfers.schemas.js +30 -30
  242. package/dist/services/transfers/transfers.schemas.js.map +1 -1
  243. package/dist/services/triggers/trigger-child-order.schemas.js +23 -23
  244. package/dist/services/triggers/trigger-child-order.schemas.js.map +1 -1
  245. package/dist/services/triggers/trigger-input.schemas.d.ts +226 -226
  246. package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
  247. package/dist/services/triggers/trigger-input.schemas.js +53 -53
  248. package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
  249. package/dist/services/triggers/triggers-output.schemas.d.ts +218 -218
  250. package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
  251. package/dist/services/triggers/triggers-output.schemas.js +152 -152
  252. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  253. package/dist/services/triggers/triggers.d.ts.map +1 -1
  254. package/dist/services/triggers/triggers.js +4 -3
  255. package/dist/services/triggers/triggers.js.map +1 -1
  256. package/dist/services/vip/index.d.ts +3 -0
  257. package/dist/services/vip/vip.d.ts +22 -0
  258. package/dist/services/vip/vip.d.ts.map +1 -0
  259. package/dist/services/vip/vip.js +35 -0
  260. package/dist/services/vip/vip.js.map +1 -0
  261. package/dist/services/vip/vip.schemas.d.ts +90 -0
  262. package/dist/services/vip/vip.schemas.d.ts.map +1 -0
  263. package/dist/services/vip/vip.schemas.js +47 -0
  264. package/dist/services/vip/vip.schemas.js.map +1 -0
  265. package/dist/services/vip/vip.types.d.ts +2 -0
  266. package/dist/services/whiteboard/whiteboard.js.map +1 -1
  267. package/dist/services/whiteboard/whiteboard.schemas.d.ts +379 -379
  268. package/dist/services/whiteboard/whiteboard.schemas.d.ts.map +1 -1
  269. package/dist/services/whiteboard/whiteboard.schemas.js +71 -71
  270. package/dist/services/whiteboard/whiteboard.schemas.js.map +1 -1
  271. package/dist/services/zipper/zipper.js.map +1 -1
  272. package/dist/services/zipper/zipper.schemas.d.ts +1 -1
  273. package/dist/services/zipper/zipper.schemas.js +54 -54
  274. package/dist/services/zipper/zipper.schemas.js.map +1 -1
  275. package/dist/shared/account-scope.d.ts +6 -6
  276. package/dist/shared/account-scope.d.ts.map +1 -1
  277. package/dist/shared/account-scope.js +3 -3
  278. package/dist/shared/account-scope.js.map +1 -1
  279. package/dist/shared/connect-error-mapping.js +2 -2
  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/validation.js +1 -6
  288. package/dist/shared/validation.js.map +1 -1
  289. package/dist/utils/connect-order-errors.js +2 -2
  290. package/dist/utils/connect-order-errors.js.map +1 -1
  291. package/dist/wired-services.d.ts.map +1 -1
  292. package/dist/wired-services.js +6 -0
  293. package/dist/wired-services.js.map +1 -1
  294. package/package.json +3 -3
  295. package/dist/shared/validation.d.ts +0 -14
  296. package/dist/shared/validation.d.ts.map +0 -1
@@ -1,37 +1,37 @@
1
- import { validation_exports } from "../../shared/validation.js";
2
1
  import { requiredEnumLabel } from "../../shared/proto-enum-codec.js";
3
2
  import { tsNsToMs } from "../../utils/time.js";
4
3
  import { scaledToDecimalOutput } from "../../shared/decimal-surface.js";
5
4
  import { SparklineInterval } from "../../gen/marketoverview/v1/marketoverview_pb.js";
6
5
  import { MARKET_OVERVIEW_ORDER_BY_VALUES, MARKET_OVERVIEW_SORT_VALUES, MarketOverviewOrderByCodec, MarketOverviewSortCodec, SPARKLINE_INTERVAL_VALUES, SparklineIntervalCodec } from "./market-overview.codecs.js";
6
+ import * as v from "valibot";
7
7
  //#region src/services/market-overview/market-overview.schemas.ts
8
- const SparklineIntervalSchema = validation_exports.picklist(SPARKLINE_INTERVAL_VALUES);
9
- const MarketOverviewSparklineRawSchema = validation_exports.object({
10
- interval: validation_exports.pipe(validation_exports.enum(SparklineInterval), validation_exports.transform((value) => requiredEnumLabel(SparklineIntervalCodec.protoToOutput, value, "MarketOverviewSparklineSchema", "interval"))),
11
- closeTicks: validation_exports.array(validation_exports.bigint())
8
+ const SparklineIntervalSchema = v.picklist(SPARKLINE_INTERVAL_VALUES);
9
+ const MarketOverviewSparklineRawSchema = v.object({
10
+ interval: v.pipe(v.enum(SparklineInterval), v.transform((value) => requiredEnumLabel(SparklineIntervalCodec.protoToOutput, value, "MarketOverviewSparklineSchema", "interval"))),
11
+ closeTicks: v.array(v.bigint())
12
12
  });
13
- const MarketOverviewOrderBySchema = validation_exports.picklist(MARKET_OVERVIEW_ORDER_BY_VALUES);
14
- const MarketOverviewSortSchema = validation_exports.picklist(MARKET_OVERVIEW_SORT_VALUES);
15
- const MarketOverviewRawSchema = validation_exports.object({
16
- symbolId: validation_exports.number(),
17
- symbol: validation_exports.string(),
18
- lastPriceTicks: validation_exports.bigint(),
19
- lastTradeTsNs: validation_exports.optional(validation_exports.bigint(), 0n),
20
- change24hBps: validation_exports.number(),
21
- high24hTicks: validation_exports.bigint(),
22
- low24hTicks: validation_exports.bigint(),
23
- volume24hBaseScaled: validation_exports.bigint(),
24
- volume24hQuoteScaled: validation_exports.bigint(),
25
- listedTsNs: validation_exports.optional(validation_exports.bigint(), 0n),
26
- bestBidTicks: validation_exports.bigint(),
27
- bestBidQtyScaled: validation_exports.bigint(),
28
- bestAskTicks: validation_exports.bigint(),
29
- bestAskQtyScaled: validation_exports.bigint(),
30
- sparklines: validation_exports.optional(validation_exports.array(MarketOverviewSparklineRawSchema), []),
31
- indexPriceTicks: validation_exports.bigint()
13
+ const MarketOverviewOrderBySchema = v.picklist(MARKET_OVERVIEW_ORDER_BY_VALUES);
14
+ const MarketOverviewSortSchema = v.picklist(MARKET_OVERVIEW_SORT_VALUES);
15
+ const MarketOverviewRawSchema = v.object({
16
+ symbolId: v.number(),
17
+ symbol: v.string(),
18
+ lastPriceTicks: v.bigint(),
19
+ lastTradeTsNs: v.optional(v.bigint(), 0n),
20
+ change24hBps: v.number(),
21
+ high24hTicks: v.bigint(),
22
+ low24hTicks: v.bigint(),
23
+ volume24hBaseScaled: v.bigint(),
24
+ volume24hQuoteScaled: v.bigint(),
25
+ listedTsNs: v.optional(v.bigint(), 0n),
26
+ bestBidTicks: v.bigint(),
27
+ bestBidQtyScaled: v.bigint(),
28
+ bestAskTicks: v.bigint(),
29
+ bestAskQtyScaled: v.bigint(),
30
+ sparklines: v.optional(v.array(MarketOverviewSparklineRawSchema), []),
31
+ indexPriceTicks: v.bigint()
32
32
  });
33
33
  function createMarketOverviewSchema(scales) {
34
- return validation_exports.pipe(MarketOverviewRawSchema, validation_exports.transform((m) => {
34
+ return v.pipe(MarketOverviewRawSchema, v.transform((m) => {
35
35
  const priceScale = scales.price();
36
36
  const baseQtyScale = scales.baseQty(m.symbolId);
37
37
  const quoteAmountScale = scales.quoteAmount(m.symbolId);
@@ -58,14 +58,14 @@ function createMarketOverviewSchema(scales) {
58
58
  };
59
59
  }));
60
60
  }
61
- const ListMarketOverviewInputSchema = validation_exports.object({
62
- symbols: validation_exports.optional(validation_exports.array(validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1))), []),
63
- limit: validation_exports.optional(validation_exports.pipe(validation_exports.number(), validation_exports.integer(), validation_exports.gtValue(0)), 500),
64
- pageToken: validation_exports.optional(validation_exports.pipe(validation_exports.string(), validation_exports.trim()), ""),
65
- orderBy: validation_exports.pipe(validation_exports.optional(MarketOverviewOrderBySchema, "volume_24h_quote"), validation_exports.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? "volume_24h_quote"])),
66
- sort: validation_exports.pipe(validation_exports.optional(MarketOverviewSortSchema, "desc"), validation_exports.transform((v) => MarketOverviewSortCodec.inputToProto[v ?? "desc"])),
67
- includeSparklines: validation_exports.optional(validation_exports.boolean(), true),
68
- sparklineIntervals: validation_exports.pipe(validation_exports.optional(validation_exports.array(SparklineIntervalSchema), ["24h"]), validation_exports.transform((intervals) => (intervals ?? ["24h"]).map((v) => SparklineIntervalCodec.inputToProto[v])))
61
+ const ListMarketOverviewInputSchema = v.object({
62
+ symbols: v.optional(v.array(v.pipe(v.string(), v.trim(), v.minLength(1))), []),
63
+ limit: v.optional(v.pipe(v.number(), v.integer(), v.gtValue(0)), 500),
64
+ pageToken: v.optional(v.pipe(v.string(), v.trim()), ""),
65
+ orderBy: v.pipe(v.optional(MarketOverviewOrderBySchema, "volume_24h_quote"), v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? "volume_24h_quote"])),
66
+ sort: v.pipe(v.optional(MarketOverviewSortSchema, "desc"), v.transform((v) => MarketOverviewSortCodec.inputToProto[v ?? "desc"])),
67
+ includeSparklines: v.optional(v.boolean(), true),
68
+ sparklineIntervals: v.pipe(v.optional(v.array(SparklineIntervalSchema), ["24h"]), v.transform((intervals) => (intervals ?? ["24h"]).map((v) => SparklineIntervalCodec.inputToProto[v])))
69
69
  });
70
70
  //#endregion
71
71
  export { ListMarketOverviewInputSchema, MarketOverviewOrderBySchema, MarketOverviewSortSchema, SparklineIntervalSchema, createMarketOverviewSchema };
@@ -1 +1 @@
1
- {"version":3,"file":"market-overview.schemas.js","names":["v","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 \"../../shared/validation.js\";\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 {\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: v.number(),\n symbol: v.string(),\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 symbol: m.symbol,\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.object({\n symbols: v.optional(v.array(v.pipe(v.string(), v.trim(), v.minLength(1))), []),\n limit: v.optional(v.pipe(v.number(), v.integer(), v.gtValue(0)), 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\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 {\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: v.number(),\n symbol: v.string(),\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 symbol: m.symbol,\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.object({\n symbols: v.optional(v.array(v.pipe(v.string(), v.trim(), v.minLength(1))), []),\n limit: v.optional(v.pipe(v.number(), v.integer(), v.gtValue(0)), 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\nexport type ListMarketOverviewInput = v.InferInput<typeof ListMarketOverviewInputSchema>;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { parse } from "../../shared/validation.js";
2
1
  import { MFAService } from "../../gen/auth/v1/mfa_pb.js";
2
+ import { parse } from "../../shared/validation.js";
3
3
  import { toConnectCallOptions } from "../../shared/request-options.js";
4
4
  import { removeUndefined } from "../../utils/remove-undefined.js";
5
5
  import { BeginMfaChallengeInputSchema, BeginMfaChallengeResultSchema, BeginPasskeyEnrollmentInputSchema, BeginPasskeyEnrollmentResultSchema, BeginTotpEnrollmentInputSchema, BeginTotpEnrollmentResultSchema, ClaimFreshStepUpInputSchema, ClaimFreshStepUpResultSchema, CompleteMfaChallengeResultSchema, ConsumeFreshStepUpInputSchema, DeleteMfaFactorInputSchema, FinishPasskeyChallengeInputSchema, FinishPasskeyEnrollmentInputSchema, FinishPasskeyEnrollmentResultSchema, FinishTotpEnrollmentInputSchema, FinishTotpEnrollmentResultSchema, ListMfaFactorsResponseSchema, RegenerateRecoveryCodesInputSchema, RegenerateRecoveryCodesResultSchema, ReleaseFreshStepUpInputSchema, UpdateMfaFactorInputSchema, UpdateMfaFactorResultSchema, VerifyRecoveryCodeChallengeInputSchema, VerifyTotpChallengeInputSchema } from "./mfa.schemas.js";
@@ -1 +1 @@
1
- {"version":3,"file":"mfa.js","names":["#client","Proto.MFAService","v.parse"],"sources":["../../../src/services/mfa/mfa.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport * as v from \"../../shared/validation.js\";\nimport {\n BeginMfaChallengeInputSchema,\n BeginMfaChallengeResultSchema,\n BeginPasskeyEnrollmentInputSchema,\n BeginPasskeyEnrollmentResultSchema,\n BeginTotpEnrollmentInputSchema,\n BeginTotpEnrollmentResultSchema,\n ClaimFreshStepUpInputSchema,\n ClaimFreshStepUpResultSchema,\n CompleteMfaChallengeResultSchema,\n ConsumeFreshStepUpInputSchema,\n DeleteMfaFactorInputSchema,\n UpdateMfaFactorInputSchema,\n UpdateMfaFactorResultSchema,\n FinishPasskeyChallengeInputSchema,\n FinishPasskeyEnrollmentInputSchema,\n FinishPasskeyEnrollmentResultSchema,\n FinishTotpEnrollmentInputSchema,\n FinishTotpEnrollmentResultSchema,\n ListMfaFactorsResponseSchema,\n RegenerateRecoveryCodesInputSchema,\n RegenerateRecoveryCodesResultSchema,\n ReleaseFreshStepUpInputSchema,\n VerifyRecoveryCodeChallengeInputSchema,\n VerifyTotpChallengeInputSchema,\n type BeginMfaChallengeInput,\n type BeginMfaChallengeResult,\n type BeginPasskeyEnrollmentInput,\n type BeginPasskeyEnrollmentResult,\n type BeginTotpEnrollmentInput,\n type BeginTotpEnrollmentResult,\n type ClaimFreshStepUpInput,\n type ClaimFreshStepUpResult,\n type CompleteMfaChallengeResult,\n type ConsumeFreshStepUpInput,\n type DeleteMfaFactorInput,\n type UpdateMfaFactorInput,\n type UpdateMfaFactorResult,\n type FinishPasskeyChallengeInput,\n type FinishPasskeyEnrollmentInput,\n type FinishPasskeyEnrollmentResult,\n type FinishTotpEnrollmentInput,\n type FinishTotpEnrollmentResult,\n type ListMfaFactorsResult,\n type RegenerateRecoveryCodesInput,\n type RegenerateRecoveryCodesResult,\n type ReleaseFreshStepUpInput,\n type VerifyRecoveryCodeChallengeInput,\n type VerifyTotpChallengeInput,\n} from \"./mfa.schemas.js\";\n\n/**\n * Manages MFA enrollment, challenges, recovery codes, session elevation, and fresh step-up proofs.\n */\nexport class MfaService {\n #client: Client<typeof Proto.MFAService>;\n\n constructor(transport: Transport) {\n this.#client = createClient(Proto.MFAService, transport);\n }\n\n /**\n * Returns the caller's enrolled MFA factors, oldest first, and whether unused recovery codes exist.\n */\n async listFactors(options?: PolyesterRequestOptions): Promise<ListMfaFactorsResult> {\n const res = await this.#client.listMFAFactors({}, toConnectCallOptions(options));\n return v.parse(ListMfaFactorsResponseSchema, res);\n }\n\n /**\n * Creates an authenticator-app enrollment challenge and returns the secret, QR-compatible otpauth URI, enrollment ID, and expiry.\n */\n async beginTotpEnrollment(\n input: BeginTotpEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginTotpEnrollmentResult> {\n const req = v.parse(BeginTotpEnrollmentInputSchema, input);\n const res = await this.#client.beginTOTPEnrollment(req, toConnectCallOptions(options));\n return v.parse(BeginTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the first authenticator code, activates the factor, and returns one-time recovery codes that are only shown in this response.\n */\n async finishTotpEnrollment(\n input: FinishTotpEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishTotpEnrollmentResult> {\n const req = v.parse(FinishTotpEnrollmentInputSchema, input);\n const res = await this.#client.finishTOTPEnrollment(req, toConnectCallOptions(options));\n return v.parse(FinishTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Creates passkey registration options for a new factor and returns the enrollment challenge and expiry.\n */\n async beginPasskeyEnrollment(\n input: BeginPasskeyEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginPasskeyEnrollmentResult> {\n const req = v.parse(BeginPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.beginPasskeyEnrollment(req, toConnectCallOptions(options));\n return v.parse(BeginPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the passkey registration response, activates the factor, and returns one-time recovery codes.\n */\n async finishPasskeyEnrollment(\n input: FinishPasskeyEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishPasskeyEnrollmentResult> {\n const req = v.parse(FinishPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.finishPasskeyEnrollment(req, toConnectCallOptions(options));\n return v.parse(FinishPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Starts an MFA challenge for either session elevation or fresh step-up and returns allowed factor types plus passkey request options when available.\n */\n async beginChallenge(\n input: BeginMfaChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<BeginMfaChallengeResult> {\n const req = v.parse(BeginMfaChallengeInputSchema, input);\n const res = await this.#client.beginMFAChallenge(req, toConnectCallOptions(options));\n return v.parse(BeginMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with an authenticator code, returning either an elevated access token or a fresh step-up token depending on the challenge purpose.\n */\n async verifyTotpChallenge(\n input: VerifyTotpChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = v.parse(VerifyTotpChallengeInputSchema, input);\n const res = await this.#client.verifyTOTPChallenge(req, toConnectCallOptions(options));\n return v.parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with a passkey authentication response, returning session assurance and the relevant token for the challenge purpose.\n */\n async finishPasskeyChallenge(\n input: FinishPasskeyChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = v.parse(FinishPasskeyChallengeInputSchema, input);\n const res = await this.#client.finishPasskeyChallenge(req, toConnectCallOptions(options));\n return v.parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Consumes a one-time recovery code to complete session elevation or fresh step-up.\n */\n async verifyRecoveryCodeChallenge(\n input: VerifyRecoveryCodeChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = v.parse(VerifyRecoveryCodeChallengeInputSchema, input);\n const res = await this.#client.verifyRecoveryCodeChallenge(\n req,\n toConnectCallOptions(options),\n );\n return v.parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Removes an enrolled MFA factor by factor ID; backend policy may require fresh step-up for this protected action.\n */\n async deleteFactor(\n input: DeleteMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const { factorId } = v.parse(DeleteMfaFactorInputSchema, input);\n await this.#client.deleteMFAFactor({ factorId }, toConnectCallOptions(options));\n }\n\n /**\n * Updates an MFA factor label, where an empty label clears the display name.\n */\n async updateFactor(\n input: UpdateMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<UpdateMfaFactorResult> {\n const { factorId, label } = v.parse(UpdateMfaFactorInputSchema, input);\n const res = await this.#client.updateMFAFactor(\n { factorId, label },\n toConnectCallOptions(options),\n );\n return v.parse(UpdateMfaFactorResultSchema, res);\n }\n\n /**\n * Rotates recovery codes after step-up and returns the new one-time codes, which are only available in this response.\n */\n async regenerateRecoveryCodes(\n input: RegenerateRecoveryCodesInput = {},\n options?: PolyesterMutationOptions,\n ): Promise<RegenerateRecoveryCodesResult> {\n v.parse(RegenerateRecoveryCodesInputSchema, input);\n const res = await this.#client.regenerateRecoveryCodes({}, toConnectCallOptions(options));\n return v.parse(RegenerateRecoveryCodesResultSchema, res);\n }\n\n /**\n * Binds a fresh step-up proof to one protected request using a request ID, action type, and subject, returning a claim nonce and expiry.\n */\n async claimFreshStepUp(\n input: ClaimFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<ClaimFreshStepUpResult> {\n const req = v.parse(ClaimFreshStepUpInputSchema, input);\n const res = await this.#client.claimFreshStepUp(req, toConnectCallOptions(options));\n return v.parse(ClaimFreshStepUpResultSchema, res);\n }\n\n /**\n * Marks a claimed fresh step-up proof as used after the protected request succeeds, echoing the original request binding and claim nonce.\n */\n async consumeFreshStepUp(\n input: ConsumeFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = v.parse(ConsumeFreshStepUpInputSchema, input);\n await this.#client.consumeFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n\n /**\n * Releases a claimed fresh step-up proof when the protected request is abandoned or fails, preserving the original request binding and reason.\n */\n async releaseFreshStepUp(\n input: ReleaseFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = v.parse(ReleaseFreshStepUpInputSchema, input);\n await this.#client.releaseFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mfa.js","names":["#client","Proto.MFAService"],"sources":["../../../src/services/mfa/mfa.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n BeginMfaChallengeInputSchema,\n BeginMfaChallengeResultSchema,\n BeginPasskeyEnrollmentInputSchema,\n BeginPasskeyEnrollmentResultSchema,\n BeginTotpEnrollmentInputSchema,\n BeginTotpEnrollmentResultSchema,\n ClaimFreshStepUpInputSchema,\n ClaimFreshStepUpResultSchema,\n CompleteMfaChallengeResultSchema,\n ConsumeFreshStepUpInputSchema,\n DeleteMfaFactorInputSchema,\n UpdateMfaFactorInputSchema,\n UpdateMfaFactorResultSchema,\n FinishPasskeyChallengeInputSchema,\n FinishPasskeyEnrollmentInputSchema,\n FinishPasskeyEnrollmentResultSchema,\n FinishTotpEnrollmentInputSchema,\n FinishTotpEnrollmentResultSchema,\n ListMfaFactorsResponseSchema,\n RegenerateRecoveryCodesInputSchema,\n RegenerateRecoveryCodesResultSchema,\n ReleaseFreshStepUpInputSchema,\n VerifyRecoveryCodeChallengeInputSchema,\n VerifyTotpChallengeInputSchema,\n type BeginMfaChallengeInput,\n type BeginMfaChallengeResult,\n type BeginPasskeyEnrollmentInput,\n type BeginPasskeyEnrollmentResult,\n type BeginTotpEnrollmentInput,\n type BeginTotpEnrollmentResult,\n type ClaimFreshStepUpInput,\n type ClaimFreshStepUpResult,\n type CompleteMfaChallengeResult,\n type ConsumeFreshStepUpInput,\n type DeleteMfaFactorInput,\n type UpdateMfaFactorInput,\n type UpdateMfaFactorResult,\n type FinishPasskeyChallengeInput,\n type FinishPasskeyEnrollmentInput,\n type FinishPasskeyEnrollmentResult,\n type FinishTotpEnrollmentInput,\n type FinishTotpEnrollmentResult,\n type ListMfaFactorsResult,\n type RegenerateRecoveryCodesInput,\n type RegenerateRecoveryCodesResult,\n type ReleaseFreshStepUpInput,\n type VerifyRecoveryCodeChallengeInput,\n type VerifyTotpChallengeInput,\n} from \"./mfa.schemas.js\";\n\n/**\n * Manages MFA enrollment, challenges, recovery codes, session elevation, and fresh step-up proofs.\n */\nexport class MfaService {\n #client: Client<typeof Proto.MFAService>;\n\n constructor(transport: Transport) {\n this.#client = createClient(Proto.MFAService, transport);\n }\n\n /**\n * Returns the caller's enrolled MFA factors, oldest first, and whether unused recovery codes exist.\n */\n async listFactors(options?: PolyesterRequestOptions): Promise<ListMfaFactorsResult> {\n const res = await this.#client.listMFAFactors({}, toConnectCallOptions(options));\n return parse(ListMfaFactorsResponseSchema, res);\n }\n\n /**\n * Creates an authenticator-app enrollment challenge and returns the secret, QR-compatible otpauth URI, enrollment ID, and expiry.\n */\n async beginTotpEnrollment(\n input: BeginTotpEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginTotpEnrollmentResult> {\n const req = parse(BeginTotpEnrollmentInputSchema, input);\n const res = await this.#client.beginTOTPEnrollment(req, toConnectCallOptions(options));\n return parse(BeginTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the first authenticator code, activates the factor, and returns one-time recovery codes that are only shown in this response.\n */\n async finishTotpEnrollment(\n input: FinishTotpEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishTotpEnrollmentResult> {\n const req = parse(FinishTotpEnrollmentInputSchema, input);\n const res = await this.#client.finishTOTPEnrollment(req, toConnectCallOptions(options));\n return parse(FinishTotpEnrollmentResultSchema, res);\n }\n\n /**\n * Creates passkey registration options for a new factor and returns the enrollment challenge and expiry.\n */\n async beginPasskeyEnrollment(\n input: BeginPasskeyEnrollmentInput,\n options?: PolyesterMutationOptions,\n ): Promise<BeginPasskeyEnrollmentResult> {\n const req = parse(BeginPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.beginPasskeyEnrollment(req, toConnectCallOptions(options));\n return parse(BeginPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Verifies the passkey registration response, activates the factor, and returns one-time recovery codes.\n */\n async finishPasskeyEnrollment(\n input: FinishPasskeyEnrollmentInput,\n options?: PolyesterRequestOptions,\n ): Promise<FinishPasskeyEnrollmentResult> {\n const req = parse(FinishPasskeyEnrollmentInputSchema, input);\n const res = await this.#client.finishPasskeyEnrollment(req, toConnectCallOptions(options));\n return parse(FinishPasskeyEnrollmentResultSchema, res);\n }\n\n /**\n * Starts an MFA challenge for either session elevation or fresh step-up and returns allowed factor types plus passkey request options when available.\n */\n async beginChallenge(\n input: BeginMfaChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<BeginMfaChallengeResult> {\n const req = parse(BeginMfaChallengeInputSchema, input);\n const res = await this.#client.beginMFAChallenge(req, toConnectCallOptions(options));\n return parse(BeginMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with an authenticator code, returning either an elevated access token or a fresh step-up token depending on the challenge purpose.\n */\n async verifyTotpChallenge(\n input: VerifyTotpChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(VerifyTotpChallengeInputSchema, input);\n const res = await this.#client.verifyTOTPChallenge(req, toConnectCallOptions(options));\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Completes a challenge with a passkey authentication response, returning session assurance and the relevant token for the challenge purpose.\n */\n async finishPasskeyChallenge(\n input: FinishPasskeyChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(FinishPasskeyChallengeInputSchema, input);\n const res = await this.#client.finishPasskeyChallenge(req, toConnectCallOptions(options));\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Consumes a one-time recovery code to complete session elevation or fresh step-up.\n */\n async verifyRecoveryCodeChallenge(\n input: VerifyRecoveryCodeChallengeInput,\n options?: PolyesterRequestOptions,\n ): Promise<CompleteMfaChallengeResult> {\n const req = parse(VerifyRecoveryCodeChallengeInputSchema, input);\n const res = await this.#client.verifyRecoveryCodeChallenge(\n req,\n toConnectCallOptions(options),\n );\n return parse(CompleteMfaChallengeResultSchema, res);\n }\n\n /**\n * Removes an enrolled MFA factor by factor ID; backend policy may require fresh step-up for this protected action.\n */\n async deleteFactor(\n input: DeleteMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const { factorId } = parse(DeleteMfaFactorInputSchema, input);\n await this.#client.deleteMFAFactor({ factorId }, toConnectCallOptions(options));\n }\n\n /**\n * Updates an MFA factor label, where an empty label clears the display name.\n */\n async updateFactor(\n input: UpdateMfaFactorInput,\n options?: PolyesterMutationOptions,\n ): Promise<UpdateMfaFactorResult> {\n const { factorId, label } = parse(UpdateMfaFactorInputSchema, input);\n const res = await this.#client.updateMFAFactor(\n { factorId, label },\n toConnectCallOptions(options),\n );\n return parse(UpdateMfaFactorResultSchema, res);\n }\n\n /**\n * Rotates recovery codes after step-up and returns the new one-time codes, which are only available in this response.\n */\n async regenerateRecoveryCodes(\n input: RegenerateRecoveryCodesInput = {},\n options?: PolyesterMutationOptions,\n ): Promise<RegenerateRecoveryCodesResult> {\n parse(RegenerateRecoveryCodesInputSchema, input);\n const res = await this.#client.regenerateRecoveryCodes({}, toConnectCallOptions(options));\n return parse(RegenerateRecoveryCodesResultSchema, res);\n }\n\n /**\n * Binds a fresh step-up proof to one protected request using a request ID, action type, and subject, returning a claim nonce and expiry.\n */\n async claimFreshStepUp(\n input: ClaimFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<ClaimFreshStepUpResult> {\n const req = parse(ClaimFreshStepUpInputSchema, input);\n const res = await this.#client.claimFreshStepUp(req, toConnectCallOptions(options));\n return parse(ClaimFreshStepUpResultSchema, res);\n }\n\n /**\n * Marks a claimed fresh step-up proof as used after the protected request succeeds, echoing the original request binding and claim nonce.\n */\n async consumeFreshStepUp(\n input: ConsumeFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = parse(ConsumeFreshStepUpInputSchema, input);\n await this.#client.consumeFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n\n /**\n * Releases a claimed fresh step-up proof when the protected request is abandoned or fails, preserving the original request binding and reason.\n */\n async releaseFreshStepUp(\n input: ReleaseFreshStepUpInput,\n options?: PolyesterRequestOptions,\n ): Promise<void> {\n const req = parse(ReleaseFreshStepUpInputSchema, input);\n await this.#client.releaseFreshStepUp(removeUndefined(req), toConnectCallOptions(options));\n }\n}\n"],"mappings":"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"}