@lightconexyz/lightcone-sdk 0.5.2 → 0.7.1
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/README.md +39 -5
- package/dist/auth/client.d.ts.map +1 -1
- package/dist/auth/client.js +2 -0
- package/dist/auth/client.js.map +1 -1
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +10 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/client.d.ts +43 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +70 -9
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +7 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +60 -6
- package/dist/context.js.map +1 -1
- package/dist/domain/admin/client.d.ts +21 -2
- package/dist/domain/admin/client.d.ts.map +1 -1
- package/dist/domain/admin/client.js +90 -4
- package/dist/domain/admin/client.js.map +1 -1
- package/dist/domain/admin/wire.d.ts +292 -7
- package/dist/domain/admin/wire.d.ts.map +1 -1
- package/dist/domain/admin/wire.js.map +1 -1
- package/dist/domain/faucet.d.ts +25 -0
- package/dist/domain/faucet.d.ts.map +1 -0
- package/dist/domain/faucet.js +3 -0
- package/dist/domain/faucet.js.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +3 -1
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/market/client.d.ts +23 -2
- package/dist/domain/market/client.d.ts.map +1 -1
- package/dist/domain/market/client.js +31 -1
- package/dist/domain/market/client.js.map +1 -1
- package/dist/domain/market/convert.d.ts +10 -0
- package/dist/domain/market/convert.d.ts.map +1 -1
- package/dist/domain/market/convert.js +44 -5
- package/dist/domain/market/convert.js.map +1 -1
- package/dist/domain/market/icon.d.ts +17 -0
- package/dist/domain/market/icon.d.ts.map +1 -0
- package/dist/domain/market/icon.js +25 -0
- package/dist/domain/market/icon.js.map +1 -0
- package/dist/domain/market/index.d.ts +21 -5
- package/dist/domain/market/index.d.ts.map +1 -1
- package/dist/domain/market/index.js +15 -1
- package/dist/domain/market/index.js.map +1 -1
- package/dist/domain/market/outcome.d.ts +4 -1
- package/dist/domain/market/outcome.d.ts.map +1 -1
- package/dist/domain/market/outcome.js +8 -7
- package/dist/domain/market/outcome.js.map +1 -1
- package/dist/domain/market/tokens.d.ts +55 -3
- package/dist/domain/market/tokens.d.ts.map +1 -1
- package/dist/domain/market/tokens.js +105 -9
- package/dist/domain/market/tokens.js.map +1 -1
- package/dist/domain/market/wire.d.ts +69 -10
- package/dist/domain/market/wire.d.ts.map +1 -1
- package/dist/domain/market/wire.js +5 -0
- package/dist/domain/market/wire.js.map +1 -1
- package/dist/domain/metrics/client.d.ts +66 -0
- package/dist/domain/metrics/client.d.ts.map +1 -0
- package/dist/domain/metrics/client.js +124 -0
- package/dist/domain/metrics/client.js.map +1 -0
- package/dist/domain/metrics/index.d.ts +3 -0
- package/dist/domain/metrics/index.d.ts.map +1 -0
- package/dist/domain/metrics/index.js +19 -0
- package/dist/domain/metrics/index.js.map +1 -0
- package/dist/domain/metrics/wire.d.ts +346 -0
- package/dist/domain/metrics/wire.d.ts.map +1 -0
- package/dist/domain/metrics/wire.js +3 -0
- package/dist/domain/metrics/wire.js.map +1 -0
- package/dist/domain/notification/client.d.ts +6 -0
- package/dist/domain/notification/client.d.ts.map +1 -1
- package/dist/domain/notification/client.js +10 -0
- package/dist/domain/notification/client.js.map +1 -1
- package/dist/domain/notification/index.d.ts +6 -2
- package/dist/domain/notification/index.d.ts.map +1 -1
- package/dist/domain/notification/index.js.map +1 -1
- package/dist/domain/order/client.d.ts +34 -6
- package/dist/domain/order/client.d.ts.map +1 -1
- package/dist/domain/order/client.js +88 -21
- package/dist/domain/order/client.js.map +1 -1
- package/dist/domain/order/convert.d.ts +5 -5
- package/dist/domain/order/convert.d.ts.map +1 -1
- package/dist/domain/order/convert.js +3 -3
- package/dist/domain/order/convert.js.map +1 -1
- package/dist/domain/order/index.d.ts +3 -2
- package/dist/domain/order/index.d.ts.map +1 -1
- package/dist/domain/order/index.js +11 -3
- package/dist/domain/order/index.js.map +1 -1
- package/dist/domain/order/state.d.ts +9 -7
- package/dist/domain/order/state.d.ts.map +1 -1
- package/dist/domain/order/state.js +81 -28
- package/dist/domain/order/state.js.map +1 -1
- package/dist/domain/orderbook/client.d.ts +6 -2
- package/dist/domain/orderbook/client.d.ts.map +1 -1
- package/dist/domain/orderbook/client.js +17 -0
- package/dist/domain/orderbook/client.js.map +1 -1
- package/dist/domain/orderbook/index.d.ts +1 -1
- package/dist/domain/orderbook/index.d.ts.map +1 -1
- package/dist/domain/orderbook/index.js +3 -8
- package/dist/domain/orderbook/index.js.map +1 -1
- package/dist/domain/orderbook/state.d.ts +30 -7
- package/dist/domain/orderbook/state.d.ts.map +1 -1
- package/dist/domain/orderbook/state.js +41 -12
- package/dist/domain/orderbook/state.js.map +1 -1
- package/dist/domain/position/builders.d.ts +11 -8
- package/dist/domain/position/builders.d.ts.map +1 -1
- package/dist/domain/position/builders.js +31 -25
- package/dist/domain/position/builders.js.map +1 -1
- package/dist/domain/position/client.d.ts +66 -5
- package/dist/domain/position/client.d.ts.map +1 -1
- package/dist/domain/position/client.js +101 -9
- package/dist/domain/position/client.js.map +1 -1
- package/dist/domain/position/index.d.ts +3 -2
- package/dist/domain/position/index.d.ts.map +1 -1
- package/dist/domain/position/index.js.map +1 -1
- package/dist/domain/price_history/client.d.ts +12 -1
- package/dist/domain/price_history/client.d.ts.map +1 -1
- package/dist/domain/price_history/client.js +14 -0
- package/dist/domain/price_history/client.js.map +1 -1
- package/dist/domain/price_history/wire.d.ts +27 -0
- package/dist/domain/price_history/wire.d.ts.map +1 -1
- package/dist/domain/price_history/wire.js.map +1 -1
- package/dist/domain/referral/client.d.ts +6 -0
- package/dist/domain/referral/client.d.ts.map +1 -1
- package/dist/domain/referral/client.js +22 -9
- package/dist/domain/referral/client.js.map +1 -1
- package/dist/domain/trade/client.d.ts +1 -0
- package/dist/domain/trade/client.d.ts.map +1 -1
- package/dist/domain/trade/client.js +14 -0
- package/dist/domain/trade/client.js.map +1 -1
- package/dist/domain/trade/wire.d.ts +6 -0
- package/dist/domain/trade/wire.d.ts.map +1 -1
- package/dist/domain/trade/wire.js.map +1 -1
- package/dist/env.d.ts +6 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +19 -9
- package/dist/env.js.map +1 -1
- package/dist/http/client.d.ts +9 -0
- package/dist/http/client.d.ts.map +1 -1
- package/dist/http/client.js +29 -11
- package/dist/http/client.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/prelude.d.ts +16 -7
- package/dist/prelude.d.ts.map +1 -1
- package/dist/prelude.js +10 -7
- package/dist/prelude.js.map +1 -1
- package/dist/privy/index.d.ts +1 -1
- package/dist/privy/index.js.map +1 -1
- package/dist/program/accounts.d.ts +12 -7
- package/dist/program/accounts.d.ts.map +1 -1
- package/dist/program/accounts.js +38 -16
- package/dist/program/accounts.js.map +1 -1
- package/dist/program/builder.d.ts +0 -4
- package/dist/program/builder.d.ts.map +1 -1
- package/dist/program/builder.js +0 -8
- package/dist/program/builder.js.map +1 -1
- package/dist/program/constants.d.ts +20 -7
- package/dist/program/constants.d.ts.map +1 -1
- package/dist/program/constants.js +21 -8
- package/dist/program/constants.js.map +1 -1
- package/dist/program/error.d.ts +25 -1
- package/dist/program/error.d.ts.map +1 -1
- package/dist/program/error.js +72 -0
- package/dist/program/error.js.map +1 -1
- package/dist/program/index.d.ts +7 -7
- package/dist/program/index.d.ts.map +1 -1
- package/dist/program/index.js +36 -9
- package/dist/program/index.js.map +1 -1
- package/dist/program/instructions.d.ts +184 -71
- package/dist/program/instructions.d.ts.map +1 -1
- package/dist/program/instructions.js +573 -140
- package/dist/program/instructions.js.map +1 -1
- package/dist/program/orders.js +2 -2
- package/dist/program/orders.js.map +1 -1
- package/dist/program/pda.d.ts +21 -3
- package/dist/program/pda.d.ts.map +1 -1
- package/dist/program/pda.js +43 -6
- package/dist/program/pda.js.map +1 -1
- package/dist/program/types.d.ts +139 -21
- package/dist/program/types.d.ts.map +1 -1
- package/dist/program/types.js.map +1 -1
- package/dist/program/utils.d.ts +31 -2
- package/dist/program/utils.d.ts.map +1 -1
- package/dist/program/utils.js +132 -5
- package/dist/program/utils.js.map +1 -1
- package/dist/rpc.d.ts +6 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +9 -7
- package/dist/rpc.js.map +1 -1
- package/dist/rpcFailover.d.ts +22 -0
- package/dist/rpcFailover.d.ts.map +1 -0
- package/dist/rpcFailover.js +71 -0
- package/dist/rpcFailover.js.map +1 -0
- package/dist/shared/fmt/constants.d.ts +5 -0
- package/dist/shared/fmt/constants.d.ts.map +1 -0
- package/dist/shared/fmt/constants.js +25 -0
- package/dist/shared/fmt/constants.js.map +1 -0
- package/dist/shared/fmt/decimal.d.ts +7 -0
- package/dist/shared/fmt/decimal.d.ts.map +1 -1
- package/dist/shared/fmt/decimal.js +32 -24
- package/dist/shared/fmt/decimal.js.map +1 -1
- package/dist/shared/fmt/num.d.ts +7 -0
- package/dist/shared/fmt/num.d.ts.map +1 -1
- package/dist/shared/fmt/num.js +27 -15
- package/dist/shared/fmt/num.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +2 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +19 -0
- package/dist/shared/types.js.map +1 -1
- package/dist/ws/client.node.js +1 -1
- package/dist/ws/client.node.js.map +1 -1
- package/dist/ws/index.d.ts +12 -1
- package/dist/ws/index.d.ts.map +1 -1
- package/dist/ws/index.js +20 -0
- package/dist/ws/index.js.map +1 -1
- package/dist/ws/subscriptions.d.ts +6 -0
- package/dist/ws/subscriptions.d.ts.map +1 -1
- package/dist/ws/subscriptions.js +4 -0
- package/dist/ws/subscriptions.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decimal.js","sourceRoot":"","sources":["../../../src/shared/fmt/decimal.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"decimal.js","sourceRoot":"","sources":["../../../src/shared/fmt/decimal.ts"],"names":[],"mappings":"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","sourcesContent":["import Decimal from \"decimal.js\";\nimport { displayDecimalsBy, isFormattedZero } from \"./constants\";\nimport { displayFormattedString } from \"./num\";\n\nfunction displayDecimals(value: Decimal): number {\n return displayDecimalsBy((threshold) => value.greaterThanOrEqualTo(new Decimal(threshold)));\n}\n\nexport function display(value: Decimal): string {\n const decimals = displayDecimals(value.abs());\n const formatted = value.toFixed(decimals);\n return isFormattedZero(formatted) ? \"0\" : displayFormattedString(formatted);\n}\n\nexport function abbrNumber(value: Decimal, digits = 2, showSign = true): string {\n const sign = showSign && value.isNegative() ? \"-\" : \"\";\n const abs = value.abs();\n\n const units: Array<[Decimal, string]> = [\n [new Decimal(\"1000000000000\"), \"t\"],\n [new Decimal(\"1000000000\"), \"b\"],\n [new Decimal(\"1000000\"), \"m\"],\n [new Decimal(\"1000\"), \"k\"],\n ];\n\n for (const [threshold, suffix] of units) {\n if (abs.greaterThanOrEqualTo(threshold)) {\n return `${sign}${abs.div(threshold).toFixed(digits)}${suffix}`;\n }\n }\n\n return `${sign}${abs.toFixed(digits)}`;\n}\n\n/**\n * Format a Decimal as a percentage with exactly 2 decimal places (truncated).\n *\n * When padding is true (default), always shows 2 decimal places (e.g. \"12.30\").\n * When false, trailing zeros are trimmed (e.g. \"12.3\").\n */\nexport function displayPct(value: Decimal, padding?: boolean): string {\n const pad = padding ?? true;\n const truncated = value.toDecimalPlaces(2, Decimal.ROUND_DOWN);\n\n if (pad) {\n return displayFormattedString(truncated.toFixed(2));\n } else {\n const formatted = truncated.toFixed(2);\n const trimmed = formatted.replace(/\\.?0+$/, \"\");\n return displayFormattedString(trimmed);\n }\n}\n\nexport function toBaseUnits(value: Decimal, decimals: number): bigint | null {\n const scaled = value.mul(new Decimal(10).pow(decimals));\n if (!scaled.isInteger() || scaled.isNegative()) {\n return null;\n }\n return BigInt(scaled.toFixed(0));\n}\n"]}
|
package/dist/shared/fmt/num.d.ts
CHANGED
|
@@ -2,5 +2,12 @@ export declare function displayFormattedString(input: string): string;
|
|
|
2
2
|
export declare function displayWithDecimals(value: number, decimals: number): string;
|
|
3
3
|
export declare function display(value: number): string;
|
|
4
4
|
export declare function toDecimalValue(value: bigint, decimals: number): number;
|
|
5
|
+
/**
|
|
6
|
+
* Format a number as a percentage with exactly 2 decimal places (truncated).
|
|
7
|
+
*
|
|
8
|
+
* When padding is true (default), always shows 2 decimal places (e.g. "12.30").
|
|
9
|
+
* When false, trailing zeros are trimmed (e.g. "12.3").
|
|
10
|
+
*/
|
|
11
|
+
export declare function displayPct(value: number, padding?: boolean): string;
|
|
5
12
|
export declare function fromDecimalValue(value: number, decimals: number): bigint;
|
|
6
13
|
//# sourceMappingURL=num.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"num.d.ts","sourceRoot":"","sources":["../../../src/shared/fmt/num.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"num.d.ts","sourceRoot":"","sources":["../../../src/shared/fmt/num.ts"],"names":[],"mappings":"AAEA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAa5D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3E;AAMD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAWnE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE"}
|
package/dist/shared/fmt/num.js
CHANGED
|
@@ -4,15 +4,17 @@ exports.displayFormattedString = displayFormattedString;
|
|
|
4
4
|
exports.displayWithDecimals = displayWithDecimals;
|
|
5
5
|
exports.display = display;
|
|
6
6
|
exports.toDecimalValue = toDecimalValue;
|
|
7
|
+
exports.displayPct = displayPct;
|
|
7
8
|
exports.fromDecimalValue = fromDecimalValue;
|
|
9
|
+
const constants_1 = require("./constants");
|
|
8
10
|
function displayFormattedString(input) {
|
|
9
11
|
const [rawInteger, rawFraction] = input.split(".");
|
|
10
12
|
const negative = rawInteger.startsWith("-");
|
|
11
13
|
const integer = negative ? rawInteger.slice(1) : rawInteger;
|
|
12
14
|
const withCommas = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
13
|
-
const fraction = rawFraction
|
|
15
|
+
const fraction = rawFraction;
|
|
14
16
|
const prefix = negative ? "-" : "";
|
|
15
|
-
if (
|
|
17
|
+
if (fraction === undefined) {
|
|
16
18
|
return `${prefix}${withCommas}`;
|
|
17
19
|
}
|
|
18
20
|
return `${prefix}${withCommas}.${fraction}`;
|
|
@@ -20,24 +22,34 @@ function displayFormattedString(input) {
|
|
|
20
22
|
function displayWithDecimals(value, decimals) {
|
|
21
23
|
return displayFormattedString(value.toFixed(decimals));
|
|
22
24
|
}
|
|
25
|
+
function displayDecimals(absValue) {
|
|
26
|
+
return (0, constants_1.displayDecimalsBy)((threshold) => absValue >= Number(threshold));
|
|
27
|
+
}
|
|
23
28
|
function display(value) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
if (Math.abs(value) >= 1) {
|
|
28
|
-
return displayWithDecimals(value, 2);
|
|
29
|
-
}
|
|
30
|
-
if (value === 0) {
|
|
31
|
-
return "0";
|
|
32
|
-
}
|
|
33
|
-
const abs = Math.abs(value);
|
|
34
|
-
const exponent = Math.floor(Math.log10(abs));
|
|
35
|
-
const decimals = Math.min(Math.max(Math.abs(exponent) + 2, 2), 8);
|
|
36
|
-
return displayWithDecimals(value, decimals);
|
|
29
|
+
const formatted = value.toFixed(displayDecimals(Math.abs(value)));
|
|
30
|
+
return (0, constants_1.isFormattedZero)(formatted) ? "0" : displayFormattedString(formatted);
|
|
37
31
|
}
|
|
38
32
|
function toDecimalValue(value, decimals) {
|
|
39
33
|
return Number(value) / 10 ** decimals;
|
|
40
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Format a number as a percentage with exactly 2 decimal places (truncated).
|
|
37
|
+
*
|
|
38
|
+
* When padding is true (default), always shows 2 decimal places (e.g. "12.30").
|
|
39
|
+
* When false, trailing zeros are trimmed (e.g. "12.3").
|
|
40
|
+
*/
|
|
41
|
+
function displayPct(value, padding) {
|
|
42
|
+
const pad = padding ?? true;
|
|
43
|
+
const truncated = Math.trunc(value * 100) / 100;
|
|
44
|
+
if (pad) {
|
|
45
|
+
return displayFormattedString(truncated.toFixed(2));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const formatted = truncated.toFixed(2);
|
|
49
|
+
const trimmed = formatted.replace(/\.?0+$/, "");
|
|
50
|
+
return displayFormattedString(trimmed);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
41
53
|
function fromDecimalValue(value, decimals) {
|
|
42
54
|
return BigInt(Math.trunc(value * 10 ** decimals));
|
|
43
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"num.js","sourceRoot":"","sources":["../../../src/shared/fmt/num.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"num.js","sourceRoot":"","sources":["../../../src/shared/fmt/num.ts"],"names":[],"mappings":";;AAEA,wDAaC;AAED,kDAEC;AAMD,0BAGC;AAED,wCAEC;AAQD,gCAWC;AAED,4CAEC;AAvDD,2CAAiE;AAEjE,SAAgB,sBAAsB,CAAC,KAAa;IAClD,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,WAAW,CAAC;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,GAAG,MAAM,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAa,EAAE,QAAgB;IACjE,OAAO,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,IAAA,6BAAiB,EAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAgB,OAAO,CAAC,KAAa;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,IAAA,2BAAe,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa,EAAE,QAAgB;IAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,KAAa,EAAE,OAAiB;IACzD,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAEhD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAa,EAAE,QAAgB;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import { displayDecimalsBy, isFormattedZero } from \"./constants\";\n\nexport function displayFormattedString(input: string): string {\n const [rawInteger, rawFraction] = input.split(\".\");\n const negative = rawInteger.startsWith(\"-\");\n const integer = negative ? rawInteger.slice(1) : rawInteger;\n const withCommas = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n const fraction = rawFraction;\n const prefix = negative ? \"-\" : \"\";\n\n if (fraction === undefined) {\n return `${prefix}${withCommas}`;\n }\n\n return `${prefix}${withCommas}.${fraction}`;\n}\n\nexport function displayWithDecimals(value: number, decimals: number): string {\n return displayFormattedString(value.toFixed(decimals));\n}\n\nfunction displayDecimals(absValue: number): number {\n return displayDecimalsBy((threshold) => absValue >= Number(threshold));\n}\n\nexport function display(value: number): string {\n const formatted = value.toFixed(displayDecimals(Math.abs(value)));\n return isFormattedZero(formatted) ? \"0\" : displayFormattedString(formatted);\n}\n\nexport function toDecimalValue(value: bigint, decimals: number): number {\n return Number(value) / 10 ** decimals;\n}\n\n/**\n * Format a number as a percentage with exactly 2 decimal places (truncated).\n *\n * When padding is true (default), always shows 2 decimal places (e.g. \"12.30\").\n * When false, trailing zeros are trimmed (e.g. \"12.3\").\n */\nexport function displayPct(value: number, padding?: boolean): string {\n const pad = padding ?? true;\n const truncated = Math.trunc(value * 100) / 100;\n\n if (pad) {\n return displayFormattedString(truncated.toFixed(2));\n } else {\n const formatted = truncated.toFixed(2);\n const trimmed = formatted.replace(/\\.?0+$/, \"\");\n return displayFormattedString(trimmed);\n }\n}\n\nexport function fromDecimalValue(value: number, decimals: number): bigint {\n return BigInt(Math.trunc(value * 10 ** decimals));\n}\n"]}
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { asOrderBookId, asPubkeyStr, DepositSource, deriveOrderbookId, parseSide, resolutionSeconds, sideLabel, OrderUpdateType, Resolution, Side, TimeInForce, TriggerResultStatus, TriggerStatus, TriggerType, TriggerUpdateType, type Branded, type OrderBookId, type PubkeyStr, type SubmitOrderRequest, } from "./types";
|
|
1
|
+
export { asOrderBookId, asPubkeyStr, DepositSource, deriveOrderbookId, parseResolution, parseSide, resolutionSeconds, sideLabel, OrderUpdateType, Resolution, Side, TimeInForce, TriggerResultStatus, TriggerStatus, TriggerType, TriggerUpdateType, type Branded, type OrderBookId, type PubkeyStr, type SubmitOrderRequest, } from "./types";
|
|
2
2
|
export { ApiRejectedDetails, isApiResponse, type ApiRejectedDetailsWire, type ApiResponse, } from "./api_response";
|
|
3
3
|
export { RejectionCode } from "./rejection";
|
|
4
4
|
export { formatDecimal, isZero, parseDecimal } from "./price";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,UAAU,EACV,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,kBAAkB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,oBAAoB,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,UAAU,EACV,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,kBAAkB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,oBAAoB,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
|
package/dist/shared/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isUserCancellation = exports.scalePriceSizeV1 = exports.ScalingError = exports.scalePriceSizeLegacy = exports.scalePriceSize = exports.alignPriceToTick = exports.parseDecimal = exports.isZero = exports.formatDecimal = exports.RejectionCode = exports.isApiResponse = exports.ApiRejectedDetails = exports.TriggerUpdateType = exports.TriggerType = exports.TriggerStatus = exports.TriggerResultStatus = exports.TimeInForce = exports.Side = exports.Resolution = exports.OrderUpdateType = exports.sideLabel = exports.resolutionSeconds = exports.parseSide = exports.deriveOrderbookId = exports.DepositSource = exports.asPubkeyStr = exports.asOrderBookId = void 0;
|
|
3
|
+
exports.isUserCancellation = exports.scalePriceSizeV1 = exports.ScalingError = exports.scalePriceSizeLegacy = exports.scalePriceSize = exports.alignPriceToTick = exports.parseDecimal = exports.isZero = exports.formatDecimal = exports.RejectionCode = exports.isApiResponse = exports.ApiRejectedDetails = exports.TriggerUpdateType = exports.TriggerType = exports.TriggerStatus = exports.TriggerResultStatus = exports.TimeInForce = exports.Side = exports.Resolution = exports.OrderUpdateType = exports.sideLabel = exports.resolutionSeconds = exports.parseSide = exports.parseResolution = exports.deriveOrderbookId = exports.DepositSource = exports.asPubkeyStr = exports.asOrderBookId = void 0;
|
|
4
4
|
var types_1 = require("./types");
|
|
5
5
|
Object.defineProperty(exports, "asOrderBookId", { enumerable: true, get: function () { return types_1.asOrderBookId; } });
|
|
6
6
|
Object.defineProperty(exports, "asPubkeyStr", { enumerable: true, get: function () { return types_1.asPubkeyStr; } });
|
|
7
7
|
Object.defineProperty(exports, "DepositSource", { enumerable: true, get: function () { return types_1.DepositSource; } });
|
|
8
8
|
Object.defineProperty(exports, "deriveOrderbookId", { enumerable: true, get: function () { return types_1.deriveOrderbookId; } });
|
|
9
|
+
Object.defineProperty(exports, "parseResolution", { enumerable: true, get: function () { return types_1.parseResolution; } });
|
|
9
10
|
Object.defineProperty(exports, "parseSide", { enumerable: true, get: function () { return types_1.parseSide; } });
|
|
10
11
|
Object.defineProperty(exports, "resolutionSeconds", { enumerable: true, get: function () { return types_1.resolutionSeconds; } });
|
|
11
12
|
Object.defineProperty(exports, "sideLabel", { enumerable: true, get: function () { return types_1.sideLabel; } });
|
package/dist/shared/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":";;;AAAA,iCAqBiB;AApBf,sGAAA,aAAa,OAAA;AACb,oGAAA,WAAW,OAAA;AACX,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,wGAAA,eAAe,OAAA;AACf,kGAAA,SAAS,OAAA;AACT,0GAAA,iBAAiB,OAAA;AACjB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA;AACf,mGAAA,UAAU,OAAA;AACV,6FAAA,IAAI,OAAA;AACJ,oGAAA,WAAW,OAAA;AACX,4GAAA,mBAAmB,OAAA;AACnB,sGAAA,aAAa,OAAA;AACb,oGAAA,WAAW,OAAA;AACX,0GAAA,iBAAiB,OAAA;AAOnB,+CAKwB;AAJtB,kHAAA,kBAAkB,OAAA;AAClB,6GAAA,aAAa,OAAA;AAKf,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,iCAA8D;AAArD,sGAAA,aAAa,OAAA;AAAE,+FAAA,MAAM,OAAA;AAAE,qGAAA,YAAY,OAAA;AAE5C,qCAQmB;AAPjB,2GAAA,gBAAgB,OAAA;AAChB,yGAAA,cAAc,OAAA;AACd,+GAAA,oBAAoB,OAAA;AACpB,uGAAA,YAAY,OAAA;AAMd,oCAAoC;AACpC,qCAAqE;AAA5D,2GAAA,oBAAoB,OAAoB;AAEjD,qCAImB;AAHjB,6GAAA,kBAAkB,OAAA","sourcesContent":["export {\n asOrderBookId,\n asPubkeyStr,\n DepositSource,\n deriveOrderbookId,\n parseResolution,\n parseSide,\n resolutionSeconds,\n sideLabel,\n OrderUpdateType,\n Resolution,\n Side,\n TimeInForce,\n TriggerResultStatus,\n TriggerStatus,\n TriggerType,\n TriggerUpdateType,\n type Branded,\n type OrderBookId,\n type PubkeyStr,\n type SubmitOrderRequest,\n} from \"./types\";\n\nexport {\n ApiRejectedDetails,\n isApiResponse,\n type ApiRejectedDetailsWire,\n type ApiResponse,\n} from \"./api_response\";\n\nexport { RejectionCode } from \"./rejection\";\n\nexport { formatDecimal, isZero, parseDecimal } from \"./price\";\n\nexport {\n alignPriceToTick,\n scalePriceSize,\n scalePriceSizeLegacy,\n ScalingError,\n type LegacyScaledAmounts,\n type OrderbookDecimals,\n type ScaledAmounts,\n} from \"./scaling\";\n\n// Backward-compatible name from v1.\nexport { scalePriceSizeLegacy as scalePriceSizeV1 } from \"./scaling\";\n\nexport {\n isUserCancellation,\n type ExternalSigner,\n type SigningStrategy,\n} from \"./signing\";\n"]}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -57,6 +57,7 @@ export declare enum Resolution {
|
|
|
57
57
|
Hour4 = "4h",
|
|
58
58
|
Day1 = "1d"
|
|
59
59
|
}
|
|
60
|
+
export declare function parseResolution(value: string): Resolution;
|
|
60
61
|
export declare function resolutionSeconds(resolution: Resolution): number;
|
|
61
62
|
export declare function deriveOrderbookId(baseToken: string, quoteToken: string): OrderBookId;
|
|
62
63
|
export interface SubmitOrderRequest {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAErD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAExD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpD;AAED,oBAAY,IAAI;IACd,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAEpD;AAED,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,oBAAY,WAAW;IACrB,UAAU,OAAO;IACjB,QAAQ,OAAO;CAChB;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,YAAY,iBAAiB;CAC9B;AAED,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,mBAAmB;IAC7B,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAED,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,UAAU;IACpB,OAAO,OAAO;IACd,OAAO,OAAO;IACd,QAAQ,QAAQ;IAChB,KAAK,OAAO;IACZ,KAAK,OAAO;IACZ,IAAI,OAAO;CACZ;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAehE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAEpF;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAErD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAExD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpD;AAED,oBAAY,IAAI;IACd,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAEpD;AAED,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,oBAAY,WAAW;IACrB,UAAU,OAAO;IACjB,QAAQ,OAAO;CAChB;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,YAAY,iBAAiB;CAC9B;AAED,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,mBAAmB;IAC7B,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAED,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,UAAU;IACpB,OAAO,OAAO;IACd,OAAO,OAAO;IACd,QAAQ,QAAQ;IAChB,KAAK,OAAO;IACZ,KAAK,OAAO;IACZ,IAAI,OAAO;CACZ;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAiBzD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAehE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAEpF;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC"}
|
package/dist/shared/types.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.asOrderBookId = asOrderBookId;
|
|
|
5
5
|
exports.asPubkeyStr = asPubkeyStr;
|
|
6
6
|
exports.parseSide = parseSide;
|
|
7
7
|
exports.sideLabel = sideLabel;
|
|
8
|
+
exports.parseResolution = parseResolution;
|
|
8
9
|
exports.resolutionSeconds = resolutionSeconds;
|
|
9
10
|
exports.deriveOrderbookId = deriveOrderbookId;
|
|
10
11
|
const error_1 = require("../error");
|
|
@@ -83,6 +84,24 @@ var Resolution;
|
|
|
83
84
|
Resolution["Hour4"] = "4h";
|
|
84
85
|
Resolution["Day1"] = "1d";
|
|
85
86
|
})(Resolution || (exports.Resolution = Resolution = {}));
|
|
87
|
+
function parseResolution(value) {
|
|
88
|
+
switch (value) {
|
|
89
|
+
case "1m":
|
|
90
|
+
return Resolution.Minute1;
|
|
91
|
+
case "5m":
|
|
92
|
+
return Resolution.Minute5;
|
|
93
|
+
case "15m":
|
|
94
|
+
return Resolution.Minute15;
|
|
95
|
+
case "1h":
|
|
96
|
+
return Resolution.Hour1;
|
|
97
|
+
case "4h":
|
|
98
|
+
return Resolution.Hour4;
|
|
99
|
+
case "1d":
|
|
100
|
+
return Resolution.Day1;
|
|
101
|
+
default:
|
|
102
|
+
throw error_1.SdkError.validation(`Invalid resolution: ${value}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
86
105
|
function resolutionSeconds(resolution) {
|
|
87
106
|
switch (resolution) {
|
|
88
107
|
case Resolution.Minute1:
|
package/dist/shared/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":";;;AAOA,sCAEC;AAED,kCAEC;AAOD,8BAIC;AAED,8BAEC;AAwDD,8CAeC;AAED,8CAEC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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","sourcesContent":["import { SdkError } from \"../error\";\n\nexport type Branded<T, Brand extends string> = T & { readonly __brand: Brand };\n\nexport type OrderBookId = Branded<string, \"OrderBookId\">;\nexport type PubkeyStr = Branded<string, \"PubkeyStr\">;\n\nexport function asOrderBookId(value: string): OrderBookId {\n return value as OrderBookId;\n}\n\nexport function asPubkeyStr(value: string): PubkeyStr {\n return value as PubkeyStr;\n}\n\nexport enum Side {\n Bid = \"bid\",\n Ask = \"ask\",\n}\n\nexport function parseSide(value: string): Side {\n if (value === \"bid\" || value === \"buy\") return Side.Bid;\n if (value === \"ask\" || value === \"sell\") return Side.Ask;\n throw SdkError.validation(`Invalid side: ${value}`);\n}\n\nexport function sideLabel(side: Side): \"Buy\" | \"Sell\" {\n return side === Side.Bid ? \"Buy\" : \"Sell\";\n}\n\nexport enum TimeInForce {\n Gtc = \"GTC\",\n Ioc = \"IOC\",\n Fok = \"FOK\",\n Alo = \"ALO\",\n}\n\nexport enum TriggerType {\n TakeProfit = \"TP\",\n StopLoss = \"SL\",\n}\n\nexport enum TriggerStatus {\n Created = \"created\",\n Triggered = \"triggered\",\n Failed = \"failed\",\n Expired = \"expired\",\n Invalidated = \"invalidated\",\n}\n\nexport enum OrderUpdateType {\n Placement = \"PLACEMENT\",\n Update = \"UPDATE\",\n Cancellation = \"CANCELLATION\",\n}\n\nexport enum TriggerUpdateType {\n Created = \"CREATED\",\n Triggered = \"TRIGGERED\",\n Failed = \"FAILED\",\n Expired = \"EXPIRED\",\n Invalidated = \"INVALIDATED\",\n}\n\nexport enum TriggerResultStatus {\n Filled = \"filled\",\n Accepted = \"accepted\",\n Rejected = \"rejected\",\n}\n\nexport enum DepositSource {\n Global = \"global\",\n Market = \"market\",\n}\n\nexport enum Resolution {\n Minute1 = \"1m\",\n Minute5 = \"5m\",\n Minute15 = \"15m\",\n Hour1 = \"1h\",\n Hour4 = \"4h\",\n Day1 = \"1d\",\n}\n\nexport function parseResolution(value: string): Resolution {\n switch (value) {\n case \"1m\":\n return Resolution.Minute1;\n case \"5m\":\n return Resolution.Minute5;\n case \"15m\":\n return Resolution.Minute15;\n case \"1h\":\n return Resolution.Hour1;\n case \"4h\":\n return Resolution.Hour4;\n case \"1d\":\n return Resolution.Day1;\n default:\n throw SdkError.validation(`Invalid resolution: ${value}`);\n }\n}\n\nexport function resolutionSeconds(resolution: Resolution): number {\n switch (resolution) {\n case Resolution.Minute1:\n return 60;\n case Resolution.Minute5:\n return 300;\n case Resolution.Minute15:\n return 900;\n case Resolution.Hour1:\n return 3600;\n case Resolution.Hour4:\n return 14400;\n case Resolution.Day1:\n return 86400;\n }\n}\n\nexport function deriveOrderbookId(baseToken: string, quoteToken: string): OrderBookId {\n return `${baseToken.slice(0, 8)}_${quoteToken.slice(0, 8)}` as OrderBookId;\n}\n\nexport interface SubmitOrderRequest {\n maker: string;\n nonce: number;\n salt: number;\n market_pubkey: string;\n base_token: string;\n quote_token: string;\n side: number;\n /** u64 amount — validated to fit in Number.MAX_SAFE_INTEGER at construction time */\n amount_in: number;\n /** u64 amount — validated to fit in Number.MAX_SAFE_INTEGER at construction time */\n amount_out: number;\n expiration: number;\n signature: string;\n orderbook_id: string;\n tif?: TimeInForce;\n trigger_price?: number;\n trigger_type?: TriggerType;\n deposit_source?: DepositSource;\n}\n"]}
|
package/dist/ws/client.node.js
CHANGED
|
@@ -108,7 +108,7 @@ class WsClient {
|
|
|
108
108
|
const headers = {};
|
|
109
109
|
const token = this.authTokenRef ? await this.authTokenRef() : undefined;
|
|
110
110
|
if (token) {
|
|
111
|
-
headers.Cookie = `
|
|
111
|
+
headers.Cookie = `lightcone-token=${token}`;
|
|
112
112
|
}
|
|
113
113
|
const socket = new ws_1.default(this.config.url, { headers });
|
|
114
114
|
this.socket = socket;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.node.js","sourceRoot":"","sources":["../../src/ws/client.node.ts"],"names":[],"mappings":"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","sourcesContent":["import WebSocket from \"ws\";\nimport {\n parseMessageIn,\n ping,\n readyStateFrom,\n ReadyState,\n type MessageIn,\n type MessageOut,\n type WsConfig,\n type WsEvent,\n WS_DEFAULT_CONFIG,\n} from \"./index\";\nimport {\n subscriptionKey,\n unsubscribeMatches,\n type SubscribeParams,\n type UnsubscribeParams,\n} from \"./subscriptions\";\nimport type { IWsClient } from \"./types\";\n\nexport class WsClient implements IWsClient {\n private readonly config: WsConfig;\n private readonly authTokenRef?: () => Promise<string | undefined>;\n private socket?: WebSocket;\n private reconnectAttempts = 0;\n private userInitiatedClose = false;\n private pingTimer?: ReturnType<typeof setInterval>;\n private pongTimer?: ReturnType<typeof setTimeout>;\n private callbacks: Array<(event: WsEvent) => void> = [];\n private readonly activeSubscriptions: SubscribeParams[] = [];\n private readonly pendingMessages: MessageOut[] = [];\n\n constructor(config?: Partial<WsConfig>, authTokenRef?: () => Promise<string | undefined>) {\n this.config = { ...WS_DEFAULT_CONFIG, ...config };\n this.authTokenRef = authTokenRef;\n }\n\n async connect(): Promise<void> {\n if (this.socket && this.readyState() === ReadyState.Open) {\n return;\n }\n\n await this.connectInternal();\n }\n\n async disconnect(): Promise<void> {\n if (!this.socket) {\n return;\n }\n\n this.stopHeartbeat();\n\n const socket = this.socket;\n this.socket = undefined;\n this.userInitiatedClose = true;\n\n await new Promise<void>((resolve) => {\n socket.once(\"close\", () => {\n resolve();\n });\n socket.close(1000, \"Client disconnect\");\n });\n }\n\n send(message: MessageOut): void {\n this.trackMessage(message);\n\n if (!this.socket || this.readyState() !== ReadyState.Open) {\n this.pendingMessages.push(message);\n return;\n }\n\n this.socket.send(JSON.stringify(message));\n }\n\n subscribe(params: SubscribeParams): void {\n this.send({ method: \"subscribe\", params });\n }\n\n unsubscribe(params: UnsubscribeParams): void {\n this.send({ method: \"unsubscribe\", params });\n }\n\n isConnected(): boolean {\n return this.readyState() === ReadyState.Open;\n }\n\n readyState(): ReadyState {\n if (!this.socket) {\n return ReadyState.Closed;\n }\n return readyStateFrom(this.socket.readyState);\n }\n\n async restartConnection(): Promise<void> {\n if (this.socket && this.readyState() === ReadyState.Connecting) {\n return;\n }\n\n if (this.socket) {\n this.stopHeartbeat();\n const socket = this.socket;\n this.socket = undefined;\n this.userInitiatedClose = true;\n await new Promise<void>((resolve) => {\n socket.once(\"close\", () => resolve());\n socket.close(1000, \"Restart connection\");\n });\n }\n\n this.reconnectAttempts = 0;\n await this.connectInternal();\n }\n\n clearAuthedSubscriptions(): void {\n const next = this.activeSubscriptions.filter((params) => params.type !== \"user\");\n this.activeSubscriptions.length = 0;\n this.activeSubscriptions.push(...next);\n }\n\n on(callback: (event: WsEvent) => void): () => void {\n this.callbacks.push(callback);\n return () => {\n this.callbacks = this.callbacks.filter((cb) => cb !== callback);\n };\n }\n\n private emit(event: WsEvent): void {\n for (const callback of this.callbacks) {\n try {\n callback(event);\n } catch (err) {\n console.warn(\"WsClient: listener threw\", err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n private async connectInternal(): Promise<void> {\n const headers: Record<string, string> = {};\n const token = this.authTokenRef ? await this.authTokenRef() : undefined;\n if (token) {\n headers.Cookie = `auth_token=${token}`;\n }\n\n const socket = new WebSocket(this.config.url, { headers });\n this.socket = socket;\n\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const connectionPromise = new Promise<void>((resolve, reject) => {\n socket.once(\"open\", () => {\n clearTimeout(timeoutId);\n this.reconnectAttempts = 0;\n this.startHeartbeat();\n this.flushPendingMessages();\n this.resubscribeAll();\n this.emit({ type: \"Connected\" });\n resolve();\n });\n\n socket.once(\"error\", (error) => {\n clearTimeout(timeoutId);\n reject(error);\n });\n\n socket.on(\"message\", (raw) => {\n this.handleIncoming(raw.toString());\n });\n\n socket.on(\"close\", (code, reason) => {\n const manualClose = this.userInitiatedClose;\n this.userInitiatedClose = false;\n this.stopHeartbeat();\n this.emit({ type: \"Disconnected\", code, reason: reason.toString() });\n if (!manualClose) {\n this.handleClose(code);\n }\n });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n socket.close();\n reject(new Error(\"WebSocket connection timeout (30s)\"));\n }, 30_000);\n });\n\n await Promise.race([connectionPromise, timeoutPromise]);\n }\n\n private handleIncoming(raw: string): void {\n let message: MessageIn;\n\n try {\n message = parseMessageIn(raw);\n } catch (error) {\n this.emit({\n type: \"Error\",\n error: `Deserialization error: ${error instanceof Error ? error.message : String(error)}`,\n });\n return;\n }\n\n if (message.type === \"pong\") {\n this.reconnectAttempts = 0;\n this.clearPongTimeout();\n }\n\n this.emit({ type: \"Message\", message });\n }\n\n private handleClose(code: number): void {\n if (!this.config.reconnect) {\n return;\n }\n\n if (code === 1000) {\n return;\n }\n\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {\n this.emit({ type: \"MaxReconnectReached\" });\n return;\n }\n\n this.reconnectAttempts += 1;\n const isRateLimited = code === 1008;\n const backoffMs = this.backoffDelayMs(this.reconnectAttempts, isRateLimited);\n\n setTimeout(() => {\n void this.connectInternal().catch((error) => {\n this.emit({\n type: \"Error\",\n error: `Connection failed: ${error instanceof Error ? error.message : String(error)}`,\n });\n this.handleClose(1011);\n });\n }, backoffMs);\n }\n\n private backoffDelayMs(attempt: number, isRateLimited: boolean): number {\n const exponent = Math.min(Math.max(0, attempt - 1), 10);\n const base = this.config.baseReconnectDelayMs * 2 ** exponent;\n const jitterMax = isRateLimited ? 1000 : 500;\n const jitter = Math.floor(Math.random() * (jitterMax + 1));\n const cap = isRateLimited ? 300_000 : 60_000;\n return Math.min(base + jitter, cap);\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n\n this.pingTimer = setInterval(() => {\n this.send(ping());\n this.armPongTimeout();\n }, this.config.pingIntervalMs);\n }\n\n private stopHeartbeat(): void {\n if (this.pingTimer) {\n clearInterval(this.pingTimer);\n this.pingTimer = undefined;\n }\n if (this.pongTimer) {\n clearTimeout(this.pongTimer);\n this.pongTimer = undefined;\n }\n }\n\n private armPongTimeout(): void {\n if (this.pongTimer) {\n clearTimeout(this.pongTimer);\n }\n\n this.pongTimer = setTimeout(() => {\n if (this.socket && this.readyState() === ReadyState.Open) {\n this.socket.close(4000, \"Pong timeout\");\n }\n }, this.config.pongTimeoutMs);\n }\n\n private clearPongTimeout(): void {\n if (this.pongTimer) {\n clearTimeout(this.pongTimer);\n this.pongTimer = undefined;\n }\n }\n\n private trackMessage(message: MessageOut): void {\n if (message.method === \"subscribe\") {\n const key = subscriptionKey(message.params);\n const existing = this.activeSubscriptions.find((params) => subscriptionKey(params) === key);\n if (!existing) {\n this.activeSubscriptions.push(message.params);\n }\n return;\n }\n\n if (message.method === \"unsubscribe\") {\n const next = this.activeSubscriptions.filter(\n (params) => !unsubscribeMatches(params, message.params)\n );\n this.activeSubscriptions.length = 0;\n this.activeSubscriptions.push(...next);\n }\n }\n\n private flushPendingMessages(): void {\n if (!this.socket || this.readyState() !== ReadyState.Open) {\n return;\n }\n\n while (this.pendingMessages.length > 0) {\n const message = this.pendingMessages.shift();\n if (!message) {\n continue;\n }\n this.socket.send(JSON.stringify(message));\n }\n }\n\n private resubscribeAll(): void {\n for (const params of this.activeSubscriptions) {\n this.pendingMessages.push({ method: \"subscribe\", params });\n }\n this.flushPendingMessages();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"client.node.js","sourceRoot":"","sources":["../../src/ws/client.node.ts"],"names":[],"mappings":"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","sourcesContent":["import WebSocket from \"ws\";\nimport {\n parseMessageIn,\n ping,\n readyStateFrom,\n ReadyState,\n type MessageIn,\n type MessageOut,\n type WsConfig,\n type WsEvent,\n WS_DEFAULT_CONFIG,\n} from \"./index\";\nimport {\n subscriptionKey,\n unsubscribeMatches,\n type SubscribeParams,\n type UnsubscribeParams,\n} from \"./subscriptions\";\nimport type { IWsClient } from \"./types\";\n\nexport class WsClient implements IWsClient {\n private readonly config: WsConfig;\n private readonly authTokenRef?: () => Promise<string | undefined>;\n private socket?: WebSocket;\n private reconnectAttempts = 0;\n private userInitiatedClose = false;\n private pingTimer?: ReturnType<typeof setInterval>;\n private pongTimer?: ReturnType<typeof setTimeout>;\n private callbacks: Array<(event: WsEvent) => void> = [];\n private readonly activeSubscriptions: SubscribeParams[] = [];\n private readonly pendingMessages: MessageOut[] = [];\n\n constructor(config?: Partial<WsConfig>, authTokenRef?: () => Promise<string | undefined>) {\n this.config = { ...WS_DEFAULT_CONFIG, ...config };\n this.authTokenRef = authTokenRef;\n }\n\n async connect(): Promise<void> {\n if (this.socket && this.readyState() === ReadyState.Open) {\n return;\n }\n\n await this.connectInternal();\n }\n\n async disconnect(): Promise<void> {\n if (!this.socket) {\n return;\n }\n\n this.stopHeartbeat();\n\n const socket = this.socket;\n this.socket = undefined;\n this.userInitiatedClose = true;\n\n await new Promise<void>((resolve) => {\n socket.once(\"close\", () => {\n resolve();\n });\n socket.close(1000, \"Client disconnect\");\n });\n }\n\n send(message: MessageOut): void {\n this.trackMessage(message);\n\n if (!this.socket || this.readyState() !== ReadyState.Open) {\n this.pendingMessages.push(message);\n return;\n }\n\n this.socket.send(JSON.stringify(message));\n }\n\n subscribe(params: SubscribeParams): void {\n this.send({ method: \"subscribe\", params });\n }\n\n unsubscribe(params: UnsubscribeParams): void {\n this.send({ method: \"unsubscribe\", params });\n }\n\n isConnected(): boolean {\n return this.readyState() === ReadyState.Open;\n }\n\n readyState(): ReadyState {\n if (!this.socket) {\n return ReadyState.Closed;\n }\n return readyStateFrom(this.socket.readyState);\n }\n\n async restartConnection(): Promise<void> {\n if (this.socket && this.readyState() === ReadyState.Connecting) {\n return;\n }\n\n if (this.socket) {\n this.stopHeartbeat();\n const socket = this.socket;\n this.socket = undefined;\n this.userInitiatedClose = true;\n await new Promise<void>((resolve) => {\n socket.once(\"close\", () => resolve());\n socket.close(1000, \"Restart connection\");\n });\n }\n\n this.reconnectAttempts = 0;\n await this.connectInternal();\n }\n\n clearAuthedSubscriptions(): void {\n const next = this.activeSubscriptions.filter((params) => params.type !== \"user\");\n this.activeSubscriptions.length = 0;\n this.activeSubscriptions.push(...next);\n }\n\n on(callback: (event: WsEvent) => void): () => void {\n this.callbacks.push(callback);\n return () => {\n this.callbacks = this.callbacks.filter((cb) => cb !== callback);\n };\n }\n\n private emit(event: WsEvent): void {\n for (const callback of this.callbacks) {\n try {\n callback(event);\n } catch (err) {\n console.warn(\"WsClient: listener threw\", err instanceof Error ? err.message : String(err));\n }\n }\n }\n\n private async connectInternal(): Promise<void> {\n const headers: Record<string, string> = {};\n const token = this.authTokenRef ? await this.authTokenRef() : undefined;\n if (token) {\n headers.Cookie = `lightcone-token=${token}`;\n }\n\n const socket = new WebSocket(this.config.url, { headers });\n this.socket = socket;\n\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const connectionPromise = new Promise<void>((resolve, reject) => {\n socket.once(\"open\", () => {\n clearTimeout(timeoutId);\n this.reconnectAttempts = 0;\n this.startHeartbeat();\n this.flushPendingMessages();\n this.resubscribeAll();\n this.emit({ type: \"Connected\" });\n resolve();\n });\n\n socket.once(\"error\", (error) => {\n clearTimeout(timeoutId);\n reject(error);\n });\n\n socket.on(\"message\", (raw) => {\n this.handleIncoming(raw.toString());\n });\n\n socket.on(\"close\", (code, reason) => {\n const manualClose = this.userInitiatedClose;\n this.userInitiatedClose = false;\n this.stopHeartbeat();\n this.emit({ type: \"Disconnected\", code, reason: reason.toString() });\n if (!manualClose) {\n this.handleClose(code);\n }\n });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n socket.close();\n reject(new Error(\"WebSocket connection timeout (30s)\"));\n }, 30_000);\n });\n\n await Promise.race([connectionPromise, timeoutPromise]);\n }\n\n private handleIncoming(raw: string): void {\n let message: MessageIn;\n\n try {\n message = parseMessageIn(raw);\n } catch (error) {\n this.emit({\n type: \"Error\",\n error: `Deserialization error: ${error instanceof Error ? error.message : String(error)}`,\n });\n return;\n }\n\n if (message.type === \"pong\") {\n this.reconnectAttempts = 0;\n this.clearPongTimeout();\n }\n\n this.emit({ type: \"Message\", message });\n }\n\n private handleClose(code: number): void {\n if (!this.config.reconnect) {\n return;\n }\n\n if (code === 1000) {\n return;\n }\n\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {\n this.emit({ type: \"MaxReconnectReached\" });\n return;\n }\n\n this.reconnectAttempts += 1;\n const isRateLimited = code === 1008;\n const backoffMs = this.backoffDelayMs(this.reconnectAttempts, isRateLimited);\n\n setTimeout(() => {\n void this.connectInternal().catch((error) => {\n this.emit({\n type: \"Error\",\n error: `Connection failed: ${error instanceof Error ? error.message : String(error)}`,\n });\n this.handleClose(1011);\n });\n }, backoffMs);\n }\n\n private backoffDelayMs(attempt: number, isRateLimited: boolean): number {\n const exponent = Math.min(Math.max(0, attempt - 1), 10);\n const base = this.config.baseReconnectDelayMs * 2 ** exponent;\n const jitterMax = isRateLimited ? 1000 : 500;\n const jitter = Math.floor(Math.random() * (jitterMax + 1));\n const cap = isRateLimited ? 300_000 : 60_000;\n return Math.min(base + jitter, cap);\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n\n this.pingTimer = setInterval(() => {\n this.send(ping());\n this.armPongTimeout();\n }, this.config.pingIntervalMs);\n }\n\n private stopHeartbeat(): void {\n if (this.pingTimer) {\n clearInterval(this.pingTimer);\n this.pingTimer = undefined;\n }\n if (this.pongTimer) {\n clearTimeout(this.pongTimer);\n this.pongTimer = undefined;\n }\n }\n\n private armPongTimeout(): void {\n if (this.pongTimer) {\n clearTimeout(this.pongTimer);\n }\n\n this.pongTimer = setTimeout(() => {\n if (this.socket && this.readyState() === ReadyState.Open) {\n this.socket.close(4000, \"Pong timeout\");\n }\n }, this.config.pongTimeoutMs);\n }\n\n private clearPongTimeout(): void {\n if (this.pongTimer) {\n clearTimeout(this.pongTimer);\n this.pongTimer = undefined;\n }\n }\n\n private trackMessage(message: MessageOut): void {\n if (message.method === \"subscribe\") {\n const key = subscriptionKey(message.params);\n const existing = this.activeSubscriptions.find((params) => subscriptionKey(params) === key);\n if (!existing) {\n this.activeSubscriptions.push(message.params);\n }\n return;\n }\n\n if (message.method === \"unsubscribe\") {\n const next = this.activeSubscriptions.filter(\n (params) => !unsubscribeMatches(params, message.params)\n );\n this.activeSubscriptions.length = 0;\n this.activeSubscriptions.push(...next);\n }\n }\n\n private flushPendingMessages(): void {\n if (!this.socket || this.readyState() !== ReadyState.Open) {\n return;\n }\n\n while (this.pendingMessages.length > 0) {\n const message = this.pendingMessages.shift();\n if (!message) {\n continue;\n }\n this.socket.send(JSON.stringify(message));\n }\n }\n\n private resubscribeAll(): void {\n for (const params of this.activeSubscriptions) {\n this.pendingMessages.push({ method: \"subscribe\", params });\n }\n this.flushPendingMessages();\n }\n}\n"]}
|
package/dist/ws/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MarketEvent } from "../domain/market";
|
|
2
2
|
import { type AuthUpdate, type UserUpdate } from "../domain/order/wire";
|
|
3
3
|
import type { OrderBook, WsTickerData } from "../domain/orderbook";
|
|
4
|
-
import type { DepositPrice, PriceHistory } from "../domain/price_history";
|
|
4
|
+
import type { DepositAssetPriceEvent, DepositPrice, PriceHistory } from "../domain/price_history";
|
|
5
5
|
import type { WsTrade } from "../domain/trade";
|
|
6
6
|
import type { OrderBookId, PubkeyStr, Resolution } from "../shared";
|
|
7
7
|
export * from "./client.node";
|
|
@@ -56,6 +56,10 @@ export type MessageIn = {
|
|
|
56
56
|
type: "deposit_price";
|
|
57
57
|
version: number;
|
|
58
58
|
data: DepositPrice;
|
|
59
|
+
} | {
|
|
60
|
+
type: "deposit_asset_price";
|
|
61
|
+
version: number;
|
|
62
|
+
data: DepositAssetPriceEvent;
|
|
59
63
|
};
|
|
60
64
|
export type Kind = MessageIn;
|
|
61
65
|
export interface WsError {
|
|
@@ -113,5 +117,12 @@ export declare function subscribeMarket(marketPubkey: PubkeyStr): MessageOut;
|
|
|
113
117
|
export declare function unsubscribeMarket(marketPubkey: PubkeyStr): MessageOut;
|
|
114
118
|
export declare function subscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut;
|
|
115
119
|
export declare function unsubscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut;
|
|
120
|
+
/**
|
|
121
|
+
* Subscribe to the live spot price for one deposit asset (snapshot +
|
|
122
|
+
* per-asset price ticks). Distinct from `subscribeDepositPrice`, which
|
|
123
|
+
* carries OHLCV candles per resolution.
|
|
124
|
+
*/
|
|
125
|
+
export declare function subscribeDepositAssetPrice(depositAsset: string): MessageOut;
|
|
126
|
+
export declare function unsubscribeDepositAssetPrice(depositAsset: string): MessageOut;
|
|
116
127
|
export declare function parseMessageIn(input: string): MessageIn;
|
|
117
128
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/ws/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAuB,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ws/index.js
CHANGED
|
@@ -31,6 +31,8 @@ exports.subscribeMarket = subscribeMarket;
|
|
|
31
31
|
exports.unsubscribeMarket = unsubscribeMarket;
|
|
32
32
|
exports.subscribeDepositPrice = subscribeDepositPrice;
|
|
33
33
|
exports.unsubscribeDepositPrice = unsubscribeDepositPrice;
|
|
34
|
+
exports.subscribeDepositAssetPrice = subscribeDepositAssetPrice;
|
|
35
|
+
exports.unsubscribeDepositAssetPrice = unsubscribeDepositAssetPrice;
|
|
34
36
|
exports.parseMessageIn = parseMessageIn;
|
|
35
37
|
const wire_1 = require("../domain/order/wire");
|
|
36
38
|
const error_1 = require("../error");
|
|
@@ -199,6 +201,23 @@ function unsubscribeDepositPrice(depositAsset, resolution) {
|
|
|
199
201
|
},
|
|
200
202
|
};
|
|
201
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Subscribe to the live spot price for one deposit asset (snapshot +
|
|
206
|
+
* per-asset price ticks). Distinct from `subscribeDepositPrice`, which
|
|
207
|
+
* carries OHLCV candles per resolution.
|
|
208
|
+
*/
|
|
209
|
+
function subscribeDepositAssetPrice(depositAsset) {
|
|
210
|
+
return {
|
|
211
|
+
method: "subscribe",
|
|
212
|
+
params: { type: "deposit_asset_price", deposit_asset: depositAsset },
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function unsubscribeDepositAssetPrice(depositAsset) {
|
|
216
|
+
return {
|
|
217
|
+
method: "unsubscribe",
|
|
218
|
+
params: { type: "deposit_asset_price", deposit_asset: depositAsset },
|
|
219
|
+
};
|
|
220
|
+
}
|
|
202
221
|
const VALID_MESSAGE_TYPES = new Set([
|
|
203
222
|
"book_update",
|
|
204
223
|
"pong",
|
|
@@ -210,6 +229,7 @@ const VALID_MESSAGE_TYPES = new Set([
|
|
|
210
229
|
"ticker",
|
|
211
230
|
"market",
|
|
212
231
|
"deposit_price",
|
|
232
|
+
"deposit_asset_price",
|
|
213
233
|
]);
|
|
214
234
|
function parseMessageIn(input) {
|
|
215
235
|
const parsed = JSON.parse(input);
|
package/dist/ws/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MarketEvent } from \"../domain/market\";\nimport { normalizeUserUpdate, type AuthUpdate, type UserUpdate } from \"../domain/order/wire\";\nimport type { OrderBook, WsTickerData } from \"../domain/orderbook\";\nimport type { DepositPrice, PriceHistory } from \"../domain/price_history\";\nimport type { WsTrade } from \"../domain/trade\";\nimport { WsError as WsErrorClass } from \"../error\";\nimport { LightconeEnv, wsUrl } from \"../env\";\nimport type { OrderBookId, PubkeyStr, Resolution } from \"../shared\";\n\nexport * from \"./client.node\";\nexport * from \"./subscriptions\";\nexport type { IWsClient } from \"./types\";\n\nexport type MessageOut =\n | { method: \"subscribe\"; params: import(\"./subscriptions\").SubscribeParams }\n | { method: \"unsubscribe\"; params: import(\"./subscriptions\").UnsubscribeParams }\n | { method: \"ping\" };\n\nexport type MessageIn =\n | { type: \"book_update\"; version: number; data: OrderBook }\n | { type: \"pong\"; version: number; data: Record<string, never> }\n | { type: \"user\"; version: number; data: UserUpdate }\n | { type: \"error\"; version: number; data: WsError }\n | { type: \"price_history\"; version: number; data: PriceHistory }\n | { type: \"trades\"; version: number; data: WsTrade }\n | { type: \"auth\"; version: number; data: AuthUpdate }\n | { type: \"ticker\"; version: number; data: WsTickerData }\n | { type: \"market\"; version: number; data: MarketEvent }\n | { type: \"deposit_price\"; version: number; data: DepositPrice };\n\nexport type Kind = MessageIn;\n\nexport interface WsError {\n error: string;\n code?: string;\n orderbook_id?: string;\n wallet_address?: string;\n deposit_asset?: string;\n hint?: string;\n details?: string;\n}\n\nexport type WsEvent =\n | { type: \"Message\"; message: MessageIn }\n | { type: \"Connected\" }\n | { type: \"Disconnected\"; code?: number; reason: string }\n | { type: \"Error\"; error: string }\n | { type: \"MaxReconnectReached\" };\n\nexport interface WsConfig {\n url: string;\n reconnect: boolean;\n maxReconnectAttempts: number;\n baseReconnectDelayMs: number;\n pingIntervalMs: number;\n pongTimeoutMs: number;\n}\n\nexport const WS_DEFAULT_CONFIG: WsConfig = {\n url: wsUrl(LightconeEnv.Prod),\n reconnect: true,\n maxReconnectAttempts: 10,\n baseReconnectDelayMs: 1_000,\n pingIntervalMs: 30_000,\n pongTimeoutMs: 10_000,\n};\n\nexport enum ReadyState {\n Connecting = 0,\n Open = 1,\n Closing = 2,\n Closed = 3,\n}\n\nexport function readyStateFrom(value: number): ReadyState {\n switch (value) {\n case 0:\n return ReadyState.Connecting;\n case 1:\n return ReadyState.Open;\n case 2:\n return ReadyState.Closing;\n case 3:\n default:\n return ReadyState.Closed;\n }\n}\n\nexport function ping(): MessageOut {\n return { method: \"ping\" };\n}\n\nexport function subscribeBooks(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeBooks(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function unsubscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function subscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n include_ohlcv: false,\n },\n };\n}\n\nexport function unsubscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n },\n };\n}\n\nexport function subscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function unsubscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function subscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\nexport function unsubscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\nconst VALID_MESSAGE_TYPES = new Set([\n \"book_update\",\n \"pong\",\n \"user\",\n \"error\",\n \"price_history\",\n \"trades\",\n \"auth\",\n \"ticker\",\n \"market\",\n \"deposit_price\",\n]);\n\nexport function parseMessageIn(input: string): MessageIn {\n const parsed: unknown = JSON.parse(input);\n if (typeof parsed !== \"object\" || parsed === null || !(\"type\" in parsed)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing \"type\" field`);\n }\n const obj = parsed as Record<string, unknown>;\n if (typeof obj.type !== \"string\" || !VALID_MESSAGE_TYPES.has(obj.type)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message type: \"${String(obj.type)}\"`);\n }\n if (!(\"version\" in obj) || typeof obj.version !== \"number\") {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"version\" field`);\n }\n if (!(\"data\" in obj) || typeof obj.data !== \"object\" || obj.data === null) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"data\" field`);\n }\n const message = parsed as MessageIn;\n if (message.type === \"user\") {\n return {\n ...message,\n data: normalizeUserUpdate(message.data as Parameters<typeof normalizeUserUpdate>[0]),\n };\n }\n return message;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MarketEvent } from \"../domain/market\";\nimport { normalizeUserUpdate, type AuthUpdate, type UserUpdate } from \"../domain/order/wire\";\nimport type { OrderBook, WsTickerData } from \"../domain/orderbook\";\nimport type {\n DepositAssetPriceEvent,\n DepositPrice,\n PriceHistory,\n} from \"../domain/price_history\";\nimport type { WsTrade } from \"../domain/trade\";\nimport { WsError as WsErrorClass } from \"../error\";\nimport { LightconeEnv, wsUrl } from \"../env\";\nimport type { OrderBookId, PubkeyStr, Resolution } from \"../shared\";\n\nexport * from \"./client.node\";\nexport * from \"./subscriptions\";\nexport type { IWsClient } from \"./types\";\n\nexport type MessageOut =\n | { method: \"subscribe\"; params: import(\"./subscriptions\").SubscribeParams }\n | { method: \"unsubscribe\"; params: import(\"./subscriptions\").UnsubscribeParams }\n | { method: \"ping\" };\n\nexport type MessageIn =\n | { type: \"book_update\"; version: number; data: OrderBook }\n | { type: \"pong\"; version: number; data: Record<string, never> }\n | { type: \"user\"; version: number; data: UserUpdate }\n | { type: \"error\"; version: number; data: WsError }\n | { type: \"price_history\"; version: number; data: PriceHistory }\n | { type: \"trades\"; version: number; data: WsTrade }\n | { type: \"auth\"; version: number; data: AuthUpdate }\n | { type: \"ticker\"; version: number; data: WsTickerData }\n | { type: \"market\"; version: number; data: MarketEvent }\n | { type: \"deposit_price\"; version: number; data: DepositPrice }\n | { type: \"deposit_asset_price\"; version: number; data: DepositAssetPriceEvent };\n\nexport type Kind = MessageIn;\n\nexport interface WsError {\n error: string;\n code?: string;\n orderbook_id?: string;\n wallet_address?: string;\n deposit_asset?: string;\n hint?: string;\n details?: string;\n}\n\nexport type WsEvent =\n | { type: \"Message\"; message: MessageIn }\n | { type: \"Connected\" }\n | { type: \"Disconnected\"; code?: number; reason: string }\n | { type: \"Error\"; error: string }\n | { type: \"MaxReconnectReached\" };\n\nexport interface WsConfig {\n url: string;\n reconnect: boolean;\n maxReconnectAttempts: number;\n baseReconnectDelayMs: number;\n pingIntervalMs: number;\n pongTimeoutMs: number;\n}\n\nexport const WS_DEFAULT_CONFIG: WsConfig = {\n url: wsUrl(LightconeEnv.Prod),\n reconnect: true,\n maxReconnectAttempts: 10,\n baseReconnectDelayMs: 1_000,\n pingIntervalMs: 30_000,\n pongTimeoutMs: 10_000,\n};\n\nexport enum ReadyState {\n Connecting = 0,\n Open = 1,\n Closing = 2,\n Closed = 3,\n}\n\nexport function readyStateFrom(value: number): ReadyState {\n switch (value) {\n case 0:\n return ReadyState.Connecting;\n case 1:\n return ReadyState.Open;\n case 2:\n return ReadyState.Closing;\n case 3:\n default:\n return ReadyState.Closed;\n }\n}\n\nexport function ping(): MessageOut {\n return { method: \"ping\" };\n}\n\nexport function subscribeBooks(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeBooks(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function unsubscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function subscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n include_ohlcv: false,\n },\n };\n}\n\nexport function unsubscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n },\n };\n}\n\nexport function subscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function unsubscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function subscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\nexport function unsubscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\n/**\n * Subscribe to the live spot price for one deposit asset (snapshot +\n * per-asset price ticks). Distinct from `subscribeDepositPrice`, which\n * carries OHLCV candles per resolution.\n */\nexport function subscribeDepositAssetPrice(depositAsset: string): MessageOut {\n return {\n method: \"subscribe\",\n params: { type: \"deposit_asset_price\", deposit_asset: depositAsset },\n };\n}\n\nexport function unsubscribeDepositAssetPrice(depositAsset: string): MessageOut {\n return {\n method: \"unsubscribe\",\n params: { type: \"deposit_asset_price\", deposit_asset: depositAsset },\n };\n}\n\nconst VALID_MESSAGE_TYPES = new Set([\n \"book_update\",\n \"pong\",\n \"user\",\n \"error\",\n \"price_history\",\n \"trades\",\n \"auth\",\n \"ticker\",\n \"market\",\n \"deposit_price\",\n \"deposit_asset_price\",\n]);\n\nexport function parseMessageIn(input: string): MessageIn {\n const parsed: unknown = JSON.parse(input);\n if (typeof parsed !== \"object\" || parsed === null || !(\"type\" in parsed)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing \"type\" field`);\n }\n const obj = parsed as Record<string, unknown>;\n if (typeof obj.type !== \"string\" || !VALID_MESSAGE_TYPES.has(obj.type)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message type: \"${String(obj.type)}\"`);\n }\n if (!(\"version\" in obj) || typeof obj.version !== \"number\") {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"version\" field`);\n }\n if (!(\"data\" in obj) || typeof obj.data !== \"object\" || obj.data === null) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"data\" field`);\n }\n const message = parsed as MessageIn;\n if (message.type === \"user\") {\n return {\n ...message,\n data: normalizeUserUpdate(message.data as Parameters<typeof normalizeUserUpdate>[0]),\n };\n }\n return message;\n}\n"]}
|
|
@@ -23,6 +23,9 @@ export type SubscribeParams = {
|
|
|
23
23
|
type: "deposit_price";
|
|
24
24
|
deposit_asset: string;
|
|
25
25
|
resolution: Resolution;
|
|
26
|
+
} | {
|
|
27
|
+
type: "deposit_asset_price";
|
|
28
|
+
deposit_asset: string;
|
|
26
29
|
};
|
|
27
30
|
export type UnsubscribeParams = {
|
|
28
31
|
type: "book_update";
|
|
@@ -47,6 +50,9 @@ export type UnsubscribeParams = {
|
|
|
47
50
|
type: "deposit_price";
|
|
48
51
|
deposit_asset: string;
|
|
49
52
|
resolution: Resolution;
|
|
53
|
+
} | {
|
|
54
|
+
type: "deposit_asset_price";
|
|
55
|
+
deposit_asset: string;
|
|
50
56
|
};
|
|
51
57
|
export interface Subscription {
|
|
52
58
|
toSubscribeParams(): SubscribeParams;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../src/ws/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEpE,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,SAAS,CAAA;CAAE,GAC3C;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,SAAS,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../src/ws/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEpE,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,SAAS,CAAA;CAAE,GAC3C;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,SAAS,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,SAAS,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,SAAS,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,iBAAiB,IAAI,eAAe,CAAC;IACrC,mBAAmB,IAAI,iBAAiB,CAAC;IACzC,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC5D,eAAe,IAAI,MAAM,CAAC;CAC3B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAmB/D;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CA6BT"}
|
package/dist/ws/subscriptions.js
CHANGED
|
@@ -18,6 +18,8 @@ function subscriptionKey(params) {
|
|
|
18
18
|
return `market:${params.market_pubkey}`;
|
|
19
19
|
case "deposit_price":
|
|
20
20
|
return `deposit_price:${params.deposit_asset}:${params.resolution}`;
|
|
21
|
+
case "deposit_asset_price":
|
|
22
|
+
return `deposit_asset_price:${params.deposit_asset}`;
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
function unsubscribeMatches(subscribe, unsubscribe) {
|
|
@@ -41,6 +43,8 @@ function unsubscribeMatches(subscribe, unsubscribe) {
|
|
|
41
43
|
case "deposit_price":
|
|
42
44
|
return (subscribe.deposit_asset === unsubscribe.deposit_asset &&
|
|
43
45
|
subscribe.resolution === unsubscribe.resolution);
|
|
46
|
+
case "deposit_asset_price":
|
|
47
|
+
return subscribe.deposit_asset === unsubscribe.deposit_asset;
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
50
|
function idsKey(ids) {
|