@trading-boy/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.
Files changed (106) hide show
  1. package/README.md +8 -0
  2. package/dist/api-client.d.ts +20 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +81 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/cli.d.ts +5 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +71 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/audit.d.ts +33 -0
  11. package/dist/commands/audit.d.ts.map +1 -0
  12. package/dist/commands/audit.js +135 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/behavioral.d.ts +40 -0
  15. package/dist/commands/behavioral.d.ts.map +1 -0
  16. package/dist/commands/behavioral.js +369 -0
  17. package/dist/commands/behavioral.js.map +1 -0
  18. package/dist/commands/billing.d.ts +12 -0
  19. package/dist/commands/billing.d.ts.map +1 -0
  20. package/dist/commands/billing.js +111 -0
  21. package/dist/commands/billing.js.map +1 -0
  22. package/dist/commands/catalysts.d.ts +8 -0
  23. package/dist/commands/catalysts.d.ts.map +1 -0
  24. package/dist/commands/catalysts.js +192 -0
  25. package/dist/commands/catalysts.js.map +1 -0
  26. package/dist/commands/config-cmd.d.ts +30 -0
  27. package/dist/commands/config-cmd.d.ts.map +1 -0
  28. package/dist/commands/config-cmd.js +265 -0
  29. package/dist/commands/config-cmd.js.map +1 -0
  30. package/dist/commands/context.d.ts +40 -0
  31. package/dist/commands/context.d.ts.map +1 -0
  32. package/dist/commands/context.js +385 -0
  33. package/dist/commands/context.js.map +1 -0
  34. package/dist/commands/decisions.d.ts +21 -0
  35. package/dist/commands/decisions.d.ts.map +1 -0
  36. package/dist/commands/decisions.js +327 -0
  37. package/dist/commands/decisions.js.map +1 -0
  38. package/dist/commands/events.d.ts +3 -0
  39. package/dist/commands/events.d.ts.map +1 -0
  40. package/dist/commands/events.js +201 -0
  41. package/dist/commands/events.js.map +1 -0
  42. package/dist/commands/infra.d.ts +22 -0
  43. package/dist/commands/infra.d.ts.map +1 -0
  44. package/dist/commands/infra.js +228 -0
  45. package/dist/commands/infra.js.map +1 -0
  46. package/dist/commands/journal.d.ts +3 -0
  47. package/dist/commands/journal.d.ts.map +1 -0
  48. package/dist/commands/journal.js +616 -0
  49. package/dist/commands/journal.js.map +1 -0
  50. package/dist/commands/login.d.ts +18 -0
  51. package/dist/commands/login.d.ts.map +1 -0
  52. package/dist/commands/login.js +121 -0
  53. package/dist/commands/login.js.map +1 -0
  54. package/dist/commands/logout.d.ts +7 -0
  55. package/dist/commands/logout.d.ts.map +1 -0
  56. package/dist/commands/logout.js +39 -0
  57. package/dist/commands/logout.js.map +1 -0
  58. package/dist/commands/narratives.d.ts +3 -0
  59. package/dist/commands/narratives.d.ts.map +1 -0
  60. package/dist/commands/narratives.js +336 -0
  61. package/dist/commands/narratives.js.map +1 -0
  62. package/dist/commands/query.d.ts +39 -0
  63. package/dist/commands/query.d.ts.map +1 -0
  64. package/dist/commands/query.js +212 -0
  65. package/dist/commands/query.js.map +1 -0
  66. package/dist/commands/review.d.ts +3 -0
  67. package/dist/commands/review.d.ts.map +1 -0
  68. package/dist/commands/review.js +481 -0
  69. package/dist/commands/review.js.map +1 -0
  70. package/dist/commands/risk.d.ts +19 -0
  71. package/dist/commands/risk.d.ts.map +1 -0
  72. package/dist/commands/risk.js +190 -0
  73. package/dist/commands/risk.js.map +1 -0
  74. package/dist/commands/social.d.ts +9 -0
  75. package/dist/commands/social.d.ts.map +1 -0
  76. package/dist/commands/social.js +386 -0
  77. package/dist/commands/social.js.map +1 -0
  78. package/dist/commands/subscribe.d.ts +45 -0
  79. package/dist/commands/subscribe.d.ts.map +1 -0
  80. package/dist/commands/subscribe.js +259 -0
  81. package/dist/commands/subscribe.js.map +1 -0
  82. package/dist/commands/trader.d.ts +12 -0
  83. package/dist/commands/trader.d.ts.map +1 -0
  84. package/dist/commands/trader.js +265 -0
  85. package/dist/commands/trader.js.map +1 -0
  86. package/dist/commands/watch.d.ts +26 -0
  87. package/dist/commands/watch.d.ts.map +1 -0
  88. package/dist/commands/watch.js +121 -0
  89. package/dist/commands/watch.js.map +1 -0
  90. package/dist/commands/whoami.d.ts +14 -0
  91. package/dist/commands/whoami.d.ts.map +1 -0
  92. package/dist/commands/whoami.js +73 -0
  93. package/dist/commands/whoami.js.map +1 -0
  94. package/dist/credentials.d.ts +18 -0
  95. package/dist/credentials.d.ts.map +1 -0
  96. package/dist/credentials.js +164 -0
  97. package/dist/credentials.js.map +1 -0
  98. package/dist/index.d.ts +33 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +28 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/utils.d.ts +6 -0
  103. package/dist/utils.d.ts.map +1 -0
  104. package/dist/utils.js +21 -0
  105. package/dist/utils.js.map +1 -0
  106. package/package.json +40 -0
@@ -0,0 +1,212 @@
1
+ import { Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { getConfig, createLogger } from '@trading-boy/core';
4
+ import { Neo4jClient } from '@trading-boy/graph-db';
5
+ import { TimescaleClient } from '@trading-boy/timeseries-db';
6
+ import { formatConnectionError } from '../utils.js';
7
+ // ─── Logger ───
8
+ const logger = createLogger('cli-query');
9
+ // ─── Client Factories ───
10
+ function createNeo4jClient() {
11
+ const config = getConfig();
12
+ return new Neo4jClient({
13
+ uri: config.NEO4J_URI,
14
+ username: config.NEO4J_USER,
15
+ password: config.NEO4J_PASSWORD,
16
+ });
17
+ }
18
+ function createTimescaleClient() {
19
+ const config = getConfig();
20
+ return new TimescaleClient({
21
+ host: config.TIMESCALE_HOST,
22
+ port: config.TIMESCALE_PORT,
23
+ user: config.TIMESCALE_USER,
24
+ password: config.TIMESCALE_PASSWORD,
25
+ database: config.TIMESCALE_DB,
26
+ });
27
+ }
28
+ // ─── Data Fetchers ───
29
+ export async function fetchTokenInfo(neo4j, symbol) {
30
+ // Fetch token node
31
+ const tokenResult = await neo4j.runCypher('MATCH (t:Token {symbol: $symbol}) RETURN t.name AS name, t.symbol AS symbol LIMIT 1', { symbol });
32
+ const tokenRecord = tokenResult.records[0];
33
+ if (!tokenRecord) {
34
+ return { name: null, symbol, chains: [], narratives: [] };
35
+ }
36
+ // Fetch chains
37
+ const chainResult = await neo4j.runCypher('MATCH (t:Token {symbol: $symbol})-[:DEPLOYED_ON]->(c:Chain) RETURN c.name AS name', { symbol });
38
+ const chains = chainResult.records.map((r) => r.name);
39
+ // Fetch narratives
40
+ const narrativeResult = await neo4j.runCypher('MATCH (t:Token {symbol: $symbol})-[:BELONGS_TO_NARRATIVE]->(n:Narrative) RETURN n.name AS name, n.status AS status', { symbol });
41
+ const narratives = narrativeResult.records.map((r) => ({
42
+ name: r.name,
43
+ status: r.status,
44
+ }));
45
+ return {
46
+ name: tokenRecord.name,
47
+ symbol: tokenRecord.symbol ?? symbol,
48
+ chains,
49
+ narratives,
50
+ };
51
+ }
52
+ export async function fetchPriceInfo(timescale, symbol) {
53
+ // Latest price
54
+ const latestResult = await timescale.runQuery('SELECT price_usd, time FROM price_ticks WHERE symbol = $1 ORDER BY time DESC LIMIT 1', [symbol]);
55
+ if (latestResult.rows.length === 0) {
56
+ return { price: null, change24h: null, lastUpdated: null };
57
+ }
58
+ const latestPrice = latestResult.rows[0].price_usd;
59
+ const lastUpdated = latestResult.rows[0].time;
60
+ // 24h ago price for change calculation
61
+ const oldResult = await timescale.runQuery(`SELECT price_usd FROM price_ticks
62
+ WHERE symbol = $1 AND time <= NOW() - INTERVAL '24 hours'
63
+ ORDER BY time DESC LIMIT 1`, [symbol]);
64
+ let change24h = null;
65
+ if (oldResult.rows.length > 0) {
66
+ const oldPrice = oldResult.rows[0].price_usd;
67
+ if (oldPrice > 0) {
68
+ change24h = ((latestPrice - oldPrice) / oldPrice) * 100;
69
+ }
70
+ }
71
+ return { price: latestPrice, change24h, lastUpdated };
72
+ }
73
+ export async function fetchFundingInfo(timescale, symbol) {
74
+ const result = await timescale.runQuery('SELECT funding_rate, time FROM funding_rates WHERE symbol = $1 ORDER BY time DESC LIMIT 1', [symbol + 'USDT']);
75
+ if (result.rows.length === 0) {
76
+ return { fundingRate: null, lastUpdated: null };
77
+ }
78
+ return {
79
+ fundingRate: result.rows[0].funding_rate,
80
+ lastUpdated: result.rows[0].time,
81
+ };
82
+ }
83
+ export async function fetchWhaleActivity(neo4j, symbol) {
84
+ const result = await neo4j.runCypher(`MATCH (w:Wallet)-[h:HOLDS]->(t:Token {symbol: $symbol})
85
+ WHERE w.entityType = 'WHALE'
86
+ RETURN count(w) AS count`, { symbol });
87
+ const record = result.records[0];
88
+ // Neo4j integers may come as objects with toNumber()
89
+ const rawCount = record?.count ?? 0;
90
+ const count = typeof rawCount === 'object' && rawCount !== null && 'toNumber' in rawCount
91
+ ? rawCount.toNumber()
92
+ : Number(rawCount);
93
+ return { count };
94
+ }
95
+ // ─── Formatter ───
96
+ export function formatQueryOutput(result) {
97
+ const lines = [];
98
+ // Header
99
+ lines.push('');
100
+ lines.push(chalk.bold.cyan(` ${result.token.symbol}`) + (result.token.name ? chalk.gray(` (${result.token.name})`) : ''));
101
+ lines.push(chalk.gray(' ' + '─'.repeat(50)));
102
+ // Chains
103
+ if (result.token.chains.length > 0) {
104
+ lines.push(` ${chalk.gray('Chains:')} ${result.token.chains.join(', ')}`);
105
+ }
106
+ else {
107
+ lines.push(` ${chalk.gray('Chains:')} ${chalk.dim('none')}`);
108
+ }
109
+ // Narratives
110
+ if (result.token.narratives.length > 0) {
111
+ const narrs = result.token.narratives
112
+ .map((n) => `${n.name} ${chalk.dim(`(${n.status})`)}`)
113
+ .join(', ');
114
+ lines.push(` ${chalk.gray('Narratives:')} ${narrs}`);
115
+ }
116
+ else {
117
+ lines.push(` ${chalk.gray('Narratives:')} ${chalk.dim('none')}`);
118
+ }
119
+ lines.push('');
120
+ // Price
121
+ if (result.price.price !== null) {
122
+ const priceStr = `$${result.price.price.toLocaleString('en-US', {
123
+ minimumFractionDigits: 2,
124
+ maximumFractionDigits: 6,
125
+ })}`;
126
+ lines.push(` ${chalk.gray('Price:')} ${chalk.white.bold(priceStr)}`);
127
+ if (result.price.change24h !== null) {
128
+ const changeStr = `${result.price.change24h >= 0 ? '+' : ''}${result.price.change24h.toFixed(2)}%`;
129
+ const colorFn = result.price.change24h >= 0 ? chalk.green : chalk.red;
130
+ lines.push(` ${chalk.gray('24h Change:')} ${colorFn(changeStr)}`);
131
+ }
132
+ else {
133
+ lines.push(` ${chalk.gray('24h Change:')} ${chalk.dim('n/a')}`);
134
+ }
135
+ }
136
+ else {
137
+ lines.push(` ${chalk.gray('Price:')} ${chalk.dim('no data')}`);
138
+ }
139
+ // Funding rate
140
+ if (result.funding.fundingRate !== null) {
141
+ const rateStr = `${result.funding.fundingRate >= 0 ? '+' : ''}${(result.funding.fundingRate * 100).toFixed(4)}%`;
142
+ const colorFn = result.funding.fundingRate >= 0 ? chalk.green : chalk.red;
143
+ lines.push(` ${chalk.gray('Funding:')} ${colorFn(rateStr)}`);
144
+ }
145
+ else {
146
+ lines.push(` ${chalk.gray('Funding:')} ${chalk.dim('no perp data')}`);
147
+ }
148
+ // Whale activity
149
+ lines.push(` ${chalk.gray('Whales:')} ${result.whaleActivity.count > 0 ? chalk.yellow(String(result.whaleActivity.count)) : chalk.dim('0')} active`);
150
+ // Last updated
151
+ if (result.price.lastUpdated) {
152
+ const timeStr = new Date(result.price.lastUpdated).toLocaleString();
153
+ lines.push('');
154
+ lines.push(` ${chalk.dim(`Last updated: ${timeStr}`)}`);
155
+ }
156
+ lines.push('');
157
+ return lines.join('\n');
158
+ }
159
+ // ─── Main Query Logic ───
160
+ export async function executeQuery(symbol) {
161
+ const neo4j = createNeo4jClient();
162
+ const timescale = createTimescaleClient();
163
+ try {
164
+ await Promise.all([neo4j.connect(), timescale.connect()]);
165
+ const upperSymbol = symbol.toUpperCase();
166
+ const [token, price, funding, whaleActivity] = await Promise.all([
167
+ fetchTokenInfo(neo4j, upperSymbol),
168
+ fetchPriceInfo(timescale, upperSymbol),
169
+ fetchFundingInfo(timescale, upperSymbol),
170
+ fetchWhaleActivity(neo4j, upperSymbol),
171
+ ]);
172
+ return { token, price, funding, whaleActivity };
173
+ }
174
+ finally {
175
+ await Promise.all([
176
+ neo4j.disconnect().catch((err) => {
177
+ logger.error({ error: String(err) }, 'Failed to disconnect Neo4j');
178
+ }),
179
+ timescale.disconnect().catch((err) => {
180
+ logger.error({ error: String(err) }, 'Failed to disconnect TimescaleDB');
181
+ }),
182
+ ]);
183
+ }
184
+ }
185
+ // ─── Command Registration ───
186
+ export function registerQueryCommand(program) {
187
+ program
188
+ .command('query <symbol>')
189
+ .description('Query token info, price, funding rate, and whale activity')
190
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
191
+ .action(async (symbol, options) => {
192
+ try {
193
+ const result = await executeQuery(symbol);
194
+ if (options.format === 'json') {
195
+ console.log(JSON.stringify(result, null, 2));
196
+ }
197
+ else {
198
+ console.log(formatQueryOutput(result));
199
+ }
200
+ }
201
+ catch (error) {
202
+ const message = error instanceof Error ? error.message : String(error);
203
+ logger.error({ error: message }, 'Query failed');
204
+ console.error(chalk.red(`Error: ${message}`));
205
+ const guidance = formatConnectionError(message);
206
+ if (guidance)
207
+ console.error(guidance);
208
+ process.exitCode = 1;
209
+ }
210
+ });
211
+ }
212
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerReviewCommand(journal: Command): void;
3
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoWpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8K5D"}