@marketmotion/cli 0.1.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 +151 -0
- package/dist/bin/motion.d.ts +3 -0
- package/dist/bin/motion.d.ts.map +1 -0
- package/dist/bin/motion.js +42 -0
- package/dist/bin/motion.js.map +1 -0
- package/dist/src/client/api.d.ts +120 -0
- package/dist/src/client/api.d.ts.map +1 -0
- package/dist/src/client/api.js +212 -0
- package/dist/src/client/api.js.map +1 -0
- package/dist/src/commands/alerts.d.ts +3 -0
- package/dist/src/commands/alerts.d.ts.map +1 -0
- package/dist/src/commands/alerts.js +128 -0
- package/dist/src/commands/alerts.js.map +1 -0
- package/dist/src/commands/arb.d.ts +3 -0
- package/dist/src/commands/arb.d.ts.map +1 -0
- package/dist/src/commands/arb.js +61 -0
- package/dist/src/commands/arb.js.map +1 -0
- package/dist/src/commands/auth.d.ts +3 -0
- package/dist/src/commands/auth.d.ts.map +1 -0
- package/dist/src/commands/auth.js +116 -0
- package/dist/src/commands/auth.js.map +1 -0
- package/dist/src/commands/entities.d.ts +3 -0
- package/dist/src/commands/entities.d.ts.map +1 -0
- package/dist/src/commands/entities.js +56 -0
- package/dist/src/commands/entities.js.map +1 -0
- package/dist/src/commands/entity.d.ts +3 -0
- package/dist/src/commands/entity.d.ts.map +1 -0
- package/dist/src/commands/entity.js +58 -0
- package/dist/src/commands/entity.js.map +1 -0
- package/dist/src/commands/graph.d.ts +3 -0
- package/dist/src/commands/graph.d.ts.map +1 -0
- package/dist/src/commands/graph.js +48 -0
- package/dist/src/commands/graph.js.map +1 -0
- package/dist/src/commands/markets.d.ts +3 -0
- package/dist/src/commands/markets.d.ts.map +1 -0
- package/dist/src/commands/markets.js +132 -0
- package/dist/src/commands/markets.js.map +1 -0
- package/dist/src/commands/news.d.ts +3 -0
- package/dist/src/commands/news.d.ts.map +1 -0
- package/dist/src/commands/news.js +88 -0
- package/dist/src/commands/news.js.map +1 -0
- package/dist/src/commands/webhook.d.ts +3 -0
- package/dist/src/commands/webhook.d.ts.map +1 -0
- package/dist/src/commands/webhook.js +165 -0
- package/dist/src/commands/webhook.js.map +1 -0
- package/dist/src/config.d.ts +14 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +27 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/formatters/json.d.ts +2 -0
- package/dist/src/formatters/json.d.ts.map +1 -0
- package/dist/src/formatters/json.js +4 -0
- package/dist/src/formatters/json.js.map +1 -0
- package/dist/src/formatters/table.d.ts +11 -0
- package/dist/src/formatters/table.d.ts.map +1 -0
- package/dist/src/formatters/table.js +554 -0
- package/dist/src/formatters/table.js.map +1 -0
- package/dist/src/types.d.ts +243 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/ui/AlertFeed.d.ts +8 -0
- package/dist/src/ui/AlertFeed.d.ts.map +1 -0
- package/dist/src/ui/AlertFeed.js +68 -0
- package/dist/src/ui/AlertFeed.js.map +1 -0
- package/dist/src/ui/ArbPanel.d.ts +8 -0
- package/dist/src/ui/ArbPanel.d.ts.map +1 -0
- package/dist/src/ui/ArbPanel.js +61 -0
- package/dist/src/ui/ArbPanel.js.map +1 -0
- package/dist/src/ui/Dashboard.d.ts +2 -0
- package/dist/src/ui/Dashboard.d.ts.map +1 -0
- package/dist/src/ui/Dashboard.js +127 -0
- package/dist/src/ui/Dashboard.js.map +1 -0
- package/dist/src/ui/EntityDetail.d.ts +8 -0
- package/dist/src/ui/EntityDetail.d.ts.map +1 -0
- package/dist/src/ui/EntityDetail.js +152 -0
- package/dist/src/ui/EntityDetail.js.map +1 -0
- package/dist/src/ui/MarketTable.d.ts +9 -0
- package/dist/src/ui/MarketTable.d.ts.map +1 -0
- package/dist/src/ui/MarketTable.js +90 -0
- package/dist/src/ui/MarketTable.js.map +1 -0
- package/dist/src/ui/Spinner.d.ts +7 -0
- package/dist/src/ui/Spinner.d.ts.map +1 -0
- package/dist/src/ui/Spinner.js +7 -0
- package/dist/src/ui/Spinner.js.map +1 -0
- package/dist/src/utils/auth.d.ts +4 -0
- package/dist/src/utils/auth.d.ts.map +1 -0
- package/dist/src/utils/auth.js +17 -0
- package/dist/src/utils/auth.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { createClient, ApiError } from '../client/api.js';
|
|
4
|
+
import { formatAlertList } from '../formatters/table.js';
|
|
5
|
+
import { formatJson } from '../formatters/json.js';
|
|
6
|
+
import { requireAuth } from '../utils/auth.js';
|
|
7
|
+
export function registerAlertsCommand(program) {
|
|
8
|
+
const alerts = program
|
|
9
|
+
.command('alerts')
|
|
10
|
+
.description('View and monitor alerts');
|
|
11
|
+
alerts
|
|
12
|
+
.command('list')
|
|
13
|
+
.description('List recent alerts')
|
|
14
|
+
.option('--type <type>', 'Filter by type (injury, arbitrage, political, finance, conflict, crowding)')
|
|
15
|
+
.option('--limit <n>', 'Max results', '20')
|
|
16
|
+
.option('--json', 'Output raw JSON')
|
|
17
|
+
.action(async (opts) => {
|
|
18
|
+
requireAuth();
|
|
19
|
+
const spinner = ora({ text: 'Loading alerts...', stream: process.stderr }).start();
|
|
20
|
+
try {
|
|
21
|
+
const client = createClient();
|
|
22
|
+
const result = await client.getAlerts({
|
|
23
|
+
type: opts.type,
|
|
24
|
+
limit: parseInt(opts.limit),
|
|
25
|
+
});
|
|
26
|
+
spinner.stop();
|
|
27
|
+
if (opts.json) {
|
|
28
|
+
console.log(formatJson(result));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const data = result.data;
|
|
32
|
+
console.log('');
|
|
33
|
+
console.log(` ${chalk.bold('Alerts')}${opts.type ? chalk.dim(` [${opts.type}]`) : ''} ${chalk.dim(`(${data.unreadCount} unread)`)}`);
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(formatAlertList(data.alerts || []));
|
|
36
|
+
if (data.pagination.total > data.alerts.length) {
|
|
37
|
+
console.log(chalk.dim(`\n Showing ${data.alerts.length} of ${data.pagination.total} total`));
|
|
38
|
+
}
|
|
39
|
+
console.log('');
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
spinner.stop();
|
|
43
|
+
if (err instanceof ApiError) {
|
|
44
|
+
console.error(chalk.red(err.message));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.error(chalk.red('Error:'), err.message);
|
|
48
|
+
}
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
alerts
|
|
53
|
+
.command('watch')
|
|
54
|
+
.description('Live alert feed (polls every 30s)')
|
|
55
|
+
.option('--type <types>', 'Comma-separated types to watch (e.g. injury,arbitrage)')
|
|
56
|
+
.option('--interval <seconds>', 'Poll interval in seconds', '30')
|
|
57
|
+
.option('--json', 'Output raw JSON')
|
|
58
|
+
.action(async (opts) => {
|
|
59
|
+
requireAuth();
|
|
60
|
+
const client = createClient();
|
|
61
|
+
const interval = parseInt(opts.interval) * 1000;
|
|
62
|
+
let lastAlertId = null;
|
|
63
|
+
console.log('');
|
|
64
|
+
console.log(chalk.bold(' Watching alerts') +
|
|
65
|
+
(opts.type ? chalk.dim(` [${opts.type}]`) : '') +
|
|
66
|
+
chalk.dim(` (every ${opts.interval}s, Ctrl+C to stop)`));
|
|
67
|
+
console.log(chalk.dim(' ' + '\u2500'.repeat(60)));
|
|
68
|
+
console.log('');
|
|
69
|
+
const poll = async () => {
|
|
70
|
+
try {
|
|
71
|
+
const result = await client.getAlerts({
|
|
72
|
+
type: opts.type?.replace(/,/g, ','),
|
|
73
|
+
limit: 10,
|
|
74
|
+
});
|
|
75
|
+
const alerts = result.data.alerts || [];
|
|
76
|
+
if (alerts.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
// On first poll, show latest alerts
|
|
79
|
+
if (lastAlertId === null) {
|
|
80
|
+
if (opts.json) {
|
|
81
|
+
for (const a of alerts.slice(0, 5)) {
|
|
82
|
+
console.log(JSON.stringify(a));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(formatAlertList(alerts.slice(0, 5)));
|
|
87
|
+
}
|
|
88
|
+
lastAlertId = alerts[0].id;
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Show only new alerts
|
|
92
|
+
const newAlerts = [];
|
|
93
|
+
for (const a of alerts) {
|
|
94
|
+
if (a.id === lastAlertId)
|
|
95
|
+
break;
|
|
96
|
+
newAlerts.push(a);
|
|
97
|
+
}
|
|
98
|
+
if (newAlerts.length > 0) {
|
|
99
|
+
lastAlertId = newAlerts[0].id;
|
|
100
|
+
if (opts.json) {
|
|
101
|
+
for (const a of newAlerts) {
|
|
102
|
+
console.log(JSON.stringify(a));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.log(formatAlertList(newAlerts));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof ApiError) {
|
|
112
|
+
console.error(chalk.red(` Poll error: ${err.message}`));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
// Initial poll
|
|
117
|
+
await poll();
|
|
118
|
+
// Set up interval
|
|
119
|
+
const timer = setInterval(poll, interval);
|
|
120
|
+
// Handle Ctrl+C gracefully
|
|
121
|
+
process.on('SIGINT', () => {
|
|
122
|
+
clearInterval(timer);
|
|
123
|
+
console.log(chalk.dim('\n Stopped watching.'));
|
|
124
|
+
process.exit(0);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=alerts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../../src/commands/alerts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arb.d.ts","sourceRoot":"","sources":["../../../src/commands/arb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwDzD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { createClient, ApiError } from '../client/api.js';
|
|
4
|
+
import { formatMispricingList } from '../formatters/table.js';
|
|
5
|
+
import { formatJson } from '../formatters/json.js';
|
|
6
|
+
import { requireAuth } from '../utils/auth.js';
|
|
7
|
+
export function registerArbCommand(program) {
|
|
8
|
+
const arb = program
|
|
9
|
+
.command('arb')
|
|
10
|
+
.description('Cross-venue arbitrage scanner');
|
|
11
|
+
arb
|
|
12
|
+
.command('scan')
|
|
13
|
+
.description('Scan for cross-venue mispricings')
|
|
14
|
+
.option('--min-spread <pct>', 'Minimum spread percentage (e.g. 3 for 3%)', '0')
|
|
15
|
+
.option('--category <category>', 'Filter by category')
|
|
16
|
+
.option('--limit <n>', 'Max results', '30')
|
|
17
|
+
.option('--actionable', 'Only show actionable mispricings')
|
|
18
|
+
.option('--json', 'Output raw JSON')
|
|
19
|
+
.action(async (opts) => {
|
|
20
|
+
requireAuth();
|
|
21
|
+
const spinner = ora({ text: 'Scanning for mispricings across venues...', stream: process.stderr }).start();
|
|
22
|
+
try {
|
|
23
|
+
const client = createClient();
|
|
24
|
+
const minSpread = parseFloat(opts.minSpread) / 100; // Convert percentage to decimal
|
|
25
|
+
const result = await client.getMispricings({
|
|
26
|
+
minSpread: minSpread > 0 ? minSpread : undefined,
|
|
27
|
+
category: opts.category,
|
|
28
|
+
limit: parseInt(opts.limit),
|
|
29
|
+
actionableOnly: opts.actionable,
|
|
30
|
+
});
|
|
31
|
+
spinner.stop();
|
|
32
|
+
if (opts.json) {
|
|
33
|
+
console.log(formatJson(result));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const mispricings = result.mispricings || [];
|
|
37
|
+
console.log('');
|
|
38
|
+
console.log(` ${chalk.bold('Arbitrage Scanner')} ${chalk.dim(`(${mispricings.length} results${opts.minSpread !== '0' ? `, >=${opts.minSpread}% spread` : ''})`)}`);
|
|
39
|
+
console.log(` ${chalk.dim(`Scanned at ${result.scannedAt || new Date().toISOString()}`)}`);
|
|
40
|
+
console.log('');
|
|
41
|
+
if (mispricings.length === 0) {
|
|
42
|
+
console.log(chalk.dim(' No mispricings found matching your criteria.'));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(formatMispricingList(mispricings));
|
|
46
|
+
}
|
|
47
|
+
console.log('');
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
spinner.stop();
|
|
51
|
+
if (err instanceof ApiError) {
|
|
52
|
+
console.error(chalk.red(err.message));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.error(chalk.red('Error:'), err.message);
|
|
56
|
+
}
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=arb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arb.js","sourceRoot":"","sources":["../../../src/commands/arb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqH1D"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createClient } from '../client/api.js';
|
|
3
|
+
import { getApiKey, setApiKey, clearApiKey, getConfigPath, getBaseUrl } from '../config.js';
|
|
4
|
+
import { DEVELOPER_URL } from '../utils/auth.js';
|
|
5
|
+
export function registerAuthCommand(program) {
|
|
6
|
+
const auth = program.command('auth').description('Manage API authentication');
|
|
7
|
+
auth
|
|
8
|
+
.command('login')
|
|
9
|
+
.description('Set your API key')
|
|
10
|
+
.argument('[key]', 'API key (or pass via MOTION_API_KEY env var)')
|
|
11
|
+
.action(async (key) => {
|
|
12
|
+
if (!key) {
|
|
13
|
+
// Read from stdin if piped, otherwise prompt
|
|
14
|
+
if (!process.stdin.isTTY) {
|
|
15
|
+
const chunks = [];
|
|
16
|
+
for await (const chunk of process.stdin) {
|
|
17
|
+
chunks.push(chunk);
|
|
18
|
+
}
|
|
19
|
+
key = Buffer.concat(chunks).toString().trim();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.error(chalk.red('Usage: motion auth login <api-key>'));
|
|
23
|
+
console.error('');
|
|
24
|
+
console.error(` Get your API key at: ${chalk.cyan(DEVELOPER_URL)}`);
|
|
25
|
+
console.error('');
|
|
26
|
+
console.error(chalk.dim(' Or pipe it in: echo "your-key" | motion auth login'));
|
|
27
|
+
console.error(chalk.dim(' Or use env var: MOTION_API_KEY=your-key motion ...'));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!key) {
|
|
32
|
+
console.error(chalk.red('No API key provided.'));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// Validate the key
|
|
36
|
+
const client = createClient(key);
|
|
37
|
+
try {
|
|
38
|
+
const result = await client.validateKey();
|
|
39
|
+
if (!result.success) {
|
|
40
|
+
console.error(chalk.red('Invalid API key.'));
|
|
41
|
+
console.error(chalk.dim(` Get a new key at: ${DEVELOPER_URL}`));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
setApiKey(key);
|
|
45
|
+
console.log(chalk.green('Authenticated successfully.'));
|
|
46
|
+
if (result.key) {
|
|
47
|
+
console.log(` Name: ${result.key.name}`);
|
|
48
|
+
console.log(` Tier: ${chalk.cyan(result.key.tier)}`);
|
|
49
|
+
if (result.key.usage) {
|
|
50
|
+
console.log(` Usage: ${result.key.usage.today}/${result.key.usage.limit} requests today`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
console.log(chalk.dim(` Config: ${getConfigPath()}`));
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
console.error(chalk.red('Failed to validate API key:'), err.message);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
auth
|
|
61
|
+
.command('logout')
|
|
62
|
+
.description('Remove stored API key')
|
|
63
|
+
.action(() => {
|
|
64
|
+
clearApiKey();
|
|
65
|
+
console.log(chalk.green('API key removed.'));
|
|
66
|
+
});
|
|
67
|
+
auth
|
|
68
|
+
.command('status')
|
|
69
|
+
.description('Show current authentication status')
|
|
70
|
+
.action(async () => {
|
|
71
|
+
const key = getApiKey();
|
|
72
|
+
const baseUrl = getBaseUrl();
|
|
73
|
+
if (!key) {
|
|
74
|
+
console.log(chalk.yellow('Not authenticated.'));
|
|
75
|
+
console.log(` Get your API key at: ${chalk.cyan(DEVELOPER_URL)}`);
|
|
76
|
+
console.log(chalk.dim(' Then run: motion auth login <api-key>'));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
console.log(` API URL: ${chalk.dim(baseUrl)}`);
|
|
80
|
+
console.log(` Key: ${chalk.dim(key.slice(0, 8) + '...' + key.slice(-4))}`);
|
|
81
|
+
console.log(` Config: ${chalk.dim(getConfigPath())}`);
|
|
82
|
+
const client = createClient(key);
|
|
83
|
+
try {
|
|
84
|
+
const result = await client.validateKey();
|
|
85
|
+
if (result.success && result.key) {
|
|
86
|
+
console.log(` Status: ${chalk.green('Valid')}`);
|
|
87
|
+
console.log(` Name: ${result.key.name}`);
|
|
88
|
+
console.log(` Tier: ${chalk.cyan(result.key.tier)}`);
|
|
89
|
+
if (result.key.usage) {
|
|
90
|
+
console.log(` Usage: ${result.key.usage.today}/${result.key.usage.limit} requests today`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.log(` Status: ${chalk.red('Invalid')}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.log(` Status: ${chalk.red('Error')} - ${err.message}`);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
auth
|
|
102
|
+
.command('signup')
|
|
103
|
+
.description('Open the developer portal to get an API key')
|
|
104
|
+
.action(async () => {
|
|
105
|
+
console.log(` Opening ${chalk.cyan(DEVELOPER_URL)} ...`);
|
|
106
|
+
try {
|
|
107
|
+
const open = (await import('open')).default;
|
|
108
|
+
await open(DEVELOPER_URL);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
console.log('');
|
|
112
|
+
console.log(` Could not open browser. Visit: ${chalk.cyan(DEVELOPER_URL)}`);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../src/commands/entities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqD9D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { createClient, ApiError } from '../client/api.js';
|
|
4
|
+
import { formatEntityList } from '../formatters/table.js';
|
|
5
|
+
import { formatJson } from '../formatters/json.js';
|
|
6
|
+
import { requireAuth } from '../utils/auth.js';
|
|
7
|
+
export function registerEntitiesCommand(program) {
|
|
8
|
+
const entities = program
|
|
9
|
+
.command('entities')
|
|
10
|
+
.description('Search and browse entities');
|
|
11
|
+
entities
|
|
12
|
+
.command('search')
|
|
13
|
+
.description('Search 17K+ entities')
|
|
14
|
+
.argument('<query>', 'Search query')
|
|
15
|
+
.option('--category <category>', 'Filter by category (e.g. sports, politics, crypto)')
|
|
16
|
+
.option('--type <type>', 'Filter by entity type (person, team, org, place, asset, league, event)')
|
|
17
|
+
.option('--limit <n>', 'Max results', '20')
|
|
18
|
+
.option('--json', 'Output raw JSON')
|
|
19
|
+
.action(async (query, opts) => {
|
|
20
|
+
requireAuth();
|
|
21
|
+
const spinner = ora({ text: 'Searching entities...', stream: process.stderr }).start();
|
|
22
|
+
try {
|
|
23
|
+
const client = createClient();
|
|
24
|
+
const result = await client.searchEntities(query, {
|
|
25
|
+
category: opts.category,
|
|
26
|
+
type: opts.type,
|
|
27
|
+
limit: parseInt(opts.limit),
|
|
28
|
+
});
|
|
29
|
+
spinner.stop();
|
|
30
|
+
if (opts.json) {
|
|
31
|
+
console.log(formatJson(result));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(` ${chalk.bold('Entity Search:')} ${chalk.cyan(query)}${opts.category ? chalk.dim(` [${opts.category}]`) : ''}${opts.type ? chalk.dim(` [${opts.type}]`) : ''}`);
|
|
36
|
+
console.log('');
|
|
37
|
+
console.log(formatEntityList(result.items || []));
|
|
38
|
+
const count = result.items?.length || 0;
|
|
39
|
+
if (count > 0 && result.nextCursor) {
|
|
40
|
+
console.log(chalk.dim(` Showing ${count} results. More available.`));
|
|
41
|
+
}
|
|
42
|
+
console.log('');
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
spinner.stop();
|
|
46
|
+
if (err instanceof ApiError) {
|
|
47
|
+
console.error(chalk.red(err.message));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.error(chalk.red('Error:'), err.message);
|
|
51
|
+
}
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/commands/entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../src/commands/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsD5D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { createClient, ApiError } from '../client/api.js';
|
|
4
|
+
import { formatEntityDetail } from '../formatters/table.js';
|
|
5
|
+
import { formatJson } from '../formatters/json.js';
|
|
6
|
+
import { requireAuth } from '../utils/auth.js';
|
|
7
|
+
export function registerEntityCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('entity')
|
|
10
|
+
.description('Get detailed entity profile')
|
|
11
|
+
.argument('<slug>', 'Entity slug (e.g. nba-player-1966, nba-bos)')
|
|
12
|
+
.option('--markets', 'Show linked markets')
|
|
13
|
+
.option('--graph', 'Show entity relationship graph')
|
|
14
|
+
.option('--json', 'Output raw JSON')
|
|
15
|
+
.action(async (slug, opts) => {
|
|
16
|
+
requireAuth();
|
|
17
|
+
const spinner = ora({ text: `Loading entity ${slug}...`, stream: process.stderr }).start();
|
|
18
|
+
try {
|
|
19
|
+
const client = createClient();
|
|
20
|
+
if (opts.graph) {
|
|
21
|
+
const graph = await client.getEntityGraph(slug, { depth: 2 });
|
|
22
|
+
spinner.stop();
|
|
23
|
+
if (opts.json) {
|
|
24
|
+
console.log(formatJson(graph));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const { formatGraph } = await import('../formatters/table.js');
|
|
28
|
+
console.log(formatGraph(graph.nodes || [], graph.edges || []));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const result = await client.getEntity(slug);
|
|
32
|
+
spinner.stop();
|
|
33
|
+
if (opts.json) {
|
|
34
|
+
console.log(formatJson(result));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!result.entity) {
|
|
38
|
+
console.error(chalk.red(`Entity not found: ${slug}`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
console.log(formatEntityDetail(result));
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
spinner.stop();
|
|
45
|
+
if (err instanceof ApiError && err.status === 404) {
|
|
46
|
+
console.error(chalk.red(`Entity not found: ${slug}`));
|
|
47
|
+
}
|
|
48
|
+
else if (err instanceof ApiError) {
|
|
49
|
+
console.error(chalk.red(err.message));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.error(chalk.red('Error:'), err.message);
|
|
53
|
+
}
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../src/commands/entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuC3D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { createClient, ApiError } from '../client/api.js';
|
|
4
|
+
import { formatGraph } from '../formatters/table.js';
|
|
5
|
+
import { formatJson } from '../formatters/json.js';
|
|
6
|
+
import { requireAuth } from '../utils/auth.js';
|
|
7
|
+
export function registerGraphCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('graph')
|
|
10
|
+
.description('Explore entity relationship graph')
|
|
11
|
+
.argument('<slug>', 'Entity slug')
|
|
12
|
+
.option('--depth <n>', 'Traversal depth (1-3)', '1')
|
|
13
|
+
.option('--max-nodes <n>', 'Max nodes to return', '50')
|
|
14
|
+
.option('--json', 'Output raw JSON')
|
|
15
|
+
.action(async (slug, opts) => {
|
|
16
|
+
requireAuth();
|
|
17
|
+
const spinner = ora({ text: `Loading graph for ${slug}...`, stream: process.stderr }).start();
|
|
18
|
+
try {
|
|
19
|
+
const client = createClient();
|
|
20
|
+
const result = await client.getEntityGraph(slug, {
|
|
21
|
+
depth: parseInt(opts.depth),
|
|
22
|
+
maxNodes: parseInt(opts.maxNodes),
|
|
23
|
+
});
|
|
24
|
+
spinner.stop();
|
|
25
|
+
if (opts.json) {
|
|
26
|
+
console.log(formatJson(result));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
console.log('');
|
|
30
|
+
console.log(` ${chalk.bold('Entity Graph:')} ${chalk.cyan(slug)} ${chalk.dim(`(depth=${opts.depth})`)}`);
|
|
31
|
+
console.log(formatGraph(result.nodes || [], result.edges || []));
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
spinner.stop();
|
|
35
|
+
if (err instanceof ApiError && err.status === 404) {
|
|
36
|
+
console.error(chalk.red(`Entity not found: ${slug}`));
|
|
37
|
+
}
|
|
38
|
+
else if (err instanceof ApiError) {
|
|
39
|
+
console.error(chalk.red(err.message));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.error(chalk.red('Error:'), err.message);
|
|
43
|
+
}
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/commands/graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;SACjC,MAAM,CAAC,aAAa,EAAE,uBAAuB,EAAE,GAAG,CAAC;SACnD,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,IAAI,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE;QACnC,WAAW,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,qBAAqB,IAAI,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;gBAC/C,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1G,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAClD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../../src/commands/markets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmI7D"}
|