@polyester/sdk 0.4.0 → 0.4.1

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 (240) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/_virtual/_rolldown/runtime.js +1 -15
  3. package/dist/catalogs/snapshot-validation.js +63 -63
  4. package/dist/catalogs/snapshot-validation.js.map +1 -1
  5. package/dist/services/accounts/accounts.js +1 -1
  6. package/dist/services/accounts/accounts.js.map +1 -1
  7. package/dist/services/accounts/accounts.schemas.d.ts +13 -13
  8. package/dist/services/accounts/accounts.schemas.d.ts.map +1 -1
  9. package/dist/services/accounts/accounts.schemas.js +11 -11
  10. package/dist/services/accounts/accounts.schemas.js.map +1 -1
  11. package/dist/services/address-book/address-book.js.map +1 -1
  12. package/dist/services/address-book/address-book.schemas.d.ts +751 -751
  13. package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
  14. package/dist/services/address-book/address-book.schemas.js +160 -159
  15. package/dist/services/address-book/address-book.schemas.js.map +1 -1
  16. package/dist/services/api-keys/api-keys.d.ts +6 -6
  17. package/dist/services/api-keys/api-keys.d.ts.map +1 -1
  18. package/dist/services/api-keys/api-keys.js.map +1 -1
  19. package/dist/services/api-keys/api-keys.schemas.d.ts +62 -62
  20. package/dist/services/api-keys/api-keys.schemas.d.ts.map +1 -1
  21. package/dist/services/api-keys/api-keys.schemas.js +34 -34
  22. package/dist/services/api-keys/api-keys.schemas.js.map +1 -1
  23. package/dist/services/auth/auth.d.ts +39 -39
  24. package/dist/services/auth/auth.d.ts.map +1 -1
  25. package/dist/services/auth/auth.js +19 -18
  26. package/dist/services/auth/auth.js.map +1 -1
  27. package/dist/services/auth/profile/profile.d.ts +2 -2
  28. package/dist/services/auth/profile/profile.d.ts.map +1 -1
  29. package/dist/services/auth/profile/profile.js +3 -2
  30. package/dist/services/auth/profile/profile.js.map +1 -1
  31. package/dist/services/auth/profile/profile.schemas.d.ts +41 -41
  32. package/dist/services/auth/profile/profile.schemas.d.ts.map +1 -1
  33. package/dist/services/auth/profile/profile.schemas.js +27 -27
  34. package/dist/services/auth/profile/profile.schemas.js.map +1 -1
  35. package/dist/services/auth/session.schemas.js +17 -17
  36. package/dist/services/auth/session.schemas.js.map +1 -1
  37. package/dist/services/balances/balances.d.ts.map +1 -1
  38. package/dist/services/balances/balances.js +3 -2
  39. package/dist/services/balances/balances.js.map +1 -1
  40. package/dist/services/balances/balances.schemas.d.ts +95 -95
  41. package/dist/services/balances/balances.schemas.d.ts.map +1 -1
  42. package/dist/services/balances/balances.schemas.js +61 -61
  43. package/dist/services/balances/balances.schemas.js.map +1 -1
  44. package/dist/services/candles/candles.d.ts.map +1 -1
  45. package/dist/services/candles/candles.js +5 -4
  46. package/dist/services/candles/candles.js.map +1 -1
  47. package/dist/services/candles/candles.schemas.d.ts +64 -64
  48. package/dist/services/candles/candles.schemas.d.ts.map +1 -1
  49. package/dist/services/candles/candles.schemas.js +47 -47
  50. package/dist/services/candles/candles.schemas.js.map +1 -1
  51. package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
  52. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts +68 -68
  53. package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
  54. package/dist/services/chain-analytics/chain-analytics.schemas.js +29 -29
  55. package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
  56. package/dist/services/deposit/deposit.js.map +1 -1
  57. package/dist/services/deposit/deposit.schemas.d.ts +17 -17
  58. package/dist/services/deposit/deposit.schemas.d.ts.map +1 -1
  59. package/dist/services/deposit/deposit.schemas.js +11 -11
  60. package/dist/services/deposit/deposit.schemas.js.map +1 -1
  61. package/dist/services/guard-signer/guard-signer.js.map +1 -1
  62. package/dist/services/guard-signer/guard-signer.schemas.d.ts +75 -75
  63. package/dist/services/guard-signer/guard-signer.schemas.d.ts.map +1 -1
  64. package/dist/services/guard-signer/guard-signer.schemas.js +42 -42
  65. package/dist/services/guard-signer/guard-signer.schemas.js.map +1 -1
  66. package/dist/services/heatmap/heatmap.d.ts.map +1 -1
  67. package/dist/services/heatmap/heatmap.js +5 -4
  68. package/dist/services/heatmap/heatmap.js.map +1 -1
  69. package/dist/services/heatmap/heatmap.schemas.d.ts +138 -138
  70. package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
  71. package/dist/services/heatmap/heatmap.schemas.js +47 -47
  72. package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
  73. package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
  74. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +53 -53
  75. package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
  76. package/dist/services/internal-transfers/internal-transfers.schemas.js +27 -27
  77. package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
  78. package/dist/services/lifecycle/lifecycle.d.ts.map +1 -1
  79. package/dist/services/lifecycle/lifecycle.js +3 -2
  80. package/dist/services/lifecycle/lifecycle.js.map +1 -1
  81. package/dist/services/lifecycle/lifecycle.schemas.d.ts +614 -614
  82. package/dist/services/lifecycle/lifecycle.schemas.d.ts.map +1 -1
  83. package/dist/services/lifecycle/lifecycle.schemas.js +146 -146
  84. package/dist/services/lifecycle/lifecycle.schemas.js.map +1 -1
  85. package/dist/services/market-data/market-data.d.ts.map +1 -1
  86. package/dist/services/market-data/market-data.js +4 -3
  87. package/dist/services/market-data/market-data.js.map +1 -1
  88. package/dist/services/market-data/market-data.schemas.d.ts +19 -19
  89. package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
  90. package/dist/services/market-data/market-data.schemas.js +50 -50
  91. package/dist/services/market-data/market-data.schemas.js.map +1 -1
  92. package/dist/services/market-overview/market-overview.d.ts.map +1 -1
  93. package/dist/services/market-overview/market-overview.js +3 -2
  94. package/dist/services/market-overview/market-overview.js.map +1 -1
  95. package/dist/services/market-overview/market-overview.schemas.d.ts +37 -37
  96. package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
  97. package/dist/services/market-overview/market-overview.schemas.js +33 -33
  98. package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
  99. package/dist/services/mfa/mfa.js +1 -1
  100. package/dist/services/mfa/mfa.js.map +1 -1
  101. package/dist/services/mfa/mfa.schemas.d.ts +206 -206
  102. package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
  103. package/dist/services/mfa/mfa.schemas.js +83 -83
  104. package/dist/services/mfa/mfa.schemas.js.map +1 -1
  105. package/dist/services/orderbook/orderbook.d.ts +2 -2
  106. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  107. package/dist/services/orderbook/orderbook.js +3 -2
  108. package/dist/services/orderbook/orderbook.js.map +1 -1
  109. package/dist/services/orderbook/orderbook.schemas.d.ts +23 -23
  110. package/dist/services/orderbook/orderbook.schemas.d.ts.map +1 -1
  111. package/dist/services/orderbook/orderbook.schemas.js +15 -15
  112. package/dist/services/orderbook/orderbook.schemas.js.map +1 -1
  113. package/dist/services/orders/order-errors.schemas.d.ts +18 -18
  114. package/dist/services/orders/order-errors.schemas.d.ts.map +1 -1
  115. package/dist/services/orders/order-errors.schemas.js +8 -8
  116. package/dist/services/orders/order-errors.schemas.js.map +1 -1
  117. package/dist/services/orders/orders-batch.schemas.d.ts +504 -504
  118. package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
  119. package/dist/services/orders/orders-batch.schemas.js +117 -117
  120. package/dist/services/orders/orders-batch.schemas.js.map +1 -1
  121. package/dist/services/orders/orders-identifiers.schemas.js +5 -5
  122. package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
  123. package/dist/services/orders/orders-input.schemas.d.ts +648 -648
  124. package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
  125. package/dist/services/orders/orders-input.schemas.js +95 -95
  126. package/dist/services/orders/orders-input.schemas.js.map +1 -1
  127. package/dist/services/orders/orders-modify.schemas.d.ts +351 -351
  128. package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
  129. package/dist/services/orders/orders-modify.schemas.js +44 -44
  130. package/dist/services/orders/orders-modify.schemas.js.map +1 -1
  131. package/dist/services/orders/orders-output.schemas.d.ts +183 -183
  132. package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
  133. package/dist/services/orders/orders-output.schemas.js +49 -49
  134. package/dist/services/orders/orders-output.schemas.js.map +1 -1
  135. package/dist/services/orders/orders-risk.schemas.d.ts +226 -226
  136. package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
  137. package/dist/services/orders/orders-risk.schemas.js +69 -69
  138. package/dist/services/orders/orders-risk.schemas.js.map +1 -1
  139. package/dist/services/orders/orders.d.ts +6 -6
  140. package/dist/services/orders/orders.d.ts.map +1 -1
  141. package/dist/services/orders/orders.js +4 -3
  142. package/dist/services/orders/orders.js.map +1 -1
  143. package/dist/services/policies/api-key-policies/api-key-policies.d.ts +6 -6
  144. package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
  145. package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
  146. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts +105 -105
  147. package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts.map +1 -1
  148. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js +49 -49
  149. package/dist/services/policies/api-key-policies/api-key-policies.schemas.js.map +1 -1
  150. package/dist/services/policies/shared.d.ts +5 -5
  151. package/dist/services/policies/shared.d.ts.map +1 -1
  152. package/dist/services/policies/shared.js +10 -10
  153. package/dist/services/policies/shared.js.map +1 -1
  154. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +6 -6
  155. package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
  156. package/dist/services/policies/subaccount-policies/subaccount-policies.js +3 -2
  157. package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
  158. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +124 -124
  159. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
  160. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +75 -75
  161. package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
  162. package/dist/services/shared.js +11 -11
  163. package/dist/services/shared.js.map +1 -1
  164. package/dist/services/social-verification/social-verification.d.ts +3 -3
  165. package/dist/services/social-verification/social-verification.d.ts.map +1 -1
  166. package/dist/services/social-verification/social-verification.js.map +1 -1
  167. package/dist/services/social-verification/social-verification.schemas.d.ts +54 -54
  168. package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
  169. package/dist/services/social-verification/social-verification.schemas.js +28 -28
  170. package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
  171. package/dist/services/subaccounts/subaccounts.d.ts +14 -14
  172. package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
  173. package/dist/services/subaccounts/subaccounts.js +9 -8
  174. package/dist/services/subaccounts/subaccounts.js.map +1 -1
  175. package/dist/services/subaccounts/subaccounts.schemas.d.ts +135 -135
  176. package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
  177. package/dist/services/subaccounts/subaccounts.schemas.js +72 -72
  178. package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
  179. package/dist/services/trades/trades.d.ts +2 -2
  180. package/dist/services/trades/trades.d.ts.map +1 -1
  181. package/dist/services/trades/trades.js +3 -2
  182. package/dist/services/trades/trades.js.map +1 -1
  183. package/dist/services/trades/trades.schemas.d.ts +31 -31
  184. package/dist/services/trades/trades.schemas.d.ts.map +1 -1
  185. package/dist/services/trades/trades.schemas.js +24 -24
  186. package/dist/services/trades/trades.schemas.js.map +1 -1
  187. package/dist/services/trading-withdraws/trading-withdraws.js +1 -1
  188. package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
  189. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts +45 -45
  190. package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
  191. package/dist/services/trading-withdraws/trading-withdraws.schemas.js +36 -36
  192. package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
  193. package/dist/services/transfers/transfers.d.ts.map +1 -1
  194. package/dist/services/transfers/transfers.js +3 -2
  195. package/dist/services/transfers/transfers.js.map +1 -1
  196. package/dist/services/transfers/transfers.schemas.d.ts +42 -42
  197. package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
  198. package/dist/services/transfers/transfers.schemas.js +30 -30
  199. package/dist/services/transfers/transfers.schemas.js.map +1 -1
  200. package/dist/services/triggers/trigger-child-order.schemas.js +23 -23
  201. package/dist/services/triggers/trigger-child-order.schemas.js.map +1 -1
  202. package/dist/services/triggers/trigger-input.schemas.d.ts +226 -226
  203. package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
  204. package/dist/services/triggers/trigger-input.schemas.js +53 -53
  205. package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
  206. package/dist/services/triggers/triggers-output.schemas.d.ts +209 -209
  207. package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
  208. package/dist/services/triggers/triggers-output.schemas.js +152 -152
  209. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  210. package/dist/services/triggers/triggers.d.ts.map +1 -1
  211. package/dist/services/triggers/triggers.js +4 -3
  212. package/dist/services/triggers/triggers.js.map +1 -1
  213. package/dist/services/whiteboard/whiteboard.js.map +1 -1
  214. package/dist/services/whiteboard/whiteboard.schemas.d.ts +379 -379
  215. package/dist/services/whiteboard/whiteboard.schemas.d.ts.map +1 -1
  216. package/dist/services/whiteboard/whiteboard.schemas.js +71 -71
  217. package/dist/services/whiteboard/whiteboard.schemas.js.map +1 -1
  218. package/dist/services/zipper/zipper.js.map +1 -1
  219. package/dist/services/zipper/zipper.schemas.d.ts +1 -1
  220. package/dist/services/zipper/zipper.schemas.js +54 -54
  221. package/dist/services/zipper/zipper.schemas.js.map +1 -1
  222. package/dist/shared/account-scope.d.ts +6 -6
  223. package/dist/shared/account-scope.d.ts.map +1 -1
  224. package/dist/shared/account-scope.js +3 -3
  225. package/dist/shared/account-scope.js.map +1 -1
  226. package/dist/shared/connect-error-mapping.js +2 -2
  227. package/dist/shared/connect-error-mapping.js.map +1 -1
  228. package/dist/shared/rate-limit.schemas.d.ts +12 -12
  229. package/dist/shared/rate-limit.schemas.d.ts.map +1 -1
  230. package/dist/shared/rate-limit.schemas.js +7 -7
  231. package/dist/shared/rate-limit.schemas.js.map +1 -1
  232. package/dist/shared/schemas.js +26 -26
  233. package/dist/shared/schemas.js.map +1 -1
  234. package/dist/shared/validation.js +1 -6
  235. package/dist/shared/validation.js.map +1 -1
  236. package/dist/utils/connect-order-errors.js +2 -2
  237. package/dist/utils/connect-order-errors.js.map +1 -1
  238. package/package.json +3 -3
  239. package/dist/shared/validation.d.ts +0 -14
  240. package/dist/shared/validation.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @polyester/sdk
2
2
 
3
+ ## 0.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#56](https://github.com/Fabric-Labs/polyester-sdk-typescript/pull/56) [`1e34fde`](https://github.com/Fabric-Labs/polyester-sdk-typescript/commit/1e34fde8be60b78006ee2c0c23595c0561ab5d6a) Thanks [@huntabyte](https://github.com/huntabyte)! - Repair the published TypeScript declarations so public contract and service callback types retain their precise inferred shapes.
8
+
3
9
  ## 0.4.0
4
10
 
5
11
  ### Minor Changes
@@ -1,8 +1,5 @@
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;
6
3
  var __exportAll = (all, no_symbols) => {
7
4
  let target = {};
8
5
  for (var name in all) __defProp(target, name, {
@@ -12,16 +9,5 @@ var __exportAll = (all, no_symbols) => {
12
9
  if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
13
10
  return target;
14
11
  };
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"));
26
12
  //#endregion
27
- export { __exportAll, __reExport };
13
+ export { __exportAll };
@@ -1,101 +1,101 @@
1
1
  import { ValidationError } from "../shared/errors.js";
2
- import { validation_exports } from "../shared/validation.js";
3
2
  import { PAIR_STATUSES } from "../shared/catalog-config.js";
3
+ import * as v from "valibot";
4
4
  //#region src/catalogs/snapshot-validation.ts
5
- const FiniteNumberSchema = validation_exports.pipe(validation_exports.number(), validation_exports.finite());
6
- const IntegerSchema = validation_exports.pipe(FiniteNumberSchema, validation_exports.safeInteger());
7
- const AssetConfigSchema = validation_exports.object({
8
- symbol: validation_exports.string(),
5
+ const FiniteNumberSchema = v.pipe(v.number(), v.finite());
6
+ const IntegerSchema = v.pipe(FiniteNumberSchema, v.safeInteger());
7
+ const AssetConfigSchema = v.object({
8
+ symbol: v.string(),
9
9
  ledgerId: IntegerSchema,
10
- name: validation_exports.string(),
10
+ name: v.string(),
11
11
  quantityDisplayDecimals: IntegerSchema,
12
12
  quantityScale: IntegerSchema
13
13
  });
14
- const PairMarketDataConfigSchema = validation_exports.object({ orderbookPriceBuckets: validation_exports.array(FiniteNumberSchema) });
15
- const EnrichedPairConfigSchema = validation_exports.object({
14
+ const PairMarketDataConfigSchema = v.object({ orderbookPriceBuckets: v.array(FiniteNumberSchema) });
15
+ const EnrichedPairConfigSchema = v.object({
16
16
  symbolId: IntegerSchema,
17
- symbol: validation_exports.string(),
17
+ symbol: v.string(),
18
18
  baseAsset: AssetConfigSchema,
19
19
  quoteAsset: AssetConfigSchema,
20
- tickSize: validation_exports.string(),
21
- stepSize: validation_exports.string(),
22
- minNotionalQuote: validation_exports.string(),
23
- minQtyBase: validation_exports.string(),
24
- allowBuyFeeFromBase: validation_exports.boolean(),
20
+ tickSize: v.string(),
21
+ stepSize: v.string(),
22
+ minNotionalQuote: v.string(),
23
+ minQtyBase: v.string(),
24
+ allowBuyFeeFromBase: v.boolean(),
25
25
  defaultMarketSlippagePctBuy: FiniteNumberSchema,
26
26
  defaultMarketSlippagePctSell: FiniteNumberSchema,
27
27
  maxClientRefDriftPct: FiniteNumberSchema,
28
- marketdata: validation_exports.optional(PairMarketDataConfigSchema),
29
- listingAt: validation_exports.nullable(FiniteNumberSchema),
30
- delistingAt: validation_exports.nullable(FiniteNumberSchema),
31
- status: validation_exports.picklist([...PAIR_STATUSES, "unknown"])
28
+ marketdata: v.optional(PairMarketDataConfigSchema),
29
+ listingAt: v.nullable(FiniteNumberSchema),
30
+ delistingAt: v.nullable(FiniteNumberSchema),
31
+ status: v.picklist([...PAIR_STATUSES, "unknown"])
32
32
  });
33
- const ZipperChainConfigSchema = validation_exports.object({
33
+ const ZipperChainConfigSchema = v.object({
34
34
  chainId: IntegerSchema,
35
- code: validation_exports.string(),
36
- name: validation_exports.string(),
37
- nativeChainId: validation_exports.string(),
38
- nativeCurrencySymbol: validation_exports.string(),
39
- explorerUrl: validation_exports.string(),
40
- icon: validation_exports.string(),
35
+ code: v.string(),
36
+ name: v.string(),
37
+ nativeChainId: v.string(),
38
+ nativeCurrencySymbol: v.string(),
39
+ explorerUrl: v.string(),
40
+ icon: v.string(),
41
41
  requiredConfirmations: IntegerSchema,
42
42
  confirmationTimeSeconds: IntegerSchema,
43
- isCaseSensitive: validation_exports.boolean(),
43
+ isCaseSensitive: v.boolean(),
44
44
  minAddressLength: IntegerSchema,
45
45
  maxAddressLength: IntegerSchema
46
46
  });
47
- const ZipperTokenConfigSchema = validation_exports.object({
48
- address: validation_exports.string(),
47
+ const ZipperTokenConfigSchema = v.object({
48
+ address: v.string(),
49
49
  decimals: IntegerSchema
50
50
  });
51
- const ZipperEnrichedAssetChainSchema = validation_exports.object({
51
+ const ZipperEnrichedAssetChainSchema = v.object({
52
52
  ...ZipperChainConfigSchema.entries,
53
53
  zippedAssetId: IntegerSchema,
54
- isNativeAsset: validation_exports.boolean(),
55
- networkFee: validation_exports.optional(validation_exports.string()),
56
- networkFeeTsSec: validation_exports.optional(FiniteNumberSchema),
57
- depositMinAmount: validation_exports.optional(validation_exports.string()),
58
- withdrawMinAmount: validation_exports.optional(validation_exports.string()),
59
- supply: validation_exports.optional(validation_exports.string()),
54
+ isNativeAsset: v.boolean(),
55
+ networkFee: v.optional(v.string()),
56
+ networkFeeTsSec: v.optional(FiniteNumberSchema),
57
+ depositMinAmount: v.optional(v.string()),
58
+ withdrawMinAmount: v.optional(v.string()),
59
+ supply: v.optional(v.string()),
60
60
  sourceToken: ZipperTokenConfigSchema,
61
61
  zToken: ZipperTokenConfigSchema
62
62
  });
63
- const ZipperEnrichedAssetConfigSchema = validation_exports.object({
64
- asset: validation_exports.string(),
63
+ const ZipperEnrichedAssetConfigSchema = v.object({
64
+ asset: v.string(),
65
65
  ledgerId: IntegerSchema,
66
- name: validation_exports.string(),
67
- icon: validation_exports.string(),
66
+ name: v.string(),
67
+ icon: v.string(),
68
68
  quantityScale: IntegerSchema,
69
69
  quantityDisplayDecimals: IntegerSchema,
70
- uAssetId: validation_exports.string(),
71
- chains: validation_exports.array(ZipperEnrichedAssetChainSchema)
70
+ uAssetId: v.string(),
71
+ chains: v.array(ZipperEnrichedAssetChainSchema)
72
72
  });
73
- const ZipperChainContractConfigSchema = validation_exports.object({
74
- name: validation_exports.string(),
75
- address: validation_exports.string(),
76
- type: validation_exports.string(),
77
- description: validation_exports.string(),
73
+ const ZipperChainContractConfigSchema = v.object({
74
+ name: v.string(),
75
+ address: v.string(),
76
+ type: v.string(),
77
+ description: v.string(),
78
78
  version: IntegerSchema
79
79
  });
80
- const CatalogSnapshotShapeSchema = validation_exports.object({
81
- source: validation_exports.picklist(["api", "snapshot"]),
80
+ const CatalogSnapshotShapeSchema = v.object({
81
+ source: v.picklist(["api", "snapshot"]),
82
82
  tsMs: FiniteNumberSchema,
83
83
  version: IntegerSchema,
84
- market: validation_exports.object({
85
- assets: validation_exports.array(AssetConfigSchema),
86
- pairs: validation_exports.array(EnrichedPairConfigSchema),
87
- tsSec: validation_exports.optional(FiniteNumberSchema)
84
+ market: v.object({
85
+ assets: v.array(AssetConfigSchema),
86
+ pairs: v.array(EnrichedPairConfigSchema),
87
+ tsSec: v.optional(FiniteNumberSchema)
88
88
  }),
89
- zipper: validation_exports.object({
90
- chains: validation_exports.array(ZipperChainConfigSchema),
91
- assets: validation_exports.array(ZipperEnrichedAssetConfigSchema),
92
- contracts: validation_exports.array(ZipperChainContractConfigSchema),
93
- tsMs: validation_exports.optional(FiniteNumberSchema)
89
+ zipper: v.object({
90
+ chains: v.array(ZipperChainConfigSchema),
91
+ assets: v.array(ZipperEnrichedAssetConfigSchema),
92
+ contracts: v.array(ZipperChainContractConfigSchema),
93
+ tsMs: v.optional(FiniteNumberSchema)
94
94
  })
95
95
  });
96
- const ZippedAssetSupplyCatalogUpdatesSchema = validation_exports.array(validation_exports.object({
96
+ const ZippedAssetSupplyCatalogUpdatesSchema = v.array(v.object({
97
97
  zippedAssetId: IntegerSchema,
98
- supply: validation_exports.string()
98
+ supply: v.string()
99
99
  }));
100
100
  const parsedSnapshots = /* @__PURE__ */ new WeakMap();
101
101
  function hasValidRelationships(snapshot) {
@@ -104,8 +104,8 @@ function hasValidRelationships(snapshot) {
104
104
  const chainIds = new Set(snapshot.zipper.chains.map((chain) => chain.chainId));
105
105
  return snapshot.zipper.assets.every((asset) => asset.chains.every((chain) => chainIds.has(chain.chainId)));
106
106
  }
107
- const CatalogSnapshotSchema = validation_exports.custom((value) => {
108
- const result = validation_exports.safeParse(CatalogSnapshotShapeSchema, value);
107
+ const CatalogSnapshotSchema = v.custom((value) => {
108
+ const result = v.safeParse(CatalogSnapshotShapeSchema, value);
109
109
  return result.success && hasValidRelationships(result.output);
110
110
  });
111
111
  /** Parses and caches untrusted SSR or JavaScript input as a catalog snapshot. */
@@ -113,7 +113,7 @@ function parseCatalogSnapshot(value) {
113
113
  if (typeof value !== "object" || value === null) throw new ValidationError("Catalog snapshot is malformed.");
114
114
  const cached = parsedSnapshots.get(value);
115
115
  if (cached) return cached;
116
- const result = validation_exports.safeParse(CatalogSnapshotSchema, value);
116
+ const result = v.safeParse(CatalogSnapshotSchema, value);
117
117
  if (!result.success) throw new ValidationError("Catalog snapshot is malformed.");
118
118
  const snapshot = result.output;
119
119
  parsedSnapshots.set(value, snapshot);
@@ -122,7 +122,7 @@ function parseCatalogSnapshot(value) {
122
122
  }
123
123
  /** Parses supply updates before they can advance a snapshot's version or timestamp. */
124
124
  function parseZippedAssetSupplyCatalogUpdates(value) {
125
- const result = validation_exports.safeParse(ZippedAssetSupplyCatalogUpdatesSchema, value);
125
+ const result = v.safeParse(ZippedAssetSupplyCatalogUpdatesSchema, value);
126
126
  if (!result.success) throw new ValidationError("Zipper catalog supply updates are malformed.");
127
127
  return result.output;
128
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-validation.js","names":["v"],"sources":["../../src/catalogs/snapshot-validation.ts"],"sourcesContent":["import * as v from \"../shared/validation.js\";\nimport { ValidationError } from \"../shared/errors.js\";\nimport { PAIR_STATUSES } from \"../shared/catalog-config.js\";\nimport type { CatalogSnapshot } from \"./types.js\";\nimport type { ZippedAssetSupplyCatalogUpdate } from \"./zipper-supply.js\";\n\nconst FiniteNumberSchema = v.pipe(v.number(), v.finite());\nconst IntegerSchema = v.pipe(FiniteNumberSchema, v.safeInteger());\n\nconst AssetConfigSchema = v.object({\n symbol: v.string(),\n ledgerId: IntegerSchema,\n name: v.string(),\n quantityDisplayDecimals: IntegerSchema,\n quantityScale: IntegerSchema,\n});\n\nconst PairMarketDataConfigSchema = v.object({\n orderbookPriceBuckets: v.array(FiniteNumberSchema),\n});\n\nconst EnrichedPairConfigSchema = v.object({\n symbolId: IntegerSchema,\n symbol: v.string(),\n baseAsset: AssetConfigSchema,\n quoteAsset: AssetConfigSchema,\n tickSize: v.string(),\n stepSize: v.string(),\n minNotionalQuote: v.string(),\n minQtyBase: v.string(),\n allowBuyFeeFromBase: v.boolean(),\n defaultMarketSlippagePctBuy: FiniteNumberSchema,\n defaultMarketSlippagePctSell: FiniteNumberSchema,\n maxClientRefDriftPct: FiniteNumberSchema,\n marketdata: v.optional(PairMarketDataConfigSchema),\n listingAt: v.nullable(FiniteNumberSchema),\n delistingAt: v.nullable(FiniteNumberSchema),\n status: v.picklist([...PAIR_STATUSES, \"unknown\"]),\n});\n\nconst ZipperChainConfigSchema = v.object({\n chainId: IntegerSchema,\n code: v.string(),\n name: v.string(),\n nativeChainId: v.string(),\n nativeCurrencySymbol: v.string(),\n explorerUrl: v.string(),\n icon: v.string(),\n requiredConfirmations: IntegerSchema,\n confirmationTimeSeconds: IntegerSchema,\n isCaseSensitive: v.boolean(),\n minAddressLength: IntegerSchema,\n maxAddressLength: IntegerSchema,\n});\n\nconst ZipperTokenConfigSchema = v.object({\n address: v.string(),\n decimals: IntegerSchema,\n});\n\nconst ZipperEnrichedAssetChainSchema = v.object({\n ...ZipperChainConfigSchema.entries,\n zippedAssetId: IntegerSchema,\n isNativeAsset: v.boolean(),\n networkFee: v.optional(v.string()),\n networkFeeTsSec: v.optional(FiniteNumberSchema),\n depositMinAmount: v.optional(v.string()),\n withdrawMinAmount: v.optional(v.string()),\n supply: v.optional(v.string()),\n sourceToken: ZipperTokenConfigSchema,\n zToken: ZipperTokenConfigSchema,\n});\n\nconst ZipperEnrichedAssetConfigSchema = v.object({\n asset: v.string(),\n ledgerId: IntegerSchema,\n name: v.string(),\n icon: v.string(),\n quantityScale: IntegerSchema,\n quantityDisplayDecimals: IntegerSchema,\n uAssetId: v.string(),\n chains: v.array(ZipperEnrichedAssetChainSchema),\n});\n\nconst ZipperChainContractConfigSchema = v.object({\n name: v.string(),\n address: v.string(),\n type: v.string(),\n description: v.string(),\n version: IntegerSchema,\n});\n\nconst CatalogSnapshotShapeSchema = v.object({\n source: v.picklist([\"api\", \"snapshot\"]),\n tsMs: FiniteNumberSchema,\n version: IntegerSchema,\n market: v.object({\n assets: v.array(AssetConfigSchema),\n pairs: v.array(EnrichedPairConfigSchema),\n tsSec: v.optional(FiniteNumberSchema),\n }),\n zipper: v.object({\n chains: v.array(ZipperChainConfigSchema),\n assets: v.array(ZipperEnrichedAssetConfigSchema),\n contracts: v.array(ZipperChainContractConfigSchema),\n tsMs: v.optional(FiniteNumberSchema),\n }),\n});\n\nconst ZippedAssetSupplyCatalogUpdatesSchema = v.array(\n v.object({\n zippedAssetId: IntegerSchema,\n supply: v.string(),\n }),\n);\n\nconst parsedSnapshots = new WeakMap<object, CatalogSnapshot>();\n\nfunction hasValidRelationships(\n snapshot: v.InferOutput<typeof CatalogSnapshotShapeSchema>,\n): boolean {\n const assetSymbols = new Set(snapshot.market.assets.map((asset) => asset.symbol));\n if (\n snapshot.market.pairs.some(\n (pair) =>\n !assetSymbols.has(pair.baseAsset.symbol) ||\n !assetSymbols.has(pair.quoteAsset.symbol),\n )\n ) {\n return false;\n }\n\n const chainIds = new Set(snapshot.zipper.chains.map((chain) => chain.chainId));\n return snapshot.zipper.assets.every((asset) =>\n asset.chains.every((chain) => chainIds.has(chain.chainId)),\n );\n}\n\nconst CatalogSnapshotSchema = v.custom<CatalogSnapshot>((value) => {\n const result = v.safeParse(CatalogSnapshotShapeSchema, value);\n return result.success && hasValidRelationships(result.output);\n});\n\n/** Parses and caches untrusted SSR or JavaScript input as a catalog snapshot. */\nexport function parseCatalogSnapshot(value: unknown): CatalogSnapshot {\n if (typeof value !== \"object\" || value === null) {\n throw new ValidationError(\"Catalog snapshot is malformed.\");\n }\n\n const cached = parsedSnapshots.get(value);\n if (cached) return cached;\n\n const result = v.safeParse(CatalogSnapshotSchema, value);\n if (!result.success) {\n throw new ValidationError(\"Catalog snapshot is malformed.\");\n }\n\n const snapshot: CatalogSnapshot = result.output;\n parsedSnapshots.set(value, snapshot);\n parsedSnapshots.set(snapshot, snapshot);\n return snapshot;\n}\n\n/** Parses supply updates before they can advance a snapshot's version or timestamp. */\nexport function parseZippedAssetSupplyCatalogUpdates(\n value: unknown,\n): readonly ZippedAssetSupplyCatalogUpdate[] {\n const result = v.safeParse(ZippedAssetSupplyCatalogUpdatesSchema, value);\n if (!result.success) {\n throw new ValidationError(\"Zipper catalog supply updates are malformed.\");\n }\n return result.output;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"snapshot-validation.js","names":[],"sources":["../../src/catalogs/snapshot-validation.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { ValidationError } from \"../shared/errors.js\";\nimport { PAIR_STATUSES } from \"../shared/catalog-config.js\";\nimport type { CatalogSnapshot } from \"./types.js\";\nimport type { ZippedAssetSupplyCatalogUpdate } from \"./zipper-supply.js\";\n\nconst FiniteNumberSchema = v.pipe(v.number(), v.finite());\nconst IntegerSchema = v.pipe(FiniteNumberSchema, v.safeInteger());\n\nconst AssetConfigSchema = v.object({\n symbol: v.string(),\n ledgerId: IntegerSchema,\n name: v.string(),\n quantityDisplayDecimals: IntegerSchema,\n quantityScale: IntegerSchema,\n});\n\nconst PairMarketDataConfigSchema = v.object({\n orderbookPriceBuckets: v.array(FiniteNumberSchema),\n});\n\nconst EnrichedPairConfigSchema = v.object({\n symbolId: IntegerSchema,\n symbol: v.string(),\n baseAsset: AssetConfigSchema,\n quoteAsset: AssetConfigSchema,\n tickSize: v.string(),\n stepSize: v.string(),\n minNotionalQuote: v.string(),\n minQtyBase: v.string(),\n allowBuyFeeFromBase: v.boolean(),\n defaultMarketSlippagePctBuy: FiniteNumberSchema,\n defaultMarketSlippagePctSell: FiniteNumberSchema,\n maxClientRefDriftPct: FiniteNumberSchema,\n marketdata: v.optional(PairMarketDataConfigSchema),\n listingAt: v.nullable(FiniteNumberSchema),\n delistingAt: v.nullable(FiniteNumberSchema),\n status: v.picklist([...PAIR_STATUSES, \"unknown\"]),\n});\n\nconst ZipperChainConfigSchema = v.object({\n chainId: IntegerSchema,\n code: v.string(),\n name: v.string(),\n nativeChainId: v.string(),\n nativeCurrencySymbol: v.string(),\n explorerUrl: v.string(),\n icon: v.string(),\n requiredConfirmations: IntegerSchema,\n confirmationTimeSeconds: IntegerSchema,\n isCaseSensitive: v.boolean(),\n minAddressLength: IntegerSchema,\n maxAddressLength: IntegerSchema,\n});\n\nconst ZipperTokenConfigSchema = v.object({\n address: v.string(),\n decimals: IntegerSchema,\n});\n\nconst ZipperEnrichedAssetChainSchema = v.object({\n ...ZipperChainConfigSchema.entries,\n zippedAssetId: IntegerSchema,\n isNativeAsset: v.boolean(),\n networkFee: v.optional(v.string()),\n networkFeeTsSec: v.optional(FiniteNumberSchema),\n depositMinAmount: v.optional(v.string()),\n withdrawMinAmount: v.optional(v.string()),\n supply: v.optional(v.string()),\n sourceToken: ZipperTokenConfigSchema,\n zToken: ZipperTokenConfigSchema,\n});\n\nconst ZipperEnrichedAssetConfigSchema = v.object({\n asset: v.string(),\n ledgerId: IntegerSchema,\n name: v.string(),\n icon: v.string(),\n quantityScale: IntegerSchema,\n quantityDisplayDecimals: IntegerSchema,\n uAssetId: v.string(),\n chains: v.array(ZipperEnrichedAssetChainSchema),\n});\n\nconst ZipperChainContractConfigSchema = v.object({\n name: v.string(),\n address: v.string(),\n type: v.string(),\n description: v.string(),\n version: IntegerSchema,\n});\n\nconst CatalogSnapshotShapeSchema = v.object({\n source: v.picklist([\"api\", \"snapshot\"]),\n tsMs: FiniteNumberSchema,\n version: IntegerSchema,\n market: v.object({\n assets: v.array(AssetConfigSchema),\n pairs: v.array(EnrichedPairConfigSchema),\n tsSec: v.optional(FiniteNumberSchema),\n }),\n zipper: v.object({\n chains: v.array(ZipperChainConfigSchema),\n assets: v.array(ZipperEnrichedAssetConfigSchema),\n contracts: v.array(ZipperChainContractConfigSchema),\n tsMs: v.optional(FiniteNumberSchema),\n }),\n});\n\nconst ZippedAssetSupplyCatalogUpdatesSchema = v.array(\n v.object({\n zippedAssetId: IntegerSchema,\n supply: v.string(),\n }),\n);\n\nconst parsedSnapshots = new WeakMap<object, CatalogSnapshot>();\n\nfunction hasValidRelationships(\n snapshot: v.InferOutput<typeof CatalogSnapshotShapeSchema>,\n): boolean {\n const assetSymbols = new Set(snapshot.market.assets.map((asset) => asset.symbol));\n if (\n snapshot.market.pairs.some(\n (pair) =>\n !assetSymbols.has(pair.baseAsset.symbol) ||\n !assetSymbols.has(pair.quoteAsset.symbol),\n )\n ) {\n return false;\n }\n\n const chainIds = new Set(snapshot.zipper.chains.map((chain) => chain.chainId));\n return snapshot.zipper.assets.every((asset) =>\n asset.chains.every((chain) => chainIds.has(chain.chainId)),\n );\n}\n\nconst CatalogSnapshotSchema = v.custom<CatalogSnapshot>((value) => {\n const result = v.safeParse(CatalogSnapshotShapeSchema, value);\n return result.success && hasValidRelationships(result.output);\n});\n\n/** Parses and caches untrusted SSR or JavaScript input as a catalog snapshot. */\nexport function parseCatalogSnapshot(value: unknown): CatalogSnapshot {\n if (typeof value !== \"object\" || value === null) {\n throw new ValidationError(\"Catalog snapshot is malformed.\");\n }\n\n const cached = parsedSnapshots.get(value);\n if (cached) return cached;\n\n const result = v.safeParse(CatalogSnapshotSchema, value);\n if (!result.success) {\n throw new ValidationError(\"Catalog snapshot is malformed.\");\n }\n\n const snapshot: CatalogSnapshot = result.output;\n parsedSnapshots.set(value, snapshot);\n parsedSnapshots.set(snapshot, snapshot);\n return snapshot;\n}\n\n/** Parses supply updates before they can advance a snapshot's version or timestamp. */\nexport function parseZippedAssetSupplyCatalogUpdates(\n value: unknown,\n): readonly ZippedAssetSupplyCatalogUpdate[] {\n const result = v.safeParse(ZippedAssetSupplyCatalogUpdatesSchema, value);\n if (!result.success) {\n throw new ValidationError(\"Zipper catalog supply updates are malformed.\");\n }\n return result.output;\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { parse } from "../../shared/validation.js";
2
1
  import { ResolveService } from "../../gen/auth/v1/resolve_pb.js";
2
+ import { parse } from "../../shared/validation.js";
3
3
  import { toConnectCallOptions } from "../../shared/request-options.js";
4
4
  import { ResolveAccountInputSchema, ResolvedAccountArraySchema } from "./accounts.schemas.js";
5
5
  import { createClient } from "@connectrpc/connect";
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","names":["#client","ProtoResolve.ResolveService","v.parse"],"sources":["../../../src/services/accounts/accounts.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as ProtoResolve from \"../../gen/auth/v1/resolve_pb.js\";\nimport * as v from \"../../shared/validation.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport {\n ResolveAccountInputSchema,\n ResolvedAccountArraySchema,\n type ResolveAccountInput,\n type ResolvedAccount,\n} from \"./accounts.schemas.js\";\n\n/**\n * Resolves user-entered account identifiers into transfer/shareable root or subaccount destinations.\n */\nexport class AccountsService {\n #client: Client<typeof ProtoResolve.ResolveService>;\n\n constructor(transport: Transport) {\n this.#client = createClient(ProtoResolve.ResolveService, transport);\n }\n\n /**\n * Resolves a username, opaque account/subaccount ID, or smart-account address into matching destination accounts; set includeSubaccounts for internal-transfer flows that may target subaccounts.\n */\n async resolve(\n input: ResolveAccountInput,\n options?: PolyesterRequestOptions,\n ): Promise<ResolvedAccount[]> {\n const validatedInput = v.parse(ResolveAccountInputSchema, input);\n const res = await this.#client.resolveAccount(\n validatedInput,\n toConnectCallOptions(options),\n );\n\n return v.parse(ResolvedAccountArraySchema, res.matches);\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAa,kBAAb,MAA6B;CACzB;CAEA,YAAY,WAAsB;EAC9B,KAAKA,UAAU,aAAaC,gBAA6B,SAAS;CACtE;;;;CAKA,MAAM,QACF,OACA,SAC0B;EAC1B,MAAM,iBAAiBC,MAAQ,2BAA2B,KAAK;EAC/D,MAAM,MAAM,MAAM,KAAKF,QAAQ,eAC3B,gBACA,qBAAqB,OAAO,CAChC;EAEA,OAAOE,MAAQ,4BAA4B,IAAI,OAAO;CAC1D;AACJ"}
1
+ {"version":3,"file":"accounts.js","names":["#client","ProtoResolve.ResolveService"],"sources":["../../../src/services/accounts/accounts.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as ProtoResolve from \"../../gen/auth/v1/resolve_pb.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport {\n ResolveAccountInputSchema,\n ResolvedAccountArraySchema,\n type ResolveAccountInput,\n type ResolvedAccount,\n} from \"./accounts.schemas.js\";\n\n/**\n * Resolves user-entered account identifiers into transfer/shareable root or subaccount destinations.\n */\nexport class AccountsService {\n #client: Client<typeof ProtoResolve.ResolveService>;\n\n constructor(transport: Transport) {\n this.#client = createClient(ProtoResolve.ResolveService, transport);\n }\n\n /**\n * Resolves a username, opaque account/subaccount ID, or smart-account address into matching destination accounts; set includeSubaccounts for internal-transfer flows that may target subaccounts.\n */\n async resolve(\n input: ResolveAccountInput,\n options?: PolyesterRequestOptions,\n ): Promise<ResolvedAccount[]> {\n const validatedInput = parse(ResolveAccountInputSchema, input);\n const res = await this.#client.resolveAccount(\n validatedInput,\n toConnectCallOptions(options),\n );\n\n return parse(ResolvedAccountArraySchema, res.matches);\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAa,kBAAb,MAA6B;CACzB;CAEA,YAAY,WAAsB;EAC9B,KAAKA,UAAU,aAAaC,gBAA6B,SAAS;CACtE;;;;CAKA,MAAM,QACF,OACA,SAC0B;EAC1B,MAAM,iBAAiB,MAAM,2BAA2B,KAAK;EAC7D,MAAM,MAAM,MAAM,KAAKD,QAAQ,eAC3B,gBACA,qBAAqB,OAAO,CAChC;EAEA,OAAO,MAAM,4BAA4B,IAAI,OAAO;CACxD;AACJ"}
@@ -1,20 +1,20 @@
1
- import { validation_d_exports } from "../../shared/validation.js";
2
1
  import { ResolveHint } from "../../gen/auth/v1/resolve_pb.js";
2
+ import * as v from "valibot";
3
3
  //#region src/services/accounts/accounts.schemas.d.ts
4
- declare const ResolveAccountInputSchema: validation_d_exports.ObjectSchema<{
5
- readonly query: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.StringSchema<undefined>, validation_d_exports.TrimAction, validation_d_exports.MinLengthAction<string, 1, "query is required">]>;
6
- readonly hint: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, "">, validation_d_exports.TransformAction<string, ResolveHint>]>;
7
- readonly includeSubaccounts: validation_d_exports.OptionalSchema<validation_d_exports.BooleanSchema<undefined>, false>;
4
+ declare const ResolveAccountInputSchema: v.ObjectSchema<{
5
+ readonly query: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, "query is required">]>;
6
+ readonly hint: v.SchemaWithPipe<readonly [v.OptionalSchema<v.StringSchema<undefined>, "">, v.TransformAction<string, ResolveHint>]>;
7
+ readonly includeSubaccounts: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
8
8
  }, undefined>;
9
- type ResolveAccountInput = validation_d_exports.InferInput<typeof ResolveAccountInputSchema>;
10
- declare const ResolvedAccountSchema: validation_d_exports.ObjectSchema<{
11
- readonly smartAccountAddress: validation_d_exports.StringSchema<undefined>;
12
- readonly kind: validation_d_exports.PicklistSchema<["root", "sub"], undefined>;
13
- readonly rootUsername: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
14
- readonly subaccountLabel: validation_d_exports.OptionalSchema<validation_d_exports.StringSchema<undefined>, undefined>;
15
- readonly accountId: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.BigintSchema<undefined>, validation_d_exports.TransformAction<bigint, string>]>;
9
+ type ResolveAccountInput = v.InferInput<typeof ResolveAccountInputSchema>;
10
+ declare const ResolvedAccountSchema: v.ObjectSchema<{
11
+ readonly smartAccountAddress: v.StringSchema<undefined>;
12
+ readonly kind: v.PicklistSchema<["root", "sub"], undefined>;
13
+ readonly rootUsername: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
14
+ readonly subaccountLabel: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
15
+ readonly accountId: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
16
16
  }, undefined>;
17
- type ResolvedAccount = validation_d_exports.InferOutput<typeof ResolvedAccountSchema>;
17
+ type ResolvedAccount = v.InferOutput<typeof ResolvedAccountSchema>;
18
18
  //#endregion
19
19
  export { ResolveAccountInput, ResolveAccountInputSchema, ResolvedAccount, ResolvedAccountSchema };
20
20
  //# sourceMappingURL=accounts.schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.schemas.d.ts","names":[],"sources":["../../../src/services/accounts/accounts.schemas.ts"],"mappings":";;;cAca,2BAAyB,qBAAA;;;;;KAS1B,sBAAsB,qBAAE,kBAAkB;cAEzC,uBAAqB,qBAAA;;;;;;;KAUtB,kBAAkB,qBAAE,mBAAmB"}
1
+ {"version":3,"file":"accounts.schemas.d.ts","names":[],"sources":["../../../src/services/accounts/accounts.schemas.ts"],"mappings":";;;cAca,2BAAyB,EAAA;;;;;KAS1B,sBAAsB,EAAE,kBAAkB;cAEzC,uBAAqB,EAAA;;;;;;;KAUtB,kBAAkB,EAAE,mBAAmB"}
@@ -1,7 +1,7 @@
1
- import { validation_exports } from "../../shared/validation.js";
2
1
  import { PublicIdSchema } from "../../shared/schemas.js";
3
2
  import "../../gen/auth/v1/resolve_pb.js";
4
3
  import { ResolveHintCodec } from "./accounts.codecs.js";
4
+ import * as v from "valibot";
5
5
  //#region src/services/accounts/accounts.schemas.ts
6
6
  function normalizeResolveHint(value) {
7
7
  const raw = (value ?? "").trim();
@@ -9,19 +9,19 @@ function normalizeResolveHint(value) {
9
9
  const key = raw.toUpperCase().replace(/^RESOLVE_HINT_/, "");
10
10
  return ResolveHintCodec.keyToProtoLookup[key] ?? 0;
11
11
  }
12
- const ResolveAccountInputSchema = validation_exports.object({
13
- query: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1, "query is required")),
14
- hint: validation_exports.pipe(validation_exports.optional(validation_exports.string(), ""), validation_exports.transform((value) => normalizeResolveHint(value))),
15
- includeSubaccounts: validation_exports.optional(validation_exports.boolean(), false)
12
+ const ResolveAccountInputSchema = v.object({
13
+ query: v.pipe(v.string(), v.trim(), v.minLength(1, "query is required")),
14
+ hint: v.pipe(v.optional(v.string(), ""), v.transform((value) => normalizeResolveHint(value))),
15
+ includeSubaccounts: v.optional(v.boolean(), false)
16
16
  });
17
- const ResolvedAccountSchema = validation_exports.object({
18
- smartAccountAddress: validation_exports.string(),
19
- kind: validation_exports.picklist(["root", "sub"]),
20
- rootUsername: validation_exports.optional(validation_exports.string()),
21
- subaccountLabel: validation_exports.optional(validation_exports.string()),
17
+ const ResolvedAccountSchema = v.object({
18
+ smartAccountAddress: v.string(),
19
+ kind: v.picklist(["root", "sub"]),
20
+ rootUsername: v.optional(v.string()),
21
+ subaccountLabel: v.optional(v.string()),
22
22
  accountId: PublicIdSchema
23
23
  });
24
- const ResolvedAccountArraySchema = validation_exports.optional(validation_exports.array(ResolvedAccountSchema), []);
24
+ const ResolvedAccountArraySchema = v.optional(v.array(ResolvedAccountSchema), []);
25
25
  //#endregion
26
26
  export { ResolveAccountInputSchema, ResolvedAccountArraySchema, ResolvedAccountSchema };
27
27
 
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.schemas.js","names":["v"],"sources":["../../../src/services/accounts/accounts.schemas.ts"],"sourcesContent":["import * as v from \"../../shared/validation.js\";\nimport * as ProtoResolve from \"../../gen/auth/v1/resolve_pb.js\";\nimport { PublicIdSchema } from \"../../shared/schemas.js\";\nimport { ResolveHintCodec } from \"./accounts.codecs.js\";\n\nfunction normalizeResolveHint(value?: string): ProtoResolve.ResolveHint {\n const raw = (value ?? \"\").trim();\n if (!raw) return ProtoResolve.ResolveHint.RESOLVE_HINT_UNSPECIFIED;\n const key = raw.toUpperCase().replace(/^RESOLVE_HINT_/, \"\");\n return (\n ResolveHintCodec.keyToProtoLookup[key] ?? ProtoResolve.ResolveHint.RESOLVE_HINT_UNSPECIFIED\n );\n}\n\nexport const ResolveAccountInputSchema = v.object({\n query: v.pipe(v.string(), v.trim(), v.minLength(1, \"query is required\")),\n hint: v.pipe(\n v.optional(v.string(), \"\"),\n v.transform((value) => normalizeResolveHint(value)),\n ),\n includeSubaccounts: v.optional(v.boolean(), false),\n});\n\nexport type ResolveAccountInput = v.InferInput<typeof ResolveAccountInputSchema>;\n\nexport const ResolvedAccountSchema = v.object({\n smartAccountAddress: v.string(),\n kind: v.picklist([\"root\", \"sub\"]),\n rootUsername: v.optional(v.string()),\n subaccountLabel: v.optional(v.string()),\n accountId: PublicIdSchema,\n});\n\nexport const ResolvedAccountArraySchema = v.optional(v.array(ResolvedAccountSchema), []);\n\nexport type ResolvedAccount = v.InferOutput<typeof ResolvedAccountSchema>;\n"],"mappings":";;;;;AAKA,SAAS,qBAAqB,OAA0C;CACpE,MAAM,OAAO,SAAS,GAAA,CAAI,KAAK;CAC/B,IAAI,CAAC,KAAK,OAAA;CACV,MAAM,MAAM,IAAI,YAAY,CAAC,CAAC,QAAQ,kBAAkB,EAAE;CAC1D,OACI,iBAAiB,iBAAiB,QAAA;AAE1C;AAEA,MAAa,4BAA4BA,mBAAE,OAAO;CAC9C,OAAOA,mBAAE,KAAKA,mBAAE,OAAO,GAAGA,mBAAE,KAAK,GAAGA,mBAAE,UAAU,GAAG,mBAAmB,CAAC;CACvE,MAAMA,mBAAE,KACJA,mBAAE,SAASA,mBAAE,OAAO,GAAG,EAAE,GACzBA,mBAAE,WAAW,UAAU,qBAAqB,KAAK,CAAC,CACtD;CACA,oBAAoBA,mBAAE,SAASA,mBAAE,QAAQ,GAAG,KAAK;AACrD,CAAC;AAID,MAAa,wBAAwBA,mBAAE,OAAO;CAC1C,qBAAqBA,mBAAE,OAAO;CAC9B,MAAMA,mBAAE,SAAS,CAAC,QAAQ,KAAK,CAAC;CAChC,cAAcA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CACnC,iBAAiBA,mBAAE,SAASA,mBAAE,OAAO,CAAC;CACtC,WAAW;AACf,CAAC;AAED,MAAa,6BAA6BA,mBAAE,SAASA,mBAAE,MAAM,qBAAqB,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"accounts.schemas.js","names":[],"sources":["../../../src/services/accounts/accounts.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport * as ProtoResolve from \"../../gen/auth/v1/resolve_pb.js\";\nimport { PublicIdSchema } from \"../../shared/schemas.js\";\nimport { ResolveHintCodec } from \"./accounts.codecs.js\";\n\nfunction normalizeResolveHint(value?: string): ProtoResolve.ResolveHint {\n const raw = (value ?? \"\").trim();\n if (!raw) return ProtoResolve.ResolveHint.RESOLVE_HINT_UNSPECIFIED;\n const key = raw.toUpperCase().replace(/^RESOLVE_HINT_/, \"\");\n return (\n ResolveHintCodec.keyToProtoLookup[key] ?? ProtoResolve.ResolveHint.RESOLVE_HINT_UNSPECIFIED\n );\n}\n\nexport const ResolveAccountInputSchema = v.object({\n query: v.pipe(v.string(), v.trim(), v.minLength(1, \"query is required\")),\n hint: v.pipe(\n v.optional(v.string(), \"\"),\n v.transform((value) => normalizeResolveHint(value)),\n ),\n includeSubaccounts: v.optional(v.boolean(), false),\n});\n\nexport type ResolveAccountInput = v.InferInput<typeof ResolveAccountInputSchema>;\n\nexport const ResolvedAccountSchema = v.object({\n smartAccountAddress: v.string(),\n kind: v.picklist([\"root\", \"sub\"]),\n rootUsername: v.optional(v.string()),\n subaccountLabel: v.optional(v.string()),\n accountId: PublicIdSchema,\n});\n\nexport const ResolvedAccountArraySchema = v.optional(v.array(ResolvedAccountSchema), []);\n\nexport type ResolvedAccount = v.InferOutput<typeof ResolvedAccountSchema>;\n"],"mappings":";;;;;AAKA,SAAS,qBAAqB,OAA0C;CACpE,MAAM,OAAO,SAAS,GAAA,CAAI,KAAK;CAC/B,IAAI,CAAC,KAAK,OAAA;CACV,MAAM,MAAM,IAAI,YAAY,CAAC,CAAC,QAAQ,kBAAkB,EAAE;CAC1D,OACI,iBAAiB,iBAAiB,QAAA;AAE1C;AAEA,MAAa,4BAA4B,EAAE,OAAO;CAC9C,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,GAAG,mBAAmB,CAAC;CACvE,MAAM,EAAE,KACJ,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,GACzB,EAAE,WAAW,UAAU,qBAAqB,KAAK,CAAC,CACtD;CACA,oBAAoB,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;AACrD,CAAC;AAID,MAAa,wBAAwB,EAAE,OAAO;CAC1C,qBAAqB,EAAE,OAAO;CAC9B,MAAM,EAAE,SAAS,CAAC,QAAQ,KAAK,CAAC;CAChC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC;CACnC,iBAAiB,EAAE,SAAS,EAAE,OAAO,CAAC;CACtC,WAAW;AACf,CAAC;AAED,MAAa,6BAA6B,EAAE,SAAS,EAAE,MAAM,qBAAqB,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"address-book.js","names":["#client","Proto.AddressBookService","#realtime","#resolver","v.parse","Proto.AddressBookViewInvalidatedSchema","AddressBookViewInvalidatedSchema"],"sources":["../../../src/services/address-book/address-book.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/address_book_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { AccountScopedInput } from \"../../shared/account-scope.js\";\nimport * as v from \"../../shared/validation.js\";\nimport {\n AddressBookEntriesSchema,\n AddressBookEntrySchema,\n AddressBookSchema,\n AddressBookTagSchema,\n AddressBookViewSchema,\n AddressBookViewInvalidatedSchema,\n CopyAddressBookEntryInputSchema,\n CreateAddressBookEntryInputSchema,\n CreateAddressBookTagInputSchema,\n DeleteAddressBookEntryInputSchema,\n DeleteAddressBookTagInputSchema,\n GetAddressBookViewInputSchema,\n InternalTransferWhitelistEntriesSchema,\n ListAddressBookEntriesInputSchema,\n ListInternalTransferWhitelistEntriesInputSchema,\n ListTransferCounterpartiesInputSchema,\n ListTransferDestinationsInputSchema,\n SubaccountScopedInputSchema,\n TransferCounterpartiesSchema,\n TransferDestinationsSchema,\n UpdateAddressBookEntryInputSchema,\n UpdateAddressBookTagInputSchema,\n WithdrawWhitelistViewSchema,\n type AddressBook,\n type AddressBookEntries,\n type AddressBookEntry,\n type AddressBookTag,\n type AddressBookView,\n type AddressBookViewInvalidated,\n type CopyAddressBookEntryInput,\n type CreateAddressBookEntryInput,\n type CreateAddressBookTagInput,\n type DeleteAddressBookEntryInput,\n type DeleteAddressBookTagInput,\n type GetAddressBookViewInput,\n type InternalTransferWhitelistEntries,\n type ListAddressBookEntriesInput,\n type ListInternalTransferWhitelistEntriesInput,\n type ListTransferCounterpartiesInput,\n type ListTransferDestinationsInput,\n type SubaccountScopedInput,\n type TransferCounterparties,\n type TransferDestinations,\n type UpdateAddressBookEntryInput,\n type UpdateAddressBookTagInput,\n type WithdrawWhitelistView,\n} from \"./address-book.schemas.js\";\n\ninterface SubscribeViewInvalidationsInput extends BaseSubscribeInput<AddressBookViewInvalidated> {\n rootAccountPublicId: string;\n}\n\n/**\n * Manages saved transfer destinations, tags, whitelist views, and recent counterparties for root or subaccount-scoped address books.\n */\nexport class AddressBookService {\n #client: Client<typeof Proto.AddressBookService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, resolver?: SubaccountResolver) {\n this.#client = createClient(Proto.AddressBookService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n }\n\n /**\n * Returns the root and subaccount address books visible to the caller, including caller role and display metadata.\n */\n async listBooks(options?: PolyesterRequestOptions): Promise<AddressBook[]> {\n const response = await this.#client.listAddressBooks({}, toConnectCallOptions(options));\n return response.books.map((book) => v.parse(AddressBookSchema, book));\n }\n\n /**\n * Returns saved address-book entries for the resolved subaccount scope, optionally filtered by external-chain or internal-account destination kind.\n */\n async listEntries(\n input: ListAddressBookEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: AddressBookEntries; nextPageToken: string }> {\n const request = v.parse(ListAddressBookEntriesInputSchema, this.resolveInput(input));\n const response = await this.#client.listAddressBookEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: v.parse(AddressBookEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Creates a saved external withdrawal or internal transfer destination in the resolved address book, optionally attaching existing tags and creating new tags in the same request.\n */\n async createEntry(\n input: CreateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = v.parse(CreateAddressBookEntryInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? v.parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Updates selected saved-destination metadata using optimistic concurrency.\n */\n async updateEntry(\n input: UpdateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = v.parse(UpdateAddressBookEntryInputSchema, input);\n const response = await this.#client.updateAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? v.parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Deletes one saved destination from the selected address book.\n */\n async deleteEntry(\n input: DeleteAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = v.parse(DeleteAddressBookEntryInputSchema, input);\n await this.#client.deleteAddressBookEntry(request, toConnectCallOptions(options));\n }\n\n /**\n * Copies a saved destination into another visible root or subaccount address book.\n */\n async copyEntry(\n input: CopyAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = v.parse(CopyAddressBookEntryInputSchema, input);\n const response = await this.#client.copyAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? v.parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Creates a tag in the resolved address book scope for organizing saved destinations.\n */\n async createTag(\n input: CreateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = v.parse(CreateAddressBookTagInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? v.parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Updates a tag's name and optional color token.\n */\n async updateTag(\n input: UpdateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = v.parse(UpdateAddressBookTagInputSchema, input);\n const response = await this.#client.updateAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? v.parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Deletes a tag and detaches it from any address-book entries.\n */\n async deleteTag(\n input: DeleteAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = v.parse(DeleteAddressBookTagInputSchema, input);\n await this.#client.deleteAddressBookTag(request, toConnectCallOptions(options));\n }\n\n /**\n * Returns recent transfer counterparties, including unsaved destinations, with direction, kind, use count, and first/last seen timestamps.\n */\n async listTransferCounterparties(\n input: ListTransferCounterpartiesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ counterparties: TransferCounterparties; truncated: boolean }> {\n const request = v.parse(ListTransferCounterpartiesInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferCounterparties(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n counterparties: v.parse(TransferCounterpartiesSchema, response.counterparties),\n truncated: response.truncated,\n };\n }\n\n /**\n * Returns saved and whitelisted destinations available for transfer flows in the resolved address book scope.\n */\n async listTransferDestinations(\n input: ListTransferDestinationsInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ destinations: TransferDestinations; nextPageToken: string }> {\n const request = v.parse(ListTransferDestinationsInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferDestinations(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n destinations: v.parse(TransferDestinationsSchema, response.destinations),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns internal-transfer whitelist entries for the resolved scope, including target account metadata and resolution status.\n */\n async listInternalTransferWhitelistEntries(\n input: ListInternalTransferWhitelistEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: InternalTransferWhitelistEntries; nextPageToken: string }> {\n const request = v.parse(\n ListInternalTransferWhitelistEntriesInputSchema,\n this.resolveInput(input),\n );\n const response = await this.#client.listInternalTransferWhitelistEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: v.parse(InternalTransferWhitelistEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns external and internal withdrawal whitelist requirements plus active mirrored external whitelist entries for the resolved scope.\n */\n async getWithdrawWhitelistView(\n input: SubaccountScopedInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<WithdrawWhitelistView | null> {\n const request = v.parse(SubaccountScopedInputSchema, this.resolveInput(input));\n const response = await this.#client.getWithdrawWhitelistView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.view ? v.parse(WithdrawWhitelistViewSchema, response.view) : null;\n }\n\n /**\n * Fetches the combined address-book view used by dashboards: books, saved entries, recent destinations, tags, and withdrawal whitelist status.\n */\n async getView(\n input: GetAddressBookViewInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<AddressBookView> {\n const request = v.parse(GetAddressBookViewInputSchema, this.resolveInput(input));\n const response = await this.#client.getAddressBookView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return v.parse(AddressBookViewSchema, response);\n }\n\n /**\n * Subscribes to scoped address-book view invalidation signals for a root account.\n *\n * Use `scope` and `invalidatedAt` for diagnostics and ordering, then refetch `getView` for the canonical aggregate (entries, tags, recent destinations, whitelist). Do not patch individual rows from these events.\n */\n subscribeViewInvalidations(input: SubscribeViewInvalidationsInput): () => void {\n const channel = `private:auth:address-books:${input.rootAccountPublicId}:proto`;\n\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.AddressBookViewInvalidatedSchema,\n onPublication: (data) => {\n input.onEvent(v.parse(AddressBookViewInvalidatedSchema, data));\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n\n private resolveInput<TInput extends AccountScopedInput>(input: TInput): TInput {\n return resolveAccountScopedInput(input, this.#resolver);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"address-book.js","names":["#client","Proto.AddressBookService","#realtime","#resolver","Proto.AddressBookViewInvalidatedSchema","AddressBookViewInvalidatedSchema"],"sources":["../../../src/services/address-book/address-book.ts"],"sourcesContent":["import { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as Proto from \"../../gen/auth/v1/address_book_pb.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport {\n toConnectCallOptions,\n type PolyesterMutationOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { AccountScopedInput } from \"../../shared/account-scope.js\";\nimport { parse } from \"../../shared/validation.js\";\nimport {\n AddressBookEntriesSchema,\n AddressBookEntrySchema,\n AddressBookSchema,\n AddressBookTagSchema,\n AddressBookViewSchema,\n AddressBookViewInvalidatedSchema,\n CopyAddressBookEntryInputSchema,\n CreateAddressBookEntryInputSchema,\n CreateAddressBookTagInputSchema,\n DeleteAddressBookEntryInputSchema,\n DeleteAddressBookTagInputSchema,\n GetAddressBookViewInputSchema,\n InternalTransferWhitelistEntriesSchema,\n ListAddressBookEntriesInputSchema,\n ListInternalTransferWhitelistEntriesInputSchema,\n ListTransferCounterpartiesInputSchema,\n ListTransferDestinationsInputSchema,\n SubaccountScopedInputSchema,\n TransferCounterpartiesSchema,\n TransferDestinationsSchema,\n UpdateAddressBookEntryInputSchema,\n UpdateAddressBookTagInputSchema,\n WithdrawWhitelistViewSchema,\n type AddressBook,\n type AddressBookEntries,\n type AddressBookEntry,\n type AddressBookTag,\n type AddressBookView,\n type AddressBookViewInvalidated,\n type CopyAddressBookEntryInput,\n type CreateAddressBookEntryInput,\n type CreateAddressBookTagInput,\n type DeleteAddressBookEntryInput,\n type DeleteAddressBookTagInput,\n type GetAddressBookViewInput,\n type InternalTransferWhitelistEntries,\n type ListAddressBookEntriesInput,\n type ListInternalTransferWhitelistEntriesInput,\n type ListTransferCounterpartiesInput,\n type ListTransferDestinationsInput,\n type SubaccountScopedInput,\n type TransferCounterparties,\n type TransferDestinations,\n type UpdateAddressBookEntryInput,\n type UpdateAddressBookTagInput,\n type WithdrawWhitelistView,\n} from \"./address-book.schemas.js\";\n\ninterface SubscribeViewInvalidationsInput extends BaseSubscribeInput<AddressBookViewInvalidated> {\n rootAccountPublicId: string;\n}\n\n/**\n * Manages saved transfer destinations, tags, whitelist views, and recent counterparties for root or subaccount-scoped address books.\n */\nexport class AddressBookService {\n #client: Client<typeof Proto.AddressBookService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, resolver?: SubaccountResolver) {\n this.#client = createClient(Proto.AddressBookService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n }\n\n /**\n * Returns the root and subaccount address books visible to the caller, including caller role and display metadata.\n */\n async listBooks(options?: PolyesterRequestOptions): Promise<AddressBook[]> {\n const response = await this.#client.listAddressBooks({}, toConnectCallOptions(options));\n return response.books.map((book) => parse(AddressBookSchema, book));\n }\n\n /**\n * Returns saved address-book entries for the resolved subaccount scope, optionally filtered by external-chain or internal-account destination kind.\n */\n async listEntries(\n input: ListAddressBookEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: AddressBookEntries; nextPageToken: string }> {\n const request = parse(ListAddressBookEntriesInputSchema, this.resolveInput(input));\n const response = await this.#client.listAddressBookEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: parse(AddressBookEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Creates a saved external withdrawal or internal transfer destination in the resolved address book, optionally attaching existing tags and creating new tags in the same request.\n */\n async createEntry(\n input: CreateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = parse(CreateAddressBookEntryInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Updates selected saved-destination metadata using optimistic concurrency.\n */\n async updateEntry(\n input: UpdateAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = parse(UpdateAddressBookEntryInputSchema, input);\n const response = await this.#client.updateAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Deletes one saved destination from the selected address book.\n */\n async deleteEntry(\n input: DeleteAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = parse(DeleteAddressBookEntryInputSchema, input);\n await this.#client.deleteAddressBookEntry(request, toConnectCallOptions(options));\n }\n\n /**\n * Copies a saved destination into another visible root or subaccount address book.\n */\n async copyEntry(\n input: CopyAddressBookEntryInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookEntry | null> {\n const request = parse(CopyAddressBookEntryInputSchema, input);\n const response = await this.#client.copyAddressBookEntry(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.entry ? parse(AddressBookEntrySchema, response.entry) : null;\n }\n\n /**\n * Creates a tag in the resolved address book scope for organizing saved destinations.\n */\n async createTag(\n input: CreateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = parse(CreateAddressBookTagInputSchema, this.resolveInput(input));\n const response = await this.#client.createAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Updates a tag's name and optional color token.\n */\n async updateTag(\n input: UpdateAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<AddressBookTag | null> {\n const request = parse(UpdateAddressBookTagInputSchema, input);\n const response = await this.#client.updateAddressBookTag(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.tag ? parse(AddressBookTagSchema, response.tag) : null;\n }\n\n /**\n * Deletes a tag and detaches it from any address-book entries.\n */\n async deleteTag(\n input: DeleteAddressBookTagInput,\n options?: PolyesterMutationOptions,\n ): Promise<void> {\n const request = parse(DeleteAddressBookTagInputSchema, input);\n await this.#client.deleteAddressBookTag(request, toConnectCallOptions(options));\n }\n\n /**\n * Returns recent transfer counterparties, including unsaved destinations, with direction, kind, use count, and first/last seen timestamps.\n */\n async listTransferCounterparties(\n input: ListTransferCounterpartiesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ counterparties: TransferCounterparties; truncated: boolean }> {\n const request = parse(ListTransferCounterpartiesInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferCounterparties(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n counterparties: parse(TransferCounterpartiesSchema, response.counterparties),\n truncated: response.truncated,\n };\n }\n\n /**\n * Returns saved and whitelisted destinations available for transfer flows in the resolved address book scope.\n */\n async listTransferDestinations(\n input: ListTransferDestinationsInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ destinations: TransferDestinations; nextPageToken: string }> {\n const request = parse(ListTransferDestinationsInputSchema, this.resolveInput(input));\n const response = await this.#client.listTransferDestinations(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n destinations: parse(TransferDestinationsSchema, response.destinations),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns internal-transfer whitelist entries for the resolved scope, including target account metadata and resolution status.\n */\n async listInternalTransferWhitelistEntries(\n input: ListInternalTransferWhitelistEntriesInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ entries: InternalTransferWhitelistEntries; nextPageToken: string }> {\n const request = parse(\n ListInternalTransferWhitelistEntriesInputSchema,\n this.resolveInput(input),\n );\n const response = await this.#client.listInternalTransferWhitelistEntries(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return {\n entries: parse(InternalTransferWhitelistEntriesSchema, response.entries),\n nextPageToken: response.nextPageToken,\n };\n }\n\n /**\n * Returns external and internal withdrawal whitelist requirements plus active mirrored external whitelist entries for the resolved scope.\n */\n async getWithdrawWhitelistView(\n input: SubaccountScopedInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<WithdrawWhitelistView | null> {\n const request = parse(SubaccountScopedInputSchema, this.resolveInput(input));\n const response = await this.#client.getWithdrawWhitelistView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return response.view ? parse(WithdrawWhitelistViewSchema, response.view) : null;\n }\n\n /**\n * Fetches the combined address-book view used by dashboards: books, saved entries, recent destinations, tags, and withdrawal whitelist status.\n */\n async getView(\n input: GetAddressBookViewInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<AddressBookView> {\n const request = parse(GetAddressBookViewInputSchema, this.resolveInput(input));\n const response = await this.#client.getAddressBookView(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(AddressBookViewSchema, response);\n }\n\n /**\n * Subscribes to scoped address-book view invalidation signals for a root account.\n *\n * Use `scope` and `invalidatedAt` for diagnostics and ordering, then refetch `getView` for the canonical aggregate (entries, tags, recent destinations, whitelist). Do not patch individual rows from these events.\n */\n subscribeViewInvalidations(input: SubscribeViewInvalidationsInput): () => void {\n const channel = `private:auth:address-books:${input.rootAccountPublicId}:proto`;\n\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.AddressBookViewInvalidatedSchema,\n onPublication: (data) => {\n input.onEvent(parse(AddressBookViewInvalidatedSchema, data));\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n\n private resolveInput<TInput extends AccountScopedInput>(input: TInput): TInput {\n return resolveAccountScopedInput(input, this.#resolver);\n }\n}\n"],"mappings":"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"}