jcc_hyper_tool 0.1.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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +394 -0
  3. package/dist/cli/confirm.d.ts +2 -0
  4. package/dist/cli/confirm.d.ts.map +1 -0
  5. package/dist/cli/confirm.js +22 -0
  6. package/dist/cli/confirm.js.map +1 -0
  7. package/dist/cli/index.d.ts +3 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +189 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/perpKline.d.ts +19 -0
  12. package/dist/cli/perpKline.d.ts.map +1 -0
  13. package/dist/cli/perpKline.js +39 -0
  14. package/dist/cli/perpKline.js.map +1 -0
  15. package/dist/cli/stateCli.d.ts +3 -0
  16. package/dist/cli/stateCli.d.ts.map +1 -0
  17. package/dist/cli/stateCli.js +158 -0
  18. package/dist/cli/stateCli.js.map +1 -0
  19. package/dist/cli/strategyCli.d.ts +3 -0
  20. package/dist/cli/strategyCli.d.ts.map +1 -0
  21. package/dist/cli/strategyCli.js +198 -0
  22. package/dist/cli/strategyCli.js.map +1 -0
  23. package/dist/cli/tradingCli.d.ts +3 -0
  24. package/dist/cli/tradingCli.d.ts.map +1 -0
  25. package/dist/cli/tradingCli.js +587 -0
  26. package/dist/cli/tradingCli.js.map +1 -0
  27. package/dist/cli/util.d.ts +28 -0
  28. package/dist/cli/util.d.ts.map +1 -0
  29. package/dist/cli/util.js +62 -0
  30. package/dist/cli/util.js.map +1 -0
  31. package/dist/core/config.d.ts +32 -0
  32. package/dist/core/config.d.ts.map +1 -0
  33. package/dist/core/config.js +101 -0
  34. package/dist/core/config.js.map +1 -0
  35. package/dist/core/errors.d.ts +9 -0
  36. package/dist/core/errors.d.ts.map +1 -0
  37. package/dist/core/errors.js +17 -0
  38. package/dist/core/errors.js.map +1 -0
  39. package/dist/core/hyperliquid/asset.d.ts +24 -0
  40. package/dist/core/hyperliquid/asset.d.ts.map +1 -0
  41. package/dist/core/hyperliquid/asset.js +88 -0
  42. package/dist/core/hyperliquid/asset.js.map +1 -0
  43. package/dist/core/hyperliquid/candles.d.ts +24 -0
  44. package/dist/core/hyperliquid/candles.d.ts.map +1 -0
  45. package/dist/core/hyperliquid/candles.js +113 -0
  46. package/dist/core/hyperliquid/candles.js.map +1 -0
  47. package/dist/core/hyperliquid/client.d.ts +36 -0
  48. package/dist/core/hyperliquid/client.d.ts.map +1 -0
  49. package/dist/core/hyperliquid/client.js +92 -0
  50. package/dist/core/hyperliquid/client.js.map +1 -0
  51. package/dist/core/hyperliquid/exchange.d.ts +14 -0
  52. package/dist/core/hyperliquid/exchange.d.ts.map +1 -0
  53. package/dist/core/hyperliquid/exchange.js +42 -0
  54. package/dist/core/hyperliquid/exchange.js.map +1 -0
  55. package/dist/core/hyperliquid/exchangeParse.d.ts +7 -0
  56. package/dist/core/hyperliquid/exchangeParse.d.ts.map +1 -0
  57. package/dist/core/hyperliquid/exchangeParse.js +44 -0
  58. package/dist/core/hyperliquid/exchangeParse.js.map +1 -0
  59. package/dist/core/hyperliquid/float.d.ts +6 -0
  60. package/dist/core/hyperliquid/float.d.ts.map +1 -0
  61. package/dist/core/hyperliquid/float.js +24 -0
  62. package/dist/core/hyperliquid/float.js.map +1 -0
  63. package/dist/core/hyperliquid/klineCoin.d.ts +10 -0
  64. package/dist/core/hyperliquid/klineCoin.d.ts.map +1 -0
  65. package/dist/core/hyperliquid/klineCoin.js +90 -0
  66. package/dist/core/hyperliquid/klineCoin.js.map +1 -0
  67. package/dist/core/hyperliquid/orders.d.ts +91 -0
  68. package/dist/core/hyperliquid/orders.d.ts.map +1 -0
  69. package/dist/core/hyperliquid/orders.js +116 -0
  70. package/dist/core/hyperliquid/orders.js.map +1 -0
  71. package/dist/core/hyperliquid/prefixedPerpCoin.d.ts +3 -0
  72. package/dist/core/hyperliquid/prefixedPerpCoin.d.ts.map +1 -0
  73. package/dist/core/hyperliquid/prefixedPerpCoin.js +10 -0
  74. package/dist/core/hyperliquid/prefixedPerpCoin.js.map +1 -0
  75. package/dist/core/hyperliquid/signed-exchange.d.ts +10 -0
  76. package/dist/core/hyperliquid/signed-exchange.d.ts.map +1 -0
  77. package/dist/core/hyperliquid/signed-exchange.js +23 -0
  78. package/dist/core/hyperliquid/signed-exchange.js.map +1 -0
  79. package/dist/core/hyperliquid/signing.d.ts +23 -0
  80. package/dist/core/hyperliquid/signing.d.ts.map +1 -0
  81. package/dist/core/hyperliquid/signing.js +65 -0
  82. package/dist/core/hyperliquid/signing.js.map +1 -0
  83. package/dist/core/hyperliquid/types.d.ts +11 -0
  84. package/dist/core/hyperliquid/types.d.ts.map +1 -0
  85. package/dist/core/hyperliquid/types.js +2 -0
  86. package/dist/core/hyperliquid/types.js.map +1 -0
  87. package/dist/core/hyperliquid/watchOrders.d.ts +10 -0
  88. package/dist/core/hyperliquid/watchOrders.d.ts.map +1 -0
  89. package/dist/core/hyperliquid/watchOrders.js +38 -0
  90. package/dist/core/hyperliquid/watchOrders.js.map +1 -0
  91. package/dist/core/state/bracketReconcile.d.ts +23 -0
  92. package/dist/core/state/bracketReconcile.d.ts.map +1 -0
  93. package/dist/core/state/bracketReconcile.js +297 -0
  94. package/dist/core/state/bracketReconcile.js.map +1 -0
  95. package/dist/core/state/cancelOpenPlan.d.ts +23 -0
  96. package/dist/core/state/cancelOpenPlan.d.ts.map +1 -0
  97. package/dist/core/state/cancelOpenPlan.js +126 -0
  98. package/dist/core/state/cancelOpenPlan.js.map +1 -0
  99. package/dist/core/state/gcTradeState.d.ts +13 -0
  100. package/dist/core/state/gcTradeState.d.ts.map +1 -0
  101. package/dist/core/state/gcTradeState.js +48 -0
  102. package/dist/core/state/gcTradeState.js.map +1 -0
  103. package/dist/core/state/gridReconcile.d.ts +46 -0
  104. package/dist/core/state/gridReconcile.d.ts.map +1 -0
  105. package/dist/core/state/gridReconcile.js +307 -0
  106. package/dist/core/state/gridReconcile.js.map +1 -0
  107. package/dist/core/state/intentFactory.d.ts +58 -0
  108. package/dist/core/state/intentFactory.d.ts.map +1 -0
  109. package/dist/core/state/intentFactory.js +95 -0
  110. package/dist/core/state/intentFactory.js.map +1 -0
  111. package/dist/core/state/present.d.ts +17 -0
  112. package/dist/core/state/present.d.ts.map +1 -0
  113. package/dist/core/state/present.js +100 -0
  114. package/dist/core/state/present.js.map +1 -0
  115. package/dist/core/state/runCancelOpen.d.ts +32 -0
  116. package/dist/core/state/runCancelOpen.d.ts.map +1 -0
  117. package/dist/core/state/runCancelOpen.js +101 -0
  118. package/dist/core/state/runCancelOpen.js.map +1 -0
  119. package/dist/core/state/runReconcile.d.ts +20 -0
  120. package/dist/core/state/runReconcile.d.ts.map +1 -0
  121. package/dist/core/state/runReconcile.js +248 -0
  122. package/dist/core/state/runReconcile.js.map +1 -0
  123. package/dist/core/state/schema.d.ts +1161 -0
  124. package/dist/core/state/schema.d.ts.map +1 -0
  125. package/dist/core/state/schema.js +151 -0
  126. package/dist/core/state/schema.js.map +1 -0
  127. package/dist/core/state/snapshot.d.ts +22 -0
  128. package/dist/core/state/snapshot.d.ts.map +1 -0
  129. package/dist/core/state/snapshot.js +115 -0
  130. package/dist/core/state/snapshot.js.map +1 -0
  131. package/dist/core/state/statePaths.d.ts +2 -0
  132. package/dist/core/state/statePaths.d.ts.map +1 -0
  133. package/dist/core/state/statePaths.js +7 -0
  134. package/dist/core/state/statePaths.js.map +1 -0
  135. package/dist/core/state/store.d.ts +12 -0
  136. package/dist/core/state/store.d.ts.map +1 -0
  137. package/dist/core/state/store.js +95 -0
  138. package/dist/core/state/store.js.map +1 -0
  139. package/dist/core/state/types.d.ts +40 -0
  140. package/dist/core/state/types.d.ts.map +1 -0
  141. package/dist/core/state/types.js +2 -0
  142. package/dist/core/state/types.js.map +1 -0
  143. package/dist/core/trading.d.ts +8 -0
  144. package/dist/core/trading.d.ts.map +1 -0
  145. package/dist/core/trading.js +22 -0
  146. package/dist/core/trading.js.map +1 -0
  147. package/dist/core/wallet.d.ts +3 -0
  148. package/dist/core/wallet.d.ts.map +1 -0
  149. package/dist/core/wallet.js +14 -0
  150. package/dist/core/wallet.js.map +1 -0
  151. package/dist/daemon/index.d.ts +3 -0
  152. package/dist/daemon/index.d.ts.map +1 -0
  153. package/dist/daemon/index.js +104 -0
  154. package/dist/daemon/index.js.map +1 -0
  155. package/dist/meta/version.d.ts +2 -0
  156. package/dist/meta/version.d.ts.map +1 -0
  157. package/dist/meta/version.js +12 -0
  158. package/dist/meta/version.js.map +1 -0
  159. package/dist/strategies/grid.d.ts +46 -0
  160. package/dist/strategies/grid.d.ts.map +1 -0
  161. package/dist/strategies/grid.js +101 -0
  162. package/dist/strategies/grid.js.map +1 -0
  163. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/state/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ import { z } from "zod";
2
+ const BracketPhaseSchema = z.enum([
3
+ "planned",
4
+ "entry_pending",
5
+ "entry_partial",
6
+ "entry_filled",
7
+ "protection_active",
8
+ "tp_filled",
9
+ "sl_filled",
10
+ "closed",
11
+ "cancelled",
12
+ "expired",
13
+ "error",
14
+ ]);
15
+ const GridLegPhaseSchema = z.enum(["pending", "open", "partial", "filled", "cancelled"]);
16
+ const GridLegArmSchema = z.object({
17
+ fillOid: z.number().int().positive(),
18
+ fillPx: z.number(),
19
+ });
20
+ const GridLegSchema = z.object({
21
+ index: z.number().int().nonnegative(),
22
+ px: z.number(),
23
+ isBuy: z.boolean(),
24
+ oid: z.number().int().positive().optional(),
25
+ legPhase: GridLegPhaseSchema,
26
+ /** Remaining size on book when last observed */
27
+ lastSz: z.number().optional(),
28
+ lastOrigSz: z.number().optional(),
29
+ /** Counter order armed for next reconcile (fill already detected). */
30
+ arm: GridLegArmSchema.optional(),
31
+ });
32
+ const BracketIntentSchema = z.object({
33
+ kind: z.literal("bracket"),
34
+ id: z.string().min(1),
35
+ createdAtMs: z.number(),
36
+ updatedAtMs: z.number(),
37
+ coin: z.string().min(1),
38
+ dex: z.string().optional(),
39
+ network: z.string().optional(),
40
+ entrySide: z.enum(["buy", "sell"]),
41
+ entryLimitPx: z.number(),
42
+ entrySz: z.number().positive(),
43
+ tif: z.enum(["Gtc", "Ioc", "Alo"]),
44
+ entryReduceOnly: z.boolean().optional(),
45
+ tpTriggerPx: z.number().positive(),
46
+ slTriggerPx: z.number().positive(),
47
+ tpslIsMarket: z.boolean(),
48
+ tpslLimitPx: z.number().positive().optional(),
49
+ /** reduce-only on TP/SL (default true) */
50
+ protectionReduceOnly: z.boolean().default(true),
51
+ phase: BracketPhaseSchema,
52
+ entryOid: z.number().int().positive().optional(),
53
+ tpOid: z.number().int().positive().optional(),
54
+ slOid: z.number().int().positive().optional(),
55
+ cancelledSlAfterTp: z.boolean().optional(),
56
+ cancelledTpAfterSl: z.boolean().optional(),
57
+ protectionPlaced: z.boolean().optional(),
58
+ /** User/system requested unwind of working entry */
59
+ cancelRequested: z.boolean().optional(),
60
+ expiresAtMs: z.number().optional(),
61
+ lastError: z.string().optional(),
62
+ /**
63
+ * Ledger of successfully executed logical actions (idempotency for reconcile).
64
+ * Examples: "place_entry", "place_protection", "cancel_sl_after_tp"
65
+ */
66
+ dedupeKeys: z.array(z.string()).optional(),
67
+ });
68
+ const GridIntentSchema = z.object({
69
+ kind: z.literal("grid"),
70
+ id: z.string().min(1),
71
+ createdAtMs: z.number(),
72
+ updatedAtMs: z.number(),
73
+ coin: z.string().min(1),
74
+ dex: z.string().optional(),
75
+ network: z.string().optional(),
76
+ lower: z.number(),
77
+ upper: z.number(),
78
+ grids: z.number().int().positive(),
79
+ orderSz: z.number().positive(),
80
+ bias: z.enum(["symmetric", "long", "short"]),
81
+ tif: z.enum(["Gtc", "Ioc", "Alo"]),
82
+ reduceOnly: z.boolean(),
83
+ maxOrders: z.number().int().positive().optional(),
84
+ /**
85
+ * When set (>0), enables replenishment: after a full fill, counter limit = **that leg's limit px**
86
+ * (`leg.px`, not VWAP) offset by this amount — buy leg → sell at legPx + gap; sell leg → buy at legPx − gap.
87
+ * Independent of grid step: e.g. 50-wide rungs with 100 replenish band.
88
+ */
89
+ replenishGapPx: z.number().positive().optional(),
90
+ /** Idempotency for grid replenishment (plan:/done: prefixes, see mergeGridReplenishDedupe). */
91
+ replenishDedupeKeys: z.array(z.string()).optional(),
92
+ legs: z.array(GridLegSchema),
93
+ });
94
+ const SingleLimitIntentSchema = z.object({
95
+ kind: z.literal("single_limit"),
96
+ id: z.string().min(1),
97
+ createdAtMs: z.number(),
98
+ updatedAtMs: z.number(),
99
+ coin: z.string().min(1),
100
+ dex: z.string().optional(),
101
+ entrySide: z.enum(["buy", "sell"]),
102
+ limitPx: z.number(),
103
+ sz: z.number().positive(),
104
+ tif: z.enum(["Gtc", "Ioc", "Alo"]),
105
+ reduceOnly: z.boolean(),
106
+ oid: z.number().int().positive().optional(),
107
+ });
108
+ const StandaloneTpslIntentSchema = z.object({
109
+ kind: z.literal("standalone_tpsl"),
110
+ id: z.string().min(1),
111
+ createdAtMs: z.number(),
112
+ updatedAtMs: z.number(),
113
+ coin: z.string().min(1),
114
+ dex: z.string().optional(),
115
+ side: z.enum(["buy", "sell"]),
116
+ sz: z.number(),
117
+ triggerPx: z.number().positive(),
118
+ tpsl: z.enum(["tp", "sl"]),
119
+ isMarket: z.boolean(),
120
+ limitPx: z.number().positive().optional(),
121
+ reduceOnly: z.boolean(),
122
+ oid: z.number().int().positive().optional(),
123
+ });
124
+ export const IntentRecordSchema = z.discriminatedUnion("kind", [
125
+ BracketIntentSchema,
126
+ GridIntentSchema,
127
+ SingleLimitIntentSchema,
128
+ StandaloneTpslIntentSchema,
129
+ ]);
130
+ const StateEventSchema = z.object({
131
+ t: z.number(),
132
+ intentId: z.string(),
133
+ type: z.string(),
134
+ message: z.string().optional(),
135
+ data: z.record(z.string(), z.unknown()).optional(),
136
+ });
137
+ export const TradeStateFileSchema = z.object({
138
+ version: z.literal(1),
139
+ updatedAtMs: z.number(),
140
+ intents: z.record(z.string(), IntentRecordSchema),
141
+ events: z.array(StateEventSchema),
142
+ });
143
+ export function createEmptyTradeState(nowMs) {
144
+ return {
145
+ version: 1,
146
+ updatedAtMs: nowMs,
147
+ intents: {},
148
+ events: [],
149
+ };
150
+ }
151
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/state/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { JsonValue } from "../hyperliquid/types.js";
2
+ export type NormalizedOpenOrder = {
3
+ oid: number;
4
+ coin: string;
5
+ side: "buy" | "sell";
6
+ /** Remaining size (string decimal from API) */
7
+ szWire: string;
8
+ reduceOnly: boolean;
9
+ /** True if wire shape suggests trigger order */
10
+ isTrigger: boolean;
11
+ };
12
+ export declare function normalizeOpenOrders(snapshot: JsonValue): NormalizedOpenOrder[];
13
+ export declare function indexOpenOrdersByOid(rows: NormalizedOpenOrder[]): Map<number, NormalizedOpenOrder>;
14
+ /**
15
+ * Signed position size from clearinghouseState (best-effort).
16
+ * Positive = long, negative = short for standard perps display.
17
+ */
18
+ export declare function signedPositionSizeForCoin(chState: JsonValue, coin: string): number | undefined;
19
+ export declare function gridSummaryCounts(legs: Array<{
20
+ legPhase: string;
21
+ }>): Record<string, number>;
22
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/core/state/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAeF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,GAAG,mBAAmB,EAAE,CA+C9E;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,mBAAmB,EAAE,GAC1B,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAMlC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8B9F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa3F"}
@@ -0,0 +1,115 @@
1
+ function parseSide(raw) {
2
+ if (raw === true || raw === "B" || raw === "b" || raw === "Buy") {
3
+ return "buy";
4
+ }
5
+ if (raw === false || raw === "A" || raw === "a" || raw === "Sell" || raw === "sell") {
6
+ return "sell";
7
+ }
8
+ if (raw === "buy" || raw === "sell") {
9
+ return raw;
10
+ }
11
+ return undefined;
12
+ }
13
+ export function normalizeOpenOrders(snapshot) {
14
+ if (!Array.isArray(snapshot)) {
15
+ return [];
16
+ }
17
+ const out = [];
18
+ for (const item of snapshot) {
19
+ if (typeof item !== "object" || item === null) {
20
+ continue;
21
+ }
22
+ const o = item;
23
+ const oid = o.oid;
24
+ if (typeof oid !== "number" || !Number.isFinite(oid)) {
25
+ continue;
26
+ }
27
+ const coin = o.coin;
28
+ if (typeof coin !== "string") {
29
+ continue;
30
+ }
31
+ const side = parseSide(o.side);
32
+ if (!side) {
33
+ continue;
34
+ }
35
+ const szRaw = o.sz;
36
+ const szWire = typeof szRaw === "string" ? szRaw : String(szRaw ?? "0");
37
+ const ro = o.reduceOnly;
38
+ const reduceOnly = ro === true || ro === "true";
39
+ let isTrigger = false;
40
+ const order = o.order;
41
+ if (typeof order === "object" && order !== null) {
42
+ const ot = order.orderType;
43
+ if (typeof ot === "string" && ot.toLowerCase().includes("trigger")) {
44
+ isTrigger = true;
45
+ }
46
+ }
47
+ const limit = o.limitPx;
48
+ const trigger = o.triggerPx ?? o.triggerCondition;
49
+ if (trigger !== undefined && trigger !== null) {
50
+ isTrigger = true;
51
+ }
52
+ if (limit === undefined && o.triggerPx !== undefined) {
53
+ isTrigger = true;
54
+ }
55
+ out.push({ oid, coin, side, szWire, reduceOnly, isTrigger });
56
+ }
57
+ return out;
58
+ }
59
+ export function indexOpenOrdersByOid(rows) {
60
+ const m = new Map();
61
+ for (const r of rows) {
62
+ m.set(r.oid, r);
63
+ }
64
+ return m;
65
+ }
66
+ /**
67
+ * Signed position size from clearinghouseState (best-effort).
68
+ * Positive = long, negative = short for standard perps display.
69
+ */
70
+ export function signedPositionSizeForCoin(chState, coin) {
71
+ if (typeof chState !== "object" || chState === null) {
72
+ return undefined;
73
+ }
74
+ const assetPositions = chState.assetPositions;
75
+ if (!Array.isArray(assetPositions)) {
76
+ return undefined;
77
+ }
78
+ for (const ap of assetPositions) {
79
+ if (typeof ap !== "object" || ap === null) {
80
+ continue;
81
+ }
82
+ const position = ap.position;
83
+ if (typeof position !== "object" || position === null) {
84
+ continue;
85
+ }
86
+ const p = position;
87
+ if (p.coin !== coin) {
88
+ continue;
89
+ }
90
+ const szi = p.szi;
91
+ if (typeof szi === "string") {
92
+ const n = Number(szi);
93
+ return Number.isFinite(n) ? n : undefined;
94
+ }
95
+ if (typeof szi === "number" && Number.isFinite(szi)) {
96
+ return szi;
97
+ }
98
+ }
99
+ return undefined;
100
+ }
101
+ export function gridSummaryCounts(legs) {
102
+ const acc = {
103
+ pending: 0,
104
+ open: 0,
105
+ partial: 0,
106
+ filled: 0,
107
+ cancelled: 0,
108
+ };
109
+ for (const l of legs) {
110
+ const k = l.legPhase;
111
+ acc[k] = (acc[k] ?? 0) + 1;
112
+ }
113
+ return acc;
114
+ }
115
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/core/state/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function defaultTradeStateFilePath(baseHome?: string): string;
2
+ //# sourceMappingURL=statePaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statePaths.d.ts","sourceRoot":"","sources":["../../../src/core/state/statePaths.ts"],"names":[],"mappings":"AAGA,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnE"}
@@ -0,0 +1,7 @@
1
+ import { homedir } from "node:os";
2
+ import path from "node:path";
3
+ export function defaultTradeStateFilePath(baseHome) {
4
+ const h = baseHome ?? homedir();
5
+ return path.join(h, ".jcc_hyper_tool", "trade-state.json");
6
+ }
7
+ //# sourceMappingURL=statePaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statePaths.js","sourceRoot":"","sources":["../../../src/core/state/statePaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,yBAAyB,CAAC,QAAiB;IACzD,MAAM,CAAC,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAC;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type IntentRecord, type TradeStateFile } from "./schema.js";
2
+ export declare function readTradeStateFile(filePath: string): Promise<TradeStateFile>;
3
+ export declare function readOrCreateTradeStateFile(filePath: string, nowMs: number): Promise<TradeStateFile>;
4
+ /**
5
+ * Atomic write: write temp in same directory, then rename over target.
6
+ */
7
+ export declare function writeTradeStateFileAtomic(filePath: string, state: TradeStateFile): Promise<void>;
8
+ export declare function appendEventsAndWriteAtomic(filePath: string, state: TradeStateFile, events: TradeStateFile["events"]): Promise<TradeStateFile>;
9
+ export declare function upsertIntentInStateFileAtomic(filePath: string, intent: IntentRecord, newEvents: TradeStateFile["events"], nowMs: number): Promise<TradeStateFile>;
10
+ /** Test helper: best-effort cleanup tmp if rename failed mid-flight */
11
+ export declare function unsafeRemoveIfExists(p: string): Promise<void>;
12
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/core/state/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAkBrB,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwBlF;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CASzB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAQzB;AAED,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,EACnC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED,uEAAuE;AACvE,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnE"}
@@ -0,0 +1,95 @@
1
+ import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { ConfigError } from "../errors.js";
4
+ import { createEmptyTradeState, TradeStateFileSchema, } from "./schema.js";
5
+ const writeChains = new Map();
6
+ function chainForPath(filePath, task) {
7
+ const prev = writeChains.get(filePath) ?? Promise.resolve();
8
+ const next = prev.then(task, task);
9
+ writeChains.set(filePath, next.finally(() => {
10
+ if (writeChains.get(filePath) === next) {
11
+ writeChains.delete(filePath);
12
+ }
13
+ }));
14
+ return next;
15
+ }
16
+ export async function readTradeStateFile(filePath) {
17
+ let raw;
18
+ try {
19
+ raw = await readFile(filePath, "utf8");
20
+ }
21
+ catch (e) {
22
+ const err = e;
23
+ if (err?.code === "ENOENT") {
24
+ throw new ConfigError(`State file not found: ${filePath}`);
25
+ }
26
+ throw new ConfigError(`Unable to read state file ${filePath}: ${err.message}`);
27
+ }
28
+ let parsed;
29
+ try {
30
+ parsed = JSON.parse(raw);
31
+ }
32
+ catch {
33
+ throw new ConfigError(`State file is not valid JSON: ${filePath}`);
34
+ }
35
+ const r = TradeStateFileSchema.safeParse(parsed);
36
+ if (!r.success) {
37
+ throw new ConfigError(`State file failed schema validation: ${filePath}\n${r.error.message}`);
38
+ }
39
+ return r.data;
40
+ }
41
+ export async function readOrCreateTradeStateFile(filePath, nowMs) {
42
+ try {
43
+ return await readTradeStateFile(filePath);
44
+ }
45
+ catch (e) {
46
+ if (e instanceof ConfigError && e.message.includes("not found")) {
47
+ return createEmptyTradeState(nowMs);
48
+ }
49
+ throw e;
50
+ }
51
+ }
52
+ /**
53
+ * Atomic write: write temp in same directory, then rename over target.
54
+ */
55
+ export async function writeTradeStateFileAtomic(filePath, state) {
56
+ const dir = path.dirname(filePath);
57
+ const base = path.basename(filePath);
58
+ const tmp = path.join(dir, `.${base}.${process.pid}.${Date.now()}.tmp`);
59
+ const body = `${JSON.stringify(state, null, 2)}\n`;
60
+ await chainForPath(filePath, async () => {
61
+ await mkdir(dir, { recursive: true });
62
+ await writeFile(tmp, body, "utf8");
63
+ await rename(tmp, filePath);
64
+ });
65
+ }
66
+ export async function appendEventsAndWriteAtomic(filePath, state, events) {
67
+ const next = {
68
+ ...state,
69
+ updatedAtMs: Date.now(),
70
+ events: [...state.events, ...events],
71
+ };
72
+ await writeTradeStateFileAtomic(filePath, next);
73
+ return next;
74
+ }
75
+ export async function upsertIntentInStateFileAtomic(filePath, intent, newEvents, nowMs) {
76
+ const cur = await readOrCreateTradeStateFile(filePath, nowMs);
77
+ const next = {
78
+ version: 1,
79
+ updatedAtMs: nowMs,
80
+ intents: { ...cur.intents, [intent.id]: intent },
81
+ events: [...cur.events, ...newEvents],
82
+ };
83
+ await writeTradeStateFileAtomic(filePath, next);
84
+ return next;
85
+ }
86
+ /** Test helper: best-effort cleanup tmp if rename failed mid-flight */
87
+ export async function unsafeRemoveIfExists(p) {
88
+ try {
89
+ await unlink(p);
90
+ }
91
+ catch {
92
+ /* ignore */
93
+ }
94
+ }
95
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/state/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type BracketPhase = "planned" | "entry_pending" | "entry_partial" | "entry_filled" | "protection_active" | "tp_filled" | "sl_filled" | "closed" | "cancelled" | "expired" | "error";
2
+ export type GridLegPhase = "pending" | "open" | "partial" | "filled" | "cancelled";
3
+ export type ReconcileAction = {
4
+ kind: "place_entry_limit";
5
+ intentId: string;
6
+ } | {
7
+ kind: "place_protection_pair";
8
+ intentId: string;
9
+ } | {
10
+ kind: "cancel_order";
11
+ intentId: string;
12
+ coin: string;
13
+ dex?: string;
14
+ oid: number;
15
+ reason: string;
16
+ } | {
17
+ kind: "cancel_intent_entry";
18
+ intentId: string;
19
+ coin: string;
20
+ dex?: string;
21
+ oid: number;
22
+ } | {
23
+ kind: "place_grid_counter";
24
+ intentId: string;
25
+ legIndex: number;
26
+ replenishDedupeKey: string;
27
+ } | {
28
+ kind: "place_grid_pending_leg";
29
+ intentId: string;
30
+ legIndex: number;
31
+ replenishDedupeKey: string;
32
+ };
33
+ export type StateEventRow = {
34
+ t: number;
35
+ intentId: string;
36
+ type: string;
37
+ message?: string;
38
+ data?: Record<string, unknown>;
39
+ };
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/state/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,eAAe,GACf,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,WAAW,GACX,WAAW,GACX,QAAQ,GACR,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEnF,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/state/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { Wallet } from "ethers";
2
+ import type { EffectiveConfig } from "./config.js";
3
+ export type TradingContext = {
4
+ wallet: Wallet;
5
+ userAddress: `0x${string}`;
6
+ };
7
+ export declare function requireTraderWallet(cfg: EffectiveConfig): TradingContext;
8
+ //# sourceMappingURL=trading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trading.d.ts","sourceRoot":"","sources":["../../src/core/trading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,cAAc,CAuBxE"}
@@ -0,0 +1,22 @@
1
+ import { Wallet } from "ethers";
2
+ import { ConfigError } from "./errors.js";
3
+ import { normalizePrivateKeyHex } from "./wallet.js";
4
+ export function requireTraderWallet(cfg) {
5
+ const pkRaw = process.env.JCC_HYPER_WALLET_PRIVATE_KEY ?? process.env.HYPERLIQUID_PRIVATE_KEY;
6
+ if (!pkRaw?.trim()) {
7
+ throw new ConfigError("Trading requires HYPERLIQUID_PRIVATE_KEY or JCC_HYPER_WALLET_PRIVATE_KEY set in your environment.");
8
+ }
9
+ let wallet;
10
+ try {
11
+ wallet = new Wallet(normalizePrivateKeyHex(pkRaw));
12
+ }
13
+ catch {
14
+ throw new ConfigError("Invalid private key material in environment.");
15
+ }
16
+ const addr = wallet.address;
17
+ if (cfg.userAddress && cfg.userAddress.toLowerCase() !== addr.toLowerCase()) {
18
+ throw new ConfigError("Private key address does not match HYPERLIQUID_ADDRESS / JCC_HYPER_WALLET_ADDRESS when both are set.");
19
+ }
20
+ return { wallet, userAddress: addr };
21
+ }
22
+ //# sourceMappingURL=trading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/core/trading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAOrD,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC9F,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,WAAW,CACnB,mGAAmG,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,8CAA8C,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAwB,CAAC;IAC7C,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5E,MAAM,IAAI,WAAW,CACnB,sGAAsG,CACvG,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function normalizePrivateKeyHex(raw: string): string;
2
+ export declare function addressFromPrivateKey(privateKey: string): `0x${string}`;
3
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/core/wallet.ts"],"names":[],"mappings":"AAEA,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAIvE"}
@@ -0,0 +1,14 @@
1
+ import { Wallet } from "ethers";
2
+ export function normalizePrivateKeyHex(raw) {
3
+ const trimmed = raw.trim();
4
+ if (trimmed.startsWith("0x")) {
5
+ return trimmed;
6
+ }
7
+ return `0x${trimmed}`;
8
+ }
9
+ export function addressFromPrivateKey(privateKey) {
10
+ const key = normalizePrivateKeyHex(privateKey);
11
+ const w = new Wallet(key);
12
+ return w.address;
13
+ }
14
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/core/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,OAAO,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,MAAM,GAAG,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,CAAC,OAAwB,CAAC;AACpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":""}