@taggr/cli 1.0.3 → 1.0.5

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 (49) hide show
  1. package/README.md +100 -2
  2. package/dist/commands/check.d.ts +7 -0
  3. package/dist/commands/check.d.ts.map +1 -0
  4. package/dist/commands/check.js +162 -0
  5. package/dist/commands/check.js.map +1 -0
  6. package/dist/commands/ci.d.ts +9 -0
  7. package/dist/commands/ci.d.ts.map +1 -0
  8. package/dist/commands/ci.js +63 -0
  9. package/dist/commands/ci.js.map +1 -0
  10. package/dist/commands/list.d.ts.map +1 -1
  11. package/dist/commands/list.js +6 -3
  12. package/dist/commands/list.js.map +1 -1
  13. package/dist/commands/login.d.ts.map +1 -1
  14. package/dist/commands/login.js +17 -4
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/pull.d.ts.map +1 -1
  17. package/dist/commands/pull.js +32 -7
  18. package/dist/commands/pull.js.map +1 -1
  19. package/dist/commands/status.d.ts +2 -0
  20. package/dist/commands/status.d.ts.map +1 -0
  21. package/dist/commands/status.js +66 -0
  22. package/dist/commands/status.js.map +1 -0
  23. package/dist/commands/watch.d.ts +6 -0
  24. package/dist/commands/watch.d.ts.map +1 -0
  25. package/dist/commands/watch.js +138 -0
  26. package/dist/commands/watch.js.map +1 -0
  27. package/dist/commands/whoami.d.ts.map +1 -1
  28. package/dist/commands/whoami.js +20 -4
  29. package/dist/commands/whoami.js.map +1 -1
  30. package/dist/index.js +38 -5
  31. package/dist/index.js.map +1 -1
  32. package/dist/types.d.ts +11 -0
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/utils/api.d.ts +5 -0
  35. package/dist/utils/api.d.ts.map +1 -1
  36. package/dist/utils/api.js +82 -6
  37. package/dist/utils/api.js.map +1 -1
  38. package/dist/utils/config.d.ts.map +1 -1
  39. package/dist/utils/config.js +15 -5
  40. package/dist/utils/config.js.map +1 -1
  41. package/dist/utils/generator.d.ts +3 -3
  42. package/dist/utils/generator.d.ts.map +1 -1
  43. package/dist/utils/generator.js +103 -18
  44. package/dist/utils/generator.js.map +1 -1
  45. package/dist/utils/metadata.d.ts +25 -0
  46. package/dist/utils/metadata.d.ts.map +1 -0
  47. package/dist/utils/metadata.js +157 -0
  48. package/dist/utils/metadata.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,66 @@
1
+ import chalk from 'chalk';
2
+ import { getMetadata } from '../utils/metadata.js';
3
+ import { getOutputDir } from '../utils/generator.js';
4
+ import fs from 'fs-extra';
5
+ import path from 'path';
6
+ export async function statusCommand() {
7
+ try {
8
+ const metadata = await getMetadata();
9
+ if (!metadata) {
10
+ console.log(chalk.yellow('No sync metadata found'));
11
+ console.log();
12
+ console.log(chalk.dim('Run "taggr pull --all" to sync labels.'));
13
+ return;
14
+ }
15
+ console.log();
16
+ console.log(chalk.bold('Taggr Sync Status'));
17
+ console.log();
18
+ // Show sync info
19
+ const syncedDate = new Date(metadata.syncedAt);
20
+ console.log(chalk.dim(' Last synced: ') + chalk.white(syncedDate.toLocaleString()));
21
+ console.log(chalk.dim(' API URL: ') + chalk.white(metadata.apiUrl));
22
+ console.log();
23
+ // Count labels
24
+ const labelCount = Object.keys(metadata.labels).length;
25
+ console.log(chalk.dim(` Labels: ${chalk.white(labelCount.toString())}`));
26
+ console.log();
27
+ // Show label versions
28
+ if (labelCount > 0) {
29
+ console.log(chalk.bold('Label Versions:'));
30
+ console.log();
31
+ const labels = Object.entries(metadata.labels)
32
+ .sort(([a], [b]) => a.localeCompare(b))
33
+ .slice(0, 10); // Show first 10
34
+ for (const [name, meta] of labels) {
35
+ const syncedDate = new Date(meta.syncedAt);
36
+ console.log(` ${chalk.white(name.padEnd(30))} ` +
37
+ `${chalk.dim('v' + meta.version)} ` +
38
+ `${chalk.dim('(' + syncedDate.toLocaleDateString() + ')')}`);
39
+ }
40
+ if (labelCount > 10) {
41
+ console.log();
42
+ console.log(chalk.dim(` ... and ${labelCount - 10} more`));
43
+ }
44
+ }
45
+ // Check if files exist
46
+ console.log();
47
+ const outputDir = getOutputDir();
48
+ const labelsJsonPath = path.join(outputDir, 'labels.json');
49
+ const labelsDtsPath = path.join(outputDir, 'labels.d.ts');
50
+ const metadataPath = path.join(outputDir, '.taggr.json');
51
+ console.log(chalk.bold('Files:'));
52
+ console.log();
53
+ console.log(` ${await fs.pathExists(labelsJsonPath) ? chalk.green('✓') : chalk.red('✗')} ` +
54
+ chalk.white('labels.json'));
55
+ console.log(` ${await fs.pathExists(labelsDtsPath) ? chalk.green('✓') : chalk.red('✗')} ` +
56
+ chalk.white('labels.d.ts'));
57
+ console.log(` ${await fs.pathExists(metadataPath) ? chalk.green('✓') : chalk.red('✗')} ` +
58
+ chalk.white('.taggr.json'));
59
+ console.log();
60
+ }
61
+ catch (error) {
62
+ console.error(chalk.red(`Error: ${error.message}`));
63
+ process.exit(1);
64
+ }
65
+ }
66
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface WatchOptions {
2
+ interval?: number;
3
+ }
4
+ export declare function watchCommand(options: WatchOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkJvE"}
@@ -0,0 +1,138 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { requireAuth } from '../utils/config.js';
4
+ import { initApi, getLabels } from '../utils/api.js';
5
+ import { getMetadata } from '../utils/metadata.js';
6
+ import { writeAllLabels } from '../utils/generator.js';
7
+ export async function watchCommand(options) {
8
+ const interval = options.interval || 30; // Default 30 seconds
9
+ const spinner = ora('Starting watch mode...').start();
10
+ try {
11
+ // Check if metadata exists
12
+ const metadata = await getMetadata();
13
+ if (!metadata) {
14
+ spinner.fail(chalk.red('No sync metadata found'));
15
+ console.log();
16
+ console.log(chalk.dim('Run "taggr pull --all" first to sync labels.'));
17
+ process.exit(1);
18
+ }
19
+ // Initialize API
20
+ const config = await requireAuth();
21
+ initApi(config);
22
+ spinner.succeed(chalk.green('Watch mode started'));
23
+ console.log();
24
+ console.log(chalk.dim(`Watching for label changes (checking every ${interval} seconds)...`));
25
+ console.log(chalk.dim('Press Ctrl+C to stop'));
26
+ console.log();
27
+ let lastChecksum = metadata.overallChecksum;
28
+ let iteration = 0;
29
+ // Watch loop
30
+ const watchInterval = setInterval(async () => {
31
+ iteration++;
32
+ const checkSpinner = ora(`Checking for changes... (${iteration})`).start();
33
+ try {
34
+ // Get current labels from API
35
+ const labelsResponse = await getLabels();
36
+ if (!labelsResponse || !labelsResponse.labels) {
37
+ checkSpinner.fail(chalk.red('Failed to fetch labels'));
38
+ return;
39
+ }
40
+ const { labels } = labelsResponse;
41
+ // Calculate current checksum
42
+ const currentMetadata = await getMetadata();
43
+ if (!currentMetadata) {
44
+ checkSpinner.stop();
45
+ return;
46
+ }
47
+ // Compare versions
48
+ const outdated = [];
49
+ const newLabels = [];
50
+ for (const label of labels) {
51
+ const localMeta = currentMetadata.labels[label.name];
52
+ if (!localMeta) {
53
+ newLabels.push(label.name);
54
+ }
55
+ else if (localMeta.version !== label.version) {
56
+ outdated.push({
57
+ name: label.name,
58
+ oldVersion: localMeta.version,
59
+ newVersion: label.version,
60
+ });
61
+ }
62
+ }
63
+ // Check for deleted labels
64
+ const deleted = [];
65
+ for (const labelName of Object.keys(currentMetadata.labels)) {
66
+ if (!labels.find(l => l.name === labelName)) {
67
+ deleted.push(labelName);
68
+ }
69
+ }
70
+ // If there are changes, pull and notify
71
+ if (outdated.length > 0 || newLabels.length > 0 || deleted.length > 0) {
72
+ checkSpinner.stop();
73
+ console.log();
74
+ console.log(chalk.yellow('⚠ Label changes detected!'));
75
+ if (outdated.length > 0) {
76
+ console.log();
77
+ console.log(chalk.yellow(` ${outdated.length} label(s) updated:`));
78
+ for (const change of outdated) {
79
+ console.log(` ${chalk.white(change.name)}: ` +
80
+ `${chalk.red(change.oldVersion)} → ${chalk.green(change.newVersion)}`);
81
+ }
82
+ }
83
+ if (newLabels.length > 0) {
84
+ console.log();
85
+ console.log(chalk.green(` ${newLabels.length} new label(s):`));
86
+ for (const labelName of newLabels) {
87
+ console.log(` ${chalk.white(labelName)}`);
88
+ }
89
+ }
90
+ if (deleted.length > 0) {
91
+ console.log();
92
+ console.log(chalk.red(` ${deleted.length} label(s) deleted:`));
93
+ for (const labelName of deleted) {
94
+ console.log(` ${chalk.white(labelName)}`);
95
+ }
96
+ }
97
+ // Pull updated labels
98
+ console.log();
99
+ const pullSpinner = ora('Pulling updated labels...').start();
100
+ try {
101
+ await writeAllLabels(labels, config.apiUrl);
102
+ pullSpinner.succeed(chalk.green('Labels updated successfully!'));
103
+ console.log();
104
+ }
105
+ catch (error) {
106
+ pullSpinner.fail(chalk.red('Failed to update labels'));
107
+ console.error(chalk.red(`Error: ${error.message}`));
108
+ }
109
+ }
110
+ else {
111
+ checkSpinner.succeed(chalk.dim('No changes detected'));
112
+ }
113
+ }
114
+ catch (error) {
115
+ checkSpinner.fail(chalk.red('Check failed'));
116
+ console.error(chalk.red(`Error: ${error.message}`));
117
+ }
118
+ }, interval * 1000);
119
+ // Handle graceful shutdown
120
+ process.on('SIGINT', () => {
121
+ clearInterval(watchInterval);
122
+ console.log();
123
+ console.log(chalk.dim('Watch mode stopped'));
124
+ process.exit(0);
125
+ });
126
+ // Keep process alive
127
+ process.on('SIGTERM', () => {
128
+ clearInterval(watchInterval);
129
+ process.exit(0);
130
+ });
131
+ }
132
+ catch (error) {
133
+ spinner.fail(chalk.red('Failed to start watch mode'));
134
+ console.error(chalk.red(`\nError: ${error.message}`));
135
+ process.exit(1);
136
+ }
137
+ }
138
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BnD"}
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDnD"}
@@ -12,15 +12,31 @@ export async function whoamiCommand() {
12
12
  throw new Error('Invalid response from server: user data not found');
13
13
  }
14
14
  const { user } = whoamiResponse;
15
+ // Validate user object has required properties
16
+ if (!user.uid || !user.email) {
17
+ throw new Error('Invalid user data: missing required fields (uid, email)');
18
+ }
15
19
  spinner.stop();
16
20
  console.log();
17
21
  console.log(chalk.bold('Logged in as:'));
18
22
  console.log();
19
23
  console.log(chalk.dim(' Name: ') + chalk.white(user.displayName || 'Not set'));
20
- console.log(chalk.dim(' Email: ') + chalk.white(user.email));
21
- console.log(chalk.dim(' UID: ') + chalk.white(user.uid));
22
- console.log(chalk.dim(' Labels: ') + chalk.white(user.stats.totalLabels.toString()));
23
- console.log(chalk.dim(' Joined: ') + chalk.white(new Date(user.createdAt).toLocaleDateString()));
24
+ console.log(chalk.dim(' Email: ') + chalk.white(user.email || 'Not set'));
25
+ console.log(chalk.dim(' UID: ') + chalk.white(user.uid || 'Not set'));
26
+ // Safely access stats
27
+ const totalLabels = user.stats?.totalLabels ?? 0;
28
+ console.log(chalk.dim(' Labels: ') + chalk.white(totalLabels.toString()));
29
+ // Safely format date
30
+ let joinedDate = 'Unknown';
31
+ if (user.createdAt) {
32
+ try {
33
+ joinedDate = new Date(user.createdAt).toLocaleDateString();
34
+ }
35
+ catch {
36
+ joinedDate = 'Invalid date';
37
+ }
38
+ }
39
+ console.log(chalk.dim(' Joined: ') + chalk.white(joinedDate));
24
40
  console.log();
25
41
  }
26
42
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,cAAc,GAAG,MAAM,MAAM,EAAE,CAAC;QAEtC,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC;QAEhC,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,cAAc,GAAG,MAAM,MAAM,EAAE,CAAC;QAEtC,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC;QAEhC,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;QAE1E,sBAAsB;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE3E,qBAAqB;QACrB,IAAI,UAAU,GAAG,SAAS,CAAC;QAC3B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,cAAc,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -9,6 +9,9 @@ import { logoutCommand } from './commands/logout.js';
9
9
  import { whoamiCommand } from './commands/whoami.js';
10
10
  import { listCommand } from './commands/list.js';
11
11
  import { pullCommand } from './commands/pull.js';
12
+ import { checkCommand } from './commands/check.js';
13
+ import { watchCommand } from './commands/watch.js';
14
+ import { statusCommand } from './commands/status.js';
12
15
  // Read version from package.json
13
16
  // When installed globally: node_modules/@taggr/cli/dist/index.js -> ../package.json
14
17
  // When in development: packages/cli/dist/index.js -> ../package.json
@@ -33,7 +36,7 @@ program
33
36
  program
34
37
  .command('login <api-key>')
35
38
  .description('Authenticate with your Taggr API key')
36
- .option('-u, --url <url>', 'API URL (default: https://taggr-lab.vercel.app/api)')
39
+ .option('-u, --url <url>', 'API URL (default: https://taggr.onrender.com/api)')
37
40
  .action(loginCommand);
38
41
  // Logout command
39
42
  program
@@ -57,19 +60,49 @@ program
57
60
  .description('Pull label(s) and generate local files')
58
61
  .option('-a, --all', 'Pull all labels')
59
62
  .action(pullCommand);
63
+ // Check command
64
+ program
65
+ .command('check')
66
+ .description('Check if labels are up-to-date')
67
+ .option('--strict', 'Fail if labels are outdated (for CI/CD)')
68
+ .option('--fix', 'Show fix instructions')
69
+ .action(checkCommand);
70
+ // Watch command
71
+ program
72
+ .command('watch')
73
+ .description('Watch for label changes and auto-sync')
74
+ .option('-i, --interval <seconds>', 'Poll interval in seconds', '30')
75
+ .action((options) => {
76
+ watchCommand({ interval: parseInt(options.interval) || 30 });
77
+ });
78
+ // Status command
79
+ program
80
+ .command('status')
81
+ .description('Show sync status and label versions')
82
+ .action(statusCommand);
83
+ // Sync command (alias for pull --all)
84
+ program
85
+ .command('sync')
86
+ .description('Force sync all labels (alias for pull --all)')
87
+ .action(async () => {
88
+ const { pullCommand } = await import('./commands/pull.js');
89
+ await pullCommand(undefined, { all: true });
90
+ });
60
91
  // Help styling
61
92
  program.addHelpText('after', `
62
93
  ${chalk.bold('Examples:')}
63
94
  ${chalk.dim('$')} taggr login YOUR_API_KEY ${chalk.dim('# Authenticate with API key')}
64
95
  ${chalk.dim('$')} taggr list ${chalk.dim('# List all your labels')}
65
- ${chalk.dim('$')} taggr pull my-label ${chalk.dim('# Pull a specific label')}
66
96
  ${chalk.dim('$')} taggr pull --all ${chalk.dim('# Pull all labels')}
97
+ ${chalk.dim('$')} taggr check ${chalk.dim('# Check if labels are up-to-date')}
98
+ ${chalk.dim('$')} taggr check --strict ${chalk.dim('# Fail build if outdated (CI/CD)')}
99
+ ${chalk.dim('$')} taggr watch ${chalk.dim('# Auto-sync on changes')}
100
+ ${chalk.dim('$')} taggr status ${chalk.dim('# Show sync status')}
67
101
  ${chalk.dim('$')} taggr whoami ${chalk.dim('# Show current user')}
68
- ${chalk.dim('$')} taggr logout ${chalk.dim('# Remove saved credentials')}
69
102
 
70
103
  ${chalk.bold('After pulling, import your labels:')}
71
- ${chalk.white("import myLabel from './taggr/my-label.js';")}
72
- ${chalk.white('console.log(myLabel.value);')}
104
+ ${chalk.white("import labels from './taggr/labels.json';")}
105
+ ${chalk.white('console.log(labels.myLabel);')}
73
106
  `);
74
107
  program.parse();
75
108
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -40,4 +40,15 @@ export interface LabelResponse {
40
40
  export interface WhoamiResponse {
41
41
  user: UserInfo;
42
42
  }
43
+ export interface LabelMetadata {
44
+ version: string;
45
+ syncedAt: string;
46
+ checksum: string;
47
+ }
48
+ export interface TaggrMetadata {
49
+ syncedAt: string;
50
+ apiUrl: string;
51
+ labels: Record<string, LabelMetadata>;
52
+ overallChecksum: string;
53
+ }
43
54
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;CACzB"}
@@ -15,4 +15,9 @@ export declare function getLabels(): Promise<LabelsResponse>;
15
15
  * Get a single label by name
16
16
  */
17
17
  export declare function getLabelByName(name: string): Promise<LabelResponse>;
18
+ /**
19
+ * Get label versions for checking if local labels are up-to-date
20
+ * This endpoint should return current versions of all labels
21
+ */
22
+ export declare function getLabelVersions(): Promise<Record<string, string>>;
18
23
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CASjD;AAgCD;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,CA2BtD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,CA4BzD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwBzE"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACZ,MAAM,aAAa,CAAC;AAyBrB;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAiBjD;AA2DD;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,CA+BtD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,CAgCzD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4BzE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgBxE"}
package/dist/utils/api.js CHANGED
@@ -1,13 +1,39 @@
1
1
  import axios, { AxiosError } from 'axios';
2
2
  let apiClient = null;
3
+ /**
4
+ * Validate API URL format
5
+ */
6
+ function validateApiUrl(url) {
7
+ if (!url || typeof url !== 'string') {
8
+ throw new Error('API URL must be a non-empty string');
9
+ }
10
+ try {
11
+ const urlObj = new URL(url);
12
+ if (!['http:', 'https:'].includes(urlObj.protocol)) {
13
+ throw new Error('API URL must use http or https protocol');
14
+ }
15
+ }
16
+ catch (error) {
17
+ if (error instanceof TypeError) {
18
+ throw new Error(`Invalid API URL format: ${url}. Please provide a valid URL (e.g., https://api.example.com/api)`);
19
+ }
20
+ throw error;
21
+ }
22
+ }
3
23
  /**
4
24
  * Initialize the API client with config
5
25
  */
6
26
  export function initApi(config) {
27
+ // Validate API URL
28
+ validateApiUrl(config.apiUrl);
29
+ // Validate API key
30
+ if (!config.apiKey || typeof config.apiKey !== 'string' || config.apiKey.trim().length === 0) {
31
+ throw new Error('API key must be a non-empty string');
32
+ }
7
33
  apiClient = axios.create({
8
34
  baseURL: config.apiUrl,
9
35
  headers: {
10
- 'X-API-Key': config.apiKey,
36
+ 'X-API-Key': config.apiKey.trim(),
11
37
  'Content-Type': 'application/json',
12
38
  },
13
39
  timeout: 30000,
@@ -28,8 +54,17 @@ function getClient() {
28
54
  function handleError(error) {
29
55
  if (error instanceof AxiosError) {
30
56
  if (error.response) {
31
- const data = error.response.data;
32
- if (data.error) {
57
+ // Check if we got HTML (frontend) instead of JSON (backend)
58
+ const responseData = error.response.data;
59
+ if (typeof responseData === 'string' && (responseData.trim().startsWith('<!doctype') || responseData.trim().startsWith('<!DOCTYPE') || responseData.trim().startsWith('<html'))) {
60
+ throw new Error('Received HTML response instead of JSON. The API URL is pointing to the frontend.\n' +
61
+ 'Please ensure:\n' +
62
+ ' 1. Your backend is deployed and accessible\n' +
63
+ ' 2. Use the --url flag to specify the correct backend API URL\n' +
64
+ ' 3. Example: taggr login <API_KEY> --url https://your-backend-url.com/api');
65
+ }
66
+ const data = responseData;
67
+ if (data && typeof data === 'object' && 'error' in data && data.error) {
33
68
  throw new Error(data.error.message);
34
69
  }
35
70
  throw new Error(`API error: ${error.response.status}`);
@@ -41,12 +76,27 @@ function handleError(error) {
41
76
  }
42
77
  throw error;
43
78
  }
79
+ /**
80
+ * Check if response is HTML (indicates wrong URL - hitting frontend instead of backend)
81
+ */
82
+ function checkForHtmlResponse(data, baseURL) {
83
+ if (typeof data === 'string' && (data.trim().startsWith('<!doctype') || data.trim().startsWith('<!DOCTYPE') || data.trim().startsWith('<html'))) {
84
+ throw new Error('Received HTML response instead of JSON. This usually means:\n' +
85
+ ' 1. The API URL is pointing to the frontend instead of the backend\n' +
86
+ ' 2. The backend is not deployed or is at a different URL\n' +
87
+ ' 3. Please check your backend deployment URL and use --url flag if needed\n' +
88
+ ` Current URL: ${baseURL || apiClient?.defaults.baseURL || 'unknown'}`);
89
+ }
90
+ }
44
91
  /**
45
92
  * Get current user info
46
93
  */
47
94
  export async function whoami() {
48
95
  try {
49
- const response = await getClient().get('/cli/whoami');
96
+ const client = getClient();
97
+ const response = await client.get('/cli/whoami');
98
+ // Check if we got HTML instead of JSON (wrong URL)
99
+ checkForHtmlResponse(response.data, client.defaults.baseURL);
50
100
  // Check if response has the expected structure
51
101
  if (!response.data) {
52
102
  throw new Error(`Invalid API response: response.data is ${typeof response.data}`);
@@ -73,7 +123,10 @@ export async function whoami() {
73
123
  */
74
124
  export async function getLabels() {
75
125
  try {
76
- const response = await getClient().get('/cli/labels');
126
+ const client = getClient();
127
+ const response = await client.get('/cli/labels');
128
+ // Check if we got HTML instead of JSON (wrong URL)
129
+ checkForHtmlResponse(response.data, client.defaults.baseURL);
77
130
  // Check if response has the expected structure
78
131
  if (!response.data) {
79
132
  throw new Error(`Invalid API response: response.data is ${typeof response.data}`);
@@ -100,7 +153,10 @@ export async function getLabels() {
100
153
  */
101
154
  export async function getLabelByName(name) {
102
155
  try {
103
- const response = await getClient().get(`/cli/labels/${name}`);
156
+ const client = getClient();
157
+ const response = await client.get(`/cli/labels/${name}`);
158
+ // Check if we got HTML instead of JSON (wrong URL)
159
+ checkForHtmlResponse(response.data, client.defaults.baseURL);
104
160
  // Check if response has the expected structure
105
161
  if (!response.data) {
106
162
  throw new Error(`Invalid API response: response.data is ${typeof response.data}`);
@@ -119,4 +175,24 @@ export async function getLabelByName(name) {
119
175
  return handleError(error);
120
176
  }
121
177
  }
178
+ /**
179
+ * Get label versions for checking if local labels are up-to-date
180
+ * This endpoint should return current versions of all labels
181
+ */
182
+ export async function getLabelVersions() {
183
+ try {
184
+ const client = getClient();
185
+ // For now, we'll use the labels endpoint and extract versions
186
+ // In the future, this could be a dedicated endpoint: /cli/labels/versions
187
+ const response = await getLabels();
188
+ const versions = {};
189
+ for (const label of response.labels) {
190
+ versions[label.name] = label.version;
191
+ }
192
+ return versions;
193
+ }
194
+ catch (error) {
195
+ return handleError(error);
196
+ }
197
+ }
122
198
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe/C;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgB7D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAO5E;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAQxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe/C;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA0B7D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAO5E;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAQxD"}
@@ -4,7 +4,7 @@ import os from 'os';
4
4
  const CONFIG_DIR = path.join(os.homedir(), '.taggr');
5
5
  const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
6
6
  // Default to production API URL, fallback to localhost for development
7
- const DEFAULT_API_URL = process.env.TAGGR_API_URL || 'https://taggr-lab.vercel.app/api';
7
+ const DEFAULT_API_URL = process.env.TAGGR_API_URL || 'https://taggr.onrender.com/api';
8
8
  /**
9
9
  * Ensure config directory exists
10
10
  */
@@ -19,14 +19,24 @@ export async function getConfig() {
19
19
  await ensureConfigDir();
20
20
  if (await fs.pathExists(CONFIG_FILE)) {
21
21
  const config = await fs.readJson(CONFIG_FILE);
22
- return {
23
- apiKey: config.apiKey || '',
24
- apiUrl: config.apiUrl || DEFAULT_API_URL,
25
- };
22
+ // Validate config structure
23
+ if (config && typeof config === 'object' && !Array.isArray(config)) {
24
+ return {
25
+ apiKey: config.apiKey || '',
26
+ apiUrl: config.apiUrl || DEFAULT_API_URL,
27
+ };
28
+ }
29
+ else {
30
+ // Config file is corrupted (not an object)
31
+ console.warn(`Warning: Config file at ${CONFIG_FILE} is corrupted. Please login again.`);
32
+ return null;
33
+ }
26
34
  }
27
35
  return null;
28
36
  }
29
37
  catch (error) {
38
+ // If JSON parsing fails, config is corrupted
39
+ console.warn(`Warning: Could not read config file at ${CONFIG_FILE}. Please login again.`);
30
40
  return null;
31
41
  }
32
42
  }