bandkit 1.0.2 → 1.0.4

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBotDecision.d.ts","sourceRoot":"","sources":["../src/useBotDecision.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3F,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,MAAM,CAAC,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB,CAAC;AAQF,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,oBAAoB,CAqHxF"}
@@ -0,0 +1,104 @@
1
+ import { useEffect, useMemo, useRef, useState } from "react";
2
+ import { useBinanceOrderBook } from "./useBinanceOrderBook.js";
3
+ import { useBinanceTrades } from "./useBinanceTrades.js";
4
+ import { useCoinbaseTicker } from "./useCoinbaseTicker.js";
5
+ import { useVolatilityRegime } from "./useVolatilityRegime.js";
6
+ import { computeBookDepth, computeBookImbalance, computeBotDecision, computeTradeImbalance, DEFAULT_DECISION_THRESHOLDS } from "./decisionEngine.js";
7
+ const EMPTY_RESULT = {
8
+ decision: "WAIT",
9
+ confidence: 0,
10
+ reasons: [{ text: "Waiting for live data", tone: "neutral" }]
11
+ };
12
+ export function useBotDecision(options = {}) {
13
+ const enabled = options.enabled ?? true;
14
+ const evaluationIntervalMs = options.evaluationIntervalMs ?? 2000;
15
+ const flowWindowMs = options.flowWindowMs ?? 60_000;
16
+ const historyLimit = options.historyLimit ?? 30;
17
+ const thresholds = { ...DEFAULT_DECISION_THRESHOLDS, ...(options.thresholds ?? {}) };
18
+ const book = useBinanceOrderBook({ ...options.orderBook, enabled });
19
+ const trades = useBinanceTrades({ ...options.trades, enabled });
20
+ const coinbase = useCoinbaseTicker({ ...options.coinbase, enabled });
21
+ const regime = useVolatilityRegime({ ...options.regime, enabled });
22
+ const bookRef = useRef(book);
23
+ const tradesRef = useRef(trades);
24
+ const coinbaseRef = useRef(coinbase);
25
+ const regimeRef = useRef(regime);
26
+ useEffect(() => {
27
+ bookRef.current = book;
28
+ }, [book]);
29
+ useEffect(() => {
30
+ tradesRef.current = trades;
31
+ }, [trades]);
32
+ useEffect(() => {
33
+ coinbaseRef.current = coinbase;
34
+ }, [coinbase]);
35
+ useEffect(() => {
36
+ regimeRef.current = regime;
37
+ }, [regime]);
38
+ const [snapshot, setSnapshot] = useState({
39
+ result: EMPTY_RESULT,
40
+ midBinance: null,
41
+ midCoinbase: null,
42
+ divergenceBps: null,
43
+ depthEth: 0
44
+ });
45
+ const [history, setHistory] = useState([]);
46
+ useEffect(() => {
47
+ if (!enabled)
48
+ return;
49
+ function evaluate() {
50
+ const b = bookRef.current;
51
+ const t = tradesRef.current;
52
+ const c = coinbaseRef.current;
53
+ const r = regimeRef.current;
54
+ const midBinance = b.midPrice;
55
+ if (midBinance === null) {
56
+ setSnapshot((prev) => ({ ...prev, evaluatedAt: new Date() }));
57
+ return;
58
+ }
59
+ const bookImbalance = computeBookImbalance(b.bids, b.asks, midBinance);
60
+ const depthEth = computeBookDepth(b.bids, b.asks, midBinance);
61
+ const tradeImbalance = computeTradeImbalance(t.trades, flowWindowMs);
62
+ const spreadPct = b.spreadPercent ?? 0;
63
+ const midCoinbase = c.midPrice;
64
+ const divergenceBps = midCoinbase !== null && midCoinbase > 0
65
+ ? ((midBinance - midCoinbase) / midCoinbase) * 10000
66
+ : null;
67
+ const result = computeBotDecision({
68
+ regime: r.regime,
69
+ bookImbalance,
70
+ tradeImbalance,
71
+ spreadPct,
72
+ venueDivergenceBps: divergenceBps,
73
+ bookDepthWithinHalfPctEth: depthEth,
74
+ midPrice: midBinance
75
+ }, thresholds);
76
+ const now = Date.now();
77
+ setSnapshot({
78
+ result,
79
+ midBinance,
80
+ midCoinbase,
81
+ divergenceBps,
82
+ depthEth,
83
+ evaluatedAt: new Date(now)
84
+ });
85
+ setHistory((prev) => [
86
+ { at: now, decision: result.decision, confidence: result.confidence },
87
+ ...prev
88
+ ].slice(0, historyLimit));
89
+ }
90
+ evaluate();
91
+ const id = window.setInterval(evaluate, evaluationIntervalMs);
92
+ return () => window.clearInterval(id);
93
+ }, [enabled, evaluationIntervalMs, flowWindowMs, historyLimit, thresholds]);
94
+ return useMemo(() => ({
95
+ ...snapshot.result,
96
+ midPriceBinance: snapshot.midBinance,
97
+ midPriceCoinbase: snapshot.midCoinbase,
98
+ venueDivergenceBps: snapshot.divergenceBps,
99
+ bookDepthWithinHalfPctEth: snapshot.depthEth,
100
+ history,
101
+ evaluatedAt: snapshot.evaluatedAt
102
+ }), [history, snapshot]);
103
+ }
104
+ //# sourceMappingURL=useBotDecision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBotDecision.js","sourceRoot":"","sources":["../src/useBotDecision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type CoinbaseTickerStatus = "connecting" | "live" | "stale" | "error";
2
+ export type CoinbaseTickerMessage = {
3
+ type: string;
4
+ product_id: string;
5
+ price?: string;
6
+ best_bid?: string;
7
+ best_ask?: string;
8
+ side?: "buy" | "sell";
9
+ time?: string;
10
+ };
11
+ export type UseCoinbaseTickerOptions = {
12
+ enabled?: boolean;
13
+ productId?: string;
14
+ reconnectDelayMs?: number;
15
+ };
16
+ export type UseCoinbaseTickerResult = {
17
+ price: number | null;
18
+ bestBid: number | null;
19
+ bestAsk: number | null;
20
+ midPrice: number | null;
21
+ lastSide?: "buy" | "sell";
22
+ status: CoinbaseTickerStatus;
23
+ error?: string;
24
+ productId: string;
25
+ updatedAt?: Date;
26
+ };
27
+ export declare function useCoinbaseTicker(options?: UseCoinbaseTickerOptions): UseCoinbaseTickerResult;
28
+ //# sourceMappingURL=useCoinbaseTicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCoinbaseTicker.d.ts","sourceRoot":"","sources":["../src/useCoinbaseTicker.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE7E,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,CAAC;AAIF,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,uBAAuB,CA+FjG"}
@@ -0,0 +1,87 @@
1
+ import { useEffect, useMemo, useState } from "react";
2
+ const DEFAULT_URL = "wss://ws-feed.exchange.coinbase.com";
3
+ export function useCoinbaseTicker(options = {}) {
4
+ const enabled = options.enabled ?? true;
5
+ const productId = options.productId ?? "ETH-USD";
6
+ const reconnectDelayMs = options.reconnectDelayMs ?? 3000;
7
+ const [message, setMessage] = useState();
8
+ const [status, setStatus] = useState("connecting");
9
+ const [error, setError] = useState();
10
+ const [updatedAt, setUpdatedAt] = useState();
11
+ useEffect(() => {
12
+ if (!enabled) {
13
+ setStatus("stale");
14
+ return;
15
+ }
16
+ if (typeof WebSocket === "undefined") {
17
+ setStatus("error");
18
+ setError("WebSocket is not available in this runtime.");
19
+ return;
20
+ }
21
+ let reconnectTimer;
22
+ let closedByHook = false;
23
+ let socket;
24
+ function connect() {
25
+ setStatus("connecting");
26
+ socket = new WebSocket(DEFAULT_URL);
27
+ socket.onopen = () => {
28
+ socket?.send(JSON.stringify({
29
+ type: "subscribe",
30
+ product_ids: [productId],
31
+ channels: ["ticker"]
32
+ }));
33
+ setStatus("live");
34
+ setError(undefined);
35
+ };
36
+ socket.onmessage = (event) => {
37
+ try {
38
+ const parsed = JSON.parse(String(event.data));
39
+ if (parsed.type === "ticker" && parsed.product_id === productId) {
40
+ setMessage(parsed);
41
+ setStatus("live");
42
+ setUpdatedAt(new Date());
43
+ }
44
+ }
45
+ catch {
46
+ setStatus("error");
47
+ setError("Could not parse Coinbase ticker message.");
48
+ }
49
+ };
50
+ socket.onerror = () => {
51
+ setStatus("error");
52
+ setError("Coinbase ticker connection failed.");
53
+ };
54
+ socket.onclose = () => {
55
+ if (closedByHook)
56
+ return;
57
+ setStatus("stale");
58
+ reconnectTimer = setTimeout(connect, reconnectDelayMs);
59
+ };
60
+ }
61
+ connect();
62
+ return () => {
63
+ closedByHook = true;
64
+ if (reconnectTimer)
65
+ clearTimeout(reconnectTimer);
66
+ socket?.close();
67
+ };
68
+ }, [enabled, productId, reconnectDelayMs]);
69
+ return useMemo(() => {
70
+ const price = message?.price ? Number(message.price) : null;
71
+ const bestBid = message?.best_bid ? Number(message.best_bid) : null;
72
+ const bestAsk = message?.best_ask ? Number(message.best_ask) : null;
73
+ const midPrice = bestBid !== null && bestAsk !== null ? (bestBid + bestAsk) / 2 : null;
74
+ return {
75
+ price: price !== null && Number.isFinite(price) ? price : null,
76
+ bestBid: bestBid !== null && Number.isFinite(bestBid) ? bestBid : null,
77
+ bestAsk: bestAsk !== null && Number.isFinite(bestAsk) ? bestAsk : null,
78
+ midPrice: midPrice !== null && Number.isFinite(midPrice) ? midPrice : null,
79
+ lastSide: message?.side,
80
+ status,
81
+ error,
82
+ productId,
83
+ updatedAt
84
+ };
85
+ }, [error, message, productId, status, updatedAt]);
86
+ }
87
+ //# sourceMappingURL=useCoinbaseTicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCoinbaseTicker.js","sourceRoot":"","sources":["../src/useCoinbaseTicker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bandkit",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Open-source scaffolding for Ethereum range-bound trading strategies: strategy contract deployment, restricted executor, and React hooks. Strategy logic is not included.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -63,6 +63,7 @@
63
63
  "@tanstack/react-query": "^5.0.0",
64
64
  "@types/node": "^22.0.0",
65
65
  "@types/react": "^19.0.0",
66
+ "@types/ws": "^8.18.1",
66
67
  "chai": "^6.2.2",
67
68
  "dotenv": "^16.4.7",
68
69
  "fp-ts": "^2.16.11",
@@ -73,7 +74,8 @@
73
74
  "ts-node": "^10.9.2",
74
75
  "typescript": "^5.7.0",
75
76
  "viem": "^2.0.0",
76
- "wagmi": "^2.0.0"
77
+ "wagmi": "^2.0.0",
78
+ "ws": "^8.21.0"
77
79
  },
78
80
  "keywords": [
79
81
  "ethereum",