@polyester/sdk 0.7.0 → 0.9.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 +24 -0
- package/dist/catalogs/readers.js +1 -1
- package/dist/gen/auth/v1/api_keys_pb.d.ts +1 -1
- package/dist/gen/auth/v1/api_keys_pb.js.map +1 -1
- package/dist/gen/auth/v1/policies_pb.d.ts +69 -341
- package/dist/gen/auth/v1/policies_pb.d.ts.map +1 -1
- package/dist/gen/auth/v1/policies_pb.js +28 -46
- package/dist/gen/auth/v1/policies_pb.js.map +1 -1
- package/dist/gen/fees/v1/fees_pb.d.ts +0 -6
- package/dist/gen/fees/v1/fees_pb.d.ts.map +1 -1
- package/dist/gen/fees/v1/fees_pb.js +1 -1
- package/dist/gen/fees/v1/fees_pb.js.map +1 -1
- package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts +6 -11
- package/dist/gen/marketoverview/v1/marketoverview_pb.d.ts.map +1 -1
- package/dist/gen/marketoverview/v1/marketoverview_pb.js +1 -1
- package/dist/gen/marketoverview/v1/marketoverview_pb.js.map +1 -1
- package/dist/gen/orderbook/v1/orderbook_pb.d.ts +3 -3
- package/dist/gen/orderbook/v1/orderbook_pb.js +1 -1
- package/dist/gen/orderbook/v1/orderbook_pb.js.map +1 -1
- package/dist/gen/orders/v1/orders_pb.d.ts +43 -12
- package/dist/gen/orders/v1/orders_pb.d.ts.map +1 -1
- package/dist/gen/orders/v1/orders_pb.js +25 -1
- package/dist/gen/orders/v1/orders_pb.js.map +1 -1
- package/dist/gen/triggers/v1/triggers_pb.d.ts +28 -14
- package/dist/gen/triggers/v1/triggers_pb.d.ts.map +1 -1
- package/dist/gen/triggers/v1/triggers_pb.js +7 -1
- package/dist/gen/triggers/v1/triggers_pb.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/services/fees/fees.schemas.d.ts +2 -3
- package/dist/services/fees/fees.schemas.d.ts.map +1 -1
- package/dist/services/fees/fees.schemas.js +3 -4
- package/dist/services/fees/fees.schemas.js.map +1 -1
- package/dist/services/market-data/market-data.schemas.js +1 -1
- package/dist/services/market-overview/market-overview.d.ts +1 -1
- package/dist/services/market-overview/market-overview.js +1 -1
- package/dist/services/market-overview/market-overview.js.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts +20 -7
- package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.js +8 -6
- package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
- package/dist/services/orderbook/orderbook.d.ts +3 -4
- package/dist/services/orderbook/orderbook.d.ts.map +1 -1
- package/dist/services/orderbook/orderbook.js +13 -10
- package/dist/services/orderbook/orderbook.js.map +1 -1
- package/dist/services/orderbook/orderbook.schemas.d.ts +8 -9
- package/dist/services/orderbook/orderbook.schemas.d.ts.map +1 -1
- package/dist/services/orderbook/orderbook.schemas.js +9 -8
- package/dist/services/orderbook/orderbook.schemas.js.map +1 -1
- package/dist/services/orders/order-errors.schemas.d.ts +1 -1
- package/dist/services/orders/orders-batch.schemas.d.ts +42 -42
- package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-batch.schemas.js +7 -8
- package/dist/services/orders/orders-batch.schemas.js.map +1 -1
- package/dist/services/orders/orders-input.schemas.d.ts +29 -29
- package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-input.schemas.js +10 -10
- package/dist/services/orders/orders-input.schemas.js.map +1 -1
- package/dist/services/orders/orders-modify.schemas.d.ts +3 -2
- package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-modify.schemas.js +5 -3
- package/dist/services/orders/orders-modify.schemas.js.map +1 -1
- package/dist/services/orders/orders-risk.schemas.js +1 -1
- package/dist/services/orders/orders.d.ts +5 -5
- package/dist/services/orders/orders.d.ts.map +1 -1
- package/dist/services/orders/orders.js +8 -8
- package/dist/services/orders/orders.js.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.d.ts +2 -2
- package/dist/services/policies/api-key-policies/api-key-policies.js +2 -2
- package/dist/services/policies/api-key-policies/api-key-policies.js.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts +30 -155
- package/dist/services/policies/api-key-policies/api-key-policies.schemas.d.ts.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.schemas.js +5 -53
- package/dist/services/policies/api-key-policies/api-key-policies.schemas.js.map +1 -1
- package/dist/services/policies/shared.codecs.js +4 -12
- package/dist/services/policies/shared.codecs.js.map +1 -1
- package/dist/services/policies/shared.d.ts +1 -1
- package/dist/services/policies/shared.d.ts.map +1 -1
- package/dist/services/policies/shared.js +5 -12
- package/dist/services/policies/shared.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.js +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +19 -215
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +9 -115
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
- package/dist/services/shared.js +4 -1
- package/dist/services/shared.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +1 -1
- package/dist/services/trades/trades.schemas.js +1 -1
- package/dist/services/trailing-oneof-inputs.js +1 -1
- package/dist/services/triggers/trigger-child-order.schemas.js +5 -3
- package/dist/services/triggers/trigger-child-order.schemas.js.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.d.ts +46 -35
- package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.js +14 -4
- package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
- package/dist/services/triggers/triggers-output.schemas.d.ts +4 -5
- package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
- package/dist/services/triggers/triggers-output.schemas.js +3 -3
- package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
- package/dist/services/triggers/triggers.codecs.js +6 -3
- package/dist/services/triggers/triggers.codecs.js.map +1 -1
- package/dist/services/triggers/triggers.d.ts +4 -4
- package/dist/services/triggers/triggers.js +4 -4
- package/dist/services/triggers/triggers.js.map +1 -1
- package/dist/services/triggers/triggers.types.d.ts +3 -3
- package/dist/shared/decimal-surface.js +1 -1
- package/dist/shared/schemas.js +2 -2
- package/dist/shared/schemas.js.map +1 -1
- package/dist/shared/transports.js +6 -1
- package/dist/shared/transports.js.map +1 -1
- package/dist/shared/wire-bounds.js +3 -1
- package/dist/shared/wire-bounds.js.map +1 -1
- package/dist/utils/numbers.js +1 -10
- package/dist/utils/numbers.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { idToBigInt } from "../../../utils/base58-id.js";
|
|
2
|
-
import {
|
|
2
|
+
import { toBigIntOrZero, toIntOrZero } from "../../../utils/numbers.js";
|
|
3
3
|
import { tsObjToMs, tsObjToNsString } from "../../../utils/time.js";
|
|
4
|
-
import { BigIntStringSchema, OptionalNumberToBigIntOrZeroSchema,
|
|
5
|
-
import {
|
|
4
|
+
import { BigIntStringSchema, OptionalNumberToBigIntOrZeroSchema, OptionalNumberToIntOrZeroSchema, OptionalPublicIdSchema, OptionalTimestampMsSchema, PublicIdSchema, TimestampMsSchema, TimestampSchema, idInputSchema, optionalSubaccountIdInputSchema, positiveBigintStringInputSchema } from "../../../shared/schemas.js";
|
|
5
|
+
import { PolicyActionEnumSchema, PolicyMarketScopeEnumSchema, ProtoPolicyActionEnumSchema, ProtoPolicyMarketScopeEnumSchema, SpotMarketRuleSchema } from "../shared.js";
|
|
6
6
|
import { PolicyActionCodec, PolicyMarketScopeCodec, policyActionLabelFor, policyMarketScopeLabelFor } from "../shared.codecs.js";
|
|
7
7
|
import { buildProtoPatch, defineProtoPatchFields } from "../../../utils/proto-patch.js";
|
|
8
8
|
import { toTimestamp } from "../../../utils/timestamp.js";
|
|
@@ -26,34 +26,20 @@ const SubaccountPolicySchema = v.pipe(v.object({
|
|
|
26
26
|
description: v.string(),
|
|
27
27
|
spotMarkets: v.optional(v.array(SpotMarketRuleSchema), []),
|
|
28
28
|
spotMarketScope: v.pipe(ProtoPolicyMarketScopeEnumSchema, v.transform((v) => policyMarketScopeLabelFor(v))),
|
|
29
|
-
perpMarketScope: v.pipe(ProtoPolicyMarketScopeEnumSchema, v.transform((v) => policyMarketScopeLabelFor(v))),
|
|
30
|
-
perpMarkets: v.optional(v.array(PerpMarketRuleSchema), []),
|
|
31
29
|
actions: v.pipe(v.optional(v.array(ProtoPolicyActionEnumSchema), []), v.transform((v) => v.map((action) => policyActionLabelFor(action)))),
|
|
32
30
|
isTemplate: v.optional(v.boolean(), false),
|
|
33
31
|
sourceTemplateId: OptionalPublicIdSchema,
|
|
34
|
-
globalNotionalCap: v.pipe(v.bigint(), v.transform((v) => Number(v))),
|
|
35
32
|
maxOrderNotional: v.pipe(v.bigint(), v.transform((v) => Number(v))),
|
|
36
33
|
maxOpenOrders: v.number(),
|
|
37
|
-
maxOpenPositions: v.number(),
|
|
38
|
-
globalPerpLeverageX: v.number(),
|
|
39
|
-
dailyInternalTransferOutLimit: v.pipe(v.bigint(), v.transform((v) => Number(v))),
|
|
40
|
-
dailyWithdrawLimit: v.pipe(v.bigint(), v.transform((v) => Number(v))),
|
|
41
|
-
internalTransfersOwnOnly: v.boolean(),
|
|
42
|
-
enforceWithdrawWhitelist: v.boolean(),
|
|
43
34
|
tradingHalted: v.boolean(),
|
|
44
|
-
liquidationOnly: v.boolean(),
|
|
45
|
-
dailyLossLimit: v.pipe(v.bigint(), v.transform((v) => Number(v))),
|
|
46
|
-
intradayDrawdownLimitBps: v.pipe(v.number(), v.transform((v) => bpsToPct(v))),
|
|
47
35
|
locked: v.boolean(),
|
|
48
36
|
reviewAt: OptionalTimestampMsSchema,
|
|
49
37
|
expiresAt: OptionalTimestampMsSchema,
|
|
50
38
|
createdAt: TimestampMsSchema,
|
|
51
39
|
updatedAt: TimestampSchema,
|
|
52
40
|
revision: BigIntStringSchema
|
|
53
|
-
}), v.transform(({ maxOrderNotional,
|
|
41
|
+
}), v.transform(({ maxOrderNotional, updatedAt, ...rest }) => ({
|
|
54
42
|
maxOrderSize: maxOrderNotional,
|
|
55
|
-
globalExposureCap: globalNotionalCap,
|
|
56
|
-
intradayDrawdownLimitPct: intradayDrawdownLimitBps,
|
|
57
43
|
...rest,
|
|
58
44
|
updatedAt: tsObjToMs(updatedAt),
|
|
59
45
|
updatedAtNs: tsObjToNsString(updatedAt)
|
|
@@ -62,24 +48,12 @@ const SubaccountPolicyInputBaseSchema = v.strictObject({
|
|
|
62
48
|
name: v.string(),
|
|
63
49
|
description: v.optional(v.string(), ""),
|
|
64
50
|
spotMarkets: v.optional(v.array(SpotMarketRuleSchema), []),
|
|
65
|
-
perpMarkets: v.optional(v.array(PerpMarketRuleSchema), []),
|
|
66
51
|
spotMarketScope: v.pipe(PolicyMarketScopeEnumSchema, v.transform((v) => PolicyMarketScopeCodec.inputToProto[v])),
|
|
67
|
-
|
|
68
|
-
actions: v.pipe(v.optional(v.array(PolicyActionEnumSchema), ["read-balances", "read-spot"]), v.transform((v) => (v ?? []).map((action) => PolicyActionCodec.inputToProto[action]))),
|
|
69
|
-
globalLeverageCap: OptionalNumberToIntOrZeroSchema,
|
|
70
|
-
globalExposureCap: OptionalNumberToBigIntOrZeroSchema,
|
|
52
|
+
actions: v.pipe(v.optional(v.array(PolicyActionEnumSchema), []), v.transform((v) => (v ?? []).map((action) => PolicyActionCodec.inputToProto[action]))),
|
|
71
53
|
maxOrderSize: OptionalNumberToBigIntOrZeroSchema,
|
|
72
54
|
maxOpenOrders: OptionalNumberToIntOrZeroSchema,
|
|
73
|
-
maxOpenPositions: OptionalNumberToIntOrZeroSchema,
|
|
74
|
-
dailyInternalTransferLimit: OptionalNumberToBigIntOrZeroSchema,
|
|
75
|
-
dailyWithdrawLimit: OptionalNumberToBigIntOrZeroSchema,
|
|
76
|
-
dailyLossLimit: OptionalNumberToBigIntOrZeroSchema,
|
|
77
|
-
intradayDrawdownLimitPct: OptionalNumberToBpsOrZeroSchema,
|
|
78
55
|
tradingHalted: v.optional(v.boolean(), false),
|
|
79
|
-
liquidationOnly: v.optional(v.boolean(), false),
|
|
80
56
|
policyLocked: v.optional(v.boolean(), false),
|
|
81
|
-
internalTransfersOwnOnly: v.optional(v.boolean(), true),
|
|
82
|
-
enforceWithdrawWhitelist: v.optional(v.boolean(), false),
|
|
83
57
|
reviewAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),
|
|
84
58
|
expiresAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),
|
|
85
59
|
subaccountId: optionalSubaccountIdInputSchema()
|
|
@@ -92,20 +66,16 @@ function timestampFromMs(value) {
|
|
|
92
66
|
});
|
|
93
67
|
}
|
|
94
68
|
function createSubaccountPolicyBaseTransform(input) {
|
|
95
|
-
const { subaccountId: _subaccountId, reviewAt, expiresAt,
|
|
69
|
+
const { subaccountId: _subaccountId, reviewAt, expiresAt, maxOrderSize, policyLocked, ...rest } = input;
|
|
96
70
|
return {
|
|
97
71
|
...rest,
|
|
98
|
-
globalNotionalCap: globalExposureCap,
|
|
99
72
|
maxOrderNotional: maxOrderSize,
|
|
100
|
-
globalPerpLeverageX: globalLeverageCap,
|
|
101
|
-
dailyInternalTransferOutLimit: dailyInternalTransferLimit,
|
|
102
|
-
intradayDrawdownLimitBps: intradayDrawdownLimitPct,
|
|
103
73
|
locked: policyLocked,
|
|
104
74
|
reviewAt: timestampFromMs(reviewAt),
|
|
105
75
|
expiresAt: timestampFromMs(expiresAt)
|
|
106
76
|
};
|
|
107
77
|
}
|
|
108
|
-
const CreateSubaccountPolicyInputSchema = v.pipe(SubaccountPolicyInputBaseSchema, v.
|
|
78
|
+
const CreateSubaccountPolicyInputSchema = v.pipe(SubaccountPolicyInputBaseSchema, v.transform((input) => ({
|
|
109
79
|
policy: createSubaccountPolicyBaseTransform(input),
|
|
110
80
|
subaccountId: input.subaccountId
|
|
111
81
|
})));
|
|
@@ -113,24 +83,12 @@ const SubaccountPolicyPatchSchema = v.strictObject({
|
|
|
113
83
|
name: v.optional(v.string()),
|
|
114
84
|
description: v.optional(v.string()),
|
|
115
85
|
spotMarkets: v.optional(v.array(SpotMarketRuleSchema)),
|
|
116
|
-
perpMarkets: v.optional(v.array(PerpMarketRuleSchema)),
|
|
117
86
|
spotMarketScope: v.optional(PolicyMarketScopeEnumSchema),
|
|
118
|
-
perpMarketScope: v.optional(PolicyMarketScopeEnumSchema),
|
|
119
87
|
actions: v.optional(v.array(PolicyActionEnumSchema)),
|
|
120
|
-
globalLeverageCap: v.optional(v.nullable(v.number())),
|
|
121
|
-
globalExposureCap: v.optional(v.nullable(v.number())),
|
|
122
88
|
maxOrderSize: v.optional(v.nullable(v.number())),
|
|
123
89
|
maxOpenOrders: v.optional(v.nullable(v.number())),
|
|
124
|
-
maxOpenPositions: v.optional(v.nullable(v.number())),
|
|
125
|
-
dailyInternalTransferLimit: v.optional(v.nullable(v.number())),
|
|
126
|
-
dailyWithdrawLimit: v.optional(v.nullable(v.number())),
|
|
127
|
-
dailyLossLimit: v.optional(v.nullable(v.number())),
|
|
128
|
-
intradayDrawdownLimitPct: v.optional(v.nullable(v.number())),
|
|
129
90
|
tradingHalted: v.optional(v.boolean()),
|
|
130
|
-
liquidationOnly: v.optional(v.boolean()),
|
|
131
91
|
policyLocked: v.optional(v.boolean()),
|
|
132
|
-
internalTransfersOwnOnly: v.optional(v.boolean()),
|
|
133
|
-
enforceWithdrawWhitelist: v.optional(v.boolean()),
|
|
134
92
|
reviewAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),
|
|
135
93
|
expiresAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0))))
|
|
136
94
|
});
|
|
@@ -147,26 +105,14 @@ const SUBACCOUNT_POLICY_PATCH_FIELDS = defineProtoPatchFields()({
|
|
|
147
105
|
path: "spot_markets",
|
|
148
106
|
encode: (spotMarkets) => ({ spotMarkets })
|
|
149
107
|
},
|
|
150
|
-
perpMarkets: {
|
|
151
|
-
path: "perp_markets",
|
|
152
|
-
encode: (perpMarkets) => ({ perpMarkets })
|
|
153
|
-
},
|
|
154
108
|
spotMarketScope: {
|
|
155
109
|
path: "spot_market_scope",
|
|
156
110
|
encode: (scope) => ({ spotMarketScope: PolicyMarketScopeCodec.inputToProto[scope] })
|
|
157
111
|
},
|
|
158
|
-
perpMarketScope: {
|
|
159
|
-
path: "perp_market_scope",
|
|
160
|
-
encode: (scope) => ({ perpMarketScope: PolicyMarketScopeCodec.inputToProto[scope] })
|
|
161
|
-
},
|
|
162
112
|
actions: {
|
|
163
113
|
path: "actions",
|
|
164
114
|
encode: (actions) => ({ actions: actions.map((action) => PolicyActionCodec.inputToProto[action]) })
|
|
165
115
|
},
|
|
166
|
-
globalExposureCap: {
|
|
167
|
-
path: "global_notional_cap",
|
|
168
|
-
encode: (value) => ({ globalNotionalCap: toBigIntOrZero(value) })
|
|
169
|
-
},
|
|
170
116
|
maxOrderSize: {
|
|
171
117
|
path: "max_order_notional",
|
|
172
118
|
encode: (value) => ({ maxOrderNotional: toBigIntOrZero(value) })
|
|
@@ -175,46 +121,10 @@ const SUBACCOUNT_POLICY_PATCH_FIELDS = defineProtoPatchFields()({
|
|
|
175
121
|
path: "max_open_orders",
|
|
176
122
|
encode: (value) => ({ maxOpenOrders: toIntOrZero(value) })
|
|
177
123
|
},
|
|
178
|
-
maxOpenPositions: {
|
|
179
|
-
path: "max_open_positions",
|
|
180
|
-
encode: (value) => ({ maxOpenPositions: toIntOrZero(value) })
|
|
181
|
-
},
|
|
182
|
-
globalLeverageCap: {
|
|
183
|
-
path: "global_perp_leverage_x",
|
|
184
|
-
encode: (value) => ({ globalPerpLeverageX: toIntOrZero(value) })
|
|
185
|
-
},
|
|
186
|
-
dailyInternalTransferLimit: {
|
|
187
|
-
path: "daily_internal_transfer_out_limit",
|
|
188
|
-
encode: (value) => ({ dailyInternalTransferOutLimit: toBigIntOrZero(value) })
|
|
189
|
-
},
|
|
190
|
-
dailyWithdrawLimit: {
|
|
191
|
-
path: "daily_withdraw_limit",
|
|
192
|
-
encode: (value) => ({ dailyWithdrawLimit: toBigIntOrZero(value) })
|
|
193
|
-
},
|
|
194
|
-
internalTransfersOwnOnly: {
|
|
195
|
-
path: "internal_transfers_own_only",
|
|
196
|
-
encode: (internalTransfersOwnOnly) => ({ internalTransfersOwnOnly })
|
|
197
|
-
},
|
|
198
|
-
enforceWithdrawWhitelist: {
|
|
199
|
-
path: "enforce_withdraw_whitelist",
|
|
200
|
-
encode: (enforceWithdrawWhitelist) => ({ enforceWithdrawWhitelist })
|
|
201
|
-
},
|
|
202
124
|
tradingHalted: {
|
|
203
125
|
path: "trading_halted",
|
|
204
126
|
encode: (tradingHalted) => ({ tradingHalted })
|
|
205
127
|
},
|
|
206
|
-
liquidationOnly: {
|
|
207
|
-
path: "liquidation_only",
|
|
208
|
-
encode: (liquidationOnly) => ({ liquidationOnly })
|
|
209
|
-
},
|
|
210
|
-
dailyLossLimit: {
|
|
211
|
-
path: "daily_loss_limit",
|
|
212
|
-
encode: (value) => ({ dailyLossLimit: toBigIntOrZero(value) })
|
|
213
|
-
},
|
|
214
|
-
intradayDrawdownLimitPct: {
|
|
215
|
-
path: "intraday_drawdown_limit_bps",
|
|
216
|
-
encode: (value) => ({ intradayDrawdownLimitBps: toBpsOrZero(value) })
|
|
217
|
-
},
|
|
218
128
|
policyLocked: {
|
|
219
129
|
path: "locked",
|
|
220
130
|
encode: (locked) => ({ locked })
|
|
@@ -234,14 +144,11 @@ const SUBACCOUNT_POLICY_PATCH_FIELDS = defineProtoPatchFields()({
|
|
|
234
144
|
}
|
|
235
145
|
}
|
|
236
146
|
});
|
|
237
|
-
function hasMandatorySubaccountActions(actions) {
|
|
238
|
-
return actions === void 0 || actions.includes("read-balances") && actions.includes("read-spot");
|
|
239
|
-
}
|
|
240
147
|
const UpdateSubaccountPolicyInputSchema = v.pipe(v.strictObject({
|
|
241
148
|
...SubaccountPolicyPatchSchema.entries,
|
|
242
149
|
policyId: v.pipe(v.string(), v.transform((v) => idToBigInt(v, "policyId"))),
|
|
243
150
|
expectedRevision: positiveBigintStringInputSchema("expectedRevision")
|
|
244
|
-
}), v.check(({
|
|
151
|
+
}), v.check(({ policyId: _policyId, expectedRevision: _expectedRevision, ...patch }) => Object.values(patch).some((value) => value !== void 0), "At least one subaccount policy field must be provided"), v.transform(({ policyId, expectedRevision, ...patch }) => {
|
|
245
152
|
const { patch: policy, updateMask } = buildProtoPatch(patch, SUBACCOUNT_POLICY_PATCH_FIELDS);
|
|
246
153
|
return {
|
|
247
154
|
policyId,
|
|
@@ -261,28 +168,16 @@ const DEFAULT_SUBACCOUNT_POLICY = {
|
|
|
261
168
|
name: "Subaccount Policy",
|
|
262
169
|
description: "Subaccount Policy description",
|
|
263
170
|
spotMarkets: [],
|
|
264
|
-
perpMarkets: [],
|
|
265
171
|
spotMarketScope: "all",
|
|
266
|
-
perpMarketScope: "all",
|
|
267
172
|
actions: [
|
|
268
173
|
"read-balances",
|
|
269
|
-
"read-external-withdrawals",
|
|
270
174
|
"read-internal-transfers",
|
|
271
|
-
"read-
|
|
175
|
+
"read-address-book",
|
|
272
176
|
"read-spot"
|
|
273
177
|
],
|
|
274
|
-
globalExposureCap: 0,
|
|
275
178
|
maxOrderSize: 0,
|
|
276
179
|
maxOpenOrders: 0,
|
|
277
|
-
maxOpenPositions: 0,
|
|
278
|
-
globalPerpLeverageX: 0,
|
|
279
|
-
dailyInternalTransferOutLimit: 0,
|
|
280
|
-
dailyWithdrawLimit: 0,
|
|
281
|
-
internalTransfersOwnOnly: true,
|
|
282
|
-
enforceWithdrawWhitelist: false,
|
|
283
180
|
tradingHalted: false,
|
|
284
|
-
liquidationOnly: false,
|
|
285
|
-
dailyLossLimit: 0,
|
|
286
181
|
createdAt: DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT,
|
|
287
182
|
updatedAt: DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT,
|
|
288
183
|
updatedAtNs: (BigInt(DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT) * 1000000n).toString(),
|
|
@@ -291,7 +186,6 @@ const DEFAULT_SUBACCOUNT_POLICY = {
|
|
|
291
186
|
locked: false,
|
|
292
187
|
reviewAt: void 0,
|
|
293
188
|
expiresAt: void 0,
|
|
294
|
-
intradayDrawdownLimitPct: 0,
|
|
295
189
|
revision: "0"
|
|
296
190
|
};
|
|
297
191
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subaccount-policies.schemas.js","names":[],"sources":["../../../../src/services/policies/subaccount-policies/subaccount-policies.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport {\n PerpMarketRuleSchema,\n PolicyActionEnumSchema,\n PolicyMarketScopeEnumSchema,\n ProtoPolicyActionEnumSchema,\n ProtoPolicyMarketScopeEnumSchema,\n SpotMarketRuleSchema,\n} from \"../shared.js\";\nimport {\n PolicyMarketScopeCodec,\n PolicyActionCodec,\n policyMarketScopeLabelFor,\n policyActionLabelFor,\n} from \"../shared.codecs.js\";\nimport { bpsToPct } from \"../../../utils/numbers.js\";\nimport { idToBigInt } from \"../../../utils/base58-id.js\";\nimport {\n OptionalNumberToBigIntOrZeroSchema,\n OptionalNumberToBpsOrZeroSchema,\n OptionalNumberToIntOrZeroSchema,\n OptionalPublicIdSchema,\n OptionalTimestampMsSchema,\n BigIntStringSchema,\n PublicIdSchema,\n TimestampSchema,\n TimestampMsSchema,\n idInputSchema,\n optionalSubaccountIdInputSchema,\n positiveBigintStringInputSchema,\n} from \"../../../shared/schemas.js\";\nimport { tsObjToMs, tsObjToNsString } from \"../../../utils/time.js\";\nimport { toTimestamp } from \"../../../utils/timestamp.js\";\nimport { toBigIntOrZero, toBpsOrZero, toIntOrZero } from \"../../../utils/numbers.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../../shared/account-scope.js\";\nimport { buildProtoPatch, defineProtoPatchFields } from \"../../../utils/proto-patch.js\";\n\nexport const ListSubaccountPoliciesInputSchema = v.pipe(\n v.strictObject(AccountScopeInputEntries),\n v.transform(({ account }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type ListSubaccountPoliciesInput = v.InferInput<typeof ListSubaccountPoliciesInputSchema>;\n\nexport const GetSubaccountPolicyInputSchema = v.pipe(\n v.strictObject({\n policyId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n ...AccountScopeInputEntries,\n }),\n v.transform(({ policyId, account }) => ({\n policyId: idToBigInt(policyId, \"policyId\"),\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type GetSubaccountPolicyInput = v.InferInput<typeof GetSubaccountPolicyInputSchema>;\n\n/**\n * From the backend format to a usable frontend/UI format, so big ints to numbers, etc.\n */\nexport const SubaccountPolicySchema = v.pipe(\n v.object({\n id: PublicIdSchema,\n name: v.string(),\n description: v.string(),\n spotMarkets: v.optional(v.array(SpotMarketRuleSchema), []),\n spotMarketScope: v.pipe(\n ProtoPolicyMarketScopeEnumSchema,\n v.transform((v) => policyMarketScopeLabelFor(v)),\n ),\n perpMarketScope: v.pipe(\n ProtoPolicyMarketScopeEnumSchema,\n v.transform((v) => policyMarketScopeLabelFor(v)),\n ),\n perpMarkets: v.optional(v.array(PerpMarketRuleSchema), []),\n actions: v.pipe(\n v.optional(v.array(ProtoPolicyActionEnumSchema), []),\n v.transform((v) => v.map((action) => policyActionLabelFor(action))),\n ),\n isTemplate: v.optional(v.boolean(), false),\n sourceTemplateId: OptionalPublicIdSchema,\n globalNotionalCap: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v)),\n ),\n maxOrderNotional: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v)),\n ),\n maxOpenOrders: v.number(),\n maxOpenPositions: v.number(),\n globalPerpLeverageX: v.number(),\n dailyInternalTransferOutLimit: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v)),\n ),\n dailyWithdrawLimit: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v)),\n ),\n internalTransfersOwnOnly: v.boolean(),\n enforceWithdrawWhitelist: v.boolean(),\n tradingHalted: v.boolean(),\n liquidationOnly: v.boolean(),\n dailyLossLimit: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v)),\n ),\n intradayDrawdownLimitBps: v.pipe(\n v.number(),\n v.transform((v) => bpsToPct(v)),\n ),\n locked: v.boolean(),\n reviewAt: OptionalTimestampMsSchema,\n expiresAt: OptionalTimestampMsSchema,\n createdAt: TimestampMsSchema,\n updatedAt: TimestampSchema,\n revision: BigIntStringSchema,\n }),\n v.transform(\n ({\n maxOrderNotional,\n globalNotionalCap,\n intradayDrawdownLimitBps,\n updatedAt,\n ...rest\n }) => ({\n maxOrderSize: maxOrderNotional,\n globalExposureCap: globalNotionalCap,\n intradayDrawdownLimitPct: intradayDrawdownLimitBps,\n ...rest,\n updatedAt: tsObjToMs(updatedAt),\n updatedAtNs: tsObjToNsString(updatedAt),\n }),\n ),\n);\n\nexport type SubaccountPolicy = v.InferOutput<typeof SubaccountPolicySchema>;\n\nconst SubaccountPolicyInputBaseSchema = v.strictObject({\n name: v.string(),\n description: v.optional(v.string(), \"\"),\n spotMarkets: v.optional(v.array(SpotMarketRuleSchema), []),\n perpMarkets: v.optional(v.array(PerpMarketRuleSchema), []),\n spotMarketScope: v.pipe(\n PolicyMarketScopeEnumSchema,\n v.transform((v) => PolicyMarketScopeCodec.inputToProto[v]),\n ),\n perpMarketScope: v.pipe(\n PolicyMarketScopeEnumSchema,\n v.transform((v) => PolicyMarketScopeCodec.inputToProto[v]),\n ),\n actions: v.pipe(\n v.optional(v.array(PolicyActionEnumSchema), [\"read-balances\", \"read-spot\"]),\n v.transform((v) => (v ?? []).map((action) => PolicyActionCodec.inputToProto[action])),\n ),\n globalLeverageCap: OptionalNumberToIntOrZeroSchema,\n globalExposureCap: OptionalNumberToBigIntOrZeroSchema,\n maxOrderSize: OptionalNumberToBigIntOrZeroSchema,\n maxOpenOrders: OptionalNumberToIntOrZeroSchema,\n maxOpenPositions: OptionalNumberToIntOrZeroSchema,\n dailyInternalTransferLimit: OptionalNumberToBigIntOrZeroSchema,\n dailyWithdrawLimit: OptionalNumberToBigIntOrZeroSchema,\n dailyLossLimit: OptionalNumberToBigIntOrZeroSchema,\n intradayDrawdownLimitPct: OptionalNumberToBpsOrZeroSchema,\n tradingHalted: v.optional(v.boolean(), false),\n liquidationOnly: v.optional(v.boolean(), false),\n policyLocked: v.optional(v.boolean(), false),\n internalTransfersOwnOnly: v.optional(v.boolean(), true),\n enforceWithdrawWhitelist: v.optional(v.boolean(), false),\n reviewAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n expiresAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n subaccountId: optionalSubaccountIdInputSchema(),\n});\n\nfunction timestampFromMs(value: number | null | undefined) {\n if (value == null) return undefined;\n return toTimestamp({\n seconds: BigInt(Math.floor(value / 1000)),\n nanos: (value % 1000) * 1_000_000,\n });\n}\n\nfunction createSubaccountPolicyBaseTransform(\n input: v.InferOutput<typeof SubaccountPolicyInputBaseSchema>,\n) {\n const {\n subaccountId: _subaccountId,\n reviewAt,\n expiresAt,\n globalExposureCap,\n maxOrderSize,\n globalLeverageCap,\n dailyInternalTransferLimit,\n intradayDrawdownLimitPct,\n policyLocked,\n ...rest\n } = input;\n return {\n ...rest,\n globalNotionalCap: globalExposureCap,\n maxOrderNotional: maxOrderSize,\n globalPerpLeverageX: globalLeverageCap,\n dailyInternalTransferOutLimit: dailyInternalTransferLimit,\n intradayDrawdownLimitBps: intradayDrawdownLimitPct,\n locked: policyLocked,\n reviewAt: timestampFromMs(reviewAt),\n expiresAt: timestampFromMs(expiresAt),\n };\n}\n\nexport const CreateSubaccountPolicyInputSchema = v.pipe(\n SubaccountPolicyInputBaseSchema,\n v.check(\n ({ actions }) =>\n actions.includes(PolicyActionCodec.inputToProto[\"read-balances\"]) &&\n actions.includes(PolicyActionCodec.inputToProto[\"read-spot\"]),\n \"Subaccount policy actions must include read-balances and read-spot\",\n ),\n v.transform((input) => ({\n policy: createSubaccountPolicyBaseTransform(input),\n subaccountId: input.subaccountId,\n })),\n);\nexport type SubaccountPolicyCreateInput = v.InferInput<typeof CreateSubaccountPolicyInputSchema>;\n\nconst SubaccountPolicyPatchSchema = v.strictObject({\n name: v.optional(v.string()),\n description: v.optional(v.string()),\n spotMarkets: v.optional(v.array(SpotMarketRuleSchema)),\n perpMarkets: v.optional(v.array(PerpMarketRuleSchema)),\n spotMarketScope: v.optional(PolicyMarketScopeEnumSchema),\n perpMarketScope: v.optional(PolicyMarketScopeEnumSchema),\n actions: v.optional(v.array(PolicyActionEnumSchema)),\n globalLeverageCap: v.optional(v.nullable(v.number())),\n globalExposureCap: v.optional(v.nullable(v.number())),\n maxOrderSize: v.optional(v.nullable(v.number())),\n maxOpenOrders: v.optional(v.nullable(v.number())),\n maxOpenPositions: v.optional(v.nullable(v.number())),\n dailyInternalTransferLimit: v.optional(v.nullable(v.number())),\n dailyWithdrawLimit: v.optional(v.nullable(v.number())),\n dailyLossLimit: v.optional(v.nullable(v.number())),\n intradayDrawdownLimitPct: v.optional(v.nullable(v.number())),\n tradingHalted: v.optional(v.boolean()),\n liquidationOnly: v.optional(v.boolean()),\n policyLocked: v.optional(v.boolean()),\n internalTransfersOwnOnly: v.optional(v.boolean()),\n enforceWithdrawWhitelist: v.optional(v.boolean()),\n reviewAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n expiresAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n});\n\ntype SubaccountPolicyPatch = v.InferOutput<typeof SubaccountPolicyPatchSchema>;\n\nconst SUBACCOUNT_POLICY_PATCH_FIELDS = defineProtoPatchFields<SubaccountPolicyPatch>()({\n name: { path: \"name\", encode: (name) => ({ name }) },\n description: { path: \"description\", encode: (description) => ({ description }) },\n spotMarkets: { path: \"spot_markets\", encode: (spotMarkets) => ({ spotMarkets }) },\n perpMarkets: { path: \"perp_markets\", encode: (perpMarkets) => ({ perpMarkets }) },\n spotMarketScope: {\n path: \"spot_market_scope\",\n encode: (scope) => ({ spotMarketScope: PolicyMarketScopeCodec.inputToProto[scope] }),\n },\n perpMarketScope: {\n path: \"perp_market_scope\",\n encode: (scope) => ({ perpMarketScope: PolicyMarketScopeCodec.inputToProto[scope] }),\n },\n actions: {\n path: \"actions\",\n encode: (actions) => ({\n actions: actions.map((action) => PolicyActionCodec.inputToProto[action]),\n }),\n },\n globalExposureCap: {\n path: \"global_notional_cap\",\n encode: (value) => ({ globalNotionalCap: toBigIntOrZero(value) }),\n },\n maxOrderSize: {\n path: \"max_order_notional\",\n encode: (value) => ({ maxOrderNotional: toBigIntOrZero(value) }),\n },\n maxOpenOrders: {\n path: \"max_open_orders\",\n encode: (value) => ({ maxOpenOrders: toIntOrZero(value) }),\n },\n maxOpenPositions: {\n path: \"max_open_positions\",\n encode: (value) => ({ maxOpenPositions: toIntOrZero(value) }),\n },\n globalLeverageCap: {\n path: \"global_perp_leverage_x\",\n encode: (value) => ({ globalPerpLeverageX: toIntOrZero(value) }),\n },\n dailyInternalTransferLimit: {\n path: \"daily_internal_transfer_out_limit\",\n encode: (value) => ({ dailyInternalTransferOutLimit: toBigIntOrZero(value) }),\n },\n dailyWithdrawLimit: {\n path: \"daily_withdraw_limit\",\n encode: (value) => ({ dailyWithdrawLimit: toBigIntOrZero(value) }),\n },\n internalTransfersOwnOnly: {\n path: \"internal_transfers_own_only\",\n encode: (internalTransfersOwnOnly) => ({ internalTransfersOwnOnly }),\n },\n enforceWithdrawWhitelist: {\n path: \"enforce_withdraw_whitelist\",\n encode: (enforceWithdrawWhitelist) => ({ enforceWithdrawWhitelist }),\n },\n tradingHalted: {\n path: \"trading_halted\",\n encode: (tradingHalted) => ({ tradingHalted }),\n },\n liquidationOnly: {\n path: \"liquidation_only\",\n encode: (liquidationOnly) => ({ liquidationOnly }),\n },\n dailyLossLimit: {\n path: \"daily_loss_limit\",\n encode: (value) => ({ dailyLossLimit: toBigIntOrZero(value) }),\n },\n intradayDrawdownLimitPct: {\n path: \"intraday_drawdown_limit_bps\",\n encode: (value) => ({ intradayDrawdownLimitBps: toBpsOrZero(value) }),\n },\n policyLocked: { path: \"locked\", encode: (locked) => ({ locked }) },\n reviewAt: {\n path: \"review_at\",\n encode: (reviewAt) => {\n const timestamp = timestampFromMs(reviewAt);\n return timestamp === undefined ? {} : { reviewAt: timestamp };\n },\n },\n expiresAt: {\n path: \"expires_at\",\n encode: (expiresAt) => {\n const timestamp = timestampFromMs(expiresAt);\n return timestamp === undefined ? {} : { expiresAt: timestamp };\n },\n },\n});\n\nfunction hasMandatorySubaccountActions(actions: readonly string[] | undefined): boolean {\n return (\n actions === undefined ||\n (actions.includes(\"read-balances\") && actions.includes(\"read-spot\"))\n );\n}\n\nexport const UpdateSubaccountPolicyInputSchema = v.pipe(\n v.strictObject({\n ...SubaccountPolicyPatchSchema.entries,\n policyId: v.pipe(\n v.string(),\n v.transform((v) => idToBigInt(v, \"policyId\")),\n ),\n expectedRevision: positiveBigintStringInputSchema(\"expectedRevision\"),\n }),\n v.check(\n ({ actions }) => hasMandatorySubaccountActions(actions),\n \"Subaccount policy actions must include read-balances and read-spot\",\n ),\n v.check(\n ({ policyId: _policyId, expectedRevision: _expectedRevision, ...patch }) =>\n Object.values(patch).some((value) => value !== undefined),\n \"At least one subaccount policy field must be provided\",\n ),\n v.transform(({ policyId, expectedRevision, ...patch }) => {\n const { patch: policy, updateMask } = buildProtoPatch(\n patch,\n SUBACCOUNT_POLICY_PATCH_FIELDS,\n );\n return {\n policyId,\n policy,\n updateMask,\n expectedRevision,\n };\n }),\n);\nexport type SubaccountPolicyUpdateInput = v.InferInput<typeof UpdateSubaccountPolicyInputSchema>;\n\nexport const PolicyIdSchema = v.pipe(\n v.string(),\n v.trim(),\n v.minLength(1),\n v.transform((v) => idToBigInt(v, \"policyId\")),\n);\n\nexport const ApplySubaccountPolicyInputSchema = v.strictObject({\n subaccountId: idInputSchema(\"subaccountId\"),\n policyId: v.pipe(\n v.nullable(v.pipe(v.string(), v.trim())),\n v.transform((value) => (value ? idToBigInt(value, \"policyId\") : undefined)),\n ),\n});\n\nexport type SubaccountPolicyApplyInput = v.InferInput<typeof ApplySubaccountPolicyInputSchema>;\n\nconst DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT = Date.now();\n\nexport const DEFAULT_SUBACCOUNT_POLICY: SubaccountPolicy = {\n id: \"\",\n name: \"Subaccount Policy\",\n description: \"Subaccount Policy description\",\n spotMarkets: [],\n perpMarkets: [],\n spotMarketScope: \"all\",\n perpMarketScope: \"all\",\n actions: [\n \"read-balances\",\n \"read-external-withdrawals\",\n \"read-internal-transfers\",\n \"read-perp\",\n \"read-spot\",\n ],\n globalExposureCap: 0,\n maxOrderSize: 0,\n maxOpenOrders: 0,\n maxOpenPositions: 0,\n globalPerpLeverageX: 0,\n dailyInternalTransferOutLimit: 0,\n dailyWithdrawLimit: 0,\n internalTransfersOwnOnly: true,\n enforceWithdrawWhitelist: false,\n tradingHalted: false,\n liquidationOnly: false,\n dailyLossLimit: 0,\n createdAt: DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT,\n updatedAt: DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT,\n updatedAtNs: (BigInt(DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT) * 1_000_000n).toString(),\n isTemplate: false,\n sourceTemplateId: undefined,\n locked: false,\n reviewAt: undefined,\n expiresAt: undefined,\n intradayDrawdownLimitPct: 0,\n revision: \"0\",\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"subaccount-policies.schemas.js","names":[],"sources":["../../../../src/services/policies/subaccount-policies/subaccount-policies.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport {\n PolicyActionEnumSchema,\n PolicyMarketScopeEnumSchema,\n ProtoPolicyActionEnumSchema,\n ProtoPolicyMarketScopeEnumSchema,\n SpotMarketRuleSchema,\n} from \"../shared.js\";\nimport {\n PolicyMarketScopeCodec,\n PolicyActionCodec,\n policyMarketScopeLabelFor,\n policyActionLabelFor,\n} from \"../shared.codecs.js\";\nimport { idToBigInt } from \"../../../utils/base58-id.js\";\nimport {\n OptionalNumberToBigIntOrZeroSchema,\n OptionalNumberToIntOrZeroSchema,\n OptionalPublicIdSchema,\n OptionalTimestampMsSchema,\n BigIntStringSchema,\n PublicIdSchema,\n TimestampSchema,\n TimestampMsSchema,\n idInputSchema,\n optionalSubaccountIdInputSchema,\n positiveBigintStringInputSchema,\n} from \"../../../shared/schemas.js\";\nimport { tsObjToMs, tsObjToNsString } from \"../../../utils/time.js\";\nimport { toTimestamp } from \"../../../utils/timestamp.js\";\nimport { toBigIntOrZero, toIntOrZero } from \"../../../utils/numbers.js\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../../shared/account-scope.js\";\nimport { buildProtoPatch, defineProtoPatchFields } from \"../../../utils/proto-patch.js\";\n\nexport const ListSubaccountPoliciesInputSchema = v.pipe(\n v.strictObject(AccountScopeInputEntries),\n v.transform(({ account }) => ({\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type ListSubaccountPoliciesInput = v.InferInput<typeof ListSubaccountPoliciesInputSchema>;\n\nexport const GetSubaccountPolicyInputSchema = v.pipe(\n v.strictObject({\n policyId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n ...AccountScopeInputEntries,\n }),\n v.transform(({ policyId, account }) => ({\n policyId: idToBigInt(policyId, \"policyId\"),\n subaccountId: accountScopeToSubaccountId(account),\n })),\n);\n\nexport type GetSubaccountPolicyInput = v.InferInput<typeof GetSubaccountPolicyInputSchema>;\n\n/**\n * From the backend format to a usable frontend/UI format, so big ints to numbers, etc.\n */\nexport const SubaccountPolicySchema = v.pipe(\n v.object({\n id: PublicIdSchema,\n name: v.string(),\n description: v.string(),\n spotMarkets: v.optional(v.array(SpotMarketRuleSchema), []),\n spotMarketScope: v.pipe(\n ProtoPolicyMarketScopeEnumSchema,\n v.transform((v) => policyMarketScopeLabelFor(v)),\n ),\n actions: v.pipe(\n v.optional(v.array(ProtoPolicyActionEnumSchema), []),\n v.transform((v) => v.map((action) => policyActionLabelFor(action))),\n ),\n isTemplate: v.optional(v.boolean(), false),\n sourceTemplateId: OptionalPublicIdSchema,\n maxOrderNotional: v.pipe(\n v.bigint(),\n v.transform((v) => Number(v)),\n ),\n maxOpenOrders: v.number(),\n tradingHalted: v.boolean(),\n locked: v.boolean(),\n reviewAt: OptionalTimestampMsSchema,\n expiresAt: OptionalTimestampMsSchema,\n createdAt: TimestampMsSchema,\n updatedAt: TimestampSchema,\n revision: BigIntStringSchema,\n }),\n v.transform(({ maxOrderNotional, updatedAt, ...rest }) => ({\n maxOrderSize: maxOrderNotional,\n ...rest,\n updatedAt: tsObjToMs(updatedAt),\n updatedAtNs: tsObjToNsString(updatedAt),\n })),\n);\n\nexport type SubaccountPolicy = v.InferOutput<typeof SubaccountPolicySchema>;\n\nconst SubaccountPolicyInputBaseSchema = v.strictObject({\n name: v.string(),\n description: v.optional(v.string(), \"\"),\n spotMarkets: v.optional(v.array(SpotMarketRuleSchema), []),\n spotMarketScope: v.pipe(\n PolicyMarketScopeEnumSchema,\n v.transform((v) => PolicyMarketScopeCodec.inputToProto[v]),\n ),\n actions: v.pipe(\n v.optional(v.array(PolicyActionEnumSchema), []),\n v.transform((v) => (v ?? []).map((action) => PolicyActionCodec.inputToProto[action])),\n ),\n maxOrderSize: OptionalNumberToBigIntOrZeroSchema,\n maxOpenOrders: OptionalNumberToIntOrZeroSchema,\n tradingHalted: v.optional(v.boolean(), false),\n policyLocked: v.optional(v.boolean(), false),\n reviewAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n expiresAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n subaccountId: optionalSubaccountIdInputSchema(),\n});\n\nfunction timestampFromMs(value: number | null | undefined) {\n if (value == null) return undefined;\n return toTimestamp({\n seconds: BigInt(Math.floor(value / 1000)),\n nanos: (value % 1000) * 1_000_000,\n });\n}\n\nfunction createSubaccountPolicyBaseTransform(\n input: v.InferOutput<typeof SubaccountPolicyInputBaseSchema>,\n) {\n const {\n subaccountId: _subaccountId,\n reviewAt,\n expiresAt,\n maxOrderSize,\n policyLocked,\n ...rest\n } = input;\n return {\n ...rest,\n maxOrderNotional: maxOrderSize,\n locked: policyLocked,\n reviewAt: timestampFromMs(reviewAt),\n expiresAt: timestampFromMs(expiresAt),\n };\n}\n\nexport const CreateSubaccountPolicyInputSchema = v.pipe(\n SubaccountPolicyInputBaseSchema,\n v.transform((input) => ({\n policy: createSubaccountPolicyBaseTransform(input),\n subaccountId: input.subaccountId,\n })),\n);\nexport type SubaccountPolicyCreateInput = v.InferInput<typeof CreateSubaccountPolicyInputSchema>;\n\nconst SubaccountPolicyPatchSchema = v.strictObject({\n name: v.optional(v.string()),\n description: v.optional(v.string()),\n spotMarkets: v.optional(v.array(SpotMarketRuleSchema)),\n spotMarketScope: v.optional(PolicyMarketScopeEnumSchema),\n actions: v.optional(v.array(PolicyActionEnumSchema)),\n maxOrderSize: v.optional(v.nullable(v.number())),\n maxOpenOrders: v.optional(v.nullable(v.number())),\n tradingHalted: v.optional(v.boolean()),\n policyLocked: v.optional(v.boolean()),\n reviewAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n expiresAt: v.optional(v.nullable(v.pipe(v.number(), v.integer(), v.minValue(0)))),\n});\n\ntype SubaccountPolicyPatch = v.InferOutput<typeof SubaccountPolicyPatchSchema>;\n\nconst SUBACCOUNT_POLICY_PATCH_FIELDS = defineProtoPatchFields<SubaccountPolicyPatch>()({\n name: { path: \"name\", encode: (name) => ({ name }) },\n description: { path: \"description\", encode: (description) => ({ description }) },\n spotMarkets: { path: \"spot_markets\", encode: (spotMarkets) => ({ spotMarkets }) },\n spotMarketScope: {\n path: \"spot_market_scope\",\n encode: (scope) => ({ spotMarketScope: PolicyMarketScopeCodec.inputToProto[scope] }),\n },\n actions: {\n path: \"actions\",\n encode: (actions) => ({\n actions: actions.map((action) => PolicyActionCodec.inputToProto[action]),\n }),\n },\n maxOrderSize: {\n path: \"max_order_notional\",\n encode: (value) => ({ maxOrderNotional: toBigIntOrZero(value) }),\n },\n maxOpenOrders: {\n path: \"max_open_orders\",\n encode: (value) => ({ maxOpenOrders: toIntOrZero(value) }),\n },\n tradingHalted: {\n path: \"trading_halted\",\n encode: (tradingHalted) => ({ tradingHalted }),\n },\n policyLocked: { path: \"locked\", encode: (locked) => ({ locked }) },\n reviewAt: {\n path: \"review_at\",\n encode: (reviewAt) => {\n const timestamp = timestampFromMs(reviewAt);\n return timestamp === undefined ? {} : { reviewAt: timestamp };\n },\n },\n expiresAt: {\n path: \"expires_at\",\n encode: (expiresAt) => {\n const timestamp = timestampFromMs(expiresAt);\n return timestamp === undefined ? {} : { expiresAt: timestamp };\n },\n },\n});\n\nexport const UpdateSubaccountPolicyInputSchema = v.pipe(\n v.strictObject({\n ...SubaccountPolicyPatchSchema.entries,\n policyId: v.pipe(\n v.string(),\n v.transform((v) => idToBigInt(v, \"policyId\")),\n ),\n expectedRevision: positiveBigintStringInputSchema(\"expectedRevision\"),\n }),\n v.check(\n ({ policyId: _policyId, expectedRevision: _expectedRevision, ...patch }) =>\n Object.values(patch).some((value) => value !== undefined),\n \"At least one subaccount policy field must be provided\",\n ),\n v.transform(({ policyId, expectedRevision, ...patch }) => {\n const { patch: policy, updateMask } = buildProtoPatch(\n patch,\n SUBACCOUNT_POLICY_PATCH_FIELDS,\n );\n return {\n policyId,\n policy,\n updateMask,\n expectedRevision,\n };\n }),\n);\nexport type SubaccountPolicyUpdateInput = v.InferInput<typeof UpdateSubaccountPolicyInputSchema>;\n\nexport const PolicyIdSchema = v.pipe(\n v.string(),\n v.trim(),\n v.minLength(1),\n v.transform((v) => idToBigInt(v, \"policyId\")),\n);\n\nexport const ApplySubaccountPolicyInputSchema = v.strictObject({\n subaccountId: idInputSchema(\"subaccountId\"),\n policyId: v.pipe(\n v.nullable(v.pipe(v.string(), v.trim())),\n v.transform((value) => (value ? idToBigInt(value, \"policyId\") : undefined)),\n ),\n});\n\nexport type SubaccountPolicyApplyInput = v.InferInput<typeof ApplySubaccountPolicyInputSchema>;\n\nconst DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT = Date.now();\n\nexport const DEFAULT_SUBACCOUNT_POLICY: SubaccountPolicy = {\n id: \"\",\n name: \"Subaccount Policy\",\n description: \"Subaccount Policy description\",\n spotMarkets: [],\n spotMarketScope: \"all\",\n actions: [\"read-balances\", \"read-internal-transfers\", \"read-address-book\", \"read-spot\"],\n maxOrderSize: 0,\n maxOpenOrders: 0,\n tradingHalted: false,\n createdAt: DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT,\n updatedAt: DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT,\n updatedAtNs: (BigInt(DEFAULT_SUBACCOUNT_POLICY_UPDATED_AT) * 1_000_000n).toString(),\n isTemplate: false,\n sourceTemplateId: undefined,\n locked: false,\n reviewAt: undefined,\n expiresAt: undefined,\n revision: \"0\",\n};\n"],"mappings":"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"}
|
package/dist/services/shared.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { PROTOBUF_UINT32_MAX } from "../shared/wire-bounds.js";
|
|
1
2
|
import * as v from "valibot";
|
|
2
3
|
//#region src/services/shared.ts
|
|
3
4
|
const SideSchema = v.picklist(["buy", "sell"]);
|
|
5
|
+
/** A positive spot-market identifier that fits its protobuf `uint32` field. */
|
|
6
|
+
const SymbolIdInputSchema = v.pipe(v.number(), v.integer(), v.gtValue(0), v.maxValue(PROTOBUF_UINT32_MAX));
|
|
4
7
|
const PositiveStringInputSchema = v.pipe(v.string(), v.trim(), v.minLength(1));
|
|
5
8
|
const PositiveStringOrNumberInputSchema = v.union([PositiveStringInputSchema, v.pipe(v.number(), v.gtValue(0))]);
|
|
6
9
|
/** Absolute price distance, as a decimal price string (e.g. "0.50"). */
|
|
@@ -19,6 +22,6 @@ const BpsStringOrNumberInputSchema = v.strictObject({
|
|
|
19
22
|
});
|
|
20
23
|
const NoneInputSchema = v.strictObject({ kind: v.literal("none") });
|
|
21
24
|
//#endregion
|
|
22
|
-
export { BpsStringOrNumberInputSchema, NoneInputSchema, PositiveStringInputSchema, PositiveStringOrNumberInputSchema, PriceDistanceInputSchema, PriceSlippageInputSchema, SideSchema };
|
|
25
|
+
export { BpsStringOrNumberInputSchema, NoneInputSchema, PositiveStringInputSchema, PositiveStringOrNumberInputSchema, PriceDistanceInputSchema, PriceSlippageInputSchema, SideSchema, SymbolIdInputSchema };
|
|
23
26
|
|
|
24
27
|
//# sourceMappingURL=shared.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","names":[],"sources":["../../src/services/shared.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nexport const SideSchema = v.picklist([\"buy\", \"sell\"]);\n\nexport const PositiveStringInputSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nexport const PositiveStringOrNumberInputSchema = v.union([\n PositiveStringInputSchema,\n v.pipe(v.number(), v.gtValue(0)),\n]);\n\n/** Absolute price distance, as a decimal price string (e.g. \"0.50\"). */\nexport const PriceDistanceInputSchema = v.strictObject({\n kind: v.literal(\"distance\"),\n distance: PositiveStringInputSchema,\n});\n\n/** Absolute price slippage, as a decimal price string (e.g. \"0.25\"). */\nexport const PriceSlippageInputSchema = v.strictObject({\n kind: v.literal(\"slippage\"),\n slippage: PositiveStringInputSchema,\n});\n\nexport const BpsStringOrNumberInputSchema = v.strictObject({\n kind: v.literal(\"bps\"),\n bps: PositiveStringOrNumberInputSchema,\n});\n\nexport const NoneInputSchema = v.strictObject({\n kind: v.literal(\"none\"),\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"shared.js","names":[],"sources":["../../src/services/shared.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { PROTOBUF_UINT32_MAX } from \"../shared/wire-bounds.js\";\n\nexport const SideSchema = v.picklist([\"buy\", \"sell\"]);\n\n/** A positive spot-market identifier that fits its protobuf `uint32` field. */\nexport const SymbolIdInputSchema = v.pipe(\n v.number(),\n v.integer(),\n v.gtValue(0),\n v.maxValue(PROTOBUF_UINT32_MAX),\n);\n\nexport const PositiveStringInputSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nexport const PositiveStringOrNumberInputSchema = v.union([\n PositiveStringInputSchema,\n v.pipe(v.number(), v.gtValue(0)),\n]);\n\n/** Absolute price distance, as a decimal price string (e.g. \"0.50\"). */\nexport const PriceDistanceInputSchema = v.strictObject({\n kind: v.literal(\"distance\"),\n distance: PositiveStringInputSchema,\n});\n\n/** Absolute price slippage, as a decimal price string (e.g. \"0.25\"). */\nexport const PriceSlippageInputSchema = v.strictObject({\n kind: v.literal(\"slippage\"),\n slippage: PositiveStringInputSchema,\n});\n\nexport const BpsStringOrNumberInputSchema = v.strictObject({\n kind: v.literal(\"bps\"),\n bps: PositiveStringOrNumberInputSchema,\n});\n\nexport const NoneInputSchema = v.strictObject({\n kind: v.literal(\"none\"),\n});\n"],"mappings":";;;AAGA,MAAa,aAAa,EAAE,SAAS,CAAC,OAAO,MAAM,CAAC;;AAGpD,MAAa,sBAAsB,EAAE,KACjC,EAAE,OAAO,GACT,EAAE,QAAQ,GACV,EAAE,QAAQ,CAAC,GACX,EAAE,SAAS,mBAAmB,CAClC;AAEA,MAAa,4BAA4B,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,CAAC,CAAC;AAEpF,MAAa,oCAAoC,EAAE,MAAM,CACrD,2BACA,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CACnC,CAAC;;AAGD,MAAa,2BAA2B,EAAE,aAAa;CACnD,MAAM,EAAE,QAAQ,UAAU;CAC1B,UAAU;AACd,CAAC;;AAGD,MAAa,2BAA2B,EAAE,aAAa;CACnD,MAAM,EAAE,QAAQ,UAAU;CAC1B,UAAU;AACd,CAAC;AAED,MAAa,+BAA+B,EAAE,aAAa;CACvD,MAAM,EAAE,QAAQ,KAAK;CACrB,KAAK;AACT,CAAC;AAED,MAAa,kBAAkB,EAAE,aAAa,EAC1C,MAAM,EAAE,QAAQ,MAAM,EAC1B,CAAC"}
|
|
@@ -244,7 +244,7 @@ declare const SubaccountActivityEventSchema: v.ObjectSchema<{
|
|
|
244
244
|
nanos: number;
|
|
245
245
|
} | undefined, number | undefined>]>;
|
|
246
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" | "deleted" | "created" | "updated" | "removed" | "role_set" | "received" | "replied" | "failed" | "
|
|
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">]>;
|
|
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,9 +2,9 @@ import { requiredEnumLabel } from "../../shared/proto-enum-codec.js";
|
|
|
2
2
|
import { formatId } from "../../utils/base58-id.js";
|
|
3
3
|
import { tsNsToISO, tsNsToMs } from "../../utils/time.js";
|
|
4
4
|
import { optionalUint64DecimalFilterSchema } from "../../shared/schemas.js";
|
|
5
|
+
import { SideSchema } from "../shared.js";
|
|
5
6
|
import { AccountScopeInputEntries, accountScopeToSubaccountId } from "../../shared/account-scope.js";
|
|
6
7
|
import { scaledToDecimalOutput } from "../../shared/decimal-surface.js";
|
|
7
|
-
import { SideSchema } from "../shared.js";
|
|
8
8
|
import { fromU128 } from "../../utils/u128.js";
|
|
9
9
|
import { FeeAssetCodec, OrderSideCodec } from "../orders/order-enums.codecs.js";
|
|
10
10
|
import { TradeSideCodec } from "./trades.codecs.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseOptionalPositiveIntLike } from "../utils/numbers.js";
|
|
2
|
-
import { CatalogConversionError } from "../catalogs/types.js";
|
|
3
2
|
import "../shared/wire-bounds.js";
|
|
3
|
+
import { CatalogConversionError } from "../catalogs/types.js";
|
|
4
4
|
import { positiveDecimalInputToScaled } from "../shared/decimal-surface.js";
|
|
5
5
|
//#region src/services/trailing-oneof-inputs.ts
|
|
6
6
|
function parseTrailingDistanceInput(scales, distance, fieldName) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SymbolIdInputSchema } from "../shared.js";
|
|
1
2
|
import { AccountScopeInputEntries, accountScopeToSubaccountId } from "../../shared/account-scope.js";
|
|
2
3
|
import { positiveDecimalInputToScaled } from "../../shared/decimal-surface.js";
|
|
3
4
|
import { FEE_ASSET_VALUES, FeeAssetCodec, ORDER_SIDE_VALUES, OrderSideCodec, SELF_TRADE_PREVENTION_MODE_VALUES, SelfTradePreventionModeCodec } from "../orders/order-enums.codecs.js";
|
|
@@ -9,9 +10,10 @@ const FeeAssetSchema = v.picklist(FEE_ASSET_VALUES);
|
|
|
9
10
|
const SelfTradePreventionModeSchema = v.picklist(SELF_TRADE_PREVENTION_MODE_VALUES);
|
|
10
11
|
const SideInputSchema = v.picklist(ORDER_SIDE_VALUES);
|
|
11
12
|
const DecimalInputStringSchema = v.pipe(v.string(), v.trim(), v.minLength(1));
|
|
13
|
+
/** Shared public fields for creating a trigger intent. */
|
|
12
14
|
const BaseTriggerFieldsSchema = v.object({
|
|
13
15
|
...AccountScopeInputEntries,
|
|
14
|
-
|
|
16
|
+
symbolId: SymbolIdInputSchema,
|
|
15
17
|
clientTriggerId: v.optional(v.pipe(v.string(), v.trim()), () => crypto.randomUUID()),
|
|
16
18
|
qty: DecimalInputStringSchema,
|
|
17
19
|
feeAsset: v.pipe(v.optional(FeeAssetSchema, "quote"), v.transform((value) => FeeAssetCodec.inputToProto[value])),
|
|
@@ -43,8 +45,8 @@ function buildTriggerIntentBase(input, scales) {
|
|
|
43
45
|
return {
|
|
44
46
|
subaccountId: accountScopeToSubaccountId(input.account),
|
|
45
47
|
intent: {
|
|
46
|
-
|
|
47
|
-
qtyScaled: positiveDecimalInputToScaled("qty", input.qty, scales.baseQty(input.
|
|
48
|
+
symbolId: input.symbolId,
|
|
49
|
+
qtyScaled: positiveDecimalInputToScaled("qty", input.qty, scales.baseQty(input.symbolId)),
|
|
48
50
|
feeAsset: input.feeAsset,
|
|
49
51
|
selfTradePreventionMode: input.selfTradePreventionMode,
|
|
50
52
|
clientTriggerId: input.clientTriggerId ?? crypto.randomUUID()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-child-order.schemas.js","names":["TRIGGER_SIDE_VALUES","TriggerSideCodec","Proto.TriggerMarketIocSchema","Proto.TriggerLimitGtcSchema","Proto.TriggerLimitIocSchema","Proto.TriggerLimitFokSchema","Proto.TwapMarketIocSchema","Proto.TwapLimitGtcSchema"],"sources":["../../../src/services/triggers/trigger-child-order.schemas.ts"],"sourcesContent":["import * as Proto from \"../../gen/triggers/v1/triggers_pb.js\";\nimport * as v from \"valibot\";\nimport { create } from \"@bufbuild/protobuf\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { positiveDecimalInputToScaled, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport {\n FEE_ASSET_VALUES,\n FeeAssetCodec,\n SELF_TRADE_PREVENTION_MODE_VALUES,\n SelfTradePreventionModeCodec,\n TRIGGER_SIDE_VALUES,\n TriggerSideCodec,\n} from \"./triggers.codecs.js\";\n\nconst FeeAssetSchema = v.picklist(FEE_ASSET_VALUES);\nconst SelfTradePreventionModeSchema = v.picklist(SELF_TRADE_PREVENTION_MODE_VALUES);\nconst SideInputSchema = v.picklist(TRIGGER_SIDE_VALUES);\nexport const DecimalInputStringSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nexport type TrailingDistanceOneof = Proto.ModifyTriggerRequest[\"trailingDistance\"];\nexport type MaxSlippageOneof = Proto.ModifyTriggerRequest[\"maxSlippage\"];\n\nexport const BaseTriggerFieldsSchema = v.object({\n ...AccountScopeInputEntries,\n
|
|
1
|
+
{"version":3,"file":"trigger-child-order.schemas.js","names":["TRIGGER_SIDE_VALUES","TriggerSideCodec","Proto.TriggerMarketIocSchema","Proto.TriggerLimitGtcSchema","Proto.TriggerLimitIocSchema","Proto.TriggerLimitFokSchema","Proto.TwapMarketIocSchema","Proto.TwapLimitGtcSchema"],"sources":["../../../src/services/triggers/trigger-child-order.schemas.ts"],"sourcesContent":["import * as Proto from \"../../gen/triggers/v1/triggers_pb.js\";\nimport * as v from \"valibot\";\nimport { create } from \"@bufbuild/protobuf\";\nimport {\n AccountScopeInputEntries,\n accountScopeToSubaccountId,\n} from \"../../shared/account-scope.js\";\nimport { positiveDecimalInputToScaled, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { SymbolIdInputSchema } from \"../shared.js\";\nimport {\n FEE_ASSET_VALUES,\n FeeAssetCodec,\n SELF_TRADE_PREVENTION_MODE_VALUES,\n SelfTradePreventionModeCodec,\n TRIGGER_SIDE_VALUES,\n TriggerSideCodec,\n} from \"./triggers.codecs.js\";\n\nconst FeeAssetSchema = v.picklist(FEE_ASSET_VALUES);\nconst SelfTradePreventionModeSchema = v.picklist(SELF_TRADE_PREVENTION_MODE_VALUES);\nconst SideInputSchema = v.picklist(TRIGGER_SIDE_VALUES);\nexport const DecimalInputStringSchema = v.pipe(v.string(), v.trim(), v.minLength(1));\n\nexport type TrailingDistanceOneof = Proto.ModifyTriggerRequest[\"trailingDistance\"];\nexport type MaxSlippageOneof = Proto.ModifyTriggerRequest[\"maxSlippage\"];\n\n/** Shared public fields for creating a trigger intent. */\nexport const BaseTriggerFieldsSchema = v.object({\n ...AccountScopeInputEntries,\n symbolId: SymbolIdInputSchema,\n clientTriggerId: v.optional(v.pipe(v.string(), v.trim()), () => crypto.randomUUID()),\n qty: DecimalInputStringSchema,\n feeAsset: v.pipe(\n v.optional(FeeAssetSchema, \"quote\"),\n v.transform((value) => FeeAssetCodec.inputToProto[value]),\n ),\n selfTradePreventionMode: v.pipe(\n v.optional(SelfTradePreventionModeSchema, \"expire_maker\"),\n v.transform((value) => SelfTradePreventionModeCodec.inputToProto[value]),\n ),\n});\n\nexport const TriggerSideInputSchema = v.pipe(\n SideInputSchema,\n v.transform((value) => TriggerSideCodec.inputToProto[value]),\n);\n\nexport const MarketIocConditionalExecutionInputSchema = v.strictObject({\n type: v.literal(\"market_ioc\"),\n});\n\nexport const LimitConditionalExecutionInputSchema = v.variant(\"type\", [\n v.strictObject({\n type: v.literal(\"limit_gtc\"),\n price: DecimalInputStringSchema,\n postOnly: v.optional(v.boolean(), false),\n }),\n v.strictObject({\n type: v.literal(\"limit_ioc\"),\n price: DecimalInputStringSchema,\n }),\n v.strictObject({\n type: v.literal(\"limit_fok\"),\n price: DecimalInputStringSchema,\n }),\n]);\n\nexport const ConditionalExecutionInputSchema = v.variant(\"type\", [\n MarketIocConditionalExecutionInputSchema,\n ...LimitConditionalExecutionInputSchema.options,\n]);\n\nexport const TwapExecutionInputSchema = v.variant(\"type\", [\n v.strictObject({ type: v.literal(\"market_ioc\") }),\n v.strictObject({\n type: v.literal(\"limit_gtc\"),\n price: DecimalInputStringSchema,\n }),\n]);\n\ntype BaseTriggerInput = v.InferOutput<typeof BaseTriggerFieldsSchema>;\ntype ConditionalExecutionInput = v.InferOutput<typeof ConditionalExecutionInputSchema>;\ntype TwapExecutionInput = v.InferOutput<typeof TwapExecutionInputSchema>;\n\nexport function buildTriggerIntentBase(input: BaseTriggerInput, scales: SdkScales) {\n return {\n subaccountId: accountScopeToSubaccountId(input.account),\n intent: {\n symbolId: input.symbolId,\n qtyScaled: positiveDecimalInputToScaled(\n \"qty\",\n input.qty,\n scales.baseQty(input.symbolId),\n ),\n feeAsset: input.feeAsset,\n selfTradePreventionMode: input.selfTradePreventionMode,\n clientTriggerId: input.clientTriggerId ?? crypto.randomUUID(),\n },\n };\n}\n\nexport function buildConditionalExecution(input: ConditionalExecutionInput, scales: SdkScales) {\n switch (input.type) {\n case \"market_ioc\":\n return {\n execution: {\n case: \"marketIoc\",\n value: create(Proto.TriggerMarketIocSchema),\n },\n } as const;\n case \"limit_gtc\":\n return {\n execution: {\n case: \"limitGtc\",\n value: create(Proto.TriggerLimitGtcSchema, {\n priceTicks: positiveDecimalInputToScaled(\n \"execution.price\",\n input.price,\n scales.price(),\n ),\n postOnly: input.postOnly,\n }),\n },\n } as const;\n case \"limit_ioc\":\n return {\n execution: {\n case: \"limitIoc\",\n value: create(Proto.TriggerLimitIocSchema, {\n priceTicks: positiveDecimalInputToScaled(\n \"execution.price\",\n input.price,\n scales.price(),\n ),\n }),\n },\n } as const;\n case \"limit_fok\":\n return {\n execution: {\n case: \"limitFok\",\n value: create(Proto.TriggerLimitFokSchema, {\n priceTicks: positiveDecimalInputToScaled(\n \"execution.price\",\n input.price,\n scales.price(),\n ),\n }),\n },\n } as const;\n }\n}\n\nexport function buildTwapExecution(input: TwapExecutionInput, scales: SdkScales) {\n return input.type === \"market_ioc\"\n ? ({\n case: \"marketIoc\",\n value: create(Proto.TwapMarketIocSchema),\n } as const)\n : ({\n case: \"limitGtc\",\n value: create(Proto.TwapLimitGtcSchema, {\n priceTicks: positiveDecimalInputToScaled(\n \"execution.price\",\n input.price,\n scales.price(),\n ),\n }),\n } as const);\n}\n"],"mappings":";;;;;;;;AAkBA,MAAM,iBAAiB,EAAE,SAAS,gBAAgB;AAClD,MAAM,gCAAgC,EAAE,SAAS,iCAAiC;AAClF,MAAM,kBAAkB,EAAE,SAASA,iBAAmB;AACtD,MAAa,2BAA2B,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,CAAC,CAAC;;AAMnF,MAAa,0BAA0B,EAAE,OAAO;CAC5C,GAAG;CACH,UAAU;CACV,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,SAAS,OAAO,WAAW,CAAC;CACnF,KAAK;CACL,UAAU,EAAE,KACR,EAAE,SAAS,gBAAgB,OAAO,GAClC,EAAE,WAAW,UAAU,cAAc,aAAa,MAAM,CAC5D;CACA,yBAAyB,EAAE,KACvB,EAAE,SAAS,+BAA+B,cAAc,GACxD,EAAE,WAAW,UAAU,6BAA6B,aAAa,MAAM,CAC3E;AACJ,CAAC;AAED,MAAa,yBAAyB,EAAE,KACpC,iBACA,EAAE,WAAW,UAAUC,eAAiB,aAAa,MAAM,CAC/D;AAEA,MAAa,2CAA2C,EAAE,aAAa,EACnE,MAAM,EAAE,QAAQ,YAAY,EAChC,CAAC;AAED,MAAa,uCAAuC,EAAE,QAAQ,QAAQ;CAClE,EAAE,aAAa;EACX,MAAM,EAAE,QAAQ,WAAW;EAC3B,OAAO;EACP,UAAU,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK;CAC3C,CAAC;CACD,EAAE,aAAa;EACX,MAAM,EAAE,QAAQ,WAAW;EAC3B,OAAO;CACX,CAAC;CACD,EAAE,aAAa;EACX,MAAM,EAAE,QAAQ,WAAW;EAC3B,OAAO;CACX,CAAC;AACL,CAAC;AAED,MAAa,kCAAkC,EAAE,QAAQ,QAAQ,CAC7D,0CACA,GAAG,qCAAqC,OAC5C,CAAC;AAED,MAAa,2BAA2B,EAAE,QAAQ,QAAQ,CACtD,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,YAAY,EAAE,CAAC,GAChD,EAAE,aAAa;CACX,MAAM,EAAE,QAAQ,WAAW;CAC3B,OAAO;AACX,CAAC,CACL,CAAC;AAMD,SAAgB,uBAAuB,OAAyB,QAAmB;CAC/E,OAAO;EACH,cAAc,2BAA2B,MAAM,OAAO;EACtD,QAAQ;GACJ,UAAU,MAAM;GAChB,WAAW,6BACP,OACA,MAAM,KACN,OAAO,QAAQ,MAAM,QAAQ,CACjC;GACA,UAAU,MAAM;GAChB,yBAAyB,MAAM;GAC/B,iBAAiB,MAAM,mBAAmB,OAAO,WAAW;EAChE;CACJ;AACJ;AAEA,SAAgB,0BAA0B,OAAkC,QAAmB;CAC3F,QAAQ,MAAM,MAAd;EACI,KAAK,cACD,OAAO,EACH,WAAW;GACP,MAAM;GACN,OAAO,OAAOC,sBAA4B;EAC9C,EACJ;EACJ,KAAK,aACD,OAAO,EACH,WAAW;GACP,MAAM;GACN,OAAO,OAAOC,uBAA6B;IACvC,YAAY,6BACR,mBACA,MAAM,OACN,OAAO,MAAM,CACjB;IACA,UAAU,MAAM;GACpB,CAAC;EACL,EACJ;EACJ,KAAK,aACD,OAAO,EACH,WAAW;GACP,MAAM;GACN,OAAO,OAAOC,uBAA6B,EACvC,YAAY,6BACR,mBACA,MAAM,OACN,OAAO,MAAM,CACjB,EACJ,CAAC;EACL,EACJ;EACJ,KAAK,aACD,OAAO,EACH,WAAW;GACP,MAAM;GACN,OAAO,OAAOC,uBAA6B,EACvC,YAAY,6BACR,mBACA,MAAM,OACN,OAAO,MAAM,CACjB,EACJ,CAAC;EACL,EACJ;CACR;AACJ;AAEA,SAAgB,mBAAmB,OAA2B,QAAmB;CAC7E,OAAO,MAAM,SAAS,eACf;EACG,MAAM;EACN,OAAO,OAAOC,mBAAyB;CAC3C,IACC;EACG,MAAM;EACN,OAAO,OAAOC,oBAA0B,EACpC,YAAY,6BACR,mBACA,MAAM,OACN,OAAO,MAAM,CACjB,EACJ,CAAC;CACL;AACV"}
|