@polyester/sdk 0.9.1 → 0.11.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 (170) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/catalogs/readers.d.ts.map +1 -1
  3. package/dist/catalogs/readers.js +22 -0
  4. package/dist/catalogs/readers.js.map +1 -1
  5. package/dist/core-client.d.ts.map +1 -1
  6. package/dist/core-client.js +49 -15
  7. package/dist/core-client.js.map +1 -1
  8. package/dist/environment.d.ts.map +1 -1
  9. package/dist/environment.js +3 -2
  10. package/dist/environment.js.map +1 -1
  11. package/dist/gen/auth/v1/api_keys_pb.d.ts +8 -7
  12. package/dist/gen/auth/v1/api_keys_pb.d.ts.map +1 -1
  13. package/dist/gen/auth/v1/api_keys_pb.js.map +1 -1
  14. package/dist/gen/auth/v1/policies_pb.d.ts +8 -4
  15. package/dist/gen/auth/v1/policies_pb.d.ts.map +1 -1
  16. package/dist/gen/auth/v1/policies_pb.js.map +1 -1
  17. package/dist/gen/auth/v1/subaccounts_pb.d.ts +382 -18
  18. package/dist/gen/auth/v1/subaccounts_pb.d.ts.map +1 -1
  19. package/dist/gen/auth/v1/subaccounts_pb.js +253 -38
  20. package/dist/gen/auth/v1/subaccounts_pb.js.map +1 -1
  21. package/dist/gen/orders/v1/orders_pb.d.ts +2 -2
  22. package/dist/gen/orders/v1/orders_pb.js.map +1 -1
  23. package/dist/gen/orders/v1/orders_read_pb.d.ts +8 -0
  24. package/dist/gen/orders/v1/orders_read_pb.d.ts.map +1 -1
  25. package/dist/gen/orders/v1/orders_read_pb.js +1 -1
  26. package/dist/gen/orders/v1/orders_read_pb.js.map +1 -1
  27. package/dist/gen/ratelimit/v1/ratelimit_pb.d.ts +2 -2
  28. package/dist/gen/ratelimit/v1/ratelimit_pb.js +1 -1
  29. package/dist/gen/ratelimit/v1/ratelimit_pb.js.map +1 -1
  30. package/dist/gen/triggers/v1/triggers_pb.d.ts +4 -4
  31. package/dist/gen/triggers/v1/triggers_pb.js.map +1 -1
  32. package/dist/index.d.ts +2 -2
  33. package/dist/realtime/client.d.ts.map +1 -1
  34. package/dist/realtime/client.js +13 -5
  35. package/dist/realtime/client.js.map +1 -1
  36. package/dist/realtime/ready-gated-subscription.js +68 -0
  37. package/dist/realtime/ready-gated-subscription.js.map +1 -0
  38. package/dist/realtime/snapshot-then-stream.js +19 -10
  39. package/dist/realtime/snapshot-then-stream.js.map +1 -1
  40. package/dist/server-client.d.ts +3 -1
  41. package/dist/server-client.d.ts.map +1 -1
  42. package/dist/server-client.js +9 -4
  43. package/dist/server-client.js.map +1 -1
  44. package/dist/services/auth/session.d.ts.map +1 -1
  45. package/dist/services/auth/session.js +4 -1
  46. package/dist/services/auth/session.js.map +1 -1
  47. package/dist/services/auth/token-storage.js +2 -2
  48. package/dist/services/auth/token-storage.js.map +1 -1
  49. package/dist/services/balances/balances.js +5 -8
  50. package/dist/services/balances/balances.js.map +1 -1
  51. package/dist/services/candles/candles.js +9 -12
  52. package/dist/services/candles/candles.js.map +1 -1
  53. package/dist/services/heatmap/heatmap.js +5 -8
  54. package/dist/services/heatmap/heatmap.js.map +1 -1
  55. package/dist/services/lifecycle/lifecycle.schemas.js +1 -1
  56. package/dist/services/market-data/market-data.d.ts.map +1 -1
  57. package/dist/services/market-data/market-data.js +5 -8
  58. package/dist/services/market-data/market-data.js.map +1 -1
  59. package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
  60. package/dist/services/market-data/market-data.schemas.js +3 -2
  61. package/dist/services/market-data/market-data.schemas.js.map +1 -1
  62. package/dist/services/market-overview/market-overview.d.ts.map +1 -1
  63. package/dist/services/market-overview/market-overview.js +7 -13
  64. package/dist/services/market-overview/market-overview.js.map +1 -1
  65. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  66. package/dist/services/orderbook/orderbook.js +18 -11
  67. package/dist/services/orderbook/orderbook.js.map +1 -1
  68. package/dist/services/orders/orders-batch.schemas.d.ts +6 -22
  69. package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
  70. package/dist/services/orders/orders-batch.schemas.js +23 -20
  71. package/dist/services/orders/orders-batch.schemas.js.map +1 -1
  72. package/dist/services/orders/orders-identifiers.schemas.js +6 -1
  73. package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
  74. package/dist/services/orders/orders-input.schemas.d.ts +11 -43
  75. package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
  76. package/dist/services/orders/orders-input.schemas.js +10 -11
  77. package/dist/services/orders/orders-input.schemas.js.map +1 -1
  78. package/dist/services/orders/orders-modify.schemas.d.ts +1 -25
  79. package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
  80. package/dist/services/orders/orders-modify.schemas.js +2 -4
  81. package/dist/services/orders/orders-modify.schemas.js.map +1 -1
  82. package/dist/services/orders/orders-output.schemas.d.ts +165 -27
  83. package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
  84. package/dist/services/orders/orders-output.schemas.js +1 -1
  85. package/dist/services/orders/orders-output.schemas.js.map +1 -1
  86. package/dist/services/orders/orders-risk.schemas.d.ts +1 -20
  87. package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
  88. package/dist/services/orders/orders-risk.schemas.js +52 -15
  89. package/dist/services/orders/orders-risk.schemas.js.map +1 -1
  90. package/dist/services/orders/orders.codecs.js +12 -1
  91. package/dist/services/orders/orders.codecs.js.map +1 -1
  92. package/dist/services/orders/orders.d.ts.map +1 -1
  93. package/dist/services/orders/orders.js +6 -9
  94. package/dist/services/orders/orders.js.map +1 -1
  95. package/dist/services/rate-limits/rate-limits.schemas.d.ts +4 -4
  96. package/dist/services/rate-limits/rate-limits.schemas.js +1 -1
  97. package/dist/services/rate-limits/rate-limits.schemas.js.map +1 -1
  98. package/dist/services/subaccounts/index.d.ts +2 -2
  99. package/dist/services/subaccounts/subaccounts.codecs.js +29 -1
  100. package/dist/services/subaccounts/subaccounts.codecs.js.map +1 -1
  101. package/dist/services/subaccounts/subaccounts.d.ts +9 -1
  102. package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
  103. package/dist/services/subaccounts/subaccounts.js +19 -2
  104. package/dist/services/subaccounts/subaccounts.js.map +1 -1
  105. package/dist/services/subaccounts/subaccounts.schemas.d.ts +46 -6
  106. package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
  107. package/dist/services/subaccounts/subaccounts.schemas.js +28 -3
  108. package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
  109. package/dist/services/subaccounts/subaccounts.types.d.ts +2 -2
  110. package/dist/services/trades/trades.d.ts +1 -1
  111. package/dist/services/trades/trades.js +6 -9
  112. package/dist/services/trades/trades.js.map +1 -1
  113. package/dist/services/trades/trades.schemas.d.ts +3 -0
  114. package/dist/services/trades/trades.schemas.d.ts.map +1 -1
  115. package/dist/services/trades/trades.schemas.js +2 -1
  116. package/dist/services/trades/trades.schemas.js.map +1 -1
  117. package/dist/services/trailing-oneof-inputs.js +3 -3
  118. package/dist/services/trailing-oneof-inputs.js.map +1 -1
  119. package/dist/services/transfers/index.d.ts +2 -2
  120. package/dist/services/transfers/transfers.d.ts +1 -2
  121. package/dist/services/transfers/transfers.d.ts.map +1 -1
  122. package/dist/services/transfers/transfers.js +8 -13
  123. package/dist/services/transfers/transfers.js.map +1 -1
  124. package/dist/services/transfers/transfers.schemas.d.ts +5 -5
  125. package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
  126. package/dist/services/transfers/transfers.schemas.js +31 -33
  127. package/dist/services/transfers/transfers.schemas.js.map +1 -1
  128. package/dist/services/triggers/trigger-input.schemas.d.ts +22 -9
  129. package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
  130. package/dist/services/triggers/trigger-input.schemas.js +20 -43
  131. package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
  132. package/dist/services/triggers/triggers-output.schemas.d.ts +14 -14
  133. package/dist/services/triggers/triggers-output.schemas.js +5 -5
  134. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  135. package/dist/services/triggers/triggers.d.ts.map +1 -1
  136. package/dist/services/triggers/triggers.js +10 -23
  137. package/dist/services/triggers/triggers.js.map +1 -1
  138. package/dist/services/zipper/zipper.d.ts.map +1 -1
  139. package/dist/services/zipper/zipper.js +15 -18
  140. package/dist/services/zipper/zipper.js.map +1 -1
  141. package/dist/shared/connect-error-mapping.d.ts.map +1 -1
  142. package/dist/shared/connect-error-mapping.js +9 -2
  143. package/dist/shared/connect-error-mapping.js.map +1 -1
  144. package/dist/shared/decimal-surface.d.ts.map +1 -1
  145. package/dist/shared/decimal-surface.js +40 -17
  146. package/dist/shared/decimal-surface.js.map +1 -1
  147. package/dist/shared/transports.d.ts.map +1 -1
  148. package/dist/shared/transports.js +33 -11
  149. package/dist/shared/transports.js.map +1 -1
  150. package/dist/utils/base58-id.js +1 -2
  151. package/dist/utils/base58-id.js.map +1 -1
  152. package/dist/utils/errors.d.ts.map +1 -1
  153. package/dist/utils/errors.js +4 -3
  154. package/dist/utils/errors.js.map +1 -1
  155. package/dist/utils/event-emitter.d.ts.map +1 -1
  156. package/dist/utils/event-emitter.js +6 -3
  157. package/dist/utils/event-emitter.js.map +1 -1
  158. package/dist/utils/jwt.d.ts.map +1 -1
  159. package/dist/utils/jwt.js +2 -2
  160. package/dist/utils/jwt.js.map +1 -1
  161. package/dist/utils/numbers.js +20 -3
  162. package/dist/utils/numbers.js.map +1 -1
  163. package/dist/utils/timestamp.js +27 -16
  164. package/dist/utils/timestamp.js.map +1 -1
  165. package/dist/utils/u128.js +6 -18
  166. package/dist/utils/u128.js.map +1 -1
  167. package/dist/wired-services.d.ts.map +1 -1
  168. package/dist/wired-services.js +2 -1
  169. package/dist/wired-services.js.map +1 -1
  170. package/package.json +1 -1
@@ -67,6 +67,7 @@ declare const GetUserTradesInputSchema: v.SchemaWithPipe<readonly [v.StrictObjec
67
67
  readonly endTsNs: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>, v.TransformAction<string | undefined, bigint | undefined>]>;
68
68
  readonly limit: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
69
69
  readonly pageToken: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>;
70
+ readonly afterMatchId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>, v.TransformAction<string | undefined, bigint | undefined>]>;
70
71
  readonly account: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<["active", "main"], undefined>, v.StrictObjectSchema<{
71
72
  readonly subaccountId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
72
73
  }, undefined>], undefined>, undefined>;
@@ -77,6 +78,7 @@ declare const GetUserTradesInputSchema: v.SchemaWithPipe<readonly [v.StrictObjec
77
78
  endTsNs?: bigint | undefined;
78
79
  limit?: number | undefined;
79
80
  pageToken?: string | undefined;
81
+ afterMatchId?: bigint | undefined;
80
82
  account?: "active" | "main" | {
81
83
  subaccountId: string;
82
84
  } | undefined;
@@ -88,6 +90,7 @@ declare const GetUserTradesInputSchema: v.SchemaWithPipe<readonly [v.StrictObjec
88
90
  endTsNs?: bigint | undefined;
89
91
  limit?: number | undefined;
90
92
  pageToken?: string | undefined;
93
+ afterMatchId?: bigint | undefined;
91
94
  }>]>;
92
95
  /** Filters accepted by {@link TradesService.list}. */
93
96
  type GetUserTradesInput = v.InferInput<typeof GetUserTradesInputSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"trades.schemas.d.ts","names":[],"sources":["../../../src/services/trades/trades.schemas.ts"],"mappings":";;;;;iBAqBgB,sBAAsB,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwD3C,QAAQ,EAAE,YAAY,kBAAkB;;cAGvC,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2BzB,qBAAqB,EAAE,kBAAkB"}
1
+ {"version":3,"file":"trades.schemas.d.ts","names":[],"sources":["../../../src/services/trades/trades.schemas.ts"],"mappings":";;;;;iBAqBgB,sBAAsB,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwD3C,QAAQ,EAAE,YAAY,kBAAkB;;cAGvC,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BzB,qBAAqB,EAAE,kBAAkB"}
@@ -61,7 +61,8 @@ const GetUserTradesInputSchema = v.pipe(v.strictObject({
61
61
  startTsNs: optionalUint64DecimalFilterSchema("startTsNs"),
62
62
  endTsNs: optionalUint64DecimalFilterSchema("endTsNs"),
63
63
  limit: v.optional(v.number()),
64
- pageToken: v.optional(v.pipe(v.string(), v.trim()))
64
+ pageToken: v.optional(v.pipe(v.string(), v.trim())),
65
+ afterMatchId: optionalUint64DecimalFilterSchema("afterMatchId")
65
66
  }), v.transform(({ account, ...input }) => ({
66
67
  ...input,
67
68
  subaccountId: accountScopeToSubaccountId(account)
@@ -1 +1 @@
1
- {"version":3,"file":"trades.schemas.js","names":[],"sources":["../../../src/services/trades/trades.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { tsNsToISO, tsNsToMs } from \"../../utils/time.js\";\nimport { SideSchema } from \"../shared.js\";\nimport { FeeAssetCodec, OrderSideCodec } from \"../orders/orders.codecs.js\";\nimport { formatId } from \"../../utils/base58-id.js\";\nimport { optionalUint64DecimalFilterSchema } from \"../../shared/schemas.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { TradeSideCodec } from \"./trades.codecs.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { E18_SCALE, scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { fromU128 } from \"../../utils/u128.js\";\n\nconst U128Schema = v.object({\n hi: v.bigint(),\n lo: v.bigint(),\n});\n\n/** Parses a generated user-trade fill into the SDK's JSON-safe public shape. */\nexport function createUserTradeSchema(scales: SdkScales) {\n return v.pipe(\n v.object({\n orderId: v.bigint(),\n symbolId: v.number(),\n side: v.number(),\n isMaker: v.boolean(),\n feeAsset: v.number(),\n qtyScaled: v.bigint(),\n priceTicks: v.bigint(),\n feeAmountE18: v.optional(U128Schema),\n referralShareAmountE18: v.optional(U128Schema),\n feeIsRebate: v.boolean(),\n tsNs: v.bigint(),\n matchId: v.bigint(),\n }),\n v.transform((t) => {\n const feeAsset = requiredEnumLabel(\n FeeAssetCodec.protoToOutput,\n t.feeAsset,\n \"UserTradeSchema\",\n \"fee asset\",\n );\n return {\n orderId: formatId(t.orderId),\n symbolId: t.symbolId,\n sideLabel: requiredEnumLabel(\n OrderSideCodec.protoToOutput,\n t.side,\n \"UserTradeSchema\",\n \"side\",\n ),\n liquidityLabel: t.isMaker ? (\"maker\" as const) : (\"taker\" as const),\n feeAsset,\n qty: scaledToDecimalOutput(t.qtyScaled, scales.baseQty(t.symbolId)),\n price: scaledToDecimalOutput(t.priceTicks, scales.price()),\n fee: scaledToDecimalOutput(fromU128(t.feeAmountE18), E18_SCALE),\n ...(t.referralShareAmountE18 === undefined\n ? {}\n : {\n referralShare: scaledToDecimalOutput(\n fromU128(t.referralShareAmountE18),\n E18_SCALE,\n ),\n }),\n feeIsRebate: t.feeIsRebate,\n tsNs: t.tsNs.toString(),\n tsIso: tsNsToISO(t.tsNs),\n tsMs: tsNsToMs(t.tsNs),\n matchId: t.matchId.toString(),\n };\n }),\n );\n}\n\n/** A JSON-safe authenticated trade fill returned by the SDK. */\nexport type Trade = v.InferOutput<ReturnType<typeof createUserTradeSchema>>;\n\n/** Validates filters accepted by {@link TradesService.list}. */\nexport const GetUserTradesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n symbolId: v.pipe(\n v.optional(v.pipe(v.string(), v.trim())),\n v.transform((v) => {\n if (!v) return undefined;\n const sid = Number(v);\n return Number.isFinite(sid) && sid > 0 ? sid : undefined;\n }),\n ),\n side: v.pipe(\n v.optional(SideSchema),\n v.transform((v) => (v ? TradeSideCodec.inputToProto[v] : undefined)),\n ),\n startTsNs: optionalUint64DecimalFilterSchema(\"startTsNs\"),\n endTsNs: optionalUint64DecimalFilterSchema(\"endTsNs\"),\n limit: v.optional(v.number()),\n pageToken: v.optional(v.pipe(v.string(), v.trim())),\n }),\n v.transform(({ account, ...input }) => ({\n ...input,\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\n/** Filters accepted by {@link TradesService.list}. */\nexport type GetUserTradesInput = v.InferInput<typeof GetUserTradesInputSchema>;\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,aAAa,EAAE,OAAO;CACxB,IAAI,EAAE,OAAO;CACb,IAAI,EAAE,OAAO;AACjB,CAAC;;AAGD,SAAgB,sBAAsB,QAAmB;CACrD,OAAO,EAAE,KACL,EAAE,OAAO;EACL,SAAS,EAAE,OAAO;EAClB,UAAU,EAAE,OAAO;EACnB,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,QAAQ;EACnB,UAAU,EAAE,OAAO;EACnB,WAAW,EAAE,OAAO;EACpB,YAAY,EAAE,OAAO;EACrB,cAAc,EAAE,SAAS,UAAU;EACnC,wBAAwB,EAAE,SAAS,UAAU;EAC7C,aAAa,EAAE,QAAQ;EACvB,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,OAAO;CACtB,CAAC,GACD,EAAE,WAAW,MAAM;EACf,MAAM,WAAW,kBACb,cAAc,eACd,EAAE,UACF,mBACA,WACJ;EACA,OAAO;GACH,SAAS,SAAS,EAAE,OAAO;GAC3B,UAAU,EAAE;GACZ,WAAW,kBACP,eAAe,eACf,EAAE,MACF,mBACA,MACJ;GACA,gBAAgB,EAAE,UAAW,UAAqB;GAClD;GACA,KAAK,sBAAsB,EAAE,WAAW,OAAO,QAAQ,EAAE,QAAQ,CAAC;GAClE,OAAO,sBAAsB,EAAE,YAAY,OAAO,MAAM,CAAC;GACzD,KAAK,sBAAsB,SAAS,EAAE,YAAY,GAAA,EAAY;GAC9D,GAAI,EAAE,2BAA2B,KAAA,IAC3B,CAAC,IACD,EACI,eAAe,sBACX,SAAS,EAAE,sBAAsB,GAAA,EAErC,EACJ;GACN,aAAa,EAAE;GACf,MAAM,EAAE,KAAK,SAAS;GACtB,OAAO,UAAU,EAAE,IAAI;GACvB,MAAM,SAAS,EAAE,IAAI;GACrB,SAAS,EAAE,QAAQ,SAAS;EAChC;CACJ,CAAC,CACL;AACJ;;AAMA,MAAa,2BAA2B,EAAE,KACtC,EAAE,aAAa;CACX,GAAG;CACH,UAAU,EAAE,KACR,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC,GACvC,EAAE,WAAW,MAAM;EACf,IAAI,CAAC,GAAG,OAAO,KAAA;EACf,MAAM,MAAM,OAAO,CAAC;EACpB,OAAO,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,MAAM,KAAA;CACnD,CAAC,CACL;CACA,MAAM,EAAE,KACJ,EAAE,SAAS,UAAU,GACrB,EAAE,WAAW,MAAO,IAAI,eAAe,aAAa,KAAK,KAAA,CAAU,CACvE;CACA,WAAW,kCAAkC,WAAW;CACxD,SAAS,kCAAkC,SAAS;CACpD,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;CAC5B,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC,GACD,EAAE,WAAW,EAAE,SAAS,GAAG,aAAa;CACpC,GAAG;CACH,cAAc,2BAA2B,OAAO;AACpD,EAAE,CACN"}
1
+ {"version":3,"file":"trades.schemas.js","names":[],"sources":["../../../src/services/trades/trades.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { tsNsToISO, tsNsToMs } from \"../../utils/time.js\";\nimport { SideSchema } from \"../shared.js\";\nimport { FeeAssetCodec, OrderSideCodec } from \"../orders/orders.codecs.js\";\nimport { formatId } from \"../../utils/base58-id.js\";\nimport { optionalUint64DecimalFilterSchema } from \"../../shared/schemas.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { TradeSideCodec } from \"./trades.codecs.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { E18_SCALE, scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { fromU128 } from \"../../utils/u128.js\";\n\nconst U128Schema = v.object({\n hi: v.bigint(),\n lo: v.bigint(),\n});\n\n/** Parses a generated user-trade fill into the SDK's JSON-safe public shape. */\nexport function createUserTradeSchema(scales: SdkScales) {\n return v.pipe(\n v.object({\n orderId: v.bigint(),\n symbolId: v.number(),\n side: v.number(),\n isMaker: v.boolean(),\n feeAsset: v.number(),\n qtyScaled: v.bigint(),\n priceTicks: v.bigint(),\n feeAmountE18: v.optional(U128Schema),\n referralShareAmountE18: v.optional(U128Schema),\n feeIsRebate: v.boolean(),\n tsNs: v.bigint(),\n matchId: v.bigint(),\n }),\n v.transform((t) => {\n const feeAsset = requiredEnumLabel(\n FeeAssetCodec.protoToOutput,\n t.feeAsset,\n \"UserTradeSchema\",\n \"fee asset\",\n );\n return {\n orderId: formatId(t.orderId),\n symbolId: t.symbolId,\n sideLabel: requiredEnumLabel(\n OrderSideCodec.protoToOutput,\n t.side,\n \"UserTradeSchema\",\n \"side\",\n ),\n liquidityLabel: t.isMaker ? (\"maker\" as const) : (\"taker\" as const),\n feeAsset,\n qty: scaledToDecimalOutput(t.qtyScaled, scales.baseQty(t.symbolId)),\n price: scaledToDecimalOutput(t.priceTicks, scales.price()),\n fee: scaledToDecimalOutput(fromU128(t.feeAmountE18), E18_SCALE),\n ...(t.referralShareAmountE18 === undefined\n ? {}\n : {\n referralShare: scaledToDecimalOutput(\n fromU128(t.referralShareAmountE18),\n E18_SCALE,\n ),\n }),\n feeIsRebate: t.feeIsRebate,\n tsNs: t.tsNs.toString(),\n tsIso: tsNsToISO(t.tsNs),\n tsMs: tsNsToMs(t.tsNs),\n matchId: t.matchId.toString(),\n };\n }),\n );\n}\n\n/** A JSON-safe authenticated trade fill returned by the SDK. */\nexport type Trade = v.InferOutput<ReturnType<typeof createUserTradeSchema>>;\n\n/** Validates filters accepted by {@link TradesService.list}. */\nexport const GetUserTradesInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n symbolId: v.pipe(\n v.optional(v.pipe(v.string(), v.trim())),\n v.transform((v) => {\n if (!v) return undefined;\n const sid = Number(v);\n return Number.isFinite(sid) && sid > 0 ? sid : undefined;\n }),\n ),\n side: v.pipe(\n v.optional(SideSchema),\n v.transform((v) => (v ? TradeSideCodec.inputToProto[v] : undefined)),\n ),\n startTsNs: optionalUint64DecimalFilterSchema(\"startTsNs\"),\n endTsNs: optionalUint64DecimalFilterSchema(\"endTsNs\"),\n limit: v.optional(v.number()),\n pageToken: v.optional(v.pipe(v.string(), v.trim())),\n afterMatchId: optionalUint64DecimalFilterSchema(\"afterMatchId\"),\n }),\n v.transform(({ account, ...input }) => ({\n ...input,\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\n/** Filters accepted by {@link TradesService.list}. */\nexport type GetUserTradesInput = v.InferInput<typeof GetUserTradesInputSchema>;\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,aAAa,EAAE,OAAO;CACxB,IAAI,EAAE,OAAO;CACb,IAAI,EAAE,OAAO;AACjB,CAAC;;AAGD,SAAgB,sBAAsB,QAAmB;CACrD,OAAO,EAAE,KACL,EAAE,OAAO;EACL,SAAS,EAAE,OAAO;EAClB,UAAU,EAAE,OAAO;EACnB,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,QAAQ;EACnB,UAAU,EAAE,OAAO;EACnB,WAAW,EAAE,OAAO;EACpB,YAAY,EAAE,OAAO;EACrB,cAAc,EAAE,SAAS,UAAU;EACnC,wBAAwB,EAAE,SAAS,UAAU;EAC7C,aAAa,EAAE,QAAQ;EACvB,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,OAAO;CACtB,CAAC,GACD,EAAE,WAAW,MAAM;EACf,MAAM,WAAW,kBACb,cAAc,eACd,EAAE,UACF,mBACA,WACJ;EACA,OAAO;GACH,SAAS,SAAS,EAAE,OAAO;GAC3B,UAAU,EAAE;GACZ,WAAW,kBACP,eAAe,eACf,EAAE,MACF,mBACA,MACJ;GACA,gBAAgB,EAAE,UAAW,UAAqB;GAClD;GACA,KAAK,sBAAsB,EAAE,WAAW,OAAO,QAAQ,EAAE,QAAQ,CAAC;GAClE,OAAO,sBAAsB,EAAE,YAAY,OAAO,MAAM,CAAC;GACzD,KAAK,sBAAsB,SAAS,EAAE,YAAY,GAAA,EAAY;GAC9D,GAAI,EAAE,2BAA2B,KAAA,IAC3B,CAAC,IACD,EACI,eAAe,sBACX,SAAS,EAAE,sBAAsB,GAAA,EAErC,EACJ;GACN,aAAa,EAAE;GACf,MAAM,EAAE,KAAK,SAAS;GACtB,OAAO,UAAU,EAAE,IAAI;GACvB,MAAM,SAAS,EAAE,IAAI;GACrB,SAAS,EAAE,QAAQ,SAAS;EAChC;CACJ,CAAC,CACL;AACJ;;AAMA,MAAa,2BAA2B,EAAE,KACtC,EAAE,aAAa;CACX,GAAG;CACH,UAAU,EAAE,KACR,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC,GACvC,EAAE,WAAW,MAAM;EACf,IAAI,CAAC,GAAG,OAAO,KAAA;EACf,MAAM,MAAM,OAAO,CAAC;EACpB,OAAO,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,MAAM,KAAA;CACnD,CAAC,CACL;CACA,MAAM,EAAE,KACJ,EAAE,SAAS,UAAU,GACrB,EAAE,WAAW,MAAO,IAAI,eAAe,aAAa,KAAK,KAAA,CAAU,CACvE;CACA,WAAW,kCAAkC,WAAW;CACxD,SAAS,kCAAkC,SAAS;CACpD,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;CAC5B,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;CAClD,cAAc,kCAAkC,cAAc;AAClE,CAAC,GACD,EAAE,WAAW,EAAE,SAAS,GAAG,aAAa;CACpC,GAAG;CACH,cAAc,2BAA2B,OAAO;AACpD,EAAE,CACN"}
@@ -1,5 +1,5 @@
1
1
  import { parseOptionalPositiveIntLike } from "../utils/numbers.js";
2
- import "../shared/wire-bounds.js";
2
+ import { PROTOBUF_INT32_MAX } from "../shared/wire-bounds.js";
3
3
  import { CatalogConversionError } from "../catalogs/types.js";
4
4
  import { positiveDecimalInputToScaled } from "../shared/decimal-surface.js";
5
5
  //#region src/services/trailing-oneof-inputs.ts
@@ -13,7 +13,7 @@ function parseTrailingDistanceInput(scales, distance, fieldName) {
13
13
  value: positiveDecimalInputToScaled(`${fieldName}.distance`, distance.distance, scales.price())
14
14
  };
15
15
  const bps = parseOptionalPositiveIntLike(distance.bps);
16
- if (bps === void 0 || bps <= 0) throw new Error(`${fieldName}Bps must be a positive integer`);
16
+ if (bps === void 0 || bps > Number(2147483647n)) throw new CatalogConversionError(`${fieldName}.bps`, `${fieldName}Bps must be a positive integer no greater than ${PROTOBUF_INT32_MAX}`);
17
17
  return {
18
18
  case: "trailingDistanceBps",
19
19
  value: bps
@@ -33,7 +33,7 @@ function parseSlippageInput(scales, slippage, options) {
33
33
  };
34
34
  }
35
35
  const bps = parseOptionalPositiveIntLike(slippage.bps);
36
- if (bps === void 0 || bps <= 0 || exceedsMax(bps, options.maxBps)) throw new Error(`${options.fieldName}Bps must be ${options.maxBps === void 0 ? "a positive integer" : `between 1 and ${options.maxBps}`}`);
36
+ if (bps === void 0 || bps <= 0 || exceedsMax(bps, options.maxBps)) throw new CatalogConversionError(`${options.fieldName}.bps`, `${options.fieldName}Bps must be ${options.maxBps === void 0 ? "a positive integer" : `between 1 and ${options.maxBps}`}`);
37
37
  return {
38
38
  case: options.bpsCase,
39
39
  value: bps
@@ -1 +1 @@
1
- {"version":3,"file":"trailing-oneof-inputs.js","names":[],"sources":["../../src/services/trailing-oneof-inputs.ts"],"sourcesContent":["import { positiveDecimalInputToScaled, type SdkScales } from \"../shared/decimal-surface.js\";\nimport { CatalogConversionError } from \"../catalogs/types.js\";\nimport { parseOptionalPositiveIntLike } from \"../utils/numbers.js\";\nimport { PROTOBUF_INT32_MAX } from \"../shared/wire-bounds.js\";\n\ntype PositiveIntLikeInput = string | number;\n\n/**\n * Trailing distance and slippage inputs: absolute price distances and\n * slippages are decimal price strings (e.g. \"0.50\"), converted to wire ticks\n * via the price scale; basis points are integers.\n */\nexport type TrailingDistanceInput =\n | { kind: \"distance\"; distance: string }\n | { kind: \"bps\"; bps: PositiveIntLikeInput }\n | { kind: \"none\" };\n\nexport type SlippageInput =\n | { kind: \"slippage\"; slippage: string }\n | { kind: \"bps\"; bps: PositiveIntLikeInput }\n | { kind: \"none\" };\n\ntype UnsetOneof = { case: undefined; value: undefined };\n\ntype TrailingDistanceOneof =\n | { case: \"trailingDistanceTicks\"; value: bigint }\n | { case: \"trailingDistanceBps\"; value: number }\n | UnsetOneof;\n\ntype SlippageOneof<TicksCase extends string, BpsCase extends string> =\n | { case: TicksCase; value: number }\n | { case: BpsCase; value: number }\n | UnsetOneof;\n\ntype SlippageOptions<TicksCase extends string, BpsCase extends string> = {\n fieldName: string;\n ticksCase: TicksCase;\n bpsCase: BpsCase;\n maxBps?: number;\n};\n\nexport function parseTrailingDistanceInput(\n scales: SdkScales,\n distance: TrailingDistanceInput,\n fieldName: string,\n): TrailingDistanceOneof {\n if (distance.kind === \"none\") {\n return { case: undefined, value: undefined };\n }\n if (distance.kind === \"distance\") {\n return {\n case: \"trailingDistanceTicks\",\n value: positiveDecimalInputToScaled(\n `${fieldName}.distance`,\n distance.distance,\n scales.price(),\n ),\n };\n }\n\n const bps = parseOptionalPositiveIntLike(distance.bps);\n if (bps === undefined || bps <= 0) {\n throw new Error(`${fieldName}Bps must be a positive integer`);\n }\n return { case: \"trailingDistanceBps\", value: bps };\n}\n\nexport function parseSlippageInput<const TicksCase extends string, const BpsCase extends string>(\n scales: SdkScales,\n slippage: SlippageInput | undefined,\n options: SlippageOptions<TicksCase, BpsCase>,\n): SlippageOneof<TicksCase, BpsCase> {\n if (!slippage || slippage.kind === \"none\") {\n return { case: undefined, value: undefined };\n }\n if (slippage.kind === \"slippage\") {\n const ticks = positiveDecimalInputToScaled(\n `${options.fieldName}.slippage`,\n slippage.slippage,\n scales.price(),\n );\n if (ticks > PROTOBUF_INT32_MAX) {\n throw new CatalogConversionError(\n `${options.fieldName}.slippage`,\n `${options.fieldName}.slippage exceeds the maximum supported price distance: ${slippage.slippage}`,\n );\n }\n return { case: options.ticksCase, value: Number(ticks) };\n }\n\n const bps = parseOptionalPositiveIntLike(slippage.bps);\n if (bps === undefined || bps <= 0 || exceedsMax(bps, options.maxBps)) {\n throw new Error(\n `${options.fieldName}Bps must be ${\n options.maxBps === undefined\n ? \"a positive integer\"\n : `between 1 and ${options.maxBps}`\n }`,\n );\n }\n return { case: options.bpsCase, value: bps };\n}\n\nfunction exceedsMax(value: number, max: number | undefined): boolean {\n return max !== undefined && value > max;\n}\n"],"mappings":";;;;;AAyCA,SAAgB,2BACZ,QACA,UACA,WACqB;CACrB,IAAI,SAAS,SAAS,QAClB,OAAO;EAAE,MAAM,KAAA;EAAW,OAAO,KAAA;CAAU;CAE/C,IAAI,SAAS,SAAS,YAClB,OAAO;EACH,MAAM;EACN,OAAO,6BACH,GAAG,UAAU,YACb,SAAS,UACT,OAAO,MAAM,CACjB;CACJ;CAGJ,MAAM,MAAM,6BAA6B,SAAS,GAAG;CACrD,IAAI,QAAQ,KAAA,KAAa,OAAO,GAC5B,MAAM,IAAI,MAAM,GAAG,UAAU,+BAA+B;CAEhE,OAAO;EAAE,MAAM;EAAuB,OAAO;CAAI;AACrD;AAEA,SAAgB,mBACZ,QACA,UACA,SACiC;CACjC,IAAI,CAAC,YAAY,SAAS,SAAS,QAC/B,OAAO;EAAE,MAAM,KAAA;EAAW,OAAO,KAAA;CAAU;CAE/C,IAAI,SAAS,SAAS,YAAY;EAC9B,MAAM,QAAQ,6BACV,GAAG,QAAQ,UAAU,YACrB,SAAS,UACT,OAAO,MAAM,CACjB;EACA,IAAI,QAAA,aACA,MAAM,IAAI,uBACN,GAAG,QAAQ,UAAU,YACrB,GAAG,QAAQ,UAAU,0DAA0D,SAAS,UAC5F;EAEJ,OAAO;GAAE,MAAM,QAAQ;GAAW,OAAO,OAAO,KAAK;EAAE;CAC3D;CAEA,MAAM,MAAM,6BAA6B,SAAS,GAAG;CACrD,IAAI,QAAQ,KAAA,KAAa,OAAO,KAAK,WAAW,KAAK,QAAQ,MAAM,GAC/D,MAAM,IAAI,MACN,GAAG,QAAQ,UAAU,cACjB,QAAQ,WAAW,KAAA,IACb,uBACA,iBAAiB,QAAQ,UAEvC;CAEJ,OAAO;EAAE,MAAM,QAAQ;EAAS,OAAO;CAAI;AAC/C;AAEA,SAAS,WAAW,OAAe,KAAkC;CACjE,OAAO,QAAQ,KAAA,KAAa,QAAQ;AACxC"}
1
+ {"version":3,"file":"trailing-oneof-inputs.js","names":[],"sources":["../../src/services/trailing-oneof-inputs.ts"],"sourcesContent":["import { positiveDecimalInputToScaled, type SdkScales } from \"../shared/decimal-surface.js\";\nimport { CatalogConversionError } from \"../catalogs/types.js\";\nimport { parseOptionalPositiveIntLike } from \"../utils/numbers.js\";\nimport { PROTOBUF_INT32_MAX } from \"../shared/wire-bounds.js\";\n\ntype PositiveIntLikeInput = string | number;\n\n/**\n * Trailing distance and slippage inputs: absolute price distances and\n * slippages are decimal price strings (e.g. \"0.50\"), converted to wire ticks\n * via the price scale; basis points are integers.\n */\nexport type TrailingDistanceInput =\n | { kind: \"distance\"; distance: string }\n | { kind: \"bps\"; bps: PositiveIntLikeInput }\n | { kind: \"none\" };\n\nexport type SlippageInput =\n | { kind: \"slippage\"; slippage: string }\n | { kind: \"bps\"; bps: PositiveIntLikeInput }\n | { kind: \"none\" };\n\ntype UnsetOneof = { case: undefined; value: undefined };\n\ntype TrailingDistanceOneof =\n | { case: \"trailingDistanceTicks\"; value: bigint }\n | { case: \"trailingDistanceBps\"; value: number }\n | UnsetOneof;\n\ntype SlippageOneof<TicksCase extends string, BpsCase extends string> =\n | { case: TicksCase; value: number }\n | { case: BpsCase; value: number }\n | UnsetOneof;\n\ntype SlippageOptions<TicksCase extends string, BpsCase extends string> = {\n fieldName: string;\n ticksCase: TicksCase;\n bpsCase: BpsCase;\n maxBps?: number;\n};\n\nexport function parseTrailingDistanceInput(\n scales: SdkScales,\n distance: TrailingDistanceInput,\n fieldName: string,\n): TrailingDistanceOneof {\n if (distance.kind === \"none\") {\n return { case: undefined, value: undefined };\n }\n if (distance.kind === \"distance\") {\n return {\n case: \"trailingDistanceTicks\",\n value: positiveDecimalInputToScaled(\n `${fieldName}.distance`,\n distance.distance,\n scales.price(),\n ),\n };\n }\n\n const bps = parseOptionalPositiveIntLike(distance.bps);\n if (bps === undefined || bps > Number(PROTOBUF_INT32_MAX)) {\n throw new CatalogConversionError(\n `${fieldName}.bps`,\n `${fieldName}Bps must be a positive integer no greater than ${PROTOBUF_INT32_MAX}`,\n );\n }\n return { case: \"trailingDistanceBps\", value: bps };\n}\n\nexport function parseSlippageInput<const TicksCase extends string, const BpsCase extends string>(\n scales: SdkScales,\n slippage: SlippageInput | undefined,\n options: SlippageOptions<TicksCase, BpsCase>,\n): SlippageOneof<TicksCase, BpsCase> {\n if (!slippage || slippage.kind === \"none\") {\n return { case: undefined, value: undefined };\n }\n if (slippage.kind === \"slippage\") {\n const ticks = positiveDecimalInputToScaled(\n `${options.fieldName}.slippage`,\n slippage.slippage,\n scales.price(),\n );\n if (ticks > PROTOBUF_INT32_MAX) {\n throw new CatalogConversionError(\n `${options.fieldName}.slippage`,\n `${options.fieldName}.slippage exceeds the maximum supported price distance: ${slippage.slippage}`,\n );\n }\n return { case: options.ticksCase, value: Number(ticks) };\n }\n\n const bps = parseOptionalPositiveIntLike(slippage.bps);\n if (bps === undefined || bps <= 0 || exceedsMax(bps, options.maxBps)) {\n throw new CatalogConversionError(\n `${options.fieldName}.bps`,\n `${options.fieldName}Bps must be ${\n options.maxBps === undefined\n ? \"a positive integer\"\n : `between 1 and ${options.maxBps}`\n }`,\n );\n }\n return { case: options.bpsCase, value: bps };\n}\n\nfunction exceedsMax(value: number, max: number | undefined): boolean {\n return max !== undefined && value > max;\n}\n"],"mappings":";;;;;AAyCA,SAAgB,2BACZ,QACA,UACA,WACqB;CACrB,IAAI,SAAS,SAAS,QAClB,OAAO;EAAE,MAAM,KAAA;EAAW,OAAO,KAAA;CAAU;CAE/C,IAAI,SAAS,SAAS,YAClB,OAAO;EACH,MAAM;EACN,OAAO,6BACH,GAAG,UAAU,YACb,SAAS,UACT,OAAO,MAAM,CACjB;CACJ;CAGJ,MAAM,MAAM,6BAA6B,SAAS,GAAG;CACrD,IAAI,QAAQ,KAAA,KAAa,MAAM,OAAA,WAAyB,GACpD,MAAM,IAAI,uBACN,GAAG,UAAU,OACb,GAAG,UAAU,iDAAiD,oBAClE;CAEJ,OAAO;EAAE,MAAM;EAAuB,OAAO;CAAI;AACrD;AAEA,SAAgB,mBACZ,QACA,UACA,SACiC;CACjC,IAAI,CAAC,YAAY,SAAS,SAAS,QAC/B,OAAO;EAAE,MAAM,KAAA;EAAW,OAAO,KAAA;CAAU;CAE/C,IAAI,SAAS,SAAS,YAAY;EAC9B,MAAM,QAAQ,6BACV,GAAG,QAAQ,UAAU,YACrB,SAAS,UACT,OAAO,MAAM,CACjB;EACA,IAAI,QAAA,aACA,MAAM,IAAI,uBACN,GAAG,QAAQ,UAAU,YACrB,GAAG,QAAQ,UAAU,0DAA0D,SAAS,UAC5F;EAEJ,OAAO;GAAE,MAAM,QAAQ;GAAW,OAAO,OAAO,KAAK;EAAE;CAC3D;CAEA,MAAM,MAAM,6BAA6B,SAAS,GAAG;CACrD,IAAI,QAAQ,KAAA,KAAa,OAAO,KAAK,WAAW,KAAK,QAAQ,MAAM,GAC/D,MAAM,IAAI,uBACN,GAAG,QAAQ,UAAU,OACrB,GAAG,QAAQ,UAAU,cACjB,QAAQ,WAAW,KAAA,IACb,uBACA,iBAAiB,QAAQ,UAEvC;CAEJ,OAAO;EAAE,MAAM,QAAQ;EAAS,OAAO;CAAI;AAC/C;AAEA,SAAS,WAAW,OAAe,KAAkC;CACjE,OAAO,QAAQ,KAAA,KAAa,QAAQ;AACxC"}
@@ -1,4 +1,4 @@
1
- import { LedgerTransfer, LedgerTransferSide, LedgerTransferSideSchema, ListTransfersInput, ListTransfersInputSchema, createLedgerTransferSchema } from "./transfers.schemas.js";
1
+ import { LedgerTransfer, LedgerTransferSchema, LedgerTransferSide, LedgerTransferSideSchema, ListTransfersInput, ListTransfersInputSchema } from "./transfers.schemas.js";
2
2
  import { TransfersService } from "./transfers.js";
3
3
  import { TRANSFER_SIDE_KIND_VALUES, TransferSideKind } from "./transfers.codecs.js";
4
- export { LedgerTransfer, LedgerTransferSide, LedgerTransferSideSchema, ListTransfersInput, ListTransfersInputSchema, TRANSFER_SIDE_KIND_VALUES, TransferSideKind, TransfersService, createLedgerTransferSchema };
4
+ export { LedgerTransfer, LedgerTransferSchema, LedgerTransferSide, LedgerTransferSideSchema, ListTransfersInput, ListTransfersInputSchema, TRANSFER_SIDE_KIND_VALUES, TransferSideKind, TransfersService };
@@ -3,7 +3,6 @@ import { SubaccountResolver } from "../subaccount-resolver.js";
3
3
  import { PolyesterRealtime } from "../../realtime/types.js";
4
4
  import "../../realtime/index.js";
5
5
  import { BaseSubscribeInput } from "../../shared/types.js";
6
- import { SdkScales } from "../../shared/decimal-surface.js";
7
6
  import { LedgerTransfer, ListTransfersInput } from "./transfers.schemas.js";
8
7
  import { Transport } from "@connectrpc/connect";
9
8
  //#region src/services/transfers/transfers.d.ts
@@ -15,7 +14,7 @@ interface SubscribeTransfersInput extends BaseSubscribeInput<LedgerTransfer> {
15
14
  */
16
15
  declare class TransfersService {
17
16
  #private;
18
- constructor(transport: Transport, realtime: PolyesterRealtime, resolver: SubaccountResolver | undefined, scales: SdkScales);
17
+ constructor(transport: Transport, realtime: PolyesterRealtime, resolver: SubaccountResolver | undefined);
19
18
  /**
20
19
  * Returns ledger transfers for the resolved account scope with limit, direction, timestamp, code, ledger, and page-token filters.
21
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transfers.d.ts","names":[],"sources":["../../../src/services/transfers/transfers.ts"],"mappings":";;;;;;;;;UAoBU,gCAAgC,mBAAmB;EACzD;;;;;cAMS;;EAQL,YAAA,WAAW,WACX,UAAU,mBACV,UAAU,gCACV,QAAQ;;;;EAYN,KACF,QAAO,oBACP,UAAU,0BACX;IAAU,WAAW;IAAkB;;;;;EAY1C,UAAU,OAAO"}
1
+ {"version":3,"file":"transfers.d.ts","names":[],"sources":["../../../src/services/transfers/transfers.ts"],"mappings":";;;;;;;;UAmBU,gCAAgC,mBAAmB;EACzD;;;;;cAMS;;EAML,YAAA,WAAW,WACX,UAAU,mBACV,UAAU;;;;EAUR,KACF,QAAO,oBACP,UAAU,0BACX;IAAU,WAAW;IAAkB;;;;;EAW1C,UAAU,OAAO"}
@@ -3,8 +3,7 @@ import { toConnectCallOptions } from "../../shared/request-options.js";
3
3
  import { resolveAccountScopedInput } from "../subaccount-resolver.js";
4
4
  import { LedgerReadService, TransferRowSchema } from "../../gen/ledger/read/v1/ledger_read_pb.js";
5
5
  import { publicationHandlerErrorContext } from "../../shared/subscription-errors.js";
6
- import { createReadyGate } from "../../shared/decimal-surface.js";
7
- import { ListTransfersInputSchema, createLedgerTransferSchema } from "./transfers.schemas.js";
6
+ import { LedgerTransferSchema, ListTransfersInputSchema } from "./transfers.schemas.js";
8
7
  import { createClient } from "@connectrpc/connect";
9
8
  import * as v from "valibot";
10
9
  //#region src/services/transfers/transfers.ts
@@ -15,25 +14,20 @@ var TransfersService = class {
15
14
  #client;
16
15
  #realtime;
17
16
  #resolver;
18
- #scales;
19
- #ledgerTransferSchema;
20
- constructor(transport, realtime, resolver, scales) {
17
+ constructor(transport, realtime, resolver) {
21
18
  this.#client = createClient(LedgerReadService, transport);
22
19
  this.#realtime = realtime;
23
20
  this.#resolver = resolver;
24
- this.#scales = scales;
25
- this.#ledgerTransferSchema = createLedgerTransferSchema(scales);
26
21
  }
27
22
  /**
28
23
  * Returns ledger transfers for the resolved account scope with limit, direction, timestamp, code, ledger, and page-token filters.
29
24
  */
30
25
  async list(input = {}, options) {
31
- await this.#scales.ready();
32
26
  const resolved = resolveAccountScopedInput(input, this.#resolver);
33
27
  const validatedInput = parse(ListTransfersInputSchema, resolved);
34
28
  const res = await this.#client.listTransfers(validatedInput, toConnectCallOptions(options));
35
29
  return {
36
- transfers: parse(v.array(this.#ledgerTransferSchema), res.transfers),
30
+ transfers: parse(v.array(LedgerTransferSchema), res.transfers),
37
31
  nextPageToken: res.nextPageToken
38
32
  };
39
33
  }
@@ -42,15 +36,16 @@ var TransfersService = class {
42
36
  */
43
37
  subscribe(input) {
44
38
  const channel = `private:ledger:transfers:${input.accountId}:proto`;
45
- const gate = createReadyGate(() => this.#scales.ready(), (error) => input.onError?.(publicationHandlerErrorContext(channel, error)));
46
39
  return this.#realtime.connectProtoChannel({
47
40
  channel,
48
41
  schema: TransferRowSchema,
49
42
  onPublication: (m) => {
50
- gate.run(() => {
51
- const tr = parse(this.#ledgerTransferSchema, m);
43
+ try {
44
+ const tr = parse(LedgerTransferSchema, m);
52
45
  input.onEvent(tr);
53
- });
46
+ } catch (error) {
47
+ input.onError?.(publicationHandlerErrorContext(channel, error));
48
+ }
54
49
  },
55
50
  onConnected: input.onOpen,
56
51
  onDisconnected: input.onClose,
@@ -1 +1 @@
1
- {"version":3,"file":"transfers.js","names":["#client","Proto.LedgerReadService","#realtime","#resolver","#scales","#ledgerTransferSchema","Proto.TransferRowSchema"],"sources":["../../../src/services/transfers/transfers.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 { parse } from \"../../shared/validation.js\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport { createReadyGate, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport {\n createLedgerTransferSchema,\n ListTransfersInputSchema,\n type LedgerTransfer,\n type ListTransfersInput,\n} from \"./transfers.schemas.js\";\n\ninterface SubscribeTransfersInput extends BaseSubscribeInput<LedgerTransfer> {\n accountId: string;\n}\n\n/**\n * Reads and streams ledger transfer activity for the authenticated account scope.\n */\nexport class TransfersService {\n #client: Client<typeof Proto.LedgerReadService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #ledgerTransferSchema: ReturnType<typeof createLedgerTransferSchema>;\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.#ledgerTransferSchema = createLedgerTransferSchema(scales);\n }\n\n /**\n * Returns ledger transfers for the resolved account scope with limit, direction, timestamp, code, ledger, and page-token filters.\n */\n async list(\n input: ListTransfersInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ transfers: LedgerTransfer[]; nextPageToken: string }> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(ListTransfersInputSchema, resolved);\n const res = await this.#client.listTransfers(validatedInput, toConnectCallOptions(options));\n const transfers = parse(v.array(this.#ledgerTransferSchema), res.transfers);\n return { transfers, nextPageToken: res.nextPageToken };\n }\n\n /**\n * Subscribes to private ledger transfer updates on private:ledger:transfers:{accountId}:proto and emits parsed transfer rows.\n */\n subscribe(input: SubscribeTransfersInput): () => void {\n const channel = `private:ledger:transfers:${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.TransferRowSchema,\n onPublication: (m) => {\n gate.run(() => {\n const tr = parse(this.#ledgerTransferSchema, m);\n input.onEvent(tr);\n });\n },\n onConnected: input.onOpen,\n onDisconnected: input.onClose,\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA2BA,IAAa,mBAAb,MAA8B;CAC1B;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,wBAAwB,2BAA2B,MAAM;CAClE;;;;CAKA,MAAM,KACF,QAA4B,CAAC,GAC7B,SAC+D;EAC/D,MAAM,KAAKD,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,iBAAiB,MAAM,0BAA0B,QAAQ;EAC/D,MAAM,MAAM,MAAM,KAAKH,QAAQ,cAAc,gBAAgB,qBAAqB,OAAO,CAAC;EAE1F,OAAO;GAAE,WADS,MAAM,EAAE,MAAM,KAAKK,qBAAqB,GAAG,IAAI,SAChD;GAAG,eAAe,IAAI;EAAc;CACzD;;;;CAKA,UAAU,OAA4C;EAClD,MAAM,UAAU,4BAA4B,MAAM,UAAU;EAC5D,MAAM,OAAO,sBACH,KAAKD,QAAQ,MAAM,IACxB,UAAU,MAAM,UAAU,+BAA+B,SAAS,KAAK,CAAC,CAC7E;EACA,OAAO,KAAKF,UAAU,oBAAoB;GACtC;GACA,QAAQI;GACR,gBAAgB,MAAM;IAClB,KAAK,UAAU;KACX,MAAM,KAAK,MAAM,KAAKD,uBAAuB,CAAC;KAC9C,MAAM,QAAQ,EAAE;IACpB,CAAC;GACL;GACA,aAAa,MAAM;GACnB,gBAAgB,MAAM;GACtB,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}
1
+ {"version":3,"file":"transfers.js","names":["#client","Proto.LedgerReadService","#realtime","#resolver","Proto.TransferRowSchema"],"sources":["../../../src/services/transfers/transfers.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 { parse } from \"../../shared/validation.js\";\nimport type { PolyesterRealtime } from \"../../realtime/index.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport {\n LedgerTransferSchema,\n ListTransfersInputSchema,\n type LedgerTransfer,\n type ListTransfersInput,\n} from \"./transfers.schemas.js\";\n\ninterface SubscribeTransfersInput extends BaseSubscribeInput<LedgerTransfer> {\n accountId: string;\n}\n\n/**\n * Reads and streams ledger transfer activity for the authenticated account scope.\n */\nexport class TransfersService {\n #client: Client<typeof Proto.LedgerReadService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n ) {\n this.#client = createClient(Proto.LedgerReadService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n }\n\n /**\n * Returns ledger transfers for the resolved account scope with limit, direction, timestamp, code, ledger, and page-token filters.\n */\n async list(\n input: ListTransfersInput = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ transfers: LedgerTransfer[]; nextPageToken: string }> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(ListTransfersInputSchema, resolved);\n const res = await this.#client.listTransfers(validatedInput, toConnectCallOptions(options));\n const transfers = parse(v.array(LedgerTransferSchema), res.transfers);\n return { transfers, nextPageToken: res.nextPageToken };\n }\n\n /**\n * Subscribes to private ledger transfer updates on private:ledger:transfers:{accountId}:proto and emits parsed transfer rows.\n */\n subscribe(input: SubscribeTransfersInput): () => void {\n const channel = `private:ledger:transfers:${input.accountId}:proto`;\n return this.#realtime.connectProtoChannel({\n channel,\n schema: Proto.TransferRowSchema,\n onPublication: (m) => {\n try {\n const tr = parse(LedgerTransferSchema, m);\n input.onEvent(tr);\n } catch (error) {\n input.onError?.(publicationHandlerErrorContext(channel, error));\n }\n },\n onConnected: input.onOpen,\n onDisconnected: input.onClose,\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,IAAa,mBAAb,MAA8B;CAC1B;CACA;CACA;CAEA,YACI,WACA,UACA,UACF;EACE,KAAKA,UAAU,aAAaC,mBAAyB,SAAS;EAC9D,KAAKC,YAAY;EACjB,KAAKC,YAAY;CACrB;;;;CAKA,MAAM,KACF,QAA4B,CAAC,GAC7B,SAC+D;EAC/D,MAAM,WAAW,0BAA0B,OAAO,KAAKA,SAAS;EAChE,MAAM,iBAAiB,MAAM,0BAA0B,QAAQ;EAC/D,MAAM,MAAM,MAAM,KAAKH,QAAQ,cAAc,gBAAgB,qBAAqB,OAAO,CAAC;EAE1F,OAAO;GAAE,WADS,MAAM,EAAE,MAAM,oBAAoB,GAAG,IAAI,SAC1C;GAAG,eAAe,IAAI;EAAc;CACzD;;;;CAKA,UAAU,OAA4C;EAClD,MAAM,UAAU,4BAA4B,MAAM,UAAU;EAC5D,OAAO,KAAKE,UAAU,oBAAoB;GACtC;GACA,QAAQE;GACR,gBAAgB,MAAM;IAClB,IAAI;KACA,MAAM,KAAK,MAAM,sBAAsB,CAAC;KACxC,MAAM,QAAQ,EAAE;IACpB,SAAS,OAAO;KACZ,MAAM,UAAU,+BAA+B,SAAS,KAAK,CAAC;IAClE;GACJ;GACA,aAAa,MAAM;GACnB,gBAAgB,MAAM;GACtB,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}
@@ -1,6 +1,5 @@
1
1
  import { TransferCode } from "../../gen/ledger/v1/catalog_pb.js";
2
2
  import { TransferSideKind } from "../../gen/ledger/read/v1/ledger_read_pb.js";
3
- import { SdkScales } from "../../shared/decimal-surface.js";
4
3
  import * as v from "valibot";
5
4
  //#region src/services/transfers/transfers.schemas.d.ts
6
5
  declare const LedgerTransferSideSchema: v.ObjectSchema<{
@@ -9,7 +8,8 @@ declare const LedgerTransferSideSchema: v.ObjectSchema<{
9
8
  readonly address: v.OptionalSchema<v.StringSchema<undefined>, "">;
10
9
  }, undefined>;
11
10
  type LedgerTransferSide = v.InferOutput<typeof LedgerTransferSideSchema>;
12
- declare function createLedgerTransferSchema(scales: SdkScales): v.SchemaWithPipe<readonly [v.ObjectSchema<{
11
+ /** Parses ledger transfer rows whose monetary fields use the protocol's fixed E18 scale. */
12
+ declare const LedgerTransferSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
13
13
  readonly assetId: v.NumberSchema<undefined>;
14
14
  readonly amountE18: v.OptionalSchema<v.ObjectSchema<{
15
15
  readonly hi: v.BigintSchema<undefined>;
@@ -79,10 +79,10 @@ declare function createLedgerTransferSchema(scales: SdkScales): v.SchemaWithPipe
79
79
  accountCode: "unspecified" | "funding" | "trading";
80
80
  timestamp: number;
81
81
  isDebit: boolean;
82
- linkId: number | undefined;
82
+ linkId: string | undefined;
83
83
  flowId: string;
84
84
  }>]>;
85
- type LedgerTransfer = v.InferOutput<ReturnType<typeof createLedgerTransferSchema>>;
85
+ type LedgerTransfer = v.InferOutput<typeof LedgerTransferSchema>;
86
86
  declare const ListTransfersInputSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{
87
87
  readonly ledger: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
88
88
  readonly limit: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
@@ -117,5 +117,5 @@ declare const ListTransfersInputSchema: v.SchemaWithPipe<readonly [v.StrictObjec
117
117
  }>]>;
118
118
  type ListTransfersInput = v.InferInput<typeof ListTransfersInputSchema>;
119
119
  //#endregion
120
- export { LedgerTransfer, LedgerTransferSide, LedgerTransferSideSchema, ListTransfersInput, ListTransfersInputSchema, createLedgerTransferSchema };
120
+ export { LedgerTransfer, LedgerTransferSchema, LedgerTransferSide, LedgerTransferSideSchema, ListTransfersInput, ListTransfersInputSchema };
121
121
  //# sourceMappingURL=transfers.schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transfers.schemas.d.ts","names":[],"sources":["../../../src/services/transfers/transfers.schemas.ts"],"mappings":";;;;;cA2Ca,0BAAwB,EAAA;;;;;KAMzB,qBAAqB,EAAE,mBAAmB;iBAEtC,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuDhD,iBAAiB,EAAE,YAAY,kBAAkB;cAEhD,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwBzB,qBAAqB,EAAE,kBAAkB"}
1
+ {"version":3,"file":"transfers.schemas.d.ts","names":[],"sources":["../../../src/services/transfers/transfers.schemas.ts"],"mappings":";;;;cA2Ca,0BAAwB,EAAA;;;;;KAMzB,qBAAqB,EAAE,mBAAmB;;cAGzC,sBAAoB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmDrB,iBAAiB,EAAE,mBAAmB;cAErC,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwBzB,qBAAqB,EAAE,kBAAkB"}
@@ -24,38 +24,36 @@ const LedgerTransferSideSchema = v.object({
24
24
  accountId: OptionalPublicIdSchema,
25
25
  address: v.optional(v.string(), "")
26
26
  });
27
- function createLedgerTransferSchema(scales) {
28
- return v.pipe(v.object({
29
- assetId: v.number(),
30
- amountE18: v.optional(U128Schema),
31
- balanceAfterE18: v.optional(U128Schema),
32
- isDebit: v.boolean(),
33
- transferCode: v.number(),
34
- accountCode: v.number(),
35
- tsUs: WireTimestampInputSchema,
36
- linkId: v.optional(v.bigint()),
37
- flowId: v.optional(v.string()),
38
- source: v.optional(LedgerTransferSideSchema),
39
- destination: v.optional(LedgerTransferSideSchema)
40
- }), v.transform((tr) => {
41
- scales.ledgerAmount(tr.assetId);
42
- const amount = fromU128(tr.amountE18);
43
- const linkIdNum = Number(tr.linkId ?? 0n);
44
- return {
45
- assetId: tr.assetId,
46
- amount: scaledToDecimalOutput(amount, 18),
47
- balanceAfter: tr.balanceAfterE18 !== void 0 ? scaledToDecimalOutput(fromU128(tr.balanceAfterE18), 18) : void 0,
48
- type: requiredEnumLabel(TransferCodeCodec.protoToOutput, tr.transferCode, "LedgerTransferSchema", "transfer code"),
49
- accountCode: requiredEnumLabel(AccountCodeCodec.protoToOutput, tr.accountCode, "LedgerTransferSchema", "account code"),
50
- timestamp: wireTimestampToMs(tr.tsUs),
51
- isDebit: tr.isDebit,
52
- linkId: linkIdNum || void 0,
53
- flowId: tr.flowId?.trim() ?? "",
54
- ...tr.source ? { source: tr.source } : {},
55
- ...tr.destination ? { destination: tr.destination } : {}
56
- };
57
- }));
58
- }
27
+ /** Parses ledger transfer rows whose monetary fields use the protocol's fixed E18 scale. */
28
+ const LedgerTransferSchema = v.pipe(v.object({
29
+ assetId: v.number(),
30
+ amountE18: v.optional(U128Schema),
31
+ balanceAfterE18: v.optional(U128Schema),
32
+ isDebit: v.boolean(),
33
+ transferCode: v.number(),
34
+ accountCode: v.number(),
35
+ tsUs: WireTimestampInputSchema,
36
+ linkId: v.optional(v.bigint()),
37
+ flowId: v.optional(v.string()),
38
+ source: v.optional(LedgerTransferSideSchema),
39
+ destination: v.optional(LedgerTransferSideSchema)
40
+ }), v.transform((tr) => {
41
+ const amount = fromU128(tr.amountE18);
42
+ const linkId = tr.linkId && tr.linkId > 0n ? tr.linkId.toString() : void 0;
43
+ return {
44
+ assetId: tr.assetId,
45
+ amount: scaledToDecimalOutput(amount, 18),
46
+ balanceAfter: tr.balanceAfterE18 !== void 0 ? scaledToDecimalOutput(fromU128(tr.balanceAfterE18), 18) : void 0,
47
+ type: requiredEnumLabel(TransferCodeCodec.protoToOutput, tr.transferCode, "LedgerTransferSchema", "transfer code"),
48
+ accountCode: requiredEnumLabel(AccountCodeCodec.protoToOutput, tr.accountCode, "LedgerTransferSchema", "account code"),
49
+ timestamp: wireTimestampToMs(tr.tsUs),
50
+ isDebit: tr.isDebit,
51
+ linkId,
52
+ flowId: tr.flowId?.trim() ?? "",
53
+ ...tr.source ? { source: tr.source } : {},
54
+ ...tr.destination ? { destination: tr.destination } : {}
55
+ };
56
+ }));
59
57
  const ListTransfersInputSchema = v.pipe(v.strictObject({
60
58
  ...AccountScopeInputEntries,
61
59
  ledger: v.optional(v.number(), 0),
@@ -72,6 +70,6 @@ const ListTransfersInputSchema = v.pipe(v.strictObject({
72
70
  subaccountId: accountScopeToSubaccountId(account)
73
71
  })));
74
72
  //#endregion
75
- export { LedgerTransferSideSchema, ListTransfersInputSchema, createLedgerTransferSchema };
73
+ export { LedgerTransferSchema, LedgerTransferSideSchema, ListTransfersInputSchema };
76
74
 
77
75
  //# sourceMappingURL=transfers.schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transfers.schemas.js","names":["Proto.TransferSideKind"],"sources":["../../../src/services/transfers/transfers.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport * as Proto from \"../../gen/ledger/read/v1/ledger_read_pb.js\";\nimport { fromU128 } from \"../../utils/u128.js\";\nimport {\n AccountCodeCodec,\n TRANSFER_CODE_VALUES,\n TransferCodeCodec,\n} from \"../../shared/ledger-codes.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { wireTimestampToMs } from \"../../utils/time.js\";\nimport {\n OptionalPublicIdSchema,\n OptionalTimestampMsToUsInputSchema,\n} from \"../../shared/schemas.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { E18_SCALE, scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { TransferSideKindCodec } from \"./transfers.codecs.js\";\n\nconst U128Schema = v.object({\n hi: v.bigint(),\n lo: v.bigint(),\n});\n\nconst WireTimestampInputSchema = v.union([\n v.bigint(),\n v.number(),\n v.pipe(\n v.string(),\n v.regex(/^\\d+$/),\n v.transform((value) => BigInt(value)),\n ),\n]);\n\nconst TransferSideKindSchema = v.pipe(\n v.enum(Proto.TransferSideKind),\n v.transform((kind) =>\n requiredEnumLabel(TransferSideKindCodec.protoToOutput, kind, \"TransferSideSchema\", \"kind\"),\n ),\n);\n\nexport const LedgerTransferSideSchema = v.object({\n kind: TransferSideKindSchema,\n accountId: OptionalPublicIdSchema,\n address: v.optional(v.string(), \"\"),\n});\n\nexport type LedgerTransferSide = v.InferOutput<typeof LedgerTransferSideSchema>;\n\nexport function createLedgerTransferSchema(scales: SdkScales) {\n return v.pipe(\n v.object({\n assetId: v.number(),\n amountE18: v.optional(U128Schema),\n balanceAfterE18: v.optional(U128Schema),\n isDebit: v.boolean(),\n transferCode: v.number(),\n accountCode: v.number(),\n tsUs: WireTimestampInputSchema,\n linkId: v.optional(v.bigint()),\n flowId: v.optional(v.string()),\n source: v.optional(LedgerTransferSideSchema),\n destination: v.optional(LedgerTransferSideSchema),\n }),\n v.transform((tr) => {\n // Keep the catalog lookup for readiness/fallback parity; u128 amount fields are always E18 on the wire.\n scales.ledgerAmount(tr.assetId);\n const amount = fromU128(tr.amountE18);\n const linkIdNum = Number(tr.linkId ?? 0n);\n\n const output = {\n assetId: tr.assetId,\n amount: scaledToDecimalOutput(amount, E18_SCALE),\n balanceAfter:\n tr.balanceAfterE18 !== undefined\n ? scaledToDecimalOutput(fromU128(tr.balanceAfterE18), E18_SCALE)\n : undefined,\n type: requiredEnumLabel(\n TransferCodeCodec.protoToOutput,\n tr.transferCode,\n \"LedgerTransferSchema\",\n \"transfer code\",\n ),\n accountCode: requiredEnumLabel(\n AccountCodeCodec.protoToOutput,\n tr.accountCode,\n \"LedgerTransferSchema\",\n \"account code\",\n ),\n timestamp: wireTimestampToMs(tr.tsUs),\n isDebit: tr.isDebit,\n linkId: linkIdNum || undefined,\n flowId: tr.flowId?.trim() ?? \"\",\n };\n\n return {\n ...output,\n ...(tr.source ? { source: tr.source } : {}),\n ...(tr.destination ? { destination: tr.destination } : {}),\n };\n }),\n );\n}\n\nexport type LedgerTransfer = v.InferOutput<ReturnType<typeof createLedgerTransferSchema>>;\n\nexport const ListTransfersInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n ledger: v.optional(v.number(), 0),\n limit: v.optional(v.number()),\n reversed: v.optional(v.boolean(), false),\n timestampMin: OptionalTimestampMsToUsInputSchema,\n timestampMax: OptionalTimestampMsToUsInputSchema,\n transferCode: v.optional(\n v.pipe(\n v.picklist(TRANSFER_CODE_VALUES),\n v.transform((value) => TransferCodeCodec.inputToProto[value]),\n ),\n ),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform(({ account, timestampMin, timestampMax, ...input }) => ({\n ...input,\n tsMinUs: timestampMin,\n tsMaxUs: timestampMax,\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type ListTransfersInput = v.InferInput<typeof ListTransfersInputSchema>;\n"],"mappings":";;;;;;;;;;;AAqBA,MAAM,aAAa,EAAE,OAAO;CACxB,IAAI,EAAE,OAAO;CACb,IAAI,EAAE,OAAO;AACjB,CAAC;AAED,MAAM,2BAA2B,EAAE,MAAM;CACrC,EAAE,OAAO;CACT,EAAE,OAAO;CACT,EAAE,KACE,EAAE,OAAO,GACT,EAAE,MAAM,OAAO,GACf,EAAE,WAAW,UAAU,OAAO,KAAK,CAAC,CACxC;AACJ,CAAC;AAED,MAAM,yBAAyB,EAAE,KAC7B,EAAE,KAAKA,gBAAsB,GAC7B,EAAE,WAAW,SACT,kBAAkB,sBAAsB,eAAe,MAAM,sBAAsB,MAAM,CAC7F,CACJ;AAEA,MAAa,2BAA2B,EAAE,OAAO;CAC7C,MAAM;CACN,WAAW;CACX,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE;AACtC,CAAC;AAID,SAAgB,2BAA2B,QAAmB;CAC1D,OAAO,EAAE,KACL,EAAE,OAAO;EACL,SAAS,EAAE,OAAO;EAClB,WAAW,EAAE,SAAS,UAAU;EAChC,iBAAiB,EAAE,SAAS,UAAU;EACtC,SAAS,EAAE,QAAQ;EACnB,cAAc,EAAE,OAAO;EACvB,aAAa,EAAE,OAAO;EACtB,MAAM;EACN,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;EAC7B,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;EAC7B,QAAQ,EAAE,SAAS,wBAAwB;EAC3C,aAAa,EAAE,SAAS,wBAAwB;CACpD,CAAC,GACD,EAAE,WAAW,OAAO;EAEhB,OAAO,aAAa,GAAG,OAAO;EAC9B,MAAM,SAAS,SAAS,GAAG,SAAS;EACpC,MAAM,YAAY,OAAO,GAAG,UAAU,EAAE;EA2BxC,OAAO;GAxBH,SAAS,GAAG;GACZ,QAAQ,sBAAsB,QAAA,EAAiB;GAC/C,cACI,GAAG,oBAAoB,KAAA,IACjB,sBAAsB,SAAS,GAAG,eAAe,GAAA,EAAY,IAC7D,KAAA;GACV,MAAM,kBACF,kBAAkB,eAClB,GAAG,cACH,wBACA,eACJ;GACA,aAAa,kBACT,iBAAiB,eACjB,GAAG,aACH,wBACA,cACJ;GACA,WAAW,kBAAkB,GAAG,IAAI;GACpC,SAAS,GAAG;GACZ,QAAQ,aAAa,KAAA;GACrB,QAAQ,GAAG,QAAQ,KAAK,KAAK;GAK7B,GAAI,GAAG,SAAS,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC;GACzC,GAAI,GAAG,cAAc,EAAE,aAAa,GAAG,YAAY,IAAI,CAAC;EAC5D;CACJ,CAAC,CACL;AACJ;AAIA,MAAa,2BAA2B,EAAE,KACtC,EAAE,aAAa;CACX,GAAG;CACH,QAAQ,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC;CAChC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;CAC5B,UAAU,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;CACvC,cAAc;CACd,cAAc;CACd,cAAc,EAAE,SACZ,EAAE,KACE,EAAE,SAAS,oBAAoB,GAC/B,EAAE,WAAW,UAAU,kBAAkB,aAAa,MAAM,CAChE,CACJ;CACA,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;AAC1D,CAAC,GACD,EAAE,WAAW,EAAE,SAAS,cAAc,cAAc,GAAG,aAAa;CAChE,GAAG;CACH,SAAS;CACT,SAAS;CACT,cAAc,2BAA2B,OAAO;AACpD,EAAE,CACN"}
1
+ {"version":3,"file":"transfers.schemas.js","names":["Proto.TransferSideKind"],"sources":["../../../src/services/transfers/transfers.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport * as Proto from \"../../gen/ledger/read/v1/ledger_read_pb.js\";\nimport { fromU128 } from \"../../utils/u128.js\";\nimport {\n AccountCodeCodec,\n TRANSFER_CODE_VALUES,\n TransferCodeCodec,\n} from \"../../shared/ledger-codes.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { wireTimestampToMs } from \"../../utils/time.js\";\nimport {\n OptionalPublicIdSchema,\n OptionalTimestampMsToUsInputSchema,\n} from \"../../shared/schemas.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { E18_SCALE, scaledToDecimalOutput } from \"../../shared/decimal-surface.js\";\nimport { TransferSideKindCodec } from \"./transfers.codecs.js\";\n\nconst U128Schema = v.object({\n hi: v.bigint(),\n lo: v.bigint(),\n});\n\nconst WireTimestampInputSchema = v.union([\n v.bigint(),\n v.number(),\n v.pipe(\n v.string(),\n v.regex(/^\\d+$/),\n v.transform((value) => BigInt(value)),\n ),\n]);\n\nconst TransferSideKindSchema = v.pipe(\n v.enum(Proto.TransferSideKind),\n v.transform((kind) =>\n requiredEnumLabel(TransferSideKindCodec.protoToOutput, kind, \"TransferSideSchema\", \"kind\"),\n ),\n);\n\nexport const LedgerTransferSideSchema = v.object({\n kind: TransferSideKindSchema,\n accountId: OptionalPublicIdSchema,\n address: v.optional(v.string(), \"\"),\n});\n\nexport type LedgerTransferSide = v.InferOutput<typeof LedgerTransferSideSchema>;\n\n/** Parses ledger transfer rows whose monetary fields use the protocol's fixed E18 scale. */\nexport const LedgerTransferSchema = v.pipe(\n v.object({\n assetId: v.number(),\n amountE18: v.optional(U128Schema),\n balanceAfterE18: v.optional(U128Schema),\n isDebit: v.boolean(),\n transferCode: v.number(),\n accountCode: v.number(),\n tsUs: WireTimestampInputSchema,\n linkId: v.optional(v.bigint()),\n flowId: v.optional(v.string()),\n source: v.optional(LedgerTransferSideSchema),\n destination: v.optional(LedgerTransferSideSchema),\n }),\n v.transform((tr) => {\n const amount = fromU128(tr.amountE18);\n const linkId = tr.linkId && tr.linkId > 0n ? tr.linkId.toString() : undefined;\n\n const output = {\n assetId: tr.assetId,\n amount: scaledToDecimalOutput(amount, E18_SCALE),\n balanceAfter:\n tr.balanceAfterE18 !== undefined\n ? scaledToDecimalOutput(fromU128(tr.balanceAfterE18), E18_SCALE)\n : undefined,\n type: requiredEnumLabel(\n TransferCodeCodec.protoToOutput,\n tr.transferCode,\n \"LedgerTransferSchema\",\n \"transfer code\",\n ),\n accountCode: requiredEnumLabel(\n AccountCodeCodec.protoToOutput,\n tr.accountCode,\n \"LedgerTransferSchema\",\n \"account code\",\n ),\n timestamp: wireTimestampToMs(tr.tsUs),\n isDebit: tr.isDebit,\n linkId,\n flowId: tr.flowId?.trim() ?? \"\",\n };\n\n return {\n ...output,\n ...(tr.source ? { source: tr.source } : {}),\n ...(tr.destination ? { destination: tr.destination } : {}),\n };\n }),\n);\n\nexport type LedgerTransfer = v.InferOutput<typeof LedgerTransferSchema>;\n\nexport const ListTransfersInputSchema = v.pipe(\n v.strictObject({\n ...AccountScopeInputEntries,\n ledger: v.optional(v.number(), 0),\n limit: v.optional(v.number()),\n reversed: v.optional(v.boolean(), false),\n timestampMin: OptionalTimestampMsToUsInputSchema,\n timestampMax: OptionalTimestampMsToUsInputSchema,\n transferCode: v.optional(\n v.pipe(\n v.picklist(TRANSFER_CODE_VALUES),\n v.transform((value) => TransferCodeCodec.inputToProto[value]),\n ),\n ),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n }),\n v.transform(({ account, timestampMin, timestampMax, ...input }) => ({\n ...input,\n tsMinUs: timestampMin,\n tsMaxUs: timestampMax,\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type ListTransfersInput = v.InferInput<typeof ListTransfersInputSchema>;\n"],"mappings":";;;;;;;;;;;AAqBA,MAAM,aAAa,EAAE,OAAO;CACxB,IAAI,EAAE,OAAO;CACb,IAAI,EAAE,OAAO;AACjB,CAAC;AAED,MAAM,2BAA2B,EAAE,MAAM;CACrC,EAAE,OAAO;CACT,EAAE,OAAO;CACT,EAAE,KACE,EAAE,OAAO,GACT,EAAE,MAAM,OAAO,GACf,EAAE,WAAW,UAAU,OAAO,KAAK,CAAC,CACxC;AACJ,CAAC;AAED,MAAM,yBAAyB,EAAE,KAC7B,EAAE,KAAKA,gBAAsB,GAC7B,EAAE,WAAW,SACT,kBAAkB,sBAAsB,eAAe,MAAM,sBAAsB,MAAM,CAC7F,CACJ;AAEA,MAAa,2BAA2B,EAAE,OAAO;CAC7C,MAAM;CACN,WAAW;CACX,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE;AACtC,CAAC;;AAKD,MAAa,uBAAuB,EAAE,KAClC,EAAE,OAAO;CACL,SAAS,EAAE,OAAO;CAClB,WAAW,EAAE,SAAS,UAAU;CAChC,iBAAiB,EAAE,SAAS,UAAU;CACtC,SAAS,EAAE,QAAQ;CACnB,cAAc,EAAE,OAAO;CACvB,aAAa,EAAE,OAAO;CACtB,MAAM;CACN,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;CAC7B,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;CAC7B,QAAQ,EAAE,SAAS,wBAAwB;CAC3C,aAAa,EAAE,SAAS,wBAAwB;AACpD,CAAC,GACD,EAAE,WAAW,OAAO;CAChB,MAAM,SAAS,SAAS,GAAG,SAAS;CACpC,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,KAAK,GAAG,OAAO,SAAS,IAAI,KAAA;CA2BpE,OAAO;EAxBH,SAAS,GAAG;EACZ,QAAQ,sBAAsB,QAAA,EAAiB;EAC/C,cACI,GAAG,oBAAoB,KAAA,IACjB,sBAAsB,SAAS,GAAG,eAAe,GAAA,EAAY,IAC7D,KAAA;EACV,MAAM,kBACF,kBAAkB,eAClB,GAAG,cACH,wBACA,eACJ;EACA,aAAa,kBACT,iBAAiB,eACjB,GAAG,aACH,wBACA,cACJ;EACA,WAAW,kBAAkB,GAAG,IAAI;EACpC,SAAS,GAAG;EACZ;EACA,QAAQ,GAAG,QAAQ,KAAK,KAAK;EAK7B,GAAI,GAAG,SAAS,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC;EACzC,GAAI,GAAG,cAAc,EAAE,aAAa,GAAG,YAAY,IAAI,CAAC;CAC5D;AACJ,CAAC,CACL;AAIA,MAAa,2BAA2B,EAAE,KACtC,EAAE,aAAa;CACX,GAAG;CACH,QAAQ,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC;CAChC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;CAC5B,UAAU,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;CACvC,cAAc;CACd,cAAc;CACd,cAAc,EAAE,SACZ,EAAE,KACE,EAAE,SAAS,oBAAoB,GAC/B,EAAE,WAAW,UAAU,kBAAkB,aAAa,MAAM,CAChE,CACJ;CACA,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;AAC1D,CAAC,GACD,EAAE,WAAW,EAAE,SAAS,cAAc,cAAc,GAAG,aAAa;CAChE,GAAG;CACH,SAAS;CACT,SAAS;CACT,cAAc,2BAA2B,OAAO;AACpD,EAAE,CACN"}
@@ -783,14 +783,33 @@ declare function createCreateTriggerInputSchema(scales: SdkScales): v.UnionSchem
783
783
  selfTradePreventionMode: SelfTradePreventionMode.EXPIRE_MAKER | SelfTradePreventionMode.EXPIRE_TAKER | SelfTradePreventionMode.EXPIRE_BOTH;
784
784
  clientTriggerId: string;
785
785
  };
786
- }>]>], undefined>;
786
+ }>, v.CheckAction<{
787
+ subaccountId: bigint | undefined;
788
+ trigger: {
789
+ strategy: {
790
+ readonly case: "ladder";
791
+ readonly value: {
792
+ readonly side: Side.BUY | Side.SELL;
793
+ readonly priceMinTicks: bigint;
794
+ readonly priceMaxTicks: bigint;
795
+ readonly levels: number;
796
+ readonly postOnly: boolean;
797
+ };
798
+ };
799
+ symbolId: number;
800
+ qtyScaled: bigint;
801
+ feeAsset: FeeAsset.QUOTE | FeeAsset.BASE;
802
+ selfTradePreventionMode: SelfTradePreventionMode.EXPIRE_MAKER | SelfTradePreventionMode.EXPIRE_TAKER | SelfTradePreventionMode.EXPIRE_BOTH;
803
+ clientTriggerId: string;
804
+ };
805
+ }, "priceMin must be less than priceMax">]>], undefined>;
787
806
  /** Public input for creating a standalone trigger. */
788
807
  type CreateTriggerInput = v.InferInput<ReturnType<typeof createCreateTriggerInputSchema>>;
789
808
  /** Public filters for listing triggers in an account scope. */
790
809
  declare const ListTriggersInputSchema: v.SchemaWithPipe<readonly [v.StrictObjectSchema<{
791
810
  readonly parentOrderId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, undefined>, v.TransformAction<string | undefined, bigint | undefined>]>;
792
811
  readonly symbolId: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 4294967295, undefined>]>, undefined>;
793
- readonly status: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["created", "armed", "running", "completed", "cancelled", "failed", "paused"], undefined>, undefined>, undefined>, v.TransformAction<("failed" | "cancelled" | "completed" | "created" | "armed" | "running" | "paused")[] | undefined, (TriggerStatus.STATUS_CREATED | TriggerStatus.STATUS_ARMED | TriggerStatus.STATUS_RUNNING | TriggerStatus.STATUS_COMPLETED | TriggerStatus.STATUS_CANCELED | TriggerStatus.STATUS_FAILED | TriggerStatus.STATUS_PAUSED)[]>]>;
812
+ readonly status: v.SchemaWithPipe<readonly [v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["created", "armed", "running", "completed", "cancelled", "failed", "paused"], undefined>, undefined>, undefined>, v.TransformAction<("cancelled" | "created" | "failed" | "completed" | "armed" | "running" | "paused")[] | undefined, (TriggerStatus.STATUS_CREATED | TriggerStatus.STATUS_ARMED | TriggerStatus.STATUS_RUNNING | TriggerStatus.STATUS_COMPLETED | TriggerStatus.STATUS_CANCELED | TriggerStatus.STATUS_FAILED | TriggerStatus.STATUS_PAUSED)[]>]>;
794
813
  readonly triggerType: v.SchemaWithPipe<readonly [v.OptionalSchema<v.PicklistSchema<readonly ["stop_loss", "take_profit", "trailing_stop", "twap", "ladder"], undefined>, undefined>, v.TransformAction<"twap" | "ladder" | "stop_loss" | "take_profit" | "trailing_stop" | undefined, TriggerType>]>;
795
814
  readonly limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.GtValueAction<number, 0, undefined>, v.MaxValueAction<number, 1000, undefined>]>, 50>;
796
815
  readonly pageToken: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction]>, "">;
@@ -899,8 +918,6 @@ declare function createModifyTriggerInputSchema(scales: SdkScales): v.SchemaWith
899
918
  }, undefined>, v.StrictObjectSchema<{
900
919
  readonly kind: v.LiteralSchema<"bps", undefined>;
901
920
  readonly bps: v.UnionSchema<[v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>, v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.GtValueAction<number, 0, undefined>]>], undefined>;
902
- }, undefined>, v.StrictObjectSchema<{
903
- readonly kind: v.LiteralSchema<"none", undefined>;
904
921
  }, undefined>], undefined>, undefined>;
905
922
  readonly account: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<["active", "main"], undefined>, v.StrictObjectSchema<{
906
923
  readonly subaccountId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>]>;
@@ -924,8 +941,6 @@ declare function createModifyTriggerInputSchema(scales: SdkScales): v.SchemaWith
924
941
  } | {
925
942
  kind: "slippage";
926
943
  slippage: string;
927
- } | {
928
- kind: "none";
929
944
  } | undefined;
930
945
  account?: "active" | "main" | {
931
946
  subaccountId: string;
@@ -949,8 +964,6 @@ declare function createModifyTriggerInputSchema(scales: SdkScales): v.SchemaWith
949
964
  } | {
950
965
  kind: "slippage";
951
966
  slippage: string;
952
- } | {
953
- kind: "none";
954
967
  } | undefined;
955
968
  account?: "active" | "main" | {
956
969
  subaccountId: string;
@@ -1001,7 +1014,7 @@ declare const ListTriggerEventsInputSchema: v.SchemaWithPipe<readonly [v.StrictO
1001
1014
  readonly triggerId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.TransformAction<string, bigint>]>;
1002
1015
  }, undefined>, v.TransformAction<{
1003
1016
  limit?: number | undefined;
1004
- eventType?: "failed" | "updated" | "fired" | "canceled" | undefined;
1017
+ eventType?: "updated" | "failed" | "fired" | "canceled" | undefined;
1005
1018
  pageToken: string;
1006
1019
  account?: "active" | "main" | {
1007
1020
  subaccountId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-input.schemas.d.ts","names":[],"sources":["../../../src/services/triggers/trigger-input.schemas.ts"],"mappings":";;;;;;iBA0VgB,+BAA+B,QAAQ,YAAS,EAAA,aAAA,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAWpD,qBAAqB,EAAE,WAAW,kBAAkB;;cAGnD,yBAAuB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgCxB,oBAAoB,EAAE,kBAAkB;cAEvC,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;KACzB,qBAAqB,EAAE,kBAAkB;cAExC,uBAAqB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;KACtB,kBAAkB,EAAE,kBAAkB;cAErC,yBAAuB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;KACxB,oBAAoB,EAAE,kBAAkB;cAEvC,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;KAUzB,qBAAqB,EAAE,kBAAkB;iBAErC,+BAA+B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwDpD,qBAAqB,EAAE,WAAW,kBAAkB;cAEnD,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;KAiB7B,yBAAyB,EAAE,kBAAkB"}
1
+ {"version":3,"file":"trigger-input.schemas.d.ts","names":[],"sources":["../../../src/services/triggers/trigger-input.schemas.ts"],"mappings":";;;;;;iBA4UgB,+BAA+B,QAAQ,YAAS,EAAA,aAAA,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAWpD,qBAAqB,EAAE,WAAW,kBAAkB;;cAGnD,yBAAuB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgCxB,oBAAoB,EAAE,kBAAkB;cAEvC,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;KACzB,qBAAqB,EAAE,kBAAkB;cAExC,uBAAqB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;KACtB,kBAAkB,EAAE,kBAAkB;cAErC,yBAAuB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;KACxB,oBAAoB,EAAE,kBAAkB;cAEvC,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;KAUzB,qBAAqB,EAAE,kBAAkB;iBAErC,+BAA+B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwDpD,qBAAqB,EAAE,WAAW,kBAAkB;cAEnD,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;KAiB7B,yBAAyB,EAAE,kBAAkB"}
@@ -1,13 +1,13 @@
1
1
  import "../../gen/orders/v1/orders_pb.js";
2
2
  import { idToBigInt } from "../../utils/base58-id.js";
3
- import { parseOptionalPositiveIntLike } from "../../utils/numbers.js";
3
+ import { parseOptionalPositiveBigIntLike, parseOptionalPositiveIntLike } from "../../utils/numbers.js";
4
4
  import { idInputSchema } from "../../shared/schemas.js";
5
- import "../../shared/wire-bounds.js";
5
+ import { PROTOBUF_INT32_MAX, PROTOBUF_INT64_MAX } from "../../shared/wire-bounds.js";
6
6
  import { BpsStringOrNumberInputSchema, NoneInputSchema, SymbolIdInputSchema } from "../shared.js";
7
7
  import { AccountScopeInputEntries, accountScopeToSubaccountId } from "../../shared/account-scope.js";
8
- import { CatalogConversionError } from "../../catalogs/types.js";
9
8
  import { positiveDecimalInputToScaled } from "../../shared/decimal-surface.js";
10
9
  import { OrderSideCodec } from "../orders/order-enums.codecs.js";
10
+ import { parseSlippageInput, parseTrailingDistanceInput } from "../trailing-oneof-inputs.js";
11
11
  import "../../gen/triggers/v1/triggers_pb.js";
12
12
  import { TRIGGER_EVENT_TYPE_VALUES, TRIGGER_STATUS_FILTER_VALUES, TRIGGER_TYPE_VALUES, TriggerEventTypeCodec, TriggerStatusCodec, TriggerTypeCodec } from "./triggers.codecs.js";
13
13
  import { BaseTriggerFieldsSchema, ConditionalExecutionInputSchema, DecimalInputStringSchema, LimitConditionalExecutionInputSchema, TriggerSideInputSchema, TwapExecutionInputSchema, buildConditionalExecution, buildTriggerIntentBase, buildTwapExecution } from "./trigger-child-order.schemas.js";
@@ -40,37 +40,22 @@ const MaxSlippageInputSchema = v.union([
40
40
  BpsStringOrNumberInputSchema,
41
41
  NoneInputSchema
42
42
  ]);
43
+ const MaxSlippagePatchInputSchema = v.union([PriceSlippageInputSchema, BpsStringOrNumberInputSchema]);
43
44
  function parseTrailingDistance(scales, distance) {
44
- if (distance.kind === "distance") return {
45
- case: "trailingDistanceTicks",
46
- value: positiveDecimalInputToScaled("trailingDistance.distance", distance.distance, scales.price())
47
- };
48
- const bps = parseOptionalPositiveIntLike(distance.bps);
49
- if (bps === void 0 || bps <= 0) throw new Error("trailingDistanceBps must be a positive integer");
50
- return {
51
- case: "trailingDistanceBps",
52
- value: bps
53
- };
45
+ return parseTrailingDistanceInput(scales, distance, "trailingDistance");
46
+ }
47
+ function parseTwapMilliseconds(value, fieldName, minimum) {
48
+ const parsed = parseOptionalPositiveBigIntLike(value);
49
+ if (parsed === void 0 || parsed < minimum || parsed > 9223372036854775807n) throw new Error(`${fieldName} must be between ${minimum} and ${PROTOBUF_INT64_MAX} milliseconds`);
50
+ return parsed;
54
51
  }
55
52
  function parseMaxSlippage(scales, slippage) {
56
- if (!slippage || slippage.kind === "none") return {
57
- case: void 0,
58
- value: void 0
59
- };
60
- if (slippage.kind === "slippage") {
61
- const ticks = positiveDecimalInputToScaled("maxSlippage.slippage", slippage.slippage, scales.price());
62
- if (ticks > 2147483647n) throw new CatalogConversionError("maxSlippage.slippage", `maxSlippage.slippage exceeds the maximum supported price distance: ${slippage.slippage}`);
63
- return {
64
- case: "maxSlippageTicks",
65
- value: Number(ticks)
66
- };
67
- }
68
- const bps = parseOptionalPositiveIntLike(slippage.bps);
69
- if (bps === void 0 || bps <= 0) throw new Error("maxSlippageBps must be a positive integer");
70
- return {
71
- case: "maxSlippageBps",
72
- value: bps
73
- };
53
+ return parseSlippageInput(scales, slippage, {
54
+ fieldName: "maxSlippage",
55
+ ticksCase: "maxSlippageTicks",
56
+ bpsCase: "maxSlippageBps",
57
+ maxBps: Number(PROTOBUF_INT32_MAX)
58
+ });
74
59
  }
75
60
  function createConditionalTriggerInputSchema(scales, triggerType) {
76
61
  const sharedEntries = {
@@ -142,16 +127,8 @@ function createTwapTriggerInputSchema(scales) {
142
127
  ...BaseTriggerFieldsSchema.entries,
143
128
  triggerType: v.literal("twap"),
144
129
  side: TriggerSideInputSchema,
145
- durationMs: v.pipe(v.union([v.pipe(v.string(), v.trim()), v.number()]), v.transform((value) => {
146
- const durationMs = parseOptionalPositiveIntLike(value);
147
- if (!durationMs || durationMs < 1e3) throw new Error("durationMs must be at least 1000ms");
148
- return BigInt(durationMs);
149
- })),
150
- sliceIntervalMs: v.pipe(v.union([v.pipe(v.string(), v.trim()), v.number()]), v.transform((value) => {
151
- const sliceIntervalMs = parseOptionalPositiveIntLike(value);
152
- if (!sliceIntervalMs || sliceIntervalMs < 100) throw new Error("sliceIntervalMs must be at least 100ms");
153
- return BigInt(sliceIntervalMs);
154
- })),
130
+ durationMs: v.pipe(v.union([v.pipe(v.string(), v.trim()), v.number()]), v.transform((value) => parseTwapMilliseconds(value, "durationMs", 1000n))),
131
+ sliceIntervalMs: v.pipe(v.union([v.pipe(v.string(), v.trim()), v.number()]), v.transform((value) => parseTwapMilliseconds(value, "sliceIntervalMs", 100n))),
155
132
  execution: TwapExecutionInputSchema
156
133
  }), v.check((input) => input.side !== 2 || input.feeAsset === 1, "SELL triggers must use the quote fee asset"), v.check((input) => input.sliceIntervalMs <= input.durationMs, "sliceIntervalMs cannot exceed durationMs"), v.transform((input) => {
157
134
  const { subaccountId, intent } = buildTriggerIntentBase(input, scales);
@@ -203,7 +180,7 @@ function createLadderTriggerInputSchema(scales) {
203
180
  }
204
181
  }
205
182
  };
206
- }));
183
+ }), v.check((output) => output.trigger.strategy.value.priceMinTicks < output.trigger.strategy.value.priceMaxTicks, "priceMin must be less than priceMax"));
207
184
  }
208
185
  /** Builds the create-trigger boundary schema using catalog scales keyed by symbol ID. */
209
186
  function createCreateTriggerInputSchema(scales) {
@@ -246,7 +223,7 @@ function createModifyTriggerInputSchema(scales) {
246
223
  limitPrice: v.optional(DecimalInputStringSchema),
247
224
  trailingDistance: v.optional(TrailingDistanceInputSchema),
248
225
  activationPrice: v.optional(DecimalInputStringSchema),
249
- maxSlippage: v.optional(MaxSlippageInputSchema)
226
+ maxSlippage: v.optional(MaxSlippagePatchInputSchema)
250
227
  }), v.check((input) => input.triggerPrice !== void 0 || input.limitPrice !== void 0 || input.trailingDistance !== void 0 || input.activationPrice !== void 0 || input.maxSlippage !== void 0, "At least one patch field is required"), v.transform(({ account, ...input }) => ({
251
228
  triggerId: input.triggerId,
252
229
  subaccountId: accountScopeToSubaccountId(account),