telemetry-collector-cli 0.0.0-stage → 0.0.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/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +373 -0
- package/dist/index.js.map +1 -0
- package/package.json +33 -4
- package/README.md +0 -3
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* `telemetry-collector` — the command line for CI and coding agents.
|
|
4
|
+
*
|
|
5
|
+
* Two jobs, and they use different credentials on purpose:
|
|
6
|
+
*
|
|
7
|
+
* - **Build time** (`key`): derive an app's public ingest key from the app secret.
|
|
8
|
+
* No network call, so a build can compute the key for a brand-new version
|
|
9
|
+
* offline and the backend will accept it without anything ever being registered.
|
|
10
|
+
* - **Triage time** (`digest`, `issues`, `issue`): pull the dataset with a scoped
|
|
11
|
+
* read token.
|
|
12
|
+
*
|
|
13
|
+
* Never put the app secret where the read token goes, or the reverse. The secret
|
|
14
|
+
* mints ingest keys for every version of the app; the read token is disposable.
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* `telemetry-collector` — the command line for CI and coding agents.
|
|
4
|
+
*
|
|
5
|
+
* Two jobs, and they use different credentials on purpose:
|
|
6
|
+
*
|
|
7
|
+
* - **Build time** (`key`): derive an app's public ingest key from the app secret.
|
|
8
|
+
* No network call, so a build can compute the key for a brand-new version
|
|
9
|
+
* offline and the backend will accept it without anything ever being registered.
|
|
10
|
+
* - **Triage time** (`digest`, `issues`, `issue`): pull the dataset with a scoped
|
|
11
|
+
* read token.
|
|
12
|
+
*
|
|
13
|
+
* Never put the app secret where the read token goes, or the reverse. The secret
|
|
14
|
+
* mints ingest keys for every version of the app; the read token is disposable.
|
|
15
|
+
*/
|
|
16
|
+
import { deriveIngestKey, isValidAppId, isValidChannel, signReport, } from 'telemetry-collector-core';
|
|
17
|
+
function parseArgs(argv) {
|
|
18
|
+
const [command = 'help', ...rest] = argv;
|
|
19
|
+
const flags = {};
|
|
20
|
+
const positional = [];
|
|
21
|
+
for (let i = 0; i < rest.length; i++) {
|
|
22
|
+
const arg = rest[i];
|
|
23
|
+
if (!arg.startsWith('--')) {
|
|
24
|
+
positional.push(arg);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const [name, inline] = arg.slice(2).split('=', 2);
|
|
28
|
+
if (inline !== undefined) {
|
|
29
|
+
flags[name] = inline;
|
|
30
|
+
}
|
|
31
|
+
else if (rest[i + 1] && !rest[i + 1].startsWith('--')) {
|
|
32
|
+
flags[name] = rest[++i];
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
flags[name] = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { command, positional, flags };
|
|
39
|
+
}
|
|
40
|
+
function str(flags, name, envVar) {
|
|
41
|
+
const value = flags[name];
|
|
42
|
+
if (typeof value === 'string')
|
|
43
|
+
return value;
|
|
44
|
+
return envVar ? process.env[envVar] : undefined;
|
|
45
|
+
}
|
|
46
|
+
function fail(message) {
|
|
47
|
+
console.error(`telemetry-collector: ${message}`);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
/** No default: this is self-hosted software, so only you know where your copy lives. */
|
|
51
|
+
function endpoint(flags) {
|
|
52
|
+
const url = str(flags, 'url', 'TELEMETRY_COLLECTOR_URL');
|
|
53
|
+
if (!url)
|
|
54
|
+
fail('set TELEMETRY_COLLECTOR_URL (or pass --url) to your deployment, e.g. https://errors.example.com');
|
|
55
|
+
return url.replace(/\/+$/, '');
|
|
56
|
+
}
|
|
57
|
+
async function api(flags, path, params = {}) {
|
|
58
|
+
const token = str(flags, 'token', 'TELEMETRY_COLLECTOR_TOKEN');
|
|
59
|
+
if (!token)
|
|
60
|
+
fail('a read token is required (--token or TELEMETRY_COLLECTOR_TOKEN)');
|
|
61
|
+
const url = new URL(`${endpoint(flags)}${path}`);
|
|
62
|
+
for (const [key, value] of Object.entries(params)) {
|
|
63
|
+
if (value !== undefined)
|
|
64
|
+
url.searchParams.set(key, value);
|
|
65
|
+
}
|
|
66
|
+
const response = await fetch(url, { headers: { authorization: `Bearer ${token}` } });
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
fail(`${response.status} ${response.statusText} from ${url.pathname}`);
|
|
69
|
+
}
|
|
70
|
+
return response.json();
|
|
71
|
+
}
|
|
72
|
+
const HELP = `telemetry-collector — report errors and pull triage data
|
|
73
|
+
|
|
74
|
+
key --app <id> --channel <ch> derive the public ingest key (offline)
|
|
75
|
+
digest --app <id> [--since 7d] everything an agent needs, one call
|
|
76
|
+
issues --app <id> [--status open] list issues
|
|
77
|
+
issue <issue-id> one issue with its event samples
|
|
78
|
+
apps apps this token can see
|
|
79
|
+
usage --app <id> [--since 7d] usage analytics (sampled estimates)
|
|
80
|
+
channels [--app <id>] versions/environments and whether each is live
|
|
81
|
+
report --key <ingestKey> --message send a report (e.g. from a CI failure)
|
|
82
|
+
track --key <ingestKey> <event> record a usage event
|
|
83
|
+
|
|
84
|
+
Credentials, by environment variable:
|
|
85
|
+
TELEMETRY_COLLECTOR_URL base URL of your deployment (required)
|
|
86
|
+
TELEMETRY_COLLECTOR_APP_SECRET ecs_… — build/CI only, derives ingest keys
|
|
87
|
+
TELEMETRY_COLLECTOR_TOKEN ert_… — read token for the triage commands
|
|
88
|
+
|
|
89
|
+
Common flags: --json (raw output), --url, --token, --limit, --since, --channel,
|
|
90
|
+
--release, --kind, --status, --q
|
|
91
|
+
`;
|
|
92
|
+
async function main() {
|
|
93
|
+
const { command, positional, flags } = parseArgs(process.argv.slice(2));
|
|
94
|
+
const asJson = flags.json === true;
|
|
95
|
+
switch (command) {
|
|
96
|
+
case 'key': {
|
|
97
|
+
const secret = str(flags, 'secret', 'TELEMETRY_COLLECTOR_APP_SECRET');
|
|
98
|
+
if (!secret)
|
|
99
|
+
fail('an app secret is required (--secret or TELEMETRY_COLLECTOR_APP_SECRET)');
|
|
100
|
+
const app = str(flags, 'app') ?? positional[0];
|
|
101
|
+
const channel = str(flags, 'channel') ?? positional[1];
|
|
102
|
+
if (!app || !isValidAppId(app))
|
|
103
|
+
fail('--app must be a lowercase id with no dots');
|
|
104
|
+
if (!channel || !isValidChannel(channel))
|
|
105
|
+
fail('--channel is required (a version, git sha, or environment)');
|
|
106
|
+
// Printed bare so a build can do: KEY=$(telemetry-collector key --app x --channel $VERSION)
|
|
107
|
+
console.log(await deriveIngestKey(secret, app, channel));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
case 'digest': {
|
|
111
|
+
const data = await api(flags, '/api/digest', {
|
|
112
|
+
app: str(flags, 'app'),
|
|
113
|
+
since: str(flags, 'since'),
|
|
114
|
+
status: str(flags, 'status'),
|
|
115
|
+
kind: str(flags, 'kind'),
|
|
116
|
+
channel: str(flags, 'channel'),
|
|
117
|
+
release: str(flags, 'release'),
|
|
118
|
+
limit: str(flags, 'limit'),
|
|
119
|
+
samples: str(flags, 'samples'),
|
|
120
|
+
});
|
|
121
|
+
if (asJson) {
|
|
122
|
+
console.log(JSON.stringify(data, null, 2));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
printDigest(data);
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
case 'issues': {
|
|
130
|
+
const data = (await api(flags, '/api/issues', {
|
|
131
|
+
app: str(flags, 'app'),
|
|
132
|
+
status: str(flags, 'status'),
|
|
133
|
+
kind: str(flags, 'kind'),
|
|
134
|
+
since: str(flags, 'since'),
|
|
135
|
+
channel: str(flags, 'channel'),
|
|
136
|
+
q: str(flags, 'q'),
|
|
137
|
+
limit: str(flags, 'limit'),
|
|
138
|
+
}));
|
|
139
|
+
if (asJson) {
|
|
140
|
+
console.log(JSON.stringify(data, null, 2));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
for (const issue of data.issues)
|
|
144
|
+
printIssueLine(issue);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
case 'issue': {
|
|
148
|
+
const id = positional[0];
|
|
149
|
+
if (!id)
|
|
150
|
+
fail('usage: telemetry-collector issue <issue-id>');
|
|
151
|
+
console.log(JSON.stringify(await api(flags, `/api/issues/${id}`, { limit: str(flags, 'limit') }), null, 2));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
case 'apps': {
|
|
155
|
+
const data = (await api(flags, '/api/apps'));
|
|
156
|
+
if (asJson) {
|
|
157
|
+
console.log(JSON.stringify(data, null, 2));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
for (const app of data.apps)
|
|
161
|
+
console.log(`${app.id}\t${app.name}`);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
case 'usage': {
|
|
165
|
+
const data = (await api(flags, '/api/usage', {
|
|
166
|
+
app: str(flags, 'app'),
|
|
167
|
+
since: str(flags, 'since'),
|
|
168
|
+
interval: str(flags, 'interval'),
|
|
169
|
+
groupBy: str(flags, 'groupBy') ?? str(flags, 'group-by'),
|
|
170
|
+
event: str(flags, 'event'),
|
|
171
|
+
channel: str(flags, 'channel'),
|
|
172
|
+
release: str(flags, 'release'),
|
|
173
|
+
limit: str(flags, 'limit'),
|
|
174
|
+
}));
|
|
175
|
+
if (asJson) {
|
|
176
|
+
console.log(JSON.stringify(data, null, 2));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
printUsage(data);
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
case 'channels': {
|
|
184
|
+
const data = (await api(flags, '/api/channels', { app: str(flags, 'app') }));
|
|
185
|
+
if (asJson) {
|
|
186
|
+
console.log(JSON.stringify(data, null, 2));
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
printChannels(data.channels);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
case 'report': {
|
|
193
|
+
await report(flags, positional);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
case 'track': {
|
|
197
|
+
await track(flags, positional);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
case 'help':
|
|
201
|
+
case '--help':
|
|
202
|
+
case '-h':
|
|
203
|
+
console.log(HELP);
|
|
204
|
+
return;
|
|
205
|
+
default:
|
|
206
|
+
fail(`unknown command ${JSON.stringify(command)} — try \`telemetry-collector help\``);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async function report(flags, positional) {
|
|
210
|
+
const key = str(flags, 'key', 'TELEMETRY_COLLECTOR_INGEST_KEY');
|
|
211
|
+
if (!key)
|
|
212
|
+
fail('--key (or TELEMETRY_COLLECTOR_INGEST_KEY) is required');
|
|
213
|
+
const message = str(flags, 'message') ?? positional.join(' ');
|
|
214
|
+
if (!message)
|
|
215
|
+
fail('--message is required');
|
|
216
|
+
const payload = {
|
|
217
|
+
kind: str(flags, 'kind') ?? 'message',
|
|
218
|
+
level: str(flags, 'level') ?? 'error',
|
|
219
|
+
message,
|
|
220
|
+
};
|
|
221
|
+
const release = str(flags, 'release');
|
|
222
|
+
const environment = str(flags, 'environment');
|
|
223
|
+
if (release)
|
|
224
|
+
payload.release = release;
|
|
225
|
+
if (environment)
|
|
226
|
+
payload.environment = environment;
|
|
227
|
+
const body = JSON.stringify(payload);
|
|
228
|
+
const headers = { 'content-type': 'application/json' };
|
|
229
|
+
// CI holds the app secret anyway (it derives ingest keys with it), so signing
|
|
230
|
+
// here is free and marks the report as provably ours.
|
|
231
|
+
const secret = str(flags, 'secret', 'TELEMETRY_COLLECTOR_APP_SECRET');
|
|
232
|
+
if (secret) {
|
|
233
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
234
|
+
headers['x-report-signature'] = await signReport(secret, timestamp, body);
|
|
235
|
+
headers['x-report-timestamp'] = String(timestamp);
|
|
236
|
+
}
|
|
237
|
+
const response = await fetch(`${endpoint(flags)}/i/${key}`, { method: 'POST', headers, body });
|
|
238
|
+
const text = await response.text();
|
|
239
|
+
if (!response.ok)
|
|
240
|
+
fail(`${response.status}: ${text}`);
|
|
241
|
+
console.log(text);
|
|
242
|
+
}
|
|
243
|
+
async function track(flags, positional) {
|
|
244
|
+
const key = str(flags, 'key', 'TELEMETRY_COLLECTOR_INGEST_KEY');
|
|
245
|
+
if (!key)
|
|
246
|
+
fail('--key (or TELEMETRY_COLLECTOR_INGEST_KEY) is required');
|
|
247
|
+
const event = str(flags, 'event') ?? positional[0];
|
|
248
|
+
if (!event)
|
|
249
|
+
fail('usage: telemetry-collector track --key <ingestKey> <event.name>');
|
|
250
|
+
const dims = {};
|
|
251
|
+
for (const [name, value] of Object.entries(flags)) {
|
|
252
|
+
// Anything after `--dim.` becomes a dimension: --dim.method=cli
|
|
253
|
+
if (name.startsWith('dim.') && typeof value === 'string')
|
|
254
|
+
dims[name.slice(4)] = value;
|
|
255
|
+
}
|
|
256
|
+
const body = JSON.stringify({
|
|
257
|
+
events: [{ event, value: Number(str(flags, 'value') ?? '1'), dims }],
|
|
258
|
+
release: str(flags, 'release'),
|
|
259
|
+
environment: str(flags, 'environment'),
|
|
260
|
+
});
|
|
261
|
+
const headers = { 'content-type': 'application/json' };
|
|
262
|
+
const secret = str(flags, 'secret', 'TELEMETRY_COLLECTOR_APP_SECRET');
|
|
263
|
+
if (secret) {
|
|
264
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
265
|
+
headers['x-report-signature'] = await signReport(secret, timestamp, body);
|
|
266
|
+
headers['x-report-timestamp'] = String(timestamp);
|
|
267
|
+
}
|
|
268
|
+
const response = await fetch(`${endpoint(flags)}/u/${key}`, { method: 'POST', headers, body });
|
|
269
|
+
const text = await response.text();
|
|
270
|
+
if (!response.ok)
|
|
271
|
+
fail(`${response.status}: ${text}`);
|
|
272
|
+
console.log(text);
|
|
273
|
+
}
|
|
274
|
+
function printChannels(channels) {
|
|
275
|
+
if (channels.length === 0) {
|
|
276
|
+
console.log('No channels yet — nothing has reported.');
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const width = Math.max(...channels.map(c => c.channel.length));
|
|
280
|
+
for (const channel of channels) {
|
|
281
|
+
const state = channel.status === 'retired' ? 'RETIRED' : 'live';
|
|
282
|
+
const purge = channel.purge_after
|
|
283
|
+
? ` purge ${new Date(channel.purge_after * 1000).toISOString().slice(0, 10)}`
|
|
284
|
+
: '';
|
|
285
|
+
console.log(` ${channel.channel.padEnd(width)} ${state.padEnd(7)} ${channel.app_id.padEnd(16)}` +
|
|
286
|
+
` ${ago(channel.last_seen).padStart(4)} ago ${String(channel.issues).padStart(5)} issues${purge}` +
|
|
287
|
+
(channel.note ? ` — ${channel.note}` : ''));
|
|
288
|
+
}
|
|
289
|
+
// Retiring is deliberately not a CLI action: it is a judgement call about whether
|
|
290
|
+
// anyone is still running that version, and belongs with a human in the admin UI.
|
|
291
|
+
console.log('\nRetire or resume a channel from the admin UI.');
|
|
292
|
+
}
|
|
293
|
+
function printUsage(data) {
|
|
294
|
+
const total = data.series.reduce((sum, row) => sum + Number(row.events), 0);
|
|
295
|
+
console.log(`# ${data.app} — ${Math.round(total).toLocaleString()} events (estimated)
|
|
296
|
+
`);
|
|
297
|
+
if (data.breakdown.length > 0) {
|
|
298
|
+
const width = Math.max(...data.breakdown.map(row => (row.key || '(none)').length));
|
|
299
|
+
const peak = Math.max(...data.breakdown.map(row => Number(row.events)), 1);
|
|
300
|
+
console.log(`by ${data.group_by}:`);
|
|
301
|
+
for (const row of data.breakdown) {
|
|
302
|
+
const events = Number(row.events);
|
|
303
|
+
// A proportional bar reads faster than the numbers alone, and costs nothing.
|
|
304
|
+
const bar = '#'.repeat(Math.max(1, Math.round((events / peak) * 28)));
|
|
305
|
+
console.log(` ${(row.key || '(none)').padEnd(width)} ${String(Math.round(events)).padStart(9)} ${bar}`);
|
|
306
|
+
}
|
|
307
|
+
console.log();
|
|
308
|
+
}
|
|
309
|
+
if (data.series.length > 0) {
|
|
310
|
+
console.log(`per ${data.interval}:`);
|
|
311
|
+
for (const row of data.series) {
|
|
312
|
+
console.log(` ${row.bucket} ${String(Math.round(Number(row.events))).padStart(9)}`);
|
|
313
|
+
}
|
|
314
|
+
console.log();
|
|
315
|
+
}
|
|
316
|
+
// Said every time rather than buried in docs: these are sampled estimates, and
|
|
317
|
+
// someone will eventually try to reconcile them against an exact number.
|
|
318
|
+
console.log('Totals are weighted estimates from Analytics Engine sampling, not exact counts.');
|
|
319
|
+
}
|
|
320
|
+
function ago(seconds) {
|
|
321
|
+
const delta = Math.max(0, Math.floor(Date.now() / 1000) - seconds);
|
|
322
|
+
if (delta < 60)
|
|
323
|
+
return `${delta}s`;
|
|
324
|
+
if (delta < 3_600)
|
|
325
|
+
return `${Math.floor(delta / 60)}m`;
|
|
326
|
+
if (delta < 86_400)
|
|
327
|
+
return `${Math.floor(delta / 3_600)}h`;
|
|
328
|
+
return `${Math.floor(delta / 86_400)}d`;
|
|
329
|
+
}
|
|
330
|
+
function printIssueLine(issue) {
|
|
331
|
+
const releases = issue.first_release && issue.first_release !== issue.last_release
|
|
332
|
+
? `${issue.first_release}→${issue.last_release}`
|
|
333
|
+
: (issue.last_release ?? '-');
|
|
334
|
+
console.log([
|
|
335
|
+
issue.id.slice(0, 8),
|
|
336
|
+
String(issue.count).padStart(6),
|
|
337
|
+
issue.level.padEnd(7),
|
|
338
|
+
releases.padEnd(14),
|
|
339
|
+
`${ago(issue.last_seen)} ago`.padEnd(9),
|
|
340
|
+
issue.title.slice(0, 70),
|
|
341
|
+
].join(' '));
|
|
342
|
+
}
|
|
343
|
+
/** Written to be read by a human *and* pasted into a model's context. */
|
|
344
|
+
function printDigest(digest) {
|
|
345
|
+
console.log(`# ${digest.app ?? 'all apps'} — ${digest.issues.length} issue(s)\n`);
|
|
346
|
+
if (digest.channels.length > 0) {
|
|
347
|
+
console.log(`channels: ${digest.channels.map(c => c.channel).join(', ')}\n`);
|
|
348
|
+
}
|
|
349
|
+
for (const issue of digest.issues) {
|
|
350
|
+
console.log(`## ${issue.title}`);
|
|
351
|
+
console.log(` ${issue.id} ${issue.kind}/${issue.level} seen ${issue.count}x ` +
|
|
352
|
+
`first ${ago(issue.first_seen)} ago, last ${ago(issue.last_seen)} ago` +
|
|
353
|
+
(issue.attested_count > 0 ? ` (${issue.attested_count} signed)` : ''));
|
|
354
|
+
if (issue.culprit)
|
|
355
|
+
console.log(` at ${issue.culprit}`);
|
|
356
|
+
if (issue.last_release)
|
|
357
|
+
console.log(` releases ${issue.first_release ?? '?'} → ${issue.last_release}`);
|
|
358
|
+
const sample = issue.events[0]?.event;
|
|
359
|
+
const thrown = sample?.exception?.values?.at(-1);
|
|
360
|
+
if (thrown?.stacktrace?.frames) {
|
|
361
|
+
// Innermost last, so reverse for display — humans read stacks top-down.
|
|
362
|
+
for (const frame of thrown.stacktrace.frames.slice(-6).reverse()) {
|
|
363
|
+
console.log(` at ${frame.function ?? '?'} (${frame.filename ?? '?'}:${frame.lineno ?? '?'})`);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
console.log();
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
main().catch((error) => {
|
|
370
|
+
console.error(`telemetry-collector: ${error instanceof Error ? error.message : String(error)}`);
|
|
371
|
+
process.exit(1);
|
|
372
|
+
});
|
|
373
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "telemetry-collector-cli",
|
|
3
|
-
"version": "0.0.0
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Derive ingest keys at build time and pull error datasets for triage.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"bin": {
|
|
8
|
+
"telemetry-collector": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=18"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc -p tsconfig.build.json",
|
|
24
|
+
"typecheck": "tsc --noEmit",
|
|
25
|
+
"prepublishOnly": "bun run ../../scripts/guard-publish.ts && bun run build"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"telemetry-collector-core": "^0.0.0"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/cinderblock/telemetry-collector.git",
|
|
33
|
+
"directory": "packages/cli"
|
|
34
|
+
}
|
|
35
|
+
}
|
package/README.md
DELETED