@gainsnetwork/sdk 0.0.0-me-rc1

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.
Files changed (236) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/lib/backend/globalTrades/index.d.ts +11 -0
  4. package/lib/backend/globalTrades/index.js +69 -0
  5. package/lib/backend/index.d.ts +3 -0
  6. package/lib/backend/index.js +28 -0
  7. package/lib/backend/tradingVariables/backend.types.d.ts +337 -0
  8. package/lib/backend/tradingVariables/backend.types.js +2 -0
  9. package/lib/backend/tradingVariables/converter.d.ts +38 -0
  10. package/lib/backend/tradingVariables/converter.js +359 -0
  11. package/lib/backend/tradingVariables/index.d.ts +5 -0
  12. package/lib/backend/tradingVariables/index.js +98 -0
  13. package/lib/backend/tradingVariables/types.d.ts +115 -0
  14. package/lib/backend/tradingVariables/types.js +14 -0
  15. package/lib/constants.d.ts +483 -0
  16. package/lib/constants.js +516 -0
  17. package/lib/contracts/addresses.d.ts +3 -0
  18. package/lib/contracts/addresses.js +35 -0
  19. package/lib/contracts/addresses.json +266 -0
  20. package/lib/contracts/index.d.ts +14 -0
  21. package/lib/contracts/index.js +92 -0
  22. package/lib/contracts/types/generated/GNSMultiCollatDiamond.d.ts +9327 -0
  23. package/lib/contracts/types/generated/GNSMultiCollatDiamond.js +2 -0
  24. package/lib/contracts/types/generated/GToken.d.ts +1917 -0
  25. package/lib/contracts/types/generated/GToken.js +2 -0
  26. package/lib/contracts/types/generated/GTokenOpenPnlFeed.d.ts +557 -0
  27. package/lib/contracts/types/generated/GTokenOpenPnlFeed.js +2 -0
  28. package/lib/contracts/types/generated/common.d.ts +22 -0
  29. package/lib/contracts/types/generated/common.js +2 -0
  30. package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.d.ts +276 -0
  31. package/lib/contracts/types/generated/factories/GNSMultiCollatDiamond__factory.js +21557 -0
  32. package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.d.ts +59 -0
  33. package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.js +765 -0
  34. package/lib/contracts/types/generated/factories/GToken__factory.d.ts +121 -0
  35. package/lib/contracts/types/generated/factories/GToken__factory.js +2867 -0
  36. package/lib/contracts/types/generated/factories/index.d.ts +3 -0
  37. package/lib/contracts/types/generated/factories/index.js +12 -0
  38. package/lib/contracts/types/generated/index.d.ts +7 -0
  39. package/lib/contracts/types/generated/index.js +33 -0
  40. package/lib/contracts/types/index.d.ts +37 -0
  41. package/lib/contracts/types/index.js +30 -0
  42. package/lib/contracts/utils/borrowingFees.d.ts +9 -0
  43. package/lib/contracts/utils/borrowingFees.js +43 -0
  44. package/lib/contracts/utils/index.d.ts +3 -0
  45. package/lib/contracts/utils/index.js +19 -0
  46. package/lib/contracts/utils/openTrades.d.ts +12 -0
  47. package/lib/contracts/utils/openTrades.js +172 -0
  48. package/lib/contracts/utils/pairs.d.ts +18 -0
  49. package/lib/contracts/utils/pairs.js +602 -0
  50. package/lib/index.d.ts +10 -0
  51. package/lib/index.js +30 -0
  52. package/lib/markets/collateral/converter.d.ts +5 -0
  53. package/lib/markets/collateral/converter.js +11 -0
  54. package/lib/markets/collateral/index.d.ts +1 -0
  55. package/lib/markets/collateral/index.js +17 -0
  56. package/lib/markets/collateral/types.d.ts +7 -0
  57. package/lib/markets/collateral/types.js +2 -0
  58. package/lib/markets/commodities.d.ts +1 -0
  59. package/lib/markets/commodities.js +7 -0
  60. package/lib/markets/crypto.d.ts +1 -0
  61. package/lib/markets/crypto.js +6 -0
  62. package/lib/markets/forex.d.ts +3 -0
  63. package/lib/markets/forex.js +8 -0
  64. package/lib/markets/holdingFees/index.d.ts +46 -0
  65. package/lib/markets/holdingFees/index.js +104 -0
  66. package/lib/markets/holdingFees/types.d.ts +23 -0
  67. package/lib/markets/holdingFees/types.js +5 -0
  68. package/lib/markets/index.d.ts +11 -0
  69. package/lib/markets/index.js +27 -0
  70. package/lib/markets/indices.d.ts +1 -0
  71. package/lib/markets/indices.js +6 -0
  72. package/lib/markets/leverage/builder.d.ts +12 -0
  73. package/lib/markets/leverage/builder.js +25 -0
  74. package/lib/markets/leverage/getMarketLeverageRestrictions.d.ts +7 -0
  75. package/lib/markets/leverage/getMarketLeverageRestrictions.js +38 -0
  76. package/lib/markets/leverage/index.d.ts +3 -0
  77. package/lib/markets/leverage/index.js +19 -0
  78. package/lib/markets/leverage/types.d.ts +15 -0
  79. package/lib/markets/leverage/types.js +2 -0
  80. package/lib/markets/oi/converter.d.ts +62 -0
  81. package/lib/markets/oi/converter.js +111 -0
  82. package/lib/markets/oi/index.d.ts +49 -0
  83. package/lib/markets/oi/index.js +77 -0
  84. package/lib/markets/oi/types.d.ts +89 -0
  85. package/lib/markets/oi/types.js +6 -0
  86. package/lib/markets/price/builder.d.ts +25 -0
  87. package/lib/markets/price/builder.js +69 -0
  88. package/lib/markets/price/index.d.ts +7 -0
  89. package/lib/markets/price/index.js +23 -0
  90. package/lib/markets/price/marketPrice.d.ts +13 -0
  91. package/lib/markets/price/marketPrice.js +35 -0
  92. package/lib/markets/price/signedPrices.d.ts +36 -0
  93. package/lib/markets/price/signedPrices.js +181 -0
  94. package/lib/markets/price/types.d.ts +50 -0
  95. package/lib/markets/price/types.js +5 -0
  96. package/lib/markets/schedules/builders.d.ts +7 -0
  97. package/lib/markets/schedules/builders.js +81 -0
  98. package/lib/markets/schedules/checkers.d.ts +7 -0
  99. package/lib/markets/schedules/checkers.js +36 -0
  100. package/lib/markets/schedules/holidays.d.ts +4 -0
  101. package/lib/markets/schedules/holidays.js +77 -0
  102. package/lib/markets/schedules/index.d.ts +9 -0
  103. package/lib/markets/schedules/index.js +45 -0
  104. package/lib/markets/schedules/types.d.ts +43 -0
  105. package/lib/markets/schedules/types.js +37 -0
  106. package/lib/markets/stocks.d.ts +3 -0
  107. package/lib/markets/stocks.js +15 -0
  108. package/lib/pricing/depthBands.d.ts +39 -0
  109. package/lib/pricing/depthBands.js +94 -0
  110. package/lib/pricing/index.d.ts +4 -0
  111. package/lib/pricing/index.js +20 -0
  112. package/lib/trade/counterTrade/index.d.ts +2 -0
  113. package/lib/trade/counterTrade/index.js +18 -0
  114. package/lib/trade/counterTrade/types.d.ts +7 -0
  115. package/lib/trade/counterTrade/types.js +2 -0
  116. package/lib/trade/counterTrade/validateCounterTrade.d.ts +10 -0
  117. package/lib/trade/counterTrade/validateCounterTrade.js +29 -0
  118. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.d.ts +20 -0
  119. package/lib/trade/effectiveLeverage/getTradeNewEffectiveLeverage.js +42 -0
  120. package/lib/trade/effectiveLeverage/index.d.ts +2 -0
  121. package/lib/trade/effectiveLeverage/index.js +21 -0
  122. package/lib/trade/effectiveLeverage/types.d.ts +30 -0
  123. package/lib/trade/effectiveLeverage/types.js +2 -0
  124. package/lib/trade/fees/borrowing/builder.d.ts +14 -0
  125. package/lib/trade/fees/borrowing/builder.js +33 -0
  126. package/lib/trade/fees/borrowing/converter.d.ts +17 -0
  127. package/lib/trade/fees/borrowing/converter.js +46 -0
  128. package/lib/trade/fees/borrowing/index.d.ts +81 -0
  129. package/lib/trade/fees/borrowing/index.js +259 -0
  130. package/lib/trade/fees/borrowing/types.d.ts +36 -0
  131. package/lib/trade/fees/borrowing/types.js +2 -0
  132. package/lib/trade/fees/borrowingV2/builder.d.ts +6 -0
  133. package/lib/trade/fees/borrowingV2/builder.js +23 -0
  134. package/lib/trade/fees/borrowingV2/converter.d.ts +75 -0
  135. package/lib/trade/fees/borrowingV2/converter.js +132 -0
  136. package/lib/trade/fees/borrowingV2/fetcher.d.ts +76 -0
  137. package/lib/trade/fees/borrowingV2/fetcher.js +179 -0
  138. package/lib/trade/fees/borrowingV2/index.d.ts +48 -0
  139. package/lib/trade/fees/borrowingV2/index.js +112 -0
  140. package/lib/trade/fees/borrowingV2/types.d.ts +95 -0
  141. package/lib/trade/fees/borrowingV2/types.js +5 -0
  142. package/lib/trade/fees/converter.d.ts +48 -0
  143. package/lib/trade/fees/converter.js +114 -0
  144. package/lib/trade/fees/fundingFees/builder.d.ts +9 -0
  145. package/lib/trade/fees/fundingFees/builder.js +38 -0
  146. package/lib/trade/fees/fundingFees/converter.d.ts +102 -0
  147. package/lib/trade/fees/fundingFees/converter.js +196 -0
  148. package/lib/trade/fees/fundingFees/fetcher.d.ts +66 -0
  149. package/lib/trade/fees/fundingFees/fetcher.js +141 -0
  150. package/lib/trade/fees/fundingFees/index.d.ts +124 -0
  151. package/lib/trade/fees/fundingFees/index.js +309 -0
  152. package/lib/trade/fees/fundingFees/pairContext.d.ts +33 -0
  153. package/lib/trade/fees/fundingFees/pairContext.js +17 -0
  154. package/lib/trade/fees/fundingFees/types.d.ts +77 -0
  155. package/lib/trade/fees/fundingFees/types.js +5 -0
  156. package/lib/trade/fees/index.d.ts +11 -0
  157. package/lib/trade/fees/index.js +87 -0
  158. package/lib/trade/fees/tiers/converter.d.ts +64 -0
  159. package/lib/trade/fees/tiers/converter.js +100 -0
  160. package/lib/trade/fees/tiers/index.d.ts +46 -0
  161. package/lib/trade/fees/tiers/index.js +135 -0
  162. package/lib/trade/fees/tiers/types.d.ts +22 -0
  163. package/lib/trade/fees/tiers/types.js +8 -0
  164. package/lib/trade/fees/trading/builder.d.ts +19 -0
  165. package/lib/trade/fees/trading/builder.js +21 -0
  166. package/lib/trade/fees/trading/converter.d.ts +32 -0
  167. package/lib/trade/fees/trading/converter.js +47 -0
  168. package/lib/trade/fees/trading/index.d.ts +62 -0
  169. package/lib/trade/fees/trading/index.js +157 -0
  170. package/lib/trade/fees/trading/types.d.ts +46 -0
  171. package/lib/trade/fees/trading/types.js +5 -0
  172. package/lib/trade/index.d.ts +10 -0
  173. package/lib/trade/index.js +26 -0
  174. package/lib/trade/liquidation/builder.d.ts +25 -0
  175. package/lib/trade/liquidation/builder.js +58 -0
  176. package/lib/trade/liquidation/converter.d.ts +23 -0
  177. package/lib/trade/liquidation/converter.js +46 -0
  178. package/lib/trade/liquidation/index.d.ts +29 -0
  179. package/lib/trade/liquidation/index.js +216 -0
  180. package/lib/trade/liquidation/types.d.ts +38 -0
  181. package/lib/trade/liquidation/types.js +2 -0
  182. package/lib/trade/oiWindows.d.ts +3 -0
  183. package/lib/trade/oiWindows.js +19 -0
  184. package/lib/trade/pnl/builder.d.ts +16 -0
  185. package/lib/trade/pnl/builder.js +43 -0
  186. package/lib/trade/pnl/converter.d.ts +47 -0
  187. package/lib/trade/pnl/converter.js +72 -0
  188. package/lib/trade/pnl/index.d.ts +91 -0
  189. package/lib/trade/pnl/index.js +301 -0
  190. package/lib/trade/pnl/types.d.ts +79 -0
  191. package/lib/trade/pnl/types.js +5 -0
  192. package/lib/trade/priceImpact/close/builder.d.ts +23 -0
  193. package/lib/trade/priceImpact/close/builder.js +44 -0
  194. package/lib/trade/priceImpact/close/index.d.ts +22 -0
  195. package/lib/trade/priceImpact/close/index.js +137 -0
  196. package/lib/trade/priceImpact/close/types.d.ts +47 -0
  197. package/lib/trade/priceImpact/close/types.js +5 -0
  198. package/lib/trade/priceImpact/cumulVol/builder.d.ts +22 -0
  199. package/lib/trade/priceImpact/cumulVol/builder.js +53 -0
  200. package/lib/trade/priceImpact/cumulVol/converter.d.ts +94 -0
  201. package/lib/trade/priceImpact/cumulVol/converter.js +155 -0
  202. package/lib/trade/priceImpact/cumulVol/index.d.ts +109 -0
  203. package/lib/trade/priceImpact/cumulVol/index.js +316 -0
  204. package/lib/trade/priceImpact/cumulVol/types.d.ts +11 -0
  205. package/lib/trade/priceImpact/cumulVol/types.js +2 -0
  206. package/lib/trade/priceImpact/index.d.ts +21 -0
  207. package/lib/trade/priceImpact/index.js +79 -0
  208. package/lib/trade/priceImpact/open/builder.d.ts +21 -0
  209. package/lib/trade/priceImpact/open/builder.js +42 -0
  210. package/lib/trade/priceImpact/open/index.d.ts +23 -0
  211. package/lib/trade/priceImpact/open/index.js +82 -0
  212. package/lib/trade/priceImpact/open/types.d.ts +45 -0
  213. package/lib/trade/priceImpact/open/types.js +5 -0
  214. package/lib/trade/priceImpact/skew/builder.d.ts +12 -0
  215. package/lib/trade/priceImpact/skew/builder.js +27 -0
  216. package/lib/trade/priceImpact/skew/converter.d.ts +46 -0
  217. package/lib/trade/priceImpact/skew/converter.js +81 -0
  218. package/lib/trade/priceImpact/skew/fetcher.d.ts +60 -0
  219. package/lib/trade/priceImpact/skew/fetcher.js +160 -0
  220. package/lib/trade/priceImpact/skew/index.d.ts +53 -0
  221. package/lib/trade/priceImpact/skew/index.js +148 -0
  222. package/lib/trade/priceImpact/skew/types.d.ts +44 -0
  223. package/lib/trade/priceImpact/skew/types.js +5 -0
  224. package/lib/trade/spread.d.ts +5 -0
  225. package/lib/trade/spread.js +19 -0
  226. package/lib/trade/types.d.ts +777 -0
  227. package/lib/trade/types.js +478 -0
  228. package/lib/trade/utils.d.ts +18 -0
  229. package/lib/trade/utils.js +30 -0
  230. package/lib/utils/index.d.ts +1 -0
  231. package/lib/utils/index.js +17 -0
  232. package/lib/utils/packing.d.ts +2 -0
  233. package/lib/utils/packing.js +39 -0
  234. package/lib/vault/index.d.ts +10 -0
  235. package/lib/vault/index.js +10 -0
  236. package/package.json +106 -0
@@ -0,0 +1,7 @@
1
+ import { Schedule } from './types';
2
+ export declare const buildForexWeeklySchedule: (currentDate?: Date, opts?: {
3
+ pairGroupIndex?: number;
4
+ }) => Schedule;
5
+ export declare const buildStocksWeeklySchedule: (currentDate?: Date) => Schedule;
6
+ export declare const buildIndicesWeeklySchedule: (currentDate?: Date) => Schedule;
7
+ export declare const buildCommoditiesWeeklySchedule: (currentDate?: Date) => Schedule;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCommoditiesWeeklySchedule = exports.buildIndicesWeeklySchedule = exports.buildStocksWeeklySchedule = exports.buildForexWeeklySchedule = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const types_1 = require("./types");
6
+ const holidays_1 = require("./holidays");
7
+ const ET = luxon_1.IANAZone.create('America/New_York');
8
+ const emptyWeekly = () => ({
9
+ monday: [],
10
+ tuesday: [],
11
+ wednesday: [],
12
+ thursday: [],
13
+ friday: [],
14
+ saturday: [],
15
+ sunday: [],
16
+ });
17
+ const add = (ws, day, win) => {
18
+ ws[(0, types_1.weekDayToKey)(day)].push(win);
19
+ };
20
+ const buildForexWeeklySchedule = (currentDate = new Date(), opts) => {
21
+ const dt = luxon_1.DateTime.fromJSDate(currentDate).setZone(ET);
22
+ const isInDST = dt.isInDST;
23
+ const open = emptyWeekly();
24
+ const lowLiq = emptyWeekly();
25
+ const openHour = isInDST ? 16 : 17; // Monday open
26
+ const closeHour = isInDST ? 16 : 17; // Friday close
27
+ // Open windows (ET): Sun 16/17:00 -> 24:00, Mon-Thu 0-24, Fri 0 -> 16/17:00
28
+ add(open, types_1.WeekDay.Sunday, { start: { hour: openHour, minute: 0 }, end: { hour: 24, minute: 0 } });
29
+ add(open, types_1.WeekDay.Monday, { start: { hour: 0, minute: 0 }, end: { hour: 24, minute: 0 } });
30
+ add(open, types_1.WeekDay.Tuesday, { start: { hour: 0, minute: 0 }, end: { hour: 24, minute: 0 } });
31
+ add(open, types_1.WeekDay.Wednesday, { start: { hour: 0, minute: 0 }, end: { hour: 24, minute: 0 } });
32
+ add(open, types_1.WeekDay.Thursday, { start: { hour: 0, minute: 0 }, end: { hour: 24, minute: 0 } });
33
+ add(open, types_1.WeekDay.Friday, { start: { hour: 0, minute: 0 }, end: { hour: closeHour, minute: 0 } });
34
+ // Low-liquidity windows (ET)
35
+ const extendedGroups = [8, 9];
36
+ const useExtended = opts?.pairGroupIndex !== undefined && extendedGroups.includes(+opts.pairGroupIndex);
37
+ const llStartHour = isInDST ? (useExtended ? 14 : 15) : (useExtended ? 15 : 16);
38
+ const llStartMinute = 45;
39
+ const llEndHour = isInDST ? (useExtended ? 21 : 19) : (useExtended ? 22 : 20);
40
+ const llEndMinute = 0;
41
+ for (const d of [types_1.WeekDay.Sunday, types_1.WeekDay.Monday, types_1.WeekDay.Tuesday, types_1.WeekDay.Wednesday, types_1.WeekDay.Thursday, types_1.WeekDay.Friday]) {
42
+ add(lowLiq, d, { start: { hour: llStartHour, minute: llStartMinute }, end: { hour: llEndHour, minute: llEndMinute } });
43
+ }
44
+ const holidays = (0, holidays_1.getHolidaysInCurrentWeek)('forex', currentDate);
45
+ const summary = isInDST
46
+ ? 'Sunday 4:00 pm - Friday 4:00 pm ET (Closed weekends & holidays)'
47
+ : 'Sunday 5:00 pm - Friday 5:00 pm ET (Closed weekends & holidays)';
48
+ return { open, lowLiq, holidays, summary };
49
+ };
50
+ exports.buildForexWeeklySchedule = buildForexWeeklySchedule;
51
+ const buildStocksWeeklySchedule = (currentDate = new Date()) => {
52
+ const open = emptyWeekly();
53
+ const lowLiq = emptyWeekly();
54
+ for (const d of [types_1.WeekDay.Monday, types_1.WeekDay.Tuesday, types_1.WeekDay.Wednesday, types_1.WeekDay.Thursday, types_1.WeekDay.Friday]) {
55
+ add(open, d, { start: { hour: 9, minute: 30 }, end: { hour: 16, minute: 0 } });
56
+ }
57
+ const holidays = (0, holidays_1.getHolidaysInCurrentWeek)('stocks', currentDate);
58
+ const summary = 'Monday - Friday: 9:30 am - 4:00 pm ET (Closed weekends & holidays)';
59
+ return { open, lowLiq, holidays, summary };
60
+ };
61
+ exports.buildStocksWeeklySchedule = buildStocksWeeklySchedule;
62
+ const buildIndicesWeeklySchedule = (currentDate = new Date()) => (0, exports.buildStocksWeeklySchedule)(currentDate);
63
+ exports.buildIndicesWeeklySchedule = buildIndicesWeeklySchedule;
64
+ const buildCommoditiesWeeklySchedule = (currentDate = new Date()) => {
65
+ const open = emptyWeekly();
66
+ const lowLiq = emptyWeekly();
67
+ // Sunday: 18:00 -> 24:00
68
+ add(open, types_1.WeekDay.Sunday, { start: { hour: 18, minute: 0 }, end: { hour: 24, minute: 0 } });
69
+ // Mon-Thu: 0:00 -> 17:00 and 18:00 -> 24:00 (break represented by the gap)
70
+ for (const d of [types_1.WeekDay.Monday, types_1.WeekDay.Tuesday, types_1.WeekDay.Wednesday, types_1.WeekDay.Thursday]) {
71
+ add(open, d, { start: { hour: 0, minute: 0 }, end: { hour: 17, minute: 0 } });
72
+ add(open, d, { start: { hour: 18, minute: 0 }, end: { hour: 24, minute: 0 } });
73
+ }
74
+ // Friday: 0:00 -> 17:00
75
+ add(open, types_1.WeekDay.Friday, { start: { hour: 0, minute: 0 }, end: { hour: 17, minute: 0 } });
76
+ // Saturday: closed (no windows)
77
+ const holidays = (0, holidays_1.getHolidaysInCurrentWeek)('commodities', currentDate);
78
+ const summary = `Sunday 6:00 pm - Friday 5:00 pm ET (Daily break: 5:00 pm - 6:00 pm ET)`;
79
+ return { open, lowLiq, holidays, summary };
80
+ };
81
+ exports.buildCommoditiesWeeklySchedule = buildCommoditiesWeeklySchedule;
@@ -0,0 +1,7 @@
1
+ import { TradFiMarket } from "./index";
2
+ export declare const isOpenAt: (market: TradFiMarket, date: Date, opts?: {
3
+ pairGroupIndex?: number;
4
+ }) => boolean;
5
+ export declare const isLowLiquidityAt: (market: TradFiMarket, date: Date, opts?: {
6
+ pairGroupIndex?: number;
7
+ }) => boolean;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isLowLiquidityAt = exports.isOpenAt = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const index_1 = require("./index");
6
+ const types_1 = require("./types");
7
+ const ET = luxon_1.IANAZone.create("America/New_York");
8
+ const weekdayKey = (weekday) => (0, types_1.weekDayToKey)(weekday); // Luxon: Mon=1..Sun=7
9
+ const inInAnyWindow = (mm, wins) => !!wins?.some(w => {
10
+ const start = w.start.hour * 60 + w.start.minute;
11
+ const end = w.end.hour === 24 && w.end.minute === 0
12
+ ? 1440
13
+ : w.end.hour * 60 + w.end.minute;
14
+ return mm >= start && mm < end;
15
+ });
16
+ const isOpenAt = (market, date, opts) => {
17
+ const dt = luxon_1.DateTime.fromJSDate(date).setZone(ET);
18
+ const schedule = (0, index_1.getWeeklySchedule)(market, date, opts);
19
+ const dayKey = weekdayKey(dt.weekday);
20
+ const mm = dt.hour * 60 + dt.minute;
21
+ // Holiday override: if this ET date has a holiday entry, use its openWindows
22
+ const holiday = schedule.holidays?.find(x => x.year === dt.year && x.month === dt.month && x.day === dt.day);
23
+ if (holiday) {
24
+ return inInAnyWindow(mm, holiday.openWindows);
25
+ }
26
+ return inInAnyWindow(mm, (schedule.open)[dayKey]);
27
+ };
28
+ exports.isOpenAt = isOpenAt;
29
+ const isLowLiquidityAt = (market, date, opts) => {
30
+ const dt = luxon_1.DateTime.fromJSDate(date).setZone(ET);
31
+ const schedule = (0, index_1.getWeeklySchedule)(market, date, opts);
32
+ const dayKey = weekdayKey(dt.weekday);
33
+ const mm = dt.hour * 60 + dt.minute;
34
+ return inInAnyWindow(mm, (schedule.lowLiq)[dayKey]);
35
+ };
36
+ exports.isLowLiquidityAt = isLowLiquidityAt;
@@ -0,0 +1,4 @@
1
+ import { Holiday } from "./types";
2
+ import { TradFiMarket } from "./index";
3
+ export declare const getHolidays: (market: TradFiMarket, startDate: Date, days: number) => Holiday[];
4
+ export declare const getHolidaysInCurrentWeek: (market: TradFiMarket, currentDate: Date) => Holiday[];
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHolidaysInCurrentWeek = exports.getHolidays = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const ET = luxon_1.IANAZone.create("America/New_York");
6
+ const full = (year, month, day, name) => ({ year, month, day, name, openWindows: [] });
7
+ const partial = (year, month, day, name, startH, startM, endH, endM) => ({ year, month, day, name, openWindows: [{ start: { hour: startH, minute: startM }, end: { hour: endH, minute: endM } }] });
8
+ // Shared holidays
9
+ const HOLIDAYS = [
10
+ // 2025
11
+ full(2025, 5, 26, "Memorial Day"),
12
+ full(2025, 6, 19, "Juneteenth"),
13
+ partial(2025, 7, 3, "Day Before Independence Day", 9, 30, 13, 0),
14
+ full(2025, 7, 4, "Independence Day"),
15
+ full(2025, 9, 1, "Labor Day"),
16
+ full(2025, 11, 27, "Thanksgiving Day"),
17
+ partial(2025, 11, 28, "Black Friday", 9, 30, 13, 0),
18
+ full(2025, 12, 25, "Christmas Day"),
19
+ // 2026
20
+ full(2026, 1, 1, "New Year's Day"),
21
+ full(2026, 1, 19, "Martin Luther King Jr. Day"),
22
+ full(2026, 2, 16, "Presidents' Day"),
23
+ full(2026, 4, 3, "Good Friday"),
24
+ ];
25
+ // Market-specific holiday overrides
26
+ const HOLIDAYS_OVERRIDES = {
27
+ stocks: [
28
+ partial(2025, 12, 24, "Christmas Eve", 9, 30, 13, 0),
29
+ ],
30
+ indices: [
31
+ partial(2025, 12, 24, "Christmas Eve", 9, 30, 12, 15),
32
+ partial(2025, 12, 31, "New Year's Eve", 0, 0, 16, 0),
33
+ ],
34
+ commodities: [
35
+ // MLK Jr. Day: Open until 1 PM ET, closed from 1-6 PM ET, then reopens at 6 PM ET
36
+ {
37
+ year: 2026,
38
+ month: 1,
39
+ day: 19,
40
+ name: "Martin Luther King Jr. Day",
41
+ openWindows: [
42
+ { start: { hour: 0, minute: 0 }, end: { hour: 13, minute: 0 } },
43
+ { start: { hour: 18, minute: 0 }, end: { hour: 24, minute: 0 } }
44
+ ]
45
+ },
46
+ partial(2025, 12, 24, "Christmas Eve", 0, 0, 12, 45),
47
+ partial(2025, 12, 31, "New Year's Eve", 0, 0, 16, 0),
48
+ ],
49
+ forex: [
50
+ partial(2025, 12, 24, "Christmas Eve", 0, 0, 12, 45),
51
+ partial(2025, 12, 31, "New Year's Eve", 0, 0, 16, 0),
52
+ ],
53
+ };
54
+ const getHolidaysForYear = (market, year) => {
55
+ const holidayOverrides = HOLIDAYS_OVERRIDES[market]?.filter(h => h.year === year) || [];
56
+ const overridden = new Set(holidayOverrides.map(h => h.name));
57
+ const filteredHolidays = HOLIDAYS.filter(h => h.year === year && !overridden.has(h.name));
58
+ return [...filteredHolidays, ...holidayOverrides].sort((a, b) => a.month === b.month ? a.day - b.day : a.month - b.month);
59
+ };
60
+ const getHolidays = (market, startDate, days) => {
61
+ const start = luxon_1.DateTime.fromJSDate(startDate).setZone(ET).startOf('day');
62
+ const end = start.plus({ days });
63
+ const years = [];
64
+ for (let year = start.year; year <= end.year; year++) {
65
+ years.push(year);
66
+ }
67
+ return years.flatMap(year => getHolidaysForYear(market, year).filter(h => {
68
+ const d = luxon_1.DateTime.fromObject({ year: h.year, month: h.month, day: h.day }, { zone: ET });
69
+ return d >= start && d < end;
70
+ }));
71
+ };
72
+ exports.getHolidays = getHolidays;
73
+ const getHolidaysInCurrentWeek = (market, currentDate) => {
74
+ const weekStart = luxon_1.DateTime.fromJSDate(currentDate).setZone(ET).startOf("week");
75
+ return (0, exports.getHolidays)(market, weekStart.toJSDate(), 7);
76
+ };
77
+ exports.getHolidaysInCurrentWeek = getHolidaysInCurrentWeek;
@@ -0,0 +1,9 @@
1
+ export * from "./types";
2
+ export { buildForexWeeklySchedule, buildStocksWeeklySchedule, buildIndicesWeeklySchedule, buildCommoditiesWeeklySchedule, } from "./builders";
3
+ export { isOpenAt, isLowLiquidityAt } from "./checkers";
4
+ export { getHolidays, getHolidaysInCurrentWeek } from "./holidays";
5
+ import { Schedule } from "./types";
6
+ export type TradFiMarket = "forex" | "stocks" | "indices" | "commodities";
7
+ export declare const getWeeklySchedule: (market: TradFiMarket, currentDate?: Date, opts?: {
8
+ pairGroupIndex?: number;
9
+ }) => Schedule;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.getWeeklySchedule = exports.getHolidaysInCurrentWeek = exports.getHolidays = exports.isLowLiquidityAt = exports.isOpenAt = exports.buildCommoditiesWeeklySchedule = exports.buildIndicesWeeklySchedule = exports.buildStocksWeeklySchedule = exports.buildForexWeeklySchedule = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ var builders_1 = require("./builders");
20
+ Object.defineProperty(exports, "buildForexWeeklySchedule", { enumerable: true, get: function () { return builders_1.buildForexWeeklySchedule; } });
21
+ Object.defineProperty(exports, "buildStocksWeeklySchedule", { enumerable: true, get: function () { return builders_1.buildStocksWeeklySchedule; } });
22
+ Object.defineProperty(exports, "buildIndicesWeeklySchedule", { enumerable: true, get: function () { return builders_1.buildIndicesWeeklySchedule; } });
23
+ Object.defineProperty(exports, "buildCommoditiesWeeklySchedule", { enumerable: true, get: function () { return builders_1.buildCommoditiesWeeklySchedule; } });
24
+ var checkers_1 = require("./checkers");
25
+ Object.defineProperty(exports, "isOpenAt", { enumerable: true, get: function () { return checkers_1.isOpenAt; } });
26
+ Object.defineProperty(exports, "isLowLiquidityAt", { enumerable: true, get: function () { return checkers_1.isLowLiquidityAt; } });
27
+ var holidays_1 = require("./holidays");
28
+ Object.defineProperty(exports, "getHolidays", { enumerable: true, get: function () { return holidays_1.getHolidays; } });
29
+ Object.defineProperty(exports, "getHolidaysInCurrentWeek", { enumerable: true, get: function () { return holidays_1.getHolidaysInCurrentWeek; } });
30
+ const builders_2 = require("./builders");
31
+ const getWeeklySchedule = (market, currentDate = new Date(), opts) => {
32
+ switch (market) {
33
+ case "forex":
34
+ return (0, builders_2.buildForexWeeklySchedule)(currentDate, {
35
+ pairGroupIndex: opts?.pairGroupIndex,
36
+ });
37
+ case "stocks":
38
+ return (0, builders_2.buildStocksWeeklySchedule)(currentDate);
39
+ case "indices":
40
+ return (0, builders_2.buildIndicesWeeklySchedule)(currentDate);
41
+ case "commodities":
42
+ return (0, builders_2.buildCommoditiesWeeklySchedule)(currentDate);
43
+ }
44
+ };
45
+ exports.getWeeklySchedule = getWeeklySchedule;
@@ -0,0 +1,43 @@
1
+ import { IANAZone } from "luxon";
2
+ export type HM = {
3
+ hour: number;
4
+ minute: number;
5
+ };
6
+ export type Window = {
7
+ start: HM;
8
+ end: HM;
9
+ };
10
+ export type WeeklySchedule = {
11
+ monday: Window[];
12
+ tuesday: Window[];
13
+ wednesday: Window[];
14
+ thursday: Window[];
15
+ friday: Window[];
16
+ saturday: Window[];
17
+ sunday: Window[];
18
+ };
19
+ export declare enum WeekDay {
20
+ Monday = 1,
21
+ Tuesday = 2,
22
+ Wednesday = 3,
23
+ Thursday = 4,
24
+ Friday = 5,
25
+ Saturday = 6,
26
+ Sunday = 7
27
+ }
28
+ export type WeekDayKey = keyof WeeklySchedule;
29
+ export declare const weekDayToKey: (d: WeekDay) => WeekDayKey;
30
+ export type Holiday = {
31
+ year: number;
32
+ month: number;
33
+ day: number;
34
+ name: string;
35
+ openWindows: Window[];
36
+ };
37
+ export type Schedule = {
38
+ holidays?: Holiday[];
39
+ open: WeeklySchedule;
40
+ lowLiq: WeeklySchedule;
41
+ summary?: string;
42
+ };
43
+ export declare const ET_IANA: IANAZone;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ET_IANA = exports.weekDayToKey = exports.WeekDay = void 0;
4
+ const luxon_1 = require("luxon");
5
+ // Monday = 1 ... Sunday = 7 (matches Luxon DateTime.weekday)
6
+ var WeekDay;
7
+ (function (WeekDay) {
8
+ WeekDay[WeekDay["Monday"] = 1] = "Monday";
9
+ WeekDay[WeekDay["Tuesday"] = 2] = "Tuesday";
10
+ WeekDay[WeekDay["Wednesday"] = 3] = "Wednesday";
11
+ WeekDay[WeekDay["Thursday"] = 4] = "Thursday";
12
+ WeekDay[WeekDay["Friday"] = 5] = "Friday";
13
+ WeekDay[WeekDay["Saturday"] = 6] = "Saturday";
14
+ WeekDay[WeekDay["Sunday"] = 7] = "Sunday";
15
+ })(WeekDay = exports.WeekDay || (exports.WeekDay = {}));
16
+ const weekDayToKey = (d) => {
17
+ switch (d) {
18
+ case WeekDay.Monday:
19
+ return "monday";
20
+ case WeekDay.Tuesday:
21
+ return "tuesday";
22
+ case WeekDay.Wednesday:
23
+ return "wednesday";
24
+ case WeekDay.Thursday:
25
+ return "thursday";
26
+ case WeekDay.Friday:
27
+ return "friday";
28
+ case WeekDay.Saturday:
29
+ return "saturday";
30
+ case WeekDay.Sunday:
31
+ return "sunday";
32
+ default:
33
+ return "sunday";
34
+ }
35
+ };
36
+ exports.weekDayToKey = weekDayToKey;
37
+ exports.ET_IANA = luxon_1.IANAZone.create("America/New_York");
@@ -0,0 +1,3 @@
1
+ import { DateTime } from "luxon";
2
+ export declare const isStocksOpen: (dateToCheck: Date) => boolean;
3
+ export declare const getUSMarketsNow: () => DateTime;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUSMarketsNow = exports.isStocksOpen = void 0;
4
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
5
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
6
+ // @ts-ignore-file
7
+ const luxon_1 = require("luxon");
8
+ const schedules_1 = require("./schedules");
9
+ const STOCKS_MARKETS_TIME_ZONE_IANA = luxon_1.IANAZone.create("America/New_York");
10
+ const isStocksOpen = (dateToCheck) => (0, schedules_1.isOpenAt)('stocks', dateToCheck);
11
+ exports.isStocksOpen = isStocksOpen;
12
+ const getUSMarketsNow = () => {
13
+ return luxon_1.DateTime.now().setZone(STOCKS_MARKETS_TIME_ZONE_IANA);
14
+ };
15
+ exports.getUSMarketsNow = getUSMarketsNow;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @dev Depth bands encoding/decoding functions
3
+ */
4
+ /**
5
+ * Encode depth bands data into two uint256 slots
6
+ * @param totalDepthUsd Total depth in USD (must fit in uint32)
7
+ * @param bandPercentagesBps Array of 30 band percentages in basis points
8
+ * @returns Two slots as bigints
9
+ */
10
+ export declare function encodeDepthBands(totalDepthUsd: number, bandPercentagesBps: number[]): {
11
+ slot1: bigint;
12
+ slot2: bigint;
13
+ };
14
+ /**
15
+ * Decode depth bands from two uint256 slots
16
+ * @param slot1 First slot containing totalDepthUsd and bands 0-13
17
+ * @param slot2 Second slot containing bands 14-29
18
+ * @returns Total depth and array of band percentages
19
+ */
20
+ export declare function decodeDepthBands(slot1: bigint, slot2: bigint): {
21
+ totalDepthUsd: number;
22
+ bands: number[];
23
+ };
24
+ /**
25
+ * Encode depth bands mapping (global offsets for all pairs)
26
+ * @param bands Array of 30 band offset values in ppm
27
+ * @returns Two slots as bigints
28
+ */
29
+ export declare function encodeDepthBandsMapping(bands: number[]): {
30
+ slot1: bigint;
31
+ slot2: bigint;
32
+ };
33
+ /**
34
+ * Decode depth bands mapping from two uint256 slots
35
+ * @param slot1 First slot containing bands 0-13 (starting at bit 32, first 32 bits unused)
36
+ * @param slot2 Second slot containing bands 14-29
37
+ * @returns Array of band offset values in ppm
38
+ */
39
+ export declare function decodeDepthBandsMapping(slot1: bigint, slot2: bigint): number[];
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Depth bands encoding/decoding functions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decodeDepthBandsMapping = exports.encodeDepthBandsMapping = exports.decodeDepthBands = exports.encodeDepthBands = void 0;
7
+ const DEPTH_BANDS_COUNT = 30;
8
+ const DEPTH_BANDS_PER_SLOT1 = 14;
9
+ /**
10
+ * Encode depth bands data into two uint256 slots
11
+ * @param totalDepthUsd Total depth in USD (must fit in uint32)
12
+ * @param bandPercentagesBps Array of 30 band percentages in basis points
13
+ * @returns Two slots as bigints
14
+ */
15
+ function encodeDepthBands(totalDepthUsd, bandPercentagesBps) {
16
+ // Pack slot1: totalDepthUsd (32 bits) + bands 0-13 (14 * 16 bits)
17
+ let slot1 = BigInt(totalDepthUsd);
18
+ for (let i = 0; i < DEPTH_BANDS_PER_SLOT1; i++) {
19
+ const shift = 32 + i * 16;
20
+ slot1 |= BigInt(bandPercentagesBps[i]) << BigInt(shift);
21
+ }
22
+ // Pack slot2: bands 14-29 (16 * 16 bits)
23
+ let slot2 = BigInt(0);
24
+ for (let i = DEPTH_BANDS_PER_SLOT1; i < DEPTH_BANDS_COUNT; i++) {
25
+ const shift = (i - DEPTH_BANDS_PER_SLOT1) * 16;
26
+ slot2 |= BigInt(bandPercentagesBps[i]) << BigInt(shift);
27
+ }
28
+ return { slot1, slot2 };
29
+ }
30
+ exports.encodeDepthBands = encodeDepthBands;
31
+ /**
32
+ * Decode depth bands from two uint256 slots
33
+ * @param slot1 First slot containing totalDepthUsd and bands 0-13
34
+ * @param slot2 Second slot containing bands 14-29
35
+ * @returns Total depth and array of band percentages
36
+ */
37
+ function decodeDepthBands(slot1, slot2) {
38
+ const totalDepthUsd = Number(slot1 & BigInt(0xffffffff));
39
+ const bands = [];
40
+ // Extract bands 0-13 from slot1
41
+ for (let i = 0; i < DEPTH_BANDS_PER_SLOT1; i++) {
42
+ const shift = 32 + i * 16;
43
+ bands.push(Number((slot1 >> BigInt(shift)) & BigInt(0xffff)));
44
+ }
45
+ // Extract bands 14-29 from slot2
46
+ for (let i = DEPTH_BANDS_PER_SLOT1; i < DEPTH_BANDS_COUNT; i++) {
47
+ const shift = (i - DEPTH_BANDS_PER_SLOT1) * 16;
48
+ bands.push(Number((slot2 >> BigInt(shift)) & BigInt(0xffff)));
49
+ }
50
+ return { totalDepthUsd, bands };
51
+ }
52
+ exports.decodeDepthBands = decodeDepthBands;
53
+ /**
54
+ * Encode depth bands mapping (global offsets for all pairs)
55
+ * @param bands Array of 30 band offset values in ppm
56
+ * @returns Two slots as bigints
57
+ */
58
+ function encodeDepthBandsMapping(bands) {
59
+ // Pack slot1: bands 0-13 (starting at bit 32, first 32 bits unused)
60
+ let slot1 = BigInt(0);
61
+ for (let i = 0; i < DEPTH_BANDS_PER_SLOT1; i++) {
62
+ const shift = 32 + i * 16; // Start at bit 32 to match contract
63
+ slot1 |= BigInt(bands[i]) << BigInt(shift);
64
+ }
65
+ // Pack slot2: bands 14-29 (16 * 16 bits)
66
+ let slot2 = BigInt(0);
67
+ for (let i = DEPTH_BANDS_PER_SLOT1; i < DEPTH_BANDS_COUNT; i++) {
68
+ const shift = (i - DEPTH_BANDS_PER_SLOT1) * 16;
69
+ slot2 |= BigInt(bands[i]) << BigInt(shift);
70
+ }
71
+ return { slot1, slot2 };
72
+ }
73
+ exports.encodeDepthBandsMapping = encodeDepthBandsMapping;
74
+ /**
75
+ * Decode depth bands mapping from two uint256 slots
76
+ * @param slot1 First slot containing bands 0-13 (starting at bit 32, first 32 bits unused)
77
+ * @param slot2 Second slot containing bands 14-29
78
+ * @returns Array of band offset values in ppm
79
+ */
80
+ function decodeDepthBandsMapping(slot1, slot2) {
81
+ const bands = [];
82
+ // Extract bands 0-13 from slot1 (skip first 32 bits which are unused for mappings)
83
+ for (let i = 0; i < DEPTH_BANDS_PER_SLOT1; i++) {
84
+ const shift = 32 + i * 16; // Start at bit 32, not bit 0
85
+ bands.push(Number((slot1 >> BigInt(shift)) & BigInt(0xffff)));
86
+ }
87
+ // Extract bands 14-29 from slot2
88
+ for (let i = DEPTH_BANDS_PER_SLOT1; i < DEPTH_BANDS_COUNT; i++) {
89
+ const shift = (i - DEPTH_BANDS_PER_SLOT1) * 16;
90
+ bands.push(Number((slot2 >> BigInt(shift)) & BigInt(0xffff)));
91
+ }
92
+ return bands;
93
+ }
94
+ exports.decodeDepthBandsMapping = decodeDepthBandsMapping;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @dev Pricing module exports
3
+ */
4
+ export * from "./depthBands";
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * @dev Pricing module exports
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./depthBands"), exports);
@@ -0,0 +1,2 @@
1
+ export * from "./types";
2
+ export * from "./validateCounterTrade";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./validateCounterTrade"), exports);
@@ -0,0 +1,7 @@
1
+ export type ValidateCounterTradeContext = {
2
+ pairOiSkewCollateral: number;
3
+ };
4
+ export type ValidateCounterTradeResult = {
5
+ isValidated: boolean;
6
+ exceedingPositionSizeCollateral: number;
7
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ import { Trade } from "../types";
2
+ import { ValidateCounterTradeContext, ValidateCounterTradeResult } from "./types";
3
+ /**
4
+ * Validates a counter trade based on pair OI skew, matching the contract's validateCounterTrade logic
5
+ * @param trade Trade object
6
+ * @param positionSizeCollateral Position size in collateral tokens
7
+ * @param context Context containing the pair OI skew
8
+ * @returns Validation result with exceeding collateral amount if applicable
9
+ */
10
+ export declare function validateCounterTrade(trade: Trade, positionSizeCollateral: number, context: ValidateCounterTradeContext): ValidateCounterTradeResult;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateCounterTrade = void 0;
4
+ /**
5
+ * Validates a counter trade based on pair OI skew, matching the contract's validateCounterTrade logic
6
+ * @param trade Trade object
7
+ * @param positionSizeCollateral Position size in collateral tokens
8
+ * @param context Context containing the pair OI skew
9
+ * @returns Validation result with exceeding collateral amount if applicable
10
+ */
11
+ function validateCounterTrade(trade, positionSizeCollateral, context) {
12
+ const { pairOiSkewCollateral } = context;
13
+ // Calculate signed position size based on trade direction
14
+ const positionSizeCollateralSigned = positionSizeCollateral * (trade.long ? 1 : -1);
15
+ // Check if position improves skew (opposite signs)
16
+ if (pairOiSkewCollateral === 0 ||
17
+ (pairOiSkewCollateral > 0 && positionSizeCollateralSigned > 0) ||
18
+ (pairOiSkewCollateral < 0 && positionSizeCollateralSigned < 0)) {
19
+ return { isValidated: false, exceedingPositionSizeCollateral: 0 };
20
+ }
21
+ // Calculate maximum position size that brings skew to 0
22
+ const maxPositionSizeCollateral = Math.abs(pairOiSkewCollateral);
23
+ // Calculate exceeding amount
24
+ const exceedingPositionSizeCollateral = positionSizeCollateral > maxPositionSizeCollateral
25
+ ? positionSizeCollateral - maxPositionSizeCollateral
26
+ : 0;
27
+ return { isValidated: true, exceedingPositionSizeCollateral };
28
+ }
29
+ exports.validateCounterTrade = validateCounterTrade;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @dev Trade effective leverage calculations
3
+ * @dev Mirrors contract's TradingCommonUtils.getTradeNewEffectiveLeverage
4
+ */
5
+ import { TradeEffectiveLeverageInput, TradeEffectiveLeverageResult } from "./types";
6
+ export type { TradeEffectiveLeverageInput, TradeEffectiveLeverageResult };
7
+ /**
8
+ * @dev Calculates the effective leverage of a trade accounting for unrealized PnL
9
+ * @dev Effective leverage increases when PnL is negative and decreases when positive
10
+ * @dev Mirrors contract's getTradeNewEffectiveLeverage function
11
+ * @param input Trade parameters including new position values
12
+ * @returns Effective leverage and related values
13
+ */
14
+ export declare const getTradeNewEffectiveLeverage: (input: TradeEffectiveLeverageInput) => TradeEffectiveLeverageResult;
15
+ /**
16
+ * @dev Simplified version for existing positions
17
+ * @param input Trade parameters
18
+ * @returns Effective leverage and related values
19
+ */
20
+ export declare const getTradeEffectiveLeverage: (input: TradeEffectiveLeverageInput) => TradeEffectiveLeverageResult;