@polyester/sdk 0.14.2 → 0.15.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 +14 -0
- package/dist/core-client.js +1 -1
- package/dist/services/address-book/address-book.schemas.d.ts +1 -1
- package/dist/services/address-book/address-book.schemas.d.ts.map +1 -1
- package/dist/services/address-book/address-book.schemas.js +2 -1
- package/dist/services/address-book/address-book.schemas.js.map +1 -1
- package/dist/services/candles/candles.d.ts.map +1 -1
- package/dist/services/candles/candles.js +2 -1
- package/dist/services/candles/candles.js.map +1 -1
- package/dist/services/candles/candles.schemas.d.ts +1 -1
- package/dist/services/candles/candles.schemas.d.ts.map +1 -1
- package/dist/services/candles/candles.schemas.js +3 -2
- package/dist/services/candles/candles.schemas.js.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.schemas.d.ts.map +1 -1
- package/dist/services/chain-analytics/chain-analytics.schemas.js +5 -5
- package/dist/services/chain-analytics/chain-analytics.schemas.js.map +1 -1
- package/dist/services/deposit/deposit.schemas.d.ts +3 -3
- package/dist/services/deposit/deposit.schemas.d.ts.map +1 -1
- package/dist/services/deposit/deposit.schemas.js +4 -4
- package/dist/services/deposit/deposit.schemas.js.map +1 -1
- package/dist/services/guard-signer/guard-signer.schemas.d.ts +2 -2
- package/dist/services/guard-signer/guard-signer.schemas.d.ts.map +1 -1
- package/dist/services/guard-signer/guard-signer.schemas.js +2 -1
- package/dist/services/guard-signer/guard-signer.schemas.js.map +1 -1
- package/dist/services/heatmap/heatmap.d.ts.map +1 -1
- package/dist/services/heatmap/heatmap.js +2 -1
- package/dist/services/heatmap/heatmap.js.map +1 -1
- package/dist/services/heatmap/heatmap.schemas.d.ts +1 -1
- package/dist/services/heatmap/heatmap.schemas.d.ts.map +1 -1
- package/dist/services/heatmap/heatmap.schemas.js +2 -1
- package/dist/services/heatmap/heatmap.schemas.js.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.schemas.d.ts +2 -2
- package/dist/services/internal-transfers/internal-transfers.schemas.d.ts.map +1 -1
- package/dist/services/internal-transfers/internal-transfers.schemas.js +3 -2
- package/dist/services/internal-transfers/internal-transfers.schemas.js.map +1 -1
- package/dist/services/lifecycle/lifecycle.schemas.d.ts +42 -42
- package/dist/services/market-data/market-data.d.ts.map +1 -1
- package/dist/services/market-data/market-data.js +2 -1
- package/dist/services/market-data/market-data.js.map +1 -1
- package/dist/services/market-data/market-data.schemas.d.ts +1 -1
- package/dist/services/market-data/market-data.schemas.js +2 -2
- package/dist/services/market-data/market-data.schemas.js.map +1 -1
- package/dist/services/market-overview/market-overview.schemas.d.ts +1 -1
- package/dist/services/market-overview/market-overview.schemas.js +2 -2
- package/dist/services/market-overview/market-overview.schemas.js.map +1 -1
- package/dist/services/orders/orders-input.schemas.d.ts +1 -1
- package/dist/services/orders/orders-modify.schemas.js +1 -1
- package/dist/services/orders/orders-output.schemas.d.ts +6 -6
- package/dist/services/orders/orders-risk.schemas.d.ts.map +1 -1
- package/dist/services/orders/orders-risk.schemas.js +3 -4
- package/dist/services/orders/orders-risk.schemas.js.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts +9 -9
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.d.ts.map +1 -1
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js +17 -8
- package/dist/services/policies/subaccount-policies/subaccount-policies.schemas.js.map +1 -1
- package/dist/services/shared.js +4 -2
- package/dist/services/shared.js.map +1 -1
- package/dist/services/subaccounts/subaccounts.schemas.d.ts +5 -5
- package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts +2 -2
- package/dist/services/trading-withdraws/trading-withdraws.schemas.d.ts.map +1 -1
- package/dist/services/trading-withdraws/trading-withdraws.schemas.js +3 -2
- package/dist/services/trading-withdraws/trading-withdraws.schemas.js.map +1 -1
- package/dist/services/trailing-oneof-inputs.js +3 -1
- package/dist/services/trailing-oneof-inputs.js.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.d.ts +2 -2
- package/dist/services/triggers/trigger-input.schemas.d.ts.map +1 -1
- package/dist/services/triggers/trigger-input.schemas.js +3 -3
- package/dist/services/triggers/trigger-input.schemas.js.map +1 -1
- package/dist/services/triggers/triggers-output.schemas.d.ts +18 -18
- package/dist/shared/decimal-surface.d.ts.map +1 -1
- package/dist/shared/decimal-surface.js.map +1 -1
- package/dist/shared/schemas.js +4 -4
- package/dist/shared/schemas.js.map +1 -1
- package/dist/utils/numbers.js +1 -10
- package/dist/utils/numbers.js.map +1 -1
- package/package.json +1 -1
package/dist/shared/schemas.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { formatId, idToBigInt } from "../utils/base58-id.js";
|
|
2
|
-
import { parseOptionalUint64DecimalStrict,
|
|
2
|
+
import { parseOptionalUint64DecimalStrict, toBpsOrZero, toIntOrZero } from "../utils/numbers.js";
|
|
3
3
|
import { tsNsToMs, tsObjToMs } from "../utils/time.js";
|
|
4
|
+
import { PROTOBUF_UINT32_MAX } from "./wire-bounds.js";
|
|
4
5
|
import * as v from "valibot";
|
|
5
6
|
//#region src/shared/schemas.ts
|
|
6
7
|
const UINT64_MAX = (1n << 64n) - 1n;
|
|
@@ -15,8 +16,7 @@ const TimestampSchema = v.object({
|
|
|
15
16
|
const TimestampMsSchema = v.pipe(TimestampSchema, v.transform((value) => tsObjToMs(value)));
|
|
16
17
|
const OptionalTimestampMsSchema = v.pipe(v.optional(TimestampSchema), v.transform((value) => tsObjToMs(value)));
|
|
17
18
|
const OptionalNumberDefaultNullSchema = v.optional(v.nullable(v.number()), null);
|
|
18
|
-
const
|
|
19
|
-
const OptionalNumberToIntOrZeroSchema = v.pipe(OptionalNumberDefaultNullSchema, v.transform((value) => toIntOrZero(value)));
|
|
19
|
+
const OptionalNumberToIntOrZeroSchema = v.pipe(v.optional(v.nullable(v.pipe(v.number(), v.maxValue(PROTOBUF_UINT32_MAX))), null), v.transform((value) => toIntOrZero(value)));
|
|
20
20
|
v.pipe(OptionalNumberDefaultNullSchema, v.transform((value) => toBpsOrZero(value)));
|
|
21
21
|
v.pipe(v.bigint(), v.transform((value) => tsNsToMs(value)));
|
|
22
22
|
const BigIntStringSchema = v.pipe(v.bigint(), v.transform((value) => value.toString()));
|
|
@@ -60,6 +60,6 @@ function positiveBigintStringInputSchema(fieldName) {
|
|
|
60
60
|
}
|
|
61
61
|
const JsonObjectSchema = v.custom((input) => typeof input === "object" && input !== null && !Array.isArray(input));
|
|
62
62
|
//#endregion
|
|
63
|
-
export { BigIntStringSchema, JsonObjectSchema, OptionalBigIntStringSchema, OptionalNumberDefaultNullSchema,
|
|
63
|
+
export { BigIntStringSchema, JsonObjectSchema, OptionalBigIntStringSchema, OptionalNumberDefaultNullSchema, OptionalNumberToIntOrZeroSchema, OptionalPublicIdSchema, OptionalTimestampMsSchema, OptionalTimestampMsToUsInputSchema, OptionalTimestampSecondsInputSchema, PublicIdSchema, TimestampMsSchema, TimestampSchema, bigintStringInputSchema, idInputSchema, optionalIdInputSchema, optionalSubaccountIdInputSchema, optionalUint64DecimalFilterSchema, positiveBigintStringInputSchema };
|
|
64
64
|
|
|
65
65
|
//# sourceMappingURL=schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","names":[],"sources":["../../src/shared/schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { formatId, idToBigInt } from \"../utils/base58-id.js\";\nimport {
|
|
1
|
+
{"version":3,"file":"schemas.js","names":[],"sources":["../../src/shared/schemas.ts"],"sourcesContent":["import * as v from \"valibot\";\nimport { formatId, idToBigInt } from \"../utils/base58-id.js\";\nimport { parseOptionalUint64DecimalStrict, toBpsOrZero, toIntOrZero } from \"../utils/numbers.js\";\nimport { tsNsToMs, tsObjToMs } from \"../utils/time.js\";\nimport type { JsonObject } from \"@bufbuild/protobuf\";\nimport { PROTOBUF_UINT32_MAX } from \"./wire-bounds.js\";\n\nconst UINT64_MAX = (1n << 64n) - 1n;\nconst MS_TO_US = 1_000n;\nconst MS_TO_NS = 1_000_000n;\nconst MAX_UINT64_TIMESTAMP_MS_US = Number(UINT64_MAX / MS_TO_US);\nconst MAX_UINT64_TIMESTAMP_MS = Number(UINT64_MAX / MS_TO_NS);\n\nexport const TimestampSchema = v.object({\n seconds: v.bigint(),\n nanos: v.optional(v.number(), 0),\n});\n\nexport const TimestampMsSchema = v.pipe(\n TimestampSchema,\n v.transform((value) => tsObjToMs(value)),\n);\n\nexport const OptionalTimestampMsSchema = v.pipe(\n v.optional(TimestampSchema),\n v.transform((value) => tsObjToMs(value)),\n);\n\nexport const OptionalNumberDefaultNullSchema = v.optional(v.nullable(v.number()), null);\n\nexport const OptionalNumberToIntOrZeroSchema = v.pipe(\n v.optional(v.nullable(v.pipe(v.number(), v.maxValue(PROTOBUF_UINT32_MAX))), null),\n v.transform((value) => toIntOrZero(value)),\n);\n\nexport const OptionalNumberToBpsOrZeroSchema = v.pipe(\n OptionalNumberDefaultNullSchema,\n v.transform((value) => toBpsOrZero(value)),\n);\n\nexport const TimestampNsMsSchema = v.pipe(\n v.bigint(),\n v.transform((value) => tsNsToMs(value)),\n);\n\nexport const BigIntStringSchema = v.pipe(\n v.bigint(),\n v.transform((value) => value.toString()),\n);\n\nexport const OptionalBigIntStringSchema = v.pipe(\n v.optional(v.bigint()),\n v.transform((value) => (value === undefined ? undefined : value.toString())),\n);\n\nexport const OptionalTimestampMsToNsInputSchema = v.optional(\n v.pipe(\n v.number(),\n v.integer(),\n v.minValue(0),\n v.maxValue(MAX_UINT64_TIMESTAMP_MS),\n v.transform((value) => BigInt(value) * MS_TO_NS),\n ),\n);\n\nexport const OptionalTimestampMsToUsInputSchema = v.optional(\n v.pipe(\n v.number(),\n v.integer(),\n v.minValue(0),\n v.maxValue(MAX_UINT64_TIMESTAMP_MS_US),\n v.transform((value) => BigInt(value) * MS_TO_US),\n ),\n);\n\nexport const OptionalTimestampSecondsInputSchema = v.optional(\n v.pipe(\n v.number(),\n v.integer(),\n v.minValue(0),\n v.maxValue(Number.MAX_SAFE_INTEGER),\n v.transform((value) => BigInt(value)),\n ),\n);\n\nexport const PublicIdSchema = v.pipe(\n v.bigint(),\n v.transform((value) => formatId(value)),\n);\n\nexport const OptionalPublicIdSchema = v.pipe(\n v.optional(v.bigint()),\n v.transform((value) => (value ? formatId(value) : undefined)),\n);\n\nconst TrimmedStringSchema = v.pipe(v.string(), v.trim());\n\nconst OptionalTrimmedStringSchema = v.optional(TrimmedStringSchema);\n\n/**\n * Creates a schema for required public id input.\n */\nexport function idInputSchema(fieldName: string) {\n return v.pipe(\n v.string(),\n v.trim(),\n v.minLength(1),\n v.transform((value) => idToBigInt(value, fieldName)),\n );\n}\n\n/**\n * Creates a schema for optional public id input.\n */\nexport function optionalIdInputSchema(fieldName: string) {\n return v.pipe(\n OptionalTrimmedStringSchema,\n v.transform((value) => (value ? idToBigInt(value, fieldName) : undefined)),\n );\n}\n\n/**\n * Creates a schema for optional subaccount id input.\n */\nexport function optionalSubaccountIdInputSchema() {\n return optionalIdInputSchema(\"subaccountId\");\n}\n\n/**\n * Creates a schema for optional uint64 decimal filter input.\n */\nexport function optionalUint64DecimalFilterSchema(fieldName: string) {\n return v.pipe(\n OptionalTrimmedStringSchema,\n v.transform((value) => parseOptionalUint64DecimalStrict(value, fieldName)),\n );\n}\n\n/**\n * Creates a schema for positive bigint-like input.\n */\nexport function positiveBigintLikeSchema(message: string) {\n return v.pipe(\n v.union([\n v.bigint(),\n v.pipe(\n TrimmedStringSchema,\n v.regex(/^\\d+$/),\n v.transform((value) => BigInt(value)),\n ),\n ]),\n v.check((value) => value > 0n, message),\n );\n}\n\nexport function bigintStringInputSchema(fieldName: string) {\n return v.pipe(\n TrimmedStringSchema,\n v.regex(/^\\d+$/, `${fieldName} must be a decimal integer`),\n v.transform((value) => BigInt(value)),\n );\n}\n\nexport function positiveBigintStringInputSchema(fieldName: string) {\n return v.pipe(\n bigintStringInputSchema(fieldName),\n v.check((value) => value > 0n, `${fieldName} must be greater than 0`),\n );\n}\n\nexport const JsonObjectSchema = v.custom<JsonObject>(\n (input): input is JsonObject =>\n typeof input === \"object\" && input !== null && !Array.isArray(input),\n);\n"],"mappings":";;;;;;AAOA,MAAM,cAAc,MAAM,OAAO;AACjC,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,6BAA6B,OAAO,aAAa,QAAQ;AAC/D,MAAM,0BAA0B,OAAO,aAAa,QAAQ;AAE5D,MAAa,kBAAkB,EAAE,OAAO;CACpC,SAAS,EAAE,OAAO;CAClB,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC;AACnC,CAAC;AAED,MAAa,oBAAoB,EAAE,KAC/B,iBACA,EAAE,WAAW,UAAU,UAAU,KAAK,CAAC,CAC3C;AAEA,MAAa,4BAA4B,EAAE,KACvC,EAAE,SAAS,eAAe,GAC1B,EAAE,WAAW,UAAU,UAAU,KAAK,CAAC,CAC3C;AAEA,MAAa,kCAAkC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI;AAEtF,MAAa,kCAAkC,EAAE,KAC7C,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,SAAS,mBAAmB,CAAC,CAAC,GAAG,IAAI,GAChF,EAAE,WAAW,UAAU,YAAY,KAAK,CAAC,CAC7C;AAE+C,EAAE,KAC7C,iCACA,EAAE,WAAW,UAAU,YAAY,KAAK,CAAC,CAC7C;AAEmC,EAAE,KACjC,EAAE,OAAO,GACT,EAAE,WAAW,UAAU,SAAS,KAAK,CAAC,CAC1C;AAEA,MAAa,qBAAqB,EAAE,KAChC,EAAE,OAAO,GACT,EAAE,WAAW,UAAU,MAAM,SAAS,CAAC,CAC3C;AAEA,MAAa,6BAA6B,EAAE,KACxC,EAAE,SAAS,EAAE,OAAO,CAAC,GACrB,EAAE,WAAW,UAAW,UAAU,KAAA,IAAY,KAAA,IAAY,MAAM,SAAS,CAAE,CAC/E;AAEkD,EAAE,SAChD,EAAE,KACE,EAAE,OAAO,GACT,EAAE,QAAQ,GACV,EAAE,SAAS,CAAC,GACZ,EAAE,SAAS,uBAAuB,GAClC,EAAE,WAAW,UAAU,OAAO,KAAK,IAAI,QAAQ,CACnD,CACJ;AAEA,MAAa,qCAAqC,EAAE,SAChD,EAAE,KACE,EAAE,OAAO,GACT,EAAE,QAAQ,GACV,EAAE,SAAS,CAAC,GACZ,EAAE,SAAS,0BAA0B,GACrC,EAAE,WAAW,UAAU,OAAO,KAAK,IAAI,QAAQ,CACnD,CACJ;AAEA,MAAa,sCAAsC,EAAE,SACjD,EAAE,KACE,EAAE,OAAO,GACT,EAAE,QAAQ,GACV,EAAE,SAAS,CAAC,GACZ,EAAE,SAAS,OAAO,gBAAgB,GAClC,EAAE,WAAW,UAAU,OAAO,KAAK,CAAC,CACxC,CACJ;AAEA,MAAa,iBAAiB,EAAE,KAC5B,EAAE,OAAO,GACT,EAAE,WAAW,UAAU,SAAS,KAAK,CAAC,CAC1C;AAEA,MAAa,yBAAyB,EAAE,KACpC,EAAE,SAAS,EAAE,OAAO,CAAC,GACrB,EAAE,WAAW,UAAW,QAAQ,SAAS,KAAK,IAAI,KAAA,CAAU,CAChE;AAEA,MAAM,sBAAsB,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC;AAEvD,MAAM,8BAA8B,EAAE,SAAS,mBAAmB;;;;AAKlE,SAAgB,cAAc,WAAmB;CAC7C,OAAO,EAAE,KACL,EAAE,OAAO,GACT,EAAE,KAAK,GACP,EAAE,UAAU,CAAC,GACb,EAAE,WAAW,UAAU,WAAW,OAAO,SAAS,CAAC,CACvD;AACJ;;;;AAKA,SAAgB,sBAAsB,WAAmB;CACrD,OAAO,EAAE,KACL,6BACA,EAAE,WAAW,UAAW,QAAQ,WAAW,OAAO,SAAS,IAAI,KAAA,CAAU,CAC7E;AACJ;;;;AAKA,SAAgB,kCAAkC;CAC9C,OAAO,sBAAsB,cAAc;AAC/C;;;;AAKA,SAAgB,kCAAkC,WAAmB;CACjE,OAAO,EAAE,KACL,6BACA,EAAE,WAAW,UAAU,iCAAiC,OAAO,SAAS,CAAC,CAC7E;AACJ;AAmBA,SAAgB,wBAAwB,WAAmB;CACvD,OAAO,EAAE,KACL,qBACA,EAAE,MAAM,SAAS,GAAG,UAAU,2BAA2B,GACzD,EAAE,WAAW,UAAU,OAAO,KAAK,CAAC,CACxC;AACJ;AAEA,SAAgB,gCAAgC,WAAmB;CAC/D,OAAO,EAAE,KACL,wBAAwB,SAAS,GACjC,EAAE,OAAO,UAAU,QAAQ,IAAI,GAAG,UAAU,wBAAwB,CACxE;AACJ;AAEA,MAAa,mBAAmB,EAAE,QAC7B,UACG,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,CAC3E"}
|
package/dist/utils/numbers.js
CHANGED
|
@@ -36,15 +36,6 @@ function parseOptionalPositiveBigIntLike(value) {
|
|
|
36
36
|
return parsed > 0n ? parsed : void 0;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Coerce optional UI number into non-negative bigint (e.g. caps, limits).
|
|
40
|
-
* @param value - The value to coerce.
|
|
41
|
-
* @returns The coerced bigint.
|
|
42
|
-
*/
|
|
43
|
-
function toBigIntOrZero(value) {
|
|
44
|
-
if (value == null || Number.isNaN(value)) return 0n;
|
|
45
|
-
return BigInt(Math.max(0, Math.trunc(value)));
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
39
|
* Coerce optional UI number into non-negative integer.
|
|
49
40
|
* @param value - The value to coerce.
|
|
50
41
|
* @returns The coerced integer.
|
|
@@ -63,6 +54,6 @@ function toBpsOrZero(value) {
|
|
|
63
54
|
return Math.max(0, Math.trunc(value * 100));
|
|
64
55
|
}
|
|
65
56
|
//#endregion
|
|
66
|
-
export { parseOptionalPositiveBigIntLike, parseOptionalPositiveIntLike, parseOptionalUint64DecimalStrict,
|
|
57
|
+
export { parseOptionalPositiveBigIntLike, parseOptionalPositiveIntLike, parseOptionalUint64DecimalStrict, toBpsOrZero, toIntOrZero };
|
|
67
58
|
|
|
68
59
|
//# sourceMappingURL=numbers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbers.js","names":[],"sources":["../../src/utils/numbers.ts"],"sourcesContent":["// Shared numeric helpers for gRPC/Connect clients.\n\n/**\n * Parse a required uint64 encoded as a base-10 string into bigint.\n * @param raw - The raw string to parse.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive integer.\n */\nexport function parseRequiredUint64Decimal(raw: string, fieldName: string): bigint {\n const s = (raw ?? \"\").trim();\n if (!s) throw new Error(`${fieldName} is required`);\n if (!/^[0-9]+$/.test(s)) throw new Error(`${fieldName} must be a positive integer`);\n return BigInt(s);\n}\n\n/**\n * Parse an optional uint64 encoded as a base-10 string into bigint, or undefined on invalid/empty.\n * @param raw - The raw string to parse.\n * @returns The parsed bigint, or undefined if the field is invalid or empty.\n */\nexport function parseOptionalUint64Decimal(raw: string | undefined): bigint | undefined {\n const s = (raw ?? \"\").trim();\n if (!s) return;\n // For optional filters, treat invalid input as \"unset\" rather than surfacing an error.\n if (!/^[0-9]+$/.test(s)) return;\n return BigInt(s);\n}\n\n/**\n * Parse an optional uint64 encoded as a base-10 string into bigint.\n * Empty values are omitted, but supplied invalid values are rejected.\n */\nexport function parseOptionalUint64DecimalStrict(\n raw: string | undefined,\n fieldName: string,\n): bigint | undefined {\n const s = (raw ?? \"\").trim();\n if (!s) return;\n if (!/^[0-9]+$/.test(s)) throw new Error(`${fieldName} must be a positive integer`);\n return BigInt(s);\n}\n\n/**\n * Parse an optional uint64-ish value (string/number/bigint) into bigint, or undefined on invalid/empty.\n * Accepts base-10 strings, numeric inputs (truncated), and bigint inputs.\n */\nexport function parseOptionalUint64Like(\n value: string | number | bigint | undefined | null,\n): bigint | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"bigint\") return value >= 0n ? value : undefined;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) return undefined;\n const n = Math.trunc(value);\n return n >= 0 ? BigInt(n) : undefined;\n }\n return parseOptionalUint64Decimal(value);\n}\n\n/**\n * Parse an optional positive integer-ish value (string/number) into a number, or undefined on invalid/empty.\n * Useful for common \"limit\" fields coming from UI inputs.\n */\nexport function parseOptionalPositiveIntLike(\n value: string | number | undefined | null,\n): number | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"string\") {\n const decimal = value.trim();\n if (!/^\\d+$/.test(decimal)) return undefined;\n const parsed = Number(decimal);\n return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined;\n }\n return Number.isSafeInteger(value) && value > 0 ? value : undefined;\n}\n\n/**\n * Parse a positive integer-like value without losing precision.\n * Decimal strings may exceed JavaScript's safe-integer range; number inputs may not.\n */\nexport function parseOptionalPositiveBigIntLike(\n value: string | number | undefined | null,\n): bigint | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"number\") {\n return Number.isSafeInteger(value) && value > 0 ? BigInt(value) : undefined;\n }\n const decimal = value.trim();\n if (!/^\\d+$/.test(decimal)) return undefined;\n const parsed = BigInt(decimal);\n return parsed > 0n ? parsed : undefined;\n}\n\n/**\n * Convert a decimal string into a scaled bigint (e.g. 18dp quantity, 6dp price).\n * @param raw - The raw string to parse.\n * @param scale - The scale of the number.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive number.\n */\nexport function decimalToScaledInt(raw: string, scale: number, fieldName: string): bigint {\n const s = (raw ?? \"\").trim();\n if (!s) throw new Error(`${fieldName} is required`);\n if (!/^[0-9]+(\\.[0-9]+)?$/.test(s)) throw new Error(`${fieldName} must be a positive number`);\n const [intPartRaw, fracRaw = \"\"] = s.split(\".\");\n if (fracRaw.length > scale) {\n throw new Error(`${fieldName} supports at most ${scale} decimal places`);\n }\n const intPart = intPartRaw?.replace(/^0+/, \"\") ?? \"0\";\n const fracPart = fracRaw.padEnd(scale, \"0\");\n const combined = `${intPart}${fracPart}`;\n return BigInt(combined ?? \"0\");\n}\n\n/**\n * Parse a quantity scaled to the given number of decimal places.\n * @param raw - The raw string to parse.\n * @param scale - The number of decimal places to scale to.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive number.\n */\nexport function parseQtyScaled(raw: string, scale: number, fieldName: string): bigint {\n return decimalToScaledInt(raw, scale, fieldName);\n}\n\n/**\n * Parse a price scaled to 6 decimal places.\n * @param raw - The raw string to parse.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive number.\n */\nexport function parsePriceTicks(raw: string, fieldName: string): bigint {\n return decimalToScaledInt(raw, 6, fieldName);\n}\n\n/**\n * Coerce optional UI number into non-negative
|
|
1
|
+
{"version":3,"file":"numbers.js","names":[],"sources":["../../src/utils/numbers.ts"],"sourcesContent":["// Shared numeric helpers for gRPC/Connect clients.\n\n/**\n * Parse a required uint64 encoded as a base-10 string into bigint.\n * @param raw - The raw string to parse.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive integer.\n */\nexport function parseRequiredUint64Decimal(raw: string, fieldName: string): bigint {\n const s = (raw ?? \"\").trim();\n if (!s) throw new Error(`${fieldName} is required`);\n if (!/^[0-9]+$/.test(s)) throw new Error(`${fieldName} must be a positive integer`);\n return BigInt(s);\n}\n\n/**\n * Parse an optional uint64 encoded as a base-10 string into bigint, or undefined on invalid/empty.\n * @param raw - The raw string to parse.\n * @returns The parsed bigint, or undefined if the field is invalid or empty.\n */\nexport function parseOptionalUint64Decimal(raw: string | undefined): bigint | undefined {\n const s = (raw ?? \"\").trim();\n if (!s) return;\n // For optional filters, treat invalid input as \"unset\" rather than surfacing an error.\n if (!/^[0-9]+$/.test(s)) return;\n return BigInt(s);\n}\n\n/**\n * Parse an optional uint64 encoded as a base-10 string into bigint.\n * Empty values are omitted, but supplied invalid values are rejected.\n */\nexport function parseOptionalUint64DecimalStrict(\n raw: string | undefined,\n fieldName: string,\n): bigint | undefined {\n const s = (raw ?? \"\").trim();\n if (!s) return;\n if (!/^[0-9]+$/.test(s)) throw new Error(`${fieldName} must be a positive integer`);\n return BigInt(s);\n}\n\n/**\n * Parse an optional uint64-ish value (string/number/bigint) into bigint, or undefined on invalid/empty.\n * Accepts base-10 strings, numeric inputs (truncated), and bigint inputs.\n */\nexport function parseOptionalUint64Like(\n value: string | number | bigint | undefined | null,\n): bigint | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"bigint\") return value >= 0n ? value : undefined;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) return undefined;\n const n = Math.trunc(value);\n return n >= 0 ? BigInt(n) : undefined;\n }\n return parseOptionalUint64Decimal(value);\n}\n\n/**\n * Parse an optional positive integer-ish value (string/number) into a number, or undefined on invalid/empty.\n * Useful for common \"limit\" fields coming from UI inputs.\n */\nexport function parseOptionalPositiveIntLike(\n value: string | number | undefined | null,\n): number | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"string\") {\n const decimal = value.trim();\n if (!/^\\d+$/.test(decimal)) return undefined;\n const parsed = Number(decimal);\n return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined;\n }\n return Number.isSafeInteger(value) && value > 0 ? value : undefined;\n}\n\n/**\n * Parse a positive integer-like value without losing precision.\n * Decimal strings may exceed JavaScript's safe-integer range; number inputs may not.\n */\nexport function parseOptionalPositiveBigIntLike(\n value: string | number | undefined | null,\n): bigint | undefined {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"number\") {\n return Number.isSafeInteger(value) && value > 0 ? BigInt(value) : undefined;\n }\n const decimal = value.trim();\n if (!/^\\d+$/.test(decimal)) return undefined;\n const parsed = BigInt(decimal);\n return parsed > 0n ? parsed : undefined;\n}\n\n/**\n * Convert a decimal string into a scaled bigint (e.g. 18dp quantity, 6dp price).\n * @param raw - The raw string to parse.\n * @param scale - The scale of the number.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive number.\n */\nexport function decimalToScaledInt(raw: string, scale: number, fieldName: string): bigint {\n const s = (raw ?? \"\").trim();\n if (!s) throw new Error(`${fieldName} is required`);\n if (!/^[0-9]+(\\.[0-9]+)?$/.test(s)) throw new Error(`${fieldName} must be a positive number`);\n const [intPartRaw, fracRaw = \"\"] = s.split(\".\");\n if (fracRaw.length > scale) {\n throw new Error(`${fieldName} supports at most ${scale} decimal places`);\n }\n const intPart = intPartRaw?.replace(/^0+/, \"\") ?? \"0\";\n const fracPart = fracRaw.padEnd(scale, \"0\");\n const combined = `${intPart}${fracPart}`;\n return BigInt(combined ?? \"0\");\n}\n\n/**\n * Parse a quantity scaled to the given number of decimal places.\n * @param raw - The raw string to parse.\n * @param scale - The number of decimal places to scale to.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive number.\n */\nexport function parseQtyScaled(raw: string, scale: number, fieldName: string): bigint {\n return decimalToScaledInt(raw, scale, fieldName);\n}\n\n/**\n * Parse a price scaled to 6 decimal places.\n * @param raw - The raw string to parse.\n * @param fieldName - The name of the field to parse.\n * @returns The parsed bigint.\n * @throws An error if the field is required and not provided.\n * @throws An error if the field is not a positive number.\n */\nexport function parsePriceTicks(raw: string, fieldName: string): bigint {\n return decimalToScaledInt(raw, 6, fieldName);\n}\n\n/**\n * Coerce optional UI number into non-negative integer.\n * @param value - The value to coerce.\n * @returns The coerced integer.\n */\nexport function toIntOrZero(value?: number | null): number {\n if (value == null || Number.isNaN(value)) return 0;\n return Math.max(0, Math.trunc(value));\n}\n\n/**\n * Coerce optional UI percentage into non-negative basis points integer.\n * @param value - The value to coerce.\n * @returns The coerced integer.\n */\nexport function toBpsOrZero(value?: number | null): number {\n if (value == null || Number.isNaN(value)) return 0;\n return Math.max(0, Math.trunc(value * 100));\n}\n\n/**\n * Convert basis points to percentage.\n * @param value - The value to convert.\n * @returns The converted percentage.\n */\nexport function bpsToPct(value?: number | null): number {\n if (value == null || Number.isNaN(value)) return 0;\n return value / 100;\n}\n"],"mappings":";;;;;AAkCA,SAAgB,iCACZ,KACA,WACkB;CAClB,MAAM,KAAK,OAAO,GAAA,CAAI,KAAK;CAC3B,IAAI,CAAC,GAAG;CACR,IAAI,CAAC,WAAW,KAAK,CAAC,GAAG,MAAM,IAAI,MAAM,GAAG,UAAU,4BAA4B;CAClF,OAAO,OAAO,CAAC;AACnB;;;;;AAuBA,SAAgB,6BACZ,OACkB;CAClB,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM,OAAO,KAAA;CAClD,IAAI,OAAO,UAAU,UAAU;EAC3B,MAAM,UAAU,MAAM,KAAK;EAC3B,IAAI,CAAC,QAAQ,KAAK,OAAO,GAAG,OAAO,KAAA;EACnC,MAAM,SAAS,OAAO,OAAO;EAC7B,OAAO,OAAO,cAAc,MAAM,KAAK,SAAS,IAAI,SAAS,KAAA;CACjE;CACA,OAAO,OAAO,cAAc,KAAK,KAAK,QAAQ,IAAI,QAAQ,KAAA;AAC9D;;;;;AAMA,SAAgB,gCACZ,OACkB;CAClB,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM,OAAO,KAAA;CAClD,IAAI,OAAO,UAAU,UACjB,OAAO,OAAO,cAAc,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,KAAA;CAEtE,MAAM,UAAU,MAAM,KAAK;CAC3B,IAAI,CAAC,QAAQ,KAAK,OAAO,GAAG,OAAO,KAAA;CACnC,MAAM,SAAS,OAAO,OAAO;CAC7B,OAAO,SAAS,KAAK,SAAS,KAAA;AAClC;;;;;;AAuDA,SAAgB,YAAY,OAA+B;CACvD,IAAI,SAAS,QAAQ,OAAO,MAAM,KAAK,GAAG,OAAO;CACjD,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACxC;;;;;;AAOA,SAAgB,YAAY,OAA+B;CACvD,IAAI,SAAS,QAAQ,OAAO,MAAM,KAAK,GAAG,OAAO;CACjD,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,GAAG,CAAC;AAC9C"}
|
package/package.json
CHANGED