@trazze/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/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env node
2
+ import { style } from '@trazze/sdk';
3
+ import { TrazeClient } from './client.js';
4
+ import { statusCommand } from './commands/status.js';
5
+ import { tailCommand } from './commands/tail.js';
6
+ import { searchCommand, errorsCommand } from './commands/search.js';
7
+ const args = process.argv.slice(2);
8
+ const command = args[0];
9
+ const serverUrl = process.env['TRAZE_URL'] ?? 'http://localhost:4400';
10
+ const client = new TrazeClient({ baseUrl: serverUrl });
11
+ function parseFlags(flags) {
12
+ const result = {};
13
+ for (let i = 0; i < flags.length; i++) {
14
+ const flag = flags[i];
15
+ if (flag.startsWith('--')) {
16
+ const key = flag.slice(2);
17
+ const value = flags[i + 1];
18
+ if (value && !value.startsWith('--')) {
19
+ result[key] = value;
20
+ i++;
21
+ }
22
+ else {
23
+ result[key] = 'true';
24
+ }
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ async function main() {
30
+ const flags = parseFlags(args.slice(1));
31
+ switch (command) {
32
+ case 'status':
33
+ await statusCommand(client);
34
+ break;
35
+ case 'tail':
36
+ await tailCommand(client, {
37
+ ...(flags['project'] !== undefined && { project: flags['project'] }),
38
+ ...(flags['level'] !== undefined && { level: flags['level'] }),
39
+ ...(flags['poll'] !== undefined && { poll: Number(flags['poll']) }),
40
+ });
41
+ break;
42
+ case 'search': {
43
+ const query = flags['query'] ?? args[1];
44
+ if (!query || query.startsWith('--')) {
45
+ console.error(`${style.errorMark()} Usage: traze search <query> [--project <name>] [--level <level>]`);
46
+ process.exitCode = 1;
47
+ return;
48
+ }
49
+ await searchCommand(client, {
50
+ query,
51
+ ...(flags['project'] !== undefined && { project: flags['project'] }),
52
+ ...(flags['level'] !== undefined && { level: flags['level'] }),
53
+ ...(flags['limit'] !== undefined && { limit: flags['limit'] }),
54
+ });
55
+ break;
56
+ }
57
+ case 'errors':
58
+ await errorsCommand(client, {
59
+ ...(flags['project'] !== undefined && { project: flags['project'] }),
60
+ ...(flags['limit'] !== undefined && { limit: flags['limit'] }),
61
+ });
62
+ break;
63
+ case 'help':
64
+ case '--help':
65
+ case '-h':
66
+ case undefined:
67
+ printHelp();
68
+ break;
69
+ default:
70
+ console.error(`${style.errorMark()} Unknown command: ${command}`);
71
+ printHelp();
72
+ process.exitCode = 1;
73
+ }
74
+ }
75
+ function printHelp() {
76
+ console.log(`
77
+ ${style.boldCyan('traze')} ${style.dim('— Traze CLI')}
78
+
79
+ ${style.bold('Usage:')} traze <command> [options]
80
+
81
+ ${style.bold('Commands:')}
82
+ ${style.cyan('status')} Show server health and statistics
83
+ ${style.cyan('tail')} Stream live logs
84
+ ${style.cyan('search')} ${style.dim('<query>')} Search logs by message
85
+ ${style.cyan('errors')} List grouped errors
86
+
87
+ ${style.bold('Global Options:')}
88
+ ${style.dim('--project <name>')} Filter by project
89
+ ${style.dim('--level <level>')} Filter by log level (debug, info, warn, error)
90
+ ${style.dim('--limit <n>')} Max results to return
91
+
92
+ ${style.bold('Environment:')}
93
+ ${style.dim('TRAZE_URL')} Server URL (default: http://localhost:4400)
94
+ `);
95
+ }
96
+ main().catch((err) => {
97
+ console.error(err);
98
+ process.exitCode = 1;
99
+ });
100
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export interface TrazeClientOptions {
2
+ baseUrl: string;
3
+ headers?: Record<string, string>;
4
+ }
5
+ export interface StreamLogEntry {
6
+ level: string;
7
+ message: string;
8
+ timestamp: string;
9
+ context?: Record<string, unknown>;
10
+ }
11
+ export declare class TrazeClient {
12
+ private readonly baseUrl;
13
+ private readonly headers;
14
+ constructor(options: TrazeClientOptions);
15
+ health(): Promise<{
16
+ status: string;
17
+ version: string;
18
+ uptime: number;
19
+ timestamp: string;
20
+ }>;
21
+ stats(): Promise<{
22
+ logs: number;
23
+ traces: number;
24
+ errors: number;
25
+ metrics: number;
26
+ dbSizeBytes: number;
27
+ }>;
28
+ logs(params?: Record<string, string>): Promise<{
29
+ data: unknown[];
30
+ total: number;
31
+ hasMore: boolean;
32
+ }>;
33
+ traces(params?: Record<string, string>): Promise<{
34
+ data: unknown[];
35
+ total: number;
36
+ hasMore: boolean;
37
+ }>;
38
+ traceDetail(traceId: string): Promise<{
39
+ traceId: string;
40
+ spans: unknown[];
41
+ }>;
42
+ errors(params?: Record<string, string>): Promise<{
43
+ data: unknown[];
44
+ total: number;
45
+ hasMore: boolean;
46
+ }>;
47
+ errorGroups(params?: Record<string, string>): Promise<{
48
+ data: unknown[];
49
+ }>;
50
+ metrics(params?: Record<string, string>): Promise<{
51
+ data: unknown[];
52
+ total: number;
53
+ hasMore: boolean;
54
+ }>;
55
+ streamLogs(params?: Record<string, string>, signal?: AbortSignal): AsyncGenerator<StreamLogEntry>;
56
+ private get;
57
+ private parseSseMessage;
58
+ }
59
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAOD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE,kBAAkB;IAKjC,MAAM;gBACgB,MAAM;iBAAW,MAAM;gBAAU,MAAM;mBAAa,MAAM;;IAKhF,KAAK;cAED,MAAM;gBACJ,MAAM;gBACN,MAAM;iBACL,MAAM;qBACF,MAAM;;IAIjB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cAChB,OAAO,EAAE;eAAS,MAAM;iBAAW,OAAO;;IAM9D,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cAClB,OAAO,EAAE;eAAS,MAAM;iBAAW,OAAO;;IAM9D,WAAW,CAAC,OAAO,EAAE,MAAM;iBACJ,MAAM;eAAS,OAAO,EAAE;;IAG/C,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cAClB,OAAO,EAAE;eAAS,MAAM;iBAAW,OAAO;;IAM9D,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cACvB,OAAO,EAAE;;IAG7B,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cACnB,OAAO,EAAE;eAAS,MAAM;iBAAW,OAAO;;IAM7D,UAAU,CACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,cAAc,CAAC;YA0DnB,GAAG;IAejB,OAAO,CAAC,eAAe;CAqBxB"}
package/dist/client.js ADDED
@@ -0,0 +1,118 @@
1
+ export class TrazeClient {
2
+ baseUrl;
3
+ headers;
4
+ constructor(options) {
5
+ this.baseUrl = options.baseUrl.replace(/\/$/, '');
6
+ this.headers = { 'content-type': 'application/json', ...(options.headers ?? {}) };
7
+ }
8
+ async health() {
9
+ return this.get('/v1/health');
10
+ }
11
+ async stats() {
12
+ return this.get('/v1/stats');
13
+ }
14
+ async logs(params) {
15
+ return this.get('/v1/logs', params);
16
+ }
17
+ async traces(params) {
18
+ return this.get('/v1/traces', params);
19
+ }
20
+ async traceDetail(traceId) {
21
+ return this.get(`/v1/traces/${traceId}`);
22
+ }
23
+ async errors(params) {
24
+ return this.get('/v1/errors', params);
25
+ }
26
+ async errorGroups(params) {
27
+ return this.get('/v1/errors/groups', params);
28
+ }
29
+ async metrics(params) {
30
+ return this.get('/v1/metrics', params);
31
+ }
32
+ async *streamLogs(params, signal) {
33
+ const url = new URL('/v1/logs/stream', this.baseUrl);
34
+ if (params) {
35
+ for (const [key, value] of Object.entries(params)) {
36
+ if (value)
37
+ url.searchParams.set(key, value);
38
+ }
39
+ }
40
+ const response = await fetch(url.toString(), {
41
+ headers: {
42
+ ...this.headers,
43
+ accept: 'text/event-stream',
44
+ },
45
+ ...(signal ? { signal } : {}),
46
+ });
47
+ if (!response.ok) {
48
+ throw new Error(`Traze server returned ${response.status}: ${await response.text()}`);
49
+ }
50
+ if (!response.body) {
51
+ throw new Error('SSE stream is not available from server response');
52
+ }
53
+ const reader = response.body.getReader();
54
+ const decoder = new TextDecoder();
55
+ let buffer = '';
56
+ try {
57
+ while (true) {
58
+ const { value, done } = await reader.read();
59
+ if (done)
60
+ break;
61
+ buffer += decoder.decode(value, { stream: true });
62
+ let separatorIndex = buffer.indexOf('\n\n');
63
+ while (separatorIndex !== -1) {
64
+ const rawMessage = buffer.slice(0, separatorIndex);
65
+ buffer = buffer.slice(separatorIndex + 2);
66
+ const message = this.parseSseMessage(rawMessage);
67
+ if (message?.event === 'log' && message.data) {
68
+ yield JSON.parse(message.data);
69
+ }
70
+ if (message?.event === 'error' && message.data) {
71
+ const payload = JSON.parse(message.data);
72
+ throw new Error(payload.message ?? 'Unknown stream error');
73
+ }
74
+ separatorIndex = buffer.indexOf('\n\n');
75
+ }
76
+ }
77
+ }
78
+ finally {
79
+ reader.releaseLock();
80
+ }
81
+ }
82
+ async get(path, params) {
83
+ const url = new URL(path, this.baseUrl);
84
+ if (params) {
85
+ for (const [key, value] of Object.entries(params)) {
86
+ if (value)
87
+ url.searchParams.set(key, value);
88
+ }
89
+ }
90
+ const response = await fetch(url.toString(), { headers: this.headers });
91
+ if (!response.ok) {
92
+ throw new Error(`Traze server returned ${response.status}: ${await response.text()}`);
93
+ }
94
+ return response.json();
95
+ }
96
+ parseSseMessage(rawMessage) {
97
+ const lines = rawMessage.split('\n');
98
+ let event;
99
+ const dataLines = [];
100
+ for (const line of lines) {
101
+ if (!line || line.startsWith(':'))
102
+ continue;
103
+ if (line.startsWith('event:')) {
104
+ event = line.slice(6).trim();
105
+ }
106
+ if (line.startsWith('data:')) {
107
+ dataLines.push(line.slice(5).trim());
108
+ }
109
+ }
110
+ if (!event && dataLines.length === 0)
111
+ return null;
112
+ return {
113
+ ...(event ? { event } : {}),
114
+ data: dataLines.join('\n'),
115
+ };
116
+ }
117
+ }
118
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { TrazeClient } from '../client.js';
2
+ export declare function searchCommand(client: TrazeClient, options: {
3
+ query: string;
4
+ project?: string;
5
+ level?: string;
6
+ limit?: string;
7
+ }): Promise<void>;
8
+ export declare function errorsCommand(client: TrazeClient, options: {
9
+ project?: string;
10
+ limit?: string;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
@@ -0,0 +1,74 @@
1
+ import { style } from '@trazze/sdk';
2
+ export async function searchCommand(client, options) {
3
+ try {
4
+ const params = {
5
+ search: options.query,
6
+ limit: options.limit ?? '20',
7
+ };
8
+ if (options.project)
9
+ params['project'] = options.project;
10
+ if (options.level)
11
+ params['level'] = options.level;
12
+ const result = await client.logs(params);
13
+ const entries = result.data;
14
+ console.log(`\n${style.boldCyan('Search Results')} ${style.dim(`— "${options.query}" (${result.total} total)`)}\n`);
15
+ if (entries.length === 0) {
16
+ console.log(` ${style.dim('No matching logs found.')}\n`);
17
+ return;
18
+ }
19
+ for (const entry of entries) {
20
+ const ts = style.dim(entry.timestamp);
21
+ const level = colorLevel(entry.level);
22
+ const msg = highlightSearch(entry.message, options.query);
23
+ console.log(` ${ts} ${level} ${msg}`);
24
+ }
25
+ if (result.hasMore) {
26
+ console.log(`\n ${style.dim(`Showing ${entries.length} of ${result.total}. Use --limit to see more.`)}`);
27
+ }
28
+ console.log();
29
+ }
30
+ catch (err) {
31
+ console.error(`${style.errorMark()} ${style.red(err instanceof Error ? err.message : String(err))}\n`);
32
+ process.exitCode = 1;
33
+ }
34
+ }
35
+ export async function errorsCommand(client, options) {
36
+ try {
37
+ const params = {};
38
+ if (options.project)
39
+ params['project'] = options.project;
40
+ const result = await client.errorGroups(params);
41
+ const groups = result.data;
42
+ console.log(`\n${style.boldCyan('Error Groups')}\n`);
43
+ if (groups.length === 0) {
44
+ console.log(` ${style.dim('No errors found.')}\n`);
45
+ return;
46
+ }
47
+ for (const group of groups) {
48
+ console.log(` ${style.red(group.type)}: ${group.message}`);
49
+ console.log(` Count: ${style.yellow(String(group.count))} Last: ${style.dim(group.lastSeen)} Hash: ${style.dim(group.groupHash)}`);
50
+ }
51
+ console.log();
52
+ }
53
+ catch (err) {
54
+ console.error(`${style.errorMark()} ${style.red(err instanceof Error ? err.message : String(err))}\n`);
55
+ process.exitCode = 1;
56
+ }
57
+ }
58
+ function colorLevel(level) {
59
+ switch (level) {
60
+ case 'debug': return style.dim('DBG');
61
+ case 'info': return style.cyan('INF');
62
+ case 'warn': return style.yellow('WRN');
63
+ case 'error': return style.red('ERR');
64
+ default: return level.slice(0, 3).toUpperCase();
65
+ }
66
+ }
67
+ function highlightSearch(text, query) {
68
+ const regex = new RegExp(`(${escapeRegex(query)})`, 'gi');
69
+ return text.replace(regex, (match) => style.boldYellow(match));
70
+ }
71
+ function escapeRegex(str) {
72
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
73
+ }
74
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { TrazeClient } from '../client.js';
2
+ export declare function statusCommand(client: TrazeClient): Promise<void>;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtE"}
@@ -0,0 +1,39 @@
1
+ import { style } from '@trazze/sdk';
2
+ export async function statusCommand(client) {
3
+ try {
4
+ const [health, stats] = await Promise.all([client.health(), client.stats()]);
5
+ const statusColor = health.status === 'ok' ? style.green : style.red;
6
+ console.log(`\n${style.boldCyan('Traze Server Status')}\n`);
7
+ console.log(` Status: ${statusColor(health.status)}`);
8
+ console.log(` Version: ${style.dim(health.version)}`);
9
+ console.log(` Uptime: ${style.dim(formatUptime(health.uptime))}`);
10
+ console.log(` Timestamp: ${style.dim(health.timestamp)}`);
11
+ console.log();
12
+ console.log(`${style.boldCyan('Database Statistics')}\n`);
13
+ console.log(` Logs: ${style.yellow(String(stats.logs))}`);
14
+ console.log(` Traces: ${style.yellow(String(stats.traces))}`);
15
+ console.log(` Errors: ${style.yellow(String(stats.errors))}`);
16
+ console.log(` Metrics: ${style.yellow(String(stats.metrics))}`);
17
+ console.log(` DB Size: ${style.dim(formatBytes(stats.dbSizeBytes))}`);
18
+ console.log();
19
+ }
20
+ catch (err) {
21
+ console.error(`${style.errorMark()} ${style.red('Cannot reach Traze server')}`);
22
+ console.error(` ${style.dim(err instanceof Error ? err.message : String(err))}\n`);
23
+ process.exitCode = 1;
24
+ }
25
+ }
26
+ function formatUptime(seconds) {
27
+ const h = Math.floor(seconds / 3600);
28
+ const m = Math.floor((seconds % 3600) / 60);
29
+ const s = seconds % 60;
30
+ return `${h}h ${m}m ${s}s`;
31
+ }
32
+ function formatBytes(bytes) {
33
+ if (bytes < 1024)
34
+ return `${bytes} B`;
35
+ if (bytes < 1024 * 1024)
36
+ return `${(bytes / 1024).toFixed(1)} KB`;
37
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
38
+ }
39
+ //# 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,7 @@
1
+ import { TrazeClient } from '../client.js';
2
+ export declare function tailCommand(client: TrazeClient, options: {
3
+ project?: string;
4
+ level?: string;
5
+ poll?: number;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=tail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/commands/tail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CA0Df"}
@@ -0,0 +1,72 @@
1
+ import { style } from '@trazze/sdk';
2
+ export async function tailCommand(client, options) {
3
+ const reconnectMs = options.poll ?? 2000;
4
+ let lastTimestamp;
5
+ let stopped = false;
6
+ console.log(`${style.boldCyan('Traze Tail')} ${style.dim('— streaming logs')}\n`);
7
+ console.log(` ${style.dim('Connected with Server-Sent Events. Press Ctrl+C to stop.')}\n`);
8
+ process.on('SIGINT', () => {
9
+ stopped = true;
10
+ });
11
+ while (!stopped) {
12
+ const controller = new AbortController();
13
+ if (stopped) {
14
+ controller.abort();
15
+ break;
16
+ }
17
+ try {
18
+ const params = { limit: '50' };
19
+ if (options.project)
20
+ params['project'] = options.project;
21
+ if (options.level)
22
+ params['level'] = options.level;
23
+ if (lastTimestamp)
24
+ params['from'] = lastTimestamp;
25
+ const stream = client.streamLogs(params, controller.signal);
26
+ for await (const entry of stream) {
27
+ if (stopped) {
28
+ controller.abort();
29
+ break;
30
+ }
31
+ if (lastTimestamp && entry.timestamp <= lastTimestamp)
32
+ continue;
33
+ const ts = style.dim(entry.timestamp);
34
+ const level = colorLevel(entry.level);
35
+ const msg = entry.message;
36
+ console.log(`${ts} ${level} ${msg}`);
37
+ if (entry.context && Object.keys(entry.context).length > 0) {
38
+ console.log(` ${style.dim(JSON.stringify(entry.context))}`);
39
+ }
40
+ lastTimestamp = entry.timestamp;
41
+ }
42
+ }
43
+ catch (err) {
44
+ if (stopped || (err instanceof Error && err.name === 'AbortError'))
45
+ break;
46
+ console.error(`${style.errorMark()} ${style.dim(err instanceof Error ? err.message : String(err))}`);
47
+ }
48
+ if (!stopped) {
49
+ console.log(`\n${style.dim(`Disconnected. Reconnecting in ${reconnectMs}ms...`)}`);
50
+ await sleep(reconnectMs);
51
+ }
52
+ }
53
+ console.log(`\n${style.dim('Stopped.')}`);
54
+ }
55
+ function colorLevel(level) {
56
+ switch (level) {
57
+ case 'debug':
58
+ return style.dim('DEBUG');
59
+ case 'info':
60
+ return style.cyan('INFO ');
61
+ case 'warn':
62
+ return style.yellow('WARN ');
63
+ case 'error':
64
+ return style.red('ERROR');
65
+ default:
66
+ return level.toUpperCase().padEnd(5);
67
+ }
68
+ }
69
+ function sleep(ms) {
70
+ return new Promise((resolve) => setTimeout(resolve, ms));
71
+ }
72
+ //# sourceMappingURL=tail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.js","sourceRoot":"","sources":["../../src/commands/tail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,EACnB,OAA4D;IAE5D,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IACzC,IAAI,aAAiC,CAAC;IACtC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,IAAI,CAAC,CAAC;IAE5F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACvD,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YACzD,IAAI,OAAO,CAAC,KAAK;gBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;YACnD,IAAI,aAAa;gBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;YAElD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAE5D,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,OAAO,EAAE,CAAC;oBACZ,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM;gBACR,CAAC;gBAED,IAAI,aAAa,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa;oBAAE,SAAS;gBAEhE,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;gBAErC,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBAED,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,IAAI,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;gBAAE,MAAM;YAC1E,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,iCAAiC,WAAW,OAAO,CAAC,EAAE,CAAC,CAAC;YACnF,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B;YACE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { TrazeClient } from './client.js';
2
+ export type { TrazeClientOptions } from './client.js';
3
+ export { statusCommand } from './commands/status.js';
4
+ export { tailCommand } from './commands/tail.js';
5
+ export { searchCommand, errorsCommand } from './commands/search.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { TrazeClient } from './client.js';
2
+ export { statusCommand } from './commands/status.js';
3
+ export { tailCommand } from './commands/tail.js';
4
+ export { searchCommand, errorsCommand } from './commands/search.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@trazze/cli",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "description": "Traze CLI — inspect and tail observability data",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "bin": {
10
+ "traze": "./dist/bin.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "dependencies": {
22
+ "chalk": "^5.4.1",
23
+ "@trazze/contracts": "0.1.0",
24
+ "@trazze/sdk": "0.1.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.10.2",
28
+ "typescript": "^5.7.2",
29
+ "vitest": "^2.1.9"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc -p tsconfig.build.json",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "vitest run",
38
+ "clean": "rm -rf dist"
39
+ }
40
+ }