@newyorkcompute/kalshi-tui 0.1.0 → 0.3.0
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 +35 -0
- package/dist/App.d.ts +2 -1
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +43 -36
- package/dist/App.js.map +1 -1
- package/dist/cache.d.ts +34 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +60 -0
- package/dist/cache.js.map +1 -0
- package/dist/cache.test.d.ts +2 -0
- package/dist/cache.test.d.ts.map +1 -0
- package/dist/cache.test.js +73 -0
- package/dist/cache.test.js.map +1 -0
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +31 -35
- package/dist/cli.js.map +1 -1
- package/dist/components/ErrorBoundary.d.ts +20 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +28 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/Footer.d.ts +6 -0
- package/dist/components/Footer.d.ts.map +1 -0
- package/dist/components/Footer.js +10 -0
- package/dist/components/Footer.js.map +1 -0
- package/dist/components/Header.d.ts +10 -2
- package/dist/components/Header.d.ts.map +1 -1
- package/dist/components/Header.js +18 -9
- package/dist/components/Header.js.map +1 -1
- package/dist/components/Markets.d.ts +21 -0
- package/dist/components/Markets.d.ts.map +1 -0
- package/dist/components/Markets.js +25 -0
- package/dist/components/Markets.js.map +1 -0
- package/dist/components/Orderbook.d.ts +18 -5
- package/dist/components/Orderbook.d.ts.map +1 -1
- package/dist/components/Orderbook.js +25 -36
- package/dist/components/Orderbook.js.map +1 -1
- package/dist/components/Positions.d.ts +13 -2
- package/dist/components/Positions.d.ts.map +1 -1
- package/dist/components/Positions.js +10 -17
- package/dist/components/Positions.js.map +1 -1
- package/dist/components/PriceChart.d.ts +18 -0
- package/dist/components/PriceChart.d.ts.map +1 -0
- package/dist/components/PriceChart.js +103 -0
- package/dist/components/PriceChart.js.map +1 -0
- package/dist/components/index.d.ts +10 -10
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +10 -11
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.d.ts +4 -4
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +4 -4
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useKalshi.d.ts +30 -12
- package/dist/hooks/useKalshi.d.ts.map +1 -1
- package/dist/hooks/useKalshi.js +249 -19
- package/dist/hooks/useKalshi.js.map +1 -1
- package/dist/utils.d.ts +33 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +88 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +2 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +115 -0
- package/dist/utils.test.js.map +1 -0
- package/package.json +8 -8
- package/dist/components/HelpModal.d.ts +0 -5
- package/dist/components/HelpModal.d.ts.map +0 -1
- package/dist/components/HelpModal.js +0 -19
- package/dist/components/HelpModal.js.map +0 -1
- package/dist/components/MarketList.d.ts +0 -5
- package/dist/components/MarketList.d.ts.map +0 -1
- package/dist/components/MarketList.js +0 -68
- package/dist/components/MarketList.js.map +0 -1
- package/dist/components/OrderEntry.d.ts +0 -9
- package/dist/components/OrderEntry.d.ts.map +0 -1
- package/dist/components/OrderEntry.js +0 -77
- package/dist/components/OrderEntry.js.map +0 -1
- package/dist/components/SearchBar.d.ts +0 -5
- package/dist/components/SearchBar.d.ts.map +0 -1
- package/dist/components/SearchBar.js +0 -27
- package/dist/components/SearchBar.js.map +0 -1
- package/dist/components/StatusBar.d.ts +0 -5
- package/dist/components/StatusBar.d.ts.map +0 -1
- package/dist/components/StatusBar.js +0 -9
- package/dist/components/StatusBar.js.map +0 -1
- package/dist/components/ui/Box.d.ts +0 -14
- package/dist/components/ui/Box.d.ts.map +0 -1
- package/dist/components/ui/Box.js +0 -9
- package/dist/components/ui/Box.js.map +0 -1
- package/dist/components/ui/Sparkline.d.ts +0 -11
- package/dist/components/ui/Sparkline.d.ts.map +0 -1
- package/dist/components/ui/Sparkline.js +0 -32
- package/dist/components/ui/Sparkline.js.map +0 -1
- package/dist/hooks/useMarkets.d.ts +0 -13
- package/dist/hooks/useMarkets.d.ts.map +0 -1
- package/dist/hooks/useMarkets.js +0 -89
- package/dist/hooks/useMarkets.js.map +0 -1
- package/dist/hooks/useOrderbook.d.ts +0 -13
- package/dist/hooks/useOrderbook.d.ts.map +0 -1
- package/dist/hooks/useOrderbook.js +0 -81
- package/dist/hooks/useOrderbook.js.map +0 -1
- package/dist/hooks/usePortfolio.d.ts +0 -18
- package/dist/hooks/usePortfolio.d.ts.map +0 -1
- package/dist/hooks/usePortfolio.js +0 -84
- package/dist/hooks/usePortfolio.js.map +0 -1
- package/dist/stores/app-store.d.ts +0 -17
- package/dist/stores/app-store.d.ts.map +0 -1
- package/dist/stores/app-store.js +0 -21
- package/dist/stores/app-store.js.map +0 -1
- package/dist/theme.d.ts +0 -31
- package/dist/theme.d.ts.map +0 -1
- package/dist/theme.js +0 -37
- package/dist/theme.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@newyorkcompute/kalshi-tui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Beautiful terminal UI for Kalshi prediction markets — real-time data, trading, and portfolio management",
|
|
5
5
|
"author": "NewYorkCompute",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,20 +45,20 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@inkjs/ui": "^2.0.0",
|
|
47
47
|
"@newyorkcompute/kalshi-core": "*",
|
|
48
|
+
"asciichart": "^1.5.25",
|
|
48
49
|
"ink": "^5.1.0",
|
|
49
50
|
"kalshi-typescript": "^3.3.0",
|
|
50
|
-
"react": "^18.3.1"
|
|
51
|
-
"zustand": "^5.0.2"
|
|
51
|
+
"react": "^18.3.1"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
+
"@eslint/js": "^9.28.0",
|
|
55
|
+
"@types/asciichart": "^1.5.8",
|
|
54
56
|
"@types/node": "^22.15.29",
|
|
55
|
-
"@types/react": "^18.3.
|
|
57
|
+
"@types/react": "^18.3.12",
|
|
56
58
|
"eslint": "^9.28.0",
|
|
57
|
-
"
|
|
58
|
-
"eslint-plugin-react": "^
|
|
59
|
-
"eslint-plugin-react-hooks": "^5.2.0",
|
|
59
|
+
"eslint-plugin-react": "^7.37.2",
|
|
60
|
+
"eslint-plugin-react-hooks": "^5.1.0",
|
|
60
61
|
"typescript-eslint": "^8.33.1",
|
|
61
62
|
"vitest": "^3.2.3"
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HelpModal.d.ts","sourceRoot":"","sources":["../../src/components/HelpModal.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,SAAS,mDAuGxB"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text, useInput } from "ink";
|
|
3
|
-
import { useAppStore } from "../stores/app-store.js";
|
|
4
|
-
/**
|
|
5
|
-
* Help modal showing keybindings and commands
|
|
6
|
-
*/
|
|
7
|
-
export function HelpModal() {
|
|
8
|
-
const showHelp = useAppStore((state) => state.showHelp);
|
|
9
|
-
const toggleHelp = useAppStore((state) => state.toggleHelp);
|
|
10
|
-
useInput((input, key) => {
|
|
11
|
-
if (showHelp && (input === "?" || key.escape || input === "q")) {
|
|
12
|
-
toggleHelp();
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
if (!showHelp)
|
|
16
|
-
return null;
|
|
17
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "double", borderColor: "green", padding: 1, position: "absolute", marginLeft: 10, marginTop: 5, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "green", bold: true, children: "\u2593 KALSHI TUI \u2014 HELP" }) }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "white", bold: true, children: "Navigation" }), _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "green", children: "\u2191 / \u2193" }), _jsx(Text, { color: "gray", children: " \u2014 Navigate markets" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "Enter" }), _jsx(Text, { color: "gray", children: " \u2014 Select market" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "F1-F4" }), _jsx(Text, { color: "gray", children: " \u2014 Switch panels" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "/" }), _jsx(Text, { color: "gray", children: " \u2014 Search markets" })] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "white", bold: true, children: "Trading" }) }), _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "green", children: "Tab" }), _jsx(Text, { color: "gray", children: " \u2014 Toggle YES/NO side" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "[ / ]" }), _jsx(Text, { color: "gray", children: " \u2014 Adjust quantity" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "- / +" }), _jsx(Text, { color: "gray", children: " \u2014 Adjust price" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "Enter" }), _jsx(Text, { color: "gray", children: " \u2014 Place order" })] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "white", bold: true, children: "General" }) }), _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "green", children: "r" }), _jsx(Text, { color: "gray", children: " \u2014 Refresh data" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "?" }), _jsx(Text, { color: "gray", children: " \u2014 Toggle this help" })] }), _jsxs(Text, { children: [_jsx(Text, { color: "green", children: "q" }), _jsx(Text, { color: "gray", children: " \u2014 Quit" })] })] })] }), _jsx(Box, { marginTop: 1, justifyContent: "center", children: _jsx(Text, { color: "gray", dimColor: true, children: "Press ? or Esc to close" }) })] }));
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=HelpModal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HelpModal.js","sourceRoot":"","sources":["../../src/components/HelpModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MarketList.d.ts","sourceRoot":"","sources":["../../src/components/MarketList.tsx"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,UAAU,4CAgJzB"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, { useState } from "react";
|
|
3
|
-
import { Box, Text, useInput } from "ink";
|
|
4
|
-
import { formatPrice, truncate } from "@newyorkcompute/kalshi-core";
|
|
5
|
-
import { useMarkets } from "../hooks/useMarkets.js";
|
|
6
|
-
import { useAppStore } from "../stores/app-store.js";
|
|
7
|
-
/**
|
|
8
|
-
* Market list panel with scrollable market data
|
|
9
|
-
*/
|
|
10
|
-
export function MarketList() {
|
|
11
|
-
const { markets, isLoading, error } = useMarkets();
|
|
12
|
-
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
13
|
-
const [scrollOffset, setScrollOffset] = useState(0);
|
|
14
|
-
const setSelectedMarket = useAppStore((state) => state.setSelectedMarket);
|
|
15
|
-
const activePanel = useAppStore((state) => state.activePanel);
|
|
16
|
-
const searchQuery = useAppStore((state) => state.searchQuery);
|
|
17
|
-
const isActive = activePanel === "markets";
|
|
18
|
-
const visibleRows = 8;
|
|
19
|
-
// Filter markets by search query
|
|
20
|
-
const filteredMarkets = markets.filter((m) => m.ticker?.toLowerCase().includes(searchQuery.toLowerCase()) ||
|
|
21
|
-
m.title?.toLowerCase().includes(searchQuery.toLowerCase()));
|
|
22
|
-
// Handle keyboard navigation
|
|
23
|
-
useInput((input, key) => {
|
|
24
|
-
if (!isActive)
|
|
25
|
-
return;
|
|
26
|
-
if (key.upArrow) {
|
|
27
|
-
const newIndex = Math.max(0, selectedIndex - 1);
|
|
28
|
-
setSelectedIndex(newIndex);
|
|
29
|
-
if (newIndex < scrollOffset) {
|
|
30
|
-
setScrollOffset(newIndex);
|
|
31
|
-
}
|
|
32
|
-
if (filteredMarkets[newIndex]) {
|
|
33
|
-
setSelectedMarket(filteredMarkets[newIndex].ticker || null);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (key.downArrow) {
|
|
37
|
-
const newIndex = Math.min(filteredMarkets.length - 1, selectedIndex + 1);
|
|
38
|
-
setSelectedIndex(newIndex);
|
|
39
|
-
if (newIndex >= scrollOffset + visibleRows) {
|
|
40
|
-
setScrollOffset(newIndex - visibleRows + 1);
|
|
41
|
-
}
|
|
42
|
-
if (filteredMarkets[newIndex]) {
|
|
43
|
-
setSelectedMarket(filteredMarkets[newIndex].ticker || null);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
if (key.return && filteredMarkets[selectedIndex]) {
|
|
47
|
-
setSelectedMarket(filteredMarkets[selectedIndex].ticker || null);
|
|
48
|
-
}
|
|
49
|
-
}, { isActive });
|
|
50
|
-
// Select first market on initial load
|
|
51
|
-
React.useEffect(() => {
|
|
52
|
-
if (filteredMarkets.length > 0 && !useAppStore.getState().selectedMarket) {
|
|
53
|
-
setSelectedMarket(filteredMarkets[0].ticker || null);
|
|
54
|
-
}
|
|
55
|
-
}, [filteredMarkets, setSelectedMarket]);
|
|
56
|
-
const visibleMarkets = filteredMarkets.slice(scrollOffset, scrollOffset + visibleRows);
|
|
57
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: isActive ? "green" : "gray", flexGrow: 1, children: [_jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [_jsx(Text, { bold: true, color: isActive ? "green" : "white", children: "MARKETS" }), _jsx(Text, { color: "gray", dimColor: true, children: "[F1]" })] }), _jsx(Box, { paddingX: 1, children: _jsx(Text, { color: "gray", children: "─".repeat(40) }) }), _jsxs(Box, { flexDirection: "column", paddingX: 1, flexGrow: 1, children: [isLoading && (_jsx(Text, { color: "gray", children: "Loading markets..." })), error && (_jsx(Text, { color: "red", children: error })), !isLoading && !error && filteredMarkets.length === 0 && (_jsx(Text, { color: "gray", children: "No markets found" })), visibleMarkets.map((market, index) => {
|
|
58
|
-
const actualIndex = scrollOffset + index;
|
|
59
|
-
const isSelected = actualIndex === selectedIndex;
|
|
60
|
-
const yesBid = market.yes_bid ?? 0;
|
|
61
|
-
// Calculate price change (mock for now - would need historical data)
|
|
62
|
-
const change = 0;
|
|
63
|
-
const changeColor = change > 0 ? "green" : change < 0 ? "red" : "gray";
|
|
64
|
-
const changeSymbol = change > 0 ? "▲" : change < 0 ? "▼" : "━";
|
|
65
|
-
return (_jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Text, { color: isSelected ? "green" : "white", bold: isSelected, inverse: isSelected, children: [" ", truncate(market.ticker || "", 20)] }), _jsxs(Box, { children: [_jsx(Text, { color: "white", children: formatPrice(yesBid) }), _jsxs(Text, { color: changeColor, children: [" ", changeSymbol, " ", change >= 0 ? "+" : "", change] })] })] }, market.ticker));
|
|
66
|
-
}), filteredMarkets.length > visibleRows && (_jsx(Box, { justifyContent: "center", marginTop: 1, children: _jsxs(Text, { color: "gray", dimColor: true, children: [scrollOffset + 1, "-", Math.min(scrollOffset + visibleRows, filteredMarkets.length), " of", " ", filteredMarkets.length] }) }))] })] }));
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=MarketList.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MarketList.js","sourceRoot":"","sources":["../../src/components/MarketList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
interface OrderEntryProps {
|
|
2
|
-
ticker: string | null;
|
|
3
|
-
}
|
|
4
|
-
/**
|
|
5
|
-
* Order entry form for placing trades
|
|
6
|
-
*/
|
|
7
|
-
export declare function OrderEntry({ ticker }: OrderEntryProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=OrderEntry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderEntry.d.ts","sourceRoot":"","sources":["../../src/components/OrderEntry.tsx"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,2CA4LrD"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from "react";
|
|
3
|
-
import { Box, Text, useInput } from "ink";
|
|
4
|
-
import { formatPrice, formatCurrency } from "@newyorkcompute/kalshi-core";
|
|
5
|
-
import { useAppStore } from "../stores/app-store.js";
|
|
6
|
-
import { useKalshi } from "../hooks/useKalshi.js";
|
|
7
|
-
/**
|
|
8
|
-
* Order entry form for placing trades
|
|
9
|
-
*/
|
|
10
|
-
export function OrderEntry({ ticker }) {
|
|
11
|
-
const { ordersApi } = useKalshi();
|
|
12
|
-
const activePanel = useAppStore((state) => state.activePanel);
|
|
13
|
-
const isActive = activePanel === "order";
|
|
14
|
-
const [side, setSide] = useState("yes");
|
|
15
|
-
const [quantity, setQuantity] = useState(10);
|
|
16
|
-
const [price, setPrice] = useState(50);
|
|
17
|
-
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
18
|
-
const [message, setMessage] = useState(null);
|
|
19
|
-
// Calculate cost
|
|
20
|
-
const cost = (quantity * price) / 100;
|
|
21
|
-
// Handle keyboard input
|
|
22
|
-
useInput((input, key) => {
|
|
23
|
-
if (!isActive || !ticker)
|
|
24
|
-
return;
|
|
25
|
-
// Toggle side with Tab
|
|
26
|
-
if (key.tab) {
|
|
27
|
-
setSide((s) => (s === "yes" ? "no" : "yes"));
|
|
28
|
-
}
|
|
29
|
-
// Adjust quantity with [ and ]
|
|
30
|
-
if (input === "[") {
|
|
31
|
-
setQuantity((q) => Math.max(1, q - 1));
|
|
32
|
-
}
|
|
33
|
-
if (input === "]") {
|
|
34
|
-
setQuantity((q) => q + 1);
|
|
35
|
-
}
|
|
36
|
-
// Adjust price with - and +
|
|
37
|
-
if (input === "-") {
|
|
38
|
-
setPrice((p) => Math.max(1, p - 1));
|
|
39
|
-
}
|
|
40
|
-
if (input === "=" || input === "+") {
|
|
41
|
-
setPrice((p) => Math.min(99, p + 1));
|
|
42
|
-
}
|
|
43
|
-
// Submit with Enter
|
|
44
|
-
if (key.return && !isSubmitting) {
|
|
45
|
-
handleSubmit();
|
|
46
|
-
}
|
|
47
|
-
}, { isActive });
|
|
48
|
-
const handleSubmit = async () => {
|
|
49
|
-
if (!ordersApi || !ticker)
|
|
50
|
-
return;
|
|
51
|
-
setIsSubmitting(true);
|
|
52
|
-
setMessage(null);
|
|
53
|
-
try {
|
|
54
|
-
await ordersApi.createOrder({
|
|
55
|
-
ticker,
|
|
56
|
-
side: side === "yes" ? "yes" : "no",
|
|
57
|
-
action: "buy",
|
|
58
|
-
count: quantity,
|
|
59
|
-
type: "limit",
|
|
60
|
-
yes_price: side === "yes" ? price : undefined,
|
|
61
|
-
no_price: side === "no" ? price : undefined,
|
|
62
|
-
});
|
|
63
|
-
setMessage({ type: "success", text: "Order placed successfully" });
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
setMessage({
|
|
67
|
-
type: "error",
|
|
68
|
-
text: error instanceof Error ? error.message : "Failed to place order",
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
setIsSubmitting(false);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: isActive ? "green" : "gray", height: 10, children: [_jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [_jsx(Text, { bold: true, color: isActive ? "green" : "white", children: "QUICK TRADE" }), _jsx(Text, { color: "gray", dimColor: true, children: "[F4]" })] }), _jsx(Box, { paddingX: 1, children: _jsx(Text, { color: "gray", children: "─".repeat(40) }) }), _jsxs(Box, { flexDirection: "column", paddingX: 1, flexGrow: 1, children: [!ticker && (_jsx(Text, { color: "gray", children: "Select a market to trade" })), ticker && (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "Ticker: " }), _jsx(Text, { color: "white", children: ticker })] }), _jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "Side: " }), _jsx(Text, { color: side === "yes" ? "green" : "gray", bold: side === "yes", inverse: side === "yes", children: "[YES]" }), _jsx(Text, { children: " " }), _jsx(Text, { color: side === "no" ? "red" : "gray", bold: side === "no", inverse: side === "no", children: "[NO]" }), _jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(Tab)"] })] }), _jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "Qty: " }), _jsx(Text, { color: "white", children: quantity }), _jsxs(Text, { color: "gray", dimColor: true, children: [" ", "([/])"] })] }), _jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "Price: " }), _jsx(Text, { color: "white", children: formatPrice(price) }), _jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(-/+)"] })] })] }), _jsxs(Box, { justifyContent: "space-between", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "Cost: " }), _jsx(Text, { color: "white", bold: true, children: formatCurrency(cost * 100) })] }), _jsx(Box, { children: _jsx(Text, { color: isSubmitting ? "gray" : "green", bold: true, inverse: !isSubmitting, children: isSubmitting ? " PLACING... " : " [BUY] " }) })] }), message && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: message.type === "success" ? "green" : "red", children: message.text }) }))] }))] })] }));
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=OrderEntry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrderEntry.js","sourceRoot":"","sources":["../../src/components/OrderEntry.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBar.d.ts","sourceRoot":"","sources":["../../src/components/SearchBar.tsx"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,SAAS,mDAyCxB"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text, useInput } from "ink";
|
|
3
|
-
import { TextInput } from "@inkjs/ui";
|
|
4
|
-
import { useAppStore } from "../stores/app-store.js";
|
|
5
|
-
/**
|
|
6
|
-
* Search bar for filtering markets
|
|
7
|
-
*/
|
|
8
|
-
export function SearchBar() {
|
|
9
|
-
const isSearching = useAppStore((state) => state.isSearching);
|
|
10
|
-
const setIsSearching = useAppStore((state) => state.setIsSearching);
|
|
11
|
-
const searchQuery = useAppStore((state) => state.searchQuery);
|
|
12
|
-
const setSearchQuery = useAppStore((state) => state.setSearchQuery);
|
|
13
|
-
// Toggle search with /
|
|
14
|
-
useInput((input, key) => {
|
|
15
|
-
if (!isSearching && input === "/") {
|
|
16
|
-
setIsSearching(true);
|
|
17
|
-
}
|
|
18
|
-
if (isSearching && key.escape) {
|
|
19
|
-
setIsSearching(false);
|
|
20
|
-
setSearchQuery("");
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
if (!isSearching && !searchQuery)
|
|
24
|
-
return null;
|
|
25
|
-
return (_jsxs(Box, { borderStyle: "single", borderColor: "green", paddingX: 1, children: [_jsx(Text, { color: "green", children: "/" }), _jsx(Text, { children: " " }), isSearching ? (_jsx(TextInput, { defaultValue: searchQuery, onChange: setSearchQuery, onSubmit: () => setIsSearching(false), placeholder: "Search markets..." })) : (_jsx(Text, { color: "white", children: searchQuery })), searchQuery && (_jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(Esc to clear)"] }))] }));
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=SearchBar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["../../src/components/SearchBar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAEpE,uBAAuB;IACvB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,CAAC,WAAW,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClC,cAAc,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC9B,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,cAAc,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9C,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,QAAQ,EAAE,CAAC,aACvD,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,kBAAS,EAC5B,KAAC,IAAI,oBAAS,EACb,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,SAAS,IACR,YAAY,EAAE,WAAW,EACzB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACrC,WAAW,EAAC,mBAAmB,GAC/B,CACH,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,WAAW,GAAQ,CACzC,EACA,WAAW,IAAI,CACd,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,mBACxB,GAAG,sBAEC,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,SAAS,4CAwBxB"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from "ink";
|
|
3
|
-
/**
|
|
4
|
-
* Status bar with keybindings and NYC branding
|
|
5
|
-
*/
|
|
6
|
-
export function StatusBar() {
|
|
7
|
-
return (_jsxs(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "Built by " }), _jsx(Text, { color: "white", children: "New York Compute" }), _jsx(Text, { color: "gray", children: " \u2022 " }), _jsx(Text, { color: "green", children: "newyorkcompute.xyz" })] }), _jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "[?] Help" }), _jsx(Text, { color: "gray", children: " " }), _jsx(Text, { color: "gray", children: "[q] Quit" })] })] }));
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=StatusBar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../src/components/StatusBar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,CACL,MAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAC,eAAe,aAG9B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0BAAiB,EACnC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,iCAAwB,EAC3C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAW,EAC7B,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,mCAA0B,IACzC,EAGN,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAgB,EAClC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAS,EAC3B,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAgB,IAC9B,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { BoxProps as InkBoxProps } from "ink";
|
|
3
|
-
interface PanelProps extends InkBoxProps {
|
|
4
|
-
title?: string;
|
|
5
|
-
titleRight?: string;
|
|
6
|
-
isActive?: boolean;
|
|
7
|
-
children: React.ReactNode;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Styled panel component following NYC design guidelines
|
|
11
|
-
*/
|
|
12
|
-
export declare function Panel({ title, titleRight, isActive, children, ...props }: PanelProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=Box.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Box.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Box.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,KAAK,CAAC;AAEnD,UAAU,UAAW,SAAQ,WAAW;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,UAAU,EACV,QAAgB,EAChB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,2CAqCZ"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box as InkBox, Text } from "ink";
|
|
3
|
-
/**
|
|
4
|
-
* Styled panel component following NYC design guidelines
|
|
5
|
-
*/
|
|
6
|
-
export function Panel({ title, titleRight, isActive = false, children, ...props }) {
|
|
7
|
-
return (_jsxs(InkBox, { flexDirection: "column", borderStyle: "single", borderColor: isActive ? "green" : "gray", ...props, children: [(title || titleRight) && (_jsxs(InkBox, { paddingX: 1, justifyContent: "space-between", children: [title && (_jsx(Text, { bold: true, color: isActive ? "green" : "white", children: title })), titleRight && (_jsx(Text, { color: "gray", dimColor: true, children: titleRight }))] })), title && (_jsx(InkBox, { paddingX: 1, children: _jsx(Text, { color: "gray", children: "─".repeat(40) }) })), _jsx(InkBox, { flexDirection: "column", paddingX: 1, flexGrow: 1, children: children })] }));
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=Box.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Box.js","sourceRoot":"","sources":["../../../src/components/ui/Box.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAU1C;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,EACpB,KAAK,EACL,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,GAAG,KAAK,EACG;IACX,OAAO,CACL,MAAC,MAAM,IACL,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KACpC,KAAK,aAGR,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CACxB,MAAC,MAAM,IAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,eAAe,aAChD,KAAK,IAAI,CACR,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,YAC3C,KAAK,GACD,CACR,EACA,UAAU,IAAI,CACb,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,kBACxB,UAAU,GACN,CACR,IACM,CACV,EAGA,KAAK,IAAI,CACR,KAAC,MAAM,IAAC,QAAQ,EAAE,CAAC,YACjB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAQ,GACnC,CACV,EAGD,KAAC,MAAM,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,YACpD,QAAQ,GACF,IACF,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
interface SparklineProps {
|
|
2
|
-
data: number[];
|
|
3
|
-
width?: number;
|
|
4
|
-
color?: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Sparkline component for visualizing price history
|
|
8
|
-
*/
|
|
9
|
-
export declare function Sparkline({ data, width, color }: SparklineProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=Sparkline.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Sparkline.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Sparkline.tsx"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,KAAU,EAAE,KAAe,EAAE,EAAE,cAAc,2CA2B9E"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Text } from "ink";
|
|
3
|
-
// Sparkline characters (in order of fill level)
|
|
4
|
-
const SPARK_CHARS = ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"];
|
|
5
|
-
/**
|
|
6
|
-
* Sparkline component for visualizing price history
|
|
7
|
-
*/
|
|
8
|
-
export function Sparkline({ data, width = 10, color = "green" }) {
|
|
9
|
-
if (data.length === 0) {
|
|
10
|
-
return _jsx(Text, { color: "gray", children: "─".repeat(width) });
|
|
11
|
-
}
|
|
12
|
-
// Normalize data to fit in sparkline range
|
|
13
|
-
const min = Math.min(...data);
|
|
14
|
-
const max = Math.max(...data);
|
|
15
|
-
const range = max - min || 1;
|
|
16
|
-
// Sample data to fit width
|
|
17
|
-
const sampledData = [];
|
|
18
|
-
for (let i = 0; i < width; i++) {
|
|
19
|
-
const index = Math.floor((i / width) * data.length);
|
|
20
|
-
sampledData.push(data[index]);
|
|
21
|
-
}
|
|
22
|
-
// Convert to sparkline characters
|
|
23
|
-
const sparkline = sampledData
|
|
24
|
-
.map((value) => {
|
|
25
|
-
const normalized = (value - min) / range;
|
|
26
|
-
const charIndex = Math.floor(normalized * (SPARK_CHARS.length - 1));
|
|
27
|
-
return SPARK_CHARS[charIndex];
|
|
28
|
-
})
|
|
29
|
-
.join("");
|
|
30
|
-
return _jsx(Text, { color: color, children: sparkline });
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=Sparkline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Sparkline.js","sourceRoot":"","sources":["../../../src/components/ui/Sparkline.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAQ3B,gDAAgD;AAChD,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,OAAO,EAAkB;IAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,CAAC;IACvD,CAAC;IAED,2CAA2C;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAE7B,2BAA2B;IAC3B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,WAAW;SAC1B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,UAAU,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,SAAS,GAAQ,CAAC;AAChD,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { MarketDisplay } from "@newyorkcompute/kalshi-core";
|
|
2
|
-
interface UseMarketsResult {
|
|
3
|
-
markets: MarketDisplay[];
|
|
4
|
-
isLoading: boolean;
|
|
5
|
-
error: string | null;
|
|
6
|
-
refresh: () => Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Hook to fetch and poll market data
|
|
10
|
-
*/
|
|
11
|
-
export declare function useMarkets(pollInterval?: number): UseMarketsResult;
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=useMarkets.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMarkets.d.ts","sourceRoot":"","sources":["../../src/hooks/useMarkets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAejE,UAAU,gBAAgB;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,YAAY,SAAQ,GAAG,gBAAgB,CAuEjE"}
|
package/dist/hooks/useMarkets.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback, useRef } from "react";
|
|
2
|
-
import { GetMarketsStatusEnum } from "@newyorkcompute/kalshi-core";
|
|
3
|
-
import { useKalshi } from "./useKalshi.js";
|
|
4
|
-
// Helper to check if markets data has changed (compares by ticker list and prices)
|
|
5
|
-
function marketsChanged(prev, next) {
|
|
6
|
-
if (prev.length !== next.length)
|
|
7
|
-
return true;
|
|
8
|
-
for (let i = 0; i < prev.length; i++) {
|
|
9
|
-
if (prev[i].ticker !== next[i].ticker)
|
|
10
|
-
return true;
|
|
11
|
-
if (prev[i].yes_bid !== next[i].yes_bid)
|
|
12
|
-
return true;
|
|
13
|
-
if (prev[i].yes_ask !== next[i].yes_ask)
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Hook to fetch and poll market data
|
|
20
|
-
*/
|
|
21
|
-
export function useMarkets(pollInterval = 30000) {
|
|
22
|
-
const { marketApi } = useKalshi();
|
|
23
|
-
const [markets, setMarkets] = useState([]);
|
|
24
|
-
const [isLoading, setIsLoading] = useState(true);
|
|
25
|
-
const [error, setError] = useState(null);
|
|
26
|
-
const marketsRef = useRef([]);
|
|
27
|
-
const fetchMarkets = useCallback(async () => {
|
|
28
|
-
if (!marketApi)
|
|
29
|
-
return;
|
|
30
|
-
try {
|
|
31
|
-
// API signature: getMarkets(limit, cursor, eventTicker, seriesTicker, minCreatedTs, maxCreatedTs, maxCloseTs, minCloseTs, minSettledTs, maxSettledTs, status, tickers)
|
|
32
|
-
const response = await marketApi.getMarkets(100, // limit
|
|
33
|
-
undefined, // cursor
|
|
34
|
-
undefined, // eventTicker
|
|
35
|
-
undefined, // seriesTicker
|
|
36
|
-
undefined, // minCreatedTs
|
|
37
|
-
undefined, // maxCreatedTs
|
|
38
|
-
undefined, // maxCloseTs
|
|
39
|
-
undefined, // minCloseTs
|
|
40
|
-
undefined, // minSettledTs
|
|
41
|
-
undefined, // maxSettledTs
|
|
42
|
-
GetMarketsStatusEnum.Open // status
|
|
43
|
-
);
|
|
44
|
-
// Map to our display type
|
|
45
|
-
const marketData = (response.data.markets || []).map((m) => ({
|
|
46
|
-
ticker: m.ticker || "",
|
|
47
|
-
title: m.title || "",
|
|
48
|
-
status: (m.status || "open"),
|
|
49
|
-
yes_bid: m.yes_bid,
|
|
50
|
-
yes_ask: m.yes_ask,
|
|
51
|
-
no_bid: m.no_bid,
|
|
52
|
-
no_ask: m.no_ask,
|
|
53
|
-
volume: m.volume,
|
|
54
|
-
open_interest: m.open_interest,
|
|
55
|
-
close_time: m.close_time,
|
|
56
|
-
}));
|
|
57
|
-
// Only update state if data actually changed
|
|
58
|
-
if (marketsChanged(marketsRef.current, marketData)) {
|
|
59
|
-
marketsRef.current = marketData;
|
|
60
|
-
setMarkets(marketData);
|
|
61
|
-
}
|
|
62
|
-
setError(null);
|
|
63
|
-
}
|
|
64
|
-
catch (err) {
|
|
65
|
-
setError(err instanceof Error ? err.message : "Failed to fetch markets");
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
setIsLoading(false);
|
|
69
|
-
}
|
|
70
|
-
}, [marketApi]);
|
|
71
|
-
// Initial fetch
|
|
72
|
-
useEffect(() => {
|
|
73
|
-
fetchMarkets();
|
|
74
|
-
}, [fetchMarkets]);
|
|
75
|
-
// Polling
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
if (!marketApi)
|
|
78
|
-
return;
|
|
79
|
-
const interval = setInterval(fetchMarkets, pollInterval);
|
|
80
|
-
return () => clearInterval(interval);
|
|
81
|
-
}, [marketApi, pollInterval, fetchMarkets]);
|
|
82
|
-
return {
|
|
83
|
-
markets,
|
|
84
|
-
isLoading,
|
|
85
|
-
error,
|
|
86
|
-
refresh: fetchMarkets,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=useMarkets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMarkets.js","sourceRoot":"","sources":["../../src/hooks/useMarkets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { OrderbookDisplay } from "@newyorkcompute/kalshi-core";
|
|
2
|
-
interface UseOrderbookResult {
|
|
3
|
-
orderbook: OrderbookDisplay | null;
|
|
4
|
-
isLoading: boolean;
|
|
5
|
-
error: string | null;
|
|
6
|
-
refresh: () => Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Hook to fetch and poll orderbook data for a specific market
|
|
10
|
-
*/
|
|
11
|
-
export declare function useOrderbook(ticker: string | null, pollInterval?: number): UseOrderbookResult;
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=useOrderbook.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useOrderbook.d.ts","sourceRoot":"","sources":["../../src/hooks/useOrderbook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAapE,UAAU,kBAAkB;IAC1B,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,YAAY,SAAQ,GACnB,kBAAkB,CA0EpB"}
|