@marketmotion/cli 0.1.1 → 0.1.3

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 CHANGED
@@ -10,6 +10,12 @@ Intelligence terminal for prediction markets. Search 17,000+ entities, scan cros
10
10
  npm install -g @marketmotion/cli
11
11
  ```
12
12
 
13
+ ## Update
14
+
15
+ ```bash
16
+ npm install -g @marketmotion/cli
17
+ ```
18
+
13
19
  ## Quick Start
14
20
 
15
21
  1. Get your API key at [marketmotion.xyz/developer](https://marketmotion.xyz/developer)
@@ -10,11 +10,12 @@ import { registerNewsCommand } from '../src/commands/news.js';
10
10
  import { registerGraphCommand } from '../src/commands/graph.js';
11
11
  import { registerWebhookCommand } from '../src/commands/webhook.js';
12
12
  import { requireAuth } from '../src/utils/auth.js';
13
+ import { getCurrentVersion, checkForUpdates, runUpdate } from '../src/utils/updateNotifier.js';
13
14
  const program = new Command();
14
15
  program
15
16
  .name('motion')
16
17
  .description('Market Motion CLI — Intelligence terminal for prediction markets')
17
- .version('0.1.0');
18
+ .version(getCurrentVersion());
18
19
  // Register all commands
19
20
  registerAuthCommand(program);
20
21
  registerEntitiesCommand(program);
@@ -25,6 +26,13 @@ registerArbCommand(program);
25
26
  registerNewsCommand(program);
26
27
  registerGraphCommand(program);
27
28
  registerWebhookCommand(program);
29
+ // Update command
30
+ program
31
+ .command('update')
32
+ .description('Update the CLI to the latest version')
33
+ .action(async () => {
34
+ await runUpdate();
35
+ });
28
36
  // Dashboard command (lazy-loaded since it pulls in ink/react)
29
37
  program
30
38
  .command('dashboard')
@@ -34,6 +42,8 @@ program
34
42
  const { renderDashboard } = await import('../src/ui/Dashboard.js');
35
43
  renderDashboard();
36
44
  });
45
+ // Check for updates (non-blocking, once per day)
46
+ checkForUpdates();
37
47
  // If no command given, show help
38
48
  program.parse(process.argv);
39
49
  if (program.args.length === 0 && process.argv.length <= 2) {
@@ -1 +1 @@
1
- {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../bin/motion.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,wBAAwB;AACxB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,8DAA8D;AAC9D,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,WAAW,EAAE,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACnE,eAAe,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,iCAAiC;AACjC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../bin/motion.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE/F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEhC,wBAAwB;AACxB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,8DAA8D;AAC9D,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,WAAW,EAAE,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACnE,eAAe,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,iDAAiD;AACjD,eAAe,EAAE,CAAC;AAElB,iCAAiC;AACjC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function getCurrentVersion(): string;
2
+ export declare function checkForUpdates(): Promise<void>;
3
+ export declare function runUpdate(): Promise<void>;
4
+ //# sourceMappingURL=updateNotifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateNotifier.d.ts","sourceRoot":"","sources":["../../../src/utils/updateNotifier.ts"],"names":[],"mappings":"AAmBA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AA4BD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBrD;AAYD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B/C"}
@@ -0,0 +1,101 @@
1
+ import { createRequire } from 'node:module';
2
+ import { execSync } from 'node:child_process';
3
+ import Conf from 'conf';
4
+ import chalk from 'chalk';
5
+ const require = createRequire(import.meta.url);
6
+ const pkg = require('../../../package.json');
7
+ const cache = new Conf({
8
+ projectName: 'motion-update',
9
+ });
10
+ const ONE_DAY = 24 * 60 * 60 * 1000;
11
+ export function getCurrentVersion() {
12
+ return pkg.version;
13
+ }
14
+ async function fetchLatestVersion() {
15
+ try {
16
+ const controller = new AbortController();
17
+ const timeout = setTimeout(() => controller.abort(), 3000);
18
+ const res = await fetch('https://registry.npmjs.org/@marketmotion/cli/latest', {
19
+ signal: controller.signal,
20
+ });
21
+ clearTimeout(timeout);
22
+ if (!res.ok)
23
+ return null;
24
+ const data = (await res.json());
25
+ return data.version;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function compareVersions(current, latest) {
32
+ const c = current.split('.').map(Number);
33
+ const l = latest.split('.').map(Number);
34
+ for (let i = 0; i < 3; i++) {
35
+ if ((l[i] || 0) > (c[i] || 0))
36
+ return true;
37
+ if ((l[i] || 0) < (c[i] || 0))
38
+ return false;
39
+ }
40
+ return false;
41
+ }
42
+ export async function checkForUpdates() {
43
+ const lastCheck = cache.get('lastCheck') || 0;
44
+ const now = Date.now();
45
+ if (now - lastCheck < ONE_DAY) {
46
+ // Use cached result
47
+ const latestVersion = cache.get('latestVersion');
48
+ if (latestVersion && compareVersions(pkg.version, latestVersion)) {
49
+ printUpdateNotice(pkg.version, latestVersion);
50
+ }
51
+ return;
52
+ }
53
+ // Check in background (non-blocking)
54
+ fetchLatestVersion().then((latest) => {
55
+ if (!latest)
56
+ return;
57
+ cache.set('lastCheck', now);
58
+ cache.set('latestVersion', latest);
59
+ if (compareVersions(pkg.version, latest)) {
60
+ printUpdateNotice(pkg.version, latest);
61
+ }
62
+ }).catch(() => { });
63
+ }
64
+ function printUpdateNotice(current, latest) {
65
+ const msg = [
66
+ '',
67
+ chalk.yellow(` Update available: ${current} → ${chalk.green(latest)}`),
68
+ chalk.dim(` Run ${chalk.cyan('motion update')} to upgrade`),
69
+ '',
70
+ ].join('\n');
71
+ console.error(msg);
72
+ }
73
+ export async function runUpdate() {
74
+ const current = pkg.version;
75
+ console.log(chalk.dim(`Current version: ${current}`));
76
+ console.log(chalk.dim('Checking for updates...'));
77
+ const latest = await fetchLatestVersion();
78
+ if (!latest) {
79
+ console.log(chalk.red('Failed to check for updates. Check your internet connection.'));
80
+ process.exit(1);
81
+ }
82
+ if (!compareVersions(current, latest)) {
83
+ console.log(chalk.green(`Already on the latest version (${current}).`));
84
+ return;
85
+ }
86
+ console.log(chalk.yellow(`Updating ${current} → ${chalk.green(latest)}...`));
87
+ console.log('');
88
+ try {
89
+ execSync('npm install -g @marketmotion/cli@latest', { stdio: 'inherit' });
90
+ console.log('');
91
+ console.log(chalk.green(`Successfully updated to v${latest}`));
92
+ // Clear cache
93
+ cache.set('lastCheck', Date.now());
94
+ cache.set('latestVersion', latest);
95
+ }
96
+ catch {
97
+ console.log(chalk.red('Update failed. Try manually: npm install -g @marketmotion/cli@latest'));
98
+ process.exit(1);
99
+ }
100
+ }
101
+ //# sourceMappingURL=updateNotifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateNotifier.js","sourceRoot":"","sources":["../../../src/utils/updateNotifier.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marketmotion/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Market Motion CLI — Intelligence terminal for prediction markets. Search 17K+ entities, scan cross-venue arbitrage, monitor real-time alerts, and explore the entity graph from your terminal.",
5
5
  "type": "module",
6
6
  "main": "./dist/bin/motion.js",