@polyester/sdk 0.3.0 → 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 (316) hide show
  1. package/CHANGELOG.md +44 -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/gen/marketoverview/v1/marketoverview_pb.d.ts +7 -0
  34. package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts.map +1 -1
  35. package/dist/gen/marketoverview/v1/marketoverview_pb.js +1 -1
  36. package/dist/gen/marketoverview/v1/marketoverview_pb.js.map +1 -1
  37. package/dist/index.js +3 -3
  38. package/dist/realtime/client.js +13 -2
  39. package/dist/realtime/client.js.map +1 -1
  40. package/dist/realtime/snapshot-then-stream.js +1 -1
  41. package/dist/realtime/snapshot-then-stream.js.map +1 -1
  42. package/dist/realtime/types.d.ts +2 -0
  43. package/dist/realtime/types.d.ts.map +1 -1
  44. package/dist/server-client.d.ts +17 -8
  45. package/dist/server-client.d.ts.map +1 -1
  46. package/dist/server-client.js +8 -11
  47. package/dist/server-client.js.map +1 -1
  48. package/dist/services/accounts/accounts.js +3 -3
  49. package/dist/services/accounts/accounts.js.map +1 -1
  50. package/dist/services/accounts/accounts.schemas.d.ts +13 -13
  51. package/dist/services/accounts/accounts.schemas.d.ts.map +1 -1
  52. package/dist/services/accounts/accounts.schemas.js +11 -11
  53. package/dist/services/accounts/accounts.schemas.js.map +1 -1
  54. package/dist/services/address-book/address-book.js +28 -28
  55. package/dist/services/address-book/address-book.js.map +1 -1
  56. package/dist/services/address-book/address-book.schemas.d.ts +751 -751
  57. package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
  58. package/dist/services/address-book/address-book.schemas.js +160 -160
  59. package/dist/services/address-book/address-book.schemas.js.map +1 -1
  60. package/dist/services/api-keys/api-keys.d.ts +6 -6
  61. package/dist/services/api-keys/api-keys.d.ts.map +1 -1
  62. package/dist/services/api-keys/api-keys.js +12 -12
  63. package/dist/services/api-keys/api-keys.js.map +1 -1
  64. package/dist/services/api-keys/api-keys.schemas.d.ts +62 -62
  65. package/dist/services/api-keys/api-keys.schemas.d.ts.map +1 -1
  66. package/dist/services/api-keys/api-keys.schemas.js +34 -34
  67. package/dist/services/api-keys/api-keys.schemas.js.map +1 -1
  68. package/dist/services/auth/auth.d.ts +46 -40
  69. package/dist/services/auth/auth.d.ts.map +1 -1
  70. package/dist/services/auth/auth.js +28 -25
  71. package/dist/services/auth/auth.js.map +1 -1
  72. package/dist/services/auth/profile/profile.d.ts +2 -2
  73. package/dist/services/auth/profile/profile.d.ts.map +1 -1
  74. package/dist/services/auth/profile/profile.js +7 -7
  75. package/dist/services/auth/profile/profile.js.map +1 -1
  76. package/dist/services/auth/profile/profile.schemas.d.ts +41 -41
  77. package/dist/services/auth/profile/profile.schemas.d.ts.map +1 -1
  78. package/dist/services/auth/profile/profile.schemas.js +27 -27
  79. package/dist/services/auth/profile/profile.schemas.js.map +1 -1
  80. package/dist/services/auth/session.d.ts +1 -1
  81. package/dist/services/auth/session.d.ts.map +1 -1
  82. package/dist/services/auth/session.js +6 -2
  83. package/dist/services/auth/session.js.map +1 -1
  84. package/dist/services/auth/session.schemas.js +17 -17
  85. package/dist/services/auth/session.schemas.js.map +1 -1
  86. package/dist/services/auth/session.types.d.ts +3 -2
  87. package/dist/services/auth/session.types.d.ts.map +1 -1
  88. package/dist/services/balances/balances.d.ts +1 -1
  89. package/dist/services/balances/balances.js +9 -9
  90. package/dist/services/balances/balances.js.map +1 -1
  91. package/dist/services/balances/balances.schemas.d.ts +95 -95
  92. package/dist/services/balances/balances.schemas.d.ts.map +1 -1
  93. package/dist/services/balances/balances.schemas.js +61 -61
  94. package/dist/services/balances/balances.schemas.js.map +1 -1
  95. package/dist/services/candles/candles.js +12 -12
  96. package/dist/services/candles/candles.js.map +1 -1
  97. package/dist/services/candles/candles.schemas.d.ts +64 -64
  98. package/dist/services/candles/candles.schemas.d.ts.map +1 -1
  99. package/dist/services/candles/candles.schemas.js +47 -48
  100. package/dist/services/candles/candles.schemas.js.map +1 -1
  101. package/dist/services/chain-analytics/chain-analytics.js +7 -7
  102. package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
  103. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts +68 -68
  104. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
  105. package/dist/services/chain-analytics/chain-analytics.schemas.js +29 -29
  106. package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
  107. package/dist/services/deposit/deposit.js +5 -5
  108. package/dist/services/deposit/deposit.js.map +1 -1
  109. package/dist/services/deposit/deposit.schemas.d.ts +17 -17
  110. package/dist/services/deposit/deposit.schemas.d.ts.map +1 -1
  111. package/dist/services/deposit/deposit.schemas.js +11 -11
  112. package/dist/services/deposit/deposit.schemas.js.map +1 -1
  113. package/dist/services/guard-signer/guard-signer.js +13 -13
  114. package/dist/services/guard-signer/guard-signer.js.map +1 -1
  115. package/dist/services/guard-signer/guard-signer.schemas.d.ts +75 -75
  116. package/dist/services/guard-signer/guard-signer.schemas.d.ts.map +1 -1
  117. package/dist/services/guard-signer/guard-signer.schemas.js +42 -42
  118. package/dist/services/guard-signer/guard-signer.schemas.js.map +1 -1
  119. package/dist/services/heatmap/heatmap.js +9 -9
  120. package/dist/services/heatmap/heatmap.js.map +1 -1
  121. package/dist/services/heatmap/heatmap.schemas.d.ts +141 -141
  122. package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
  123. package/dist/services/heatmap/heatmap.schemas.js +47 -47
  124. package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
  125. package/dist/services/internal-transfers/internal-transfers.js +3 -3
  126. package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
  127. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +53 -53
  128. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
  129. package/dist/services/internal-transfers/internal-transfers.schemas.js +27 -27
  130. package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
  131. package/dist/services/lifecycle/lifecycle.js +10 -10
  132. package/dist/services/lifecycle/lifecycle.js.map +1 -1
  133. package/dist/services/lifecycle/lifecycle.schemas.d.ts +614 -614
  134. package/dist/services/lifecycle/lifecycle.schemas.d.ts.map +1 -1
  135. package/dist/services/lifecycle/lifecycle.schemas.js +146 -146
  136. package/dist/services/lifecycle/lifecycle.schemas.js.map +1 -1
  137. package/dist/services/market-data/market-data.js +6 -6
  138. package/dist/services/market-data/market-data.js.map +1 -1
  139. package/dist/services/market-data/market-data.schemas.d.ts +20 -20
  140. package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
  141. package/dist/services/market-data/market-data.schemas.js +51 -55
  142. package/dist/services/market-data/market-data.schemas.js.map +1 -1
  143. package/dist/services/market-overview/market-overview.d.ts +1 -1
  144. package/dist/services/market-overview/market-overview.js +5 -5
  145. package/dist/services/market-overview/market-overview.js.map +1 -1
  146. package/dist/services/market-overview/market-overview.schemas.d.ts +39 -36
  147. package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
  148. package/dist/services/market-overview/market-overview.schemas.js +34 -32
  149. package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
  150. package/dist/services/mfa/mfa.js +27 -27
  151. package/dist/services/mfa/mfa.js.map +1 -1
  152. package/dist/services/mfa/mfa.schemas.d.ts +206 -206
  153. package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
  154. package/dist/services/mfa/mfa.schemas.js +83 -83
  155. package/dist/services/mfa/mfa.schemas.js.map +1 -1
  156. package/dist/services/orderbook/orderbook.d.ts +2 -2
  157. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  158. package/dist/services/orderbook/orderbook.js +5 -5
  159. package/dist/services/orderbook/orderbook.js.map +1 -1
  160. package/dist/services/orderbook/orderbook.schemas.d.ts +23 -23
  161. package/dist/services/orderbook/orderbook.schemas.d.ts.map +1 -1
  162. package/dist/services/orderbook/orderbook.schemas.js +15 -15
  163. package/dist/services/orderbook/orderbook.schemas.js.map +1 -1
  164. package/dist/services/orders/order-errors.schemas.d.ts +18 -18
  165. package/dist/services/orders/order-errors.schemas.d.ts.map +1 -1
  166. package/dist/services/orders/order-errors.schemas.js +8 -8
  167. package/dist/services/orders/order-errors.schemas.js.map +1 -1
  168. package/dist/services/orders/orders-batch.schemas.d.ts +492 -492
  169. package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
  170. package/dist/services/orders/orders-batch.schemas.js +118 -118
  171. package/dist/services/orders/orders-batch.schemas.js.map +1 -1
  172. package/dist/services/orders/orders-identifiers.schemas.js +5 -5
  173. package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
  174. package/dist/services/orders/orders-input.schemas.d.ts +657 -648
  175. package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
  176. package/dist/services/orders/orders-input.schemas.js +100 -96
  177. package/dist/services/orders/orders-input.schemas.js.map +1 -1
  178. package/dist/services/orders/orders-modify.schemas.d.ts +370 -351
  179. package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
  180. package/dist/services/orders/orders-modify.schemas.js +48 -44
  181. package/dist/services/orders/orders-modify.schemas.js.map +1 -1
  182. package/dist/services/orders/orders-output.schemas.d.ts +179 -179
  183. package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
  184. package/dist/services/orders/orders-output.schemas.js +49 -49
  185. package/dist/services/orders/orders-output.schemas.js.map +1 -1
  186. package/dist/services/orders/orders-risk.schemas.d.ts +226 -226
  187. package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
  188. package/dist/services/orders/orders-risk.schemas.js +69 -69
  189. package/dist/services/orders/orders-risk.schemas.js.map +1 -1
  190. package/dist/services/orders/orders.d.ts +8 -8
  191. package/dist/services/orders/orders.d.ts.map +1 -1
  192. package/dist/services/orders/orders.js +44 -32
  193. package/dist/services/orders/orders.js.map +1 -1
  194. package/dist/services/policies/api-key-policies/api-key-policies.d.ts +6 -6
  195. package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
  196. package/dist/services/policies/api-key-policies/api-key-policies.js +11 -11
  197. package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
  198. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts +105 -105
  199. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts.map +1 -1
  200. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js +49 -49
  201. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js.map +1 -1
  202. package/dist/services/policies/shared.d.ts +5 -5
  203. package/dist/services/policies/shared.d.ts.map +1 -1
  204. package/dist/services/policies/shared.js +10 -10
  205. package/dist/services/policies/shared.js.map +1 -1
  206. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +6 -6
  207. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
  208. package/dist/services/policies/subaccount-policies/subaccount-policies.js +13 -13
  209. package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
  210. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +124 -124
  211. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
  212. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +75 -75
  213. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
  214. package/dist/services/shared.js +11 -11
  215. package/dist/services/shared.js.map +1 -1
  216. package/dist/services/social-verification/social-verification.d.ts +3 -3
  217. package/dist/services/social-verification/social-verification.d.ts.map +1 -1
  218. package/dist/services/social-verification/social-verification.js +7 -7
  219. package/dist/services/social-verification/social-verification.js.map +1 -1
  220. package/dist/services/social-verification/social-verification.schemas.d.ts +54 -54
  221. package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
  222. package/dist/services/social-verification/social-verification.schemas.js +28 -28
  223. package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
  224. package/dist/services/subaccount-resolver.js +5 -3
  225. package/dist/services/subaccount-resolver.js.map +1 -1
  226. package/dist/services/subaccounts/subaccounts.d.ts +15 -15
  227. package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
  228. package/dist/services/subaccounts/subaccounts.js +35 -35
  229. package/dist/services/subaccounts/subaccounts.js.map +1 -1
  230. package/dist/services/subaccounts/subaccounts.schemas.d.ts +137 -137
  231. package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
  232. package/dist/services/subaccounts/subaccounts.schemas.js +72 -72
  233. package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
  234. package/dist/services/trades/trades.d.ts +2 -2
  235. package/dist/services/trades/trades.d.ts.map +1 -1
  236. package/dist/services/trades/trades.js +5 -5
  237. package/dist/services/trades/trades.js.map +1 -1
  238. package/dist/services/trades/trades.schemas.d.ts +31 -31
  239. package/dist/services/trades/trades.schemas.d.ts.map +1 -1
  240. package/dist/services/trades/trades.schemas.js +24 -24
  241. package/dist/services/trades/trades.schemas.js.map +1 -1
  242. package/dist/services/trading-withdraws/trading-withdraws.js +8 -8
  243. package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
  244. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts +45 -45
  245. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
  246. package/dist/services/trading-withdraws/trading-withdraws.schemas.js +36 -36
  247. package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
  248. package/dist/services/transfers/transfers.d.ts +1 -1
  249. package/dist/services/transfers/transfers.d.ts.map +1 -1
  250. package/dist/services/transfers/transfers.js +5 -5
  251. package/dist/services/transfers/transfers.js.map +1 -1
  252. package/dist/services/transfers/transfers.schemas.d.ts +42 -42
  253. package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
  254. package/dist/services/transfers/transfers.schemas.js +30 -30
  255. package/dist/services/transfers/transfers.schemas.js.map +1 -1
  256. package/dist/services/triggers/trigger-child-order.schemas.js +23 -23
  257. package/dist/services/triggers/trigger-child-order.schemas.js.map +1 -1
  258. package/dist/services/triggers/trigger-input.schemas.d.ts +226 -226
  259. package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
  260. package/dist/services/triggers/trigger-input.schemas.js +53 -53
  261. package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
  262. package/dist/services/triggers/triggers-output.schemas.d.ts +218 -218
  263. package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
  264. package/dist/services/triggers/triggers-output.schemas.js +152 -152
  265. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  266. package/dist/services/triggers/triggers.js +21 -21
  267. package/dist/services/triggers/triggers.js.map +1 -1
  268. package/dist/services/whiteboard/whiteboard.js +15 -15
  269. package/dist/services/whiteboard/whiteboard.js.map +1 -1
  270. package/dist/services/whiteboard/whiteboard.schemas.d.ts +379 -379
  271. package/dist/services/whiteboard/whiteboard.schemas.d.ts.map +1 -1
  272. package/dist/services/whiteboard/whiteboard.schemas.js +71 -71
  273. package/dist/services/whiteboard/whiteboard.schemas.js.map +1 -1
  274. package/dist/services/zipper/zipper.js +3 -3
  275. package/dist/services/zipper/zipper.js.map +1 -1
  276. package/dist/services/zipper/zipper.schemas.d.ts +1 -1
  277. package/dist/services/zipper/zipper.schemas.js +54 -54
  278. package/dist/services/zipper/zipper.schemas.js.map +1 -1
  279. package/dist/shared/account-scope.d.ts +6 -6
  280. package/dist/shared/account-scope.d.ts.map +1 -1
  281. package/dist/shared/account-scope.js +3 -3
  282. package/dist/shared/account-scope.js.map +1 -1
  283. package/dist/shared/connect-error-mapping.d.ts +1 -1
  284. package/dist/shared/connect-error-mapping.js +29 -3
  285. package/dist/shared/connect-error-mapping.js.map +1 -1
  286. package/dist/shared/rate-limit.schemas.d.ts +12 -12
  287. package/dist/shared/rate-limit.schemas.d.ts.map +1 -1
  288. package/dist/shared/rate-limit.schemas.js +7 -7
  289. package/dist/shared/rate-limit.schemas.js.map +1 -1
  290. package/dist/shared/schemas.js +26 -26
  291. package/dist/shared/schemas.js.map +1 -1
  292. package/dist/shared/transports.js +7 -12
  293. package/dist/shared/transports.js.map +1 -1
  294. package/dist/shared/types.d.ts +12 -0
  295. package/dist/shared/types.d.ts.map +1 -1
  296. package/dist/shared/validation.d.ts +14 -0
  297. package/dist/shared/validation.d.ts.map +1 -0
  298. package/dist/shared/validation.js +24 -0
  299. package/dist/shared/validation.js.map +1 -0
  300. package/dist/utils/connect-order-errors.js +2 -2
  301. package/dist/utils/connect-order-errors.js.map +1 -1
  302. package/dist/utils/cookies.d.ts +8 -3
  303. package/dist/utils/cookies.d.ts.map +1 -1
  304. package/dist/utils/cookies.js +7 -1
  305. package/dist/utils/cookies.js.map +1 -1
  306. package/dist/utils/event-emitter.d.ts +1 -1
  307. package/dist/utils/event-emitter.d.ts.map +1 -1
  308. package/dist/utils/event-emitter.js +4 -2
  309. package/dist/utils/event-emitter.js.map +1 -1
  310. package/dist/utils/evm.js +2 -2
  311. package/dist/utils/evm.js.map +1 -1
  312. package/dist/utils/jwt.d.ts +2 -2
  313. package/dist/utils/jwt.d.ts.map +1 -1
  314. package/dist/utils/jwt.js +2 -2
  315. package/dist/utils/jwt.js.map +1 -1
  316. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # @polyester/sdk
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Standardize market-data limits as positive integers, reject string and invalid candle or trade limits, and require a valid orderbook heatmap limit before sending requests.
8
+
9
+ ### Patch Changes
10
+
11
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return exact nanosecond timestamp strings and epoch-millisecond timestamps from single-order cancel and modify operations.
12
+
13
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Preserve server-side bearer authentication when the display-session cookie is missing or invalid, and discard it when an explicit display session belongs to another environment.
14
+
15
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Clarify that single-order cancellation acknowledges the request and requires lifecycle reconciliation, while missing targets remain not-found errors.
16
+
17
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Document that realtime callers must wait for `onOpen` before issuing writes whose events they need to observe.
18
+
19
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Allow transfer history to be listed without an input object and return an SDK validation error for null account-scoped inputs.
20
+
21
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Accept Next.js-style cookie getters when creating server clients.
22
+
23
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Reject malformed client, environment, account signer, and catalog configuration with SDK error types before constructing clients or marking catalog snapshots fresh.
24
+
25
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Isolate synchronously thrown auth event listener errors so one failing listener cannot reject a completed auth operation or prevent later listeners from running.
26
+
27
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return login nonce expiration timestamps as JSON-safe epoch-millisecond numbers instead of raw protobuf timestamp objects.
28
+
29
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Route private realtime subscription authentication failures through `onError` when provided, and throw from `subscribe()` when no error observer exists.
30
+
31
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return `null` from `orders.getDetails` when the backend reports that the requested order was not found.
32
+
33
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - fix(auth): prevent malformed hex credentials from appearing in configuration error messages.
34
+
35
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Return `false` from `isJwtValid` for non-string values instead of throwing.
36
+
37
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Validate subaccount activity limits and balance-history ledger IDs as non-negative integers before serializing requests.
38
+
39
+ - [#54](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/54) [`b1d07ad`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/b1d07ad58e7f691cbf0df32e5905bd679c1adfd6) Thanks [@huntabyte](https://github.com/huntabyte)! - Translate schema validation, authentication, RPC, and network failures into the documented `PolyesterError` hierarchy.
40
+
41
+ ## 0.3.1
42
+
43
+ ### Patch Changes
44
+
45
+ - [#52](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/52) [`4d78227`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/4d78227aa61b426e3ab8c0ac9bff6225a7865d42) Thanks [@aiiven](https://github.com/aiiven)! - feat(market-overview): expose the current multi-venue index price on market overview rows.
46
+
3
47
  ## 0.3.0
4
48
 
5
49
  ### Minor Changes
package/README.md CHANGED
@@ -59,8 +59,30 @@ if (client.hasUsableBearerToken) {
59
59
  }
60
60
  ```
61
61
 
62
- The parsed cookie session is display data for hydrating UI. It is not proof of
63
- authentication, so the backend still authorizes every call.
62
+ Framework cookie stores are accepted too. Await asynchronous helpers before
63
+ passing the store. For example, with current Next.js versions:
64
+
65
+ ```ts
66
+ import { cookies } from "next/headers";
67
+ import {
68
+ createPolyesterServerClientFromCookies,
69
+ POLYESTER_TESTNET_ENVIRONMENT,
70
+ } from "@polyester/sdk";
71
+
72
+ const client = createPolyesterServerClientFromCookies({
73
+ cookies: await cookies(),
74
+ environment: POLYESTER_TESTNET_ENVIRONMENT,
75
+ });
76
+ ```
77
+
78
+ This factory accepts a `Request`, a `{ [name]: value }` record, or a synchronous
79
+ `.get(name)` store that returns either the cookie value or an object containing
80
+ the value.
81
+
82
+ The `polyester_auth_token` bearer cookie is read independently from the
83
+ `polyester_session_3` cookie. The latter contains unsigned display data for UI
84
+ hydration; it is not proof of authentication. The backend still verifies the
85
+ bearer token and authorizes every call.
64
86
 
65
87
  For machine clients, pass an Ed25519 API key provider instead of a cookie
66
88
  session:
@@ -80,28 +102,52 @@ const client = new PolyesterClient({
80
102
 
81
103
  ## Realtime
82
104
 
83
- Subscriptions return their own unsubscribe function. No event emitter, no
84
- cleanup bookkeeping.
105
+ Subscriptions start connecting immediately and return their own unsubscribe
106
+ function. The return value does not mean the channel is open. Wait for the first
107
+ `onOpen` callback to avoid the initial startup gap. This does not guarantee
108
+ delivery across a later disconnect; applications that require continuity must
109
+ reconcile after connection gaps. `onOpen` can run again after a successful
110
+ reconnect, so keep one-time writes outside the callback itself.
85
111
 
86
112
  ```ts
87
- const unsubscribe = client.orders.subscribe({
88
- accountId,
89
- onEvent: (order) => console.log(order.orderId, order.status),
90
- onError: (ctx) => console.warn(ctx.channel, ctx.error),
113
+ const unsubscribe = await new Promise<() => void>((resolve, reject) => {
114
+ let stop = () => {};
115
+ let pending = true;
116
+
117
+ stop = client.orders.subscribe({
118
+ accountId,
119
+ onOpen: () => {
120
+ if (!pending) return;
121
+ pending = false;
122
+ resolve(stop);
123
+ },
124
+ onEvent: (order) => console.log(order.orderId, order.status),
125
+ onError: (ctx) => {
126
+ console.warn(ctx.channel, ctx.error);
127
+ if (!pending) return;
128
+ pending = false;
129
+ stop();
130
+ reject(ctx.error);
131
+ },
132
+ });
91
133
  });
134
+
135
+ await client.orders.create(order);
92
136
  ```
93
137
 
138
+ Call `unsubscribe()` when the subscription is no longer needed.
139
+
94
140
  ## Entry points
95
141
 
96
- | Import | Contains |
97
- | --- | --- |
98
- | `@polyester/sdk` | clients, environments, errors, types |
99
- | `@polyester/sdk/errors` | error classes and codes on their own |
100
- | `@polyester/sdk/account-signer` | `createPolyesterAccountSigner` |
101
- | `@polyester/sdk/smart-account` | UserOperations and on-chain smart account calls |
102
- | `@polyester/sdk/catalogs` | symbol catalog and decimal scales |
103
- | `@polyester/sdk/server-session` | cookie parsing without the client graph |
104
- | `@polyester/sdk/unstable/gen` | raw protobuf types and service descriptors |
142
+ | Import | Contains |
143
+ | ------------------------------- | ----------------------------------------------- |
144
+ | `@polyester/sdk` | clients, environments, errors, types |
145
+ | `@polyester/sdk/errors` | error classes and codes on their own |
146
+ | `@polyester/sdk/account-signer` | `createPolyesterAccountSigner` |
147
+ | `@polyester/sdk/smart-account` | UserOperations and on-chain smart account calls |
148
+ | `@polyester/sdk/catalogs` | symbol catalog and decimal scales |
149
+ | `@polyester/sdk/server-session` | cookie parsing without the client graph |
150
+ | `@polyester/sdk/unstable/gen` | raw protobuf types and service descriptors |
105
151
 
106
152
  `account-signer` and `smart-account` are separate subpaths on purpose. Both pull
107
153
  in a large viem graph, and keeping them out of the root barrel means the app
@@ -1,5 +1,8 @@
1
1
  //#region \0rolldown/runtime.js
2
2
  var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
3
6
  var __exportAll = (all, no_symbols) => {
4
7
  let target = {};
5
8
  for (var name in all) __defProp(target, name, {
@@ -9,5 +12,16 @@ var __exportAll = (all, no_symbols) => {
9
12
  if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
13
  return target;
11
14
  };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
17
+ key = keys[i];
18
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
19
+ get: ((k) => from[k]).bind(null, key),
20
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
21
+ });
22
+ }
23
+ return to;
24
+ };
25
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
12
26
  //#endregion
13
- export { __exportAll };
27
+ export { __exportAll, __reExport };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/account-signer/types.ts"],"mappings":";;KAGY;;;;;;;UAQK;;WAEJ;;WAGA,gBAAgB;;WAGhB,eAAe;;EAGxB,YAAY,kBAAkB,QAAQ;;;;;;KAO9B,6BAA6B,uBAAuB,QAAQ;;;;;KAM5D,sBAAsB,gBAAgB;;;;iBAKlC,uBACZ,QAAQ,sBACT,UAAU;;;;iBAsBS,qBAClB,QAAQ,kCACT,QAAQ"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/account-signer/types.ts"],"mappings":";;KAIY;;;;;;;UAQK;;WAEJ;;WAGA,gBAAgB;;WAGhB,eAAe;;EAGxB,YAAY,kBAAkB,QAAQ;;;;;;KAO9B,6BAA6B,uBAAuB,QAAQ;;;;;KAM5D,sBAAsB,gBAAgB;;;;iBAKlC,uBACZ,QAAQ,sBACT,UAAU;;;;iBA4BS,qBAClB,QAAQ,kCACT,QAAQ"}
@@ -1,3 +1,4 @@
1
+ import { ConfigurationError } from "../shared/errors.js";
1
2
  import { isEvmAddress } from "../utils/evm.js";
2
3
  //#region src/account-signer/types.ts
3
4
  /**
@@ -10,9 +11,11 @@ function isAccountSignerFactory(config) {
10
11
  * Asserts that a value implements the account signer contract.
11
12
  */
12
13
  function assertAccountSigner(value) {
13
- if (!value.environmentFingerprint) throw new Error("Account signer must include an environmentFingerprint.");
14
- if (!isEvmAddress(value.accountAddress)) throw new Error("Account signer must include a valid accountAddress.");
15
- if (value.ownerAddress && !isEvmAddress(value.ownerAddress)) throw new Error("Account signer ownerAddress must be a valid address.");
14
+ if (typeof value !== "object" || value === null) throw new ConfigurationError("Account signer must be an object or factory function.");
15
+ if (!value.environmentFingerprint) throw new ConfigurationError("Account signer must include an environmentFingerprint.");
16
+ if (!isEvmAddress(value.accountAddress)) throw new ConfigurationError("Account signer must include a valid accountAddress.");
17
+ if (value.ownerAddress && !isEvmAddress(value.ownerAddress)) throw new ConfigurationError("Account signer ownerAddress must be a valid address.");
18
+ if (typeof value.signMessage !== "function") throw new ConfigurationError("Account signer must include a signMessage function.");
16
19
  }
17
20
  /**
18
21
  * Helper to resolve an account signer from config.
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/account-signer/types.ts"],"sourcesContent":["import type { Hex } from \"viem\";\nimport { isEvmAddress } from \"../utils/evm.js\";\n\nexport type HexAddress = `0x${string}`;\n\n/**\n * Minimal account signer interface for SDK operations.\n *\n * The SDK authenticates the Polyester smart account address. The owner address\n * is optional metadata about the EOA or custody provider that controls it.\n */\nexport interface AccountSigner {\n /** Fingerprint of the PolyesterEnvironment this signer was created for */\n readonly environmentFingerprint: string;\n\n /** The smart account address (used for authentication and trading) */\n readonly accountAddress: HexAddress;\n\n /** The owner/EOA address (optional metadata about the controlling signer) */\n readonly ownerAddress?: HexAddress;\n\n /** Sign a message and return the signature */\n signMessage(message: string): Promise<Hex>;\n}\n\n/**\n * Factory function type for lazy account signer initialization.\n * Useful when the signer might not be available at client creation time.\n */\nexport type AccountSignerFactory = () => AccountSigner | null | Promise<AccountSigner | null>;\n\n/**\n * Account signer configuration for the client.\n * Can be a signer instance or a factory for lazy initialization.\n */\nexport type AccountSignerConfig = AccountSigner | AccountSignerFactory;\n\n/**\n * Helper to check if an account signer config is a factory function.\n */\nexport function isAccountSignerFactory(\n config: AccountSignerConfig,\n): config is AccountSignerFactory {\n return typeof config === \"function\";\n}\n\n/**\n * Asserts that a value implements the account signer contract.\n */\nexport function assertAccountSigner(value: AccountSigner): void {\n if (!value.environmentFingerprint) {\n throw new Error(\"Account signer must include an environmentFingerprint.\");\n }\n if (!isEvmAddress(value.accountAddress)) {\n throw new Error(\"Account signer must include a valid accountAddress.\");\n }\n if (value.ownerAddress && !isEvmAddress(value.ownerAddress)) {\n throw new Error(\"Account signer ownerAddress must be a valid address.\");\n }\n}\n\n/**\n * Helper to resolve an account signer from config.\n */\nexport async function resolveAccountSigner(\n config: AccountSignerConfig | undefined,\n): Promise<AccountSigner | null> {\n if (!config) return null;\n const accountSigner = isAccountSignerFactory(config) ? await config() : config;\n if (accountSigner) assertAccountSigner(accountSigner);\n return accountSigner;\n}\n"],"mappings":";;;;;AAwCA,SAAgB,uBACZ,QAC8B;CAC9B,OAAO,OAAO,WAAW;AAC7B;;;;AAKA,SAAgB,oBAAoB,OAA4B;CAC5D,IAAI,CAAC,MAAM,wBACP,MAAM,IAAI,MAAM,wDAAwD;CAE5E,IAAI,CAAC,aAAa,MAAM,cAAc,GAClC,MAAM,IAAI,MAAM,qDAAqD;CAEzE,IAAI,MAAM,gBAAgB,CAAC,aAAa,MAAM,YAAY,GACtD,MAAM,IAAI,MAAM,sDAAsD;AAE9E;;;;AAKA,eAAsB,qBAClB,QAC6B;CAC7B,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,gBAAgB,uBAAuB,MAAM,IAAI,MAAM,OAAO,IAAI;CACxE,IAAI,eAAe,oBAAoB,aAAa;CACpD,OAAO;AACX"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/account-signer/types.ts"],"sourcesContent":["import type { Hex } from \"viem\";\nimport { isEvmAddress } from \"../utils/evm.js\";\nimport { ConfigurationError } from \"../shared/errors.js\";\n\nexport type HexAddress = `0x${string}`;\n\n/**\n * Minimal account signer interface for SDK operations.\n *\n * The SDK authenticates the Polyester smart account address. The owner address\n * is optional metadata about the EOA or custody provider that controls it.\n */\nexport interface AccountSigner {\n /** Fingerprint of the PolyesterEnvironment this signer was created for */\n readonly environmentFingerprint: string;\n\n /** The smart account address (used for authentication and trading) */\n readonly accountAddress: HexAddress;\n\n /** The owner/EOA address (optional metadata about the controlling signer) */\n readonly ownerAddress?: HexAddress;\n\n /** Sign a message and return the signature */\n signMessage(message: string): Promise<Hex>;\n}\n\n/**\n * Factory function type for lazy account signer initialization.\n * Useful when the signer might not be available at client creation time.\n */\nexport type AccountSignerFactory = () => AccountSigner | null | Promise<AccountSigner | null>;\n\n/**\n * Account signer configuration for the client.\n * Can be a signer instance or a factory for lazy initialization.\n */\nexport type AccountSignerConfig = AccountSigner | AccountSignerFactory;\n\n/**\n * Helper to check if an account signer config is a factory function.\n */\nexport function isAccountSignerFactory(\n config: AccountSignerConfig,\n): config is AccountSignerFactory {\n return typeof config === \"function\";\n}\n\n/**\n * Asserts that a value implements the account signer contract.\n */\nexport function assertAccountSigner(value: AccountSigner): void {\n if (typeof value !== \"object\" || value === null) {\n throw new ConfigurationError(\"Account signer must be an object or factory function.\");\n }\n if (!value.environmentFingerprint) {\n throw new ConfigurationError(\"Account signer must include an environmentFingerprint.\");\n }\n if (!isEvmAddress(value.accountAddress)) {\n throw new ConfigurationError(\"Account signer must include a valid accountAddress.\");\n }\n if (value.ownerAddress && !isEvmAddress(value.ownerAddress)) {\n throw new ConfigurationError(\"Account signer ownerAddress must be a valid address.\");\n }\n if (typeof value.signMessage !== \"function\") {\n throw new ConfigurationError(\"Account signer must include a signMessage function.\");\n }\n}\n\n/**\n * Helper to resolve an account signer from config.\n */\nexport async function resolveAccountSigner(\n config: AccountSignerConfig | undefined,\n): Promise<AccountSigner | null> {\n if (!config) return null;\n const accountSigner = isAccountSignerFactory(config) ? await config() : config;\n if (accountSigner) assertAccountSigner(accountSigner);\n return accountSigner;\n}\n"],"mappings":";;;;;;AAyCA,SAAgB,uBACZ,QAC8B;CAC9B,OAAO,OAAO,WAAW;AAC7B;;;;AAKA,SAAgB,oBAAoB,OAA4B;CAC5D,IAAI,OAAO,UAAU,YAAY,UAAU,MACvC,MAAM,IAAI,mBAAmB,uDAAuD;CAExF,IAAI,CAAC,MAAM,wBACP,MAAM,IAAI,mBAAmB,wDAAwD;CAEzF,IAAI,CAAC,aAAa,MAAM,cAAc,GAClC,MAAM,IAAI,mBAAmB,qDAAqD;CAEtF,IAAI,MAAM,gBAAgB,CAAC,aAAa,MAAM,YAAY,GACtD,MAAM,IAAI,mBAAmB,sDAAsD;CAEvF,IAAI,OAAO,MAAM,gBAAgB,YAC7B,MAAM,IAAI,mBAAmB,qDAAqD;AAE1F;;;;AAKA,eAAsB,qBAClB,QAC6B;CAC7B,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,gBAAgB,uBAAuB,MAAM,IAAI,MAAM,OAAO,IAAI;CACxE,IAAI,eAAe,oBAAoB,aAAa;CACpD,OAAO;AACX"}
@@ -4,7 +4,9 @@ import { PolyesterClient, PolyesterClientBaseConfig } from "./core-client.js";
4
4
  import { AuthTokenStorage } from "./services/auth/token-storage.js";
5
5
  import { AccountSignerAuthService } from "./services/auth/account-signer-auth.js";
6
6
  //#region src/browser-client.d.ts
7
- interface PolyesterBrowserClientConfig extends Omit<PolyesterClientBaseConfig, "auth"> {
7
+ type BrowserClientBaseConfig<TConfig> = TConfig extends PolyesterClientBaseConfig ? Omit<TConfig, "auth"> : never;
8
+ /** Configuration for the browser Polyester client. */
9
+ type PolyesterBrowserClientConfig = BrowserClientBaseConfig<PolyesterClientBaseConfig> & {
8
10
  /**
9
11
  * Account signer interface for authentication.
10
12
  * Pass a signer object or a factory function for lazy initialization.
@@ -15,7 +17,7 @@ interface PolyesterBrowserClientConfig extends Omit<PolyesterClientBaseConfig, "
15
17
  * Use createCookieAuthTokenStorage() to opt into reload/SSR persistence.
16
18
  */
17
19
  tokenStorage?: AuthTokenStorage;
18
- }
20
+ };
19
21
  /**
20
22
  * A client for interacting with the Polyester DEX in the browser.
21
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"browser-client.d.ts","names":[],"sources":["../src/browser-client.ts"],"mappings":";;;;;;UAUiB,qCAAqC,KAAK;;;;;EAKvD,gBAAgB;;;;;EAKhB,eAAe;;;;;cAMN,+BAA+B;MAI3B,QAAQ;EAIT,YAAA,QAAQ;;;;;YA0CD,4BAA4B;;;;EAiB/C,iBAAiB,eAAe"}
1
+ {"version":3,"file":"browser-client.d.ts","names":[],"sources":["../src/browser-client.ts"],"mappings":";;;;;;KAeK,wBAAwB,WAAW,gBAAgB,4BAClD,KAAK;;KAIC,+BAA+B,wBAAwB;;;;;EAK/D,gBAAgB;;;;;EAKhB,eAAe;;;;;cAMN,+BAA+B;MAI3B,QAAQ;EAIT,YAAA,QAAQ;;;;;YAyCD,4BAA4B;;;;EAiB/C,iBAAiB,eAAe"}
@@ -1,4 +1,4 @@
1
- import { PolyesterClient } from "./core-client.js";
1
+ import { PolyesterClient, parsePolyesterClientConfig, pickPolyesterCatalogConfig } from "./core-client.js";
2
2
  import { AuthSessionStore } from "./services/auth/session.js";
3
3
  import { createMemoryAuthTokenStorage } from "./services/auth/token-storage.js";
4
4
  import { AccountSignerAuthService } from "./services/auth/account-signer-auth.js";
@@ -11,6 +11,7 @@ var PolyesterBrowserClient = class extends PolyesterClient {
11
11
  return super.auth;
12
12
  }
13
13
  constructor(config) {
14
+ config = parsePolyesterClientConfig(config);
14
15
  const tokenStorage = config.tokenStorage ?? createMemoryAuthTokenStorage();
15
16
  const sessionStore = new AuthSessionStore({ environmentFingerprint: config.environment.fingerprint });
16
17
  const getToken = () => sessionStore.getEnvironmentBoundToken(tokenStorage);
@@ -22,9 +23,7 @@ var PolyesterBrowserClient = class extends PolyesterClient {
22
23
  getToken
23
24
  },
24
25
  wireFormat: config.wireFormat,
25
- catalog: config.catalog,
26
- catalogSnapshot: config.catalogSnapshot,
27
- catalogCell: config.catalogCell,
26
+ ...pickPolyesterCatalogConfig(config),
28
27
  transports: config.transports,
29
28
  realtimeClient: config.realtimeClient,
30
29
  realtime: {
@@ -1 +1 @@
1
- {"version":3,"file":"browser-client.js","names":[],"sources":["../src/browser-client.ts"],"sourcesContent":["import { PolyesterClient, type PolyesterClientBaseConfig } from \"./core-client.js\";\nimport { AccountSignerAuthService } from \"./services/auth/account-signer-auth.js\";\nimport type { AccountSignerConfig, AccountSigner } from \"./account-signer/types.js\";\nimport type { SubaccountResolver } from \"./services/subaccount-resolver.js\";\nimport {\n createMemoryAuthTokenStorage,\n type AuthTokenStorage,\n} from \"./services/auth/token-storage.js\";\nimport { AuthSessionStore } from \"./services/auth/session.js\";\n\nexport interface PolyesterBrowserClientConfig extends Omit<PolyesterClientBaseConfig, \"auth\"> {\n /**\n * Account signer interface for authentication.\n * Pass a signer object or a factory function for lazy initialization.\n */\n accountSigner?: AccountSignerConfig;\n /**\n * Storage for browser bearer tokens. Defaults to per-client memory storage.\n * Use createCookieAuthTokenStorage() to opt into reload/SSR persistence.\n */\n tokenStorage?: AuthTokenStorage;\n}\n\n/**\n * A client for interacting with the Polyester DEX in the browser.\n */\nexport class PolyesterBrowserClient extends PolyesterClient {\n // The base class builds `auth` through the `createAuth` runtime factory we\n // pass below, so the lazily-constructed instance is always an\n // AccountSignerAuthService — this override only narrows the type.\n override get auth(): AccountSignerAuthService {\n return super.auth as AccountSignerAuthService;\n }\n\n constructor(config: PolyesterBrowserClientConfig) {\n const tokenStorage = config.tokenStorage ?? createMemoryAuthTokenStorage();\n const sessionStore = new AuthSessionStore({\n environmentFingerprint: config.environment.fingerprint,\n });\n const getToken = () => sessionStore.getEnvironmentBoundToken(tokenStorage);\n\n super(\n {\n environment: config.environment,\n interceptors: config.interceptors,\n auth: { kind: \"jwt\", getToken },\n wireFormat: config.wireFormat,\n catalog: config.catalog,\n catalogSnapshot: config.catalogSnapshot,\n catalogCell: config.catalogCell,\n transports: config.transports,\n realtimeClient: config.realtimeClient,\n realtime: {\n hasAuth: () => !!getToken(),\n ...config.realtime,\n },\n },\n {\n createAuth: ({ transports, realtime, subaccounts, environment }) =>\n new AccountSignerAuthService({\n transports,\n accountSignerConfig: config.accountSigner,\n environment,\n subaccounts,\n realtime,\n tokenStorage,\n sessionStore,\n }),\n },\n );\n }\n\n /**\n * Creates a resolver that defaults subaccountId to the active subaccount.\n * The getter is called lazily when service methods are invoked.\n */\n protected override createSubaccountResolver(): SubaccountResolver {\n return {\n getDefaultSubaccountId: () => {\n const state = this.auth.getState();\n if (state.activeAccount && !state.activeAccount.isMain) {\n return state.activeAccount.accountId;\n }\n return null;\n },\n getActiveAccountId: () => this.auth.getState().activeAccount?.accountId ?? null,\n getMainAccountId: () => this.auth.getState().mainAccountId ?? null,\n };\n }\n\n /**\n * Sets the account signer used for authenticated browser requests.\n */\n setAccountSigner(accountSigner: AccountSigner | null): void {\n this.auth.setAccountSigner(accountSigner);\n }\n}\n"],"mappings":";;;;;;;;AA0BA,IAAa,yBAAb,cAA4C,gBAAgB;CAIxD,IAAa,OAAiC;EAC1C,OAAO,MAAM;CACjB;CAEA,YAAY,QAAsC;EAC9C,MAAM,eAAe,OAAO,gBAAgB,6BAA6B;EACzE,MAAM,eAAe,IAAI,iBAAiB,EACtC,wBAAwB,OAAO,YAAY,YAC/C,CAAC;EACD,MAAM,iBAAiB,aAAa,yBAAyB,YAAY;EAEzE,MACI;GACI,aAAa,OAAO;GACpB,cAAc,OAAO;GACrB,MAAM;IAAE,MAAM;IAAO;GAAS;GAC9B,YAAY,OAAO;GACnB,SAAS,OAAO;GAChB,iBAAiB,OAAO;GACxB,aAAa,OAAO;GACpB,YAAY,OAAO;GACnB,gBAAgB,OAAO;GACvB,UAAU;IACN,eAAe,CAAC,CAAC,SAAS;IAC1B,GAAG,OAAO;GACd;EACJ,GACA,EACI,aAAa,EAAE,YAAY,UAAU,aAAa,kBAC9C,IAAI,yBAAyB;GACzB;GACA,qBAAqB,OAAO;GAC5B;GACA;GACA;GACA;GACA;EACJ,CAAC,EACT,CACJ;CACJ;;;;;CAMA,2BAAkE;EAC9D,OAAO;GACH,8BAA8B;IAC1B,MAAM,QAAQ,KAAK,KAAK,SAAS;IACjC,IAAI,MAAM,iBAAiB,CAAC,MAAM,cAAc,QAC5C,OAAO,MAAM,cAAc;IAE/B,OAAO;GACX;GACA,0BAA0B,KAAK,KAAK,SAAS,CAAC,CAAC,eAAe,aAAa;GAC3E,wBAAwB,KAAK,KAAK,SAAS,CAAC,CAAC,iBAAiB;EAClE;CACJ;;;;CAKA,iBAAiB,eAA2C;EACxD,KAAK,KAAK,iBAAiB,aAAa;CAC5C;AACJ"}
1
+ {"version":3,"file":"browser-client.js","names":[],"sources":["../src/browser-client.ts"],"sourcesContent":["import {\n parsePolyesterClientConfig,\n pickPolyesterCatalogConfig,\n PolyesterClient,\n type PolyesterClientBaseConfig,\n} from \"./core-client.js\";\nimport { AccountSignerAuthService } from \"./services/auth/account-signer-auth.js\";\nimport type { AccountSignerConfig, AccountSigner } from \"./account-signer/types.js\";\nimport type { SubaccountResolver } from \"./services/subaccount-resolver.js\";\nimport {\n createMemoryAuthTokenStorage,\n type AuthTokenStorage,\n} from \"./services/auth/token-storage.js\";\nimport { AuthSessionStore } from \"./services/auth/session.js\";\n\ntype BrowserClientBaseConfig<TConfig> = TConfig extends PolyesterClientBaseConfig\n ? Omit<TConfig, \"auth\">\n : never;\n\n/** Configuration for the browser Polyester client. */\nexport type PolyesterBrowserClientConfig = BrowserClientBaseConfig<PolyesterClientBaseConfig> & {\n /**\n * Account signer interface for authentication.\n * Pass a signer object or a factory function for lazy initialization.\n */\n accountSigner?: AccountSignerConfig;\n /**\n * Storage for browser bearer tokens. Defaults to per-client memory storage.\n * Use createCookieAuthTokenStorage() to opt into reload/SSR persistence.\n */\n tokenStorage?: AuthTokenStorage;\n};\n\n/**\n * A client for interacting with the Polyester DEX in the browser.\n */\nexport class PolyesterBrowserClient extends PolyesterClient {\n // The base class builds `auth` through the `createAuth` runtime factory we\n // pass below, so the lazily-constructed instance is always an\n // AccountSignerAuthService — this override only narrows the type.\n override get auth(): AccountSignerAuthService {\n return super.auth as AccountSignerAuthService;\n }\n\n constructor(config: PolyesterBrowserClientConfig) {\n config = parsePolyesterClientConfig(config);\n const tokenStorage = config.tokenStorage ?? createMemoryAuthTokenStorage();\n const sessionStore = new AuthSessionStore({\n environmentFingerprint: config.environment.fingerprint,\n });\n const getToken = () => sessionStore.getEnvironmentBoundToken(tokenStorage);\n\n super(\n {\n environment: config.environment,\n interceptors: config.interceptors,\n auth: { kind: \"jwt\", getToken },\n wireFormat: config.wireFormat,\n ...pickPolyesterCatalogConfig(config),\n transports: config.transports,\n realtimeClient: config.realtimeClient,\n realtime: {\n hasAuth: () => !!getToken(),\n ...config.realtime,\n },\n },\n {\n createAuth: ({ transports, realtime, subaccounts, environment }) =>\n new AccountSignerAuthService({\n transports,\n accountSignerConfig: config.accountSigner,\n environment,\n subaccounts,\n realtime,\n tokenStorage,\n sessionStore,\n }),\n },\n );\n }\n\n /**\n * Creates a resolver that defaults subaccountId to the active subaccount.\n * The getter is called lazily when service methods are invoked.\n */\n protected override createSubaccountResolver(): SubaccountResolver {\n return {\n getDefaultSubaccountId: () => {\n const state = this.auth.getState();\n if (state.activeAccount && !state.activeAccount.isMain) {\n return state.activeAccount.accountId;\n }\n return null;\n },\n getActiveAccountId: () => this.auth.getState().activeAccount?.accountId ?? null,\n getMainAccountId: () => this.auth.getState().mainAccountId ?? null,\n };\n }\n\n /**\n * Sets the account signer used for authenticated browser requests.\n */\n setAccountSigner(accountSigner: AccountSigner | null): void {\n this.auth.setAccountSigner(accountSigner);\n }\n}\n"],"mappings":";;;;;;;;AAoCA,IAAa,yBAAb,cAA4C,gBAAgB;CAIxD,IAAa,OAAiC;EAC1C,OAAO,MAAM;CACjB;CAEA,YAAY,QAAsC;EAC9C,SAAS,2BAA2B,MAAM;EAC1C,MAAM,eAAe,OAAO,gBAAgB,6BAA6B;EACzE,MAAM,eAAe,IAAI,iBAAiB,EACtC,wBAAwB,OAAO,YAAY,YAC/C,CAAC;EACD,MAAM,iBAAiB,aAAa,yBAAyB,YAAY;EAEzE,MACI;GACI,aAAa,OAAO;GACpB,cAAc,OAAO;GACrB,MAAM;IAAE,MAAM;IAAO;GAAS;GAC9B,YAAY,OAAO;GACnB,GAAG,2BAA2B,MAAM;GACpC,YAAY,OAAO;GACnB,gBAAgB,OAAO;GACvB,UAAU;IACN,eAAe,CAAC,CAAC,SAAS;IAC1B,GAAG,OAAO;GACd;EACJ,GACA,EACI,aAAa,EAAE,YAAY,UAAU,aAAa,kBAC9C,IAAI,yBAAyB;GACzB;GACA,qBAAqB,OAAO;GAC5B;GACA;GACA;GACA;GACA;EACJ,CAAC,EACT,CACJ;CACJ;;;;;CAMA,2BAAkE;EAC9D,OAAO;GACH,8BAA8B;IAC1B,MAAM,QAAQ,KAAK,KAAK,SAAS;IACjC,IAAI,MAAM,iBAAiB,CAAC,MAAM,cAAc,QAC5C,OAAO,MAAM,cAAc;IAE/B,OAAO;GACX;GACA,0BAA0B,KAAK,KAAK,SAAS,CAAC,CAAC,eAAe,aAAa;GAC3E,wBAAwB,KAAK,KAAK,SAAS,CAAC,CAAC,iBAAiB;EAClE;CACJ;;;;CAKA,iBAAiB,eAA2C;EACxD,KAAK,KAAK,iBAAiB,aAAa;CAC5C;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"client-catalog.d.ts","names":[],"sources":["../../src/catalogs/client-catalog.ts"],"mappings":";;iBAWgB,uBAAuB,UAAS,gCAAqC"}
1
+ {"version":3,"file":"client-catalog.d.ts","names":[],"sources":["../../src/catalogs/client-catalog.ts"],"mappings":";;iBAagB,uBAAuB,UAAS,gCAAqC"}
@@ -1,16 +1,22 @@
1
+ import { ConfigurationError } from "../shared/errors.js";
1
2
  import { CatalogNotReadyError } from "./types.js";
3
+ import { parseCatalogSnapshot } from "./snapshot-validation.js";
2
4
  import { createReader } from "./readers.js";
3
5
  import { buildCatalogSnapshot } from "./snapshot.js";
4
6
  //#region src/catalogs/client-catalog.ts
5
7
  function createPolyesterCatalog(options = {}) {
8
+ if (typeof options !== "object" || options === null || Array.isArray(options)) throw new ConfigurationError("Catalog options must be an object.");
6
9
  const cell = options.cell;
7
10
  let local = void 0;
8
- const getCurrent = () => cell ? cell.get() : local;
11
+ const getCurrent = () => {
12
+ const current = cell ? cell.get() : local;
13
+ return current === void 0 ? void 0 : parseCatalogSnapshot(current);
14
+ };
9
15
  const setCurrent = (snapshot) => {
10
16
  if (cell) cell.set(snapshot);
11
17
  else local = snapshot;
12
18
  };
13
- if (options.snapshot && !getCurrent()) setCurrent(options.snapshot);
19
+ if (options.snapshot !== void 0 && !getCurrent()) setCurrent(parseCatalogSnapshot(options.snapshot));
14
20
  const initial = getCurrent();
15
21
  let stateValue = initial ? {
16
22
  status: "fresh",
@@ -24,10 +30,11 @@ function createPolyesterCatalog(options = {}) {
24
30
  });
25
31
  const currentSource = () => getCurrent()?.source ?? "empty";
26
32
  function setSnapshot(snapshot) {
27
- setCurrent(snapshot);
33
+ const parsed = parseCatalogSnapshot(snapshot);
34
+ setCurrent(parsed);
28
35
  stateValue = {
29
36
  status: "fresh",
30
- source: snapshot.source
37
+ source: parsed.source
31
38
  };
32
39
  }
33
40
  function refresh() {
@@ -1 +1 @@
1
- {"version":3,"file":"client-catalog.js","names":[],"sources":["../../src/catalogs/client-catalog.ts"],"sourcesContent":["import { createReader } from \"./readers.js\";\nimport { buildCatalogSnapshot } from \"./snapshot.js\";\nimport type {\n CatalogSnapshot,\n CatalogState,\n CatalogStateSource,\n ClientCatalog,\n CreatePolyesterCatalogOptions,\n} from \"./types.js\";\nimport { CatalogNotReadyError } from \"./types.js\";\n\nexport function createPolyesterCatalog(options: CreatePolyesterCatalogOptions = {}): ClientCatalog {\n const cell = options.cell;\n let local: CatalogSnapshot | undefined = undefined;\n const getCurrent = (): CatalogSnapshot | undefined => (cell ? cell.get() : local);\n const setCurrent = (snapshot: CatalogSnapshot): void => {\n if (cell) cell.set(snapshot);\n else local = snapshot;\n };\n if (options.snapshot && !getCurrent()) setCurrent(options.snapshot);\n\n const initial = getCurrent();\n let stateValue: CatalogState = initial\n ? { status: \"fresh\", source: initial.source }\n : { status: \"empty\" };\n let refreshInFlight: Promise<CatalogSnapshot> | undefined;\n\n const reader = createReader(() => {\n const current = getCurrent();\n if (!current) throw new CatalogNotReadyError();\n return current;\n });\n\n const currentSource = (): CatalogStateSource => getCurrent()?.source ?? \"empty\";\n\n function setSnapshot(snapshot: CatalogSnapshot): void {\n setCurrent(snapshot);\n stateValue = { status: \"fresh\", source: snapshot.source };\n }\n\n function refresh(): Promise<CatalogSnapshot> {\n if (options.refresh === false || options.refresh === undefined) {\n const current = getCurrent();\n if (!current) return Promise.reject(new CatalogNotReadyError());\n return Promise.resolve(current);\n }\n if (refreshInFlight) return refreshInFlight;\n\n stateValue = { status: \"refreshing\", previousSource: currentSource() };\n refreshInFlight = Promise.all([options.refresh.market(), options.refresh.zipper()])\n .then(([marketSeed, zipperSeed]) => {\n const snapshot = buildCatalogSnapshot({\n market: marketSeed,\n zipper: zipperSeed,\n source: \"api\",\n version: (getCurrent()?.version ?? 0) + 1,\n });\n setSnapshot(snapshot);\n return snapshot;\n })\n .catch((error) => {\n stateValue = { status: \"stale\", source: currentSource(), error };\n throw error;\n })\n .finally(() => {\n refreshInFlight = undefined;\n });\n\n return refreshInFlight;\n }\n\n function ready(): Promise<CatalogSnapshot | null> {\n const current = getCurrent();\n if (current) return Promise.resolve(current);\n if (refreshInFlight) return refreshInFlight.catch(() => getCurrent() ?? null);\n return Promise.resolve(null);\n }\n\n function ensureReady(): Promise<CatalogSnapshot> {\n const current = getCurrent();\n if (current) return Promise.resolve(current);\n return refreshInFlight ?? refresh();\n }\n\n return {\n ...reader,\n state: () => stateValue,\n ready,\n ensureReady,\n refresh,\n setSnapshot,\n };\n}\n"],"mappings":";;;;AAWA,SAAgB,uBAAuB,UAAyC,CAAC,GAAkB;CAC/F,MAAM,OAAO,QAAQ;CACrB,IAAI,QAAqC,KAAA;CACzC,MAAM,mBAAiD,OAAO,KAAK,IAAI,IAAI;CAC3E,MAAM,cAAc,aAAoC;EACpD,IAAI,MAAM,KAAK,IAAI,QAAQ;OACtB,QAAQ;CACjB;CACA,IAAI,QAAQ,YAAY,CAAC,WAAW,GAAG,WAAW,QAAQ,QAAQ;CAElE,MAAM,UAAU,WAAW;CAC3B,IAAI,aAA2B,UACzB;EAAE,QAAQ;EAAS,QAAQ,QAAQ;CAAO,IAC1C,EAAE,QAAQ,QAAQ;CACxB,IAAI;CAEJ,MAAM,SAAS,mBAAmB;EAC9B,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS,MAAM,IAAI,qBAAqB;EAC7C,OAAO;CACX,CAAC;CAED,MAAM,sBAA0C,WAAW,CAAC,EAAE,UAAU;CAExE,SAAS,YAAY,UAAiC;EAClD,WAAW,QAAQ;EACnB,aAAa;GAAE,QAAQ;GAAS,QAAQ,SAAS;EAAO;CAC5D;CAEA,SAAS,UAAoC;EACzC,IAAI,QAAQ,YAAY,SAAS,QAAQ,YAAY,KAAA,GAAW;GAC5D,MAAM,UAAU,WAAW;GAC3B,IAAI,CAAC,SAAS,OAAO,QAAQ,OAAO,IAAI,qBAAqB,CAAC;GAC9D,OAAO,QAAQ,QAAQ,OAAO;EAClC;EACA,IAAI,iBAAiB,OAAO;EAE5B,aAAa;GAAE,QAAQ;GAAc,gBAAgB,cAAc;EAAE;EACrE,kBAAkB,QAAQ,IAAI,CAAC,QAAQ,QAAQ,OAAO,GAAG,QAAQ,QAAQ,OAAO,CAAC,CAAC,CAAC,CAC9E,MAAM,CAAC,YAAY,gBAAgB;GAChC,MAAM,WAAW,qBAAqB;IAClC,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,UAAU,WAAW,CAAC,EAAE,WAAW,KAAK;GAC5C,CAAC;GACD,YAAY,QAAQ;GACpB,OAAO;EACX,CAAC,CAAC,CACD,OAAO,UAAU;GACd,aAAa;IAAE,QAAQ;IAAS,QAAQ,cAAc;IAAG;GAAM;GAC/D,MAAM;EACV,CAAC,CAAC,CACD,cAAc;GACX,kBAAkB,KAAA;EACtB,CAAC;EAEL,OAAO;CACX;CAEA,SAAS,QAAyC;EAC9C,MAAM,UAAU,WAAW;EAC3B,IAAI,SAAS,OAAO,QAAQ,QAAQ,OAAO;EAC3C,IAAI,iBAAiB,OAAO,gBAAgB,YAAY,WAAW,KAAK,IAAI;EAC5E,OAAO,QAAQ,QAAQ,IAAI;CAC/B;CAEA,SAAS,cAAwC;EAC7C,MAAM,UAAU,WAAW;EAC3B,IAAI,SAAS,OAAO,QAAQ,QAAQ,OAAO;EAC3C,OAAO,mBAAmB,QAAQ;CACtC;CAEA,OAAO;EACH,GAAG;EACH,aAAa;EACb;EACA;EACA;EACA;CACJ;AACJ"}
1
+ {"version":3,"file":"client-catalog.js","names":[],"sources":["../../src/catalogs/client-catalog.ts"],"sourcesContent":["import { createReader } from \"./readers.js\";\nimport { buildCatalogSnapshot } from \"./snapshot.js\";\nimport type {\n CatalogSnapshot,\n CatalogState,\n CatalogStateSource,\n ClientCatalog,\n CreatePolyesterCatalogOptions,\n} from \"./types.js\";\nimport { CatalogNotReadyError } from \"./types.js\";\nimport { ConfigurationError } from \"../shared/errors.js\";\nimport { parseCatalogSnapshot } from \"./snapshot-validation.js\";\n\nexport function createPolyesterCatalog(options: CreatePolyesterCatalogOptions = {}): ClientCatalog {\n if (typeof options !== \"object\" || options === null || Array.isArray(options)) {\n throw new ConfigurationError(\"Catalog options must be an object.\");\n }\n const cell = options.cell;\n let local: CatalogSnapshot | undefined = undefined;\n const getCurrent = (): CatalogSnapshot | undefined => {\n const current = cell ? cell.get() : local;\n return current === undefined ? undefined : parseCatalogSnapshot(current);\n };\n const setCurrent = (snapshot: CatalogSnapshot): void => {\n if (cell) cell.set(snapshot);\n else local = snapshot;\n };\n if (options.snapshot !== undefined && !getCurrent()) {\n setCurrent(parseCatalogSnapshot(options.snapshot));\n }\n\n const initial = getCurrent();\n let stateValue: CatalogState = initial\n ? { status: \"fresh\", source: initial.source }\n : { status: \"empty\" };\n let refreshInFlight: Promise<CatalogSnapshot> | undefined;\n\n const reader = createReader(() => {\n const current = getCurrent();\n if (!current) throw new CatalogNotReadyError();\n return current;\n });\n\n const currentSource = (): CatalogStateSource => getCurrent()?.source ?? \"empty\";\n\n function setSnapshot(snapshot: CatalogSnapshot): void {\n const parsed = parseCatalogSnapshot(snapshot);\n setCurrent(parsed);\n stateValue = { status: \"fresh\", source: parsed.source };\n }\n\n function refresh(): Promise<CatalogSnapshot> {\n if (options.refresh === false || options.refresh === undefined) {\n const current = getCurrent();\n if (!current) return Promise.reject(new CatalogNotReadyError());\n return Promise.resolve(current);\n }\n if (refreshInFlight) return refreshInFlight;\n\n stateValue = { status: \"refreshing\", previousSource: currentSource() };\n refreshInFlight = Promise.all([options.refresh.market(), options.refresh.zipper()])\n .then(([marketSeed, zipperSeed]) => {\n const snapshot = buildCatalogSnapshot({\n market: marketSeed,\n zipper: zipperSeed,\n source: \"api\",\n version: (getCurrent()?.version ?? 0) + 1,\n });\n setSnapshot(snapshot);\n return snapshot;\n })\n .catch((error) => {\n stateValue = { status: \"stale\", source: currentSource(), error };\n throw error;\n })\n .finally(() => {\n refreshInFlight = undefined;\n });\n\n return refreshInFlight;\n }\n\n function ready(): Promise<CatalogSnapshot | null> {\n const current = getCurrent();\n if (current) return Promise.resolve(current);\n if (refreshInFlight) return refreshInFlight.catch(() => getCurrent() ?? null);\n return Promise.resolve(null);\n }\n\n function ensureReady(): Promise<CatalogSnapshot> {\n const current = getCurrent();\n if (current) return Promise.resolve(current);\n return refreshInFlight ?? refresh();\n }\n\n return {\n ...reader,\n state: () => stateValue,\n ready,\n ensureReady,\n refresh,\n setSnapshot,\n };\n}\n"],"mappings":";;;;;;AAaA,SAAgB,uBAAuB,UAAyC,CAAC,GAAkB;CAC/F,IAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,MAAM,QAAQ,OAAO,GACxE,MAAM,IAAI,mBAAmB,oCAAoC;CAErE,MAAM,OAAO,QAAQ;CACrB,IAAI,QAAqC,KAAA;CACzC,MAAM,mBAAgD;EAClD,MAAM,UAAU,OAAO,KAAK,IAAI,IAAI;EACpC,OAAO,YAAY,KAAA,IAAY,KAAA,IAAY,qBAAqB,OAAO;CAC3E;CACA,MAAM,cAAc,aAAoC;EACpD,IAAI,MAAM,KAAK,IAAI,QAAQ;OACtB,QAAQ;CACjB;CACA,IAAI,QAAQ,aAAa,KAAA,KAAa,CAAC,WAAW,GAC9C,WAAW,qBAAqB,QAAQ,QAAQ,CAAC;CAGrD,MAAM,UAAU,WAAW;CAC3B,IAAI,aAA2B,UACzB;EAAE,QAAQ;EAAS,QAAQ,QAAQ;CAAO,IAC1C,EAAE,QAAQ,QAAQ;CACxB,IAAI;CAEJ,MAAM,SAAS,mBAAmB;EAC9B,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS,MAAM,IAAI,qBAAqB;EAC7C,OAAO;CACX,CAAC;CAED,MAAM,sBAA0C,WAAW,CAAC,EAAE,UAAU;CAExE,SAAS,YAAY,UAAiC;EAClD,MAAM,SAAS,qBAAqB,QAAQ;EAC5C,WAAW,MAAM;EACjB,aAAa;GAAE,QAAQ;GAAS,QAAQ,OAAO;EAAO;CAC1D;CAEA,SAAS,UAAoC;EACzC,IAAI,QAAQ,YAAY,SAAS,QAAQ,YAAY,KAAA,GAAW;GAC5D,MAAM,UAAU,WAAW;GAC3B,IAAI,CAAC,SAAS,OAAO,QAAQ,OAAO,IAAI,qBAAqB,CAAC;GAC9D,OAAO,QAAQ,QAAQ,OAAO;EAClC;EACA,IAAI,iBAAiB,OAAO;EAE5B,aAAa;GAAE,QAAQ;GAAc,gBAAgB,cAAc;EAAE;EACrE,kBAAkB,QAAQ,IAAI,CAAC,QAAQ,QAAQ,OAAO,GAAG,QAAQ,QAAQ,OAAO,CAAC,CAAC,CAAC,CAC9E,MAAM,CAAC,YAAY,gBAAgB;GAChC,MAAM,WAAW,qBAAqB;IAClC,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,UAAU,WAAW,CAAC,EAAE,WAAW,KAAK;GAC5C,CAAC;GACD,YAAY,QAAQ;GACpB,OAAO;EACX,CAAC,CAAC,CACD,OAAO,UAAU;GACd,aAAa;IAAE,QAAQ;IAAS,QAAQ,cAAc;IAAG;GAAM;GAC/D,MAAM;EACV,CAAC,CAAC,CACD,cAAc;GACX,kBAAkB,KAAA;EACtB,CAAC;EAEL,OAAO;CACX;CAEA,SAAS,QAAyC;EAC9C,MAAM,UAAU,WAAW;EAC3B,IAAI,SAAS,OAAO,QAAQ,QAAQ,OAAO;EAC3C,IAAI,iBAAiB,OAAO,gBAAgB,YAAY,WAAW,KAAK,IAAI;EAC5E,OAAO,QAAQ,QAAQ,IAAI;CAC/B;CAEA,SAAS,cAAwC;EAC7C,MAAM,UAAU,WAAW;EAC3B,IAAI,SAAS,OAAO,QAAQ,QAAQ,OAAO;EAC3C,OAAO,mBAAmB,QAAQ;CACtC;CAEA,OAAO;EACH,GAAG;EACH,aAAa;EACb;EACA;EACA;EACA;CACJ;AACJ"}
@@ -1,7 +1,7 @@
1
1
  import { CatalogConversionError, CatalogLookupError, CatalogNotReadyError, CatalogValidationFailedError } from "./types.js";
2
2
  import { UNKNOWN_ASSET_LABEL, UNKNOWN_LEDGER_ASSET_ID, isUnknownLedgerAsset, isUnknownZipperAsset, unknownLedgerAsset, unknownZipperAsset } from "./unknown-asset.js";
3
- import { createCatalogSnapshotReader } from "./readers.js";
4
3
  import { PAIR_STATUSES } from "../shared/catalog-config.js";
4
+ import { createCatalogSnapshotReader } from "./readers.js";
5
5
  import { buildCatalogSnapshot } from "./snapshot.js";
6
6
  import { createPolyesterCatalog } from "./client-catalog.js";
7
7
  import { patchZipperCatalogSupply } from "./zipper-supply.js";
@@ -1 +1 @@
1
- {"version":3,"file":"readers.d.ts","names":[],"sources":["../../src/catalogs/readers.ts"],"mappings":";;iBAiwBgB,4BAA4B,UAAU,kBAAkB"}
1
+ {"version":3,"file":"readers.d.ts","names":[],"sources":["../../src/catalogs/readers.ts"],"mappings":";;iBAkwBgB,4BAA4B,UAAU,kBAAkB"}
@@ -2,6 +2,7 @@ import { scaledToDecimal, scaledToDisplay, significantDecimalPlaces, tryDecimalT
2
2
  import { CatalogConversionError, CatalogLookupError, CatalogValidationFailedError } from "./types.js";
3
3
  import { indexesFor } from "./indexes.js";
4
4
  import { resolveLedgerAssetByLedgerId, resolveZipperAssetByLedgerId } from "./unknown-asset.js";
5
+ import { parseCatalogSnapshot } from "./snapshot-validation.js";
5
6
  function isListed(pair, nowMs) {
6
7
  if (pair.listingAt === null || pair.listingAt > nowMs) return false;
7
8
  if (pair.status === "disabled") return false;
@@ -537,7 +538,8 @@ function createReader(getSnapshot) {
537
538
  return new SnapshotCatalogReader(getSnapshot);
538
539
  }
539
540
  function createCatalogSnapshotReader(snapshot) {
540
- return createReader(() => snapshot);
541
+ const parsed = parseCatalogSnapshot(snapshot);
542
+ return createReader(() => parsed);
541
543
  }
542
544
  //#endregion
543
545
  export { createCatalogSnapshotReader, createReader };