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