@polyester/sdk 0.9.0 → 0.10.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 (129) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/catalogs/decimal.js +6 -4
  3. package/dist/catalogs/decimal.js.map +1 -1
  4. package/dist/catalogs/readers.d.ts.map +1 -1
  5. package/dist/catalogs/readers.js +22 -0
  6. package/dist/catalogs/readers.js.map +1 -1
  7. package/dist/core-client.d.ts.map +1 -1
  8. package/dist/core-client.js +49 -15
  9. package/dist/core-client.js.map +1 -1
  10. package/dist/environment.d.ts.map +1 -1
  11. package/dist/environment.js +3 -2
  12. package/dist/environment.js.map +1 -1
  13. package/dist/realtime/client.d.ts.map +1 -1
  14. package/dist/realtime/client.js +13 -5
  15. package/dist/realtime/client.js.map +1 -1
  16. package/dist/realtime/ready-gated-subscription.js +68 -0
  17. package/dist/realtime/ready-gated-subscription.js.map +1 -0
  18. package/dist/realtime/snapshot-then-stream.js +19 -10
  19. package/dist/realtime/snapshot-then-stream.js.map +1 -1
  20. package/dist/server-client.d.ts +3 -1
  21. package/dist/server-client.d.ts.map +1 -1
  22. package/dist/server-client.js +9 -4
  23. package/dist/server-client.js.map +1 -1
  24. package/dist/services/auth/session.d.ts.map +1 -1
  25. package/dist/services/auth/session.js +4 -1
  26. package/dist/services/auth/session.js.map +1 -1
  27. package/dist/services/auth/token-storage.js +2 -2
  28. package/dist/services/auth/token-storage.js.map +1 -1
  29. package/dist/services/balances/balances.js +5 -8
  30. package/dist/services/balances/balances.js.map +1 -1
  31. package/dist/services/candles/candles.js +9 -12
  32. package/dist/services/candles/candles.js.map +1 -1
  33. package/dist/services/heatmap/heatmap.js +5 -8
  34. package/dist/services/heatmap/heatmap.js.map +1 -1
  35. package/dist/services/lifecycle/lifecycle.schemas.d.ts +42 -42
  36. package/dist/services/lifecycle/lifecycle.schemas.js +1 -1
  37. package/dist/services/market-data/market-data.d.ts.map +1 -1
  38. package/dist/services/market-data/market-data.js +5 -8
  39. package/dist/services/market-data/market-data.js.map +1 -1
  40. package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
  41. package/dist/services/market-data/market-data.schemas.js +3 -2
  42. package/dist/services/market-data/market-data.schemas.js.map +1 -1
  43. package/dist/services/market-overview/market-overview.d.ts.map +1 -1
  44. package/dist/services/market-overview/market-overview.js +7 -13
  45. package/dist/services/market-overview/market-overview.js.map +1 -1
  46. package/dist/services/orderbook/orderbook.d.ts.map +1 -1
  47. package/dist/services/orderbook/orderbook.js +18 -11
  48. package/dist/services/orderbook/orderbook.js.map +1 -1
  49. package/dist/services/orders/orders-batch.schemas.d.ts +193 -35
  50. package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
  51. package/dist/services/orders/orders-batch.schemas.js +27 -21
  52. package/dist/services/orders/orders-batch.schemas.js.map +1 -1
  53. package/dist/services/orders/orders-identifiers.schemas.js +6 -1
  54. package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
  55. package/dist/services/orders/orders-input.schemas.d.ts +36 -68
  56. package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
  57. package/dist/services/orders/orders-input.schemas.js +11 -12
  58. package/dist/services/orders/orders-input.schemas.js.map +1 -1
  59. package/dist/services/orders/orders-modify.schemas.d.ts +19 -43
  60. package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
  61. package/dist/services/orders/orders-modify.schemas.js +2 -4
  62. package/dist/services/orders/orders-modify.schemas.js.map +1 -1
  63. package/dist/services/orders/orders-output.schemas.d.ts +165 -27
  64. package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
  65. package/dist/services/orders/orders-output.schemas.js +1 -1
  66. package/dist/services/orders/orders-output.schemas.js.map +1 -1
  67. package/dist/services/orders/orders-risk.schemas.d.ts +13 -32
  68. package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
  69. package/dist/services/orders/orders-risk.schemas.js +59 -21
  70. package/dist/services/orders/orders-risk.schemas.js.map +1 -1
  71. package/dist/services/orders/orders.codecs.js +12 -1
  72. package/dist/services/orders/orders.codecs.js.map +1 -1
  73. package/dist/services/orders/orders.d.ts.map +1 -1
  74. package/dist/services/orders/orders.js +6 -9
  75. package/dist/services/orders/orders.js.map +1 -1
  76. package/dist/services/subaccounts/subaccounts.schemas.d.ts +2 -2
  77. package/dist/services/trades/trades.js +5 -8
  78. package/dist/services/trades/trades.js.map +1 -1
  79. package/dist/services/trailing-oneof-inputs.js +3 -3
  80. package/dist/services/trailing-oneof-inputs.js.map +1 -1
  81. package/dist/services/transfers/index.d.ts +2 -2
  82. package/dist/services/transfers/transfers.d.ts +1 -2
  83. package/dist/services/transfers/transfers.d.ts.map +1 -1
  84. package/dist/services/transfers/transfers.js +8 -13
  85. package/dist/services/transfers/transfers.js.map +1 -1
  86. package/dist/services/transfers/transfers.schemas.d.ts +5 -5
  87. package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
  88. package/dist/services/transfers/transfers.schemas.js +31 -33
  89. package/dist/services/transfers/transfers.schemas.js.map +1 -1
  90. package/dist/services/triggers/trigger-input.schemas.d.ts +22 -9
  91. package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
  92. package/dist/services/triggers/trigger-input.schemas.js +20 -43
  93. package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
  94. package/dist/services/triggers/triggers-output.schemas.d.ts +14 -14
  95. package/dist/services/triggers/triggers-output.schemas.js +5 -5
  96. package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
  97. package/dist/services/triggers/triggers.d.ts.map +1 -1
  98. package/dist/services/triggers/triggers.js +10 -23
  99. package/dist/services/triggers/triggers.js.map +1 -1
  100. package/dist/services/zipper/zipper.d.ts.map +1 -1
  101. package/dist/services/zipper/zipper.js +15 -18
  102. package/dist/services/zipper/zipper.js.map +1 -1
  103. package/dist/shared/connect-error-mapping.d.ts.map +1 -1
  104. package/dist/shared/connect-error-mapping.js +9 -2
  105. package/dist/shared/connect-error-mapping.js.map +1 -1
  106. package/dist/shared/decimal-surface.d.ts.map +1 -1
  107. package/dist/shared/decimal-surface.js +41 -18
  108. package/dist/shared/decimal-surface.js.map +1 -1
  109. package/dist/shared/transports.d.ts.map +1 -1
  110. package/dist/shared/transports.js +33 -11
  111. package/dist/shared/transports.js.map +1 -1
  112. package/dist/utils/base58-id.js +1 -2
  113. package/dist/utils/base58-id.js.map +1 -1
  114. package/dist/utils/errors.d.ts.map +1 -1
  115. package/dist/utils/errors.js +4 -3
  116. package/dist/utils/errors.js.map +1 -1
  117. package/dist/utils/event-emitter.d.ts.map +1 -1
  118. package/dist/utils/event-emitter.js +6 -3
  119. package/dist/utils/event-emitter.js.map +1 -1
  120. package/dist/utils/jwt.d.ts.map +1 -1
  121. package/dist/utils/jwt.js +2 -2
  122. package/dist/utils/jwt.js.map +1 -1
  123. package/dist/utils/numbers.js +20 -3
  124. package/dist/utils/numbers.js.map +1 -1
  125. package/dist/utils/timestamp.js +27 -16
  126. package/dist/utils/timestamp.js.map +1 -1
  127. package/dist/utils/u128.js +6 -18
  128. package/dist/utils/u128.js.map +1 -1
  129. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"orders-risk.schemas.d.ts","names":[],"sources":["../../../src/services/orders/orders-risk.schemas.ts"],"mappings":";;;;iBAkBS,2BAA2B,QAAQ,WAAW,yCAAsC,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiGpF,8BAA8B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8ExC,4BAA4B,QAAQ,YAAS,EAAA,yBAAA,EAAA,eAAA,EAAA,aAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO7C,oCAAoC,QAAQ,YAAS,EAAA,yBAAA,EAAA,aAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOzD,kBAAkB,EAAE,WAAW,kBAAkB;KACjD,gBAAgB,EAAE,WAAW,kBAAkB;KAC/C,oBAAoB,EAAE,WAAW,kBAAkB;KACnD,kBAAkB,EAAE,WAAW,kBAAkB;KAOjD;EACJ;EAAkB;;EAClB;EAAa"}
1
+ {"version":3,"file":"orders-risk.schemas.d.ts","names":[],"sources":["../../../src/services/orders/orders-risk.schemas.ts"],"mappings":";;;;;iBAuBS,2BAA2B,QAAQ,WAAW,yCAAsC,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8FpF,8BAA8B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgFxC,4BAA4B,QAAQ,YAAS,EAAA,yBAAA,EAAA,eAAA,EAAA,aAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO7C,oCAAoC,QAAQ,YAAS,EAAA,yBAAA,EAAA,aAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOzD,kBAAkB,EAAE,WAAW,kBAAkB;KACjD,gBAAgB,EAAE,WAAW,kBAAkB;KAC/C,oBAAoB,EAAE,WAAW,kBAAkB;KACnD,kBAAkB,EAAE,WAAW,kBAAkB;KAOjD;EACJ;EAAkB;;EAClB;EAAa"}
@@ -1,6 +1,11 @@
1
1
  import { RiskLimitGtcSchema, RiskMarketIocSchema } from "../../gen/orders/v1/orders_pb.js";
2
+ import { requiredEnumLabel } from "../../shared/proto-enum-codec.js";
3
+ import { formatId } from "../../utils/base58-id.js";
4
+ import { tsNsToMs } from "../../utils/time.js";
2
5
  import { BpsStringOrNumberInputSchema, NoneInputSchema, PriceDistanceInputSchema, PriceSlippageInputSchema } from "../shared.js";
3
6
  import { positiveDecimalInputToScaled, scaledToDecimalOutput } from "../../shared/decimal-surface.js";
7
+ import { AttachedRiskLegState_Status } from "../../gen/orders/v1/orders_read_pb.js";
8
+ import { AttachedRiskLegStatusCodec } from "./orders.codecs.js";
4
9
  import { parseSlippageInput, parseTrailingDistanceInput } from "../trailing-oneof-inputs.js";
5
10
  import { create } from "@bufbuild/protobuf";
6
11
  import * as v from "valibot";
@@ -27,11 +32,7 @@ function attachedTriggerInputSchema(scales, fieldPrefix) {
27
32
  };
28
33
  }));
29
34
  }
30
- const TrailingDistanceSchema = v.union([
31
- PriceDistanceInputSchema,
32
- BpsStringOrNumberInputSchema,
33
- NoneInputSchema
34
- ]);
35
+ const TrailingDistanceSchema = v.union([PriceDistanceInputSchema, BpsStringOrNumberInputSchema]);
35
36
  const MaxSlippageSchema = v.union([
36
37
  PriceSlippageInputSchema,
37
38
  BpsStringOrNumberInputSchema,
@@ -54,7 +55,8 @@ function parseMaxSlippage(scales, slippage) {
54
55
  return parseSlippageInput(scales, slippage, {
55
56
  fieldName: "trailingStop.maxSlippage",
56
57
  ticksCase: "maxSlippageTicks",
57
- bpsCase: "maxSlippageBps"
58
+ bpsCase: "maxSlippageBps",
59
+ maxBps: MAX_BPS
58
60
  });
59
61
  }
60
62
  function parseMarketMaxSlippage(scales, slippage) {
@@ -80,6 +82,7 @@ function createRiskPolicyObjectInputSchema(scales) {
80
82
  const TakeProfitInputSchema = attachedTriggerInputSchema(scales, "takeProfit");
81
83
  const StopLossInputSchema = attachedTriggerInputSchema(scales, "stopLoss");
82
84
  const TrailingStopInputSchema = createTrailingStopInputSchema(scales);
85
+ const InactiveOcoInputSchema = v.optional(v.literal(false, "oco requires takeProfit and exactly one stop leg"));
83
86
  return v.union([
84
87
  v.strictObject({
85
88
  takeProfit: TakeProfitInputSchema,
@@ -97,19 +100,19 @@ function createRiskPolicyObjectInputSchema(scales) {
97
100
  takeProfit: TakeProfitInputSchema,
98
101
  stopLoss: v.optional(v.never()),
99
102
  trailingStop: v.optional(v.never()),
100
- oco: v.optional(v.boolean())
103
+ oco: InactiveOcoInputSchema
101
104
  }),
102
105
  v.strictObject({
103
106
  takeProfit: v.optional(v.never()),
104
107
  stopLoss: StopLossInputSchema,
105
108
  trailingStop: v.optional(v.never()),
106
- oco: v.optional(v.boolean())
109
+ oco: InactiveOcoInputSchema
107
110
  }),
108
111
  v.strictObject({
109
112
  takeProfit: v.optional(v.never()),
110
113
  stopLoss: v.optional(v.never()),
111
114
  trailingStop: TrailingStopInputSchema,
112
- oco: v.optional(v.boolean())
115
+ oco: InactiveOcoInputSchema
113
116
  })
114
117
  ]);
115
118
  }
@@ -124,11 +127,10 @@ function transformRiskPolicyInput(input) {
124
127
  case: void 0,
125
128
  value: void 0
126
129
  };
127
- const oco = input.oco === true && !!input.takeProfit && stopLeg.case !== void 0;
128
130
  return {
129
131
  takeProfit: input.takeProfit,
130
132
  stopLeg,
131
- oco
133
+ oco: input.oco ?? false
132
134
  };
133
135
  }
134
136
  function createRiskPolicyInputSchema(scales) {
@@ -175,9 +177,25 @@ const ReadTrailingStopPolicySchema = v.object({
175
177
  }),
176
178
  activationPriceTicks: v.bigint()
177
179
  });
178
- const ReadAttachedRiskTakeProfitSchema = v.object({ policy: v.optional(ReadTakeProfitPolicySchema) });
179
- const ReadAttachedRiskStopLossSchema = v.object({ policy: v.optional(ReadStopLossPolicySchema) });
180
- const ReadAttachedRiskTrailingStopSchema = v.object({ policy: v.optional(ReadTrailingStopPolicySchema) });
180
+ const ReadAttachedRiskLegStateSchema = v.object({
181
+ status: v.enum(AttachedRiskLegState_Status),
182
+ armedTsNs: v.bigint(),
183
+ terminalTsNs: v.bigint(),
184
+ triggerId: v.optional(v.bigint()),
185
+ childOrderId: v.optional(v.bigint())
186
+ });
187
+ const ReadAttachedRiskTakeProfitSchema = v.object({
188
+ policy: v.optional(ReadTakeProfitPolicySchema),
189
+ state: v.optional(ReadAttachedRiskLegStateSchema)
190
+ });
191
+ const ReadAttachedRiskStopLossSchema = v.object({
192
+ policy: v.optional(ReadStopLossPolicySchema),
193
+ state: v.optional(ReadAttachedRiskLegStateSchema)
194
+ });
195
+ const ReadAttachedRiskTrailingStopSchema = v.object({
196
+ policy: v.optional(ReadTrailingStopPolicySchema),
197
+ state: v.optional(ReadAttachedRiskLegStateSchema)
198
+ });
181
199
  const ReadAttachedRiskSchema = v.object({
182
200
  takeProfit: v.optional(ReadAttachedRiskTakeProfitSchema),
183
201
  stopLoss: v.optional(ReadAttachedRiskStopLossSchema),
@@ -197,6 +215,17 @@ function formatRiskLeg(scales, leg) {
197
215
  execution: formatRiskExecution(scales, leg.child)
198
216
  };
199
217
  }
218
+ function formatRiskLegState(state) {
219
+ return {
220
+ status: requiredEnumLabel(AttachedRiskLegStatusCodec.protoToOutput, state.status, "AttachedRiskLegStateSchema", "status"),
221
+ armedTs: state.armedTsNs > 0n ? tsNsToMs(state.armedTsNs) : void 0,
222
+ armedTsNs: state.armedTsNs > 0n ? state.armedTsNs.toString() : void 0,
223
+ terminalTs: state.terminalTsNs > 0n ? tsNsToMs(state.terminalTsNs) : void 0,
224
+ terminalTsNs: state.terminalTsNs > 0n ? state.terminalTsNs.toString() : void 0,
225
+ triggerId: state.triggerId !== void 0 && state.triggerId > 0n ? formatId(state.triggerId) : void 0,
226
+ childOrderId: state.childOrderId !== void 0 && state.childOrderId > 0n ? formatId(state.childOrderId) : void 0
227
+ };
228
+ }
200
229
  function formatTrailingDistance(scales, distance) {
201
230
  if (distance.case === "trailingDistanceTicks" && typeof distance.value === "bigint") return {
202
231
  kind: "distance",
@@ -230,17 +259,26 @@ function formatMarketMaxSlippage(scales, ticks, bps) {
230
259
  }
231
260
  function formatAttachedRisk(scales, risk) {
232
261
  if (!risk) return void 0;
233
- const takeProfit = risk.takeProfit?.policy ? formatRiskLeg(scales, risk.takeProfit.policy) : void 0;
234
- const stopLoss = risk.stopLoss?.policy ? formatRiskLeg(scales, risk.stopLoss.policy) : void 0;
235
- const trailingStop = risk.trailingStop?.policy ? {
236
- trailingDistance: formatTrailingDistance(scales, risk.trailingStop.policy.trailingDistance),
237
- maxSlippage: formatTrailingMaxSlippage(scales, risk.trailingStop.policy.maxSlippage),
238
- activationPrice: risk.trailingStop.policy.activationPriceTicks > 0n ? scaledToDecimalOutput(risk.trailingStop.policy.activationPriceTicks, scales.price()) : void 0
262
+ const takeProfit = risk.takeProfit?.policy || risk.takeProfit?.state ? {
263
+ ...risk.takeProfit.policy ? formatRiskLeg(scales, risk.takeProfit.policy) : void 0,
264
+ state: risk.takeProfit.state ? formatRiskLegState(risk.takeProfit.state) : void 0
265
+ } : void 0;
266
+ const stopLoss = risk.stopLoss?.policy || risk.stopLoss?.state ? {
267
+ ...risk.stopLoss.policy ? formatRiskLeg(scales, risk.stopLoss.policy) : void 0,
268
+ state: risk.stopLoss.state ? formatRiskLegState(risk.stopLoss.state) : void 0
269
+ } : void 0;
270
+ const trailingStop = risk.trailingStop?.policy || risk.trailingStop?.state ? {
271
+ ...risk.trailingStop.policy ? {
272
+ trailingDistance: formatTrailingDistance(scales, risk.trailingStop.policy.trailingDistance),
273
+ maxSlippage: formatTrailingMaxSlippage(scales, risk.trailingStop.policy.maxSlippage),
274
+ activationPrice: risk.trailingStop.policy.activationPriceTicks > 0n ? scaledToDecimalOutput(risk.trailingStop.policy.activationPriceTicks, scales.price()) : void 0
275
+ } : void 0,
276
+ state: risk.trailingStop.state ? formatRiskLegState(risk.trailingStop.state) : void 0
239
277
  } : void 0;
240
278
  if (!takeProfit && !stopLoss && !trailingStop) return void 0;
241
279
  return {
242
280
  takeProfit,
243
- stopLoss: trailingStop ? void 0 : stopLoss,
281
+ stopLoss,
244
282
  trailingStop,
245
283
  oco: risk.oco
246
284
  };
@@ -1 +1 @@
1
- {"version":3,"file":"orders-risk.schemas.js","names":["ProtoWrite.RiskMarketIocSchema","ProtoWrite.RiskLimitGtcSchema"],"sources":["../../../src/services/orders/orders-risk.schemas.ts"],"sourcesContent":["import * as ProtoWrite from \"../../gen/orders/v1/orders_pb.js\";\nimport { create } from \"@bufbuild/protobuf\";\nimport * as v from \"valibot\";\nimport {\n BpsStringOrNumberInputSchema,\n NoneInputSchema,\n PriceDistanceInputSchema,\n PriceSlippageInputSchema,\n} from \"../shared.js\";\nimport {\n positiveDecimalInputToScaled,\n scaledToDecimalOutput,\n type SdkScales,\n} from \"../../shared/decimal-surface.js\";\nimport { parseSlippageInput, parseTrailingDistanceInput } from \"../trailing-oneof-inputs.js\";\n\nconst DecimalInputStringSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nfunction attachedTriggerInputSchema(scales: SdkScales, fieldPrefix: \"takeProfit\" | \"stopLoss\") {\n return v.pipe(\n v.strictObject({\n triggerPrice: DecimalInputStringSchema,\n execution: v.variant(\"type\", [\n v.strictObject({\n type: v.literal(\"market_ioc\"),\n }),\n v.strictObject({\n type: v.literal(\"limit_gtc\"),\n price: DecimalInputStringSchema,\n }),\n ]),\n }),\n v.transform((input) => {\n const execution: ProtoWrite.RiskExecution[\"execution\"] =\n input.execution.type === \"market_ioc\"\n ? {\n case: \"marketIoc\",\n value: create(ProtoWrite.RiskMarketIocSchema),\n }\n : {\n case: \"limitGtc\",\n value: create(ProtoWrite.RiskLimitGtcSchema, {\n priceTicks: positiveDecimalInputToScaled(\n `${fieldPrefix}.execution.price`,\n input.execution.price,\n scales.price(),\n ),\n }),\n };\n return {\n triggerPriceTicks: positiveDecimalInputToScaled(\n `${fieldPrefix}.triggerPrice`,\n input.triggerPrice,\n scales.price(),\n ),\n child: { execution },\n };\n }),\n );\n}\n\nconst TrailingDistanceSchema = v.union([\n PriceDistanceInputSchema,\n BpsStringOrNumberInputSchema,\n NoneInputSchema,\n]);\n\nconst MaxSlippageSchema = v.union([\n PriceSlippageInputSchema,\n BpsStringOrNumberInputSchema,\n NoneInputSchema,\n]);\n\nexport const MarketMaxSlippageSchema = v.union([\n PriceSlippageInputSchema,\n BpsStringOrNumberInputSchema,\n NoneInputSchema,\n]);\n\nconst MAX_BPS = 10_000;\nconst UNSET_TRAILING_STOP_MAX_SLIPPAGE: ProtoWrite.TrailingStopPolicy[\"maxSlippage\"] = {\n case: undefined,\n value: undefined,\n};\n\nfunction parseTrailingDistance(\n scales: SdkScales,\n distance: v.InferOutput<typeof TrailingDistanceSchema>,\n): ProtoWrite.TrailingStopPolicy[\"trailingDistance\"] {\n return parseTrailingDistanceInput(scales, distance, \"trailingStop.trailingDistance\");\n}\n\nfunction parseMaxSlippage(\n scales: SdkScales,\n slippage: v.InferOutput<typeof MaxSlippageSchema>,\n): ProtoWrite.TrailingStopPolicy[\"maxSlippage\"] {\n return parseSlippageInput(scales, slippage, {\n fieldName: \"trailingStop.maxSlippage\",\n ticksCase: \"maxSlippageTicks\",\n bpsCase: \"maxSlippageBps\",\n });\n}\n\nexport function parseMarketMaxSlippage(\n scales: SdkScales,\n slippage: v.InferOutput<typeof MarketMaxSlippageSchema> | undefined,\n): ProtoWrite.MarketIoc[\"maxSlippage\"] {\n return parseSlippageInput(scales, slippage, {\n fieldName: \"execution.maxSlippage\",\n ticksCase: \"maxSlippageTicks\",\n bpsCase: \"maxSlippageBps\",\n maxBps: MAX_BPS,\n });\n}\n\nfunction createTrailingStopInputSchema(scales: SdkScales) {\n return v.pipe(\n v.strictObject({\n trailingDistance: TrailingDistanceSchema,\n maxSlippage: v.optional(MaxSlippageSchema),\n activationPrice: v.optional(DecimalInputStringSchema),\n }),\n v.transform((input) => ({\n trailingDistance: parseTrailingDistance(scales, input.trailingDistance),\n maxSlippage: input.maxSlippage\n ? parseMaxSlippage(scales, input.maxSlippage)\n : UNSET_TRAILING_STOP_MAX_SLIPPAGE,\n activationPriceTicks:\n input.activationPrice === undefined\n ? 0n\n : positiveDecimalInputToScaled(\n \"trailingStop.activationPrice\",\n input.activationPrice,\n scales.price(),\n ),\n })),\n );\n}\n\nfunction createRiskPolicyObjectInputSchema(scales: SdkScales) {\n const TakeProfitInputSchema = attachedTriggerInputSchema(scales, \"takeProfit\");\n const StopLossInputSchema = attachedTriggerInputSchema(scales, \"stopLoss\");\n const TrailingStopInputSchema = createTrailingStopInputSchema(scales);\n return v.union([\n v.strictObject({\n takeProfit: TakeProfitInputSchema,\n stopLoss: StopLossInputSchema,\n trailingStop: v.optional(v.never()),\n oco: v.optional(v.boolean()),\n }),\n v.strictObject({\n takeProfit: TakeProfitInputSchema,\n stopLoss: v.optional(v.never()),\n trailingStop: TrailingStopInputSchema,\n oco: v.optional(v.boolean()),\n }),\n v.strictObject({\n takeProfit: TakeProfitInputSchema,\n stopLoss: v.optional(v.never()),\n trailingStop: v.optional(v.never()),\n oco: v.optional(v.boolean()),\n }),\n v.strictObject({\n takeProfit: v.optional(v.never()),\n stopLoss: StopLossInputSchema,\n trailingStop: v.optional(v.never()),\n oco: v.optional(v.boolean()),\n }),\n v.strictObject({\n takeProfit: v.optional(v.never()),\n stopLoss: v.optional(v.never()),\n trailingStop: TrailingStopInputSchema,\n oco: v.optional(v.boolean()),\n }),\n ]);\n}\n\ntype RiskPolicyObjectInput = v.InferOutput<ReturnType<typeof createRiskPolicyObjectInputSchema>>;\n\nfunction transformRiskPolicyInput(input: RiskPolicyObjectInput) {\n const stopLeg = input.stopLoss\n ? ({ case: \"stopLoss\", value: input.stopLoss } as const)\n : input.trailingStop\n ? ({ case: \"trailingStop\", value: input.trailingStop } as const)\n : ({ case: undefined, value: undefined } as const);\n const oco = input.oco === true && !!input.takeProfit && stopLeg.case !== undefined;\n return {\n takeProfit: input.takeProfit,\n stopLeg,\n oco,\n };\n}\n\nexport function createRiskPolicyInputSchema(scales: SdkScales) {\n return v.pipe(\n v.optional(createRiskPolicyObjectInputSchema(scales)),\n v.transform((input) => (input ? transformRiskPolicyInput(input) : undefined)),\n );\n}\n\nexport function createRequiredRiskPolicyInputSchema(scales: SdkScales) {\n return v.pipe(\n createRiskPolicyObjectInputSchema(scales),\n v.transform((input) => transformRiskPolicyInput(input)),\n );\n}\n\nexport type TakeProfitInput = v.InferInput<ReturnType<typeof attachedTriggerInputSchema>>;\nexport type StopLossInput = v.InferInput<ReturnType<typeof attachedTriggerInputSchema>>;\nexport type TrailingStopInput = v.InferInput<ReturnType<typeof createTrailingStopInputSchema>>;\nexport type RiskPolicyInput = v.InferInput<ReturnType<typeof createRiskPolicyInputSchema>>;\n\ntype TrailingDistance =\n | { kind: \"distance\"; distance: string }\n | { kind: \"bps\"; bps: number }\n | { kind: \"none\" };\ntype TrailingMaxSlippage = { kind: \"slippage\"; slippage: string } | { kind: \"bps\"; bps: number };\nexport type MarketMaxSlippage =\n | { kind: \"slippage\"; slippage: string }\n | { kind: \"bps\"; bps: number };\n\nconst ReadRiskExecutionSchema = v.object({\n execution: v.variant(\"case\", [\n v.object({\n case: v.literal(\"marketIoc\"),\n value: v.object({}),\n }),\n v.object({\n case: v.literal(\"limitGtc\"),\n value: v.object({\n priceTicks: v.bigint(),\n }),\n }),\n ]),\n});\n\nconst ReadTakeProfitPolicySchema = v.object({\n triggerPriceTicks: v.bigint(),\n child: ReadRiskExecutionSchema,\n});\n\nconst ReadStopLossPolicySchema = v.object({\n triggerPriceTicks: v.bigint(),\n child: ReadRiskExecutionSchema,\n});\n\nconst ReadTrailingStopPolicySchema = v.object({\n trailingDistance: v.object({\n case: v.optional(\n v.union([\n v.literal(\"trailingDistanceTicks\"),\n v.literal(\"trailingDistanceBps\"),\n v.undefined(),\n ]),\n ),\n value: v.optional(v.union([v.bigint(), v.number(), v.undefined()])),\n }),\n maxSlippage: v.object({\n case: v.union([v.literal(\"maxSlippageTicks\"), v.literal(\"maxSlippageBps\"), v.undefined()]),\n value: v.optional(v.union([v.number(), v.undefined()])),\n }),\n activationPriceTicks: v.bigint(),\n});\n\nconst ReadAttachedRiskTakeProfitSchema = v.object({\n policy: v.optional(ReadTakeProfitPolicySchema),\n});\n\nconst ReadAttachedRiskStopLossSchema = v.object({\n policy: v.optional(ReadStopLossPolicySchema),\n});\n\nconst ReadAttachedRiskTrailingStopSchema = v.object({\n policy: v.optional(ReadTrailingStopPolicySchema),\n});\n\nexport const ReadAttachedRiskSchema = v.object({\n takeProfit: v.optional(ReadAttachedRiskTakeProfitSchema),\n stopLoss: v.optional(ReadAttachedRiskStopLossSchema),\n trailingStop: v.optional(ReadAttachedRiskTrailingStopSchema),\n oco: v.optional(v.boolean(), false),\n});\n\nfunction formatRiskExecution(\n scales: SdkScales,\n child: v.InferOutput<typeof ReadRiskExecutionSchema>,\n) {\n if (child.execution.case === \"marketIoc\") {\n return { type: \"market_ioc\" } as const;\n }\n return {\n type: \"limit_gtc\",\n price: scaledToDecimalOutput(child.execution.value.priceTicks, scales.price()),\n } as const;\n}\n\nfunction formatRiskLeg(\n scales: SdkScales,\n leg:\n | v.InferOutput<typeof ReadTakeProfitPolicySchema>\n | v.InferOutput<typeof ReadStopLossPolicySchema>,\n) {\n return {\n triggerPrice: scaledToDecimalOutput(leg.triggerPriceTicks, scales.price()),\n execution: formatRiskExecution(scales, leg.child),\n };\n}\n\nfunction formatTrailingDistance(\n scales: SdkScales,\n distance: v.InferOutput<typeof ReadTrailingStopPolicySchema>[\"trailingDistance\"],\n): TrailingDistance {\n if (distance.case === \"trailingDistanceTicks\" && typeof distance.value === \"bigint\") {\n return {\n kind: \"distance\",\n distance: scaledToDecimalOutput(distance.value, scales.price()),\n };\n }\n if (distance.case === \"trailingDistanceBps\" && typeof distance.value === \"number\") {\n return { kind: \"bps\", bps: distance.value };\n }\n return { kind: \"none\" };\n}\n\nfunction formatTrailingMaxSlippage(\n scales: SdkScales,\n slippage: v.InferOutput<typeof ReadTrailingStopPolicySchema>[\"maxSlippage\"],\n): TrailingMaxSlippage | undefined {\n if (slippage.case === \"maxSlippageTicks\" && typeof slippage.value === \"number\") {\n return {\n kind: \"slippage\",\n slippage: scaledToDecimalOutput(BigInt(slippage.value), scales.price()),\n };\n }\n if (slippage.case === \"maxSlippageBps\" && typeof slippage.value === \"number\") {\n return { kind: \"bps\", bps: slippage.value };\n }\n return undefined;\n}\n\nexport function formatMarketMaxSlippage(\n scales: SdkScales,\n ticks: number,\n bps: number,\n): MarketMaxSlippage | undefined {\n if (ticks > 0) {\n return { kind: \"slippage\", slippage: scaledToDecimalOutput(BigInt(ticks), scales.price()) };\n }\n if (bps > 0) {\n return { kind: \"bps\", bps };\n }\n return undefined;\n}\n\nexport function formatAttachedRisk(\n scales: SdkScales,\n risk: v.InferOutput<typeof ReadAttachedRiskSchema> | undefined,\n) {\n if (!risk) return undefined;\n\n const takeProfit = risk.takeProfit?.policy\n ? formatRiskLeg(scales, risk.takeProfit.policy)\n : undefined;\n const stopLoss = risk.stopLoss?.policy\n ? formatRiskLeg(scales, risk.stopLoss.policy)\n : undefined;\n const trailingStop = risk.trailingStop?.policy\n ? {\n trailingDistance: formatTrailingDistance(\n scales,\n risk.trailingStop.policy.trailingDistance,\n ),\n maxSlippage: formatTrailingMaxSlippage(scales, risk.trailingStop.policy.maxSlippage),\n activationPrice:\n risk.trailingStop.policy.activationPriceTicks > 0n\n ? scaledToDecimalOutput(\n risk.trailingStop.policy.activationPriceTicks,\n scales.price(),\n )\n : undefined,\n }\n : undefined;\n\n if (!takeProfit && !stopLoss && !trailingStop) return undefined;\n\n const effectiveStopLoss = trailingStop ? undefined : stopLoss;\n\n return {\n takeProfit,\n stopLoss: effectiveStopLoss,\n trailingStop,\n oco: risk.oco,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"orders-risk.schemas.js","names":["ProtoWrite.RiskMarketIocSchema","ProtoWrite.RiskLimitGtcSchema","ProtoRead.AttachedRiskLegState_Status"],"sources":["../../../src/services/orders/orders-risk.schemas.ts"],"sourcesContent":["import * as ProtoWrite from \"../../gen/orders/v1/orders_pb.js\";\nimport * as ProtoRead from \"../../gen/orders/v1/orders_read_pb.js\";\nimport { create } from \"@bufbuild/protobuf\";\nimport * as v from \"valibot\";\nimport {\n BpsStringOrNumberInputSchema,\n NoneInputSchema,\n PriceDistanceInputSchema,\n PriceSlippageInputSchema,\n} from \"../shared.js\";\nimport {\n positiveDecimalInputToScaled,\n scaledToDecimalOutput,\n type SdkScales,\n} from \"../../shared/decimal-surface.js\";\nimport { parseSlippageInput, parseTrailingDistanceInput } from \"../trailing-oneof-inputs.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { formatId } from \"../../utils/base58-id.js\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport { AttachedRiskLegStatusCodec } from \"./orders.codecs.js\";\n\nconst DecimalInputStringSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nfunction attachedTriggerInputSchema(scales: SdkScales, fieldPrefix: \"takeProfit\" | \"stopLoss\") {\n return v.pipe(\n v.strictObject({\n triggerPrice: DecimalInputStringSchema,\n execution: v.variant(\"type\", [\n v.strictObject({\n type: v.literal(\"market_ioc\"),\n }),\n v.strictObject({\n type: v.literal(\"limit_gtc\"),\n price: DecimalInputStringSchema,\n }),\n ]),\n }),\n v.transform((input) => {\n const execution: ProtoWrite.RiskExecution[\"execution\"] =\n input.execution.type === \"market_ioc\"\n ? {\n case: \"marketIoc\",\n value: create(ProtoWrite.RiskMarketIocSchema),\n }\n : {\n case: \"limitGtc\",\n value: create(ProtoWrite.RiskLimitGtcSchema, {\n priceTicks: positiveDecimalInputToScaled(\n `${fieldPrefix}.execution.price`,\n input.execution.price,\n scales.price(),\n ),\n }),\n };\n return {\n triggerPriceTicks: positiveDecimalInputToScaled(\n `${fieldPrefix}.triggerPrice`,\n input.triggerPrice,\n scales.price(),\n ),\n child: { execution },\n };\n }),\n );\n}\n\nconst TrailingDistanceSchema = v.union([PriceDistanceInputSchema, BpsStringOrNumberInputSchema]);\n\nconst MaxSlippageSchema = v.union([\n PriceSlippageInputSchema,\n BpsStringOrNumberInputSchema,\n NoneInputSchema,\n]);\n\nexport const MarketMaxSlippageSchema = v.union([\n PriceSlippageInputSchema,\n BpsStringOrNumberInputSchema,\n NoneInputSchema,\n]);\n\nconst MAX_BPS = 10_000;\nconst UNSET_TRAILING_STOP_MAX_SLIPPAGE: ProtoWrite.TrailingStopPolicy[\"maxSlippage\"] = {\n case: undefined,\n value: undefined,\n};\n\nfunction parseTrailingDistance(\n scales: SdkScales,\n distance: v.InferOutput<typeof TrailingDistanceSchema>,\n): ProtoWrite.TrailingStopPolicy[\"trailingDistance\"] {\n return parseTrailingDistanceInput(scales, distance, \"trailingStop.trailingDistance\");\n}\n\nfunction parseMaxSlippage(\n scales: SdkScales,\n slippage: v.InferOutput<typeof MaxSlippageSchema>,\n): ProtoWrite.TrailingStopPolicy[\"maxSlippage\"] {\n return parseSlippageInput(scales, slippage, {\n fieldName: \"trailingStop.maxSlippage\",\n ticksCase: \"maxSlippageTicks\",\n bpsCase: \"maxSlippageBps\",\n maxBps: MAX_BPS,\n });\n}\n\nexport function parseMarketMaxSlippage(\n scales: SdkScales,\n slippage: v.InferOutput<typeof MarketMaxSlippageSchema> | undefined,\n): ProtoWrite.MarketIoc[\"maxSlippage\"] {\n return parseSlippageInput(scales, slippage, {\n fieldName: \"execution.maxSlippage\",\n ticksCase: \"maxSlippageTicks\",\n bpsCase: \"maxSlippageBps\",\n maxBps: MAX_BPS,\n });\n}\n\nfunction createTrailingStopInputSchema(scales: SdkScales) {\n return v.pipe(\n v.strictObject({\n trailingDistance: TrailingDistanceSchema,\n maxSlippage: v.optional(MaxSlippageSchema),\n activationPrice: v.optional(DecimalInputStringSchema),\n }),\n v.transform((input) => ({\n trailingDistance: parseTrailingDistance(scales, input.trailingDistance),\n maxSlippage: input.maxSlippage\n ? parseMaxSlippage(scales, input.maxSlippage)\n : UNSET_TRAILING_STOP_MAX_SLIPPAGE,\n activationPriceTicks:\n input.activationPrice === undefined\n ? 0n\n : positiveDecimalInputToScaled(\n \"trailingStop.activationPrice\",\n input.activationPrice,\n scales.price(),\n ),\n })),\n );\n}\n\nfunction createRiskPolicyObjectInputSchema(scales: SdkScales) {\n const TakeProfitInputSchema = attachedTriggerInputSchema(scales, \"takeProfit\");\n const StopLossInputSchema = attachedTriggerInputSchema(scales, \"stopLoss\");\n const TrailingStopInputSchema = createTrailingStopInputSchema(scales);\n const InactiveOcoInputSchema = v.optional(\n v.literal(false, \"oco requires takeProfit and exactly one stop leg\"),\n );\n return v.union([\n v.strictObject({\n takeProfit: TakeProfitInputSchema,\n stopLoss: StopLossInputSchema,\n trailingStop: v.optional(v.never()),\n oco: v.optional(v.boolean()),\n }),\n v.strictObject({\n takeProfit: TakeProfitInputSchema,\n stopLoss: v.optional(v.never()),\n trailingStop: TrailingStopInputSchema,\n oco: v.optional(v.boolean()),\n }),\n v.strictObject({\n takeProfit: TakeProfitInputSchema,\n stopLoss: v.optional(v.never()),\n trailingStop: v.optional(v.never()),\n oco: InactiveOcoInputSchema,\n }),\n v.strictObject({\n takeProfit: v.optional(v.never()),\n stopLoss: StopLossInputSchema,\n trailingStop: v.optional(v.never()),\n oco: InactiveOcoInputSchema,\n }),\n v.strictObject({\n takeProfit: v.optional(v.never()),\n stopLoss: v.optional(v.never()),\n trailingStop: TrailingStopInputSchema,\n oco: InactiveOcoInputSchema,\n }),\n ]);\n}\n\ntype RiskPolicyObjectInput = v.InferOutput<ReturnType<typeof createRiskPolicyObjectInputSchema>>;\n\nfunction transformRiskPolicyInput(input: RiskPolicyObjectInput) {\n const stopLeg = input.stopLoss\n ? ({ case: \"stopLoss\", value: input.stopLoss } as const)\n : input.trailingStop\n ? ({ case: \"trailingStop\", value: input.trailingStop } as const)\n : ({ case: undefined, value: undefined } as const);\n return {\n takeProfit: input.takeProfit,\n stopLeg,\n oco: input.oco ?? false,\n };\n}\n\nexport function createRiskPolicyInputSchema(scales: SdkScales) {\n return v.pipe(\n v.optional(createRiskPolicyObjectInputSchema(scales)),\n v.transform((input) => (input ? transformRiskPolicyInput(input) : undefined)),\n );\n}\n\nexport function createRequiredRiskPolicyInputSchema(scales: SdkScales) {\n return v.pipe(\n createRiskPolicyObjectInputSchema(scales),\n v.transform((input) => transformRiskPolicyInput(input)),\n );\n}\n\nexport type TakeProfitInput = v.InferInput<ReturnType<typeof attachedTriggerInputSchema>>;\nexport type StopLossInput = v.InferInput<ReturnType<typeof attachedTriggerInputSchema>>;\nexport type TrailingStopInput = v.InferInput<ReturnType<typeof createTrailingStopInputSchema>>;\nexport type RiskPolicyInput = v.InferInput<ReturnType<typeof createRiskPolicyInputSchema>>;\n\ntype TrailingDistance =\n | { kind: \"distance\"; distance: string }\n | { kind: \"bps\"; bps: number }\n | { kind: \"none\" };\ntype TrailingMaxSlippage = { kind: \"slippage\"; slippage: string } | { kind: \"bps\"; bps: number };\nexport type MarketMaxSlippage =\n | { kind: \"slippage\"; slippage: string }\n | { kind: \"bps\"; bps: number };\n\nconst ReadRiskExecutionSchema = v.object({\n execution: v.variant(\"case\", [\n v.object({\n case: v.literal(\"marketIoc\"),\n value: v.object({}),\n }),\n v.object({\n case: v.literal(\"limitGtc\"),\n value: v.object({\n priceTicks: v.bigint(),\n }),\n }),\n ]),\n});\n\nconst ReadTakeProfitPolicySchema = v.object({\n triggerPriceTicks: v.bigint(),\n child: ReadRiskExecutionSchema,\n});\n\nconst ReadStopLossPolicySchema = v.object({\n triggerPriceTicks: v.bigint(),\n child: ReadRiskExecutionSchema,\n});\n\nconst ReadTrailingStopPolicySchema = v.object({\n trailingDistance: v.object({\n case: v.optional(\n v.union([\n v.literal(\"trailingDistanceTicks\"),\n v.literal(\"trailingDistanceBps\"),\n v.undefined(),\n ]),\n ),\n value: v.optional(v.union([v.bigint(), v.number(), v.undefined()])),\n }),\n maxSlippage: v.object({\n case: v.union([v.literal(\"maxSlippageTicks\"), v.literal(\"maxSlippageBps\"), v.undefined()]),\n value: v.optional(v.union([v.number(), v.undefined()])),\n }),\n activationPriceTicks: v.bigint(),\n});\n\nconst ReadAttachedRiskLegStateSchema = v.object({\n status: v.enum(ProtoRead.AttachedRiskLegState_Status),\n armedTsNs: v.bigint(),\n terminalTsNs: v.bigint(),\n triggerId: v.optional(v.bigint()),\n childOrderId: v.optional(v.bigint()),\n});\n\nconst ReadAttachedRiskTakeProfitSchema = v.object({\n policy: v.optional(ReadTakeProfitPolicySchema),\n state: v.optional(ReadAttachedRiskLegStateSchema),\n});\n\nconst ReadAttachedRiskStopLossSchema = v.object({\n policy: v.optional(ReadStopLossPolicySchema),\n state: v.optional(ReadAttachedRiskLegStateSchema),\n});\n\nconst ReadAttachedRiskTrailingStopSchema = v.object({\n policy: v.optional(ReadTrailingStopPolicySchema),\n state: v.optional(ReadAttachedRiskLegStateSchema),\n});\n\nexport const ReadAttachedRiskSchema = v.object({\n takeProfit: v.optional(ReadAttachedRiskTakeProfitSchema),\n stopLoss: v.optional(ReadAttachedRiskStopLossSchema),\n trailingStop: v.optional(ReadAttachedRiskTrailingStopSchema),\n oco: v.optional(v.boolean(), false),\n});\n\nfunction formatRiskExecution(\n scales: SdkScales,\n child: v.InferOutput<typeof ReadRiskExecutionSchema>,\n) {\n if (child.execution.case === \"marketIoc\") {\n return { type: \"market_ioc\" } as const;\n }\n return {\n type: \"limit_gtc\",\n price: scaledToDecimalOutput(child.execution.value.priceTicks, scales.price()),\n } as const;\n}\n\nfunction formatRiskLeg(\n scales: SdkScales,\n leg:\n | v.InferOutput<typeof ReadTakeProfitPolicySchema>\n | v.InferOutput<typeof ReadStopLossPolicySchema>,\n) {\n return {\n triggerPrice: scaledToDecimalOutput(leg.triggerPriceTicks, scales.price()),\n execution: formatRiskExecution(scales, leg.child),\n };\n}\n\nfunction formatRiskLegState(state: v.InferOutput<typeof ReadAttachedRiskLegStateSchema>) {\n return {\n status: requiredEnumLabel(\n AttachedRiskLegStatusCodec.protoToOutput,\n state.status,\n \"AttachedRiskLegStateSchema\",\n \"status\",\n ),\n armedTs: state.armedTsNs > 0n ? tsNsToMs(state.armedTsNs) : undefined,\n armedTsNs: state.armedTsNs > 0n ? state.armedTsNs.toString() : undefined,\n terminalTs: state.terminalTsNs > 0n ? tsNsToMs(state.terminalTsNs) : undefined,\n terminalTsNs: state.terminalTsNs > 0n ? state.terminalTsNs.toString() : undefined,\n triggerId:\n state.triggerId !== undefined && state.triggerId > 0n\n ? formatId(state.triggerId)\n : undefined,\n childOrderId:\n state.childOrderId !== undefined && state.childOrderId > 0n\n ? formatId(state.childOrderId)\n : undefined,\n };\n}\n\nfunction formatTrailingDistance(\n scales: SdkScales,\n distance: v.InferOutput<typeof ReadTrailingStopPolicySchema>[\"trailingDistance\"],\n): TrailingDistance {\n if (distance.case === \"trailingDistanceTicks\" && typeof distance.value === \"bigint\") {\n return {\n kind: \"distance\",\n distance: scaledToDecimalOutput(distance.value, scales.price()),\n };\n }\n if (distance.case === \"trailingDistanceBps\" && typeof distance.value === \"number\") {\n return { kind: \"bps\", bps: distance.value };\n }\n return { kind: \"none\" };\n}\n\nfunction formatTrailingMaxSlippage(\n scales: SdkScales,\n slippage: v.InferOutput<typeof ReadTrailingStopPolicySchema>[\"maxSlippage\"],\n): TrailingMaxSlippage | undefined {\n if (slippage.case === \"maxSlippageTicks\" && typeof slippage.value === \"number\") {\n return {\n kind: \"slippage\",\n slippage: scaledToDecimalOutput(BigInt(slippage.value), scales.price()),\n };\n }\n if (slippage.case === \"maxSlippageBps\" && typeof slippage.value === \"number\") {\n return { kind: \"bps\", bps: slippage.value };\n }\n return undefined;\n}\n\nexport function formatMarketMaxSlippage(\n scales: SdkScales,\n ticks: number,\n bps: number,\n): MarketMaxSlippage | undefined {\n if (ticks > 0) {\n return { kind: \"slippage\", slippage: scaledToDecimalOutput(BigInt(ticks), scales.price()) };\n }\n if (bps > 0) {\n return { kind: \"bps\", bps };\n }\n return undefined;\n}\n\nexport function formatAttachedRisk(\n scales: SdkScales,\n risk: v.InferOutput<typeof ReadAttachedRiskSchema> | undefined,\n) {\n if (!risk) return undefined;\n\n const takeProfit =\n risk.takeProfit?.policy || risk.takeProfit?.state\n ? {\n ...(risk.takeProfit.policy\n ? formatRiskLeg(scales, risk.takeProfit.policy)\n : undefined),\n state: risk.takeProfit.state\n ? formatRiskLegState(risk.takeProfit.state)\n : undefined,\n }\n : undefined;\n const stopLoss =\n risk.stopLoss?.policy || risk.stopLoss?.state\n ? {\n ...(risk.stopLoss.policy\n ? formatRiskLeg(scales, risk.stopLoss.policy)\n : undefined),\n state: risk.stopLoss.state ? formatRiskLegState(risk.stopLoss.state) : undefined,\n }\n : undefined;\n const trailingStop =\n risk.trailingStop?.policy || risk.trailingStop?.state\n ? {\n ...(risk.trailingStop.policy\n ? {\n trailingDistance: formatTrailingDistance(\n scales,\n risk.trailingStop.policy.trailingDistance,\n ),\n maxSlippage: formatTrailingMaxSlippage(\n scales,\n risk.trailingStop.policy.maxSlippage,\n ),\n activationPrice:\n risk.trailingStop.policy.activationPriceTicks > 0n\n ? scaledToDecimalOutput(\n risk.trailingStop.policy.activationPriceTicks,\n scales.price(),\n )\n : undefined,\n }\n : undefined),\n state: risk.trailingStop.state\n ? formatRiskLegState(risk.trailingStop.state)\n : undefined,\n }\n : undefined;\n\n if (!takeProfit && !stopLoss && !trailingStop) return undefined;\n\n return {\n takeProfit,\n stopLoss,\n trailingStop,\n oco: risk.oco,\n };\n}\n"],"mappings":"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"}
@@ -41,6 +41,17 @@ const OrderTriggerTypeCodec = { protoToOutput: {
41
41
  [4]: "twap",
42
42
  [5]: "ladder"
43
43
  } };
44
+ const AttachedRiskLegStatusCodec = { protoToOutput: {
45
+ [0]: "unspecified",
46
+ [1]: "not_configured",
47
+ [2]: "created",
48
+ [3]: "armed",
49
+ [4]: "running",
50
+ [5]: "completed",
51
+ [6]: "canceled",
52
+ [7]: "failed",
53
+ [8]: "paused"
54
+ } };
44
55
  const ModifyBehaviorCodec = { inputToProto: {
45
56
  AMEND_OR_REPLACE: 1,
46
57
  AMEND_ONLY: 2,
@@ -70,6 +81,6 @@ const BatchReplacePhaseCodec = { protoToOutput: {
70
81
  [4]: "terminal"
71
82
  } };
72
83
  //#endregion
73
- export { BatchReplaceAdmissionStatusCodec, BatchReplaceItemAdmissionStatusCodec, BatchReplacePhaseCodec, FEE_ASSET_VALUES, FeeAssetCodec, MODIFY_BEHAVIOR_VALUES, ModifyActionCodec, ModifyBehaviorCodec, ORDER_STATUS_FILTER_VALUES, OrderOriginScopeCodec, OrderSideCodec, OrderStatusCodec, OrderStatusFilterCodec, OrderTriggerTypeCodec, OrderTypeCodec, SELF_TRADE_PREVENTION_MODE_VALUES, SelfTradePreventionModeCodec, TimeInForceCodec };
84
+ export { AttachedRiskLegStatusCodec, BatchReplaceAdmissionStatusCodec, BatchReplaceItemAdmissionStatusCodec, BatchReplacePhaseCodec, FEE_ASSET_VALUES, FeeAssetCodec, MODIFY_BEHAVIOR_VALUES, ModifyActionCodec, ModifyBehaviorCodec, ORDER_STATUS_FILTER_VALUES, OrderOriginScopeCodec, OrderSideCodec, OrderStatusCodec, OrderStatusFilterCodec, OrderTriggerTypeCodec, OrderTypeCodec, SELF_TRADE_PREVENTION_MODE_VALUES, SelfTradePreventionModeCodec, TimeInForceCodec };
74
85
 
75
86
  //# sourceMappingURL=orders.codecs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orders.codecs.js","names":[],"sources":["../../../src/services/orders/orders.codecs.ts"],"sourcesContent":["import * as ProtoRead from \"../../gen/orders/v1/orders_read_pb.js\";\nimport * as ProtoWrite from \"../../gen/orders/v1/orders_pb.js\";\nimport type { InputToProto, ProtoToOutput } from \"../../utils/types.js\";\nexport {\n FEE_ASSET_VALUES,\n FeeAssetCodec,\n type FeeAssetValue,\n ORDER_SIDE_VALUES,\n ORDER_TYPE_VALUES,\n OrderSideCodec,\n type OrderSideValue,\n OrderTypeCodec,\n type OrderTypeValue,\n SELF_TRADE_PREVENTION_MODE_VALUES,\n SelfTradePreventionModeCodec,\n type SelfTradePreventionModeValue,\n TIME_IN_FORCE_OUTPUT_VALUES,\n TIME_IN_FORCE_VALUES,\n TimeInForceCodec,\n type TimeInForceOutputValue,\n type TimeInForceValue,\n TRIGGER_PRICE_SOURCE_VALUES,\n TriggerPriceSourceCodec,\n type TriggerPriceSourceValue,\n} from \"./order-enums.codecs.js\";\n\nexport const ORDER_STATUS_FILTER_VALUES = [\"FILLED\", \"CANCELED\", \"REJECTED\"] as const;\nexport type OrderStatusFilterValue = (typeof ORDER_STATUS_FILTER_VALUES)[number];\n\nexport const ORDER_STATUS_VALUES = [\n \"pending\",\n \"pending_cancel\",\n \"working\",\n \"filled\",\n \"canceled\",\n \"rejected\",\n] as const;\nexport type OrderStatusValue = (typeof ORDER_STATUS_VALUES)[number];\n\nexport const ORDER_ORIGIN_SCOPE_VALUES = [\n \"direct\",\n \"attached_risk\",\n \"standalone_trigger\",\n \"system\",\n] as const;\nexport type OrderOriginScope = (typeof ORDER_ORIGIN_SCOPE_VALUES)[number];\n\nexport const ORDER_TRIGGER_TYPE_VALUES = [\n \"unspecified\",\n \"stop_loss\",\n \"take_profit\",\n \"trailing_stop\",\n \"twap\",\n \"ladder\",\n] as const;\nexport type OrderTriggerType = (typeof ORDER_TRIGGER_TYPE_VALUES)[number];\n\nexport const MODIFY_BEHAVIOR_VALUES = [\"AMEND_OR_REPLACE\", \"AMEND_ONLY\", \"REPLACE_ONLY\"] as const;\nexport type ModifyBehaviorValue = (typeof MODIFY_BEHAVIOR_VALUES)[number];\n\nexport const MODIFY_ACTION_VALUES = [\"AMENDED\", \"REPLACED\"] as const;\nexport type ModifyActionValue = (typeof MODIFY_ACTION_VALUES)[number];\n\nexport const BATCH_REPLACE_ADMISSION_STATUS_VALUES = [\n \"admitted\",\n \"partially_admitted\",\n \"rejected\",\n] as const;\nexport type BatchReplaceAdmissionStatusValue =\n (typeof BATCH_REPLACE_ADMISSION_STATUS_VALUES)[number];\n\nexport const BATCH_REPLACE_ITEM_ADMISSION_STATUS_VALUES = [\"admitted\", \"rejected\"] as const;\nexport type BatchReplaceItemAdmissionStatusValue =\n (typeof BATCH_REPLACE_ITEM_ADMISSION_STATUS_VALUES)[number];\n\nexport const BATCH_REPLACE_PHASE_VALUES = [\"admitted\", \"working\", \"rejected\", \"terminal\"] as const;\nexport type BatchReplacePhaseValue = (typeof BATCH_REPLACE_PHASE_VALUES)[number];\n\nexport const OrderStatusFilterCodec = {\n inputToProto: {\n FILLED: ProtoRead.OrderStatus.FILLED,\n CANCELED: ProtoRead.OrderStatus.CANCELED,\n REJECTED: ProtoRead.OrderStatus.REJECTED,\n } satisfies InputToProto<OrderStatusFilterValue, ProtoRead.OrderStatus>,\n} as const;\n\nexport const OrderStatusCodec = {\n protoToOutput: {\n [ProtoRead.OrderStatus.ORDER_STATUS_UNSPECIFIED]: \"unspecified\",\n [ProtoRead.OrderStatus.PENDING]: \"pending\",\n [ProtoRead.OrderStatus.PENDING_CANCEL]: \"pending_cancel\",\n [ProtoRead.OrderStatus.WORKING]: \"working\",\n [ProtoRead.OrderStatus.FILLED]: \"filled\",\n [ProtoRead.OrderStatus.CANCELED]: \"canceled\",\n [ProtoRead.OrderStatus.REJECTED]: \"rejected\",\n } satisfies ProtoToOutput<ProtoRead.OrderStatus, OrderStatusValue>,\n} as const;\n\nexport const OrderOriginScopeCodec = {\n protoToOutput: {\n [ProtoRead.OrderOriginScope.ORDER_ORIGIN_SCOPE_UNSPECIFIED]: \"unspecified\",\n [ProtoRead.OrderOriginScope.DIRECT]: \"direct\",\n [ProtoRead.OrderOriginScope.ATTACHED_RISK]: \"attached_risk\",\n [ProtoRead.OrderOriginScope.STANDALONE_TRIGGER]: \"standalone_trigger\",\n [ProtoRead.OrderOriginScope.SYSTEM]: \"system\",\n } satisfies ProtoToOutput<ProtoRead.OrderOriginScope, OrderOriginScope>,\n} as const;\n\nexport const OrderTriggerTypeCodec = {\n protoToOutput: {\n [ProtoRead.OrderTriggerType.ORDER_TRIGGER_TYPE_UNSPECIFIED]: \"unspecified\",\n [ProtoRead.OrderTriggerType.STOP_LOSS]: \"stop_loss\",\n [ProtoRead.OrderTriggerType.TAKE_PROFIT]: \"take_profit\",\n [ProtoRead.OrderTriggerType.TRAILING_STOP]: \"trailing_stop\",\n [ProtoRead.OrderTriggerType.TWAP]: \"twap\",\n [ProtoRead.OrderTriggerType.LADDER]: \"ladder\",\n } satisfies Record<ProtoRead.OrderTriggerType, OrderTriggerType>,\n} as const;\n\nexport const ModifyBehaviorCodec = {\n inputToProto: {\n AMEND_OR_REPLACE: ProtoWrite.ModifyBehavior.AMEND_OR_REPLACE,\n AMEND_ONLY: ProtoWrite.ModifyBehavior.AMEND_ONLY,\n REPLACE_ONLY: ProtoWrite.ModifyBehavior.REPLACE_ONLY,\n } satisfies InputToProto<ModifyBehaviorValue, ProtoWrite.ModifyBehavior>,\n} as const;\n\nexport const ModifyActionCodec = {\n protoToOutput: {\n [ProtoWrite.ModifyActionTaken.MODIFY_ACTION_UNSPECIFIED]: \"unspecified\",\n [ProtoWrite.ModifyActionTaken.AMENDED]: \"AMENDED\",\n [ProtoWrite.ModifyActionTaken.REPLACED]: \"REPLACED\",\n } satisfies ProtoToOutput<ProtoWrite.ModifyActionTaken, ModifyActionValue>,\n} as const;\n\nexport const BatchReplaceAdmissionStatusCodec = {\n protoToOutput: {\n [ProtoWrite.BatchReplaceAdmissionStatus.UNSPECIFIED]: \"unspecified\",\n [ProtoWrite.BatchReplaceAdmissionStatus.ADMITTED]: \"admitted\",\n [ProtoWrite.BatchReplaceAdmissionStatus.PARTIALLY_ADMITTED]: \"partially_admitted\",\n [ProtoWrite.BatchReplaceAdmissionStatus.REJECTED]: \"rejected\",\n } satisfies ProtoToOutput<\n ProtoWrite.BatchReplaceAdmissionStatus,\n BatchReplaceAdmissionStatusValue\n >,\n} as const;\n\nexport const BatchReplaceItemAdmissionStatusCodec = {\n protoToOutput: {\n [ProtoWrite.BatchReplaceItemAdmissionStatus.UNSPECIFIED]: \"unspecified\",\n [ProtoWrite.BatchReplaceItemAdmissionStatus.ADMITTED]: \"admitted\",\n [ProtoWrite.BatchReplaceItemAdmissionStatus.REJECTED]: \"rejected\",\n } satisfies ProtoToOutput<\n ProtoWrite.BatchReplaceItemAdmissionStatus,\n BatchReplaceItemAdmissionStatusValue\n >,\n} as const;\n\nexport const BatchReplacePhaseCodec = {\n protoToOutput: {\n [ProtoRead.BatchReplacePhase.UNSPECIFIED]: \"unspecified\",\n [ProtoRead.BatchReplacePhase.ADMITTED]: \"admitted\",\n [ProtoRead.BatchReplacePhase.WORKING]: \"working\",\n [ProtoRead.BatchReplacePhase.REJECTED]: \"rejected\",\n [ProtoRead.BatchReplacePhase.TERMINAL]: \"terminal\",\n } satisfies ProtoToOutput<ProtoRead.BatchReplacePhase, BatchReplacePhaseValue>,\n} as const;\n"],"mappings":";;;;AA0BA,MAAa,6BAA6B;CAAC;CAAU;CAAY;AAAU;AA+B3E,MAAa,yBAAyB;CAAC;CAAoB;CAAc;AAAc;AAqBvF,MAAa,yBAAyB,EAClC,cAAc;CACV,QAAA;CACA,UAAA;CACA,UAAA;AACJ,EACJ;AAEA,MAAa,mBAAmB,EAC5B,eAAe;EACuC,IAAA;EACjB,IAAA;EACO,IAAA;EACP,IAAA;EACD,IAAA;EACE,IAAA;EACA,IAAA;AACtC,EACJ;AAEA,MAAa,wBAAwB,EACjC,eAAe;EACkD,IAAA;EACxB,IAAA;EACO,IAAA;EACK,IAAA;EACZ,IAAA;AACzC,EACJ;AAEA,MAAa,wBAAwB,EACjC,eAAe;EACkD,IAAA;EACrB,IAAA;EACE,IAAA;EACE,IAAA;EACT,IAAA;EACE,IAAA;AACzC,EACJ;AAEA,MAAa,sBAAsB,EAC/B,cAAc;CACV,kBAAA;CACA,YAAA;CACA,cAAA;AACJ,EACJ;AAEA,MAAa,oBAAoB,EAC7B,eAAe;EAC+C,IAAA;EAClB,IAAA;EACC,IAAA;AAC7C,EACJ;AAEA,MAAa,mCAAmC,EAC5C,eAAe;EAC2C,IAAA;EACH,IAAA;EACU,IAAA;EACV,IAAA;AACvD,EAIJ;AAEA,MAAa,uCAAuC,EAChD,eAAe;EAC+C,IAAA;EACH,IAAA;EACA,IAAA;AAC3D,EAIJ;AAEA,MAAa,yBAAyB,EAClC,eAAe;EACgC,IAAA;EACH,IAAA;EACD,IAAA;EACC,IAAA;EACA,IAAA;AAC5C,EACJ"}
1
+ {"version":3,"file":"orders.codecs.js","names":[],"sources":["../../../src/services/orders/orders.codecs.ts"],"sourcesContent":["import * as ProtoRead from \"../../gen/orders/v1/orders_read_pb.js\";\nimport * as ProtoWrite from \"../../gen/orders/v1/orders_pb.js\";\nimport type { InputToProto, ProtoToOutput } from \"../../utils/types.js\";\nexport {\n FEE_ASSET_VALUES,\n FeeAssetCodec,\n type FeeAssetValue,\n ORDER_SIDE_VALUES,\n ORDER_TYPE_VALUES,\n OrderSideCodec,\n type OrderSideValue,\n OrderTypeCodec,\n type OrderTypeValue,\n SELF_TRADE_PREVENTION_MODE_VALUES,\n SelfTradePreventionModeCodec,\n type SelfTradePreventionModeValue,\n TIME_IN_FORCE_OUTPUT_VALUES,\n TIME_IN_FORCE_VALUES,\n TimeInForceCodec,\n type TimeInForceOutputValue,\n type TimeInForceValue,\n TRIGGER_PRICE_SOURCE_VALUES,\n TriggerPriceSourceCodec,\n type TriggerPriceSourceValue,\n} from \"./order-enums.codecs.js\";\n\nexport const ORDER_STATUS_FILTER_VALUES = [\"FILLED\", \"CANCELED\", \"REJECTED\"] as const;\nexport type OrderStatusFilterValue = (typeof ORDER_STATUS_FILTER_VALUES)[number];\n\nexport const ORDER_STATUS_VALUES = [\n \"pending\",\n \"pending_cancel\",\n \"working\",\n \"filled\",\n \"canceled\",\n \"rejected\",\n] as const;\nexport type OrderStatusValue = (typeof ORDER_STATUS_VALUES)[number];\n\nexport const ORDER_ORIGIN_SCOPE_VALUES = [\n \"direct\",\n \"attached_risk\",\n \"standalone_trigger\",\n \"system\",\n] as const;\nexport type OrderOriginScope = (typeof ORDER_ORIGIN_SCOPE_VALUES)[number];\n\nexport const ORDER_TRIGGER_TYPE_VALUES = [\n \"unspecified\",\n \"stop_loss\",\n \"take_profit\",\n \"trailing_stop\",\n \"twap\",\n \"ladder\",\n] as const;\nexport type OrderTriggerType = (typeof ORDER_TRIGGER_TYPE_VALUES)[number];\n\nexport const ATTACHED_RISK_LEG_STATUS_VALUES = [\n \"not_configured\",\n \"created\",\n \"armed\",\n \"running\",\n \"completed\",\n \"canceled\",\n \"failed\",\n \"paused\",\n] as const;\nexport type AttachedRiskLegStatusValue = (typeof ATTACHED_RISK_LEG_STATUS_VALUES)[number];\n\nexport const MODIFY_BEHAVIOR_VALUES = [\"AMEND_OR_REPLACE\", \"AMEND_ONLY\", \"REPLACE_ONLY\"] as const;\nexport type ModifyBehaviorValue = (typeof MODIFY_BEHAVIOR_VALUES)[number];\n\nexport const MODIFY_ACTION_VALUES = [\"AMENDED\", \"REPLACED\"] as const;\nexport type ModifyActionValue = (typeof MODIFY_ACTION_VALUES)[number];\n\nexport const BATCH_REPLACE_ADMISSION_STATUS_VALUES = [\n \"admitted\",\n \"partially_admitted\",\n \"rejected\",\n] as const;\nexport type BatchReplaceAdmissionStatusValue =\n (typeof BATCH_REPLACE_ADMISSION_STATUS_VALUES)[number];\n\nexport const BATCH_REPLACE_ITEM_ADMISSION_STATUS_VALUES = [\"admitted\", \"rejected\"] as const;\nexport type BatchReplaceItemAdmissionStatusValue =\n (typeof BATCH_REPLACE_ITEM_ADMISSION_STATUS_VALUES)[number];\n\nexport const BATCH_REPLACE_PHASE_VALUES = [\"admitted\", \"working\", \"rejected\", \"terminal\"] as const;\nexport type BatchReplacePhaseValue = (typeof BATCH_REPLACE_PHASE_VALUES)[number];\n\nexport const OrderStatusFilterCodec = {\n inputToProto: {\n FILLED: ProtoRead.OrderStatus.FILLED,\n CANCELED: ProtoRead.OrderStatus.CANCELED,\n REJECTED: ProtoRead.OrderStatus.REJECTED,\n } satisfies InputToProto<OrderStatusFilterValue, ProtoRead.OrderStatus>,\n} as const;\n\nexport const OrderStatusCodec = {\n protoToOutput: {\n [ProtoRead.OrderStatus.ORDER_STATUS_UNSPECIFIED]: \"unspecified\",\n [ProtoRead.OrderStatus.PENDING]: \"pending\",\n [ProtoRead.OrderStatus.PENDING_CANCEL]: \"pending_cancel\",\n [ProtoRead.OrderStatus.WORKING]: \"working\",\n [ProtoRead.OrderStatus.FILLED]: \"filled\",\n [ProtoRead.OrderStatus.CANCELED]: \"canceled\",\n [ProtoRead.OrderStatus.REJECTED]: \"rejected\",\n } satisfies ProtoToOutput<ProtoRead.OrderStatus, OrderStatusValue>,\n} as const;\n\nexport const OrderOriginScopeCodec = {\n protoToOutput: {\n [ProtoRead.OrderOriginScope.ORDER_ORIGIN_SCOPE_UNSPECIFIED]: \"unspecified\",\n [ProtoRead.OrderOriginScope.DIRECT]: \"direct\",\n [ProtoRead.OrderOriginScope.ATTACHED_RISK]: \"attached_risk\",\n [ProtoRead.OrderOriginScope.STANDALONE_TRIGGER]: \"standalone_trigger\",\n [ProtoRead.OrderOriginScope.SYSTEM]: \"system\",\n } satisfies ProtoToOutput<ProtoRead.OrderOriginScope, OrderOriginScope>,\n} as const;\n\nexport const OrderTriggerTypeCodec = {\n protoToOutput: {\n [ProtoRead.OrderTriggerType.ORDER_TRIGGER_TYPE_UNSPECIFIED]: \"unspecified\",\n [ProtoRead.OrderTriggerType.STOP_LOSS]: \"stop_loss\",\n [ProtoRead.OrderTriggerType.TAKE_PROFIT]: \"take_profit\",\n [ProtoRead.OrderTriggerType.TRAILING_STOP]: \"trailing_stop\",\n [ProtoRead.OrderTriggerType.TWAP]: \"twap\",\n [ProtoRead.OrderTriggerType.LADDER]: \"ladder\",\n } satisfies Record<ProtoRead.OrderTriggerType, OrderTriggerType>,\n} as const;\n\nexport const AttachedRiskLegStatusCodec = {\n protoToOutput: {\n [ProtoRead.AttachedRiskLegState_Status.STATUS_UNSPECIFIED]: \"unspecified\",\n [ProtoRead.AttachedRiskLegState_Status.NOT_CONFIGURED]: \"not_configured\",\n [ProtoRead.AttachedRiskLegState_Status.CREATED]: \"created\",\n [ProtoRead.AttachedRiskLegState_Status.ARMED]: \"armed\",\n [ProtoRead.AttachedRiskLegState_Status.RUNNING]: \"running\",\n [ProtoRead.AttachedRiskLegState_Status.COMPLETED]: \"completed\",\n [ProtoRead.AttachedRiskLegState_Status.CANCELED]: \"canceled\",\n [ProtoRead.AttachedRiskLegState_Status.FAILED]: \"failed\",\n [ProtoRead.AttachedRiskLegState_Status.PAUSED]: \"paused\",\n } satisfies ProtoToOutput<ProtoRead.AttachedRiskLegState_Status, AttachedRiskLegStatusValue>,\n} as const;\n\nexport const ModifyBehaviorCodec = {\n inputToProto: {\n AMEND_OR_REPLACE: ProtoWrite.ModifyBehavior.AMEND_OR_REPLACE,\n AMEND_ONLY: ProtoWrite.ModifyBehavior.AMEND_ONLY,\n REPLACE_ONLY: ProtoWrite.ModifyBehavior.REPLACE_ONLY,\n } satisfies InputToProto<ModifyBehaviorValue, ProtoWrite.ModifyBehavior>,\n} as const;\n\nexport const ModifyActionCodec = {\n protoToOutput: {\n [ProtoWrite.ModifyActionTaken.MODIFY_ACTION_UNSPECIFIED]: \"unspecified\",\n [ProtoWrite.ModifyActionTaken.AMENDED]: \"AMENDED\",\n [ProtoWrite.ModifyActionTaken.REPLACED]: \"REPLACED\",\n } satisfies ProtoToOutput<ProtoWrite.ModifyActionTaken, ModifyActionValue>,\n} as const;\n\nexport const BatchReplaceAdmissionStatusCodec = {\n protoToOutput: {\n [ProtoWrite.BatchReplaceAdmissionStatus.UNSPECIFIED]: \"unspecified\",\n [ProtoWrite.BatchReplaceAdmissionStatus.ADMITTED]: \"admitted\",\n [ProtoWrite.BatchReplaceAdmissionStatus.PARTIALLY_ADMITTED]: \"partially_admitted\",\n [ProtoWrite.BatchReplaceAdmissionStatus.REJECTED]: \"rejected\",\n } satisfies ProtoToOutput<\n ProtoWrite.BatchReplaceAdmissionStatus,\n BatchReplaceAdmissionStatusValue\n >,\n} as const;\n\nexport const BatchReplaceItemAdmissionStatusCodec = {\n protoToOutput: {\n [ProtoWrite.BatchReplaceItemAdmissionStatus.UNSPECIFIED]: \"unspecified\",\n [ProtoWrite.BatchReplaceItemAdmissionStatus.ADMITTED]: \"admitted\",\n [ProtoWrite.BatchReplaceItemAdmissionStatus.REJECTED]: \"rejected\",\n } satisfies ProtoToOutput<\n ProtoWrite.BatchReplaceItemAdmissionStatus,\n BatchReplaceItemAdmissionStatusValue\n >,\n} as const;\n\nexport const BatchReplacePhaseCodec = {\n protoToOutput: {\n [ProtoRead.BatchReplacePhase.UNSPECIFIED]: \"unspecified\",\n [ProtoRead.BatchReplacePhase.ADMITTED]: \"admitted\",\n [ProtoRead.BatchReplacePhase.WORKING]: \"working\",\n [ProtoRead.BatchReplacePhase.REJECTED]: \"rejected\",\n [ProtoRead.BatchReplacePhase.TERMINAL]: \"terminal\",\n } satisfies ProtoToOutput<ProtoRead.BatchReplacePhase, BatchReplacePhaseValue>,\n} as const;\n"],"mappings":";;;;AA0BA,MAAa,6BAA6B;CAAC;CAAU;CAAY;AAAU;AA2C3E,MAAa,yBAAyB;CAAC;CAAoB;CAAc;AAAc;AAqBvF,MAAa,yBAAyB,EAClC,cAAc;CACV,QAAA;CACA,UAAA;CACA,UAAA;AACJ,EACJ;AAEA,MAAa,mBAAmB,EAC5B,eAAe;EACuC,IAAA;EACjB,IAAA;EACO,IAAA;EACP,IAAA;EACD,IAAA;EACE,IAAA;EACA,IAAA;AACtC,EACJ;AAEA,MAAa,wBAAwB,EACjC,eAAe;EACkD,IAAA;EACxB,IAAA;EACO,IAAA;EACK,IAAA;EACZ,IAAA;AACzC,EACJ;AAEA,MAAa,wBAAwB,EACjC,eAAe;EACkD,IAAA;EACrB,IAAA;EACE,IAAA;EACE,IAAA;EACT,IAAA;EACE,IAAA;AACzC,EACJ;AAEA,MAAa,6BAA6B,EACtC,eAAe;EACiD,IAAA;EACJ,IAAA;EACP,IAAA;EACF,IAAA;EACE,IAAA;EACE,IAAA;EACD,IAAA;EACF,IAAA;EACA,IAAA;AACpD,EACJ;AAEA,MAAa,sBAAsB,EAC/B,cAAc;CACV,kBAAA;CACA,YAAA;CACA,cAAA;AACJ,EACJ;AAEA,MAAa,oBAAoB,EAC7B,eAAe;EAC+C,IAAA;EAClB,IAAA;EACC,IAAA;AAC7C,EACJ;AAEA,MAAa,mCAAmC,EAC5C,eAAe;EAC2C,IAAA;EACH,IAAA;EACU,IAAA;EACV,IAAA;AACvD,EAIJ;AAEA,MAAa,uCAAuC,EAChD,eAAe;EAC+C,IAAA;EACH,IAAA;EACA,IAAA;AAC3D,EAIJ;AAEA,MAAa,yBAAyB,EAClC,eAAe;EACgC,IAAA;EACH,IAAA;EACD,IAAA;EACC,IAAA;EACA,IAAA;AAC5C,EACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"orders.d.ts","names":[],"sources":["../../../src/services/orders/orders.ts"],"mappings":";;;;;;;;;;;;;UAqFU,6BAA6B,mBAAmB;EACtD;;;;;cAqBS;;EAaL,YAAA,WAAW,WACX,UAAU,mBACV,UAAU,gCACV,QAAQ;;;;EAiBN,SACF,QAAO,EAAE,kBAAkB,wBAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,YACF,QAAO,EAAE,kBAAkB,0BAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,QACF,OAAO,eACP,UAAU,0BACX,QAAQ;;;;EAiBL,OACF,OAAO,eACP,UAAU,2BACX,QAAQ;;;;EAkBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAyBL,OACF,OAAO,EAAE,kBAAkB,yBAC3B,UAAU,2BACX,QAAQ;;;;EAmBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAkBL,OACF,OAAO,kBACP,UAAU,2BACX,QAAQ;;;;EAkBL,aACF,OAAO,yBACP,UAAU,2BACX,QAAQ;;;;EAyBL,sBACF,OAAO,4BACP,UAAU,0BACX,QAAQ;;;;EAaL,UACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,2BACX,QAAQ;;;;EAgBL,eACF,OAAO,qBACP,UAAU,2BACX,QAAQ;;;;EAgBL,WACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,0BACX,QAAQ;;;;EAqBX,UAAU,OAAO"}
1
+ {"version":3,"file":"orders.d.ts","names":[],"sources":["../../../src/services/orders/orders.ts"],"mappings":";;;;;;;;;;;;;UAqFU,6BAA6B,mBAAmB;EACtD;;;;;cAqBS;;EAaL,YAAA,WAAW,WACX,UAAU,mBACV,UAAU,gCACV,QAAQ;;;;EAiBN,SACF,QAAO,EAAE,kBAAkB,wBAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,YACF,QAAO,EAAE,kBAAkB,0BAC3B,UAAU,0BACX;IAAU,QAAQ;IAAS;;;;;EAoBxB,QACF,OAAO,eACP,UAAU,0BACX,QAAQ;;;;EAiBL,OACF,OAAO,eACP,UAAU,2BACX,QAAQ;;;;EAkBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAyBL,OACF,OAAO,EAAE,kBAAkB,yBAC3B,UAAU,2BACX,QAAQ;;;;EAmBL,YACF,OAAO,wBACP,UAAU,2BACX,QAAQ;;;;EAkBL,OACF,OAAO,kBACP,UAAU,2BACX,QAAQ;;;;EAkBL,aACF,OAAO,yBACP,UAAU,2BACX,QAAQ;;;;EAsBL,sBACF,OAAO,4BACP,UAAU,0BACX,QAAQ;;;;EAaL,UACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,2BACX,QAAQ;;;;EAgBL,eACF,OAAO,qBACP,UAAU,2BACX,QAAQ;;;;EAgBL,WACF,OAAO,EAAE,kBAAkB,6BAC3B,UAAU,0BACX,QAAQ;;;;EAqBX,UAAU,OAAO"}
@@ -3,8 +3,7 @@ import { parse } from "../../shared/validation.js";
3
3
  import { toConnectCallOptions } from "../../shared/request-options.js";
4
4
  import { removeUndefined } from "../../utils/remove-undefined.js";
5
5
  import { resolveAccountScopedInput } from "../subaccount-resolver.js";
6
- import { publicationHandlerErrorContext } from "../../shared/subscription-errors.js";
7
- import { createReadyGate } from "../../shared/decimal-surface.js";
6
+ import { connectReadyGatedProtoChannel } from "../../realtime/ready-gated-subscription.js";
8
7
  import { formatConnectError, isResourceNotFoundError } from "../../utils/errors.js";
9
8
  import { OrderSchema, OrdersReadService } from "../../gen/orders/v1/orders_read_pb.js";
10
9
  import { getOrderErrorDetail } from "../../utils/connect-order-errors.js";
@@ -172,7 +171,7 @@ var OrdersService = class {
172
171
  ...resolveAccountScopedInput(input, this.#resolver),
173
172
  requestId: input.requestId ?? createMutationRequestId()
174
173
  };
175
- const request = parse(createBatchReplaceOrdersInputSchema(this.#scales, input.symbolId), resolved);
174
+ const request = parse(createBatchReplaceOrdersInputSchema(this.#scales), resolved);
176
175
  const response = await this.#writeClient.batchReplaceOrders(removeUndefined(request), toConnectCallOptions(options));
177
176
  const result = parse(BatchReplaceOrdersResultSchema, response);
178
177
  assertBatchResultCount("batchReplace", input.items.length, result.results.length);
@@ -233,15 +232,13 @@ var OrdersService = class {
233
232
  */
234
233
  subscribe(input) {
235
234
  const channel = `private:spot:orders:${input.accountId}:proto`;
236
- const gate = createReadyGate(() => this.#scales.ready(), (error) => input.onError?.(publicationHandlerErrorContext(channel, error)));
237
- return this.#realtime.connectProtoChannel({
235
+ return connectReadyGatedProtoChannel(this.#realtime, {
238
236
  channel,
239
237
  schema: OrderSchema,
238
+ ready: () => this.#scales.ready(),
240
239
  onPublication: (data) => {
241
- gate.run(() => {
242
- const order = parse(this.#orderSchema, data);
243
- input.onEvent(order);
244
- });
240
+ const order = parse(this.#orderSchema, data);
241
+ input.onEvent(order);
245
242
  },
246
243
  onConnected: () => input.onOpen?.(),
247
244
  onDisconnected: () => input.onClose?.(),
@@ -1 +1 @@
1
- {"version":3,"file":"orders.js","names":["#readClient","ProtoRead.OrdersReadService","#writeClient","ProtoWrite.OrdersService","#realtime","#resolver","#scales","#orderSchema","#orderDetailsSchema","#newOrderInputSchema","#modifyOrderInputSchema","#batchCreateOrdersInputSchema","ProtoRead.OrderSchema"],"sources":["../../../src/services/orders/orders.ts"],"sourcesContent":["import * as ProtoRead from \"../../gen/orders/v1/orders_read_pb.js\";\nimport * as ProtoWrite from \"../../gen/orders/v1/orders_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 SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.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 { PolyesterRealtime } from \"../../realtime/types.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport { createReadyGate, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { getOrderErrorDetail } from \"../../utils/connect-order-errors.js\";\nimport { formatConnectError, isResourceNotFoundError } from \"../../utils/errors.js\";\nimport {\n OpenOrdersInputSchema,\n OrderHistoryInputSchema,\n type NewOrderInput,\n createNewOrderInputSchema,\n CancelOrderInputSchema,\n CancelOrderResultSchema,\n type CancelOrderResult,\n CancelAllOrdersInputSchema,\n CancelAllOrdersResponseSchema,\n type CancelAllOrdersResponse,\n type Order,\n GetOrderDetailsInputSchema,\n createCreateOrderResultSchema,\n createPreviewOrderResultSchema,\n type PreviewOrderResult,\n type ModifyOrderInput,\n assertKnownModifyOrderInputKeys,\n createModifyOrderInputSchema,\n ModifyOrderResultSchema,\n type CreateOrderResult,\n type ModifyOrderResult,\n type OrderDetails,\n createOrderSchema,\n createOrderDetailsSchema,\n CancelAllAfterInputSchema,\n CancelAllAfterResultSchema,\n type CancelAllAfterInput,\n type CancelAllAfterResult,\n BatchCancelOrdersInputSchema,\n BatchCancelOrdersResultSchema,\n type BatchCancelOrdersInput,\n type BatchCancelOrdersResult,\n createBatchCreateOrdersResultSchema,\n type BatchCreateOrdersInput,\n type BatchCreateOrdersResult,\n BatchReplaceOrdersResultSchema,\n type BatchReplaceOrdersInput,\n type BatchReplaceOrdersResult,\n GetBatchReplaceStatusInputSchema,\n GetBatchReplaceStatusResultSchema,\n type GetBatchReplaceStatusInput,\n type GetBatchReplaceStatusResult,\n assertKnownBatchReplaceOrderItemInputKeys,\n createBatchCreateOrdersInputSchema,\n createBatchReplaceOrdersInputSchema,\n} from \"./orders.schemas.js\";\n\nfunction hasKnownOrderSymbol(scales: SdkScales, order: { symbolId: number }): boolean {\n try {\n scales.baseQty(order.symbolId);\n return true;\n } catch {\n return false;\n }\n}\n\nconst MISCLASSIFIED_ORDER_NOT_FOUND_MESSAGE = \"order not found\";\n\nfunction isOrderNotFoundError(error: unknown): boolean {\n return (\n isResourceNotFoundError(error) ||\n getOrderErrorDetail(error)?.code === \"NOT_FOUND\" ||\n formatConnectError(error, \"\").toLowerCase() === MISCLASSIFIED_ORDER_NOT_FOUND_MESSAGE\n );\n}\n\ninterface SubscribeOrdersInput extends BaseSubscribeInput<Order> {\n accountId: string;\n}\n\nfunction createMutationRequestId(): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `req_${Date.now()}_${Math.random().toString(16).slice(2)}`\n );\n}\n\nfunction assertBatchResultCount(operation: string, requested: number, returned: number): void {\n if (requested !== returned) {\n throw new Error(\n `${operation} returned ${returned} results for ${requested} requested items.`,\n );\n }\n}\n\n/**\n * Manages account-scoped spot orders across read, write, and realtime order update surfaces.\n */\nexport class OrdersService {\n #readClient: Client<typeof ProtoRead.OrdersReadService>;\n #writeClient: Client<typeof ProtoWrite.OrdersService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #orderSchema: ReturnType<typeof createOrderSchema>;\n #orderDetailsSchema: ReturnType<typeof createOrderDetailsSchema>;\n #newOrderInputSchema: ReturnType<typeof createNewOrderInputSchema>;\n #modifyOrderInputSchema: ReturnType<typeof createModifyOrderInputSchema>;\n #batchCreateOrdersInputSchema: ReturnType<typeof createBatchCreateOrdersInputSchema>;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#readClient = createClient(ProtoRead.OrdersReadService, transport);\n this.#writeClient = createClient(ProtoWrite.OrdersService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#orderSchema = createOrderSchema(scales);\n this.#orderDetailsSchema = createOrderDetailsSchema(scales);\n this.#newOrderInputSchema = createNewOrderInputSchema(scales);\n this.#modifyOrderInputSchema = createModifyOrderInputSchema(scales);\n this.#batchCreateOrdersInputSchema = createBatchCreateOrdersInputSchema(scales);\n }\n\n /**\n * Returns open orders for the resolved root account or subaccount, with optional symbol IDs, trigger ID, side, pagination, and attached-risk inclusion filters. Results are paginated with a server-determined page size: a single call is not the full set of open orders — keep calling with the returned nextPageToken until it is empty.\n */\n async listOpen(\n input: v.InferInput<typeof OpenOrdersInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ orders: Order[]; nextPageToken: string }> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(OpenOrdersInputSchema, resolved);\n const res = await this.#readClient.getOpenOrders(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n return {\n orders: parse(\n v.array(this.#orderSchema),\n res.orders.filter((order) => hasKnownOrderSymbol(this.#scales, order)),\n ),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Returns historical orders for the resolved account scope, supporting symbol IDs, trigger ID, side, status, time range, pagination, and attached-risk filters. Results are paginated with the backend nextPageToken.\n */\n async listHistory(\n input: v.InferInput<typeof OrderHistoryInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ orders: Order[]; nextPageToken: string }> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(OrderHistoryInputSchema, resolved);\n const res = await this.#readClient.getOrderHistory(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n return {\n orders: parse(\n v.array(this.#orderSchema),\n res.orders.filter((order) => hasKnownOrderSymbol(this.#scales, order)),\n ),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Evaluates one complete order intent against current market, policy, risk, and balance state without creating an order, reserving funds, or claiming its client order ID.\n */\n async preview(\n input: NewOrderInput,\n options?: PolyesterRequestOptions,\n ): Promise<PreviewOrderResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const request = parse(this.#newOrderInputSchema, resolved);\n const response = await this.#writeClient.previewOrder(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(\n createPreviewOrderResultSchema(this.#scales, request.order.symbolId),\n response,\n );\n }\n\n /**\n * Places a spot order with an explicit market-IOC, limit-GTC, limit-IOC, or limit-FOK execution policy and optional attached risk controls. clientOrderId is the caller-controlled idempotency key and should be reused only for the same logical order.\n */\n async create(\n input: NewOrderInput,\n options?: PolyesterMutationOptions,\n ): Promise<CreateOrderResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(this.#newOrderInputSchema, resolved);\n const requestPayload = removeUndefined(validatedInput);\n const res = await this.#writeClient.createOrder(\n requestPayload,\n toConnectCallOptions(options),\n );\n return parse(\n createCreateOrderResultSchema(this.#scales, validatedInput.order.symbolId),\n res,\n );\n }\n\n /**\n * Places 1–20 spot orders in one best-effort request. Results preserve item order and report admission as accepted or rejected; accepted orders still require lifecycle reconciliation. Supply a clientOrderId for each item and a stable requestId when an ambiguous batch may be retried.\n */\n async batchCreate(\n input: BatchCreateOrdersInput,\n options?: PolyesterMutationOptions,\n ): Promise<BatchCreateOrdersResult> {\n await this.#scales.ready();\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(this.#batchCreateOrdersInputSchema, resolved);\n const response = await this.#writeClient.batchCreateOrders(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n const result = parse(\n createBatchCreateOrdersResultSchema(\n this.#scales,\n request.items.map((item) => item.symbolId),\n ),\n response,\n );\n assertBatchResultCount(\"batchCreate\", input.items.length, result.results.length);\n return result;\n }\n\n /**\n * Requests cancellation of one order in the resolved account scope by order id or client order id, with optional symbol routing. The response acknowledges the cancellation request, not the order's final lifecycle state; reconcile through order reads or realtime before releasing local state. A missing target remains a {@link ResourceNotFoundError}; callers performing desired-state cleanup may treat that error as success when the order could already have filled or left the book.\n */\n async cancel(\n input: v.InferInput<typeof CancelOrderInputSchema>,\n options?: PolyesterMutationOptions,\n ): Promise<CancelOrderResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n\n const validated = parse(CancelOrderInputSchema, resolved);\n\n const res = await this.#writeClient.cancelOrder(\n {\n key: validated.key,\n symbolId: validated.symbolId,\n subaccountId: validated.subaccountId,\n },\n toConnectCallOptions(options),\n );\n return parse(CancelOrderResultSchema, res);\n }\n\n /**\n * Cancels 1–50 explicit orders in one best-effort request. Results preserve item order and acknowledge cancellation admission rather than final order state. Supply a stable requestId when an ambiguous batch may be retried.\n */\n async batchCancel(\n input: BatchCancelOrdersInput,\n options?: PolyesterMutationOptions,\n ): Promise<BatchCancelOrdersResult> {\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(BatchCancelOrdersInputSchema, resolved);\n const response = await this.#writeClient.batchCancelOrders(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n const result = parse(BatchCancelOrdersResultSchema, response);\n assertBatchResultCount(\"batchCancel\", input.items.length, result.results.length);\n return result;\n }\n\n /**\n * Applies a price, quantity, client id, or attached-risk patch to one open order. The symbol ID routes policy checks and quantity scaling. A requestId is generated when omitted; provide a stable value when retrying the same logical modification.\n */\n async modify(\n input: ModifyOrderInput,\n options?: PolyesterMutationOptions,\n ): Promise<ModifyOrderResult> {\n await this.#scales.ready();\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n assertKnownModifyOrderInputKeys(resolved);\n const validated = parse(this.#modifyOrderInputSchema, resolved);\n const res = await this.#writeClient.modifyOrder(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(ModifyOrderResultSchema, res);\n }\n\n /**\n * Replaces 1–50 same-symbol orders and returns an index-stable durable admission receipt. Reuse requestId only when retrying the same logical batch; use the returned batchRequestId for later status reads.\n */\n async batchReplace(\n input: BatchReplaceOrdersInput,\n options?: PolyesterMutationOptions,\n ): Promise<BatchReplaceOrdersResult> {\n await this.#scales.ready();\n for (const item of input.items) {\n assertKnownBatchReplaceOrderItemInputKeys(item);\n }\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(\n createBatchReplaceOrdersInputSchema(this.#scales, input.symbolId),\n resolved,\n );\n const response = await this.#writeClient.batchReplaceOrders(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n const result = parse(BatchReplaceOrdersResultSchema, response);\n assertBatchResultCount(\"batchReplace\", input.items.length, result.results.length);\n return result;\n }\n\n /**\n * Reads the durable per-item execution status for a batch replacement receipt.\n */\n async getBatchReplaceStatus(\n input: GetBatchReplaceStatusInput,\n options?: PolyesterRequestOptions,\n ): Promise<GetBatchReplaceStatusResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const request = parse(GetBatchReplaceStatusInputSchema, resolved);\n const response = await this.#readClient.getBatchReplaceStatus(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(GetBatchReplaceStatusResultSchema, response);\n }\n\n /**\n * Cancels all matching open orders for the resolved account scope, optionally narrowed by symbol ID and side, with dry-run preview. A requestId is generated when omitted; provide a stable value when retrying the same logical bulk cancellation.\n */\n async cancelAll(\n input: v.InferInput<typeof CancelAllOrdersInputSchema>,\n options?: PolyesterMutationOptions,\n ): Promise<CancelAllOrdersResponse> {\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const validated = parse(CancelAllOrdersInputSchema, resolved);\n const res = await this.#writeClient.cancelAllOrders(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(CancelAllOrdersResponseSchema, res);\n }\n\n /**\n * Arms, refreshes, or disables the account dead-man switch, optionally scoped by symbol ID and side. timeoutSec 0 disables it; 10–120 arms it. Generate a new requestId for each deliberate heartbeat, but reuse the same ID when retrying one ambiguous heartbeat.\n */\n async cancelAllAfter(\n input: CancelAllAfterInput,\n options?: PolyesterMutationOptions,\n ): Promise<CancelAllAfterResult> {\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(CancelAllAfterInputSchema, resolved);\n const response = await this.#writeClient.cancelAllAfter(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(CancelAllAfterResultSchema, response);\n }\n\n /**\n * Fetches one order by id or client order id and returns its order, trades, and transfer details when found. Returns null when the requested order is not found.\n */\n async getDetails(\n input: v.InferInput<typeof GetOrderDetailsInputSchema>,\n options?: PolyesterRequestOptions,\n ): Promise<OrderDetails | null> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(GetOrderDetailsInputSchema, resolved);\n let res: ProtoRead.GetOrderResponse;\n try {\n res = await this.#readClient.getOrder(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n } catch (error) {\n if (isOrderNotFoundError(error)) return null;\n throw error;\n }\n if (!res.order) return null;\n return parse(this.#orderDetailsSchema, res);\n }\n\n /**\n * Subscribes to private order updates on private:spot:orders:{accountId}:proto and emits parsed order records until the returned unsubscribe function is called.\n */\n subscribe(input: SubscribeOrdersInput): () => void {\n const channel = `private:spot:orders:${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: ProtoRead.OrderSchema,\n onPublication: (data) => {\n gate.run(() => {\n const order = parse(this.#orderSchema, data);\n input.onEvent(order);\n });\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"orders.js","names":["#readClient","ProtoRead.OrdersReadService","#writeClient","ProtoWrite.OrdersService","#realtime","#resolver","#scales","#orderSchema","#orderDetailsSchema","#newOrderInputSchema","#modifyOrderInputSchema","#batchCreateOrdersInputSchema","ProtoRead.OrderSchema"],"sources":["../../../src/services/orders/orders.ts"],"sourcesContent":["import * as ProtoRead from \"../../gen/orders/v1/orders_read_pb.js\";\nimport * as ProtoWrite from \"../../gen/orders/v1/orders_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.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 { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { connectReadyGatedProtoChannel } from \"../../realtime/ready-gated-subscription.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport type { SdkScales } from \"../../shared/decimal-surface.js\";\nimport { getOrderErrorDetail } from \"../../utils/connect-order-errors.js\";\nimport { formatConnectError, isResourceNotFoundError } from \"../../utils/errors.js\";\nimport {\n OpenOrdersInputSchema,\n OrderHistoryInputSchema,\n type NewOrderInput,\n createNewOrderInputSchema,\n CancelOrderInputSchema,\n CancelOrderResultSchema,\n type CancelOrderResult,\n CancelAllOrdersInputSchema,\n CancelAllOrdersResponseSchema,\n type CancelAllOrdersResponse,\n type Order,\n GetOrderDetailsInputSchema,\n createCreateOrderResultSchema,\n createPreviewOrderResultSchema,\n type PreviewOrderResult,\n type ModifyOrderInput,\n assertKnownModifyOrderInputKeys,\n createModifyOrderInputSchema,\n ModifyOrderResultSchema,\n type CreateOrderResult,\n type ModifyOrderResult,\n type OrderDetails,\n createOrderSchema,\n createOrderDetailsSchema,\n CancelAllAfterInputSchema,\n CancelAllAfterResultSchema,\n type CancelAllAfterInput,\n type CancelAllAfterResult,\n BatchCancelOrdersInputSchema,\n BatchCancelOrdersResultSchema,\n type BatchCancelOrdersInput,\n type BatchCancelOrdersResult,\n createBatchCreateOrdersResultSchema,\n type BatchCreateOrdersInput,\n type BatchCreateOrdersResult,\n BatchReplaceOrdersResultSchema,\n type BatchReplaceOrdersInput,\n type BatchReplaceOrdersResult,\n GetBatchReplaceStatusInputSchema,\n GetBatchReplaceStatusResultSchema,\n type GetBatchReplaceStatusInput,\n type GetBatchReplaceStatusResult,\n assertKnownBatchReplaceOrderItemInputKeys,\n createBatchCreateOrdersInputSchema,\n createBatchReplaceOrdersInputSchema,\n} from \"./orders.schemas.js\";\n\nfunction hasKnownOrderSymbol(scales: SdkScales, order: { symbolId: number }): boolean {\n try {\n scales.baseQty(order.symbolId);\n return true;\n } catch {\n return false;\n }\n}\n\nconst MISCLASSIFIED_ORDER_NOT_FOUND_MESSAGE = \"order not found\";\n\nfunction isOrderNotFoundError(error: unknown): boolean {\n return (\n isResourceNotFoundError(error) ||\n getOrderErrorDetail(error)?.code === \"NOT_FOUND\" ||\n formatConnectError(error, \"\").toLowerCase() === MISCLASSIFIED_ORDER_NOT_FOUND_MESSAGE\n );\n}\n\ninterface SubscribeOrdersInput extends BaseSubscribeInput<Order> {\n accountId: string;\n}\n\nfunction createMutationRequestId(): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `req_${Date.now()}_${Math.random().toString(16).slice(2)}`\n );\n}\n\nfunction assertBatchResultCount(operation: string, requested: number, returned: number): void {\n if (requested !== returned) {\n throw new Error(\n `${operation} returned ${returned} results for ${requested} requested items.`,\n );\n }\n}\n\n/**\n * Manages account-scoped spot orders across read, write, and realtime order update surfaces.\n */\nexport class OrdersService {\n #readClient: Client<typeof ProtoRead.OrdersReadService>;\n #writeClient: Client<typeof ProtoWrite.OrdersService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #orderSchema: ReturnType<typeof createOrderSchema>;\n #orderDetailsSchema: ReturnType<typeof createOrderDetailsSchema>;\n #newOrderInputSchema: ReturnType<typeof createNewOrderInputSchema>;\n #modifyOrderInputSchema: ReturnType<typeof createModifyOrderInputSchema>;\n #batchCreateOrdersInputSchema: ReturnType<typeof createBatchCreateOrdersInputSchema>;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#readClient = createClient(ProtoRead.OrdersReadService, transport);\n this.#writeClient = createClient(ProtoWrite.OrdersService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#orderSchema = createOrderSchema(scales);\n this.#orderDetailsSchema = createOrderDetailsSchema(scales);\n this.#newOrderInputSchema = createNewOrderInputSchema(scales);\n this.#modifyOrderInputSchema = createModifyOrderInputSchema(scales);\n this.#batchCreateOrdersInputSchema = createBatchCreateOrdersInputSchema(scales);\n }\n\n /**\n * Returns open orders for the resolved root account or subaccount, with optional symbol IDs, trigger ID, side, pagination, and attached-risk inclusion filters. Results are paginated with a server-determined page size: a single call is not the full set of open orders — keep calling with the returned nextPageToken until it is empty.\n */\n async listOpen(\n input: v.InferInput<typeof OpenOrdersInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ orders: Order[]; nextPageToken: string }> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(OpenOrdersInputSchema, resolved);\n const res = await this.#readClient.getOpenOrders(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n return {\n orders: parse(\n v.array(this.#orderSchema),\n res.orders.filter((order) => hasKnownOrderSymbol(this.#scales, order)),\n ),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Returns historical orders for the resolved account scope, supporting symbol IDs, trigger ID, side, status, time range, pagination, and attached-risk filters. Results are paginated with the backend nextPageToken.\n */\n async listHistory(\n input: v.InferInput<typeof OrderHistoryInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ orders: Order[]; nextPageToken: string }> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(OrderHistoryInputSchema, resolved);\n const res = await this.#readClient.getOrderHistory(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n return {\n orders: parse(\n v.array(this.#orderSchema),\n res.orders.filter((order) => hasKnownOrderSymbol(this.#scales, order)),\n ),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Evaluates one complete order intent against current market, policy, risk, and balance state without creating an order, reserving funds, or claiming its client order ID.\n */\n async preview(\n input: NewOrderInput,\n options?: PolyesterRequestOptions,\n ): Promise<PreviewOrderResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const request = parse(this.#newOrderInputSchema, resolved);\n const response = await this.#writeClient.previewOrder(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(\n createPreviewOrderResultSchema(this.#scales, request.order.symbolId),\n response,\n );\n }\n\n /**\n * Places a spot order with an explicit market-IOC, limit-GTC, limit-IOC, or limit-FOK execution policy and optional attached risk controls. clientOrderId is the caller-controlled idempotency key and should be reused only for the same logical order.\n */\n async create(\n input: NewOrderInput,\n options?: PolyesterMutationOptions,\n ): Promise<CreateOrderResult> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(this.#newOrderInputSchema, resolved);\n const requestPayload = removeUndefined(validatedInput);\n const res = await this.#writeClient.createOrder(\n requestPayload,\n toConnectCallOptions(options),\n );\n return parse(\n createCreateOrderResultSchema(this.#scales, validatedInput.order.symbolId),\n res,\n );\n }\n\n /**\n * Places 1–20 spot orders in one best-effort request. Results preserve item order and report admission as accepted or rejected; accepted orders still require lifecycle reconciliation. Supply a clientOrderId for each item and a stable requestId when an ambiguous batch may be retried.\n */\n async batchCreate(\n input: BatchCreateOrdersInput,\n options?: PolyesterMutationOptions,\n ): Promise<BatchCreateOrdersResult> {\n await this.#scales.ready();\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(this.#batchCreateOrdersInputSchema, resolved);\n const response = await this.#writeClient.batchCreateOrders(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n const result = parse(\n createBatchCreateOrdersResultSchema(\n this.#scales,\n request.items.map((item) => item.symbolId),\n ),\n response,\n );\n assertBatchResultCount(\"batchCreate\", input.items.length, result.results.length);\n return result;\n }\n\n /**\n * Requests cancellation of one order in the resolved account scope by order id or client order id, with optional symbol routing. The response acknowledges the cancellation request, not the order's final lifecycle state; reconcile through order reads or realtime before releasing local state. A missing target remains a {@link ResourceNotFoundError}; callers performing desired-state cleanup may treat that error as success when the order could already have filled or left the book.\n */\n async cancel(\n input: v.InferInput<typeof CancelOrderInputSchema>,\n options?: PolyesterMutationOptions,\n ): Promise<CancelOrderResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n\n const validated = parse(CancelOrderInputSchema, resolved);\n\n const res = await this.#writeClient.cancelOrder(\n {\n key: validated.key,\n symbolId: validated.symbolId,\n subaccountId: validated.subaccountId,\n },\n toConnectCallOptions(options),\n );\n return parse(CancelOrderResultSchema, res);\n }\n\n /**\n * Cancels 1–50 explicit orders in one best-effort request. Results preserve item order and acknowledge cancellation admission rather than final order state. Supply a stable requestId when an ambiguous batch may be retried.\n */\n async batchCancel(\n input: BatchCancelOrdersInput,\n options?: PolyesterMutationOptions,\n ): Promise<BatchCancelOrdersResult> {\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(BatchCancelOrdersInputSchema, resolved);\n const response = await this.#writeClient.batchCancelOrders(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n const result = parse(BatchCancelOrdersResultSchema, response);\n assertBatchResultCount(\"batchCancel\", input.items.length, result.results.length);\n return result;\n }\n\n /**\n * Applies a price, quantity, client id, or attached-risk patch to one open order. The symbol ID routes policy checks and quantity scaling. A requestId is generated when omitted; provide a stable value when retrying the same logical modification.\n */\n async modify(\n input: ModifyOrderInput,\n options?: PolyesterMutationOptions,\n ): Promise<ModifyOrderResult> {\n await this.#scales.ready();\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n assertKnownModifyOrderInputKeys(resolved);\n const validated = parse(this.#modifyOrderInputSchema, resolved);\n const res = await this.#writeClient.modifyOrder(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(ModifyOrderResultSchema, res);\n }\n\n /**\n * Replaces 1–50 same-symbol orders and returns an index-stable durable admission receipt. Reuse requestId only when retrying the same logical batch; use the returned batchRequestId for later status reads.\n */\n async batchReplace(\n input: BatchReplaceOrdersInput,\n options?: PolyesterMutationOptions,\n ): Promise<BatchReplaceOrdersResult> {\n await this.#scales.ready();\n for (const item of input.items) {\n assertKnownBatchReplaceOrderItemInputKeys(item);\n }\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(createBatchReplaceOrdersInputSchema(this.#scales), resolved);\n const response = await this.#writeClient.batchReplaceOrders(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n const result = parse(BatchReplaceOrdersResultSchema, response);\n assertBatchResultCount(\"batchReplace\", input.items.length, result.results.length);\n return result;\n }\n\n /**\n * Reads the durable per-item execution status for a batch replacement receipt.\n */\n async getBatchReplaceStatus(\n input: GetBatchReplaceStatusInput,\n options?: PolyesterRequestOptions,\n ): Promise<GetBatchReplaceStatusResult> {\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const request = parse(GetBatchReplaceStatusInputSchema, resolved);\n const response = await this.#readClient.getBatchReplaceStatus(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(GetBatchReplaceStatusResultSchema, response);\n }\n\n /**\n * Cancels all matching open orders for the resolved account scope, optionally narrowed by symbol ID and side, with dry-run preview. A requestId is generated when omitted; provide a stable value when retrying the same logical bulk cancellation.\n */\n async cancelAll(\n input: v.InferInput<typeof CancelAllOrdersInputSchema>,\n options?: PolyesterMutationOptions,\n ): Promise<CancelAllOrdersResponse> {\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const validated = parse(CancelAllOrdersInputSchema, resolved);\n const res = await this.#writeClient.cancelAllOrders(\n removeUndefined(validated),\n toConnectCallOptions(options),\n );\n return parse(CancelAllOrdersResponseSchema, res);\n }\n\n /**\n * Arms, refreshes, or disables the account dead-man switch, optionally scoped by symbol ID and side. timeoutSec 0 disables it; 10–120 arms it. Generate a new requestId for each deliberate heartbeat, but reuse the same ID when retrying one ambiguous heartbeat.\n */\n async cancelAllAfter(\n input: CancelAllAfterInput,\n options?: PolyesterMutationOptions,\n ): Promise<CancelAllAfterResult> {\n const resolved = {\n ...resolveAccountScopedInput(input, this.#resolver),\n requestId: input.requestId ?? createMutationRequestId(),\n };\n const request = parse(CancelAllAfterInputSchema, resolved);\n const response = await this.#writeClient.cancelAllAfter(\n removeUndefined(request),\n toConnectCallOptions(options),\n );\n return parse(CancelAllAfterResultSchema, response);\n }\n\n /**\n * Fetches one order by id or client order id and returns its order, trades, and transfer details when found. Returns null when the requested order is not found.\n */\n async getDetails(\n input: v.InferInput<typeof GetOrderDetailsInputSchema>,\n options?: PolyesterRequestOptions,\n ): Promise<OrderDetails | null> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(GetOrderDetailsInputSchema, resolved);\n let res: ProtoRead.GetOrderResponse;\n try {\n res = await this.#readClient.getOrder(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n } catch (error) {\n if (isOrderNotFoundError(error)) return null;\n throw error;\n }\n if (!res.order) return null;\n return parse(this.#orderDetailsSchema, res);\n }\n\n /**\n * Subscribes to private order updates on private:spot:orders:{accountId}:proto and emits parsed order records until the returned unsubscribe function is called.\n */\n subscribe(input: SubscribeOrdersInput): () => void {\n const channel = `private:spot:orders:${input.accountId}:proto`;\n return connectReadyGatedProtoChannel(this.#realtime, {\n channel,\n schema: ProtoRead.OrderSchema,\n ready: () => this.#scales.ready(),\n onPublication: (data) => {\n const order = parse(this.#orderSchema, data);\n input.onEvent(order);\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n}\n"],"mappings":"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"}
@@ -243,8 +243,8 @@ declare const SubaccountActivityEventSchema: v.ObjectSchema<{
243
243
  seconds: bigint;
244
244
  nanos: number;
245
245
  } | undefined, number | undefined>]>;
246
- readonly entityKind: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEntityKind, undefined>, v.TransformAction<ActivityEntityKind, "unspecified" | "api_key" | "account" | "subaccount" | "destination" | "session" | "member" | "policy" | "invite" | "security">]>;
247
- readonly eventAction: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEventAction, undefined>, v.TransformAction<ActivityEventAction, "unspecified" | "enabled" | "disabled" | "revoked" | "deleted" | "created" | "updated" | "removed" | "role_set" | "received" | "replied" | "failed" | "blocked" | "hold_placed" | "hold_released">]>;
246
+ readonly entityKind: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEntityKind, undefined>, v.TransformAction<ActivityEntityKind, "unspecified" | "api_key" | "account" | "subaccount" | "destination" | "session" | "policy" | "member" | "invite" | "security">]>;
247
+ readonly eventAction: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEventAction, undefined>, v.TransformAction<ActivityEventAction, "unspecified" | "enabled" | "disabled" | "failed" | "deleted" | "created" | "updated" | "removed" | "role_set" | "received" | "replied" | "revoked" | "blocked" | "hold_placed" | "hold_released">]>;
248
248
  readonly source: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEventSource, undefined>, v.TransformAction<ActivityEventSource, "unspecified" | "web" | "mobile" | "api">]>;
249
249
  readonly ip: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
250
250
  readonly userAgent: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -2,8 +2,7 @@ import { parse } from "../../shared/validation.js";
2
2
  import { toConnectCallOptions } from "../../shared/request-options.js";
3
3
  import { removeUndefined } from "../../utils/remove-undefined.js";
4
4
  import { resolveAccountScopedInput } from "../subaccount-resolver.js";
5
- import { publicationHandlerErrorContext } from "../../shared/subscription-errors.js";
6
- import { createReadyGate } from "../../shared/decimal-surface.js";
5
+ import { connectReadyGatedProtoChannel } from "../../realtime/ready-gated-subscription.js";
7
6
  import { OrdersReadService, UserTradeSchema } from "../../gen/orders/v1/orders_read_pb.js";
8
7
  import { GetUserTradesInputSchema, createUserTradeSchema } from "./trades.schemas.js";
9
8
  import { createClient } from "@connectrpc/connect";
@@ -43,15 +42,13 @@ var TradesService = class {
43
42
  */
44
43
  subscribe(input) {
45
44
  const channel = `private:spot:trades:${input.accountId}:proto`;
46
- const gate = createReadyGate(() => this.#scales.ready(), (error) => input.onError?.(publicationHandlerErrorContext(channel, error)));
47
- return this.#realtime.connectProtoChannel({
45
+ return connectReadyGatedProtoChannel(this.#realtime, {
48
46
  channel,
49
47
  schema: UserTradeSchema,
48
+ ready: () => this.#scales.ready(),
50
49
  onPublication: (data) => {
51
- gate.run(() => {
52
- const trade = parse(this.#userTradeSchema, data);
53
- input.onEvent(trade);
54
- });
50
+ const trade = parse(this.#userTradeSchema, data);
51
+ input.onEvent(trade);
55
52
  },
56
53
  onConnected: () => input.onOpen?.(),
57
54
  onDisconnected: () => input.onClose?.(),
@@ -1 +1 @@
1
- {"version":3,"file":"trades.js","names":["#client","Proto.OrdersReadService","#realtime","#resolver","#scales","#userTradeSchema","Proto.UserTradeSchema"],"sources":["../../../src/services/trades/trades.ts"],"sourcesContent":["import * as Proto from \"../../gen/orders/v1/orders_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 { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.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 { GetUserTradesInputSchema, createUserTradeSchema, type Trade } from \"./trades.schemas.js\";\n\ninterface SubscribeTradesInput extends BaseSubscribeInput<Trade> {\n accountId: string;\n}\n\n/**\n * Reads and streams authenticated user trade fills.\n */\nexport class TradesService {\n #client: Client<typeof Proto.OrdersReadService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #userTradeSchema: ReturnType<typeof createUserTradeSchema>;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#client = createClient(Proto.OrdersReadService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#userTradeSchema = createUserTradeSchema(scales);\n }\n\n /**\n * Returns user trades for the resolved root account or subaccount, supporting symbol, side, time range, limit, and page token filters. Results include the next page token from GetUserTrades.\n */\n async list(\n input: v.InferInput<typeof GetUserTradesInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ trades: Trade[]; nextPageToken: string }> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(GetUserTradesInputSchema, resolved);\n const res = await this.#client.getUserTrades(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n return {\n trades: parse(v.array(this.#userTradeSchema), res.trades),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Subscribes to private user trade updates on private:spot:trades:{accountId}:proto and emits parsed fills.\n */\n subscribe(input: SubscribeTradesInput) {\n const channel = `private:spot:trades:${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.UserTradeSchema,\n onPublication: (data) => {\n gate.run(() => {\n const trade = parse(this.#userTradeSchema, data);\n input.onEvent(trade);\n });\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAuBA,IAAa,gBAAb,MAA2B;CACvB;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,mBAAmB,sBAAsB,MAAM;CACxD;;;;CAKA,MAAM,KACF,QAAuD,CAAC,GACxD,SACmD;EACnD,MAAM,KAAKD,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,iBAAiB,MAAM,0BAA0B,QAAQ;EAC/D,MAAM,MAAM,MAAM,KAAKH,QAAQ,cAC3B,gBAAgB,cAAc,GAC9B,qBAAqB,OAAO,CAChC;EACA,OAAO;GACH,QAAQ,MAAM,EAAE,MAAM,KAAKK,gBAAgB,GAAG,IAAI,MAAM;GACxD,eAAe,IAAI;EACvB;CACJ;;;;CAKA,UAAU,OAA6B;EACnC,MAAM,UAAU,uBAAuB,MAAM,UAAU;EACvD,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,SAAS;IACrB,KAAK,UAAU;KACX,MAAM,QAAQ,MAAM,KAAKD,kBAAkB,IAAI;KAC/C,MAAM,QAAQ,KAAK;IACvB,CAAC;GACL;GACA,mBAAmB,MAAM,SAAS;GAClC,sBAAsB,MAAM,UAAU;GACtC,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}
1
+ {"version":3,"file":"trades.js","names":["#client","Proto.OrdersReadService","#realtime","#resolver","#scales","#userTradeSchema","Proto.UserTradeSchema"],"sources":["../../../src/services/trades/trades.ts"],"sourcesContent":["import * as Proto from \"../../gen/orders/v1/orders_read_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport * as v from \"valibot\";\nimport { parse } from \"../../shared/validation.js\";\nimport { removeUndefined } from \"../../utils/remove-undefined.js\";\nimport { type SubaccountResolver, resolveAccountScopedInput } from \"../subaccount-resolver.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport { connectReadyGatedProtoChannel } from \"../../realtime/ready-gated-subscription.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport type { SdkScales } from \"../../shared/decimal-surface.js\";\nimport { GetUserTradesInputSchema, createUserTradeSchema, type Trade } from \"./trades.schemas.js\";\n\ninterface SubscribeTradesInput extends BaseSubscribeInput<Trade> {\n accountId: string;\n}\n\n/**\n * Reads and streams authenticated user trade fills.\n */\nexport class TradesService {\n #client: Client<typeof Proto.OrdersReadService>;\n #realtime: PolyesterRealtime;\n #resolver?: SubaccountResolver;\n #scales: SdkScales;\n #userTradeSchema: ReturnType<typeof createUserTradeSchema>;\n\n constructor(\n transport: Transport,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#client = createClient(Proto.OrdersReadService, transport);\n this.#realtime = realtime;\n this.#resolver = resolver;\n this.#scales = scales;\n this.#userTradeSchema = createUserTradeSchema(scales);\n }\n\n /**\n * Returns user trades for the resolved root account or subaccount, supporting symbol, side, time range, limit, and page token filters. Results include the next page token from GetUserTrades.\n */\n async list(\n input: v.InferInput<typeof GetUserTradesInputSchema> = {},\n options?: PolyesterRequestOptions,\n ): Promise<{ trades: Trade[]; nextPageToken: string }> {\n await this.#scales.ready();\n const resolved = resolveAccountScopedInput(input, this.#resolver);\n const validatedInput = parse(GetUserTradesInputSchema, resolved);\n const res = await this.#client.getUserTrades(\n removeUndefined(validatedInput),\n toConnectCallOptions(options),\n );\n return {\n trades: parse(v.array(this.#userTradeSchema), res.trades),\n nextPageToken: res.nextPageToken,\n };\n }\n\n /**\n * Subscribes to private user trade updates on private:spot:trades:{accountId}:proto and emits parsed fills.\n */\n subscribe(input: SubscribeTradesInput) {\n const channel = `private:spot:trades:${input.accountId}:proto`;\n return connectReadyGatedProtoChannel(this.#realtime, {\n channel,\n schema: Proto.UserTradeSchema,\n ready: () => this.#scales.ready(),\n onPublication: (data) => {\n const trade = parse(this.#userTradeSchema, data);\n input.onEvent(trade);\n },\n onConnected: () => input.onOpen?.(),\n onDisconnected: () => input.onClose?.(),\n onError: input.onError,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAuBA,IAAa,gBAAb,MAA2B;CACvB;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,mBAAmB,sBAAsB,MAAM;CACxD;;;;CAKA,MAAM,KACF,QAAuD,CAAC,GACxD,SACmD;EACnD,MAAM,KAAKD,QAAQ,MAAM;EACzB,MAAM,WAAW,0BAA0B,OAAO,KAAKD,SAAS;EAChE,MAAM,iBAAiB,MAAM,0BAA0B,QAAQ;EAC/D,MAAM,MAAM,MAAM,KAAKH,QAAQ,cAC3B,gBAAgB,cAAc,GAC9B,qBAAqB,OAAO,CAChC;EACA,OAAO;GACH,QAAQ,MAAM,EAAE,MAAM,KAAKK,gBAAgB,GAAG,IAAI,MAAM;GACxD,eAAe,IAAI;EACvB;CACJ;;;;CAKA,UAAU,OAA6B;EACnC,MAAM,UAAU,uBAAuB,MAAM,UAAU;EACvD,OAAO,8BAA8B,KAAKH,WAAW;GACjD;GACA,QAAQI;GACR,aAAa,KAAKF,QAAQ,MAAM;GAChC,gBAAgB,SAAS;IACrB,MAAM,QAAQ,MAAM,KAAKC,kBAAkB,IAAI;IAC/C,MAAM,QAAQ,KAAK;GACvB;GACA,mBAAmB,MAAM,SAAS;GAClC,sBAAsB,MAAM,UAAU;GACtC,SAAS,MAAM;EACnB,CAAC;CACL;AACJ"}