bandkit 1.0.4 → 1.0.6
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 +17 -14
- package/dist/AnimatedNumber.d.ts +10 -0
- package/dist/AnimatedNumber.d.ts.map +1 -0
- package/dist/AnimatedNumber.js +35 -0
- package/dist/AnimatedNumber.js.map +1 -0
- package/dist/BotDecisionPanel.d.ts.map +1 -1
- package/dist/BotDecisionPanel.js +15 -3
- package/dist/BotDecisionPanel.js.map +1 -1
- package/dist/ContractEventFeed.d.ts.map +1 -1
- package/dist/ContractEventFeed.js +14 -1
- package/dist/ContractEventFeed.js.map +1 -1
- package/dist/GasBadge.d.ts.map +1 -1
- package/dist/GasBadge.js +10 -2
- package/dist/GasBadge.js.map +1 -1
- package/dist/OrderBookWidget.d.ts.map +1 -1
- package/dist/OrderBookWidget.js +27 -3
- package/dist/OrderBookWidget.js.map +1 -1
- package/dist/RegimeBadge.d.ts.map +1 -1
- package/dist/RegimeBadge.js +3 -1
- package/dist/RegimeBadge.js.map +1 -1
- package/dist/Skeleton.d.ts +15 -0
- package/dist/Skeleton.d.ts.map +1 -0
- package/dist/Skeleton.js +26 -0
- package/dist/Skeleton.js.map +1 -0
- package/dist/StrategyValueSparkline.d.ts +9 -0
- package/dist/StrategyValueSparkline.d.ts.map +1 -0
- package/dist/StrategyValueSparkline.js +99 -0
- package/dist/StrategyValueSparkline.js.map +1 -0
- package/dist/TradeTape.d.ts.map +1 -1
- package/dist/TradeTape.js +20 -7
- package/dist/TradeTape.js.map +1 -1
- package/dist/decisionEngine.d.ts.map +1 -1
- package/dist/decisionEngine.js +51 -25
- package/dist/decisionEngine.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/useStrategyValueHistory.d.ts +24 -0
- package/dist/useStrategyValueHistory.d.ts.map +1 -0
- package/dist/useStrategyValueHistory.js +112 -0
- package/dist/useStrategyValueHistory.js.map +1 -0
- package/package.json +1 -1
- package/scripts/test-decision-stream.cjs +38 -18
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useEthPriceTicker } from "./useEthPriceTicker.js";
|
|
4
|
+
import { useStrategyValueHistory } from "./useStrategyValueHistory.js";
|
|
5
|
+
import { AnimatedNumber } from "./AnimatedNumber.js";
|
|
6
|
+
import { Skeleton } from "./Skeleton.js";
|
|
7
|
+
const palette = {
|
|
8
|
+
bg: "#0a0a0a",
|
|
9
|
+
surface: "#111113",
|
|
10
|
+
border: "#1f1f23",
|
|
11
|
+
text: "#f5f5f7",
|
|
12
|
+
textMuted: "#9ca3af",
|
|
13
|
+
textDim: "#52525b",
|
|
14
|
+
up: "#10b981",
|
|
15
|
+
down: "#ef4444",
|
|
16
|
+
flat: "#9ca3af"
|
|
17
|
+
};
|
|
18
|
+
const usdFormatter = new Intl.NumberFormat("en-US", {
|
|
19
|
+
currency: "USD",
|
|
20
|
+
maximumFractionDigits: 2,
|
|
21
|
+
minimumFractionDigits: 2,
|
|
22
|
+
style: "currency"
|
|
23
|
+
});
|
|
24
|
+
export function StrategyValueSparkline({ className, title = "Strategy Value", width = 220, height = 64, ...hookOptions }) {
|
|
25
|
+
const history = useStrategyValueHistory(hookOptions);
|
|
26
|
+
const ethPrice = useEthPriceTicker();
|
|
27
|
+
const hasContract = Boolean(hookOptions.strategyContractAddress);
|
|
28
|
+
const hasData = history.samples.length >= 2;
|
|
29
|
+
const tone = history.changeEth > 0.0000005
|
|
30
|
+
? palette.up
|
|
31
|
+
: history.changeEth < -0.0000005
|
|
32
|
+
? palette.down
|
|
33
|
+
: palette.flat;
|
|
34
|
+
const currentUsd = ethPrice.price && Number.isFinite(ethPrice.price)
|
|
35
|
+
? history.currentTotalEth * ethPrice.price
|
|
36
|
+
: null;
|
|
37
|
+
const changeUsd = ethPrice.price && Number.isFinite(ethPrice.price) ? history.changeEth * ethPrice.price : null;
|
|
38
|
+
const path = useMemo(() => buildPath(history.samples.map((s) => s.totalEth), width, height), [
|
|
39
|
+
history.samples,
|
|
40
|
+
width,
|
|
41
|
+
height
|
|
42
|
+
]);
|
|
43
|
+
const areaPath = useMemo(() => buildAreaPath(history.samples.map((s) => s.totalEth), width, height), [history.samples, width, height]);
|
|
44
|
+
return (_jsxs("section", { className: className, style: {
|
|
45
|
+
background: palette.bg,
|
|
46
|
+
border: `1px solid ${palette.border}`,
|
|
47
|
+
borderRadius: 14,
|
|
48
|
+
boxShadow: "0 20px 60px rgba(0, 0, 0, 0.55)",
|
|
49
|
+
color: palette.text,
|
|
50
|
+
display: "grid",
|
|
51
|
+
fontFamily: "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
|
|
52
|
+
gap: 14,
|
|
53
|
+
maxWidth: 420,
|
|
54
|
+
padding: 18
|
|
55
|
+
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx("span", { style: { color: palette.textDim, fontSize: 11 }, children: hasData ? `${history.samples.length} pts` : hasContract ? "collecting" : "no contract" })] }), !hasContract ? (_jsx("div", { style: {
|
|
56
|
+
color: palette.textDim,
|
|
57
|
+
fontSize: 12,
|
|
58
|
+
padding: "20px 4px",
|
|
59
|
+
textAlign: "center"
|
|
60
|
+
}, children: "Deploy a strategy contract to start tracking value." })) : !hasData ? (_jsxs("div", { style: { display: "grid", gap: 10 }, children: [_jsx(Skeleton, { width: 140, height: 22 }), _jsx(Skeleton, { width: 80, height: 12 }), _jsx(Skeleton, { width: "100%", height: height, borderRadius: 8 })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: { alignItems: "baseline", display: "flex", gap: 10, justifyContent: "space-between" }, children: [_jsxs("div", { style: { display: "grid", gap: 2 }, children: [_jsx("strong", { style: { fontSize: 22, fontWeight: 700, lineHeight: 1.1 }, children: _jsx(AnimatedNumber, { value: history.currentTotalEth, format: (n) => `${n.toFixed(6)} ETH` }) }), currentUsd !== null ? (_jsx("span", { style: { color: palette.textMuted, fontSize: 12 }, children: _jsx(AnimatedNumber, { value: currentUsd, format: (n) => usdFormatter.format(n) }) })) : null] }), _jsxs("div", { style: { display: "grid", gap: 2, textAlign: "right" }, children: [_jsxs("strong", { style: { color: tone, fontSize: 13, fontWeight: 700 }, children: [history.changeEth >= 0 ? "+" : "", history.changeEth.toFixed(6), " ETH"] }), _jsxs("span", { style: { color: palette.textDim, fontSize: 11 }, children: [history.changePct === null
|
|
61
|
+
? "—"
|
|
62
|
+
: `${history.changePct >= 0 ? "+" : ""}${history.changePct.toFixed(2)}% since start`, changeUsd !== null
|
|
63
|
+
? ` · ${changeUsd >= 0 ? "+" : ""}${usdFormatter.format(changeUsd)}`
|
|
64
|
+
: ""] })] })] }), _jsxs("svg", { "aria-hidden": true, height: height, style: {
|
|
65
|
+
background: palette.surface,
|
|
66
|
+
border: `1px solid ${palette.border}`,
|
|
67
|
+
borderRadius: 8,
|
|
68
|
+
display: "block",
|
|
69
|
+
width: "100%"
|
|
70
|
+
}, viewBox: `0 0 ${width} ${height}`, width: "100%", children: [areaPath ? _jsx("path", { d: areaPath, fill: `${tone}1f` }) : null, path ? (_jsx("path", { d: path, fill: "none", stroke: tone, strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, style: { transition: "stroke 320ms ease" } })) : null] }), _jsx("div", { style: {
|
|
71
|
+
color: palette.textDim,
|
|
72
|
+
fontSize: 10,
|
|
73
|
+
lineHeight: 1.4
|
|
74
|
+
}, children: "Tracks contract balance + allocated value over time. Not realised PnL \u2014 actual trade outcomes occur off-chain at the strategyWallet." })] }))] }));
|
|
75
|
+
}
|
|
76
|
+
function buildPath(values, width, height) {
|
|
77
|
+
if (values.length < 2)
|
|
78
|
+
return null;
|
|
79
|
+
const min = Math.min(...values);
|
|
80
|
+
const max = Math.max(...values);
|
|
81
|
+
const range = max - min || max || 1;
|
|
82
|
+
const stepX = width / (values.length - 1);
|
|
83
|
+
const points = values.map((v, i) => {
|
|
84
|
+
const x = i * stepX;
|
|
85
|
+
const norm = (v - min) / range;
|
|
86
|
+
const y = height - norm * (height - 8) - 4;
|
|
87
|
+
return `${x.toFixed(2)},${y.toFixed(2)}`;
|
|
88
|
+
});
|
|
89
|
+
return `M${points.join(" L")}`;
|
|
90
|
+
}
|
|
91
|
+
function buildAreaPath(values, width, height) {
|
|
92
|
+
if (values.length < 2)
|
|
93
|
+
return null;
|
|
94
|
+
const line = buildPath(values, width, height);
|
|
95
|
+
if (!line)
|
|
96
|
+
return null;
|
|
97
|
+
return `${line} L${width},${height} L0,${height} Z`;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=StrategyValueSparkline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrategyValueSparkline.js","sourceRoot":"","sources":["../src/StrategyValueSparkline.tsx"],"names":[],"mappings":"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"}
|
package/dist/TradeTape.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradeTape.d.ts","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"TradeTape.d.ts","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAQvF,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA8BF,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,KAAuB,EAAE,IAAS,EAAE,GAAG,WAAW,EAAE,EAAE,cAAc,2CAmE1G"}
|
package/dist/TradeTape.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useBinanceTrades } from "./useBinanceTrades.js";
|
|
3
|
+
import { Skeleton } from "./Skeleton.js";
|
|
4
|
+
const ROW_FADE_KEYFRAMES = `@keyframes bandkitTradeRow {
|
|
5
|
+
from { opacity: 0; transform: translateY(-4px); }
|
|
6
|
+
to { opacity: 1; transform: translateY(0); }
|
|
7
|
+
}`;
|
|
3
8
|
const palette = {
|
|
4
9
|
bg: "#0a0a0a",
|
|
5
10
|
border: "#1f1f23",
|
|
@@ -39,16 +44,24 @@ export function TradeTape({ className, title = "Recent Trades", rows = 20, ...ho
|
|
|
39
44
|
gap: 10,
|
|
40
45
|
maxWidth: 360,
|
|
41
46
|
padding: 18
|
|
42
|
-
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: status, symbol: symbol })] }), _jsx(HeaderRow, {}), _jsx("
|
|
43
|
-
|
|
44
|
-
return (_jsxs("div", { style: {
|
|
47
|
+
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: status, symbol: symbol })] }), _jsx(HeaderRow, {}), _jsx("style", { children: ROW_FADE_KEYFRAMES }), _jsx("div", { style: { display: "grid", gap: 1, maxHeight: 360, overflow: "hidden" }, children: trades.length === 0
|
|
48
|
+
? Array.from({ length: Math.min(rows, 12) }).map((_, i) => (_jsxs("div", { style: {
|
|
45
49
|
display: "grid",
|
|
46
|
-
|
|
47
|
-
fontVariantNumeric: "tabular-nums",
|
|
50
|
+
gap: 6,
|
|
48
51
|
gridTemplateColumns: "1fr 1fr 56px",
|
|
49
52
|
padding: "3px 4px"
|
|
50
|
-
}, children: [_jsx(
|
|
51
|
-
|
|
53
|
+
}, children: [_jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 })] }, `sk-${i}`)))
|
|
54
|
+
: trades.map((trade) => {
|
|
55
|
+
const color = trade.side === "buy" ? palette.buy : palette.sell;
|
|
56
|
+
return (_jsxs("div", { style: {
|
|
57
|
+
animation: "bandkitTradeRow 280ms ease-out",
|
|
58
|
+
display: "grid",
|
|
59
|
+
fontSize: 12,
|
|
60
|
+
fontVariantNumeric: "tabular-nums",
|
|
61
|
+
gridTemplateColumns: "1fr 1fr 56px",
|
|
62
|
+
padding: "3px 4px"
|
|
63
|
+
}, children: [_jsx("span", { style: { color, fontWeight: 600 }, children: priceFormatter.format(trade.price) }), _jsx("span", { style: { color: palette.text, textAlign: "right" }, children: sizeFormatter.format(trade.size) }), _jsx("span", { style: { color: palette.textDim, textAlign: "right" }, children: timeAgo(trade.timestamp) })] }, trade.id));
|
|
64
|
+
}) })] }));
|
|
52
65
|
}
|
|
53
66
|
function HeaderRow() {
|
|
54
67
|
const cell = {
|
package/dist/TradeTape.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradeTape.js","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAgC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"TradeTape.js","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAgC,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,kBAAkB,GAAG;;;EAGzB,CAAC;AAQH,MAAM,OAAO,GAAG;IACd,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IACpD,qBAAqB,EAAE,CAAC;IACxB,qBAAqB,EAAE,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IACnD,qBAAqB,EAAE,CAAC;IACxB,qBAAqB,EAAE,CAAC;CACzB,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,EAAU;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,OAAO,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,eAAe,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,WAAW,EAAkB;IACzG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzF,OAAO,CACL,mBACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,MAAM,EAAE,aAAa,OAAO,CAAC,MAAM,EAAE;YACrC,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,iCAAiC;YAC5C,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,0DAA0D;YACtE,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,EAAE;SACZ,aAED,kBAAQ,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,aACvF,aAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,YAAG,KAAK,GAAM,EAC9F,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,IACtC,EAET,KAAC,SAAS,KAAG,EAEb,0BAAQ,kBAAkB,GAAS,EACnC,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,YACxE,MAAM,CAAC,MAAM,KAAK,CAAC;oBAClB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvD,eAEE,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,GAAG,EAAE,CAAC;4BACN,mBAAmB,EAAE,cAAc;4BACnC,OAAO,EAAE,SAAS;yBACnB,aAED,KAAC,QAAQ,IAAC,MAAM,EAAE,EAAE,GAAI,EACxB,KAAC,QAAQ,IAAC,MAAM,EAAE,EAAE,GAAI,EACxB,KAAC,QAAQ,IAAC,MAAM,EAAE,EAAE,GAAI,KAVnB,MAAM,CAAC,EAAE,CAWV,CACP,CAAC;oBACJ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBACnB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;wBAChE,OAAO,CACL,eAEE,KAAK,EAAE;gCACL,SAAS,EAAE,gCAAgC;gCAC3C,OAAO,EAAE,MAAM;gCACf,QAAQ,EAAE,EAAE;gCACZ,kBAAkB,EAAE,cAAc;gCAClC,mBAAmB,EAAE,cAAc;gCACnC,OAAO,EAAE,SAAS;6BACnB,aAED,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,YAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAQ,EACpF,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAQ,EACnG,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,GAAQ,KAZzF,KAAK,CAAC,EAAE,CAaT,CACP,CAAC;oBACJ,CAAC,CAAC,GACF,IACE,CACX,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAkB;QAC1B,KAAK,EAAE,OAAO,CAAC,OAAO;QACtB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,aAAa,EAAE,QAAQ;QACvB,aAAa,EAAE,WAAW;KAC3B,CAAC;IACF,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,aACpF,eAAM,KAAK,EAAE,IAAI,sBAAc,EAC/B,eAAM,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAa,EACzD,eAAM,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAY,IACpD,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAsC;IACvE,MAAM,KAAK,GACT,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACvF,OAAO,CACL,gBAAM,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,aAC3G,oCAAkB,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAI,EACzF,MAAM,IACF,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decisionEngine.d.ts","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,kBAMzC,CAAC;
|
|
1
|
+
{"version":3,"file":"decisionEngine.d.ts","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,kBAMzC,CAAC;AAUF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,UAAU,GAAE,kBAAgD,GAC3D,cAAc,CA8IhB;AAKD,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,EAAE,SAAS,EAAE,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAQ,GAChB,MAAM,CASR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,EAAE,SAAS,EAAE,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAQ,GAChB,MAAM,CAMR;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,QAAQ,SAAS,EACjB,KAAK,SAAa,GACjB,MAAM,CAYR"}
|
package/dist/decisionEngine.js
CHANGED
|
@@ -5,6 +5,13 @@ export const DEFAULT_DECISION_THRESHOLDS = {
|
|
|
5
5
|
divergenceBps: 5,
|
|
6
6
|
minDepthEth: 50
|
|
7
7
|
};
|
|
8
|
+
// Soft-capped confidence curve. Asymptotically approaches `ceiling` so the
|
|
9
|
+
// number never pegs to 100. Mirrors how real trading dashboards calibrate
|
|
10
|
+
// "strong signal" (~70-85) vs "near-certainty" (~90, rare).
|
|
11
|
+
function softCapConfidence(rawScore, ceiling = 88, scale = 55) {
|
|
12
|
+
const bounded = Math.max(0, rawScore);
|
|
13
|
+
return Math.round(ceiling * (1 - Math.exp(-bounded / scale)));
|
|
14
|
+
}
|
|
8
15
|
export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHOLDS) {
|
|
9
16
|
const reasons = [];
|
|
10
17
|
// Regime gate
|
|
@@ -18,7 +25,7 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
|
|
|
18
25
|
if (inputs.regime === "TRENDING") {
|
|
19
26
|
return {
|
|
20
27
|
decision: "STAND DOWN",
|
|
21
|
-
confidence:
|
|
28
|
+
confidence: 72,
|
|
22
29
|
reasons: [
|
|
23
30
|
{ text: "Regime: TRENDING — range bot sits out", tone: "bad" },
|
|
24
31
|
{ text: "Re-engages when price stabilises in a range", tone: "neutral" }
|
|
@@ -27,23 +34,24 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
|
|
|
27
34
|
}
|
|
28
35
|
let scoreBuy = 0;
|
|
29
36
|
let scoreSell = 0;
|
|
30
|
-
let
|
|
37
|
+
let baseScore = inputs.regime === "RANGING" ? 25 : 12;
|
|
31
38
|
if (inputs.regime === "RANGING") {
|
|
32
39
|
reasons.push({ text: "Regime: RANGING (favourable)", tone: "good" });
|
|
33
40
|
}
|
|
34
41
|
else {
|
|
35
42
|
reasons.push({ text: "Regime: MIXED", tone: "neutral" });
|
|
36
43
|
}
|
|
37
|
-
// Book imbalance
|
|
44
|
+
// Book imbalance — stronger imbalance contributes more, but with diminishing returns
|
|
45
|
+
const absBook = Math.abs(inputs.bookImbalance);
|
|
38
46
|
if (inputs.bookImbalance >= thresholds.imbalanceThreshold) {
|
|
39
|
-
const
|
|
40
|
-
scoreBuy +=
|
|
41
|
-
reasons.push({ text: `Book imbalance +${
|
|
47
|
+
const contrib = 8 + Math.min(10, (absBook - thresholds.imbalanceThreshold) * 18);
|
|
48
|
+
scoreBuy += contrib;
|
|
49
|
+
reasons.push({ text: `Book imbalance +${(inputs.bookImbalance * 100).toFixed(0)}% bid-heavy`, tone: "good" });
|
|
42
50
|
}
|
|
43
51
|
else if (inputs.bookImbalance <= -thresholds.imbalanceThreshold) {
|
|
44
|
-
const
|
|
45
|
-
scoreSell +=
|
|
46
|
-
reasons.push({ text: `Book imbalance ${
|
|
52
|
+
const contrib = 8 + Math.min(10, (absBook - thresholds.imbalanceThreshold) * 18);
|
|
53
|
+
scoreSell += contrib;
|
|
54
|
+
reasons.push({ text: `Book imbalance ${(inputs.bookImbalance * 100).toFixed(0)}% ask-heavy`, tone: "good" });
|
|
47
55
|
}
|
|
48
56
|
else {
|
|
49
57
|
reasons.push({
|
|
@@ -51,15 +59,18 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
|
|
|
51
59
|
tone: "neutral"
|
|
52
60
|
});
|
|
53
61
|
}
|
|
54
|
-
// Trade flow (last 60s)
|
|
62
|
+
// Trade flow (last 60s) — saturating contribution
|
|
63
|
+
const absFlow = Math.abs(inputs.tradeImbalance);
|
|
55
64
|
if (inputs.tradeImbalance >= thresholds.flowThreshold) {
|
|
65
|
+
const contrib = 6 + Math.min(8, (absFlow - thresholds.flowThreshold) * 20);
|
|
66
|
+
scoreBuy += contrib;
|
|
56
67
|
const buyPct = (0.5 + inputs.tradeImbalance / 2) * 100;
|
|
57
|
-
scoreBuy += 20;
|
|
58
68
|
reasons.push({ text: `Recent flow ${buyPct.toFixed(0)}% buys`, tone: "good" });
|
|
59
69
|
}
|
|
60
70
|
else if (inputs.tradeImbalance <= -thresholds.flowThreshold) {
|
|
71
|
+
const contrib = 6 + Math.min(8, (absFlow - thresholds.flowThreshold) * 20);
|
|
72
|
+
scoreSell += contrib;
|
|
61
73
|
const sellPct = (0.5 - inputs.tradeImbalance / 2) * 100;
|
|
62
|
-
scoreSell += 20;
|
|
63
74
|
reasons.push({ text: `Recent flow ${sellPct.toFixed(0)}% sells`, tone: "good" });
|
|
64
75
|
}
|
|
65
76
|
else {
|
|
@@ -67,24 +78,27 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
|
|
|
67
78
|
}
|
|
68
79
|
// Spread
|
|
69
80
|
if (inputs.spreadPct > thresholds.spreadWidePct) {
|
|
70
|
-
|
|
81
|
+
baseScore -= 8;
|
|
71
82
|
reasons.push({ text: `Spread wide (${inputs.spreadPct.toFixed(3)}%)`, tone: "bad" });
|
|
72
83
|
}
|
|
73
84
|
else {
|
|
74
|
-
|
|
85
|
+
baseScore += 3;
|
|
75
86
|
reasons.push({ text: `Spread tight (${inputs.spreadPct.toFixed(3)}%)`, tone: "good" });
|
|
76
87
|
}
|
|
77
|
-
// Cross-venue divergence
|
|
88
|
+
// Cross-venue divergence — small contribution, capped
|
|
78
89
|
if (inputs.venueDivergenceBps !== null && Number.isFinite(inputs.venueDivergenceBps)) {
|
|
90
|
+
const absDiv = Math.abs(inputs.venueDivergenceBps);
|
|
79
91
|
if (inputs.venueDivergenceBps > thresholds.divergenceBps) {
|
|
80
|
-
|
|
92
|
+
const contrib = 4 + Math.min(6, (absDiv - thresholds.divergenceBps) * 0.6);
|
|
93
|
+
scoreBuy += contrib;
|
|
81
94
|
reasons.push({
|
|
82
95
|
text: `Binance leading +${inputs.venueDivergenceBps.toFixed(1)} bps vs Coinbase`,
|
|
83
96
|
tone: "good"
|
|
84
97
|
});
|
|
85
98
|
}
|
|
86
99
|
else if (inputs.venueDivergenceBps < -thresholds.divergenceBps) {
|
|
87
|
-
|
|
100
|
+
const contrib = 4 + Math.min(6, (absDiv - thresholds.divergenceBps) * 0.6);
|
|
101
|
+
scoreSell += contrib;
|
|
88
102
|
reasons.push({
|
|
89
103
|
text: `Binance lagging ${inputs.venueDivergenceBps.toFixed(1)} bps vs Coinbase`,
|
|
90
104
|
tone: "good"
|
|
@@ -99,32 +113,44 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
|
|
|
99
113
|
}
|
|
100
114
|
// Depth check
|
|
101
115
|
if (inputs.bookDepthWithinHalfPctEth < thresholds.minDepthEth) {
|
|
102
|
-
|
|
116
|
+
baseScore -= 10;
|
|
103
117
|
reasons.push({
|
|
104
118
|
text: `Thin book — ${inputs.bookDepthWithinHalfPctEth.toFixed(0)} ETH within ±0.5%`,
|
|
105
119
|
tone: "bad"
|
|
106
120
|
});
|
|
107
121
|
}
|
|
108
122
|
else {
|
|
109
|
-
|
|
123
|
+
baseScore += 3;
|
|
110
124
|
reasons.push({
|
|
111
125
|
text: `Book depth healthy (${inputs.bookDepthWithinHalfPctEth.toFixed(0)} ETH within ±0.5%)`,
|
|
112
126
|
tone: "good"
|
|
113
127
|
});
|
|
114
128
|
}
|
|
129
|
+
// Signal-redundancy penalty: when book and flow disagree, halve whichever
|
|
130
|
+
// side ended up winning. Reduces over-confidence on conflicting signals.
|
|
131
|
+
if (scoreBuy > 0 && scoreSell > 0) {
|
|
132
|
+
if (scoreBuy >= scoreSell) {
|
|
133
|
+
scoreBuy -= scoreSell * 0.7;
|
|
134
|
+
scoreSell = 0;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
scoreSell -= scoreBuy * 0.7;
|
|
138
|
+
scoreBuy = 0;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
115
141
|
let decision;
|
|
116
|
-
let finalConfidence
|
|
117
|
-
if (scoreBuy > scoreSell +
|
|
142
|
+
let finalConfidence;
|
|
143
|
+
if (scoreBuy > scoreSell + 6) {
|
|
118
144
|
decision = "BUY";
|
|
119
|
-
finalConfidence =
|
|
145
|
+
finalConfidence = softCapConfidence(baseScore + scoreBuy);
|
|
120
146
|
}
|
|
121
|
-
else if (scoreSell > scoreBuy +
|
|
147
|
+
else if (scoreSell > scoreBuy + 6) {
|
|
122
148
|
decision = "SELL";
|
|
123
|
-
finalConfidence =
|
|
149
|
+
finalConfidence = softCapConfidence(baseScore + scoreSell);
|
|
124
150
|
}
|
|
125
151
|
else {
|
|
126
152
|
decision = "WAIT";
|
|
127
|
-
finalConfidence =
|
|
153
|
+
finalConfidence = softCapConfidence(Math.max(baseScore / 2, 5), 55, 35);
|
|
128
154
|
reasons.push({ text: "Signals mixed — no clear direction", tone: "neutral" });
|
|
129
155
|
}
|
|
130
156
|
return { decision, confidence: finalConfidence, reasons };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decisionEngine.js","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,MAAM,2BAA2B,GAAuB;IAC7D,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,MAAsB,EACtB,aAAiC,2BAA2B;IAE5D,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,cAAc;IACd,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SAC/E,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO;YACL,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,EAAE;YACd,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,uCAAuC,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC9D,EAAE,IAAI,EAAE,6CAA6C,EAAE,IAAI,EAAE,SAAS,EAAE;aACzE;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,
|
|
1
|
+
{"version":3,"file":"decisionEngine.js","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,10 @@ export { useCoinbaseTicker, type CoinbaseTickerStatus, type CoinbaseTickerMessag
|
|
|
25
25
|
export { useBotDecision, type BotDecision, type DecisionResult, type DecisionThresholds, type DecisionHistoryEntry, type UseBotDecisionOptions, type UseBotDecisionResult } from "./useBotDecision.js";
|
|
26
26
|
export { computeBotDecision, computeBookImbalance, computeBookDepth, computeTradeImbalance, DEFAULT_DECISION_THRESHOLDS, type DecisionInputs, type DecisionReason, type BookLevel } from "./decisionEngine.js";
|
|
27
27
|
export { BotDecisionPanel, type BotDecisionPanelProps } from "./BotDecisionPanel.js";
|
|
28
|
+
export { useStrategyValueHistory, type ValueSample, type UseStrategyValueHistoryOptions, type UseStrategyValueHistoryResult } from "./useStrategyValueHistory.js";
|
|
29
|
+
export { StrategyValueSparkline, type StrategyValueSparklineProps } from "./StrategyValueSparkline.js";
|
|
30
|
+
export { Skeleton, SkeletonRow, type SkeletonProps } from "./Skeleton.js";
|
|
31
|
+
export { AnimatedNumber, type AnimatedNumberProps } from "./AnimatedNumber.js";
|
|
28
32
|
/** @deprecated Use BAND_STRATEGY_ABI. Will be removed in v1.0. */
|
|
29
33
|
export { BAND_STRATEGY_ABI as ETH_BOT_VAULT_ABI } from "./bandStrategyAbi.js";
|
|
30
34
|
/** @deprecated Use BAND_STRATEGY_BYTECODE. Will be removed in v1.0. */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,12 @@ export { useCoinbaseTicker } from "./useCoinbaseTicker.js";
|
|
|
29
29
|
export { useBotDecision } from "./useBotDecision.js";
|
|
30
30
|
export { computeBotDecision, computeBookImbalance, computeBookDepth, computeTradeImbalance, DEFAULT_DECISION_THRESHOLDS } from "./decisionEngine.js";
|
|
31
31
|
export { BotDecisionPanel } from "./BotDecisionPanel.js";
|
|
32
|
+
// --- Strategy value tracking --------------------------------------------
|
|
33
|
+
export { useStrategyValueHistory } from "./useStrategyValueHistory.js";
|
|
34
|
+
export { StrategyValueSparkline } from "./StrategyValueSparkline.js";
|
|
35
|
+
// --- UI primitives -------------------------------------------------------
|
|
36
|
+
export { Skeleton, SkeletonRow } from "./Skeleton.js";
|
|
37
|
+
export { AnimatedNumber } from "./AnimatedNumber.js";
|
|
32
38
|
/** @deprecated Use BAND_STRATEGY_ABI. Will be removed in v1.0. */
|
|
33
39
|
export { BAND_STRATEGY_ABI as ETH_BOT_VAULT_ABI } from "./bandStrategyAbi.js";
|
|
34
40
|
/** @deprecated Use BAND_STRATEGY_BYTECODE. Will be removed in v1.0. */
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAmC,MAAM,iBAAiB,CAAC;AACvF,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAG9B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAgC,MAAM,uBAAuB,CAAC;AACvF,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EAI1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAmE,MAAM,0BAA0B,CAAC;AAEhI,4EAA4E;AAC5E,OAAO,EACL,mBAAmB,EAMpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AAElF,OAAO,EACL,gBAAgB,EAMjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAEhE,4EAA4E;AAC5E,OAAO,EACL,yBAAyB,EAK1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AAExF,4EAA4E;AAC5E,OAAO,EACL,mBAAmB,EAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EACL,WAAW,EAIZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAE7D,2EAA2E;AAC3E,OAAO,EACL,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EAOf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAI5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AAErF,kEAAkE;AAClE,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,uEAAuE;AACvE,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,kEAAkE;AAClE,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnF,uEAAuE;AACvE,OAAO,EAAE,sBAAsB,IAAI,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAClG,0DAA0D;AAC1D,OAAO,EAAE,SAAS,IAAI,WAAW,EAA2C,MAAM,gBAAgB,CAAC;AACnG,kEAAkE;AAClE,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAqD,MAAM,wBAAwB,CAAC;AAC/H,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,IAAI,4BAA4B,EAA0E,MAAM,iBAAiB,CAAC;AAC9J,kFAAkF;AAClF,OAAO,EAAE,iCAAiC,IAAI,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AAC5H,8EAA8E;AAC9E,OAAO,EACL,6BAA6B,IAAI,wBAAwB,EAG1D,MAAM,oCAAoC,CAAC;AAC5C,iEAAiE;AACjE,OAAO,EAAE,gBAAgB,IAAI,kBAAkB,EAA6D,MAAM,uBAAuB,CAAC;AAC1I,oEAAoE;AACpE,OAAO,EACL,mBAAmB,IAAI,WAAW,EAInC,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
import { type UseStrategyContractOptions } from "./useStrategyContract.js";
|
|
3
|
+
export type ValueSample = {
|
|
4
|
+
at: number;
|
|
5
|
+
contractEth: number;
|
|
6
|
+
allocatedEth: number;
|
|
7
|
+
totalEth: number;
|
|
8
|
+
};
|
|
9
|
+
export type UseStrategyValueHistoryOptions = UseStrategyContractOptions & {
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
sampleIntervalMs?: number;
|
|
12
|
+
maxSamples?: number;
|
|
13
|
+
storageKey?: (address: Address) => string;
|
|
14
|
+
};
|
|
15
|
+
export type UseStrategyValueHistoryResult = {
|
|
16
|
+
samples: ValueSample[];
|
|
17
|
+
currentTotalEth: number;
|
|
18
|
+
firstTotalEth: number;
|
|
19
|
+
changeEth: number;
|
|
20
|
+
changePct: number | null;
|
|
21
|
+
clear: () => void;
|
|
22
|
+
};
|
|
23
|
+
export declare function useStrategyValueHistory(options: UseStrategyValueHistoryOptions): UseStrategyValueHistoryResult;
|
|
24
|
+
//# sourceMappingURL=useStrategyValueHistory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStrategyValueHistory.d.ts","sourceRoot":"","sources":["../src/useStrategyValueHistory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,GAAG;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAkCF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,6BAA6B,CA8E/B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { useStrategyContract } from "./useStrategyContract.js";
|
|
3
|
+
const DEFAULT_INTERVAL_MS = 10_000;
|
|
4
|
+
const DEFAULT_MAX_SAMPLES = 360; // ~1 hour at 10s
|
|
5
|
+
const STORAGE_PREFIX = "bandkit:value-history:";
|
|
6
|
+
function defaultStorageKey(address) {
|
|
7
|
+
return `${STORAGE_PREFIX}${address.toLowerCase()}`;
|
|
8
|
+
}
|
|
9
|
+
function readStored(key) {
|
|
10
|
+
if (typeof window === "undefined")
|
|
11
|
+
return [];
|
|
12
|
+
try {
|
|
13
|
+
const raw = window.localStorage.getItem(key);
|
|
14
|
+
if (!raw)
|
|
15
|
+
return [];
|
|
16
|
+
const parsed = JSON.parse(raw);
|
|
17
|
+
if (!Array.isArray(parsed))
|
|
18
|
+
return [];
|
|
19
|
+
return parsed.filter((s) => typeof s.at === "number" && typeof s.totalEth === "number" && Number.isFinite(s.totalEth));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function writeStored(key, samples) {
|
|
26
|
+
if (typeof window === "undefined")
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
window.localStorage.setItem(key, JSON.stringify(samples));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// quota or disabled — ignore
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function useStrategyValueHistory(options) {
|
|
36
|
+
const enabled = options.enabled ?? true;
|
|
37
|
+
const intervalMs = options.sampleIntervalMs ?? DEFAULT_INTERVAL_MS;
|
|
38
|
+
const maxSamples = options.maxSamples ?? DEFAULT_MAX_SAMPLES;
|
|
39
|
+
const storageKeyFn = options.storageKey ?? defaultStorageKey;
|
|
40
|
+
const strategy = useStrategyContract(options);
|
|
41
|
+
const address = options.strategyContractAddress;
|
|
42
|
+
const [samples, setSamples] = useState([]);
|
|
43
|
+
const lastWriteAtRef = useRef(0);
|
|
44
|
+
// Hydrate from storage when address changes
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (!address) {
|
|
47
|
+
setSamples([]);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const stored = readStored(storageKeyFn(address));
|
|
51
|
+
setSamples(stored);
|
|
52
|
+
}, [address, storageKeyFn]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!enabled || !address)
|
|
55
|
+
return;
|
|
56
|
+
if (typeof window === "undefined")
|
|
57
|
+
return;
|
|
58
|
+
function sample() {
|
|
59
|
+
const contractEth = Number(strategy.balanceEth);
|
|
60
|
+
const allocatedEth = Number(strategy.allocatedToStrategyEth);
|
|
61
|
+
if (!Number.isFinite(contractEth) || !Number.isFinite(allocatedEth))
|
|
62
|
+
return;
|
|
63
|
+
const totalEth = contractEth + allocatedEth;
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
if (now - lastWriteAtRef.current < intervalMs - 250)
|
|
66
|
+
return;
|
|
67
|
+
lastWriteAtRef.current = now;
|
|
68
|
+
setSamples((prev) => {
|
|
69
|
+
const next = [...prev, { at: now, contractEth, allocatedEth, totalEth }].slice(-maxSamples);
|
|
70
|
+
if (address)
|
|
71
|
+
writeStored(storageKeyFn(address), next);
|
|
72
|
+
return next;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
sample();
|
|
76
|
+
const id = window.setInterval(sample, intervalMs);
|
|
77
|
+
return () => window.clearInterval(id);
|
|
78
|
+
}, [
|
|
79
|
+
address,
|
|
80
|
+
enabled,
|
|
81
|
+
intervalMs,
|
|
82
|
+
maxSamples,
|
|
83
|
+
storageKeyFn,
|
|
84
|
+
strategy.allocatedToStrategyEth,
|
|
85
|
+
strategy.balanceEth
|
|
86
|
+
]);
|
|
87
|
+
return useMemo(() => {
|
|
88
|
+
const currentTotalEth = samples.length > 0 ? samples[samples.length - 1].totalEth : 0;
|
|
89
|
+
const firstTotalEth = samples.length > 0 ? samples[0].totalEth : 0;
|
|
90
|
+
const changeEth = currentTotalEth - firstTotalEth;
|
|
91
|
+
const changePct = firstTotalEth > 0 ? (changeEth / firstTotalEth) * 100 : null;
|
|
92
|
+
return {
|
|
93
|
+
samples,
|
|
94
|
+
currentTotalEth,
|
|
95
|
+
firstTotalEth,
|
|
96
|
+
changeEth,
|
|
97
|
+
changePct,
|
|
98
|
+
clear: () => {
|
|
99
|
+
if (address) {
|
|
100
|
+
try {
|
|
101
|
+
window.localStorage.removeItem(storageKeyFn(address));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// ignore
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
setSamples([]);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}, [address, samples, storageKeyFn]);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=useStrategyValueHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStrategyValueHistory.js","sourceRoot":"","sources":["../src/useStrategyValueHistory.ts"],"names":[],"mappings":"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"}
|