@polyester/sdk 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +63 -17
  3. package/dist/_virtual/_rolldown/runtime.js +15 -1
  4. package/dist/account-signer/types.d.ts.map +1 -1
  5. package/dist/account-signer/types.js +6 -3
  6. package/dist/account-signer/types.js.map +1 -1
  7. package/dist/browser-client.d.ts +4 -2
  8. package/dist/browser-client.d.ts.map +1 -1
  9. package/dist/browser-client.js +3 -4
  10. package/dist/browser-client.js.map +1 -1
  11. package/dist/catalogs/client-catalog.d.ts.map +1 -1
  12. package/dist/catalogs/client-catalog.js +11 -4
  13. package/dist/catalogs/client-catalog.js.map +1 -1
  14. package/dist/catalogs/index.js +1 -1
  15. package/dist/catalogs/readers.d.ts.map +1 -1
  16. package/dist/catalogs/readers.js +3 -1
  17. package/dist/catalogs/readers.js.map +1 -1
  18. package/dist/catalogs/snapshot-validation.js +132 -0
  19. package/dist/catalogs/snapshot-validation.js.map +1 -0
  20. package/dist/catalogs/snapshot.d.ts.map +1 -1
  21. package/dist/catalogs/snapshot.js +16 -7
  22. package/dist/catalogs/snapshot.js.map +1 -1
  23. package/dist/catalogs/zipper-supply.d.ts.map +1 -1
  24. package/dist/catalogs/zipper-supply.js +10 -7
  25. package/dist/catalogs/zipper-supply.js.map +1 -1
  26. package/dist/core-client.d.ts +24 -17
  27. package/dist/core-client.d.ts.map +1 -1
  28. package/dist/core-client.js +21 -3
  29. package/dist/core-client.js.map +1 -1
  30. package/dist/environment.d.ts.map +1 -1
  31. package/dist/environment.js +32 -1
  32. package/dist/environment.js.map +1 -1
  33. package/dist/index.js +3 -3
  34. package/dist/realtime/client.js +13 -2
  35. package/dist/realtime/client.js.map +1 -1
  36. package/dist/realtime/snapshot-then-stream.js +1 -1
  37. package/dist/realtime/snapshot-then-stream.js.map +1 -1
  38. package/dist/realtime/types.d.ts +2 -0
  39. package/dist/realtime/types.d.ts.map +1 -1
  40. package/dist/server-client.d.ts +17 -8
  41. package/dist/server-client.d.ts.map +1 -1
  42. package/dist/server-client.js +8 -11
  43. package/dist/server-client.js.map +1 -1
  44. package/dist/services/accounts/accounts.js +3 -3
  45. package/dist/services/accounts/accounts.js.map +1 -1
  46. package/dist/services/accounts/accounts.schemas.d.ts +13 -13
  47. package/dist/services/accounts/accounts.schemas.d.ts.map +1 -1
  48. package/dist/services/accounts/accounts.schemas.js +11 -11
  49. package/dist/services/accounts/accounts.schemas.js.map +1 -1
  50. package/dist/services/address-book/address-book.js +28 -28
  51. package/dist/services/address-book/address-book.js.map +1 -1
  52. package/dist/services/address-book/address-book.schemas.d.ts +751 -751
  53. package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
  54. package/dist/services/address-book/address-book.schemas.js +160 -160
  55. package/dist/services/address-book/address-book.schemas.js.map +1 -1
  56. package/dist/services/api-keys/api-keys.d.ts +6 -6
  57. package/dist/services/api-keys/api-keys.d.ts.map +1 -1
  58. package/dist/services/api-keys/api-keys.js +12 -12
  59. package/dist/services/api-keys/api-keys.js.map +1 -1
  60. package/dist/services/api-keys/api-keys.schemas.d.ts +62 -62
  61. package/dist/services/api-keys/api-keys.schemas.d.ts.map +1 -1
  62. package/dist/services/api-keys/api-keys.schemas.js +34 -34
  63. package/dist/services/api-keys/api-keys.schemas.js.map +1 -1
  64. package/dist/services/auth/auth.d.ts +46 -40
  65. package/dist/services/auth/auth.d.ts.map +1 -1
  66. package/dist/services/auth/auth.js +28 -25
  67. package/dist/services/auth/auth.js.map +1 -1
  68. package/dist/services/auth/profile/profile.d.ts +2 -2
  69. package/dist/services/auth/profile/profile.d.ts.map +1 -1
  70. package/dist/services/auth/profile/profile.js +7 -7
  71. package/dist/services/auth/profile/profile.js.map +1 -1
  72. package/dist/services/auth/profile/profile.schemas.d.ts +41 -41
  73. package/dist/services/auth/profile/profile.schemas.d.ts.map +1 -1
  74. package/dist/services/auth/profile/profile.schemas.js +27 -27
  75. package/dist/services/auth/profile/profile.schemas.js.map +1 -1
  76. package/dist/services/auth/session.d.ts +1 -1
  77. package/dist/services/auth/session.d.ts.map +1 -1
  78. package/dist/services/auth/session.js +6 -2
  79. package/dist/services/auth/session.js.map +1 -1
  80. package/dist/services/auth/session.schemas.js +17 -17
  81. package/dist/services/auth/session.schemas.js.map +1 -1
  82. package/dist/services/auth/session.types.d.ts +3 -2
  83. package/dist/services/auth/session.types.d.ts.map +1 -1
  84. package/dist/services/balances/balances.d.ts +1 -1
  85. package/dist/services/balances/balances.js +9 -9
  86. package/dist/services/balances/balances.js.map +1 -1
  87. package/dist/services/balances/balances.schemas.d.ts +95 -95
  88. package/dist/services/balances/balances.schemas.d.ts.map +1 -1
  89. package/dist/services/balances/balances.schemas.js +61 -61
  90. package/dist/services/balances/balances.schemas.js.map +1 -1
  91. package/dist/services/candles/candles.js +12 -12
  92. package/dist/services/candles/candles.js.map +1 -1
  93. package/dist/services/candles/candles.schemas.d.ts +70 -70
  94. package/dist/services/candles/candles.schemas.d.ts.map +1 -1
  95. package/dist/services/candles/candles.schemas.js +47 -48
  96. package/dist/services/candles/candles.schemas.js.map +1 -1
  97. package/dist/services/chain-analytics/chain-analytics.js +7 -7
  98. package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
  99. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts +68 -68
  100. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
  101. package/dist/services/chain-analytics/chain-analytics.schemas.js +29 -29
  102. package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
  103. package/dist/services/deposit/deposit.js +5 -5
  104. package/dist/services/deposit/deposit.js.map +1 -1
  105. package/dist/services/deposit/deposit.schemas.d.ts +17 -17
  106. package/dist/services/deposit/deposit.schemas.d.ts.map +1 -1
  107. package/dist/services/deposit/deposit.schemas.js +11 -11
  108. package/dist/services/deposit/deposit.schemas.js.map +1 -1
  109. package/dist/services/guard-signer/guard-signer.js +13 -13
  110. package/dist/services/guard-signer/guard-signer.js.map +1 -1
  111. package/dist/services/guard-signer/guard-signer.schemas.d.ts +75 -75
  112. package/dist/services/guard-signer/guard-signer.schemas.d.ts.map +1 -1
  113. package/dist/services/guard-signer/guard-signer.schemas.js +42 -42
  114. package/dist/services/guard-signer/guard-signer.schemas.js.map +1 -1
  115. package/dist/services/heatmap/heatmap.js +9 -9
  116. package/dist/services/heatmap/heatmap.js.map +1 -1
  117. package/dist/services/heatmap/heatmap.schemas.d.ts +144 -144
  118. package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
  119. package/dist/services/heatmap/heatmap.schemas.js +47 -47
  120. package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
  121. package/dist/services/internal-transfers/internal-transfers.js +3 -3
  122. package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
  123. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +53 -53
  124. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
  125. package/dist/services/internal-transfers/internal-transfers.schemas.js +27 -27
  126. package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
  127. package/dist/services/lifecycle/lifecycle.js +10 -10
  128. package/dist/services/lifecycle/lifecycle.js.map +1 -1
  129. package/dist/services/lifecycle/lifecycle.schemas.d.ts +614 -614
  130. package/dist/services/lifecycle/lifecycle.schemas.d.ts.map +1 -1
  131. package/dist/services/lifecycle/lifecycle.schemas.js +146 -146
  132. package/dist/services/lifecycle/lifecycle.schemas.js.map +1 -1
  133. package/dist/services/market-data/market-data.js +6 -6
  134. package/dist/services/market-data/market-data.js.map +1 -1
  135. package/dist/services/market-data/market-data.schemas.d.ts +20 -20
  136. package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
  137. package/dist/services/market-data/market-data.schemas.js +51 -55
  138. package/dist/services/market-data/market-data.schemas.js.map +1 -1
  139. package/dist/services/market-overview/market-overview.js +4 -4
  140. package/dist/services/market-overview/market-overview.js.map +1 -1
  141. package/dist/services/market-overview/market-overview.schemas.d.ts +38 -38
  142. package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
  143. package/dist/services/market-overview/market-overview.schemas.js +33 -33
  144. package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
  145. package/dist/services/mfa/mfa.js +27 -27
  146. package/dist/services/mfa/mfa.js.map +1 -1
  147. package/dist/services/mfa/mfa.schemas.d.ts +206 -206
  148. package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
  149. package/dist/services/mfa/mfa.schemas.js +83 -83
  150. package/dist/services/mfa/mfa.schemas.js.map +1 -1
  151. package/dist/services/orderbook/orderbook.d.ts +2 -2
  152. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  153. package/dist/services/orderbook/orderbook.js +5 -5
  154. package/dist/services/orderbook/orderbook.js.map +1 -1
  155. package/dist/services/orderbook/orderbook.schemas.d.ts +22 -22
  156. package/dist/services/orderbook/orderbook.schemas.d.ts.map +1 -1
  157. package/dist/services/orderbook/orderbook.schemas.js +15 -15
  158. package/dist/services/orderbook/orderbook.schemas.js.map +1 -1
  159. package/dist/services/orders/order-errors.schemas.d.ts +18 -18
  160. package/dist/services/orders/order-errors.schemas.d.ts.map +1 -1
  161. package/dist/services/orders/order-errors.schemas.js +8 -8
  162. package/dist/services/orders/order-errors.schemas.js.map +1 -1
  163. package/dist/services/orders/orders-batch.schemas.d.ts +492 -492
  164. package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
  165. package/dist/services/orders/orders-batch.schemas.js +118 -118
  166. package/dist/services/orders/orders-batch.schemas.js.map +1 -1
  167. package/dist/services/orders/orders-identifiers.schemas.js +5 -5
  168. package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
  169. package/dist/services/orders/orders-input.schemas.d.ts +657 -648
  170. package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
  171. package/dist/services/orders/orders-input.schemas.js +100 -96
  172. package/dist/services/orders/orders-input.schemas.js.map +1 -1
  173. package/dist/services/orders/orders-modify.schemas.d.ts +370 -351
  174. package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
  175. package/dist/services/orders/orders-modify.schemas.js +48 -44
  176. package/dist/services/orders/orders-modify.schemas.js.map +1 -1
  177. package/dist/services/orders/orders-output.schemas.d.ts +183 -183
  178. package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
  179. package/dist/services/orders/orders-output.schemas.js +49 -49
  180. package/dist/services/orders/orders-output.schemas.js.map +1 -1
  181. package/dist/services/orders/orders-risk.schemas.d.ts +226 -226
  182. package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
  183. package/dist/services/orders/orders-risk.schemas.js +69 -69
  184. package/dist/services/orders/orders-risk.schemas.js.map +1 -1
  185. package/dist/services/orders/orders.d.ts +8 -8
  186. package/dist/services/orders/orders.d.ts.map +1 -1
  187. package/dist/services/orders/orders.js +44 -32
  188. package/dist/services/orders/orders.js.map +1 -1
  189. package/dist/services/policies/api-key-policies/api-key-policies.d.ts +6 -6
  190. package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
  191. package/dist/services/policies/api-key-policies/api-key-policies.js +11 -11
  192. package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
  193. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts +105 -105
  194. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts.map +1 -1
  195. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js +49 -49
  196. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js.map +1 -1
  197. package/dist/services/policies/shared.d.ts +5 -5
  198. package/dist/services/policies/shared.d.ts.map +1 -1
  199. package/dist/services/policies/shared.js +10 -10
  200. package/dist/services/policies/shared.js.map +1 -1
  201. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +6 -6
  202. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
  203. package/dist/services/policies/subaccount-policies/subaccount-policies.js +13 -13
  204. package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
  205. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +124 -124
  206. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
  207. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +75 -75
  208. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
  209. package/dist/services/shared.js +11 -11
  210. package/dist/services/shared.js.map +1 -1
  211. package/dist/services/social-verification/social-verification.d.ts +3 -3
  212. package/dist/services/social-verification/social-verification.d.ts.map +1 -1
  213. package/dist/services/social-verification/social-verification.js +7 -7
  214. package/dist/services/social-verification/social-verification.js.map +1 -1
  215. package/dist/services/social-verification/social-verification.schemas.d.ts +54 -54
  216. package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
  217. package/dist/services/social-verification/social-verification.schemas.js +28 -28
  218. package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
  219. package/dist/services/subaccount-resolver.js +5 -3
  220. package/dist/services/subaccount-resolver.js.map +1 -1
  221. package/dist/services/subaccounts/subaccounts.d.ts +15 -15
  222. package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
  223. package/dist/services/subaccounts/subaccounts.js +35 -35
  224. package/dist/services/subaccounts/subaccounts.js.map +1 -1
  225. package/dist/services/subaccounts/subaccounts.schemas.d.ts +135 -135
  226. package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
  227. package/dist/services/subaccounts/subaccounts.schemas.js +72 -72
  228. package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
  229. package/dist/services/trades/trades.d.ts +2 -2
  230. package/dist/services/trades/trades.d.ts.map +1 -1
  231. package/dist/services/trades/trades.js +5 -5
  232. package/dist/services/trades/trades.js.map +1 -1
  233. package/dist/services/trades/trades.schemas.d.ts +31 -31
  234. package/dist/services/trades/trades.schemas.d.ts.map +1 -1
  235. package/dist/services/trades/trades.schemas.js +24 -24
  236. package/dist/services/trades/trades.schemas.js.map +1 -1
  237. package/dist/services/trading-withdraws/trading-withdraws.js +8 -8
  238. package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
  239. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts +45 -45
  240. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
  241. package/dist/services/trading-withdraws/trading-withdraws.schemas.js +36 -36
  242. package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
  243. package/dist/services/transfers/transfers.d.ts +1 -1
  244. package/dist/services/transfers/transfers.d.ts.map +1 -1
  245. package/dist/services/transfers/transfers.js +5 -5
  246. package/dist/services/transfers/transfers.js.map +1 -1
  247. package/dist/services/transfers/transfers.schemas.d.ts +42 -42
  248. package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
  249. package/dist/services/transfers/transfers.schemas.js +30 -30
  250. package/dist/services/transfers/transfers.schemas.js.map +1 -1
  251. package/dist/services/triggers/trigger-child-order.schemas.js +23 -23
  252. package/dist/services/triggers/trigger-child-order.schemas.js.map +1 -1
  253. package/dist/services/triggers/trigger-input.schemas.d.ts +226 -226
  254. package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
  255. package/dist/services/triggers/trigger-input.schemas.js +53 -53
  256. package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
  257. package/dist/services/triggers/triggers-output.schemas.d.ts +210 -210
  258. package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
  259. package/dist/services/triggers/triggers-output.schemas.js +152 -152
  260. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  261. package/dist/services/triggers/triggers.js +21 -21
  262. package/dist/services/triggers/triggers.js.map +1 -1
  263. package/dist/services/whiteboard/whiteboard.js +15 -15
  264. package/dist/services/whiteboard/whiteboard.js.map +1 -1
  265. package/dist/services/whiteboard/whiteboard.schemas.d.ts +379 -379
  266. package/dist/services/whiteboard/whiteboard.schemas.d.ts.map +1 -1
  267. package/dist/services/whiteboard/whiteboard.schemas.js +71 -71
  268. package/dist/services/whiteboard/whiteboard.schemas.js.map +1 -1
  269. package/dist/services/zipper/zipper.js +3 -3
  270. package/dist/services/zipper/zipper.js.map +1 -1
  271. package/dist/services/zipper/zipper.schemas.d.ts +1 -1
  272. package/dist/services/zipper/zipper.schemas.js +54 -54
  273. package/dist/services/zipper/zipper.schemas.js.map +1 -1
  274. package/dist/shared/account-scope.d.ts +6 -6
  275. package/dist/shared/account-scope.d.ts.map +1 -1
  276. package/dist/shared/account-scope.js +3 -3
  277. package/dist/shared/account-scope.js.map +1 -1
  278. package/dist/shared/connect-error-mapping.d.ts +1 -1
  279. package/dist/shared/connect-error-mapping.js +29 -3
  280. package/dist/shared/connect-error-mapping.js.map +1 -1
  281. package/dist/shared/rate-limit.schemas.d.ts +12 -12
  282. package/dist/shared/rate-limit.schemas.d.ts.map +1 -1
  283. package/dist/shared/rate-limit.schemas.js +7 -7
  284. package/dist/shared/rate-limit.schemas.js.map +1 -1
  285. package/dist/shared/schemas.js +26 -26
  286. package/dist/shared/schemas.js.map +1 -1
  287. package/dist/shared/transports.js +7 -12
  288. package/dist/shared/transports.js.map +1 -1
  289. package/dist/shared/types.d.ts +12 -0
  290. package/dist/shared/types.d.ts.map +1 -1
  291. package/dist/shared/validation.d.ts +14 -0
  292. package/dist/shared/validation.d.ts.map +1 -0
  293. package/dist/shared/validation.js +24 -0
  294. package/dist/shared/validation.js.map +1 -0
  295. package/dist/utils/connect-order-errors.js +2 -2
  296. package/dist/utils/connect-order-errors.js.map +1 -1
  297. package/dist/utils/cookies.d.ts +8 -3
  298. package/dist/utils/cookies.d.ts.map +1 -1
  299. package/dist/utils/cookies.js +7 -1
  300. package/dist/utils/cookies.js.map +1 -1
  301. package/dist/utils/event-emitter.d.ts +1 -1
  302. package/dist/utils/event-emitter.d.ts.map +1 -1
  303. package/dist/utils/event-emitter.js +4 -2
  304. package/dist/utils/event-emitter.js.map +1 -1
  305. package/dist/utils/evm.js +2 -2
  306. package/dist/utils/evm.js.map +1 -1
  307. package/dist/utils/jwt.d.ts +2 -2
  308. package/dist/utils/jwt.d.ts.map +1 -1
  309. package/dist/utils/jwt.js +2 -2
  310. package/dist/utils/jwt.js.map +1 -1
  311. package/package.json +1 -1
@@ -1,58 +1,58 @@
1
- import * as v from "valibot";
1
+ import { validation_d_exports } from "../../../shared/validation.js";
2
2
  //#region src/services/auth/profile/profile.schemas.d.ts
3
- declare const ProfileSchema: v.ObjectSchema<{
4
- readonly username: v.StringSchema<undefined>;
5
- readonly bio: v.StringSchema<undefined>;
6
- readonly website: v.StringSchema<undefined>;
7
- readonly twitter: v.StringSchema<undefined>;
8
- readonly twitterVerified: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
9
- readonly discord: v.StringSchema<undefined>;
10
- readonly discordVerified: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
11
- readonly avatarUrl: v.StringSchema<undefined>;
12
- readonly createdAt: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
13
- readonly seconds: v.BigintSchema<undefined>;
14
- readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
15
- }, undefined>, undefined>, v.TransformAction<{
3
+ declare const ProfileSchema: validation_d_exports.ObjectSchema<{
4
+ readonly username: validation_d_exports.StringSchema<undefined>;
5
+ readonly bio: validation_d_exports.StringSchema<undefined>;
6
+ readonly website: validation_d_exports.StringSchema<undefined>;
7
+ readonly twitter: validation_d_exports.StringSchema<undefined>;
8
+ readonly twitterVerified: validation_d_exports.OptionalSchema<validation_d_exports.BooleanSchema<undefined>, false>;
9
+ readonly discord: validation_d_exports.StringSchema<undefined>;
10
+ readonly discordVerified: validation_d_exports.OptionalSchema<validation_d_exports.BooleanSchema<undefined>, false>;
11
+ readonly avatarUrl: validation_d_exports.StringSchema<undefined>;
12
+ readonly createdAt: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.OptionalSchema<validation_d_exports.ObjectSchema<{
13
+ readonly seconds: validation_d_exports.BigintSchema<undefined>;
14
+ readonly nanos: validation_d_exports.OptionalSchema<validation_d_exports.NumberSchema<undefined>, 0>;
15
+ }, undefined>, undefined>, validation_d_exports.TransformAction<{
16
16
  seconds: bigint;
17
17
  nanos: number;
18
18
  } | undefined, number | undefined>]>;
19
- readonly nextUsernameChangeAt: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
20
- readonly seconds: v.BigintSchema<undefined>;
21
- readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
22
- }, undefined>, undefined>, v.TransformAction<{
19
+ readonly nextUsernameChangeAt: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.OptionalSchema<validation_d_exports.ObjectSchema<{
20
+ readonly seconds: validation_d_exports.BigintSchema<undefined>;
21
+ readonly nanos: validation_d_exports.OptionalSchema<validation_d_exports.NumberSchema<undefined>, 0>;
22
+ }, undefined>, undefined>, validation_d_exports.TransformAction<{
23
23
  seconds: bigint;
24
24
  nanos: number;
25
25
  } | undefined, number | undefined>]>;
26
- readonly vipTier: v.NumberSchema<undefined>;
27
- readonly usernameUnlocked: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
26
+ readonly vipTier: validation_d_exports.NumberSchema<undefined>;
27
+ readonly usernameUnlocked: validation_d_exports.OptionalSchema<validation_d_exports.BooleanSchema<undefined>, false>;
28
28
  }, undefined>;
29
- type Profile = v.InferOutput<typeof ProfileSchema>;
30
- declare const UpdateProfileInputSchema: v.ObjectSchema<{
31
- readonly username: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
32
- readonly bio: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
33
- readonly website: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
34
- readonly twitter: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
35
- readonly avatarUrl: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
29
+ type Profile = validation_d_exports.InferOutput<typeof ProfileSchema>;
30
+ declare const UpdateProfileInputSchema: validation_d_exports.ObjectSchema<{
31
+ readonly username: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
32
+ readonly bio: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
33
+ readonly website: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
34
+ readonly twitter: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
35
+ readonly avatarUrl: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
36
36
  }, undefined>;
37
- type UpdateProfileInput = v.InferInput<typeof UpdateProfileInputSchema>;
38
- declare const UsernameHistoryEntrySchema: v.ObjectSchema<{
39
- readonly username: v.StringSchema<undefined>;
40
- readonly setAt: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
41
- readonly seconds: v.BigintSchema<undefined>;
42
- readonly nanos: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
43
- }, undefined>, undefined>, v.TransformAction<{
37
+ type UpdateProfileInput = validation_d_exports.InferInput<typeof UpdateProfileInputSchema>;
38
+ declare const UsernameHistoryEntrySchema: validation_d_exports.ObjectSchema<{
39
+ readonly username: validation_d_exports.StringSchema<undefined>;
40
+ readonly setAt: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.OptionalSchema<validation_d_exports.ObjectSchema<{
41
+ readonly seconds: validation_d_exports.BigintSchema<undefined>;
42
+ readonly nanos: validation_d_exports.OptionalSchema<validation_d_exports.NumberSchema<undefined>, 0>;
43
+ }, undefined>, undefined>, validation_d_exports.TransformAction<{
44
44
  seconds: bigint;
45
45
  nanos: number;
46
46
  } | undefined, number | undefined>]>;
47
47
  }, undefined>;
48
- type UsernameHistoryEntry = v.InferOutput<typeof UsernameHistoryEntrySchema>;
49
- declare const AccountIdentitySchema: v.ObjectSchema<{
50
- readonly accountId: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
51
- readonly username: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
52
- readonly avatarUrl: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
53
- readonly rootSmartAccountAddress: v.StringSchema<undefined>;
48
+ type UsernameHistoryEntry = validation_d_exports.InferOutput<typeof UsernameHistoryEntrySchema>;
49
+ declare const AccountIdentitySchema: validation_d_exports.ObjectSchema<{
50
+ readonly accountId: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.BigintSchema<undefined>, validation_d_exports.TransformAction<bigint, string>]>;
51
+ readonly username: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
52
+ readonly avatarUrl: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
53
+ readonly rootSmartAccountAddress: validation_d_exports.StringSchema<undefined>;
54
54
  }, undefined>;
55
- type AccountIdentity = v.InferOutput<typeof AccountIdentitySchema>;
55
+ type AccountIdentity = validation_d_exports.InferOutput<typeof AccountIdentitySchema>;
56
56
  //#endregion
57
57
  export { AccountIdentity, AccountIdentitySchema, Profile, ProfileSchema, UpdateProfileInput, UpdateProfileInputSchema, UsernameHistoryEntry, UsernameHistoryEntrySchema };
58
58
  //# sourceMappingURL=profile.schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.schemas.d.ts","names":[],"sources":["../../../../src/services/auth/profile/profile.schemas.ts"],"mappings":";;cAIa,eAAa,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;KAqBd,UAAU,EAAE,mBAAmB;cAG9B,0BAAwB,EAAA;;;;;;;KAOzB,qBAAqB,EAAE,kBAAkB;cAExC,4BAA0B,EAAA;;;;;;;;;;KAQ3B,uBAAuB,EAAE,mBAAmB;cAE3C,uBAAqB,EAAA;;;;;;KAOtB,kBAAkB,EAAE,mBAAmB"}
1
+ {"version":3,"file":"profile.schemas.d.ts","names":[],"sources":["../../../../src/services/auth/profile/profile.schemas.ts"],"mappings":";;cAIa,eAAa,qBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;KAqBd,UAAU,qBAAE,mBAAmB;cAG9B,0BAAwB,qBAAA;;;;;;;KAOzB,qBAAqB,qBAAE,kBAAkB;cAExC,4BAA0B,qBAAA;;;;;;;;;;KAQ3B,uBAAuB,qBAAE,mBAAmB;cAE3C,uBAAqB,qBAAA;;;;;;KAOtB,kBAAkB,qBAAE,mBAAmB"}
@@ -1,37 +1,37 @@
1
+ import { validation_exports } from "../../../shared/validation.js";
1
2
  import { tsObjToMs } from "../../../utils/time.js";
2
3
  import { PublicIdSchema, TimestampSchema } from "../../../shared/schemas.js";
3
- import * as v from "valibot";
4
4
  //#region src/services/auth/profile/profile.schemas.ts
5
- const ProfileSchema = v.object({
6
- username: v.string(),
7
- bio: v.string(),
8
- website: v.string(),
9
- twitter: v.string(),
10
- twitterVerified: v.optional(v.boolean(), false),
11
- discord: v.string(),
12
- discordVerified: v.optional(v.boolean(), false),
13
- avatarUrl: v.string(),
14
- createdAt: v.pipe(v.optional(TimestampSchema), v.transform((v) => v ? tsObjToMs(v) : void 0)),
15
- nextUsernameChangeAt: v.pipe(v.optional(TimestampSchema), v.transform((v) => v ? tsObjToMs(v) : void 0)),
16
- vipTier: v.number(),
17
- usernameUnlocked: v.optional(v.boolean(), false)
5
+ const ProfileSchema = validation_exports.object({
6
+ username: validation_exports.string(),
7
+ bio: validation_exports.string(),
8
+ website: validation_exports.string(),
9
+ twitter: validation_exports.string(),
10
+ twitterVerified: validation_exports.optional(validation_exports.boolean(), false),
11
+ discord: validation_exports.string(),
12
+ discordVerified: validation_exports.optional(validation_exports.boolean(), false),
13
+ avatarUrl: validation_exports.string(),
14
+ createdAt: validation_exports.pipe(validation_exports.optional(TimestampSchema), validation_exports.transform((v) => v ? tsObjToMs(v) : void 0)),
15
+ nextUsernameChangeAt: validation_exports.pipe(validation_exports.optional(TimestampSchema), validation_exports.transform((v) => v ? tsObjToMs(v) : void 0)),
16
+ vipTier: validation_exports.number(),
17
+ usernameUnlocked: validation_exports.optional(validation_exports.boolean(), false)
18
18
  });
19
- const UpdateProfileInputSchema = v.object({
20
- username: v.optional(v.string()),
21
- bio: v.optional(v.string()),
22
- website: v.optional(v.string()),
23
- twitter: v.optional(v.string()),
24
- avatarUrl: v.optional(v.string())
19
+ const UpdateProfileInputSchema = validation_exports.object({
20
+ username: validation_exports.optional(validation_exports.string()),
21
+ bio: validation_exports.optional(validation_exports.string()),
22
+ website: validation_exports.optional(validation_exports.string()),
23
+ twitter: validation_exports.optional(validation_exports.string()),
24
+ avatarUrl: validation_exports.optional(validation_exports.string())
25
25
  });
26
- const UsernameHistoryEntrySchema = v.object({
27
- username: v.string(),
28
- setAt: v.pipe(v.optional(TimestampSchema), v.transform((v) => v ? tsObjToMs(v) : void 0))
26
+ const UsernameHistoryEntrySchema = validation_exports.object({
27
+ username: validation_exports.string(),
28
+ setAt: validation_exports.pipe(validation_exports.optional(TimestampSchema), validation_exports.transform((v) => v ? tsObjToMs(v) : void 0))
29
29
  });
30
- const AccountIdentitySchema = v.object({
30
+ const AccountIdentitySchema = validation_exports.object({
31
31
  accountId: PublicIdSchema,
32
- username: v.optional(v.string()),
33
- avatarUrl: v.optional(v.string()),
34
- rootSmartAccountAddress: v.string()
32
+ username: validation_exports.optional(validation_exports.string()),
33
+ avatarUrl: validation_exports.optional(validation_exports.string()),
34
+ rootSmartAccountAddress: validation_exports.string()
35
35
  });
36
36
  //#endregion
37
37
  export { AccountIdentitySchema, ProfileSchema, UpdateProfileInputSchema, UsernameHistoryEntrySchema };
@@ -1 +1 @@
1
- {"version":3,"file":"profile.schemas.js","names":[],"sources":["../../../../src/services/auth/profile/profile.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { PublicIdSchema, TimestampSchema } from \"../../../shared/schemas.js\";\nimport { tsObjToMs } from \"../../../utils/time.js\";\n\nexport const ProfileSchema = v.object({\n username: v.string(),\n bio: v.string(),\n website: v.string(),\n twitter: v.string(),\n twitterVerified: v.optional(v.boolean(), false),\n discord: v.string(),\n discordVerified: v.optional(v.boolean(), false),\n avatarUrl: v.string(),\n createdAt: v.pipe(\n v.optional(TimestampSchema),\n v.transform((v) => (v ? tsObjToMs(v) : undefined)),\n ),\n nextUsernameChangeAt: v.pipe(\n v.optional(TimestampSchema),\n v.transform((v) => (v ? tsObjToMs(v) : undefined)),\n ),\n vipTier: v.number(),\n usernameUnlocked: v.optional(v.boolean(), false),\n});\n\nexport type Profile = v.InferOutput<typeof ProfileSchema>;\n// Deliberately non-strict: update() accepts a round-tripped Profile\n// ({ ...profile, bio }) and strips its readonly fields instead of rejecting.\nexport const UpdateProfileInputSchema = v.object({\n username: v.optional(v.string()),\n bio: v.optional(v.string()),\n website: v.optional(v.string()),\n twitter: v.optional(v.string()),\n avatarUrl: v.optional(v.string()),\n});\nexport type UpdateProfileInput = v.InferInput<typeof UpdateProfileInputSchema>;\n\nexport const UsernameHistoryEntrySchema = v.object({\n username: v.string(),\n setAt: v.pipe(\n v.optional(TimestampSchema),\n v.transform((v) => (v ? tsObjToMs(v) : undefined)),\n ),\n});\n\nexport type UsernameHistoryEntry = v.InferOutput<typeof UsernameHistoryEntrySchema>;\n\nexport const AccountIdentitySchema = v.object({\n accountId: PublicIdSchema,\n username: v.optional(v.string()),\n avatarUrl: v.optional(v.string()),\n rootSmartAccountAddress: v.string(),\n});\n\nexport type AccountIdentity = v.InferOutput<typeof AccountIdentitySchema>;\n"],"mappings":";;;;AAIA,MAAa,gBAAgB,EAAE,OAAO;CAClC,UAAU,EAAE,OAAO;CACnB,KAAK,EAAE,OAAO;CACd,SAAS,EAAE,OAAO;CAClB,SAAS,EAAE,OAAO;CAClB,iBAAiB,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;CAC9C,SAAS,EAAE,OAAO;CAClB,iBAAiB,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;CAC9C,WAAW,EAAE,OAAO;CACpB,WAAW,EAAE,KACT,EAAE,SAAS,eAAe,GAC1B,EAAE,WAAW,MAAO,IAAI,UAAU,CAAC,IAAI,KAAA,CAAU,CACrD;CACA,sBAAsB,EAAE,KACpB,EAAE,SAAS,eAAe,GAC1B,EAAE,WAAW,MAAO,IAAI,UAAU,CAAC,IAAI,KAAA,CAAU,CACrD;CACA,SAAS,EAAE,OAAO;CAClB,kBAAkB,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;AACnD,CAAC;AAKD,MAAa,2BAA2B,EAAE,OAAO;CAC7C,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;CAC/B,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;CAC1B,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;CAC9B,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;CAC9B,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;AACpC,CAAC;AAGD,MAAa,6BAA6B,EAAE,OAAO;CAC/C,UAAU,EAAE,OAAO;CACnB,OAAO,EAAE,KACL,EAAE,SAAS,eAAe,GAC1B,EAAE,WAAW,MAAO,IAAI,UAAU,CAAC,IAAI,KAAA,CAAU,CACrD;AACJ,CAAC;AAID,MAAa,wBAAwB,EAAE,OAAO;CAC1C,WAAW;CACX,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;CAC/B,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;CAChC,yBAAyB,EAAE,OAAO;AACtC,CAAC"}
1
+ {"version":3,"file":"profile.schemas.js","names":["v"],"sources":["../../../../src/services/auth/profile/profile.schemas.ts"],"sourcesContent":["import * as v from \"../../../shared/validation.js\";\nimport { PublicIdSchema, TimestampSchema } from \"../../../shared/schemas.js\";\nimport { tsObjToMs } from \"../../../utils/time.js\";\n\nexport const ProfileSchema = v.object({\n username: v.string(),\n bio: v.string(),\n website: v.string(),\n twitter: v.string(),\n twitterVerified: v.optional(v.boolean(), false),\n discord: v.string(),\n discordVerified: v.optional(v.boolean(), false),\n avatarUrl: v.string(),\n createdAt: v.pipe(\n v.optional(TimestampSchema),\n v.transform((v) => (v ? tsObjToMs(v) : undefined)),\n ),\n nextUsernameChangeAt: v.pipe(\n v.optional(TimestampSchema),\n v.transform((v) => (v ? tsObjToMs(v) : undefined)),\n ),\n vipTier: v.number(),\n usernameUnlocked: v.optional(v.boolean(), false),\n});\n\nexport type Profile = v.InferOutput<typeof ProfileSchema>;\n// Deliberately non-strict: update() accepts a round-tripped Profile\n// ({ ...profile, bio }) and strips its readonly fields instead of rejecting.\nexport const UpdateProfileInputSchema = v.object({\n username: v.optional(v.string()),\n bio: v.optional(v.string()),\n website: v.optional(v.string()),\n twitter: v.optional(v.string()),\n avatarUrl: v.optional(v.string()),\n});\nexport type UpdateProfileInput = v.InferInput<typeof UpdateProfileInputSchema>;\n\nexport const UsernameHistoryEntrySchema = v.object({\n username: v.string(),\n setAt: v.pipe(\n v.optional(TimestampSchema),\n v.transform((v) => (v ? tsObjToMs(v) : undefined)),\n ),\n});\n\nexport type UsernameHistoryEntry = v.InferOutput<typeof UsernameHistoryEntrySchema>;\n\nexport const AccountIdentitySchema = v.object({\n accountId: PublicIdSchema,\n username: v.optional(v.string()),\n avatarUrl: v.optional(v.string()),\n rootSmartAccountAddress: v.string(),\n});\n\nexport type AccountIdentity = v.InferOutput<typeof AccountIdentitySchema>;\n"],"mappings":";;;;AAIA,MAAa,gBAAgBA,mBAAE,OAAO;CAClC,UAAUA,mBAAE,OAAO;CACnB,KAAKA,mBAAE,OAAO;CACd,SAASA,mBAAE,OAAO;CAClB,SAASA,mBAAE,OAAO;CAClB,iBAAiBA,mBAAE,SAASA,mBAAE,QAAQ,GAAG,KAAK;CAC9C,SAASA,mBAAE,OAAO;CAClB,iBAAiBA,mBAAE,SAASA,mBAAE,QAAQ,GAAG,KAAK;CAC9C,WAAWA,mBAAE,OAAO;CACpB,WAAWA,mBAAE,KACTA,mBAAE,SAAS,eAAe,GAC1BA,mBAAE,WAAW,MAAO,IAAI,UAAU,CAAC,IAAI,KAAA,CAAU,CACrD;CACA,sBAAsBA,mBAAE,KACpBA,mBAAE,SAAS,eAAe,GAC1BA,mBAAE,WAAW,MAAO,IAAI,UAAU,CAAC,IAAI,KAAA,CAAU,CACrD;CACA,SAASA,mBAAE,OAAO;CAClB,kBAAkBA,mBAAE,SAASA,mBAAE,QAAQ,GAAG,KAAK;AACnD,CAAC;AAKD,MAAa,2BAA2BA,mBAAE,OAAO;CAC7C,UAAUA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CAC/B,KAAKA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CAC1B,SAASA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CAC9B,SAASA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CAC9B,WAAWA,mBAAE,SAASA,mBAAE,OAAO,CAAC;AACpC,CAAC;AAGD,MAAa,6BAA6BA,mBAAE,OAAO;CAC/C,UAAUA,mBAAE,OAAO;CACnB,OAAOA,mBAAE,KACLA,mBAAE,SAAS,eAAe,GAC1BA,mBAAE,WAAW,MAAO,IAAI,UAAU,CAAC,IAAI,KAAA,CAAU,CACrD;AACJ,CAAC;AAID,MAAa,wBAAwBA,mBAAE,OAAO;CAC1C,WAAW;CACX,UAAUA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CAC/B,WAAWA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CAChC,yBAAyBA,mBAAE,OAAO;AACtC,CAAC"}
@@ -27,7 +27,7 @@ interface EnsureSessionParams {
27
27
  }
28
28
  declare function emptyServerSessionSnapshot(): ServerSessionSnapshot;
29
29
  /**
30
- * Parses a serialized session cookie into a display-only server snapshot.
30
+ * Parses bearer authentication and display-only session cookies into a server snapshot.
31
31
  */
32
32
  declare function parseServerSessionSnapshot(cookies: CookieGetter, environment: PolyesterEnvironment): ServerSessionSnapshot;
33
33
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","names":[],"sources":["../../../src/services/auth/session.ts"],"mappings":";;;;;UAyBiB;EACb;;UAGa;EACb;EACA,cAAc;EACd,UAAU;EACV,aAAa;EACb;EACA;EACA;EACA,gBAAgB;EAChB;;UAGa;EACb,UAAU;EACV,aAAa;EACb;EACA;EACA;EACA;;iBAoEY,8BAA8B;;;;iBAgB9B,2BACZ,SAAS,cACT,aAAa,uBACd;;;;cA2BU;;EAIG,cAAE;IAA4B;;EAK1C,OAAO;EAUP,yBAAyB,cAAc;EAYvC,YAAY,QAAQ,0BAA0B,cAAc;EAsB5D,cAAc,QAAQ,qBAAqB,UAAU,uBAAuB;EA8B5E,YAAY,yBAAyB,UAAU;EAO/C,iBACI,eAAe,KAAK,qCACpB,UAAU;EAoBd"}
1
+ {"version":3,"file":"session.d.ts","names":[],"sources":["../../../src/services/auth/session.ts"],"mappings":";;;;;UAyBiB;EACb;;UAGa;EACb;EACA,cAAc;EACd,UAAU;EACV,aAAa;EACb;EACA;EACA;EACA,gBAAgB;EAChB;;UAGa;EACb,UAAU;EACV,aAAa;EACb;EACA;EACA;EACA;;iBAoEY,8BAA8B;;;;iBAgB9B,2BACZ,SAAS,cACT,aAAa,uBACd;;;;cA+BU;;EAIG,cAAE;IAA4B;;EAK1C,OAAO;EAUP,yBAAyB,cAAc;EAYvC,YAAY,QAAQ,0BAA0B,cAAc;EAsB5D,cAAc,QAAQ,qBAAqB,UAAU,uBAAuB;EA8B5E,YAAY,yBAAyB,UAAU;EAO/C,iBACI,eAAe,KAAK,qCACpB,UAAU;EAoBd"}
@@ -70,13 +70,17 @@ function emptyServerSessionSnapshot() {
70
70
  };
71
71
  }
72
72
  /**
73
- * Parses a serialized session cookie into a display-only server snapshot.
73
+ * Parses bearer authentication and display-only session cookies into a server snapshot.
74
74
  */
75
75
  function parseServerSessionSnapshot(cookies, environment) {
76
76
  const sessionValue = getCookieValue(cookies, POLYESTER_SESSION_COOKIE_NAME);
77
77
  const bearerToken = getCookieValue(cookies, "polyester_auth_token") ?? null;
78
78
  const session = sessionValue ? SessionCodec.decode(sessionValue) : null;
79
- if (!session || session.environmentFingerprint !== environment.fingerprint) return emptyServerSessionSnapshot();
79
+ if (!session) return {
80
+ ...emptyServerSessionSnapshot(),
81
+ bearerToken
82
+ };
83
+ if (session.environmentFingerprint !== environment.fingerprint) return emptyServerSessionSnapshot();
80
84
  return {
81
85
  environmentFingerprint: session.environmentFingerprint,
82
86
  hasDisplaySession: true,
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","names":["#lastRawValue","#lastDecoded","#environmentFingerprint","#session"],"sources":["../../../src/services/auth/session.ts"],"sourcesContent":["import {\n setCookie,\n deleteCookie,\n getCookie,\n getCookieValue,\n shouldSecureCookies,\n type CookieGetter,\n} from \"../../utils/cookies.js\";\nimport {\n POLYESTER_AUTH_TOKEN_COOKIE_NAME,\n POLYESTER_SESSION_COOKIE_NAME,\n POLYESTER_LOGIN_COOKIE_MAX_AGE,\n} from \"./cookie-constants.js\";\nimport { SessionCodec } from \"./session-codec.js\";\nimport type { PolyesterEnvironment } from \"../../environment.js\";\nimport type { AuthTokenStorage, AuthTokenStorageSetOptions } from \"./token-storage.js\";\nimport type {\n ActiveAccountInfo,\n AuthLoginMethod,\n ServerSessionSnapshot,\n SessionData,\n} from \"./session.types.js\";\n\nexport type { ActiveAccountInfo, AuthLoginMethod, ServerSessionSnapshot, SessionData };\n\nexport interface SessionCookieOptions {\n maxAgeSeconds?: number | null;\n}\n\nexport interface CommitLoginSessionParams {\n accessToken: string;\n tokenOptions: AuthTokenStorageSetOptions;\n provider: SessionData[\"provider\"];\n loginMethod: AuthLoginMethod | null;\n primaryWallet: string;\n smartAccount: string;\n accountId: string;\n activeAccount?: ActiveAccountInfo;\n username?: string;\n}\n\nexport interface EnsureSessionParams {\n provider: SessionData[\"provider\"];\n loginMethod: AuthLoginMethod | null;\n primaryWallet: string;\n smartAccount: string;\n accountId: string;\n username?: string;\n}\n\nfunction resolveSessionCookieMaxAge(options?: SessionCookieOptions): number | undefined {\n if (!options) return POLYESTER_LOGIN_COOKIE_MAX_AGE;\n return options.maxAgeSeconds ?? undefined;\n}\n\n/**\n * Reads and writes the browser display-session cookie.\n */\nclass PolyesterSessionManager {\n /**\n * Replaces the current session state.\n */\n set(session: SessionData, options?: SessionCookieOptions): void {\n setCookie({\n name: POLYESTER_SESSION_COOKIE_NAME,\n value: SessionCodec.encode(session),\n options: {\n path: \"/\",\n maxAge: resolveSessionCookieMaxAge(options),\n secure: shouldSecureCookies(),\n sameSite: \"lax\",\n },\n });\n }\n\n // The session is re-read on every authenticated RPC; memoize the decode\n // (JSON.parse + schema validation) on the raw cookie value.\n #lastRawValue: string | null = null;\n #lastDecoded: SessionData | null = null;\n\n /**\n * Returns the current session state, or null when no session is active.\n */\n get(): SessionData | null {\n const value = getCookie(POLYESTER_SESSION_COOKIE_NAME);\n if (!value) {\n this.#lastRawValue = null;\n this.#lastDecoded = null;\n return null;\n }\n if (value === this.#lastRawValue) return this.#lastDecoded;\n\n const session = SessionCodec.decode(value);\n if (!session) {\n this.clear();\n this.#lastRawValue = null;\n this.#lastDecoded = null;\n return null;\n }\n\n this.#lastRawValue = value;\n this.#lastDecoded = session;\n return session;\n }\n\n /**\n * Clears the current session state.\n */\n clear(): void {\n deleteCookie(POLYESTER_SESSION_COOKIE_NAME);\n }\n}\n\nexport const polyesterSession = new PolyesterSessionManager();\n\nexport function emptyServerSessionSnapshot(): ServerSessionSnapshot {\n return {\n environmentFingerprint: null,\n hasDisplaySession: false,\n provider: null,\n loginMethod: null,\n accountAddresses: null,\n activeAccount: null,\n bearerToken: null,\n username: null,\n };\n}\n\n/**\n * Parses a serialized session cookie into a display-only server snapshot.\n */\nexport function parseServerSessionSnapshot(\n cookies: CookieGetter,\n environment: PolyesterEnvironment,\n): ServerSessionSnapshot {\n const sessionValue = getCookieValue(cookies, POLYESTER_SESSION_COOKIE_NAME);\n const bearerToken = getCookieValue(cookies, POLYESTER_AUTH_TOKEN_COOKIE_NAME) ?? null;\n const session = sessionValue ? SessionCodec.decode(sessionValue) : null;\n\n if (!session || session.environmentFingerprint !== environment.fingerprint) {\n return emptyServerSessionSnapshot();\n }\n\n return {\n environmentFingerprint: session.environmentFingerprint,\n hasDisplaySession: true,\n provider: session.provider,\n loginMethod: session.loginMethod,\n accountAddresses: {\n ownerAddress: session.primaryWallet,\n accountAddress: session.smartAccount,\n },\n activeAccount: session.activeAccount ?? null,\n bearerToken,\n username: session.username ?? null,\n };\n}\n\n/**\n * Owns environment-bound auth session transitions for browser clients.\n */\nexport class AuthSessionStore {\n #environmentFingerprint: string;\n #session: PolyesterSessionManager;\n\n constructor({ environmentFingerprint }: { environmentFingerprint: string }) {\n this.#environmentFingerprint = environmentFingerprint;\n this.#session = polyesterSession;\n }\n\n get(): SessionData | null {\n const session = this.#session.get();\n if (!session) return null;\n if (session.environmentFingerprint !== this.#environmentFingerprint) {\n this.#session.clear();\n return null;\n }\n return session;\n }\n\n getEnvironmentBoundToken(tokenStorage: AuthTokenStorage): string | null {\n const token = tokenStorage.get();\n if (!token) return null;\n\n if (!this.get()) {\n tokenStorage.clear();\n return null;\n }\n\n return token;\n }\n\n commitLogin(params: CommitLoginSessionParams, tokenStorage: AuthTokenStorage): void {\n tokenStorage.set(params.accessToken, params.tokenOptions);\n this.#session.set(\n {\n environmentFingerprint: this.#environmentFingerprint,\n provider: params.provider,\n loginMethod: params.loginMethod,\n primaryWallet: params.primaryWallet,\n smartAccount: params.smartAccount,\n activeAccount: {\n accountId: params.activeAccount?.accountId ?? params.accountId,\n isMain: params.activeAccount?.isMain ?? true,\n mainAccountId: params.accountId,\n smartAccountAddress: params.activeAccount?.smartAccountAddress,\n label: params.activeAccount?.label,\n },\n username: params.username,\n },\n { maxAgeSeconds: params.tokenOptions.maxAgeSeconds },\n );\n }\n\n ensureSession(params: EnsureSessionParams, options?: SessionCookieOptions): SessionData {\n const existingSession = this.get();\n if (existingSession) {\n const username = params.username || undefined;\n if (username === undefined || username === existingSession.username) {\n return existingSession;\n }\n\n const session = { ...existingSession, username };\n this.#session.set(session, options);\n return session;\n }\n\n const session: SessionData = {\n environmentFingerprint: this.#environmentFingerprint,\n provider: params.provider,\n loginMethod: params.loginMethod,\n primaryWallet: params.primaryWallet,\n smartAccount: params.smartAccount,\n activeAccount: {\n accountId: params.accountId,\n isMain: true,\n mainAccountId: params.accountId,\n },\n username: params.username,\n };\n this.#session.set(session, options);\n return session;\n }\n\n setUsername(username: string | null, options?: SessionCookieOptions): void {\n const session = this.get();\n if (!session) return;\n\n this.#session.set({ ...session, username: username || undefined }, options);\n }\n\n setActiveAccount(\n activeAccount: Omit<ActiveAccountInfo, \"mainAccountId\">,\n options?: SessionCookieOptions,\n ): void {\n const session = this.get();\n if (!session) return;\n\n const mainAccountId = session.activeAccount?.mainAccountId ?? activeAccount.accountId;\n const smartAccountAddress = activeAccount.isMain\n ? session.smartAccount\n : activeAccount.smartAccountAddress;\n const label = activeAccount.isMain ? undefined : activeAccount.label;\n this.#session.set(\n {\n ...session,\n activeAccount: { ...activeAccount, mainAccountId, smartAccountAddress, label },\n username: session.username,\n },\n options,\n );\n }\n\n clear(): void {\n this.#session.clear();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"session.js","names":["#lastRawValue","#lastDecoded","#environmentFingerprint","#session"],"sources":["../../../src/services/auth/session.ts"],"sourcesContent":["import {\n setCookie,\n deleteCookie,\n getCookie,\n getCookieValue,\n shouldSecureCookies,\n type CookieGetter,\n} from \"../../utils/cookies.js\";\nimport {\n POLYESTER_AUTH_TOKEN_COOKIE_NAME,\n POLYESTER_SESSION_COOKIE_NAME,\n POLYESTER_LOGIN_COOKIE_MAX_AGE,\n} from \"./cookie-constants.js\";\nimport { SessionCodec } from \"./session-codec.js\";\nimport type { PolyesterEnvironment } from \"../../environment.js\";\nimport type { AuthTokenStorage, AuthTokenStorageSetOptions } from \"./token-storage.js\";\nimport type {\n ActiveAccountInfo,\n AuthLoginMethod,\n ServerSessionSnapshot,\n SessionData,\n} from \"./session.types.js\";\n\nexport type { ActiveAccountInfo, AuthLoginMethod, ServerSessionSnapshot, SessionData };\n\nexport interface SessionCookieOptions {\n maxAgeSeconds?: number | null;\n}\n\nexport interface CommitLoginSessionParams {\n accessToken: string;\n tokenOptions: AuthTokenStorageSetOptions;\n provider: SessionData[\"provider\"];\n loginMethod: AuthLoginMethod | null;\n primaryWallet: string;\n smartAccount: string;\n accountId: string;\n activeAccount?: ActiveAccountInfo;\n username?: string;\n}\n\nexport interface EnsureSessionParams {\n provider: SessionData[\"provider\"];\n loginMethod: AuthLoginMethod | null;\n primaryWallet: string;\n smartAccount: string;\n accountId: string;\n username?: string;\n}\n\nfunction resolveSessionCookieMaxAge(options?: SessionCookieOptions): number | undefined {\n if (!options) return POLYESTER_LOGIN_COOKIE_MAX_AGE;\n return options.maxAgeSeconds ?? undefined;\n}\n\n/**\n * Reads and writes the browser display-session cookie.\n */\nclass PolyesterSessionManager {\n /**\n * Replaces the current session state.\n */\n set(session: SessionData, options?: SessionCookieOptions): void {\n setCookie({\n name: POLYESTER_SESSION_COOKIE_NAME,\n value: SessionCodec.encode(session),\n options: {\n path: \"/\",\n maxAge: resolveSessionCookieMaxAge(options),\n secure: shouldSecureCookies(),\n sameSite: \"lax\",\n },\n });\n }\n\n // The session is re-read on every authenticated RPC; memoize the decode\n // (JSON.parse + schema validation) on the raw cookie value.\n #lastRawValue: string | null = null;\n #lastDecoded: SessionData | null = null;\n\n /**\n * Returns the current session state, or null when no session is active.\n */\n get(): SessionData | null {\n const value = getCookie(POLYESTER_SESSION_COOKIE_NAME);\n if (!value) {\n this.#lastRawValue = null;\n this.#lastDecoded = null;\n return null;\n }\n if (value === this.#lastRawValue) return this.#lastDecoded;\n\n const session = SessionCodec.decode(value);\n if (!session) {\n this.clear();\n this.#lastRawValue = null;\n this.#lastDecoded = null;\n return null;\n }\n\n this.#lastRawValue = value;\n this.#lastDecoded = session;\n return session;\n }\n\n /**\n * Clears the current session state.\n */\n clear(): void {\n deleteCookie(POLYESTER_SESSION_COOKIE_NAME);\n }\n}\n\nexport const polyesterSession = new PolyesterSessionManager();\n\nexport function emptyServerSessionSnapshot(): ServerSessionSnapshot {\n return {\n environmentFingerprint: null,\n hasDisplaySession: false,\n provider: null,\n loginMethod: null,\n accountAddresses: null,\n activeAccount: null,\n bearerToken: null,\n username: null,\n };\n}\n\n/**\n * Parses bearer authentication and display-only session cookies into a server snapshot.\n */\nexport function parseServerSessionSnapshot(\n cookies: CookieGetter,\n environment: PolyesterEnvironment,\n): ServerSessionSnapshot {\n const sessionValue = getCookieValue(cookies, POLYESTER_SESSION_COOKIE_NAME);\n const bearerToken = getCookieValue(cookies, POLYESTER_AUTH_TOKEN_COOKIE_NAME) ?? null;\n const session = sessionValue ? SessionCodec.decode(sessionValue) : null;\n\n if (!session) {\n return { ...emptyServerSessionSnapshot(), bearerToken };\n }\n\n if (session.environmentFingerprint !== environment.fingerprint) {\n return emptyServerSessionSnapshot();\n }\n\n return {\n environmentFingerprint: session.environmentFingerprint,\n hasDisplaySession: true,\n provider: session.provider,\n loginMethod: session.loginMethod,\n accountAddresses: {\n ownerAddress: session.primaryWallet,\n accountAddress: session.smartAccount,\n },\n activeAccount: session.activeAccount ?? null,\n bearerToken,\n username: session.username ?? null,\n };\n}\n\n/**\n * Owns environment-bound auth session transitions for browser clients.\n */\nexport class AuthSessionStore {\n #environmentFingerprint: string;\n #session: PolyesterSessionManager;\n\n constructor({ environmentFingerprint }: { environmentFingerprint: string }) {\n this.#environmentFingerprint = environmentFingerprint;\n this.#session = polyesterSession;\n }\n\n get(): SessionData | null {\n const session = this.#session.get();\n if (!session) return null;\n if (session.environmentFingerprint !== this.#environmentFingerprint) {\n this.#session.clear();\n return null;\n }\n return session;\n }\n\n getEnvironmentBoundToken(tokenStorage: AuthTokenStorage): string | null {\n const token = tokenStorage.get();\n if (!token) return null;\n\n if (!this.get()) {\n tokenStorage.clear();\n return null;\n }\n\n return token;\n }\n\n commitLogin(params: CommitLoginSessionParams, tokenStorage: AuthTokenStorage): void {\n tokenStorage.set(params.accessToken, params.tokenOptions);\n this.#session.set(\n {\n environmentFingerprint: this.#environmentFingerprint,\n provider: params.provider,\n loginMethod: params.loginMethod,\n primaryWallet: params.primaryWallet,\n smartAccount: params.smartAccount,\n activeAccount: {\n accountId: params.activeAccount?.accountId ?? params.accountId,\n isMain: params.activeAccount?.isMain ?? true,\n mainAccountId: params.accountId,\n smartAccountAddress: params.activeAccount?.smartAccountAddress,\n label: params.activeAccount?.label,\n },\n username: params.username,\n },\n { maxAgeSeconds: params.tokenOptions.maxAgeSeconds },\n );\n }\n\n ensureSession(params: EnsureSessionParams, options?: SessionCookieOptions): SessionData {\n const existingSession = this.get();\n if (existingSession) {\n const username = params.username || undefined;\n if (username === undefined || username === existingSession.username) {\n return existingSession;\n }\n\n const session = { ...existingSession, username };\n this.#session.set(session, options);\n return session;\n }\n\n const session: SessionData = {\n environmentFingerprint: this.#environmentFingerprint,\n provider: params.provider,\n loginMethod: params.loginMethod,\n primaryWallet: params.primaryWallet,\n smartAccount: params.smartAccount,\n activeAccount: {\n accountId: params.accountId,\n isMain: true,\n mainAccountId: params.accountId,\n },\n username: params.username,\n };\n this.#session.set(session, options);\n return session;\n }\n\n setUsername(username: string | null, options?: SessionCookieOptions): void {\n const session = this.get();\n if (!session) return;\n\n this.#session.set({ ...session, username: username || undefined }, options);\n }\n\n setActiveAccount(\n activeAccount: Omit<ActiveAccountInfo, \"mainAccountId\">,\n options?: SessionCookieOptions,\n ): void {\n const session = this.get();\n if (!session) return;\n\n const mainAccountId = session.activeAccount?.mainAccountId ?? activeAccount.accountId;\n const smartAccountAddress = activeAccount.isMain\n ? session.smartAccount\n : activeAccount.smartAccountAddress;\n const label = activeAccount.isMain ? undefined : activeAccount.label;\n this.#session.set(\n {\n ...session,\n activeAccount: { ...activeAccount, mainAccountId, smartAccountAddress, label },\n username: session.username,\n },\n options,\n );\n }\n\n clear(): void {\n this.#session.clear();\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import * as v from "valibot";
1
+ import { validation_exports } from "../../shared/validation.js";
2
2
  //#region src/services/auth/session.schemas.ts
3
- const AuthLoginMethodSchema = v.picklist([
3
+ const AuthLoginMethodSchema = validation_exports.picklist([
4
4
  "google",
5
5
  "email",
6
6
  "metamask",
@@ -8,31 +8,31 @@ const AuthLoginMethodSchema = v.picklist([
8
8
  "phantom",
9
9
  "walletconnect"
10
10
  ]);
11
- const ActiveAccountInfoSchema = v.object({
12
- accountId: v.string(),
13
- isMain: v.boolean(),
14
- mainAccountId: v.string(),
15
- smartAccountAddress: v.optional(v.string()),
16
- label: v.optional(v.string())
11
+ const ActiveAccountInfoSchema = validation_exports.object({
12
+ accountId: validation_exports.string(),
13
+ isMain: validation_exports.boolean(),
14
+ mainAccountId: validation_exports.string(),
15
+ smartAccountAddress: validation_exports.optional(validation_exports.string()),
16
+ label: validation_exports.optional(validation_exports.string())
17
17
  });
18
- const SessionDataSchema = v.object({
19
- environmentFingerprint: v.string(),
20
- provider: v.picklist([
18
+ const SessionDataSchema = validation_exports.object({
19
+ environmentFingerprint: validation_exports.string(),
20
+ provider: validation_exports.picklist([
21
21
  "metamask",
22
22
  "turnkey",
23
23
  "other"
24
24
  ]),
25
- loginMethod: v.nullable(AuthLoginMethodSchema),
26
- primaryWallet: v.string(),
27
- smartAccount: v.string(),
28
- activeAccount: v.optional(ActiveAccountInfoSchema),
29
- username: v.optional(v.string())
25
+ loginMethod: validation_exports.nullable(AuthLoginMethodSchema),
26
+ primaryWallet: validation_exports.string(),
27
+ smartAccount: validation_exports.string(),
28
+ activeAccount: validation_exports.optional(ActiveAccountInfoSchema),
29
+ username: validation_exports.optional(validation_exports.string())
30
30
  });
31
31
  /**
32
32
  * Parses raw session data into the SDK session shape.
33
33
  */
34
34
  function parseSessionData(value) {
35
- const parsed = v.safeParse(SessionDataSchema, value);
35
+ const parsed = validation_exports.safeParse(SessionDataSchema, value);
36
36
  return parsed.success ? parsed.output : null;
37
37
  }
38
38
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"session.schemas.js","names":[],"sources":["../../../src/services/auth/session.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport type { SessionData } from \"./session.types.js\";\n\nexport const AuthLoginMethodSchema = v.picklist([\n \"google\",\n \"email\",\n \"metamask\",\n \"rabby\",\n \"phantom\",\n \"walletconnect\",\n]);\n\nexport const ActiveAccountInfoSchema = v.object({\n accountId: v.string(),\n isMain: v.boolean(),\n mainAccountId: v.string(),\n smartAccountAddress: v.optional(v.string()),\n label: v.optional(v.string()),\n});\n\nexport const SessionDataSchema = v.object({\n environmentFingerprint: v.string(),\n provider: v.picklist([\"metamask\", \"turnkey\", \"other\"]),\n loginMethod: v.nullable(AuthLoginMethodSchema),\n primaryWallet: v.string(),\n smartAccount: v.string(),\n activeAccount: v.optional(ActiveAccountInfoSchema),\n username: v.optional(v.string()),\n});\n\n/**\n * Parses raw session data into the SDK session shape.\n */\nexport function parseSessionData(value: unknown): SessionData | null {\n const parsed = v.safeParse(SessionDataSchema, value);\n return parsed.success ? parsed.output : null;\n}\n"],"mappings":";;AAGA,MAAa,wBAAwB,EAAE,SAAS;CAC5C;CACA;CACA;CACA;CACA;CACA;AACJ,CAAC;AAED,MAAa,0BAA0B,EAAE,OAAO;CAC5C,WAAW,EAAE,OAAO;CACpB,QAAQ,EAAE,QAAQ;CAClB,eAAe,EAAE,OAAO;CACxB,qBAAqB,EAAE,SAAS,EAAE,OAAO,CAAC;CAC1C,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;AAChC,CAAC;AAED,MAAa,oBAAoB,EAAE,OAAO;CACtC,wBAAwB,EAAE,OAAO;CACjC,UAAU,EAAE,SAAS;EAAC;EAAY;EAAW;CAAO,CAAC;CACrD,aAAa,EAAE,SAAS,qBAAqB;CAC7C,eAAe,EAAE,OAAO;CACxB,cAAc,EAAE,OAAO;CACvB,eAAe,EAAE,SAAS,uBAAuB;CACjD,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;AACnC,CAAC;;;;AAKD,SAAgB,iBAAiB,OAAoC;CACjE,MAAM,SAAS,EAAE,UAAU,mBAAmB,KAAK;CACnD,OAAO,OAAO,UAAU,OAAO,SAAS;AAC5C"}
1
+ {"version":3,"file":"session.schemas.js","names":["v"],"sources":["../../../src/services/auth/session.schemas.ts"],"sourcesContent":["import * as v from \"../../shared/validation.js\";\nimport type { SessionData } from \"./session.types.js\";\n\nexport const AuthLoginMethodSchema = v.picklist([\n \"google\",\n \"email\",\n \"metamask\",\n \"rabby\",\n \"phantom\",\n \"walletconnect\",\n]);\n\nexport const ActiveAccountInfoSchema = v.object({\n accountId: v.string(),\n isMain: v.boolean(),\n mainAccountId: v.string(),\n smartAccountAddress: v.optional(v.string()),\n label: v.optional(v.string()),\n});\n\nexport const SessionDataSchema = v.object({\n environmentFingerprint: v.string(),\n provider: v.picklist([\"metamask\", \"turnkey\", \"other\"]),\n loginMethod: v.nullable(AuthLoginMethodSchema),\n primaryWallet: v.string(),\n smartAccount: v.string(),\n activeAccount: v.optional(ActiveAccountInfoSchema),\n username: v.optional(v.string()),\n});\n\n/**\n * Parses raw session data into the SDK session shape.\n */\nexport function parseSessionData(value: unknown): SessionData | null {\n const parsed = v.safeParse(SessionDataSchema, value);\n return parsed.success ? parsed.output : null;\n}\n"],"mappings":";;AAGA,MAAa,wBAAwBA,mBAAE,SAAS;CAC5C;CACA;CACA;CACA;CACA;CACA;AACJ,CAAC;AAED,MAAa,0BAA0BA,mBAAE,OAAO;CAC5C,WAAWA,mBAAE,OAAO;CACpB,QAAQA,mBAAE,QAAQ;CAClB,eAAeA,mBAAE,OAAO;CACxB,qBAAqBA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CAC1C,OAAOA,mBAAE,SAASA,mBAAE,OAAO,CAAC;AAChC,CAAC;AAED,MAAa,oBAAoBA,mBAAE,OAAO;CACtC,wBAAwBA,mBAAE,OAAO;CACjC,UAAUA,mBAAE,SAAS;EAAC;EAAY;EAAW;CAAO,CAAC;CACrD,aAAaA,mBAAE,SAAS,qBAAqB;CAC7C,eAAeA,mBAAE,OAAO;CACxB,cAAcA,mBAAE,OAAO;CACvB,eAAeA,mBAAE,SAAS,uBAAuB;CACjD,UAAUA,mBAAE,SAASA,mBAAE,OAAO,CAAC;AACnC,CAAC;;;;AAKD,SAAgB,iBAAiB,OAAoC;CACjE,MAAM,SAASA,mBAAE,UAAU,mBAAmB,KAAK;CACnD,OAAO,OAAO,UAAU,OAAO,SAAS;AAC5C"}
@@ -48,9 +48,10 @@ interface AuthHydrationData {
48
48
  ownerAddress?: HexAddress;
49
49
  }
50
50
  /**
51
- * Display-only session data parsed from client-readable cookies.
51
+ * Server-side cookie state for authentication and UI hydration.
52
52
  *
53
- * This data is unsigned and must not be used for authorization.
53
+ * Display-session fields are unsigned and must not be used for authorization.
54
+ * The bearer token is a credential, but only backend verification proves authentication.
54
55
  */
55
56
  interface ServerSessionSnapshot {
56
57
  environmentFingerprint: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"session.types.d.ts","names":[],"sources":["../../../src/services/auth/session.types.ts"],"mappings":";;;;;;UAMiB;EACb;EACA;EACA;EACA;EACA;;KAGQ;;;;;UAYK;EACb;EACA;EACA,aAAa;EACb;EACA;EACA,gBAAgB;EAChB;;;;;;UAOa;EACb;EACA,gBAAgB;EAChB,cAAc;EACd;EACA,eAAe;;;;;;UAOF;EACb;EACA;EACA;EACA,sBAAsB;EACtB,eAAe;;;;;;;UAQF;EACb;EACA;EACA;EACA,aAAa;EACb;IAAoB;IAAsB;;EAC1C,eAAe;EACf;EACA"}
1
+ {"version":3,"file":"session.types.d.ts","names":[],"sources":["../../../src/services/auth/session.types.ts"],"mappings":";;;;;;UAMiB;EACb;EACA;EACA;EACA;EACA;;KAGQ;;;;;UAYK;EACb;EACA;EACA,aAAa;EACb;EACA;EACA,gBAAgB;EAChB;;;;;;UAOa;EACb;EACA,gBAAgB;EAChB,cAAc;EACd;EACA,eAAe;;;;;;UAOF;EACb;EACA;EACA;EACA,sBAAsB;EACtB,eAAe;;;;;;;;UASF;EACb;EACA;EACA;EACA,aAAa;EACb;IAAoB;IAAsB;;EAC1C,eAAe;EACf;EACA"}
@@ -22,7 +22,7 @@ declare class BalancesService {
22
22
  */
23
23
  list(input?: AccountScopedInput, options?: PolyesterRequestOptions): Promise<LedgerBalance[]>;
24
24
  /**
25
- * Returns columnar balance history for the resolved account scope over a selected range, optionally filtered by ledger asset and account buckets.
25
+ * Returns columnar balance history for the resolved account scope over a selected range, optionally filtered by a non-negative integer ledger asset ID and account buckets. Ledger 0 or omission includes all assets.
26
26
  */
27
27
  getBalanceHistory(input: BalanceHistoryInput, options?: PolyesterRequestOptions): Promise<BalanceHistoryResponse>;
28
28
  /**
@@ -1,3 +1,4 @@
1
+ import { parse, validation_exports } from "../../shared/validation.js";
1
2
  import { toConnectCallOptions } from "../../shared/request-options.js";
2
3
  import { resolveAccountScopedInput } from "../subaccount-resolver.js";
3
4
  import { accountScopeToSubaccountId } from "../../shared/account-scope.js";
@@ -6,7 +7,6 @@ import { publicationHandlerErrorContext } from "../../shared/subscription-errors
6
7
  import { createReadyGate } from "../../shared/decimal-surface.js";
7
8
  import { BalanceHistoryInputSchema, BalancesListInputSchema, EquityHistoryInputSchema, createBalanceHistoryResponseSchema, createEquityHistoryResponseSchema, createLedgerBalanceSchema } from "./balances.schemas.js";
8
9
  import { createClient } from "@connectrpc/connect";
9
- import * as v from "valibot";
10
10
  //#region src/services/balances/balances.ts
11
11
  /**
12
12
  * Reads and streams ledger balances plus balance and equity history for the authenticated account scope.
@@ -34,19 +34,19 @@ var BalancesService = class {
34
34
  async list(input = {}, options) {
35
35
  await this.#scales.ready();
36
36
  const resolved = resolveAccountScopedInput(input, this.#resolver);
37
- const validated = v.parse(BalancesListInputSchema, resolved);
37
+ const validated = parse(BalancesListInputSchema, resolved);
38
38
  const res = await this.#client.getBalances({ subaccountId: accountScopeToSubaccountId(validated.account) }, toConnectCallOptions(options));
39
- return v.parse(v.array(this.#ledgerBalanceSchema), res.balances);
39
+ return parse(validation_exports.array(this.#ledgerBalanceSchema), res.balances);
40
40
  }
41
41
  /**
42
- * Returns columnar balance history for the resolved account scope over a selected range, optionally filtered by ledger asset and account buckets.
42
+ * Returns columnar balance history for the resolved account scope over a selected range, optionally filtered by a non-negative integer ledger asset ID and account buckets. Ledger 0 or omission includes all assets.
43
43
  */
44
44
  async getBalanceHistory(input, options) {
45
45
  await this.#scales.ready();
46
46
  const resolved = resolveAccountScopedInput(input, this.#resolver);
47
- const validated = v.parse(BalanceHistoryInputSchema, resolved);
47
+ const validated = parse(BalanceHistoryInputSchema, resolved);
48
48
  const res = await this.#client.getBalanceHistory(validated, toConnectCallOptions(options));
49
- return v.parse(this.#balanceHistoryResponseSchema, res);
49
+ return parse(this.#balanceHistoryResponseSchema, res);
50
50
  }
51
51
  /**
52
52
  * Returns equity history series for the resolved account scope over a selected range, optionally grouped by account or asset and filtered by account buckets.
@@ -54,9 +54,9 @@ var BalancesService = class {
54
54
  async getEquityHistory(input, options) {
55
55
  await this.#scales.ready();
56
56
  const resolved = resolveAccountScopedInput(input, this.#resolver);
57
- const validated = v.parse(EquityHistoryInputSchema, resolved);
57
+ const validated = parse(EquityHistoryInputSchema, resolved);
58
58
  const res = await this.#client.getEquityHistorySeries(validated, toConnectCallOptions(options));
59
- return v.parse(this.#equityHistoryResponseSchema, res);
59
+ return parse(this.#equityHistoryResponseSchema, res);
60
60
  }
61
61
  /**
62
62
  * Subscribes to private balance updates on private:ledger:balances:{accountId}:proto and emits every balance record as a decimal-string row. Records for assets unknown to the catalog route a CatalogLookupError to onError.
@@ -69,7 +69,7 @@ var BalancesService = class {
69
69
  schema: AssetBalanceSchema,
70
70
  onPublication: (data) => {
71
71
  gate.run(() => {
72
- const b = v.parse(this.#ledgerBalanceSchema, data);
72
+ const b = parse(this.#ledgerBalanceSchema, data);
73
73
  input.onEvent(b);
74
74
  });
75
75
  },
@@ -1 +1 @@
1
- {"version":3,"file":"balances.js","names":["#client","Proto.LedgerReadService","#realtime","#resolver","#scales","#ledgerBalanceSchema","#balanceHistoryResponseSchema","#equityHistoryResponseSchema","Proto.AssetBalanceSchema"],"sources":["../../../src/services/balances/balances.ts"],"sourcesContent":["import * as Proto from \"../../gen/ledger/read/v1/ledger_read_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport * as v from \"valibot\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { accountScopeToSubaccountId, type AccountScopedInput } from \"../../shared/account-scope.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { createReadyGate, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport {\n BalanceHistoryInputSchema,\n BalancesListInputSchema,\n EquityHistoryInputSchema,\n createBalanceHistoryResponseSchema,\n createEquityHistoryResponseSchema,\n createLedgerBalanceSchema,\n type LedgerBalance,\n type BalanceHistoryInput,\n type BalanceHistoryResponse,\n type EquityHistoryInput,\n type EquityHistoryResponse,\n} from \"./balances.schemas.js\";\n\ninterface SubscribeBalancesInput extends BaseSubscribeInput<LedgerBalance> {\n accountId: string;\n}\n\n/**\n * Reads and streams ledger balances plus balance and equity history for the authenticated account scope.\n */\nexport class BalancesService {\n #client: Client<typeof Proto.LedgerReadService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #ledgerBalanceSchema: ReturnType<typeof createLedgerBalanceSchema>;\n #balanceHistoryResponseSchema: ReturnType<typeof createBalanceHistoryResponseSchema>;\n #equityHistoryResponseSchema: ReturnType<typeof createEquityHistoryResponseSchema>;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#client = createClient(Proto.LedgerReadService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#ledgerBalanceSchema = createLedgerBalanceSchema();\n this.#balanceHistoryResponseSchema = createBalanceHistoryResponseSchema();\n this.#equityHistoryResponseSchema = createEquityHistoryResponseSchema(scales);\n }\n\n /**\n * Returns current asset balances for the resolved root account or subaccount, including trading, funding, reserved, and available amounts as decimal strings.\n */\n async list(\n input: AccountScopedInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<LedgerBalance[]> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = v.parse(BalancesListInputSchema, resolved);\n const res = await this.#client.getBalances(\n {\n subaccountId: accountScopeToSubaccountId(validated.account),\n },\n toConnectCallOptions(options),\n );\n return v.parse(v.array(this.#ledgerBalanceSchema), res.balances);\n }\n\n /**\n * Returns columnar balance history for the resolved account scope over a selected range, optionally filtered by ledger asset and account buckets.\n */\n async getBalanceHistory(\n input: BalanceHistoryInput,\n options?: PolyesterRequestOptions,\n ): Promise<BalanceHistoryResponse> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = v.parse(BalanceHistoryInputSchema, resolved);\n const res = await this.#client.getBalanceHistory(validated, toConnectCallOptions(options));\n return v.parse(this.#balanceHistoryResponseSchema, res);\n }\n\n /**\n * Returns equity history series for the resolved account scope over a selected range, optionally grouped by account or asset and filtered by account buckets.\n */\n async getEquityHistory(\n input: EquityHistoryInput,\n options?: PolyesterRequestOptions,\n ): Promise<EquityHistoryResponse> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = v.parse(EquityHistoryInputSchema, resolved);\n const res = await this.#client.getEquityHistorySeries(\n validated,\n toConnectCallOptions(options),\n );\n return v.parse(this.#equityHistoryResponseSchema, res);\n }\n\n /**\n * Subscribes to private balance updates on private:ledger:balances:{accountId}:proto and emits every balance record as a decimal-string row. Records for assets unknown to the catalog route a CatalogLookupError to onError.\n */\n subscribe(input: SubscribeBalancesInput): () => void {\n const channel = `private:ledger:balances:${input.accountId}:proto`;\n const gate = createReadyGate(\n () => this.#scales.ready(),\n (error) => input.onError?.(publicationHandlerErrorContext(channel, error)),\n );\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.AssetBalanceSchema,\n onPublication: (data) => {\n gate.run(() => {\n const b = v.parse(this.#ledgerBalanceSchema, data);\n input.onEvent(b);\n });\n },\n onConnected: input.onOpen,\n onDisconnected: input.onClose,\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAkCA,IAAa,kBAAb,MAA6B;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YACI,WACA,UACA,UACA,QACF;EACE,KAAKA,UAAU,aAAaC,mBAAyB,SAAS;EAC9D,KAAKC,YAAY;EACjB,KAAKC,YAAY;EACjB,KAAKC,UAAU;EACf,KAAKC,uBAAuB,0BAA0B;EACtD,KAAKC,gCAAgC,mCAAmC;EACxE,KAAKC,+BAA+B,kCAAkC,MAAM;CAChF;;;;CAKA,MAAM,KACF,QAA4B,CAAC,GAC7B,SACwB;EACxB,MAAM,KAAKH,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,YAAY,EAAE,MAAM,yBAAyB,QAAQ;EAC3D,MAAM,MAAM,MAAM,KAAKH,QAAQ,YAC3B,EACI,cAAc,2BAA2B,UAAU,OAAO,EAC9D,GACA,qBAAqB,OAAO,CAChC;EACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAKK,oBAAoB,GAAG,IAAI,QAAQ;CACnE;;;;CAKA,MAAM,kBACF,OACA,SAC+B;EAC/B,MAAM,KAAKD,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,YAAY,EAAE,MAAM,2BAA2B,QAAQ;EAC7D,MAAM,MAAM,MAAM,KAAKH,QAAQ,kBAAkB,WAAW,qBAAqB,OAAO,CAAC;EACzF,OAAO,EAAE,MAAM,KAAKM,+BAA+B,GAAG;CAC1D;;;;CAKA,MAAM,iBACF,OACA,SAC8B;EAC9B,MAAM,KAAKF,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,YAAY,EAAE,MAAM,0BAA0B,QAAQ;EAC5D,MAAM,MAAM,MAAM,KAAKH,QAAQ,uBAC3B,WACA,qBAAqB,OAAO,CAChC;EACA,OAAO,EAAE,MAAM,KAAKO,8BAA8B,GAAG;CACzD;;;;CAKA,UAAU,OAA2C;EACjD,MAAM,UAAU,2BAA2B,MAAM,UAAU;EAC3D,MAAM,OAAO,sBACH,KAAKH,QAAQ,MAAM,IACxB,UAAU,MAAM,UAAU,+BAA+B,SAAS,KAAK,CAAC,CAC7E;EACA,OAAO,KAAKF,UAAU,oBAAoB;GACtC;GACA,QAAQM;GACR,gBAAgB,SAAS;IACrB,KAAK,UAAU;KACX,MAAM,IAAI,EAAE,MAAM,KAAKH,sBAAsB,IAAI;KACjD,MAAM,QAAQ,CAAC;IACnB,CAAC;GACL;GACA,aAAa,MAAM;GACnB,gBAAgB,MAAM;GACtB,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}
1
+ {"version":3,"file":"balances.js","names":["#client","Proto.LedgerReadService","#realtime","#resolver","#scales","#ledgerBalanceSchema","#balanceHistoryResponseSchema","#equityHistoryResponseSchema","v.parse","v","Proto.AssetBalanceSchema"],"sources":["../../../src/services/balances/balances.ts"],"sourcesContent":["import * as Proto from \"../../gen/ledger/read/v1/ledger_read_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport * as v from \"../../shared/validation.js\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { accountScopeToSubaccountId, type AccountScopedInput } from \"../../shared/account-scope.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { createReadyGate, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport {\n BalanceHistoryInputSchema,\n BalancesListInputSchema,\n EquityHistoryInputSchema,\n createBalanceHistoryResponseSchema,\n createEquityHistoryResponseSchema,\n createLedgerBalanceSchema,\n type LedgerBalance,\n type BalanceHistoryInput,\n type BalanceHistoryResponse,\n type EquityHistoryInput,\n type EquityHistoryResponse,\n} from \"./balances.schemas.js\";\n\ninterface SubscribeBalancesInput extends BaseSubscribeInput<LedgerBalance> {\n accountId: string;\n}\n\n/**\n * Reads and streams ledger balances plus balance and equity history for the authenticated account scope.\n */\nexport class BalancesService {\n #client: Client<typeof Proto.LedgerReadService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #ledgerBalanceSchema: ReturnType<typeof createLedgerBalanceSchema>;\n #balanceHistoryResponseSchema: ReturnType<typeof createBalanceHistoryResponseSchema>;\n #equityHistoryResponseSchema: ReturnType<typeof createEquityHistoryResponseSchema>;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#client = createClient(Proto.LedgerReadService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#ledgerBalanceSchema = createLedgerBalanceSchema();\n this.#balanceHistoryResponseSchema = createBalanceHistoryResponseSchema();\n this.#equityHistoryResponseSchema = createEquityHistoryResponseSchema(scales);\n }\n\n /**\n * Returns current asset balances for the resolved root account or subaccount, including trading, funding, reserved, and available amounts as decimal strings.\n */\n async list(\n input: AccountScopedInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<LedgerBalance[]> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = v.parse(BalancesListInputSchema, resolved);\n const res = await this.#client.getBalances(\n {\n subaccountId: accountScopeToSubaccountId(validated.account),\n },\n toConnectCallOptions(options),\n );\n return v.parse(v.array(this.#ledgerBalanceSchema), res.balances);\n }\n\n /**\n * Returns columnar balance history for the resolved account scope over a selected range, optionally filtered by a non-negative integer ledger asset ID and account buckets. Ledger 0 or omission includes all assets.\n */\n async getBalanceHistory(\n input: BalanceHistoryInput,\n options?: PolyesterRequestOptions,\n ): Promise<BalanceHistoryResponse> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = v.parse(BalanceHistoryInputSchema, resolved);\n const res = await this.#client.getBalanceHistory(validated, toConnectCallOptions(options));\n return v.parse(this.#balanceHistoryResponseSchema, res);\n }\n\n /**\n * Returns equity history series for the resolved account scope over a selected range, optionally grouped by account or asset and filtered by account buckets.\n */\n async getEquityHistory(\n input: EquityHistoryInput,\n options?: PolyesterRequestOptions,\n ): Promise<EquityHistoryResponse> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validated = v.parse(EquityHistoryInputSchema, resolved);\n const res = await this.#client.getEquityHistorySeries(\n validated,\n toConnectCallOptions(options),\n );\n return v.parse(this.#equityHistoryResponseSchema, res);\n }\n\n /**\n * Subscribes to private balance updates on private:ledger:balances:{accountId}:proto and emits every balance record as a decimal-string row. Records for assets unknown to the catalog route a CatalogLookupError to onError.\n */\n subscribe(input: SubscribeBalancesInput): () => void {\n const channel = `private:ledger:balances:${input.accountId}:proto`;\n const gate = createReadyGate(\n () => this.#scales.ready(),\n (error) => input.onError?.(publicationHandlerErrorContext(channel, error)),\n );\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.AssetBalanceSchema,\n onPublication: (data) => {\n gate.run(() => {\n const b = v.parse(this.#ledgerBalanceSchema, data);\n input.onEvent(b);\n });\n },\n onConnected: input.onOpen,\n onDisconnected: input.onClose,\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAkCA,IAAa,kBAAb,MAA6B;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YACI,WACA,UACA,UACA,QACF;EACE,KAAKA,UAAU,aAAaC,mBAAyB,SAAS;EAC9D,KAAKC,YAAY;EACjB,KAAKC,YAAY;EACjB,KAAKC,UAAU;EACf,KAAKC,uBAAuB,0BAA0B;EACtD,KAAKC,gCAAgC,mCAAmC;EACxE,KAAKC,+BAA+B,kCAAkC,MAAM;CAChF;;;;CAKA,MAAM,KACF,QAA4B,CAAC,GAC7B,SACwB;EACxB,MAAM,KAAKH,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,YAAYK,MAAQ,yBAAyB,QAAQ;EAC3D,MAAM,MAAM,MAAM,KAAKR,QAAQ,YAC3B,EACI,cAAc,2BAA2B,UAAU,OAAO,EAC9D,GACA,qBAAqB,OAAO,CAChC;EACA,OAAOQ,MAAQC,mBAAE,MAAM,KAAKJ,oBAAoB,GAAG,IAAI,QAAQ;CACnE;;;;CAKA,MAAM,kBACF,OACA,SAC+B;EAC/B,MAAM,KAAKD,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,YAAYK,MAAQ,2BAA2B,QAAQ;EAC7D,MAAM,MAAM,MAAM,KAAKR,QAAQ,kBAAkB,WAAW,qBAAqB,OAAO,CAAC;EACzF,OAAOQ,MAAQ,KAAKF,+BAA+B,GAAG;CAC1D;;;;CAKA,MAAM,iBACF,OACA,SAC8B;EAC9B,MAAM,KAAKF,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,YAAYK,MAAQ,0BAA0B,QAAQ;EAC5D,MAAM,MAAM,MAAM,KAAKR,QAAQ,uBAC3B,WACA,qBAAqB,OAAO,CAChC;EACA,OAAOQ,MAAQ,KAAKD,8BAA8B,GAAG;CACzD;;;;CAKA,UAAU,OAA2C;EACjD,MAAM,UAAU,2BAA2B,MAAM,UAAU;EAC3D,MAAM,OAAO,sBACH,KAAKH,QAAQ,MAAM,IACxB,UAAU,MAAM,UAAU,+BAA+B,SAAS,KAAK,CAAC,CAC7E;EACA,OAAO,KAAKF,UAAU,oBAAoB;GACtC;GACA,QAAQQ;GACR,gBAAgB,SAAS;IACrB,KAAK,UAAU;KACX,MAAM,IAAIF,MAAQ,KAAKH,sBAAsB,IAAI;KACjD,MAAM,QAAQ,CAAC;IACnB,CAAC;GACL;GACA,aAAa,MAAM;GACnB,gBAAgB,MAAM;GACtB,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}