@polyester/sdk 0.3.1 → 0.4.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 +38 -0
- package/README.md +63 -17
- package/dist/_virtual/_rolldown/runtime.js +15 -1
- package/dist/account-signer/types.d.ts.map +1 -1
- package/dist/account-signer/types.js +6 -3
- package/dist/account-signer/types.js.map +1 -1
- package/dist/browser-client.d.ts +4 -2
- package/dist/browser-client.d.ts.map +1 -1
- package/dist/browser-client.js +3 -4
- package/dist/browser-client.js.map +1 -1
- package/dist/catalogs/client-catalog.d.ts.map +1 -1
- package/dist/catalogs/client-catalog.js +11 -4
- package/dist/catalogs/client-catalog.js.map +1 -1
- package/dist/catalogs/index.js +1 -1
- package/dist/catalogs/readers.d.ts.map +1 -1
- package/dist/catalogs/readers.js +3 -1
- package/dist/catalogs/readers.js.map +1 -1
- package/dist/catalogs/snapshot-validation.js +132 -0
- package/dist/catalogs/snapshot-validation.js.map +1 -0
- package/dist/catalogs/snapshot.d.ts.map +1 -1
- package/dist/catalogs/snapshot.js +16 -7
- package/dist/catalogs/snapshot.js.map +1 -1
- package/dist/catalogs/zipper-supply.d.ts.map +1 -1
- package/dist/catalogs/zipper-supply.js +10 -7
- package/dist/catalogs/zipper-supply.js.map +1 -1
- package/dist/core-client.d.ts +24 -17
- package/dist/core-client.d.ts.map +1 -1
- package/dist/core-client.js +21 -3
- package/dist/core-client.js.map +1 -1
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +32 -1
- package/dist/environment.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/realtime/client.js +13 -2
- package/dist/realtime/client.js.map +1 -1
- package/dist/realtime/snapshot-then-stream.js +1 -1
- package/dist/realtime/snapshot-then-stream.js.map +1 -1
- package/dist/realtime/types.d.ts +2 -0
- package/dist/realtime/types.d.ts.map +1 -1
- package/dist/server-client.d.ts +17 -8
- package/dist/server-client.d.ts.map +1 -1
- package/dist/server-client.js +8 -11
- package/dist/server-client.js.map +1 -1
- package/dist/services/accounts/accounts.js +3 -3
- package/dist/services/accounts/accounts.js.map +1 -1
- package/dist/services/accounts/accounts.schemas.d.ts +13 -13
- package/dist/services/accounts/accounts.schemas.d.ts.map +1 -1
- package/dist/services/accounts/accounts.schemas.js +11 -11
- package/dist/services/accounts/accounts.schemas.js.map +1 -1
- package/dist/services/address-book/address-book.js +28 -28
- package/dist/services/address-book/address-book.js.map +1 -1
- package/dist/services/address-book/address-book.schemas.d.ts +751 -751
- package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
- package/dist/services/address-book/address-book.schemas.js +160 -160
- package/dist/services/address-book/address-book.schemas.js.map +1 -1
- package/dist/services/api-keys/api-keys.d.ts +6 -6
- package/dist/services/api-keys/api-keys.d.ts.map +1 -1
- package/dist/services/api-keys/api-keys.js +12 -12
- package/dist/services/api-keys/api-keys.js.map +1 -1
- package/dist/services/api-keys/api-keys.schemas.d.ts +62 -62
- package/dist/services/api-keys/api-keys.schemas.d.ts.map +1 -1
- package/dist/services/api-keys/api-keys.schemas.js +34 -34
- package/dist/services/api-keys/api-keys.schemas.js.map +1 -1
- package/dist/services/auth/auth.d.ts +46 -40
- package/dist/services/auth/auth.d.ts.map +1 -1
- package/dist/services/auth/auth.js +28 -25
- package/dist/services/auth/auth.js.map +1 -1
- package/dist/services/auth/profile/profile.d.ts +2 -2
- package/dist/services/auth/profile/profile.d.ts.map +1 -1
- package/dist/services/auth/profile/profile.js +7 -7
- package/dist/services/auth/profile/profile.js.map +1 -1
- package/dist/services/auth/profile/profile.schemas.d.ts +41 -41
- package/dist/services/auth/profile/profile.schemas.d.ts.map +1 -1
- package/dist/services/auth/profile/profile.schemas.js +27 -27
- package/dist/services/auth/profile/profile.schemas.js.map +1 -1
- package/dist/services/auth/session.d.ts +1 -1
- package/dist/services/auth/session.d.ts.map +1 -1
- package/dist/services/auth/session.js +6 -2
- package/dist/services/auth/session.js.map +1 -1
- package/dist/services/auth/session.schemas.js +17 -17
- package/dist/services/auth/session.schemas.js.map +1 -1
- package/dist/services/auth/session.types.d.ts +3 -2
- package/dist/services/auth/session.types.d.ts.map +1 -1
- package/dist/services/balances/balances.d.ts +1 -1
- package/dist/services/balances/balances.js +9 -9
- package/dist/services/balances/balances.js.map +1 -1
- package/dist/services/balances/balances.schemas.d.ts +95 -95
- package/dist/services/balances/balances.schemas.d.ts.map +1 -1
- package/dist/services/balances/balances.schemas.js +61 -61
- package/dist/services/balances/balances.schemas.js.map +1 -1
- package/dist/services/candles/candles.js +12 -12
- package/dist/services/candles/candles.js.map +1 -1
- package/dist/services/candles/candles.schemas.d.ts +70 -70
- package/dist/services/candles/candles.schemas.d.ts.map +1 -1
- package/dist/services/candles/candles.schemas.js +47 -48
- package/dist/services/candles/candles.schemas.js.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.js +7 -7
- package/dist/services/chain-analytics/chain-analytics.js.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.schemas.d.ts +68 -68
- package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.schemas.js +29 -29
- package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
- package/dist/services/deposit/deposit.js +5 -5
- package/dist/services/deposit/deposit.js.map +1 -1
- package/dist/services/deposit/deposit.schemas.d.ts +17 -17
- package/dist/services/deposit/deposit.schemas.d.ts.map +1 -1
- package/dist/services/deposit/deposit.schemas.js +11 -11
- package/dist/services/deposit/deposit.schemas.js.map +1 -1
- package/dist/services/guard-signer/guard-signer.js +13 -13
- package/dist/services/guard-signer/guard-signer.js.map +1 -1
- package/dist/services/guard-signer/guard-signer.schemas.d.ts +75 -75
- package/dist/services/guard-signer/guard-signer.schemas.d.ts.map +1 -1
- package/dist/services/guard-signer/guard-signer.schemas.js +42 -42
- package/dist/services/guard-signer/guard-signer.schemas.js.map +1 -1
- package/dist/services/heatmap/heatmap.js +9 -9
- package/dist/services/heatmap/heatmap.js.map +1 -1
- package/dist/services/heatmap/heatmap.schemas.d.ts +144 -144
- package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
- package/dist/services/heatmap/heatmap.schemas.js +47 -47
- package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.js +3 -3
- package/dist/services/internal-transfers/internal-transfers.js.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +53 -53
- package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.schemas.js +27 -27
- package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
- package/dist/services/lifecycle/lifecycle.js +10 -10
- package/dist/services/lifecycle/lifecycle.js.map +1 -1
- package/dist/services/lifecycle/lifecycle.schemas.d.ts +614 -614
- package/dist/services/lifecycle/lifecycle.schemas.d.ts.map +1 -1
- package/dist/services/lifecycle/lifecycle.schemas.js +146 -146
- package/dist/services/lifecycle/lifecycle.schemas.js.map +1 -1
- package/dist/services/market-data/market-data.js +6 -6
- package/dist/services/market-data/market-data.js.map +1 -1
- package/dist/services/market-data/market-data.schemas.d.ts +20 -20
- package/dist/services/market-data/market-data.schemas.d.ts.map +1 -1
- package/dist/services/market-data/market-data.schemas.js +51 -55
- package/dist/services/market-data/market-data.schemas.js.map +1 -1
- package/dist/services/market-overview/market-overview.js +4 -4
- package/dist/services/market-overview/market-overview.js.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts +38 -38
- package/dist/services/market-overview/market-overview.schemas.d.ts.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.js +33 -33
- package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
- package/dist/services/mfa/mfa.js +27 -27
- package/dist/services/mfa/mfa.js.map +1 -1
- package/dist/services/mfa/mfa.schemas.d.ts +206 -206
- package/dist/services/mfa/mfa.schemas.d.ts.map +1 -1
- package/dist/services/mfa/mfa.schemas.js +83 -83
- package/dist/services/mfa/mfa.schemas.js.map +1 -1
- package/dist/services/orderbook/orderbook.d.ts +2 -2
- package/dist/services/orderbook/orderbook.d.ts.map +1 -1
- package/dist/services/orderbook/orderbook.js +5 -5
- package/dist/services/orderbook/orderbook.js.map +1 -1
- package/dist/services/orderbook/orderbook.schemas.d.ts +22 -22
- package/dist/services/orderbook/orderbook.schemas.d.ts.map +1 -1
- package/dist/services/orderbook/orderbook.schemas.js +15 -15
- package/dist/services/orderbook/orderbook.schemas.js.map +1 -1
- package/dist/services/orders/order-errors.schemas.d.ts +18 -18
- package/dist/services/orders/order-errors.schemas.d.ts.map +1 -1
- package/dist/services/orders/order-errors.schemas.js +8 -8
- package/dist/services/orders/order-errors.schemas.js.map +1 -1
- package/dist/services/orders/orders-batch.schemas.d.ts +492 -492
- package/dist/services/orders/orders-batch.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-batch.schemas.js +118 -118
- package/dist/services/orders/orders-batch.schemas.js.map +1 -1
- package/dist/services/orders/orders-identifiers.schemas.js +5 -5
- package/dist/services/orders/orders-identifiers.schemas.js.map +1 -1
- package/dist/services/orders/orders-input.schemas.d.ts +657 -648
- package/dist/services/orders/orders-input.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-input.schemas.js +100 -96
- package/dist/services/orders/orders-input.schemas.js.map +1 -1
- package/dist/services/orders/orders-modify.schemas.d.ts +370 -351
- package/dist/services/orders/orders-modify.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-modify.schemas.js +48 -44
- package/dist/services/orders/orders-modify.schemas.js.map +1 -1
- package/dist/services/orders/orders-output.schemas.d.ts +183 -183
- package/dist/services/orders/orders-output.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-output.schemas.js +49 -49
- package/dist/services/orders/orders-output.schemas.js.map +1 -1
- package/dist/services/orders/orders-risk.schemas.d.ts +226 -226
- package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-risk.schemas.js +69 -69
- package/dist/services/orders/orders-risk.schemas.js.map +1 -1
- package/dist/services/orders/orders.d.ts +8 -8
- package/dist/services/orders/orders.d.ts.map +1 -1
- package/dist/services/orders/orders.js +44 -32
- package/dist/services/orders/orders.js.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.d.ts +6 -6
- package/dist/services/policies/api-key-policies/api-key-policies.d.ts.map +1 -1
- package/dist/services/policies/api-key-policies/api-key-policies.js +11 -11
- 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 +105 -105
- 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 +49 -49
- package/dist/services/policies/api-key-policies/api-key-policies.schemas.js.map +1 -1
- package/dist/services/policies/shared.d.ts +5 -5
- package/dist/services/policies/shared.d.ts.map +1 -1
- package/dist/services/policies/shared.js +10 -10
- package/dist/services/policies/shared.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts +6 -6
- package/dist/services/policies/subaccount-policies/subaccount-policies.d.ts.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.js +13 -13
- package/dist/services/policies/subaccount-policies/subaccount-policies.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +124 -124
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +75 -75
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
- package/dist/services/shared.js +11 -11
- package/dist/services/shared.js.map +1 -1
- package/dist/services/social-verification/social-verification.d.ts +3 -3
- package/dist/services/social-verification/social-verification.d.ts.map +1 -1
- package/dist/services/social-verification/social-verification.js +7 -7
- package/dist/services/social-verification/social-verification.js.map +1 -1
- package/dist/services/social-verification/social-verification.schemas.d.ts +54 -54
- package/dist/services/social-verification/social-verification.schemas.d.ts.map +1 -1
- package/dist/services/social-verification/social-verification.schemas.js +28 -28
- package/dist/services/social-verification/social-verification.schemas.js.map +1 -1
- package/dist/services/subaccount-resolver.js +5 -3
- package/dist/services/subaccount-resolver.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.d.ts +15 -15
- package/dist/services/subaccounts/subaccounts.d.ts.map +1 -1
- package/dist/services/subaccounts/subaccounts.js +35 -35
- package/dist/services/subaccounts/subaccounts.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +135 -135
- package/dist/services/subaccounts/subaccounts.schemas.d.ts.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.js +72 -72
- package/dist/services/subaccounts/subaccounts.schemas.js.map +1 -1
- package/dist/services/trades/trades.d.ts +2 -2
- package/dist/services/trades/trades.d.ts.map +1 -1
- package/dist/services/trades/trades.js +5 -5
- package/dist/services/trades/trades.js.map +1 -1
- package/dist/services/trades/trades.schemas.d.ts +31 -31
- package/dist/services/trades/trades.schemas.d.ts.map +1 -1
- package/dist/services/trades/trades.schemas.js +24 -24
- package/dist/services/trades/trades.schemas.js.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.js +8 -8
- package/dist/services/trading-withdraws/trading-withdraws.js.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts +45 -45
- package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.schemas.js +36 -36
- package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
- package/dist/services/transfers/transfers.d.ts +1 -1
- package/dist/services/transfers/transfers.d.ts.map +1 -1
- package/dist/services/transfers/transfers.js +5 -5
- package/dist/services/transfers/transfers.js.map +1 -1
- package/dist/services/transfers/transfers.schemas.d.ts +42 -42
- package/dist/services/transfers/transfers.schemas.d.ts.map +1 -1
- package/dist/services/transfers/transfers.schemas.js +30 -30
- package/dist/services/transfers/transfers.schemas.js.map +1 -1
- package/dist/services/triggers/trigger-child-order.schemas.js +23 -23
- package/dist/services/triggers/trigger-child-order.schemas.js.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.d.ts +226 -226
- package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.js +53 -53
- package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
- package/dist/services/triggers/triggers-output.schemas.d.ts +210 -210
- package/dist/services/triggers/triggers-output.schemas.d.ts.map +1 -1
- package/dist/services/triggers/triggers-output.schemas.js +152 -152
- package/dist/services/triggers/triggers-output.schemas.js.map +1 -1
- package/dist/services/triggers/triggers.js +21 -21
- package/dist/services/triggers/triggers.js.map +1 -1
- package/dist/services/whiteboard/whiteboard.js +15 -15
- package/dist/services/whiteboard/whiteboard.js.map +1 -1
- package/dist/services/whiteboard/whiteboard.schemas.d.ts +379 -379
- package/dist/services/whiteboard/whiteboard.schemas.d.ts.map +1 -1
- package/dist/services/whiteboard/whiteboard.schemas.js +71 -71
- package/dist/services/whiteboard/whiteboard.schemas.js.map +1 -1
- package/dist/services/zipper/zipper.js +3 -3
- package/dist/services/zipper/zipper.js.map +1 -1
- package/dist/services/zipper/zipper.schemas.d.ts +1 -1
- package/dist/services/zipper/zipper.schemas.js +54 -54
- package/dist/services/zipper/zipper.schemas.js.map +1 -1
- package/dist/shared/account-scope.d.ts +6 -6
- package/dist/shared/account-scope.d.ts.map +1 -1
- package/dist/shared/account-scope.js +3 -3
- package/dist/shared/account-scope.js.map +1 -1
- package/dist/shared/connect-error-mapping.d.ts +1 -1
- package/dist/shared/connect-error-mapping.js +29 -3
- package/dist/shared/connect-error-mapping.js.map +1 -1
- package/dist/shared/rate-limit.schemas.d.ts +12 -12
- package/dist/shared/rate-limit.schemas.d.ts.map +1 -1
- package/dist/shared/rate-limit.schemas.js +7 -7
- package/dist/shared/rate-limit.schemas.js.map +1 -1
- package/dist/shared/schemas.js +26 -26
- package/dist/shared/schemas.js.map +1 -1
- package/dist/shared/transports.js +7 -12
- package/dist/shared/transports.js.map +1 -1
- package/dist/shared/types.d.ts +12 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/validation.d.ts +14 -0
- package/dist/shared/validation.d.ts.map +1 -0
- package/dist/shared/validation.js +24 -0
- package/dist/shared/validation.js.map +1 -0
- package/dist/utils/connect-order-errors.js +2 -2
- package/dist/utils/connect-order-errors.js.map +1 -1
- package/dist/utils/cookies.d.ts +8 -3
- package/dist/utils/cookies.d.ts.map +1 -1
- package/dist/utils/cookies.js +7 -1
- package/dist/utils/cookies.js.map +1 -1
- package/dist/utils/event-emitter.d.ts +1 -1
- package/dist/utils/event-emitter.d.ts.map +1 -1
- package/dist/utils/event-emitter.js +4 -2
- package/dist/utils/event-emitter.js.map +1 -1
- package/dist/utils/evm.js +2 -2
- package/dist/utils/evm.js.map +1 -1
- package/dist/utils/jwt.d.ts +2 -2
- package/dist/utils/jwt.d.ts.map +1 -1
- package/dist/utils/jwt.js +2 -2
- package/dist/utils/jwt.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,130 +1,130 @@
|
|
|
1
|
+
import { validation_exports } from "../../shared/validation.js";
|
|
1
2
|
import { MFAFactorType, SessionLevel } from "../../gen/auth/v1/mfa_pb.js";
|
|
2
3
|
import { requiredEnumLabel } from "../../shared/proto-enum-codec.js";
|
|
3
4
|
import { JsonObjectSchema, OptionalTimestampMsSchema } from "../../shared/schemas.js";
|
|
4
5
|
import { MFA_CHALLENGE_PURPOSE_VALUES, MfaChallengePurposeCodec, MfaFactorTypeCodec, SessionLevelCodec } from "./mfa.codecs.js";
|
|
5
|
-
import * as v from "valibot";
|
|
6
6
|
//#region src/services/mfa/mfa.schemas.ts
|
|
7
|
-
const MfaSessionInfoSchema =
|
|
8
|
-
sessionId:
|
|
9
|
-
sessionLevel:
|
|
10
|
-
authenticationMethods:
|
|
7
|
+
const MfaSessionInfoSchema = validation_exports.pipe(validation_exports.object({
|
|
8
|
+
sessionId: validation_exports.string(),
|
|
9
|
+
sessionLevel: validation_exports.pipe(validation_exports.enum(SessionLevel), validation_exports.transform((v) => requiredEnumLabel(SessionLevelCodec.protoToOutput, v, "PolyesterClient.MfaSessionInfoSchema", "sessionLevel"))),
|
|
10
|
+
authenticationMethods: validation_exports.optional(validation_exports.array(validation_exports.string()), []),
|
|
11
11
|
authTime: OptionalTimestampMsSchema
|
|
12
|
-
}),
|
|
12
|
+
}), validation_exports.transform(({ sessionId, sessionLevel, authenticationMethods, authTime }) => ({
|
|
13
13
|
sessionId,
|
|
14
14
|
sessionLevel,
|
|
15
15
|
authenticationMethods,
|
|
16
16
|
authTimeMs: authTime
|
|
17
17
|
})));
|
|
18
|
-
const MfaFactorSchema =
|
|
19
|
-
factorId:
|
|
20
|
-
factorType:
|
|
21
|
-
label:
|
|
18
|
+
const MfaFactorSchema = validation_exports.pipe(validation_exports.object({
|
|
19
|
+
factorId: validation_exports.string(),
|
|
20
|
+
factorType: validation_exports.pipe(validation_exports.enum(MFAFactorType), validation_exports.transform((v) => requiredEnumLabel(MfaFactorTypeCodec.protoToOutput, v, "PolyesterClient.MfaFactorSchema", "factorType"))),
|
|
21
|
+
label: validation_exports.string(),
|
|
22
22
|
createdAt: OptionalTimestampMsSchema,
|
|
23
23
|
lastUsedAt: OptionalTimestampMsSchema
|
|
24
|
-
}),
|
|
24
|
+
}), validation_exports.transform(({ factorId, factorType, label, createdAt, lastUsedAt }) => ({
|
|
25
25
|
factorId,
|
|
26
26
|
factorType,
|
|
27
27
|
label,
|
|
28
28
|
createdAtMs: createdAt,
|
|
29
29
|
lastUsedAtMs: lastUsedAt
|
|
30
30
|
})));
|
|
31
|
-
const ListMfaFactorsResponseSchema =
|
|
32
|
-
factors:
|
|
33
|
-
hasRecoveryCodes:
|
|
34
|
-
});
|
|
35
|
-
const BeginTotpEnrollmentInputSchema =
|
|
36
|
-
const BeginTotpEnrollmentResultSchema =
|
|
37
|
-
enrollmentId:
|
|
38
|
-
secret:
|
|
39
|
-
otpauthUri:
|
|
31
|
+
const ListMfaFactorsResponseSchema = validation_exports.object({
|
|
32
|
+
factors: validation_exports.optional(validation_exports.array(MfaFactorSchema), []),
|
|
33
|
+
hasRecoveryCodes: validation_exports.optional(validation_exports.boolean(), false)
|
|
34
|
+
});
|
|
35
|
+
const BeginTotpEnrollmentInputSchema = validation_exports.strictObject({ label: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)) });
|
|
36
|
+
const BeginTotpEnrollmentResultSchema = validation_exports.object({
|
|
37
|
+
enrollmentId: validation_exports.string(),
|
|
38
|
+
secret: validation_exports.string(),
|
|
39
|
+
otpauthUri: validation_exports.string(),
|
|
40
40
|
expiresAt: OptionalTimestampMsSchema
|
|
41
41
|
});
|
|
42
|
-
const FinishTotpEnrollmentInputSchema =
|
|
43
|
-
enrollmentId:
|
|
44
|
-
code:
|
|
42
|
+
const FinishTotpEnrollmentInputSchema = validation_exports.strictObject({
|
|
43
|
+
enrollmentId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
44
|
+
code: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1))
|
|
45
45
|
});
|
|
46
|
-
const FinishTotpEnrollmentResultSchema =
|
|
47
|
-
factor:
|
|
48
|
-
recoveryCodes:
|
|
46
|
+
const FinishTotpEnrollmentResultSchema = validation_exports.object({
|
|
47
|
+
factor: validation_exports.optional(MfaFactorSchema),
|
|
48
|
+
recoveryCodes: validation_exports.optional(validation_exports.array(validation_exports.string()), [])
|
|
49
49
|
});
|
|
50
|
-
const BeginPasskeyEnrollmentInputSchema =
|
|
51
|
-
const BeginPasskeyEnrollmentResultSchema =
|
|
52
|
-
enrollmentId:
|
|
53
|
-
publicKey:
|
|
50
|
+
const BeginPasskeyEnrollmentInputSchema = validation_exports.strictObject({ label: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)) });
|
|
51
|
+
const BeginPasskeyEnrollmentResultSchema = validation_exports.object({
|
|
52
|
+
enrollmentId: validation_exports.string(),
|
|
53
|
+
publicKey: validation_exports.optional(JsonObjectSchema),
|
|
54
54
|
expiresAt: OptionalTimestampMsSchema
|
|
55
55
|
});
|
|
56
|
-
const FinishPasskeyEnrollmentInputSchema =
|
|
57
|
-
enrollmentId:
|
|
56
|
+
const FinishPasskeyEnrollmentInputSchema = validation_exports.strictObject({
|
|
57
|
+
enrollmentId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
58
58
|
credential: JsonObjectSchema
|
|
59
59
|
});
|
|
60
|
-
const FinishPasskeyEnrollmentResultSchema =
|
|
61
|
-
factor:
|
|
62
|
-
recoveryCodes:
|
|
60
|
+
const FinishPasskeyEnrollmentResultSchema = validation_exports.object({
|
|
61
|
+
factor: validation_exports.optional(MfaFactorSchema),
|
|
62
|
+
recoveryCodes: validation_exports.optional(validation_exports.array(validation_exports.string()), [])
|
|
63
63
|
});
|
|
64
|
-
const BeginMfaChallengeInputSchema =
|
|
65
|
-
const BeginMfaChallengeResultSchema =
|
|
66
|
-
challengeId:
|
|
67
|
-
allowedFactorTypes:
|
|
68
|
-
publicKey:
|
|
64
|
+
const BeginMfaChallengeInputSchema = validation_exports.pipe(validation_exports.strictObject({ purpose: validation_exports.picklist(MFA_CHALLENGE_PURPOSE_VALUES) }), validation_exports.transform((data) => ({ purpose: MfaChallengePurposeCodec.inputToProto[data.purpose] })));
|
|
65
|
+
const BeginMfaChallengeResultSchema = validation_exports.object({
|
|
66
|
+
challengeId: validation_exports.string(),
|
|
67
|
+
allowedFactorTypes: validation_exports.pipe(validation_exports.array(validation_exports.enum(MFAFactorType)), validation_exports.transform((arr) => arr.map((t) => requiredEnumLabel(MfaFactorTypeCodec.protoToOutput, t, "PolyesterClient.BeginMfaChallengeResultSchema", "allowed factor type")))),
|
|
68
|
+
publicKey: validation_exports.optional(JsonObjectSchema),
|
|
69
69
|
expiresAt: OptionalTimestampMsSchema
|
|
70
70
|
});
|
|
71
|
-
const VerifyTotpChallengeInputSchema =
|
|
72
|
-
challengeId:
|
|
73
|
-
code:
|
|
71
|
+
const VerifyTotpChallengeInputSchema = validation_exports.strictObject({
|
|
72
|
+
challengeId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
73
|
+
code: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1))
|
|
74
74
|
});
|
|
75
|
-
const FinishPasskeyChallengeInputSchema =
|
|
76
|
-
challengeId:
|
|
75
|
+
const FinishPasskeyChallengeInputSchema = validation_exports.strictObject({
|
|
76
|
+
challengeId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
77
77
|
credential: JsonObjectSchema
|
|
78
78
|
});
|
|
79
|
-
const VerifyRecoveryCodeChallengeInputSchema =
|
|
80
|
-
challengeId:
|
|
81
|
-
recoveryCode:
|
|
79
|
+
const VerifyRecoveryCodeChallengeInputSchema = validation_exports.strictObject({
|
|
80
|
+
challengeId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
81
|
+
recoveryCode: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1))
|
|
82
82
|
});
|
|
83
|
-
const CompleteMfaChallengeResultSchema =
|
|
84
|
-
session:
|
|
85
|
-
accessToken:
|
|
83
|
+
const CompleteMfaChallengeResultSchema = validation_exports.pipe(validation_exports.object({
|
|
84
|
+
session: validation_exports.optional(MfaSessionInfoSchema),
|
|
85
|
+
accessToken: validation_exports.string(),
|
|
86
86
|
accessTokenExpiresAt: OptionalTimestampMsSchema,
|
|
87
|
-
stepUpToken:
|
|
87
|
+
stepUpToken: validation_exports.string(),
|
|
88
88
|
stepUpExpiresAt: OptionalTimestampMsSchema
|
|
89
|
-
}),
|
|
89
|
+
}), validation_exports.transform(({ session, accessToken, accessTokenExpiresAt, stepUpToken, stepUpExpiresAt }) => ({
|
|
90
90
|
session,
|
|
91
91
|
accessToken: accessToken.trim() || void 0,
|
|
92
92
|
accessTokenExpiresAtMs: accessTokenExpiresAt,
|
|
93
93
|
stepUpToken: stepUpToken.trim() || void 0,
|
|
94
94
|
stepUpExpiresAtMs: stepUpExpiresAt
|
|
95
95
|
})));
|
|
96
|
-
const DeleteMfaFactorInputSchema =
|
|
97
|
-
const UpdateMfaFactorInputSchema =
|
|
98
|
-
factorId:
|
|
99
|
-
label:
|
|
100
|
-
});
|
|
101
|
-
const UpdateMfaFactorResultSchema =
|
|
102
|
-
const RegenerateRecoveryCodesInputSchema =
|
|
103
|
-
const RegenerateRecoveryCodesResultSchema =
|
|
104
|
-
const ClaimFreshStepUpInputSchema =
|
|
105
|
-
requestId:
|
|
106
|
-
actionType:
|
|
107
|
-
subject:
|
|
108
|
-
});
|
|
109
|
-
const ClaimFreshStepUpResultSchema =
|
|
110
|
-
stepUpId:
|
|
111
|
-
claimNonce:
|
|
96
|
+
const DeleteMfaFactorInputSchema = validation_exports.strictObject({ factorId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)) });
|
|
97
|
+
const UpdateMfaFactorInputSchema = validation_exports.strictObject({
|
|
98
|
+
factorId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
99
|
+
label: validation_exports.pipe(validation_exports.string(), validation_exports.maxLength(128))
|
|
100
|
+
});
|
|
101
|
+
const UpdateMfaFactorResultSchema = validation_exports.object({ factor: validation_exports.optional(MfaFactorSchema) });
|
|
102
|
+
const RegenerateRecoveryCodesInputSchema = validation_exports.strictObject({});
|
|
103
|
+
const RegenerateRecoveryCodesResultSchema = validation_exports.object({ recoveryCodes: validation_exports.optional(validation_exports.array(validation_exports.string()), []) });
|
|
104
|
+
const ClaimFreshStepUpInputSchema = validation_exports.strictObject({
|
|
105
|
+
requestId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
106
|
+
actionType: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
107
|
+
subject: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1))
|
|
108
|
+
});
|
|
109
|
+
const ClaimFreshStepUpResultSchema = validation_exports.object({
|
|
110
|
+
stepUpId: validation_exports.string(),
|
|
111
|
+
claimNonce: validation_exports.string(),
|
|
112
112
|
claimExpiresAt: OptionalTimestampMsSchema
|
|
113
113
|
});
|
|
114
|
-
const ConsumeFreshStepUpInputSchema =
|
|
115
|
-
stepUpId:
|
|
116
|
-
requestId:
|
|
117
|
-
actionType:
|
|
118
|
-
subject:
|
|
119
|
-
claimNonce:
|
|
120
|
-
});
|
|
121
|
-
const ReleaseFreshStepUpInputSchema =
|
|
122
|
-
stepUpId:
|
|
123
|
-
requestId:
|
|
124
|
-
actionType:
|
|
125
|
-
subject:
|
|
126
|
-
claimNonce:
|
|
127
|
-
reason:
|
|
114
|
+
const ConsumeFreshStepUpInputSchema = validation_exports.strictObject({
|
|
115
|
+
stepUpId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
116
|
+
requestId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
117
|
+
actionType: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
118
|
+
subject: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
119
|
+
claimNonce: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1))
|
|
120
|
+
});
|
|
121
|
+
const ReleaseFreshStepUpInputSchema = validation_exports.strictObject({
|
|
122
|
+
stepUpId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
123
|
+
requestId: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
124
|
+
actionType: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
125
|
+
subject: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
126
|
+
claimNonce: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1)),
|
|
127
|
+
reason: validation_exports.pipe(validation_exports.string(), validation_exports.trim(), validation_exports.minLength(1))
|
|
128
128
|
});
|
|
129
129
|
//#endregion
|
|
130
130
|
export { BeginMfaChallengeInputSchema, BeginMfaChallengeResultSchema, BeginPasskeyEnrollmentInputSchema, BeginPasskeyEnrollmentResultSchema, BeginTotpEnrollmentInputSchema, BeginTotpEnrollmentResultSchema, ClaimFreshStepUpInputSchema, ClaimFreshStepUpResultSchema, CompleteMfaChallengeResultSchema, ConsumeFreshStepUpInputSchema, DeleteMfaFactorInputSchema, FinishPasskeyChallengeInputSchema, FinishPasskeyEnrollmentInputSchema, FinishPasskeyEnrollmentResultSchema, FinishTotpEnrollmentInputSchema, FinishTotpEnrollmentResultSchema, ListMfaFactorsResponseSchema, MfaFactorSchema, MfaSessionInfoSchema, RegenerateRecoveryCodesInputSchema, RegenerateRecoveryCodesResultSchema, ReleaseFreshStepUpInputSchema, UpdateMfaFactorInputSchema, UpdateMfaFactorResultSchema, VerifyRecoveryCodeChallengeInputSchema, VerifyTotpChallengeInputSchema };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mfa.schemas.js","names":["Proto.SessionLevel","Proto.MFAFactorType"],"sources":["../../../src/services/mfa/mfa.schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport { JsonObjectSchema, OptionalTimestampMsSchema } from \"../../shared/schemas.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport {\n MfaChallengePurposeCodec,\n MfaFactorTypeCodec,\n MFA_CHALLENGE_PURPOSE_VALUES,\n SessionLevelCodec,\n} from \"./mfa.codecs.js\";\n\nexport const MfaSessionInfoSchema = v.pipe(\n v.object({\n sessionId: v.string(),\n sessionLevel: v.pipe(\n v.enum(Proto.SessionLevel),\n v.transform((v) =>\n requiredEnumLabel(\n SessionLevelCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaSessionInfoSchema\",\n \"sessionLevel\",\n ),\n ),\n ),\n authenticationMethods: v.optional(v.array(v.string()), []),\n authTime: OptionalTimestampMsSchema,\n }),\n v.transform(({ sessionId, sessionLevel, authenticationMethods, authTime }) => ({\n sessionId,\n sessionLevel,\n authenticationMethods,\n authTimeMs: authTime,\n })),\n);\n\nexport type MfaSessionInfo = v.InferOutput<typeof MfaSessionInfoSchema>;\n\nexport const MfaFactorSchema = v.pipe(\n v.object({\n factorId: v.string(),\n factorType: v.pipe(\n v.enum(Proto.MFAFactorType),\n v.transform((v) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaFactorSchema\",\n \"factorType\",\n ),\n ),\n ),\n label: v.string(),\n createdAt: OptionalTimestampMsSchema,\n lastUsedAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ factorId, factorType, label, createdAt, lastUsedAt }) => ({\n factorId,\n factorType,\n label,\n createdAtMs: createdAt,\n lastUsedAtMs: lastUsedAt,\n })),\n);\n\nexport type MfaFactor = v.InferOutput<typeof MfaFactorSchema>;\n\nexport const ListMfaFactorsResponseSchema = v.object({\n factors: v.optional(v.array(MfaFactorSchema), []),\n hasRecoveryCodes: v.optional(v.boolean(), false),\n});\n\nexport type ListMfaFactorsResult = v.InferOutput<typeof ListMfaFactorsResponseSchema>;\n\nexport const BeginTotpEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginTotpEnrollmentInput = v.InferInput<typeof BeginTotpEnrollmentInputSchema>;\n\nexport const BeginTotpEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n secret: v.string(),\n otpauthUri: v.string(),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginTotpEnrollmentResult = v.InferOutput<typeof BeginTotpEnrollmentResultSchema>;\n\nexport const FinishTotpEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type FinishTotpEnrollmentInput = v.InferInput<typeof FinishTotpEnrollmentInputSchema>;\n\nexport const FinishTotpEnrollmentResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type FinishTotpEnrollmentResult = v.InferOutput<typeof FinishTotpEnrollmentResultSchema>;\n\nexport const BeginPasskeyEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginPasskeyEnrollmentInput = v.InferInput<typeof BeginPasskeyEnrollmentInputSchema>;\n\nexport const BeginPasskeyEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginPasskeyEnrollmentResult = v.InferOutput<typeof BeginPasskeyEnrollmentResultSchema>;\n\nexport const FinishPasskeyEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyEnrollmentInput = v.InferInput<typeof FinishPasskeyEnrollmentInputSchema>;\n\nexport const FinishPasskeyEnrollmentResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type FinishPasskeyEnrollmentResult = v.InferOutput<\n typeof FinishPasskeyEnrollmentResultSchema\n>;\n\nexport const BeginMfaChallengeInputSchema = v.pipe(\n v.strictObject({\n purpose: v.picklist(MFA_CHALLENGE_PURPOSE_VALUES),\n }),\n v.transform((data) => ({\n purpose: MfaChallengePurposeCodec.inputToProto[data.purpose],\n })),\n);\n\nexport type BeginMfaChallengeInput = v.InferInput<typeof BeginMfaChallengeInputSchema>;\n\nexport const BeginMfaChallengeResultSchema = v.object({\n challengeId: v.string(),\n allowedFactorTypes: v.pipe(\n v.array(v.enum(Proto.MFAFactorType)),\n v.transform((arr) =>\n arr.map((t) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n t,\n \"PolyesterClient.BeginMfaChallengeResultSchema\",\n \"allowed factor type\",\n ),\n ),\n ),\n ),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginMfaChallengeResult = v.InferOutput<typeof BeginMfaChallengeResultSchema>;\n\nexport const VerifyTotpChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyTotpChallengeInput = v.InferInput<typeof VerifyTotpChallengeInputSchema>;\n\nexport const FinishPasskeyChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyChallengeInput = v.InferInput<typeof FinishPasskeyChallengeInputSchema>;\n\nexport const VerifyRecoveryCodeChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n recoveryCode: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyRecoveryCodeChallengeInput = v.InferInput<\n typeof VerifyRecoveryCodeChallengeInputSchema\n>;\n\nexport const CompleteMfaChallengeResultSchema = v.pipe(\n v.object({\n session: v.optional(MfaSessionInfoSchema),\n accessToken: v.string(),\n accessTokenExpiresAt: OptionalTimestampMsSchema,\n stepUpToken: v.string(),\n stepUpExpiresAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ session, accessToken, accessTokenExpiresAt, stepUpToken, stepUpExpiresAt }) => ({\n session,\n accessToken: accessToken.trim() || undefined,\n accessTokenExpiresAtMs: accessTokenExpiresAt,\n stepUpToken: stepUpToken.trim() || undefined,\n stepUpExpiresAtMs: stepUpExpiresAt,\n })),\n);\n\nexport type CompleteMfaChallengeResult = v.InferOutput<typeof CompleteMfaChallengeResultSchema>;\n\nexport const DeleteMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type DeleteMfaFactorInput = v.InferInput<typeof DeleteMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n label: v.pipe(v.string(), v.maxLength(128)),\n});\n\nexport type UpdateMfaFactorInput = v.InferInput<typeof UpdateMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n});\n\nexport type UpdateMfaFactorResult = v.InferOutput<typeof UpdateMfaFactorResultSchema>;\n\nexport const RegenerateRecoveryCodesInputSchema = v.strictObject({});\n\nexport type RegenerateRecoveryCodesInput = v.InferInput<typeof RegenerateRecoveryCodesInputSchema>;\n\nexport const RegenerateRecoveryCodesResultSchema = v.object({\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type RegenerateRecoveryCodesResult = v.InferOutput<\n typeof RegenerateRecoveryCodesResultSchema\n>;\n\nexport const ClaimFreshStepUpInputSchema = v.strictObject({\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ClaimFreshStepUpInput = v.InferInput<typeof ClaimFreshStepUpInputSchema>;\n\nexport const ClaimFreshStepUpResultSchema = v.object({\n stepUpId: v.string(),\n claimNonce: v.string(),\n claimExpiresAt: OptionalTimestampMsSchema,\n});\n\nexport type ClaimFreshStepUpResult = v.InferOutput<typeof ClaimFreshStepUpResultSchema>;\n\nexport const ConsumeFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ConsumeFreshStepUpInput = v.InferInput<typeof ConsumeFreshStepUpInputSchema>;\n\nexport const ReleaseFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n reason: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ReleaseFreshStepUpInput = v.InferInput<typeof ReleaseFreshStepUpInputSchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mfa.schemas.js","names":["v","Proto.SessionLevel","Proto.MFAFactorType"],"sources":["../../../src/services/mfa/mfa.schemas.ts"],"sourcesContent":["import * as v from \"../../shared/validation.js\";\nimport * as Proto from \"../../gen/auth/v1/mfa_pb.js\";\nimport { JsonObjectSchema, OptionalTimestampMsSchema } from \"../../shared/schemas.js\";\nimport { requiredEnumLabel } from \"../../shared/proto-enum-codec.js\";\nimport {\n MfaChallengePurposeCodec,\n MfaFactorTypeCodec,\n MFA_CHALLENGE_PURPOSE_VALUES,\n SessionLevelCodec,\n} from \"./mfa.codecs.js\";\n\nexport const MfaSessionInfoSchema = v.pipe(\n v.object({\n sessionId: v.string(),\n sessionLevel: v.pipe(\n v.enum(Proto.SessionLevel),\n v.transform((v) =>\n requiredEnumLabel(\n SessionLevelCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaSessionInfoSchema\",\n \"sessionLevel\",\n ),\n ),\n ),\n authenticationMethods: v.optional(v.array(v.string()), []),\n authTime: OptionalTimestampMsSchema,\n }),\n v.transform(({ sessionId, sessionLevel, authenticationMethods, authTime }) => ({\n sessionId,\n sessionLevel,\n authenticationMethods,\n authTimeMs: authTime,\n })),\n);\n\nexport type MfaSessionInfo = v.InferOutput<typeof MfaSessionInfoSchema>;\n\nexport const MfaFactorSchema = v.pipe(\n v.object({\n factorId: v.string(),\n factorType: v.pipe(\n v.enum(Proto.MFAFactorType),\n v.transform((v) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n v,\n \"PolyesterClient.MfaFactorSchema\",\n \"factorType\",\n ),\n ),\n ),\n label: v.string(),\n createdAt: OptionalTimestampMsSchema,\n lastUsedAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ factorId, factorType, label, createdAt, lastUsedAt }) => ({\n factorId,\n factorType,\n label,\n createdAtMs: createdAt,\n lastUsedAtMs: lastUsedAt,\n })),\n);\n\nexport type MfaFactor = v.InferOutput<typeof MfaFactorSchema>;\n\nexport const ListMfaFactorsResponseSchema = v.object({\n factors: v.optional(v.array(MfaFactorSchema), []),\n hasRecoveryCodes: v.optional(v.boolean(), false),\n});\n\nexport type ListMfaFactorsResult = v.InferOutput<typeof ListMfaFactorsResponseSchema>;\n\nexport const BeginTotpEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginTotpEnrollmentInput = v.InferInput<typeof BeginTotpEnrollmentInputSchema>;\n\nexport const BeginTotpEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n secret: v.string(),\n otpauthUri: v.string(),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginTotpEnrollmentResult = v.InferOutput<typeof BeginTotpEnrollmentResultSchema>;\n\nexport const FinishTotpEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type FinishTotpEnrollmentInput = v.InferInput<typeof FinishTotpEnrollmentInputSchema>;\n\nexport const FinishTotpEnrollmentResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type FinishTotpEnrollmentResult = v.InferOutput<typeof FinishTotpEnrollmentResultSchema>;\n\nexport const BeginPasskeyEnrollmentInputSchema = v.strictObject({\n label: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type BeginPasskeyEnrollmentInput = v.InferInput<typeof BeginPasskeyEnrollmentInputSchema>;\n\nexport const BeginPasskeyEnrollmentResultSchema = v.object({\n enrollmentId: v.string(),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginPasskeyEnrollmentResult = v.InferOutput<typeof BeginPasskeyEnrollmentResultSchema>;\n\nexport const FinishPasskeyEnrollmentInputSchema = v.strictObject({\n enrollmentId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyEnrollmentInput = v.InferInput<typeof FinishPasskeyEnrollmentInputSchema>;\n\nexport const FinishPasskeyEnrollmentResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type FinishPasskeyEnrollmentResult = v.InferOutput<\n typeof FinishPasskeyEnrollmentResultSchema\n>;\n\nexport const BeginMfaChallengeInputSchema = v.pipe(\n v.strictObject({\n purpose: v.picklist(MFA_CHALLENGE_PURPOSE_VALUES),\n }),\n v.transform((data) => ({\n purpose: MfaChallengePurposeCodec.inputToProto[data.purpose],\n })),\n);\n\nexport type BeginMfaChallengeInput = v.InferInput<typeof BeginMfaChallengeInputSchema>;\n\nexport const BeginMfaChallengeResultSchema = v.object({\n challengeId: v.string(),\n allowedFactorTypes: v.pipe(\n v.array(v.enum(Proto.MFAFactorType)),\n v.transform((arr) =>\n arr.map((t) =>\n requiredEnumLabel(\n MfaFactorTypeCodec.protoToOutput,\n t,\n \"PolyesterClient.BeginMfaChallengeResultSchema\",\n \"allowed factor type\",\n ),\n ),\n ),\n ),\n publicKey: v.optional(JsonObjectSchema),\n expiresAt: OptionalTimestampMsSchema,\n});\n\nexport type BeginMfaChallengeResult = v.InferOutput<typeof BeginMfaChallengeResultSchema>;\n\nexport const VerifyTotpChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n code: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyTotpChallengeInput = v.InferInput<typeof VerifyTotpChallengeInputSchema>;\n\nexport const FinishPasskeyChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n credential: JsonObjectSchema,\n});\n\nexport type FinishPasskeyChallengeInput = v.InferInput<typeof FinishPasskeyChallengeInputSchema>;\n\nexport const VerifyRecoveryCodeChallengeInputSchema = v.strictObject({\n challengeId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n recoveryCode: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type VerifyRecoveryCodeChallengeInput = v.InferInput<\n typeof VerifyRecoveryCodeChallengeInputSchema\n>;\n\nexport const CompleteMfaChallengeResultSchema = v.pipe(\n v.object({\n session: v.optional(MfaSessionInfoSchema),\n accessToken: v.string(),\n accessTokenExpiresAt: OptionalTimestampMsSchema,\n stepUpToken: v.string(),\n stepUpExpiresAt: OptionalTimestampMsSchema,\n }),\n v.transform(({ session, accessToken, accessTokenExpiresAt, stepUpToken, stepUpExpiresAt }) => ({\n session,\n accessToken: accessToken.trim() || undefined,\n accessTokenExpiresAtMs: accessTokenExpiresAt,\n stepUpToken: stepUpToken.trim() || undefined,\n stepUpExpiresAtMs: stepUpExpiresAt,\n })),\n);\n\nexport type CompleteMfaChallengeResult = v.InferOutput<typeof CompleteMfaChallengeResultSchema>;\n\nexport const DeleteMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type DeleteMfaFactorInput = v.InferInput<typeof DeleteMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorInputSchema = v.strictObject({\n factorId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n label: v.pipe(v.string(), v.maxLength(128)),\n});\n\nexport type UpdateMfaFactorInput = v.InferInput<typeof UpdateMfaFactorInputSchema>;\n\nexport const UpdateMfaFactorResultSchema = v.object({\n factor: v.optional(MfaFactorSchema),\n});\n\nexport type UpdateMfaFactorResult = v.InferOutput<typeof UpdateMfaFactorResultSchema>;\n\nexport const RegenerateRecoveryCodesInputSchema = v.strictObject({});\n\nexport type RegenerateRecoveryCodesInput = v.InferInput<typeof RegenerateRecoveryCodesInputSchema>;\n\nexport const RegenerateRecoveryCodesResultSchema = v.object({\n recoveryCodes: v.optional(v.array(v.string()), []),\n});\n\nexport type RegenerateRecoveryCodesResult = v.InferOutput<\n typeof RegenerateRecoveryCodesResultSchema\n>;\n\nexport const ClaimFreshStepUpInputSchema = v.strictObject({\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ClaimFreshStepUpInput = v.InferInput<typeof ClaimFreshStepUpInputSchema>;\n\nexport const ClaimFreshStepUpResultSchema = v.object({\n stepUpId: v.string(),\n claimNonce: v.string(),\n claimExpiresAt: OptionalTimestampMsSchema,\n});\n\nexport type ClaimFreshStepUpResult = v.InferOutput<typeof ClaimFreshStepUpResultSchema>;\n\nexport const ConsumeFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ConsumeFreshStepUpInput = v.InferInput<typeof ConsumeFreshStepUpInputSchema>;\n\nexport const ReleaseFreshStepUpInputSchema = v.strictObject({\n stepUpId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n requestId: v.pipe(v.string(), v.trim(), v.minLength(1)),\n actionType: v.pipe(v.string(), v.trim(), v.minLength(1)),\n subject: v.pipe(v.string(), v.trim(), v.minLength(1)),\n claimNonce: v.pipe(v.string(), v.trim(), v.minLength(1)),\n reason: v.pipe(v.string(), v.trim(), v.minLength(1)),\n});\n\nexport type ReleaseFreshStepUpInput = v.InferInput<typeof ReleaseFreshStepUpInputSchema>;\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { validation_d_exports } from "../../shared/validation.js";
|
|
1
2
|
import { PolyesterRequestOptions } from "../../shared/request-options.js";
|
|
2
3
|
import { PolyesterRealtime } from "../../realtime/types.js";
|
|
3
4
|
import { BaseSubscribeInput } from "../../shared/types.js";
|
|
4
5
|
import { SdkScales } from "../../shared/decimal-surface.js";
|
|
5
6
|
import { GetOrderbookInputSchema, OrderbookData } from "./orderbook.schemas.js";
|
|
6
7
|
import { Transport } from "@connectrpc/connect";
|
|
7
|
-
import * as v from "valibot";
|
|
8
8
|
//#region src/services/orderbook/orderbook.d.ts
|
|
9
9
|
interface SubscribeOrderbookInput extends BaseSubscribeInput<OrderbookData> {
|
|
10
10
|
symbol: string;
|
|
@@ -27,7 +27,7 @@ declare class OrderbookService {
|
|
|
27
27
|
/**
|
|
28
28
|
* Fetches a spot order book depth snapshot for a symbol and requested depth, returning best bids and asks with the backend book sequence.
|
|
29
29
|
*/
|
|
30
|
-
get(input:
|
|
30
|
+
get(input: validation_d_exports.InferInput<typeof GetOrderbookInputSchema>, options?: PolyesterRequestOptions): Promise<OrderbookData>;
|
|
31
31
|
/**
|
|
32
32
|
* Subscribes to the managed order book stream for a symbol and forwards reconstructed snapshots to onEvent. This is a convenience wrapper around createSubscription().unsubscribe.
|
|
33
33
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderbook.d.ts","names":[],"sources":["../../../src/services/orderbook/orderbook.ts"],"mappings":";;;;;;;;UA8BU,gCAAgC,mBAAmB;EACzD;EACA;EACA;EACA;;UAGa,gCAAgC,mBAAmB;UAEnD;EACb;EACA,YAAY;;UAGC,yCAET,yBACA,KAAK;;;;cAOA;;EAKG,YAAA,WAAW,WAAW,UAAU,mBAAmB,QAAQ;;;;EASjE,IACF,OAAO,
|
|
1
|
+
{"version":3,"file":"orderbook.d.ts","names":[],"sources":["../../../src/services/orderbook/orderbook.ts"],"mappings":";;;;;;;;UA8BU,gCAAgC,mBAAmB;EACzD;EACA;EACA;EACA;;UAGa,gCAAgC,mBAAmB;UAEnD;EACb;EACA,YAAY;;UAGC,yCAET,yBACA,KAAK;;;;cAOA;;EAKG,YAAA,WAAW,WAAW,UAAU,mBAAmB,QAAQ;;;;EASjE,IACF,OAAO,qBAAE,kBAAkB,0BAC3B,UAAU,0BACX,QAAQ;;;;EAmBX,UAAU,OAAO;;;;EAOjB,mBAAmB,OAAO,mCAAmC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parse, validation_exports } from "../../shared/validation.js";
|
|
1
2
|
import { toConnectCallOptions } from "../../shared/request-options.js";
|
|
2
3
|
import { publicationHandlerErrorContext } from "../../shared/subscription-errors.js";
|
|
3
4
|
import { createReadyGate, decimalInputToScaled } from "../../shared/decimal-surface.js";
|
|
@@ -8,7 +9,6 @@ import { GetOrderbookInputSchema, createOrderbookDataSchema, formatOrderbookLeve
|
|
|
8
9
|
import { toBig } from "../../utils/u128.js";
|
|
9
10
|
import { create } from "@bufbuild/protobuf";
|
|
10
11
|
import { createClient } from "@connectrpc/connect";
|
|
11
|
-
import * as v from "valibot";
|
|
12
12
|
//#region src/services/orderbook/orderbook.ts
|
|
13
13
|
/**
|
|
14
14
|
* Reads spot order book snapshots and maintains realtime local order book state from public delta channels.
|
|
@@ -26,13 +26,13 @@ var OrderbookService = class {
|
|
|
26
26
|
* Fetches a spot order book depth snapshot for a symbol and requested depth, returning best bids and asks with the backend book sequence.
|
|
27
27
|
*/
|
|
28
28
|
async get(input, options) {
|
|
29
|
-
const validated =
|
|
29
|
+
const validated = parse(GetOrderbookInputSchema, input);
|
|
30
30
|
await this.#scales.ready();
|
|
31
31
|
const res = await this.#client.getOrderBook({
|
|
32
32
|
symbol: validated.symbol,
|
|
33
33
|
depth: validated.protoDepth
|
|
34
34
|
}, toConnectCallOptions(options));
|
|
35
|
-
return
|
|
35
|
+
return parse(createOrderbookDataSchema(this.#scales, validated.symbol), {
|
|
36
36
|
symbol: validated.symbol,
|
|
37
37
|
depth: validated.depth,
|
|
38
38
|
bookSeq: res.bookSeq,
|
|
@@ -50,7 +50,7 @@ var OrderbookService = class {
|
|
|
50
50
|
* Creates a stateful order book subscription that first fetches a snapshot, buffers proto deltas from public:spot:orderbook:deltas:depth:{depth}:{symbolId}:proto, applies sequence-checked updates, and refetches on gaps or reconnects. The returned handle can unsubscribe or change local price bucket aggregation without reconnecting.
|
|
51
51
|
*/
|
|
52
52
|
createSubscription(input) {
|
|
53
|
-
const symbolId =
|
|
53
|
+
const symbolId = parse(validation_exports.pipe(validation_exports.number(), validation_exports.integer(), validation_exports.gtValue(0)), input.symbolId);
|
|
54
54
|
const wsDepth = Math.min(500, Math.max(1, Math.trunc(input.depth ?? 50)));
|
|
55
55
|
const channel = `public:spot:orderbook:deltas:depth:${wsDepth}:${symbolId}:proto`;
|
|
56
56
|
const client = this.#client;
|
|
@@ -115,7 +115,7 @@ var OrderbookService = class {
|
|
|
115
115
|
if (stream?.isReady()) emit();
|
|
116
116
|
}
|
|
117
117
|
async function inputServiceFetch() {
|
|
118
|
-
const validated =
|
|
118
|
+
const validated = parse(GetOrderbookInputSchema, {
|
|
119
119
|
symbol: input.symbol,
|
|
120
120
|
depth: wsDepth
|
|
121
121
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderbook.js","names":["#client","Proto.OrderbookService","#realtime","#scales","Proto.GetOrderBookResponseSchema","Proto.OrderBookDeltaSchema"],"sources":["../../../src/services/orderbook/orderbook.ts"],"sourcesContent":["import { create } from \"@bufbuild/protobuf\";\nimport * as Proto from \"../../gen/orderbook/v1/orderbook_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport {\n snapshotThenStream,\n type SnapshotThenStreamSubscription,\n} from \"../../realtime/snapshot-then-stream.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport {\n createReadyGate,\n decimalInputToScaled,\n type SdkScales,\n} from \"../../shared/decimal-surface.js\";\nimport {\n formatOrderbookLevel,\n GetOrderbookInputSchema,\n createOrderbookDataSchema,\n type OrderbookLevel,\n type OrderbookData,\n} from \"./orderbook.schemas.js\";\nimport { toBig } from \"../../utils/u128.js\";\nimport { isResourceNotFoundError } from \"../../utils/errors.js\";\nimport * as v from \"valibot\";\n\ninterface SubscribeOrderbookInput extends BaseSubscribeInput<OrderbookData> {\n symbol: string;\n symbolId: number;\n depth?: number;\n bucket?: string | null;\n}\n\nexport interface OrderbookStreamHandlers extends BaseSubscribeInput<OrderbookData> {}\n\nexport interface OrderbookSubscription {\n unsubscribe: () => void;\n setBucket: (bucket: string | null | undefined) => void;\n}\n\nexport interface CreateOrderbookSubscriptionInput\n extends\n OrderbookStreamHandlers,\n Pick<SubscribeOrderbookInput, \"symbol\" | \"symbolId\" | \"depth\" | \"bucket\"> {}\n\ntype BookSide = Map<bigint, bigint>;\n\n/**\n * Reads spot order book snapshots and maintains realtime local order book state from public delta channels.\n */\nexport class OrderbookService {\n #client: Client<typeof Proto.OrderbookService>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(Proto.OrderbookService, transport);\n this.#realtime = realtime;\n this.#scales = scales;\n }\n\n /**\n * Fetches a spot order book depth snapshot for a symbol and requested depth, returning best bids and asks with the backend book sequence.\n */\n async get(\n input: v.InferInput<typeof GetOrderbookInputSchema>,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookData> {\n const validated = v.parse(GetOrderbookInputSchema, input);\n await this.#scales.ready();\n const res = await this.#client.getOrderBook(\n { symbol: validated.symbol, depth: validated.protoDepth },\n toConnectCallOptions(options),\n );\n return v.parse(createOrderbookDataSchema(this.#scales, validated.symbol), {\n symbol: validated.symbol,\n depth: validated.depth,\n bookSeq: res.bookSeq,\n bids: res.bids,\n asks: res.asks,\n });\n }\n\n /**\n * Subscribes to the managed order book stream for a symbol and forwards reconstructed snapshots to onEvent. This is a convenience wrapper around createSubscription().unsubscribe.\n */\n subscribe(input: SubscribeOrderbookInput): () => void {\n return this.createSubscription(input).unsubscribe;\n }\n\n /**\n * Creates a stateful order book subscription that first fetches a snapshot, buffers proto deltas from public:spot:orderbook:deltas:depth:{depth}:{symbolId}:proto, applies sequence-checked updates, and refetches on gaps or reconnects. The returned handle can unsubscribe or change local price bucket aggregation without reconnecting.\n */\n createSubscription(input: CreateOrderbookSubscriptionInput): OrderbookSubscription {\n const symbolId = v.parse(v.pipe(v.number(), v.integer(), v.gtValue(0)), input.symbolId);\n const wsDepth = Math.min(500, Math.max(1, Math.trunc(input.depth ?? 50)));\n const channel = `public:spot:orderbook:deltas:depth:${wsDepth}:${symbolId}:proto`;\n\n const client = this.#client;\n const scales = this.#scales;\n const gate = createReadyGate(\n () => scales.ready(),\n (error) => input.onError?.(publicationHandlerErrorContext(channel, error)),\n );\n\n let bidsMap: BookSide = new Map();\n let asksMap: BookSide = new Map();\n let currentBookSeq = 0n;\n let bucketTicks: bigint | null = null;\n let stream: SnapshotThenStreamSubscription | undefined;\n\n function levelsToMap(levels: Proto.PriceLevel[] | undefined): BookSide {\n const map: BookSide = new Map();\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) continue;\n map.set(l.priceTicks, l.qtyScaled);\n }\n return map;\n }\n\n function applySideDelta(map: BookSide, levels: Proto.PriceLevel[] | undefined): void {\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) map.delete(l.priceTicks);\n else map.set(l.priceTicks, l.qtyScaled);\n }\n }\n\n function sideToUI(map: BookSide, side: \"bids\" | \"asks\", limit: number): OrderbookLevel[] {\n const entries = Array.from(map.entries());\n entries.sort(([pa], [pb]) => {\n if (pa === pb) return 0;\n return side === \"bids\" ? (pa > pb ? -1 : 1) : pa < pb ? -1 : 1;\n });\n return entries\n .slice(0, limit)\n .map(([priceTicks, qtyScaled]) =>\n formatOrderbookLevel({ priceTicks, qtyScaled }, scales, symbolId),\n );\n }\n\n function sideToUIBucketed(\n map: BookSide,\n side: \"bids\" | \"asks\",\n limit: number,\n bucket: bigint | null,\n ): OrderbookLevel[] {\n if (!bucket || bucket <= 0n) return sideToUI(map, side, limit);\n\n const agg: BookSide = new Map();\n for (const [priceTicks, qtyScaled] of map.entries()) {\n if (qtyScaled <= 0n) continue;\n const bucketPrice = (priceTicks / bucket) * bucket;\n agg.set(bucketPrice, (agg.get(bucketPrice) ?? 0n) + qtyScaled);\n }\n return sideToUI(agg, side, limit);\n }\n\n function emit(): void {\n gate.run(() => {\n input.onEvent({\n symbol: input.symbol,\n depth: wsDepth,\n bookSeq: currentBookSeq.toString(),\n bids: sideToUIBucketed(bidsMap, \"bids\", wsDepth, bucketTicks),\n asks: sideToUIBucketed(asksMap, \"asks\", wsDepth, bucketTicks),\n });\n });\n }\n\n function setBucket(bucket: string | null | undefined): void {\n if (!bucket) {\n bucketTicks = null;\n } else {\n try {\n bucketTicks = decimalInputToScaled(\"bucket\", bucket, scales.price());\n } catch {\n bucketTicks = null;\n }\n }\n if (stream?.isReady()) emit();\n }\n\n async function inputServiceFetch(): Promise<Proto.GetOrderBookResponse> {\n const validated = v.parse(GetOrderbookInputSchema, {\n symbol: input.symbol,\n depth: wsDepth,\n });\n try {\n return await client.getOrderBook({\n symbol: validated.symbol,\n depth: validated.protoDepth,\n });\n } catch (error: unknown) {\n if (!isResourceNotFoundError(error)) throw error;\n\n return create(Proto.GetOrderBookResponseSchema, {\n bookSeq: 0n,\n bids: [],\n asks: [],\n });\n }\n }\n\n function handleDelta(delta: Proto.OrderBookDelta): void {\n if (delta.reset) {\n bidsMap.clear();\n asksMap.clear();\n currentBookSeq = 0n;\n }\n\n if (currentBookSeq !== 0n && delta.bookSeqStart > currentBookSeq + 1n) {\n stream?.refreshSnapshot();\n return;\n }\n\n if (delta.bookSeqEnd <= currentBookSeq) return;\n\n applySideDelta(bidsMap, delta.bids);\n applySideDelta(asksMap, delta.asks);\n\n currentBookSeq = delta.bookSeqEnd > currentBookSeq ? delta.bookSeqEnd : currentBookSeq;\n emit();\n }\n\n setBucket(input.bucket);\n stream = snapshotThenStream({\n realtime: this.#realtime,\n channel,\n schema: Proto.OrderBookDeltaSchema,\n maxBufferedPublications: 200,\n snapshotErrorLog: \"Failed to fetch orderbook\",\n fetchSnapshot: inputServiceFetch,\n readPublication: (delta) => [delta],\n applySnapshot: (snapshot, bufferedDeltas) => {\n bidsMap = levelsToMap(snapshot.bids);\n asksMap = levelsToMap(snapshot.asks);\n currentBookSeq = toBig(snapshot.bookSeq);\n emit();\n for (const delta of bufferedDeltas) {\n if (stream?.isDisposed()) return;\n handleDelta(delta);\n }\n },\n applyLivePublications: (deltas) => {\n for (const delta of deltas) {\n if (stream?.isDisposed()) return;\n handleDelta(delta);\n }\n },\n onOpen: input.onOpen,\n onClose: input.onClose,\n onError: input.onError,\n });\n\n function dispose(): void {\n stream?.unsubscribe();\n }\n\n return { unsubscribe: dispose, setBucket };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orderbook.js","names":["#client","Proto.OrderbookService","#realtime","#scales","v.parse","v","Proto.GetOrderBookResponseSchema","Proto.OrderBookDeltaSchema"],"sources":["../../../src/services/orderbook/orderbook.ts"],"sourcesContent":["import { create } from \"@bufbuild/protobuf\";\nimport * as Proto from \"../../gen/orderbook/v1/orderbook_pb.js\";\nimport { createClient, type Client, type Transport } from \"@connectrpc/connect\";\nimport { publicationHandlerErrorContext } from \"../../shared/subscription-errors.js\";\nimport type { PolyesterRealtime } from \"../../realtime/types.js\";\nimport {\n snapshotThenStream,\n type SnapshotThenStreamSubscription,\n} from \"../../realtime/snapshot-then-stream.js\";\nimport type { BaseSubscribeInput } from \"../../shared/types.js\";\nimport {\n toConnectCallOptions,\n type PolyesterRequestOptions,\n} from \"../../shared/request-options.js\";\nimport {\n createReadyGate,\n decimalInputToScaled,\n type SdkScales,\n} from \"../../shared/decimal-surface.js\";\nimport {\n formatOrderbookLevel,\n GetOrderbookInputSchema,\n createOrderbookDataSchema,\n type OrderbookLevel,\n type OrderbookData,\n} from \"./orderbook.schemas.js\";\nimport { toBig } from \"../../utils/u128.js\";\nimport { isResourceNotFoundError } from \"../../utils/errors.js\";\nimport * as v from \"../../shared/validation.js\";\n\ninterface SubscribeOrderbookInput extends BaseSubscribeInput<OrderbookData> {\n symbol: string;\n symbolId: number;\n depth?: number;\n bucket?: string | null;\n}\n\nexport interface OrderbookStreamHandlers extends BaseSubscribeInput<OrderbookData> {}\n\nexport interface OrderbookSubscription {\n unsubscribe: () => void;\n setBucket: (bucket: string | null | undefined) => void;\n}\n\nexport interface CreateOrderbookSubscriptionInput\n extends\n OrderbookStreamHandlers,\n Pick<SubscribeOrderbookInput, \"symbol\" | \"symbolId\" | \"depth\" | \"bucket\"> {}\n\ntype BookSide = Map<bigint, bigint>;\n\n/**\n * Reads spot order book snapshots and maintains realtime local order book state from public delta channels.\n */\nexport class OrderbookService {\n #client: Client<typeof Proto.OrderbookService>;\n #realtime: PolyesterRealtime;\n #scales: SdkScales;\n\n constructor(transport: Transport, realtime: PolyesterRealtime, scales: SdkScales) {\n this.#client = createClient(Proto.OrderbookService, transport);\n this.#realtime = realtime;\n this.#scales = scales;\n }\n\n /**\n * Fetches a spot order book depth snapshot for a symbol and requested depth, returning best bids and asks with the backend book sequence.\n */\n async get(\n input: v.InferInput<typeof GetOrderbookInputSchema>,\n options?: PolyesterRequestOptions,\n ): Promise<OrderbookData> {\n const validated = v.parse(GetOrderbookInputSchema, input);\n await this.#scales.ready();\n const res = await this.#client.getOrderBook(\n { symbol: validated.symbol, depth: validated.protoDepth },\n toConnectCallOptions(options),\n );\n return v.parse(createOrderbookDataSchema(this.#scales, validated.symbol), {\n symbol: validated.symbol,\n depth: validated.depth,\n bookSeq: res.bookSeq,\n bids: res.bids,\n asks: res.asks,\n });\n }\n\n /**\n * Subscribes to the managed order book stream for a symbol and forwards reconstructed snapshots to onEvent. This is a convenience wrapper around createSubscription().unsubscribe.\n */\n subscribe(input: SubscribeOrderbookInput): () => void {\n return this.createSubscription(input).unsubscribe;\n }\n\n /**\n * Creates a stateful order book subscription that first fetches a snapshot, buffers proto deltas from public:spot:orderbook:deltas:depth:{depth}:{symbolId}:proto, applies sequence-checked updates, and refetches on gaps or reconnects. The returned handle can unsubscribe or change local price bucket aggregation without reconnecting.\n */\n createSubscription(input: CreateOrderbookSubscriptionInput): OrderbookSubscription {\n const symbolId = v.parse(v.pipe(v.number(), v.integer(), v.gtValue(0)), input.symbolId);\n const wsDepth = Math.min(500, Math.max(1, Math.trunc(input.depth ?? 50)));\n const channel = `public:spot:orderbook:deltas:depth:${wsDepth}:${symbolId}:proto`;\n\n const client = this.#client;\n const scales = this.#scales;\n const gate = createReadyGate(\n () => scales.ready(),\n (error) => input.onError?.(publicationHandlerErrorContext(channel, error)),\n );\n\n let bidsMap: BookSide = new Map();\n let asksMap: BookSide = new Map();\n let currentBookSeq = 0n;\n let bucketTicks: bigint | null = null;\n let stream: SnapshotThenStreamSubscription | undefined;\n\n function levelsToMap(levels: Proto.PriceLevel[] | undefined): BookSide {\n const map: BookSide = new Map();\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) continue;\n map.set(l.priceTicks, l.qtyScaled);\n }\n return map;\n }\n\n function applySideDelta(map: BookSide, levels: Proto.PriceLevel[] | undefined): void {\n for (const l of levels ?? []) {\n if (l.qtyScaled === 0n) map.delete(l.priceTicks);\n else map.set(l.priceTicks, l.qtyScaled);\n }\n }\n\n function sideToUI(map: BookSide, side: \"bids\" | \"asks\", limit: number): OrderbookLevel[] {\n const entries = Array.from(map.entries());\n entries.sort(([pa], [pb]) => {\n if (pa === pb) return 0;\n return side === \"bids\" ? (pa > pb ? -1 : 1) : pa < pb ? -1 : 1;\n });\n return entries\n .slice(0, limit)\n .map(([priceTicks, qtyScaled]) =>\n formatOrderbookLevel({ priceTicks, qtyScaled }, scales, symbolId),\n );\n }\n\n function sideToUIBucketed(\n map: BookSide,\n side: \"bids\" | \"asks\",\n limit: number,\n bucket: bigint | null,\n ): OrderbookLevel[] {\n if (!bucket || bucket <= 0n) return sideToUI(map, side, limit);\n\n const agg: BookSide = new Map();\n for (const [priceTicks, qtyScaled] of map.entries()) {\n if (qtyScaled <= 0n) continue;\n const bucketPrice = (priceTicks / bucket) * bucket;\n agg.set(bucketPrice, (agg.get(bucketPrice) ?? 0n) + qtyScaled);\n }\n return sideToUI(agg, side, limit);\n }\n\n function emit(): void {\n gate.run(() => {\n input.onEvent({\n symbol: input.symbol,\n depth: wsDepth,\n bookSeq: currentBookSeq.toString(),\n bids: sideToUIBucketed(bidsMap, \"bids\", wsDepth, bucketTicks),\n asks: sideToUIBucketed(asksMap, \"asks\", wsDepth, bucketTicks),\n });\n });\n }\n\n function setBucket(bucket: string | null | undefined): void {\n if (!bucket) {\n bucketTicks = null;\n } else {\n try {\n bucketTicks = decimalInputToScaled(\"bucket\", bucket, scales.price());\n } catch {\n bucketTicks = null;\n }\n }\n if (stream?.isReady()) emit();\n }\n\n async function inputServiceFetch(): Promise<Proto.GetOrderBookResponse> {\n const validated = v.parse(GetOrderbookInputSchema, {\n symbol: input.symbol,\n depth: wsDepth,\n });\n try {\n return await client.getOrderBook({\n symbol: validated.symbol,\n depth: validated.protoDepth,\n });\n } catch (error: unknown) {\n if (!isResourceNotFoundError(error)) throw error;\n\n return create(Proto.GetOrderBookResponseSchema, {\n bookSeq: 0n,\n bids: [],\n asks: [],\n });\n }\n }\n\n function handleDelta(delta: Proto.OrderBookDelta): void {\n if (delta.reset) {\n bidsMap.clear();\n asksMap.clear();\n currentBookSeq = 0n;\n }\n\n if (currentBookSeq !== 0n && delta.bookSeqStart > currentBookSeq + 1n) {\n stream?.refreshSnapshot();\n return;\n }\n\n if (delta.bookSeqEnd <= currentBookSeq) return;\n\n applySideDelta(bidsMap, delta.bids);\n applySideDelta(asksMap, delta.asks);\n\n currentBookSeq = delta.bookSeqEnd > currentBookSeq ? delta.bookSeqEnd : currentBookSeq;\n emit();\n }\n\n setBucket(input.bucket);\n stream = snapshotThenStream({\n realtime: this.#realtime,\n channel,\n schema: Proto.OrderBookDeltaSchema,\n maxBufferedPublications: 200,\n snapshotErrorLog: \"Failed to fetch orderbook\",\n fetchSnapshot: inputServiceFetch,\n readPublication: (delta) => [delta],\n applySnapshot: (snapshot, bufferedDeltas) => {\n bidsMap = levelsToMap(snapshot.bids);\n asksMap = levelsToMap(snapshot.asks);\n currentBookSeq = toBig(snapshot.bookSeq);\n emit();\n for (const delta of bufferedDeltas) {\n if (stream?.isDisposed()) return;\n handleDelta(delta);\n }\n },\n applyLivePublications: (deltas) => {\n for (const delta of deltas) {\n if (stream?.isDisposed()) return;\n handleDelta(delta);\n }\n },\n onOpen: input.onOpen,\n onClose: input.onClose,\n onError: input.onError,\n });\n\n function dispose(): void {\n stream?.unsubscribe();\n }\n\n return { unsubscribe: dispose, setBucket };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { validation_d_exports } from "../../shared/validation.js";
|
|
1
2
|
import { PairCatalogKey } from "../../catalogs/types.js";
|
|
2
3
|
import { Depth } from "../../gen/orderbook/v1/orderbook_pb.js";
|
|
3
4
|
import { SdkScales } from "../../shared/decimal-surface.js";
|
|
4
|
-
import * as v from "valibot";
|
|
5
5
|
//#region src/services/orderbook/orderbook.schemas.d.ts
|
|
6
|
-
declare const GetOrderbookInputSchema:
|
|
7
|
-
readonly symbol:
|
|
8
|
-
readonly depth:
|
|
9
|
-
}, undefined>,
|
|
6
|
+
declare const GetOrderbookInputSchema: validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.ObjectSchema<{
|
|
7
|
+
readonly symbol: validation_d_exports.StringSchema<undefined>;
|
|
8
|
+
readonly depth: validation_d_exports.OptionalSchema<validation_d_exports.NumberSchema<undefined>, 50>;
|
|
9
|
+
}, undefined>, validation_d_exports.TransformAction<{
|
|
10
10
|
symbol: string;
|
|
11
11
|
depth: number;
|
|
12
12
|
}, {
|
|
@@ -14,30 +14,30 @@ declare const GetOrderbookInputSchema: v.SchemaWithPipe<readonly [v.ObjectSchema
|
|
|
14
14
|
depth: 5 | 10 | 20 | 1 | 200 | 500 | 50 | 100 | 1000;
|
|
15
15
|
protoDepth: Depth;
|
|
16
16
|
}>]>;
|
|
17
|
-
type GetOrderbookInput =
|
|
18
|
-
declare const OrderbookLevelInputSchema:
|
|
19
|
-
readonly priceTicks:
|
|
20
|
-
readonly qtyScaled:
|
|
17
|
+
type GetOrderbookInput = validation_d_exports.InferInput<typeof GetOrderbookInputSchema>;
|
|
18
|
+
declare const OrderbookLevelInputSchema: validation_d_exports.ObjectSchema<{
|
|
19
|
+
readonly priceTicks: validation_d_exports.BigintSchema<undefined>;
|
|
20
|
+
readonly qtyScaled: validation_d_exports.BigintSchema<undefined>;
|
|
21
21
|
}, undefined>;
|
|
22
|
-
type OrderbookLevelInput =
|
|
22
|
+
type OrderbookLevelInput = validation_d_exports.InferOutput<typeof OrderbookLevelInputSchema>;
|
|
23
23
|
declare function formatOrderbookLevel(level: OrderbookLevelInput, scales: SdkScales, pair: PairCatalogKey): {
|
|
24
24
|
price: string;
|
|
25
25
|
qty: string;
|
|
26
26
|
};
|
|
27
27
|
type OrderbookLevel = ReturnType<typeof formatOrderbookLevel>;
|
|
28
|
-
declare function createOrderbookDataSchema(scales: SdkScales, pair: PairCatalogKey):
|
|
29
|
-
readonly symbol:
|
|
30
|
-
readonly depth:
|
|
31
|
-
readonly bookSeq:
|
|
32
|
-
readonly bids:
|
|
33
|
-
readonly priceTicks:
|
|
34
|
-
readonly qtyScaled:
|
|
28
|
+
declare function createOrderbookDataSchema(scales: SdkScales, pair: PairCatalogKey): validation_d_exports.SchemaWithPipe<readonly [validation_d_exports.ObjectSchema<{
|
|
29
|
+
readonly symbol: validation_d_exports.StringSchema<undefined>;
|
|
30
|
+
readonly depth: validation_d_exports.NumberSchema<undefined>;
|
|
31
|
+
readonly bookSeq: validation_d_exports.BigintSchema<undefined>;
|
|
32
|
+
readonly bids: validation_d_exports.ArraySchema<validation_d_exports.ObjectSchema<{
|
|
33
|
+
readonly priceTicks: validation_d_exports.BigintSchema<undefined>;
|
|
34
|
+
readonly qtyScaled: validation_d_exports.BigintSchema<undefined>;
|
|
35
35
|
}, undefined>, undefined>;
|
|
36
|
-
readonly asks:
|
|
37
|
-
readonly priceTicks:
|
|
38
|
-
readonly qtyScaled:
|
|
36
|
+
readonly asks: validation_d_exports.ArraySchema<validation_d_exports.ObjectSchema<{
|
|
37
|
+
readonly priceTicks: validation_d_exports.BigintSchema<undefined>;
|
|
38
|
+
readonly qtyScaled: validation_d_exports.BigintSchema<undefined>;
|
|
39
39
|
}, undefined>, undefined>;
|
|
40
|
-
}, undefined>,
|
|
40
|
+
}, undefined>, validation_d_exports.TransformAction<{
|
|
41
41
|
symbol: string;
|
|
42
42
|
depth: number;
|
|
43
43
|
bookSeq: bigint;
|
|
@@ -62,7 +62,7 @@ declare function createOrderbookDataSchema(scales: SdkScales, pair: PairCatalogK
|
|
|
62
62
|
symbol: string;
|
|
63
63
|
depth: number;
|
|
64
64
|
}>]>;
|
|
65
|
-
type OrderbookData =
|
|
65
|
+
type OrderbookData = validation_d_exports.InferOutput<ReturnType<typeof createOrderbookDataSchema>>;
|
|
66
66
|
//#endregion
|
|
67
67
|
export { GetOrderbookInput, GetOrderbookInputSchema, OrderbookData, OrderbookLevel, OrderbookLevelInput, createOrderbookDataSchema, formatOrderbookLevel };
|
|
68
68
|
//# sourceMappingURL=orderbook.schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderbook.schemas.d.ts","names":[],"sources":["../../../src/services/orderbook/orderbook.schemas.ts"],"mappings":";;;;;cAKa,yBAAuB,
|
|
1
|
+
{"version":3,"file":"orderbook.schemas.d.ts","names":[],"sources":["../../../src/services/orderbook/orderbook.schemas.ts"],"mappings":";;;;;cAKa,yBAAuB,qBAAA,yBAAA,qBAAA;;;;;;;;;cAAA;;KAexB,oBAAoB,qBAAE,kBAAkB;cAE9C,2BAAyB,qBAAA;;;;KAKnB,sBAAsB,qBAAE,mBAAmB;iBAEvC,qBACZ,OAAO,qBACP,QAAQ,WACR,MAAM;;;;KAQE,iBAAiB,kBAAkB;iBAE/B,0BAA0B,QAAQ,WAAW,MAAM,iBAAc,qBAAA,yBAAA,qBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkBrE,gBAAgB,qBAAE,YAAY,kBAAkB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { validation_exports } from "../../shared/validation.js";
|
|
1
2
|
import { scaledToDecimalOutput } from "../../shared/decimal-surface.js";
|
|
2
3
|
import { normalizeOrderbookDepth } from "./orderbook.codecs.js";
|
|
3
|
-
import * as v from "valibot";
|
|
4
4
|
//#region src/services/orderbook/orderbook.schemas.ts
|
|
5
|
-
const GetOrderbookInputSchema =
|
|
6
|
-
symbol:
|
|
7
|
-
depth:
|
|
8
|
-
}),
|
|
5
|
+
const GetOrderbookInputSchema = validation_exports.pipe(validation_exports.object({
|
|
6
|
+
symbol: validation_exports.string(),
|
|
7
|
+
depth: validation_exports.optional(validation_exports.number(), 50)
|
|
8
|
+
}), validation_exports.transform((input) => {
|
|
9
9
|
const depth = normalizeOrderbookDepth(input.depth);
|
|
10
10
|
return {
|
|
11
11
|
symbol: input.symbol,
|
|
@@ -13,9 +13,9 @@ const GetOrderbookInputSchema = v.pipe(v.object({
|
|
|
13
13
|
protoDepth: depth.protoDepth
|
|
14
14
|
};
|
|
15
15
|
}));
|
|
16
|
-
const OrderbookLevelInputSchema =
|
|
17
|
-
priceTicks:
|
|
18
|
-
qtyScaled:
|
|
16
|
+
const OrderbookLevelInputSchema = validation_exports.object({
|
|
17
|
+
priceTicks: validation_exports.bigint(),
|
|
18
|
+
qtyScaled: validation_exports.bigint()
|
|
19
19
|
});
|
|
20
20
|
function formatOrderbookLevel(level, scales, pair) {
|
|
21
21
|
return {
|
|
@@ -24,13 +24,13 @@ function formatOrderbookLevel(level, scales, pair) {
|
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
function createOrderbookDataSchema(scales, pair) {
|
|
27
|
-
return
|
|
28
|
-
symbol:
|
|
29
|
-
depth:
|
|
30
|
-
bookSeq:
|
|
31
|
-
bids:
|
|
32
|
-
asks:
|
|
33
|
-
}),
|
|
27
|
+
return validation_exports.pipe(validation_exports.object({
|
|
28
|
+
symbol: validation_exports.string(),
|
|
29
|
+
depth: validation_exports.number(),
|
|
30
|
+
bookSeq: validation_exports.bigint(),
|
|
31
|
+
bids: validation_exports.array(OrderbookLevelInputSchema),
|
|
32
|
+
asks: validation_exports.array(OrderbookLevelInputSchema)
|
|
33
|
+
}), validation_exports.transform((d) => ({
|
|
34
34
|
...d,
|
|
35
35
|
bookSeq: d.bookSeq.toString(),
|
|
36
36
|
bids: d.bids.map((level) => formatOrderbookLevel(level, scales, pair)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderbook.schemas.js","names":[],"sources":["../../../src/services/orderbook/orderbook.schemas.ts"],"sourcesContent":["import * as v from \"
|
|
1
|
+
{"version":3,"file":"orderbook.schemas.js","names":["v"],"sources":["../../../src/services/orderbook/orderbook.schemas.ts"],"sourcesContent":["import * as v from \"../../shared/validation.js\";\nimport type { PairCatalogKey } from \"../../catalogs/types.js\";\nimport { scaledToDecimalOutput, type SdkScales } from \"../../shared/decimal-surface.js\";\nimport { normalizeOrderbookDepth } from \"./orderbook.codecs.js\";\n\nexport const GetOrderbookInputSchema = v.pipe(\n v.object({\n symbol: v.string(),\n depth: v.optional(v.number(), 50),\n }),\n v.transform((input) => {\n const depth = normalizeOrderbookDepth(input.depth);\n return {\n symbol: input.symbol,\n depth: depth.levels,\n protoDepth: depth.protoDepth,\n };\n }),\n);\n\nexport type GetOrderbookInput = v.InferInput<typeof GetOrderbookInputSchema>;\n\nconst OrderbookLevelInputSchema = v.object({\n priceTicks: v.bigint(),\n qtyScaled: v.bigint(),\n});\n\nexport type OrderbookLevelInput = v.InferOutput<typeof OrderbookLevelInputSchema>;\n\nexport function formatOrderbookLevel(\n level: OrderbookLevelInput,\n scales: SdkScales,\n pair: PairCatalogKey,\n) {\n return {\n price: scaledToDecimalOutput(level.priceTicks, scales.price()),\n qty: scaledToDecimalOutput(level.qtyScaled, scales.baseQty(pair)),\n };\n}\n\nexport type OrderbookLevel = ReturnType<typeof formatOrderbookLevel>;\n\nexport function createOrderbookDataSchema(scales: SdkScales, pair: PairCatalogKey) {\n return v.pipe(\n v.object({\n symbol: v.string(),\n depth: v.number(),\n bookSeq: v.bigint(),\n bids: v.array(OrderbookLevelInputSchema),\n asks: v.array(OrderbookLevelInputSchema),\n }),\n v.transform((d) => ({\n ...d,\n bookSeq: d.bookSeq.toString(),\n bids: d.bids.map((level) => formatOrderbookLevel(level, scales, pair)),\n asks: d.asks.map((level) => formatOrderbookLevel(level, scales, pair)),\n })),\n );\n}\n\nexport type OrderbookData = v.InferOutput<ReturnType<typeof createOrderbookDataSchema>>;\n"],"mappings":";;;;AAKA,MAAa,0BAA0BA,mBAAE,KACrCA,mBAAE,OAAO;CACL,QAAQA,mBAAE,OAAO;CACjB,OAAOA,mBAAE,SAASA,mBAAE,OAAO,GAAG,EAAE;AACpC,CAAC,GACDA,mBAAE,WAAW,UAAU;CACnB,MAAM,QAAQ,wBAAwB,MAAM,KAAK;CACjD,OAAO;EACH,QAAQ,MAAM;EACd,OAAO,MAAM;EACb,YAAY,MAAM;CACtB;AACJ,CAAC,CACL;AAIA,MAAM,4BAA4BA,mBAAE,OAAO;CACvC,YAAYA,mBAAE,OAAO;CACrB,WAAWA,mBAAE,OAAO;AACxB,CAAC;AAID,SAAgB,qBACZ,OACA,QACA,MACF;CACE,OAAO;EACH,OAAO,sBAAsB,MAAM,YAAY,OAAO,MAAM,CAAC;EAC7D,KAAK,sBAAsB,MAAM,WAAW,OAAO,QAAQ,IAAI,CAAC;CACpE;AACJ;AAIA,SAAgB,0BAA0B,QAAmB,MAAsB;CAC/E,OAAOA,mBAAE,KACLA,mBAAE,OAAO;EACL,QAAQA,mBAAE,OAAO;EACjB,OAAOA,mBAAE,OAAO;EAChB,SAASA,mBAAE,OAAO;EAClB,MAAMA,mBAAE,MAAM,yBAAyB;EACvC,MAAMA,mBAAE,MAAM,yBAAyB;CAC3C,CAAC,GACDA,mBAAE,WAAW,OAAO;EAChB,GAAG;EACH,SAAS,EAAE,QAAQ,SAAS;EAC5B,MAAM,EAAE,KAAK,KAAK,UAAU,qBAAqB,OAAO,QAAQ,IAAI,CAAC;EACrE,MAAM,EAAE,KAAK,KAAK,UAAU,qBAAqB,OAAO,QAAQ,IAAI,CAAC;CACzE,EAAE,CACN;AACJ"}
|