@polyester/sdk 0.21.1 → 0.22.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.
- package/CHANGELOG.md +12 -0
- package/README.md +5 -0
- package/dist/catalogs/snapshot-validation.js +0 -1
- package/dist/catalogs/snapshot-validation.js.map +1 -1
- package/dist/catalogs/zipper-catalog.d.ts +0 -3
- package/dist/catalogs/zipper-catalog.d.ts.map +1 -1
- package/dist/catalogs/zipper-catalog.js +0 -1
- package/dist/catalogs/zipper-catalog.js.map +1 -1
- package/dist/environment.js +43 -1
- package/dist/environment.js.map +1 -1
- package/dist/gen/chain/zipper/v1/zipper_pb.d.ts +0 -6
- package/dist/gen/chain/zipper/v1/zipper_pb.d.ts.map +1 -1
- package/dist/gen/chain/zipper/v1/zipper_pb.js +1 -1
- package/dist/gen/chain/zipper/v1/zipper_pb.js.map +1 -1
- package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts +236 -8
- package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts.map +1 -1
- package/dist/gen/marketoverview/v1/marketoverview_pb.js +50 -2
- package/dist/gen/marketoverview/v1/marketoverview_pb.js.map +1 -1
- package/dist/gen/orders/v1/orders_pb.d.ts +9 -6
- package/dist/gen/orders/v1/orders_pb.d.ts.map +1 -1
- package/dist/gen/orders/v1/orders_pb.js.map +1 -1
- package/dist/gen/orders/v1/orders_read_pb.d.ts +2 -1
- package/dist/gen/orders/v1/orders_read_pb.d.ts.map +1 -1
- package/dist/gen/orders/v1/orders_read_pb.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/services/lifecycle/lifecycle.schemas.d.ts +42 -42
- package/dist/services/market-overview/index.d.ts +2 -2
- package/dist/services/market-overview/market-overview.d.ts +9 -1
- package/dist/services/market-overview/market-overview.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.js +15 -1
- package/dist/services/market-overview/market-overview.js.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts +160 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.js +46 -1
- package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
- package/dist/services/market-overview/market-overview.types.d.ts +2 -2
- package/dist/services/orders/orders-output.schemas.d.ts +12 -12
- package/dist/services/orders/orders.d.ts +1 -1
- package/dist/services/orders/orders.d.ts.map +1 -1
- package/dist/services/orders/orders.js +10 -3
- package/dist/services/orders/orders.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.schemas.js +3 -5
- package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.d.ts +2 -2
- package/dist/services/triggers/triggers-output.schemas.d.ts +18 -18
- package/dist/services/zipper/zipper.schemas.d.ts.map +1 -1
- package/dist/services/zipper/zipper.schemas.js +0 -1
- package/dist/services/zipper/zipper.schemas.js.map +1 -1
- package/dist/shared/catalog-config.d.ts +0 -1
- package/dist/shared/catalog-config.d.ts.map +1 -1
- package/dist/shared/catalog-config.js.map +1 -1
- package/dist/shared/errors.d.ts +3 -2
- package/dist/shared/errors.d.ts.map +1 -1
- package/dist/shared/errors.js +3 -2
- package/dist/shared/errors.js.map +1 -1
- package/package.json +2 -2
|
@@ -156,6 +156,165 @@ declare const SpotVolumeHistoryResponseSchema: v.SchemaWithPipe<readonly [v.Obje
|
|
|
156
156
|
}[];
|
|
157
157
|
}>]>;
|
|
158
158
|
type SpotVolumeHistoryResponse = v.InferOutput<typeof SpotVolumeHistoryResponseSchema>;
|
|
159
|
+
declare const CurrencyMetadataSchema: v.ObjectSchema<{
|
|
160
|
+
readonly code: v.StringSchema<undefined>;
|
|
161
|
+
readonly defaultEnglishName: v.StringSchema<undefined>;
|
|
162
|
+
readonly symbol: v.StringSchema<undefined>;
|
|
163
|
+
readonly fractionDigits: v.NumberSchema<undefined>;
|
|
164
|
+
}, undefined>;
|
|
165
|
+
type CurrencyMetadata = v.InferOutput<typeof CurrencyMetadataSchema>;
|
|
166
|
+
declare const CurrencyConversionConfigSchema: v.ObjectSchema<{
|
|
167
|
+
readonly fiat: v.ArraySchema<v.ObjectSchema<{
|
|
168
|
+
readonly code: v.StringSchema<undefined>;
|
|
169
|
+
readonly defaultEnglishName: v.StringSchema<undefined>;
|
|
170
|
+
readonly symbol: v.StringSchema<undefined>;
|
|
171
|
+
readonly fractionDigits: v.NumberSchema<undefined>;
|
|
172
|
+
}, undefined>, undefined>;
|
|
173
|
+
readonly stablecoins: v.ArraySchema<v.ObjectSchema<{
|
|
174
|
+
readonly code: v.StringSchema<undefined>;
|
|
175
|
+
readonly defaultEnglishName: v.StringSchema<undefined>;
|
|
176
|
+
readonly symbol: v.StringSchema<undefined>;
|
|
177
|
+
readonly fractionDigits: v.NumberSchema<undefined>;
|
|
178
|
+
}, undefined>, undefined>;
|
|
179
|
+
}, undefined>;
|
|
180
|
+
type CurrencyConversionConfig = v.InferOutput<typeof CurrencyConversionConfigSchema>;
|
|
181
|
+
declare const FiatConversionRateSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
182
|
+
readonly code: v.StringSchema<undefined>;
|
|
183
|
+
readonly unitsPerUsdE8: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
184
|
+
}, undefined>, v.TransformAction<{
|
|
185
|
+
code: string;
|
|
186
|
+
unitsPerUsdE8: string;
|
|
187
|
+
}, {
|
|
188
|
+
code: string;
|
|
189
|
+
unitsPerUsd: string;
|
|
190
|
+
}>]>;
|
|
191
|
+
type FiatConversionRate = v.InferOutput<typeof FiatConversionRateSchema>;
|
|
192
|
+
declare const FiatConversionSnapshotSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
193
|
+
readonly rates: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
194
|
+
readonly code: v.StringSchema<undefined>;
|
|
195
|
+
readonly unitsPerUsdE8: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
196
|
+
}, undefined>, v.TransformAction<{
|
|
197
|
+
code: string;
|
|
198
|
+
unitsPerUsdE8: string;
|
|
199
|
+
}, {
|
|
200
|
+
code: string;
|
|
201
|
+
unitsPerUsd: string;
|
|
202
|
+
}>]>, undefined>;
|
|
203
|
+
readonly sourceTsSec: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, number>, v.SafeIntegerAction<number, undefined>]>;
|
|
204
|
+
readonly stale: v.BooleanSchema<undefined>;
|
|
205
|
+
}, undefined>, v.TransformAction<{
|
|
206
|
+
rates: {
|
|
207
|
+
code: string;
|
|
208
|
+
unitsPerUsd: string;
|
|
209
|
+
}[];
|
|
210
|
+
sourceTsSec: number;
|
|
211
|
+
stale: boolean;
|
|
212
|
+
}, {
|
|
213
|
+
sourceTsMs: number;
|
|
214
|
+
rates: {
|
|
215
|
+
code: string;
|
|
216
|
+
unitsPerUsd: string;
|
|
217
|
+
}[];
|
|
218
|
+
stale: boolean;
|
|
219
|
+
}>]>;
|
|
220
|
+
type FiatConversionSnapshot = v.InferOutput<typeof FiatConversionSnapshotSchema>;
|
|
221
|
+
declare const StablecoinConversionRateSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
222
|
+
readonly code: v.StringSchema<undefined>;
|
|
223
|
+
readonly usdPerUnitE8: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
224
|
+
readonly sourceTsSec: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, number>, v.SafeIntegerAction<number, undefined>]>;
|
|
225
|
+
readonly stale: v.BooleanSchema<undefined>;
|
|
226
|
+
}, undefined>, v.TransformAction<{
|
|
227
|
+
code: string;
|
|
228
|
+
usdPerUnitE8: string;
|
|
229
|
+
sourceTsSec: number;
|
|
230
|
+
stale: boolean;
|
|
231
|
+
}, {
|
|
232
|
+
usdPerUnit: string;
|
|
233
|
+
sourceTsMs: number;
|
|
234
|
+
code: string;
|
|
235
|
+
stale: boolean;
|
|
236
|
+
}>]>;
|
|
237
|
+
type StablecoinConversionRate = v.InferOutput<typeof StablecoinConversionRateSchema>;
|
|
238
|
+
declare const CurrencyConversionRatesSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
239
|
+
readonly fiat: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
240
|
+
readonly rates: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
241
|
+
readonly code: v.StringSchema<undefined>;
|
|
242
|
+
readonly unitsPerUsdE8: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
243
|
+
}, undefined>, v.TransformAction<{
|
|
244
|
+
code: string;
|
|
245
|
+
unitsPerUsdE8: string;
|
|
246
|
+
}, {
|
|
247
|
+
code: string;
|
|
248
|
+
unitsPerUsd: string;
|
|
249
|
+
}>]>, undefined>;
|
|
250
|
+
readonly sourceTsSec: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, number>, v.SafeIntegerAction<number, undefined>]>;
|
|
251
|
+
readonly stale: v.BooleanSchema<undefined>;
|
|
252
|
+
}, undefined>, v.TransformAction<{
|
|
253
|
+
rates: {
|
|
254
|
+
code: string;
|
|
255
|
+
unitsPerUsd: string;
|
|
256
|
+
}[];
|
|
257
|
+
sourceTsSec: number;
|
|
258
|
+
stale: boolean;
|
|
259
|
+
}, {
|
|
260
|
+
sourceTsMs: number;
|
|
261
|
+
rates: {
|
|
262
|
+
code: string;
|
|
263
|
+
unitsPerUsd: string;
|
|
264
|
+
}[];
|
|
265
|
+
stale: boolean;
|
|
266
|
+
}>]>, undefined>;
|
|
267
|
+
readonly stablecoins: v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
268
|
+
readonly code: v.StringSchema<undefined>;
|
|
269
|
+
readonly usdPerUnitE8: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, string>]>;
|
|
270
|
+
readonly sourceTsSec: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, number>, v.SafeIntegerAction<number, undefined>]>;
|
|
271
|
+
readonly stale: v.BooleanSchema<undefined>;
|
|
272
|
+
}, undefined>, v.TransformAction<{
|
|
273
|
+
code: string;
|
|
274
|
+
usdPerUnitE8: string;
|
|
275
|
+
sourceTsSec: number;
|
|
276
|
+
stale: boolean;
|
|
277
|
+
}, {
|
|
278
|
+
usdPerUnit: string;
|
|
279
|
+
sourceTsMs: number;
|
|
280
|
+
code: string;
|
|
281
|
+
stale: boolean;
|
|
282
|
+
}>]>, undefined>;
|
|
283
|
+
readonly snapshotTsSec: v.SchemaWithPipe<readonly [v.BigintSchema<undefined>, v.TransformAction<bigint, number>, v.SafeIntegerAction<number, undefined>]>;
|
|
284
|
+
}, undefined>, v.TransformAction<{
|
|
285
|
+
fiat?: {
|
|
286
|
+
sourceTsMs: number;
|
|
287
|
+
rates: {
|
|
288
|
+
code: string;
|
|
289
|
+
unitsPerUsd: string;
|
|
290
|
+
}[];
|
|
291
|
+
stale: boolean;
|
|
292
|
+
} | undefined;
|
|
293
|
+
stablecoins: {
|
|
294
|
+
usdPerUnit: string;
|
|
295
|
+
sourceTsMs: number;
|
|
296
|
+
code: string;
|
|
297
|
+
stale: boolean;
|
|
298
|
+
}[];
|
|
299
|
+
snapshotTsSec: number;
|
|
300
|
+
}, {
|
|
301
|
+
snapshotTsMs: number;
|
|
302
|
+
fiat?: {
|
|
303
|
+
sourceTsMs: number;
|
|
304
|
+
rates: {
|
|
305
|
+
code: string;
|
|
306
|
+
unitsPerUsd: string;
|
|
307
|
+
}[];
|
|
308
|
+
stale: boolean;
|
|
309
|
+
} | undefined;
|
|
310
|
+
stablecoins: {
|
|
311
|
+
usdPerUnit: string;
|
|
312
|
+
sourceTsMs: number;
|
|
313
|
+
code: string;
|
|
314
|
+
stale: boolean;
|
|
315
|
+
}[];
|
|
316
|
+
}>]>;
|
|
317
|
+
type CurrencyConversionRates = v.InferOutput<typeof CurrencyConversionRatesSchema>;
|
|
159
318
|
//#endregion
|
|
160
|
-
export { ListMarketOverviewInput, ListMarketOverviewInputSchema, MarketOverview, MarketOverviewOrderBy, MarketOverviewOrderBySchema, MarketOverviewSort, MarketOverviewSortSchema, MarketOverviewSparkline, SparklineIntervalName, SparklineIntervalSchema, SpotPairVolumeSeries, SpotPairVolumeSeriesSchema, SpotVolumeHistoryInput, SpotVolumeHistoryInputSchema, SpotVolumeHistoryResponse, SpotVolumeHistoryResponseSchema, createMarketOverviewSchema };
|
|
319
|
+
export { CurrencyConversionConfig, CurrencyConversionConfigSchema, CurrencyConversionRates, CurrencyConversionRatesSchema, CurrencyMetadata, CurrencyMetadataSchema, FiatConversionRate, FiatConversionRateSchema, FiatConversionSnapshot, FiatConversionSnapshotSchema, ListMarketOverviewInput, ListMarketOverviewInputSchema, MarketOverview, MarketOverviewOrderBy, MarketOverviewOrderBySchema, MarketOverviewSort, MarketOverviewSortSchema, MarketOverviewSparkline, SparklineIntervalName, SparklineIntervalSchema, SpotPairVolumeSeries, SpotPairVolumeSeriesSchema, SpotVolumeHistoryInput, SpotVolumeHistoryInputSchema, SpotVolumeHistoryResponse, SpotVolumeHistoryResponseSchema, StablecoinConversionRate, StablecoinConversionRateSchema, createMarketOverviewSchema };
|
|
161
320
|
//# sourceMappingURL=market-overview.schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"market-overview.schemas.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"mappings":";;;;;;cA4Ba,yBAAuB,EAAA;KAExB,wBAAwB,EAAE,mBAAmB;KAiB7C;EACR,UAAU,YAAY;EACtB;;cAGS,6BAA2B,EAAA;KAE5B,wBAAwB,EAAE,mBAAmB;cAE5C,0BAAwB,EAAA;KAEzB,qBAAqB,EAAE,mBAAmB;iBA2BtC,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6ChD,iBAAiB,EAAE,YAAY,kBAAkB;cAqChD,+BAA6B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAwB9B,0BAA0B,EAAE,kBAAkB;cAE7C,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;KAa7B,yBAAyB,EAAE,kBAAkB;cAE5C,4BAA0B,EAAA,yBAAA,EAAA;;;;;;;;;;KAI3B,uBAAuB,EAAE,mBAAmB;cAE3C,iCAA+B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAchC,4BAA4B,EAAE,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"market-overview.schemas.d.ts","names":[],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"mappings":";;;;;;cA4Ba,yBAAuB,EAAA;KAExB,wBAAwB,EAAE,mBAAmB;KAiB7C;EACR,UAAU,YAAY;EACtB;;cAGS,6BAA2B,EAAA;KAE5B,wBAAwB,EAAE,mBAAmB;cAE5C,0BAAwB,EAAA;KAEzB,qBAAqB,EAAE,mBAAmB;iBA2BtC,2BAA2B,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6ChD,iBAAiB,EAAE,YAAY,kBAAkB;cAqChD,+BAA6B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAwB9B,0BAA0B,EAAE,kBAAkB;cAE7C,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;KAa7B,yBAAyB,EAAE,kBAAkB;cAE5C,4BAA0B,EAAA,yBAAA,EAAA;;;;;;;;;;KAI3B,uBAAuB,EAAE,mBAAmB;cAE3C,iCAA+B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAchC,4BAA4B,EAAE,mBAAmB;cAEhD,wBAAsB,EAAA;;;;;;KAMvB,mBAAmB,EAAE,mBAAmB;cAEvC,gCAA8B,EAAA;;;;;;;;;;;;;;KAI/B,2BAA2B,EAAE,mBAAmB;cAY/C,0BAAwB,EAAA,yBAAA,EAAA;;;;;;;;;;KAIzB,qBAAqB,EAAE,mBAAmB;cAEzC,8BAA4B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAQ7B,yBAAyB,EAAE,mBAAmB;cAE7C,gCAA8B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;KAa/B,2BAA2B,EAAE,mBAAmB;cAE/C,+BAA6B,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAQ9B,0BAA0B,EAAE,mBAAmB"}
|
|
@@ -92,7 +92,52 @@ const SpotVolumeHistoryResponseSchema = v.pipe(v.object({
|
|
|
92
92
|
...response,
|
|
93
93
|
totalVolumeUsd: totalVolumeUsdScaled
|
|
94
94
|
})));
|
|
95
|
+
const CurrencyMetadataSchema = v.object({
|
|
96
|
+
code: v.string(),
|
|
97
|
+
defaultEnglishName: v.string(),
|
|
98
|
+
symbol: v.string(),
|
|
99
|
+
fractionDigits: v.number()
|
|
100
|
+
});
|
|
101
|
+
const CurrencyConversionConfigSchema = v.object({
|
|
102
|
+
fiat: v.array(CurrencyMetadataSchema),
|
|
103
|
+
stablecoins: v.array(CurrencyMetadataSchema)
|
|
104
|
+
});
|
|
105
|
+
const ConversionRateSchema = v.pipe(v.bigint(), v.transform((value) => scaledToDecimalOutput(value, 8)));
|
|
106
|
+
const ConversionTimestampSchema = v.pipe(v.bigint(), v.transform((value) => Number(value * 1000n)), v.safeInteger());
|
|
107
|
+
const FiatConversionRateSchema = v.pipe(v.object({
|
|
108
|
+
code: v.string(),
|
|
109
|
+
unitsPerUsdE8: ConversionRateSchema
|
|
110
|
+
}), v.transform(({ code, unitsPerUsdE8 }) => ({
|
|
111
|
+
code,
|
|
112
|
+
unitsPerUsd: unitsPerUsdE8
|
|
113
|
+
})));
|
|
114
|
+
const FiatConversionSnapshotSchema = v.pipe(v.object({
|
|
115
|
+
rates: v.array(FiatConversionRateSchema),
|
|
116
|
+
sourceTsSec: ConversionTimestampSchema,
|
|
117
|
+
stale: v.boolean()
|
|
118
|
+
}), v.transform(({ sourceTsSec, ...snapshot }) => ({
|
|
119
|
+
...snapshot,
|
|
120
|
+
sourceTsMs: sourceTsSec
|
|
121
|
+
})));
|
|
122
|
+
const StablecoinConversionRateSchema = v.pipe(v.object({
|
|
123
|
+
code: v.string(),
|
|
124
|
+
usdPerUnitE8: ConversionRateSchema,
|
|
125
|
+
sourceTsSec: ConversionTimestampSchema,
|
|
126
|
+
stale: v.boolean()
|
|
127
|
+
}), v.transform(({ usdPerUnitE8, sourceTsSec, ...rate }) => ({
|
|
128
|
+
...rate,
|
|
129
|
+
usdPerUnit: usdPerUnitE8,
|
|
130
|
+
sourceTsMs: sourceTsSec
|
|
131
|
+
})));
|
|
132
|
+
const CurrencyConversionRatesSchema = v.pipe(v.object({
|
|
133
|
+
fiat: v.optional(FiatConversionSnapshotSchema),
|
|
134
|
+
stablecoins: v.array(StablecoinConversionRateSchema),
|
|
135
|
+
snapshotTsSec: ConversionTimestampSchema
|
|
136
|
+
}), v.transform(({ snapshotTsSec, ...response }) => ({
|
|
137
|
+
...response,
|
|
138
|
+
snapshotTsMs: snapshotTsSec
|
|
139
|
+
})));
|
|
95
140
|
//#endregion
|
|
96
|
-
export { ListMarketOverviewInputSchema, MarketOverviewOrderBySchema, MarketOverviewSortSchema, SparklineIntervalSchema, SpotPairVolumeSeriesSchema, SpotVolumeHistoryInputSchema, SpotVolumeHistoryResponseSchema, createMarketOverviewSchema };
|
|
141
|
+
export { CurrencyConversionConfigSchema, CurrencyConversionRatesSchema, CurrencyMetadataSchema, FiatConversionRateSchema, FiatConversionSnapshotSchema, ListMarketOverviewInputSchema, MarketOverviewOrderBySchema, MarketOverviewSortSchema, SparklineIntervalSchema, SpotPairVolumeSeriesSchema, SpotVolumeHistoryInputSchema, SpotVolumeHistoryResponseSchema, StablecoinConversionRateSchema, createMarketOverviewSchema };
|
|
97
142
|
|
|
98
143
|
//# sourceMappingURL=market-overview.schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"market-overview.schemas.js","names":["Proto.SparklineInterval"],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport * as v from \"valibot\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { PositiveUint32InputSchema, SymbolIdInputSchema } from \"../shared.js\";\nimport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n SparklineIntervalCodec,\n MarketOverviewOrderByCodec,\n MarketOverviewSortCodec,\n} from \"./market-overview.codecs.js\";\n\nexport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n} from \"./market-overview.codecs.js\";\n\nexport {\n MarketOrderBy,\n SortDirection,\n SparklineInterval,\n} from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\n\nexport const SparklineIntervalSchema = v.picklist(SPARKLINE_INTERVAL_VALUES);\n\nexport type SparklineIntervalName = v.InferOutput<typeof SparklineIntervalSchema>;\n\nconst MarketOverviewSparklineRawSchema = v.object({\n interval: v.pipe(\n v.enum(Proto.SparklineInterval),\n v.transform((value) =>\n requiredEnumLabel(\n SparklineIntervalCodec.protoToOutput,\n value,\n \"MarketOverviewSparklineSchema\",\n \"interval\",\n ),\n ),\n ),\n closeTicks: v.array(v.bigint()),\n});\n\nexport type MarketOverviewSparkline = {\n interval: DecodedEnum<SparklineIntervalName>;\n close: string[];\n};\n\nexport const MarketOverviewOrderBySchema = v.picklist(MARKET_OVERVIEW_ORDER_BY_VALUES);\n\nexport type MarketOverviewOrderBy = v.InferOutput<typeof MarketOverviewOrderBySchema>;\n\nexport const MarketOverviewSortSchema = v.picklist(MARKET_OVERVIEW_SORT_VALUES);\n\nexport type MarketOverviewSort = v.InferOutput<typeof MarketOverviewSortSchema>;\n\n/** USD amounts are always scaled by 1e6 on the wire. */\nconst UsdVolumeSchema = v.pipe(\n v.bigint(),\n v.transform((value) => scaledToDecimalOutput(value, 6)),\n);\n\nconst MarketOverviewRawSchema = v.object({\n symbolId: v.number(),\n lastPriceTicks: v.bigint(),\n lastTradeTsNs: v.optional(v.bigint(), 0n),\n change24hBps: v.number(),\n high24hTicks: v.bigint(),\n low24hTicks: v.bigint(),\n volume24hBaseScaled: v.optional(v.bigint()),\n volume24hQuoteScaled: v.optional(v.bigint()),\n volume24hUsdScaled: v.optional(UsdVolumeSchema),\n listedTsNs: v.optional(v.bigint(), 0n),\n bestBidTicks: v.bigint(),\n bestBidQtyScaled: v.bigint(),\n bestAskTicks: v.bigint(),\n bestAskQtyScaled: v.bigint(),\n sparklines: v.optional(v.array(MarketOverviewSparklineRawSchema), []),\n indexPriceTicks: v.bigint(),\n});\n\nexport function createMarketOverviewSchema(scales: SdkScales) {\n return v.pipe(\n MarketOverviewRawSchema,\n v.transform((m) => {\n const priceScale = scales.price();\n const baseQtyScale = scales.baseQty(m.symbolId);\n const quoteAmountScale = scales.quoteAmount(m.symbolId);\n return {\n symbolId: m.symbolId,\n lastPrice: scaledToDecimalOutput(m.lastPriceTicks, priceScale),\n lastTradeTsMs: tsNsToMs(m.lastTradeTsNs),\n change24hBps: m.change24hBps,\n high24h: scaledToDecimalOutput(m.high24hTicks, priceScale),\n low24h: scaledToDecimalOutput(m.low24hTicks, priceScale),\n volume24hBase:\n m.volume24hBaseScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hBaseScaled, baseQtyScale),\n volume24hQuote:\n m.volume24hQuoteScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),\n volume24hUsd: m.volume24hUsdScaled,\n listedTsMs: tsNsToMs(m.listedTsNs),\n bestBid: scaledToDecimalOutput(m.bestBidTicks, priceScale),\n bestBidQty: scaledToDecimalOutput(m.bestBidQtyScaled, baseQtyScale),\n bestAsk: scaledToDecimalOutput(m.bestAskTicks, priceScale),\n bestAskQty: scaledToDecimalOutput(m.bestAskQtyScaled, baseQtyScale),\n indexPrice:\n m.indexPriceTicks > 0n\n ? scaledToDecimalOutput(m.indexPriceTicks, priceScale)\n : undefined,\n sparklines: (m.sparklines ?? []).map(\n (s): MarketOverviewSparkline => ({\n interval: s.interval,\n close: s.closeTicks\n .map((tick) => scaledToDecimalOutput(tick, priceScale))\n .reverse(),\n }),\n ),\n };\n }),\n );\n}\n\nexport type MarketOverview = v.InferOutput<ReturnType<typeof createMarketOverviewSchema>>;\n\nconst MS_PER_24H = 86_400_000;\n\nfunction change24hBpsFromSparklineFirstLast(sparklines: MarketOverview[\"sparklines\"]): number {\n const s = sparklines.find((e) => e.interval === \"24h\") ?? sparklines[0];\n if (!s || s.close.length < 2) return 0;\n const first = Number(s.close[0] ?? 0);\n const last = Number(s.close.at(-1) ?? 0);\n if (!Number.isFinite(first) || !Number.isFinite(last)) return 0;\n if (first === 0) return 0;\n return Math.round(((last - first) / first) * 10_000);\n}\n\n/**\n * Formats the 24-hour market change percentage for display.\n */\nexport function getMarketOverview24hChangeDisplay(\n market: Pick<MarketOverview, \"change24hBps\" | \"listedTsMs\" | \"sparklines\">,\n nowMs: number = Date.now(),\n): { change24hBps: number; showNewListingSparklineInfo: boolean } {\n const api = market.change24hBps;\n const newish = api === 0 && market.listedTsMs > 0 && nowMs - market.listedTsMs < MS_PER_24H;\n if (!newish) {\n return { change24hBps: api, showNewListingSparklineInfo: false };\n }\n return {\n change24hBps: change24hBpsFromSparklineFirstLast(market.sparklines),\n showNewListingSparklineInfo: true,\n };\n}\n\nexport type MarketOverviewBatch = {\n markets: MarketOverview[];\n tsNs: bigint;\n};\n\nexport const ListMarketOverviewInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(v.array(SymbolIdInputSchema), []),\n limit: v.optional(PositiveUint32InputSchema, 500),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n orderBy: v.pipe(\n v.optional(MarketOverviewOrderBySchema, \"volume_24h_usd\"),\n v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? \"volume_24h_usd\"]),\n ),\n sort: v.pipe(\n v.optional(MarketOverviewSortSchema, \"desc\"),\n v.transform((v) => MarketOverviewSortCodec.inputToProto[v ?? \"desc\"]),\n ),\n includeSparklines: v.optional(v.boolean(), true),\n sparklineIntervals: v.pipe(\n v.optional(v.array(SparklineIntervalSchema), [\"24h\"]),\n v.transform((intervals) =>\n (intervals ?? [\"24h\"]).map((v) => SparklineIntervalCodec.inputToProto[v]),\n ),\n ),\n }),\n v.transform(({ symbolIds, ...input }) => ({ symbolId: symbolIds, ...input })),\n);\n\nexport type ListMarketOverviewInput = v.InferInput<typeof ListMarketOverviewInputSchema>;\n\nexport const SpotVolumeHistoryInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(\n v.pipe(\n v.array(SymbolIdInputSchema),\n v.transform((ids) => [...new Set(ids)]),\n v.maxLength(2000),\n ),\n [],\n ),\n }),\n v.transform(({ symbolIds }) => ({ symbolId: symbolIds })),\n);\nexport type SpotVolumeHistoryInput = v.InferInput<typeof SpotVolumeHistoryInputSchema>;\n\nexport const SpotPairVolumeSeriesSchema = v.pipe(\n v.object({ symbolId: v.number(), volumeUsdScaled: v.array(UsdVolumeSchema) }),\n v.transform(({ symbolId, volumeUsdScaled }) => ({ symbolId, volumeUsd: volumeUsdScaled })),\n);\nexport type SpotPairVolumeSeries = v.InferOutput<typeof SpotPairVolumeSeriesSchema>;\n\nexport const SpotVolumeHistoryResponseSchema = v.pipe(\n v.object({\n bucket: v.string(),\n startTsSec: v.number(),\n endTsSec: v.number(),\n points: v.number(),\n pairs: v.array(SpotPairVolumeSeriesSchema),\n totalVolumeUsdScaled: v.array(UsdVolumeSchema),\n }),\n v.transform(({ totalVolumeUsdScaled, ...response }) => ({\n ...response,\n totalVolumeUsd: totalVolumeUsdScaled,\n })),\n);\nexport type SpotVolumeHistoryResponse = v.InferOutput<typeof SpotVolumeHistoryResponseSchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"market-overview.schemas.js","names":["Proto.SparklineInterval"],"sources":["../../../src/services/market-overview/market-overview.schemas.ts"],"sourcesContent":["import * as Proto from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\nimport * as v from \"valibot\";\nimport { tsNsToMs } from \"../../utils/time.js\";\nimport type { DecodedEnum } from \"../../utils/types.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { PositiveUint32InputSchema, SymbolIdInputSchema } from \"../shared.js\";\nimport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n SparklineIntervalCodec,\n MarketOverviewOrderByCodec,\n MarketOverviewSortCodec,\n} from \"./market-overview.codecs.js\";\n\nexport {\n SPARKLINE_INTERVAL_VALUES,\n MARKET_OVERVIEW_ORDER_BY_VALUES,\n MARKET_OVERVIEW_SORT_VALUES,\n} from \"./market-overview.codecs.js\";\n\nexport {\n MarketOrderBy,\n SortDirection,\n SparklineInterval,\n} from \"../../gen/marketoverview/v1/marketoverview_pb.js\";\n\nexport const SparklineIntervalSchema = v.picklist(SPARKLINE_INTERVAL_VALUES);\n\nexport type SparklineIntervalName = v.InferOutput<typeof SparklineIntervalSchema>;\n\nconst MarketOverviewSparklineRawSchema = v.object({\n interval: v.pipe(\n v.enum(Proto.SparklineInterval),\n v.transform((value) =>\n requiredEnumLabel(\n SparklineIntervalCodec.protoToOutput,\n value,\n \"MarketOverviewSparklineSchema\",\n \"interval\",\n ),\n ),\n ),\n closeTicks: v.array(v.bigint()),\n});\n\nexport type MarketOverviewSparkline = {\n interval: DecodedEnum<SparklineIntervalName>;\n close: string[];\n};\n\nexport const MarketOverviewOrderBySchema = v.picklist(MARKET_OVERVIEW_ORDER_BY_VALUES);\n\nexport type MarketOverviewOrderBy = v.InferOutput<typeof MarketOverviewOrderBySchema>;\n\nexport const MarketOverviewSortSchema = v.picklist(MARKET_OVERVIEW_SORT_VALUES);\n\nexport type MarketOverviewSort = v.InferOutput<typeof MarketOverviewSortSchema>;\n\n/** USD amounts are always scaled by 1e6 on the wire. */\nconst UsdVolumeSchema = v.pipe(\n v.bigint(),\n v.transform((value) => scaledToDecimalOutput(value, 6)),\n);\n\nconst MarketOverviewRawSchema = v.object({\n symbolId: v.number(),\n lastPriceTicks: v.bigint(),\n lastTradeTsNs: v.optional(v.bigint(), 0n),\n change24hBps: v.number(),\n high24hTicks: v.bigint(),\n low24hTicks: v.bigint(),\n volume24hBaseScaled: v.optional(v.bigint()),\n volume24hQuoteScaled: v.optional(v.bigint()),\n volume24hUsdScaled: v.optional(UsdVolumeSchema),\n listedTsNs: v.optional(v.bigint(), 0n),\n bestBidTicks: v.bigint(),\n bestBidQtyScaled: v.bigint(),\n bestAskTicks: v.bigint(),\n bestAskQtyScaled: v.bigint(),\n sparklines: v.optional(v.array(MarketOverviewSparklineRawSchema), []),\n indexPriceTicks: v.bigint(),\n});\n\nexport function createMarketOverviewSchema(scales: SdkScales) {\n return v.pipe(\n MarketOverviewRawSchema,\n v.transform((m) => {\n const priceScale = scales.price();\n const baseQtyScale = scales.baseQty(m.symbolId);\n const quoteAmountScale = scales.quoteAmount(m.symbolId);\n return {\n symbolId: m.symbolId,\n lastPrice: scaledToDecimalOutput(m.lastPriceTicks, priceScale),\n lastTradeTsMs: tsNsToMs(m.lastTradeTsNs),\n change24hBps: m.change24hBps,\n high24h: scaledToDecimalOutput(m.high24hTicks, priceScale),\n low24h: scaledToDecimalOutput(m.low24hTicks, priceScale),\n volume24hBase:\n m.volume24hBaseScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hBaseScaled, baseQtyScale),\n volume24hQuote:\n m.volume24hQuoteScaled === undefined\n ? undefined\n : scaledToDecimalOutput(m.volume24hQuoteScaled, quoteAmountScale),\n volume24hUsd: m.volume24hUsdScaled,\n listedTsMs: tsNsToMs(m.listedTsNs),\n bestBid: scaledToDecimalOutput(m.bestBidTicks, priceScale),\n bestBidQty: scaledToDecimalOutput(m.bestBidQtyScaled, baseQtyScale),\n bestAsk: scaledToDecimalOutput(m.bestAskTicks, priceScale),\n bestAskQty: scaledToDecimalOutput(m.bestAskQtyScaled, baseQtyScale),\n indexPrice:\n m.indexPriceTicks > 0n\n ? scaledToDecimalOutput(m.indexPriceTicks, priceScale)\n : undefined,\n sparklines: (m.sparklines ?? []).map(\n (s): MarketOverviewSparkline => ({\n interval: s.interval,\n close: s.closeTicks\n .map((tick) => scaledToDecimalOutput(tick, priceScale))\n .reverse(),\n }),\n ),\n };\n }),\n );\n}\n\nexport type MarketOverview = v.InferOutput<ReturnType<typeof createMarketOverviewSchema>>;\n\nconst MS_PER_24H = 86_400_000;\n\nfunction change24hBpsFromSparklineFirstLast(sparklines: MarketOverview[\"sparklines\"]): number {\n const s = sparklines.find((e) => e.interval === \"24h\") ?? sparklines[0];\n if (!s || s.close.length < 2) return 0;\n const first = Number(s.close[0] ?? 0);\n const last = Number(s.close.at(-1) ?? 0);\n if (!Number.isFinite(first) || !Number.isFinite(last)) return 0;\n if (first === 0) return 0;\n return Math.round(((last - first) / first) * 10_000);\n}\n\n/**\n * Formats the 24-hour market change percentage for display.\n */\nexport function getMarketOverview24hChangeDisplay(\n market: Pick<MarketOverview, \"change24hBps\" | \"listedTsMs\" | \"sparklines\">,\n nowMs: number = Date.now(),\n): { change24hBps: number; showNewListingSparklineInfo: boolean } {\n const api = market.change24hBps;\n const newish = api === 0 && market.listedTsMs > 0 && nowMs - market.listedTsMs < MS_PER_24H;\n if (!newish) {\n return { change24hBps: api, showNewListingSparklineInfo: false };\n }\n return {\n change24hBps: change24hBpsFromSparklineFirstLast(market.sparklines),\n showNewListingSparklineInfo: true,\n };\n}\n\nexport type MarketOverviewBatch = {\n markets: MarketOverview[];\n tsNs: bigint;\n};\n\nexport const ListMarketOverviewInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(v.array(SymbolIdInputSchema), []),\n limit: v.optional(PositiveUint32InputSchema, 500),\n pageToken: v.optional(v.pipe(v.string(), v.trim()), \"\"),\n orderBy: v.pipe(\n v.optional(MarketOverviewOrderBySchema, \"volume_24h_usd\"),\n v.transform((v) => MarketOverviewOrderByCodec.inputToProto[v ?? \"volume_24h_usd\"]),\n ),\n sort: v.pipe(\n v.optional(MarketOverviewSortSchema, \"desc\"),\n v.transform((v) => MarketOverviewSortCodec.inputToProto[v ?? \"desc\"]),\n ),\n includeSparklines: v.optional(v.boolean(), true),\n sparklineIntervals: v.pipe(\n v.optional(v.array(SparklineIntervalSchema), [\"24h\"]),\n v.transform((intervals) =>\n (intervals ?? [\"24h\"]).map((v) => SparklineIntervalCodec.inputToProto[v]),\n ),\n ),\n }),\n v.transform(({ symbolIds, ...input }) => ({ symbolId: symbolIds, ...input })),\n);\n\nexport type ListMarketOverviewInput = v.InferInput<typeof ListMarketOverviewInputSchema>;\n\nexport const SpotVolumeHistoryInputSchema = v.pipe(\n v.strictObject({\n symbolIds: v.optional(\n v.pipe(\n v.array(SymbolIdInputSchema),\n v.transform((ids) => [...new Set(ids)]),\n v.maxLength(2000),\n ),\n [],\n ),\n }),\n v.transform(({ symbolIds }) => ({ symbolId: symbolIds })),\n);\nexport type SpotVolumeHistoryInput = v.InferInput<typeof SpotVolumeHistoryInputSchema>;\n\nexport const SpotPairVolumeSeriesSchema = v.pipe(\n v.object({ symbolId: v.number(), volumeUsdScaled: v.array(UsdVolumeSchema) }),\n v.transform(({ symbolId, volumeUsdScaled }) => ({ symbolId, volumeUsd: volumeUsdScaled })),\n);\nexport type SpotPairVolumeSeries = v.InferOutput<typeof SpotPairVolumeSeriesSchema>;\n\nexport const SpotVolumeHistoryResponseSchema = v.pipe(\n v.object({\n bucket: v.string(),\n startTsSec: v.number(),\n endTsSec: v.number(),\n points: v.number(),\n pairs: v.array(SpotPairVolumeSeriesSchema),\n totalVolumeUsdScaled: v.array(UsdVolumeSchema),\n }),\n v.transform(({ totalVolumeUsdScaled, ...response }) => ({\n ...response,\n totalVolumeUsd: totalVolumeUsdScaled,\n })),\n);\nexport type SpotVolumeHistoryResponse = v.InferOutput<typeof SpotVolumeHistoryResponseSchema>;\n\nexport const CurrencyMetadataSchema = v.object({\n code: v.string(),\n defaultEnglishName: v.string(),\n symbol: v.string(),\n fractionDigits: v.number(),\n});\nexport type CurrencyMetadata = v.InferOutput<typeof CurrencyMetadataSchema>;\n\nexport const CurrencyConversionConfigSchema = v.object({\n fiat: v.array(CurrencyMetadataSchema),\n stablecoins: v.array(CurrencyMetadataSchema),\n});\nexport type CurrencyConversionConfig = v.InferOutput<typeof CurrencyConversionConfigSchema>;\n\nconst ConversionRateSchema = v.pipe(\n v.bigint(),\n v.transform((value) => scaledToDecimalOutput(value, 8)),\n);\nconst ConversionTimestampSchema = v.pipe(\n v.bigint(),\n v.transform((value) => Number(value * 1000n)),\n v.safeInteger(),\n);\n\nexport const FiatConversionRateSchema = v.pipe(\n v.object({ code: v.string(), unitsPerUsdE8: ConversionRateSchema }),\n v.transform(({ code, unitsPerUsdE8 }) => ({ code, unitsPerUsd: unitsPerUsdE8 })),\n);\nexport type FiatConversionRate = v.InferOutput<typeof FiatConversionRateSchema>;\n\nexport const FiatConversionSnapshotSchema = v.pipe(\n v.object({\n rates: v.array(FiatConversionRateSchema),\n sourceTsSec: ConversionTimestampSchema,\n stale: v.boolean(),\n }),\n v.transform(({ sourceTsSec, ...snapshot }) => ({ ...snapshot, sourceTsMs: sourceTsSec })),\n);\nexport type FiatConversionSnapshot = v.InferOutput<typeof FiatConversionSnapshotSchema>;\n\nexport const StablecoinConversionRateSchema = v.pipe(\n v.object({\n code: v.string(),\n usdPerUnitE8: ConversionRateSchema,\n sourceTsSec: ConversionTimestampSchema,\n stale: v.boolean(),\n }),\n v.transform(({ usdPerUnitE8, sourceTsSec, ...rate }) => ({\n ...rate,\n usdPerUnit: usdPerUnitE8,\n sourceTsMs: sourceTsSec,\n })),\n);\nexport type StablecoinConversionRate = v.InferOutput<typeof StablecoinConversionRateSchema>;\n\nexport const CurrencyConversionRatesSchema = v.pipe(\n v.object({\n fiat: v.optional(FiatConversionSnapshotSchema),\n stablecoins: v.array(StablecoinConversionRateSchema),\n snapshotTsSec: ConversionTimestampSchema,\n }),\n v.transform(({ snapshotTsSec, ...response }) => ({ ...response, snapshotTsMs: snapshotTsSec })),\n);\nexport type CurrencyConversionRates = v.InferOutput<typeof CurrencyConversionRatesSchema>;\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName, SpotPairVolumeSeries, SpotVolumeHistoryInput, SpotVolumeHistoryResponse } from "./market-overview.schemas.js";
|
|
2
|
-
export type { ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName, SpotPairVolumeSeries, SpotVolumeHistoryInput, SpotVolumeHistoryResponse };
|
|
1
|
+
import { CurrencyConversionConfig, CurrencyConversionRates, CurrencyMetadata, FiatConversionRate, FiatConversionSnapshot, ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName, SpotPairVolumeSeries, SpotVolumeHistoryInput, SpotVolumeHistoryResponse, StablecoinConversionRate } from "./market-overview.schemas.js";
|
|
2
|
+
export type { CurrencyConversionConfig, CurrencyConversionRates, CurrencyMetadata, FiatConversionRate, FiatConversionSnapshot, ListMarketOverviewInput, MarketOverview, MarketOverviewOrderBy, MarketOverviewSort, MarketOverviewSparkline, SparklineIntervalName, SpotPairVolumeSeries, SpotVolumeHistoryInput, SpotVolumeHistoryResponse, StablecoinConversionRate };
|
|
@@ -95,7 +95,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
|
|
|
95
95
|
}, undefined>, undefined>;
|
|
96
96
|
readonly origin: v.OptionalSchema<v.ObjectSchema<{
|
|
97
97
|
readonly scope: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderOriginScope, undefined>, v.TransformAction<OrderOriginScope, "unspecified" | "direct" | "attached_risk" | "standalone_trigger" | "system">]>;
|
|
98
|
-
readonly triggerType: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderTriggerType, undefined>, v.TransformAction<OrderTriggerType, "unspecified" | "
|
|
98
|
+
readonly triggerType: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderTriggerType, undefined>, v.TransformAction<OrderTriggerType, "unspecified" | "stop_loss" | "take_profit" | "trailing_stop" | "twap" | "ladder">]>;
|
|
99
99
|
readonly triggerId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.BigintSchema<undefined>, undefined>, v.TransformAction<bigint | undefined, string | undefined>]>;
|
|
100
100
|
readonly parentOrderId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.BigintSchema<undefined>, undefined>, v.TransformAction<bigint | undefined, string | undefined>]>;
|
|
101
101
|
readonly childSeq: v.NumberSchema<undefined>;
|
|
@@ -197,7 +197,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
|
|
|
197
197
|
} | undefined;
|
|
198
198
|
origin?: {
|
|
199
199
|
scope: "unspecified" | "direct" | "attached_risk" | "standalone_trigger" | "system";
|
|
200
|
-
triggerType: "unspecified" | "
|
|
200
|
+
triggerType: "unspecified" | "stop_loss" | "take_profit" | "trailing_stop" | "twap" | "ladder";
|
|
201
201
|
triggerId?: string | undefined;
|
|
202
202
|
parentOrderId?: string | undefined;
|
|
203
203
|
childSeq: number;
|
|
@@ -216,7 +216,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
|
|
|
216
216
|
marketClientRefPrice?: string | undefined;
|
|
217
217
|
origin?: {
|
|
218
218
|
scope: "unspecified" | "direct" | "attached_risk" | "standalone_trigger" | "system";
|
|
219
|
-
triggerType: "unspecified" | "
|
|
219
|
+
triggerType: "unspecified" | "stop_loss" | "take_profit" | "trailing_stop" | "twap" | "ladder";
|
|
220
220
|
triggerId?: string | undefined;
|
|
221
221
|
parentOrderId?: string | undefined;
|
|
222
222
|
childSeq: number;
|
|
@@ -243,7 +243,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
|
|
|
243
243
|
attachedRisk: {
|
|
244
244
|
takeProfit: {
|
|
245
245
|
state: {
|
|
246
|
-
status: "unspecified" | "
|
|
246
|
+
status: "unspecified" | "completed" | "failed" | "created" | "armed" | "running" | "paused" | "canceled" | "not_configured";
|
|
247
247
|
armedTs: number | undefined;
|
|
248
248
|
armedTsNs: string | undefined;
|
|
249
249
|
terminalTs: number | undefined;
|
|
@@ -262,7 +262,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
|
|
|
262
262
|
} | undefined;
|
|
263
263
|
stopLoss: {
|
|
264
264
|
state: {
|
|
265
|
-
status: "unspecified" | "
|
|
265
|
+
status: "unspecified" | "completed" | "failed" | "created" | "armed" | "running" | "paused" | "canceled" | "not_configured";
|
|
266
266
|
armedTs: number | undefined;
|
|
267
267
|
armedTsNs: string | undefined;
|
|
268
268
|
terminalTs: number | undefined;
|
|
@@ -281,7 +281,7 @@ declare function createOrderSchema(scales: SdkScales): v.SchemaWithPipe<readonly
|
|
|
281
281
|
} | undefined;
|
|
282
282
|
trailingStop: {
|
|
283
283
|
state: {
|
|
284
|
-
status: "unspecified" | "
|
|
284
|
+
status: "unspecified" | "completed" | "failed" | "created" | "armed" | "running" | "paused" | "canceled" | "not_configured";
|
|
285
285
|
armedTs: number | undefined;
|
|
286
286
|
armedTsNs: string | undefined;
|
|
287
287
|
terminalTs: number | undefined;
|
|
@@ -438,7 +438,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
|
|
|
438
438
|
}, undefined>, undefined>;
|
|
439
439
|
readonly origin: v.OptionalSchema<v.ObjectSchema<{
|
|
440
440
|
readonly scope: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderOriginScope, undefined>, v.TransformAction<OrderOriginScope, "unspecified" | "direct" | "attached_risk" | "standalone_trigger" | "system">]>;
|
|
441
|
-
readonly triggerType: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderTriggerType, undefined>, v.TransformAction<OrderTriggerType, "unspecified" | "
|
|
441
|
+
readonly triggerType: v.SchemaWithPipe<readonly [v.EnumSchema<typeof OrderTriggerType, undefined>, v.TransformAction<OrderTriggerType, "unspecified" | "stop_loss" | "take_profit" | "trailing_stop" | "twap" | "ladder">]>;
|
|
442
442
|
readonly triggerId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.BigintSchema<undefined>, undefined>, v.TransformAction<bigint | undefined, string | undefined>]>;
|
|
443
443
|
readonly parentOrderId: v.SchemaWithPipe<readonly [v.OptionalSchema<v.BigintSchema<undefined>, undefined>, v.TransformAction<bigint | undefined, string | undefined>]>;
|
|
444
444
|
readonly childSeq: v.NumberSchema<undefined>;
|
|
@@ -540,7 +540,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
|
|
|
540
540
|
} | undefined;
|
|
541
541
|
origin?: {
|
|
542
542
|
scope: "unspecified" | "direct" | "attached_risk" | "standalone_trigger" | "system";
|
|
543
|
-
triggerType: "unspecified" | "
|
|
543
|
+
triggerType: "unspecified" | "stop_loss" | "take_profit" | "trailing_stop" | "twap" | "ladder";
|
|
544
544
|
triggerId?: string | undefined;
|
|
545
545
|
parentOrderId?: string | undefined;
|
|
546
546
|
childSeq: number;
|
|
@@ -559,7 +559,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
|
|
|
559
559
|
marketClientRefPrice?: string | undefined;
|
|
560
560
|
origin?: {
|
|
561
561
|
scope: "unspecified" | "direct" | "attached_risk" | "standalone_trigger" | "system";
|
|
562
|
-
triggerType: "unspecified" | "
|
|
562
|
+
triggerType: "unspecified" | "stop_loss" | "take_profit" | "trailing_stop" | "twap" | "ladder";
|
|
563
563
|
triggerId?: string | undefined;
|
|
564
564
|
parentOrderId?: string | undefined;
|
|
565
565
|
childSeq: number;
|
|
@@ -586,7 +586,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
|
|
|
586
586
|
attachedRisk: {
|
|
587
587
|
takeProfit: {
|
|
588
588
|
state: {
|
|
589
|
-
status: "unspecified" | "
|
|
589
|
+
status: "unspecified" | "completed" | "failed" | "created" | "armed" | "running" | "paused" | "canceled" | "not_configured";
|
|
590
590
|
armedTs: number | undefined;
|
|
591
591
|
armedTsNs: string | undefined;
|
|
592
592
|
terminalTs: number | undefined;
|
|
@@ -605,7 +605,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
|
|
|
605
605
|
} | undefined;
|
|
606
606
|
stopLoss: {
|
|
607
607
|
state: {
|
|
608
|
-
status: "unspecified" | "
|
|
608
|
+
status: "unspecified" | "completed" | "failed" | "created" | "armed" | "running" | "paused" | "canceled" | "not_configured";
|
|
609
609
|
armedTs: number | undefined;
|
|
610
610
|
armedTsNs: string | undefined;
|
|
611
611
|
terminalTs: number | undefined;
|
|
@@ -624,7 +624,7 @@ declare function createOrderDetailsSchema(scales: SdkScales): v.ObjectSchema<{
|
|
|
624
624
|
} | undefined;
|
|
625
625
|
trailingStop: {
|
|
626
626
|
state: {
|
|
627
|
-
status: "unspecified" | "
|
|
627
|
+
status: "unspecified" | "completed" | "failed" | "created" | "armed" | "running" | "paused" | "canceled" | "not_configured";
|
|
628
628
|
armedTs: number | undefined;
|
|
629
629
|
armedTsNs: string | undefined;
|
|
630
630
|
terminalTs: number | undefined;
|
|
@@ -39,7 +39,7 @@ declare class OrdersService {
|
|
|
39
39
|
*/
|
|
40
40
|
preview(input: NewOrderInput, options?: PolyesterRequestOptions): Promise<PreviewOrderResult>;
|
|
41
41
|
/**
|
|
42
|
-
* 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
|
|
42
|
+
* 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 an account-scoped correlation, lookup, and cancellation identifier. Reuse while retained returns CONFLICT_DUPLICATE_CLIENT_ORDER_ID, including after rejection or completion; it does not replay the earlier result.
|
|
43
43
|
*/
|
|
44
44
|
create(input: NewOrderInput, options?: PolyesterMutationOptions): Promise<CreateOrderResult>;
|
|
45
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orders.d.ts","names":[],"sources":["../../../src/services/orders/orders.ts"],"mappings":";;;;;;;;;;;;;UA0FU,6BAA6B,mBAAmB;EACtD;;;;;
|
|
1
|
+
{"version":3,"file":"orders.d.ts","names":[],"sources":["../../../src/services/orders/orders.ts"],"mappings":";;;;;;;;;;;;;UA0FU,6BAA6B,mBAAmB;EACtD;;;;;cA6BS;;EAaL,YAAA,YAAY,mBACZ,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PolyesterError } from "../../shared/errors.js";
|
|
1
|
+
import { ConfigurationError, PolyesterError } from "../../shared/errors.js";
|
|
2
2
|
import { OrdersService as OrdersService$1 } from "../../gen/orders/v1/orders_pb.js";
|
|
3
3
|
import { toPolyesterError } from "../../shared/connect-error-mapping.js";
|
|
4
4
|
import { parse } from "../../shared/validation.js";
|
|
@@ -29,7 +29,14 @@ function isOrderNotFoundError(error) {
|
|
|
29
29
|
return isResourceNotFoundError(error) || mapped instanceof PolyesterError && mapped.detail?.service === "orders" && mapped.detail.code === "NOT_FOUND" || formatConnectError(error, "").toLowerCase() === MISCLASSIFIED_ORDER_NOT_FOUND_MESSAGE;
|
|
30
30
|
}
|
|
31
31
|
function createMutationRequestId() {
|
|
32
|
-
|
|
32
|
+
const crypto = globalThis.crypto;
|
|
33
|
+
if (crypto?.randomUUID) return crypto.randomUUID();
|
|
34
|
+
if (crypto?.getRandomValues) {
|
|
35
|
+
const bytes = /* @__PURE__ */ new Uint8Array(16);
|
|
36
|
+
crypto.getRandomValues(bytes);
|
|
37
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
38
|
+
}
|
|
39
|
+
throw new ConfigurationError("Secure request ID generation requires crypto.randomUUID or crypto.getRandomValues.");
|
|
33
40
|
}
|
|
34
41
|
function assertBatchResultCount(operation, requested, returned) {
|
|
35
42
|
if (requested !== returned) throw new Error(`${operation} returned ${returned} results for ${requested} requested items.`);
|
|
@@ -97,7 +104,7 @@ var OrdersService = class {
|
|
|
97
104
|
return parse(createPreviewOrderResultSchema(this.#scales, request.order.symbolId), response);
|
|
98
105
|
}
|
|
99
106
|
/**
|
|
100
|
-
* 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
|
|
107
|
+
* 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 an account-scoped correlation, lookup, and cancellation identifier. Reuse while retained returns CONFLICT_DUPLICATE_CLIENT_ORDER_ID, including after rejection or completion; it does not replay the earlier result.
|
|
101
108
|
*/
|
|
102
109
|
async create(input, options) {
|
|
103
110
|
await this.#scales.ready();
|
|
@@ -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 } 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 { toPolyesterError } from \"../../shared/connect-error-mapping.js\";\nimport { PolyesterError } from \"../../shared/errors.js\";\nimport type { AuthApiTransports } from \"../../shared/transports.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 const mapped = toPolyesterError(error);\n return (\n isResourceNotFoundError(error) ||\n (mapped instanceof PolyesterError &&\n mapped.detail?.service === \"orders\" &&\n mapped.detail.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 transports: AuthApiTransports,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#readClient = createClient(ProtoRead.OrdersReadService, transports.authApi);\n this.#writeClient = createClient(ProtoWrite.OrdersService, transports.authApi);\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. requestId is the idempotency boundary for the ordered batch and is generated when omitted; supply and reuse it when an ambiguous batch may be retried. Per-item clientOrderId values are optional correlation identifiers and must be unique when supplied.\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 up to 100 symbol IDs and side, with dry-run preview. A requestId is generated when omitted; reuse it with the same criteria for retries. Completed results are retained for at least two minutes; use a fresh key for each new 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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"}
|
|
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 } 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 { toPolyesterError } from \"../../shared/connect-error-mapping.js\";\nimport { ConfigurationError, PolyesterError } from \"../../shared/errors.js\";\nimport type { AuthApiTransports } from \"../../shared/transports.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 const mapped = toPolyesterError(error);\n return (\n isResourceNotFoundError(error) ||\n (mapped instanceof PolyesterError &&\n mapped.detail?.service === \"orders\" &&\n mapped.detail.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 const crypto = globalThis.crypto;\n if (crypto?.randomUUID) return crypto.randomUUID();\n\n if (crypto?.getRandomValues) {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n }\n\n throw new ConfigurationError(\n \"Secure request ID generation requires crypto.randomUUID or crypto.getRandomValues.\",\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 transports: AuthApiTransports,\n realtime: PolyesterRealtime,\n resolver: SubaccountResolver | undefined,\n scales: SdkScales,\n ) {\n this.#readClient = createClient(ProtoRead.OrdersReadService, transports.authApi);\n this.#writeClient = createClient(ProtoWrite.OrdersService, transports.authApi);\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 an account-scoped correlation, lookup, and cancellation identifier. Reuse while retained returns CONFLICT_DUPLICATE_CLIENT_ORDER_ID, including after rejection or completion; it does not replay the earlier result.\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. requestId is the idempotency boundary for the ordered batch and is generated when omitted; supply and reuse it when an ambiguous batch may be retried. Per-item clientOrderId values are optional correlation identifiers and must be unique when supplied.\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 up to 100 symbol IDs and side, with dry-run preview. A requestId is generated when omitted; reuse it with the same criteria for retries. Completed results are retained for at least two minutes; use a fresh key for each new 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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"}
|
|
@@ -280,7 +280,7 @@ declare const SubaccountActivityEventSchema: v.ObjectSchema<{
|
|
|
280
280
|
nanos: number;
|
|
281
281
|
} | undefined, number | undefined>]>;
|
|
282
282
|
readonly entityKind: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEntityKind, undefined>, v.TransformAction<ActivityEntityKind, "unspecified" | "api_key" | "account" | "subaccount" | "destination" | "session" | "policy" | "member" | "invite" | "security">]>;
|
|
283
|
-
readonly eventAction: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEventAction, undefined>, v.TransformAction<ActivityEventAction, "unspecified" | "enabled" | "disabled" | "
|
|
283
|
+
readonly eventAction: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEventAction, undefined>, v.TransformAction<ActivityEventAction, "unspecified" | "enabled" | "disabled" | "failed" | "revoked" | "created" | "updated" | "deleted" | "removed" | "role_set" | "received" | "replied" | "blocked" | "hold_placed" | "hold_released">]>;
|
|
284
284
|
readonly source: v.SchemaWithPipe<readonly [v.EnumSchema<typeof ActivityEventSource, undefined>, v.TransformAction<ActivityEventSource, "unspecified" | "web" | "mobile" | "api">]>;
|
|
285
285
|
readonly ip: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
286
286
|
readonly userAgent: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading-withdraws.schemas.d.ts","names":[],"sources":["../../../src/services/trading-withdraws/trading-withdraws.schemas.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"trading-withdraws.schemas.d.ts","names":[],"sources":["../../../src/services/trading-withdraws/trading-withdraws.schemas.ts"],"mappings":";;;;;KAkBY;EACR,QAAQ;EACR;EACA;EACA,WAAW;EACX;EACA,OAAO;EACP;EACA;;KAGC;EACD;EACA,SAAS;EACT,mBAAmB;;iBAmCP,gDAAgD,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;GA+BhF;iBAEe,sDAAsD,QAAQ,YAAS,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;GAqCtF;KAEW,sCAAsC,EAAE,WAChD,kBAAkB;KAOV,4CAA4C,EAAE,WACtD,kBAAkB;cAOT,mCAAiC,EAAA;;;KAIlC,8BAA8B,EAAE,mBAAmB;cAOlD,wCAAsC,EAAA,yBAAA,EAAA;;;;;;;;;;KAgBvC,mCAAmC,EAAE,kBACtC;cA4CE,yCAAuC,EAAA,aAAA,EAAA,yBAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAKxC,oCAAoC,EAAE,mBACvC"}
|