@goliapkg/sentori-cli 0.5.2 → 0.5.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/lib/index.js DELETED
@@ -1,484 +0,0 @@
1
- #!/usr/bin/env node
2
- import { parseArgs } from 'node:util';
3
- import { formatIssueLine, issueList, issuePatch } from './issue.js';
4
- import { uploadDsym, uploadMapping } from './native-artifacts.js';
5
- import { reactNativeUpload } from './react-native.js';
6
- import { uploadSourcemaps } from './upload.js';
7
- const HELP = `sentori-cli — Sentori command-line interface
8
-
9
- Source-map upload:
10
- sentori-cli upload sourcemap [options] <path...>
11
- Upload one or more files or directories. A directory is scanned
12
- (one level) for *.map / *.js / *.jsbundle / *.bundle / *.hbc;
13
- a file given explicitly is uploaded as-is. Use this when you
14
- already have a composed sourcemap on disk:
15
- - web bundlers (point at the build dir),
16
- - iOS post-\`react-native-xcode.sh\` where the build phase has
17
- already composed packager + Hermes maps into the final
18
- \`$SOURCEMAP_FILE\` and deleted the intermediates.
19
- Composed-then-uploaded vs raw-then-server-composed yield
20
- identical symbolication — the server stores the same shape
21
- either way.
22
-
23
- sentori-cli react-native upload [options]
24
- Compose a Metro packager map + a Hermes map into one source map
25
- (uses react-native's \`scripts/compose-source-maps.js\`) and
26
- upload the result. Use this when you have both raw maps on
27
- disk — typical Android release path where the gradle
28
- \`bundleReleaseJsAndAssets\` task leaves both maps untouched.
29
- Requires --metro-map and --hermes-map. On iOS the build phase
30
- deletes the intermediates, so use \`upload sourcemap\` instead.
31
-
32
- Native artifacts (project-scoped, need --project + admin token):
33
- sentori-cli upload dsym --project <uuid> [--release <r>] [--object-name <n>] [--debug-id <uuid> --arch <a>] <path>
34
- Upload iOS dSYM debug info. By default walks a Foo.dSYM bundle
35
- and uses "dwarfdump --uuid" to enumerate slices, uploading each.
36
- Pass --debug-id and --arch to upload a single slice without
37
- dwarfdump (useful in Linux CI where the toolchain isn't there).
38
-
39
- sentori-cli upload mapping --project <uuid> [--release <r>] [--debug-id <uuid>] <mapping.txt>
40
- Upload an R8 / ProGuard mapping (raw bytes). If the file starts
41
- with a "# pg_map_id:" line the server sniffs the debug-id from
42
- it; otherwise you can pass it explicitly.
43
-
44
- CI triage:
45
- sentori-cli issue list --project <uuid> [--status active|silenced|resolved|closed] [--limit N] [--error-type <t>]
46
- sentori-cli issue resolve <issue-uuid> --project <uuid> [--in-release <r>]
47
- sentori-cli issue silence <issue-uuid> --project <uuid>
48
-
49
- Options (upload commands):
50
- --release <r> release identifier — MUST equal the value the SDK
51
- reports via init({ release }). Required.
52
- --token <t> Sentori token (or set $SENTORI_TOKEN).
53
- --api-url <url> Sentori API base (default https://api.sentori.golia.jp,
54
- or $SENTORI_API_URL). For a self-hosted instance, your
55
- host. (Accepts --ingest-url as an alias.)
56
- --dry-run describe what would be uploaded; don't upload.
57
- -h, --help show this help.
58
-
59
- Options (react-native upload):
60
- --metro-map <p> the *.packager.map Metro emits (--sourcemap-output).
61
- --hermes-map <p> the *.hbc.map the Hermes compiler emits.
62
- --bundle <p> optional: also upload the bundle (.jsbundle / .bundle).
63
-
64
- Options (issue commands):
65
- --project <uuid> project id (or set $SENTORI_PROJECT_ID).
66
- --token <t> admin token, sk_… prefix (or $SENTORI_ADMIN_TOKEN /
67
- $SENTORI_TOKEN). The ingest st_pk_ token may also work
68
- on a self-hosted instance.
69
- --api-url <url> Sentori API base (same as above).
70
- --in-release <r> (resolve only) mark this release as where the fix
71
- landed; the regression detector flips the issue back
72
- to "regressed" if a matching event lands later.
73
-
74
- Hermes release build, by hand:
75
-
76
- Android (raw maps still on disk after \`./gradlew bundleRelease\`):
77
- npx @goliapkg/sentori-cli react-native upload \\
78
- --release "<app>@<version>+<build>" --token "$SENTORI_TOKEN" \\
79
- --metro-map android/app/build/intermediates/sourcemaps/react/release/index.android.bundle.packager.map \\
80
- --hermes-map android/app/build/intermediates/sourcemaps/react/release/index.android.bundle.compiler.map \\
81
- --bundle android/app/build/generated/assets/react/release/index.android.bundle
82
-
83
- iOS (already-composed map after \`xcodebuild archive\`; the build
84
- phase deletes intermediates so you only have the composed map):
85
- npx @goliapkg/sentori-cli upload sourcemap \\
86
- --release "<app>@<version>+<build>" --token "$SENTORI_TOKEN" \\
87
- "$BUILT_PRODUCTS_DIR/main.jsbundle.map" \\
88
- "$BUILT_PRODUCTS_DIR/main.jsbundle"
89
- `;
90
- /** Parse the shared options, or print an error + return null. */
91
- function parseCommon(values) {
92
- const release = typeof values.release === 'string' ? values.release : undefined;
93
- if (!release) {
94
- console.error('error: --release is required (must match the SDK’s init({ release }))');
95
- return null;
96
- }
97
- const dryRun = values['dry-run'] === true;
98
- const token = (typeof values.token === 'string' ? values.token : undefined) ?? process.env.SENTORI_TOKEN;
99
- if (!token && !dryRun) {
100
- console.error('error: --token (or $SENTORI_TOKEN) is required');
101
- return null;
102
- }
103
- const apiUrl = (typeof values['api-url'] === 'string' ? values['api-url'] : undefined) ??
104
- (typeof values['ingest-url'] === 'string' ? values['ingest-url'] : undefined) ??
105
- process.env.SENTORI_API_URL ??
106
- 'https://api.sentori.golia.jp';
107
- return { apiUrl, dryRun, release, token: token ?? '' };
108
- }
109
- async function cmdUploadSourcemap(argv) {
110
- let parsed;
111
- try {
112
- parsed = parseArgs({
113
- allowPositionals: true,
114
- args: argv,
115
- options: {
116
- 'api-url': { type: 'string' },
117
- 'dry-run': { type: 'boolean' },
118
- help: { short: 'h', type: 'boolean' },
119
- 'ingest-url': { type: 'string' },
120
- release: { type: 'string' },
121
- token: { type: 'string' },
122
- },
123
- });
124
- }
125
- catch (e) {
126
- console.error(`error: ${e.message}\n`);
127
- console.error(HELP);
128
- return 2;
129
- }
130
- if (parsed.values.help) {
131
- console.log(HELP);
132
- return 0;
133
- }
134
- const c = parseCommon(parsed.values);
135
- if (!c)
136
- return 2;
137
- if (parsed.positionals.length === 0) {
138
- console.error('error: at least one path (file or directory) is required');
139
- return 2;
140
- }
141
- try {
142
- const result = await uploadSourcemaps({
143
- apiUrl: c.apiUrl,
144
- dryRun: c.dryRun,
145
- paths: parsed.positionals,
146
- release: c.release,
147
- token: c.token,
148
- });
149
- reportUpload(result, c);
150
- return 0;
151
- }
152
- catch (e) {
153
- console.error(`upload failed: ${e.message}`);
154
- return 1;
155
- }
156
- }
157
- async function cmdReactNativeUpload(argv) {
158
- let parsed;
159
- try {
160
- parsed = parseArgs({
161
- args: argv,
162
- options: {
163
- 'api-url': { type: 'string' },
164
- bundle: { type: 'string' },
165
- 'dry-run': { type: 'boolean' },
166
- help: { short: 'h', type: 'boolean' },
167
- 'hermes-map': { type: 'string' },
168
- 'ingest-url': { type: 'string' },
169
- 'metro-map': { type: 'string' },
170
- release: { type: 'string' },
171
- token: { type: 'string' },
172
- },
173
- });
174
- }
175
- catch (e) {
176
- console.error(`error: ${e.message}\n`);
177
- console.error(HELP);
178
- return 2;
179
- }
180
- if (parsed.values.help) {
181
- console.log(HELP);
182
- return 0;
183
- }
184
- const c = parseCommon(parsed.values);
185
- if (!c)
186
- return 2;
187
- const metroMap = parsed.values['metro-map'];
188
- const hermesMap = parsed.values['hermes-map'];
189
- if (typeof metroMap !== 'string' || typeof hermesMap !== 'string') {
190
- console.error('error: --metro-map and --hermes-map are both required');
191
- return 2;
192
- }
193
- try {
194
- const result = await reactNativeUpload({
195
- apiUrl: c.apiUrl,
196
- bundle: typeof parsed.values.bundle === 'string' ? parsed.values.bundle : undefined,
197
- dryRun: c.dryRun,
198
- hermesMap,
199
- metroMap,
200
- release: c.release,
201
- token: c.token,
202
- });
203
- reportUpload(result, c);
204
- return 0;
205
- }
206
- catch (e) {
207
- console.error(`react-native upload failed: ${e.message}`);
208
- return 1;
209
- }
210
- }
211
- function reportUpload(result, c) {
212
- if (c.dryRun) {
213
- console.log(`would upload ${result.files.length} file(s) to ${c.apiUrl.replace(/\/+$/, '')}/admin/api/releases/${encodeURIComponent(c.release)}/sourcemaps:`);
214
- for (const f of result.files)
215
- console.log(` ${f}`);
216
- }
217
- else {
218
- console.log(`uploaded ${result.uploaded ?? result.files.length} file(s) for release "${c.release}" — minified stacks on this release will now resolve to source.`);
219
- }
220
- }
221
- function parseAdminCfg(values) {
222
- const projectId = (typeof values.project === 'string' ? values.project : undefined) ??
223
- process.env.SENTORI_PROJECT_ID;
224
- if (!projectId) {
225
- console.error('error: --project <uuid> (or $SENTORI_PROJECT_ID) is required');
226
- return null;
227
- }
228
- const token = (typeof values.token === 'string' ? values.token : undefined) ??
229
- process.env.SENTORI_ADMIN_TOKEN ??
230
- process.env.SENTORI_TOKEN;
231
- if (!token) {
232
- console.error('error: --token (or $SENTORI_ADMIN_TOKEN / $SENTORI_TOKEN) is required for issue commands');
233
- return null;
234
- }
235
- const apiUrl = (typeof values['api-url'] === 'string' ? values['api-url'] : undefined) ??
236
- (typeof values['ingest-url'] === 'string' ? values['ingest-url'] : undefined) ??
237
- process.env.SENTORI_API_URL ??
238
- 'https://api.sentori.golia.jp';
239
- return { apiUrl, projectId, token };
240
- }
241
- async function cmdIssueList(argv) {
242
- let parsed;
243
- try {
244
- parsed = parseArgs({
245
- args: argv,
246
- options: {
247
- 'api-url': { type: 'string' },
248
- 'error-type': { type: 'string' },
249
- help: { short: 'h', type: 'boolean' },
250
- 'ingest-url': { type: 'string' },
251
- limit: { type: 'string' },
252
- project: { type: 'string' },
253
- status: { type: 'string' },
254
- token: { type: 'string' },
255
- },
256
- });
257
- }
258
- catch (e) {
259
- console.error(`error: ${e.message}\n${HELP}`);
260
- return 2;
261
- }
262
- if (parsed.values.help) {
263
- console.log(HELP);
264
- return 0;
265
- }
266
- const cfg = parseAdminCfg(parsed.values);
267
- if (!cfg)
268
- return 2;
269
- const status = parsed.values.status;
270
- if (status && !['active', 'closed', 'resolved', 'silenced'].includes(status)) {
271
- console.error(`error: --status must be one of: active, silenced, resolved, closed`);
272
- return 2;
273
- }
274
- const limitStr = parsed.values.limit;
275
- const limit = limitStr ? Number.parseInt(limitStr, 10) : undefined;
276
- try {
277
- const rows = await issueList({
278
- config: cfg,
279
- errorType: parsed.values['error-type'],
280
- limit,
281
- status: status,
282
- });
283
- if (rows.length === 0) {
284
- console.log('(no matching issues)');
285
- return 0;
286
- }
287
- for (const r of rows)
288
- console.log(formatIssueLine(r));
289
- return 0;
290
- }
291
- catch (e) {
292
- console.error(`issue list failed: ${e.message}`);
293
- return 1;
294
- }
295
- }
296
- async function cmdIssuePatch(argv, body, verb) {
297
- let parsed;
298
- try {
299
- parsed = parseArgs({
300
- allowPositionals: true,
301
- args: argv,
302
- options: {
303
- 'api-url': { type: 'string' },
304
- help: { short: 'h', type: 'boolean' },
305
- 'in-release': { type: 'string' },
306
- 'ingest-url': { type: 'string' },
307
- project: { type: 'string' },
308
- token: { type: 'string' },
309
- },
310
- });
311
- }
312
- catch (e) {
313
- console.error(`error: ${e.message}\n${HELP}`);
314
- return 2;
315
- }
316
- if (parsed.values.help) {
317
- console.log(HELP);
318
- return 0;
319
- }
320
- const cfg = parseAdminCfg(parsed.values);
321
- if (!cfg)
322
- return 2;
323
- const issueId = parsed.positionals[0];
324
- if (!issueId) {
325
- console.error('error: <issue-uuid> is required');
326
- return 2;
327
- }
328
- if (verb === 'resolved' && typeof parsed.values['in-release'] === 'string') {
329
- body.resolvedInRelease = parsed.values['in-release'];
330
- }
331
- try {
332
- const updated = await issuePatch(cfg, issueId, body);
333
- console.log(`${issueId} → ${verb}${body.resolvedInRelease ? ` (in ${body.resolvedInRelease})` : ''}: ${updated.errorType}`);
334
- return 0;
335
- }
336
- catch (e) {
337
- console.error(`issue ${verb} failed: ${e.message}`);
338
- return 1;
339
- }
340
- }
341
- // ── native artifact upload ────────────────────────────────────────
342
- async function cmdUploadDsym(argv) {
343
- let parsed;
344
- try {
345
- parsed = parseArgs({
346
- allowPositionals: true,
347
- args: argv,
348
- options: {
349
- 'api-url': { type: 'string' },
350
- arch: { type: 'string' },
351
- 'debug-id': { type: 'string' },
352
- help: { short: 'h', type: 'boolean' },
353
- 'ingest-url': { type: 'string' },
354
- 'object-name': { type: 'string' },
355
- project: { type: 'string' },
356
- release: { type: 'string' },
357
- token: { type: 'string' },
358
- },
359
- });
360
- }
361
- catch (e) {
362
- console.error(`error: ${e.message}\n${HELP}`);
363
- return 2;
364
- }
365
- if (parsed.values.help) {
366
- console.log(HELP);
367
- return 0;
368
- }
369
- const cfg = parseAdminCfg(parsed.values);
370
- if (!cfg)
371
- return 2;
372
- const path = parsed.positionals[0];
373
- if (!path) {
374
- console.error('error: a path to a .dSYM bundle or DWARF binary is required');
375
- return 2;
376
- }
377
- const debugId = parsed.values['debug-id'];
378
- const arch = parsed.values.arch;
379
- if ((debugId && !arch) || (arch && !debugId)) {
380
- console.error('error: --debug-id and --arch must be passed together (or both omitted)');
381
- return 2;
382
- }
383
- try {
384
- const r = await uploadDsym({
385
- apiUrl: cfg.apiUrl,
386
- arch: typeof arch === 'string' ? arch : undefined,
387
- debugId: typeof debugId === 'string' ? debugId : undefined,
388
- objectName: typeof parsed.values['object-name'] === 'string' ? parsed.values['object-name'] : undefined,
389
- path,
390
- projectId: cfg.projectId,
391
- release: typeof parsed.values.release === 'string' ? parsed.values.release : undefined,
392
- token: cfg.token,
393
- });
394
- console.log(`uploaded ${r.slices.length} dSYM slice(s):`);
395
- for (const s of r.slices)
396
- console.log(` ${s.debugId} (${s.arch})`);
397
- return 0;
398
- }
399
- catch (e) {
400
- console.error(`dsym upload failed: ${e.message}`);
401
- return 1;
402
- }
403
- }
404
- async function cmdUploadMapping(argv) {
405
- let parsed;
406
- try {
407
- parsed = parseArgs({
408
- allowPositionals: true,
409
- args: argv,
410
- options: {
411
- 'api-url': { type: 'string' },
412
- 'debug-id': { type: 'string' },
413
- help: { short: 'h', type: 'boolean' },
414
- 'ingest-url': { type: 'string' },
415
- project: { type: 'string' },
416
- release: { type: 'string' },
417
- token: { type: 'string' },
418
- },
419
- });
420
- }
421
- catch (e) {
422
- console.error(`error: ${e.message}\n${HELP}`);
423
- return 2;
424
- }
425
- if (parsed.values.help) {
426
- console.log(HELP);
427
- return 0;
428
- }
429
- const cfg = parseAdminCfg(parsed.values);
430
- if (!cfg)
431
- return 2;
432
- const path = parsed.positionals[0];
433
- if (!path) {
434
- console.error('error: a path to mapping.txt is required');
435
- return 2;
436
- }
437
- try {
438
- await uploadMapping({
439
- apiUrl: cfg.apiUrl,
440
- debugId: typeof parsed.values['debug-id'] === 'string' ? parsed.values['debug-id'] : undefined,
441
- path,
442
- projectId: cfg.projectId,
443
- release: typeof parsed.values.release === 'string' ? parsed.values.release : undefined,
444
- token: cfg.token,
445
- });
446
- console.log(`uploaded mapping for project ${cfg.projectId}${parsed.values.release ? ` / ${parsed.values.release}` : ''}`);
447
- return 0;
448
- }
449
- catch (e) {
450
- console.error(`mapping upload failed: ${e.message}`);
451
- return 1;
452
- }
453
- }
454
- async function main(argv) {
455
- if (argv.length === 0 || argv[0] === '-h' || argv[0] === '--help') {
456
- console.log(HELP);
457
- return 0;
458
- }
459
- const [a, b, ...rest] = argv;
460
- if (a === 'upload' && b === 'sourcemap')
461
- return cmdUploadSourcemap(rest);
462
- if (a === 'upload' && b === 'dsym')
463
- return cmdUploadDsym(rest);
464
- if (a === 'upload' && b === 'mapping')
465
- return cmdUploadMapping(rest);
466
- if (a === 'react-native' && b === 'upload')
467
- return cmdReactNativeUpload(rest);
468
- if (a === 'issue' && b === 'list')
469
- return cmdIssueList(rest);
470
- if (a === 'issue' && b === 'resolve')
471
- return cmdIssuePatch(rest, { status: 'resolved' }, 'resolved');
472
- if (a === 'issue' && b === 'silence')
473
- return cmdIssuePatch(rest, { status: 'silenced' }, 'silenced');
474
- if (a === 'issue' && b === 'close')
475
- return cmdIssuePatch(rest, { status: 'closed' }, 'closed');
476
- console.error(`unknown command: ${[a, b].filter(Boolean).join(' ') || '(none)'}\n`);
477
- console.error(HELP);
478
- return 2;
479
- }
480
- main(process.argv.slice(2)).then((code) => process.exit(code), (e) => {
481
- console.error(`fatal: ${e.message}`);
482
- process.exit(1);
483
- });
484
- //# sourceMappingURL=index.js.map
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/issue.d.ts DELETED
@@ -1,28 +0,0 @@
1
- type Issue = {
2
- errorType: string;
3
- eventCount: number;
4
- id: string;
5
- lastSeen: string;
6
- messageSample: string;
7
- status: 'active' | 'closed' | 'resolved' | 'silenced';
8
- };
9
- type AdminConfig = {
10
- apiUrl: string;
11
- projectId: string;
12
- token: string;
13
- };
14
- export type IssueListOptions = {
15
- config: AdminConfig;
16
- errorType?: string;
17
- limit?: number;
18
- status?: 'active' | 'closed' | 'resolved' | 'silenced';
19
- };
20
- export declare function issueList(opts: IssueListOptions): Promise<Issue[]>;
21
- export declare function issuePatch(config: AdminConfig, issueId: string, body: {
22
- resolvedInRelease?: string;
23
- status: 'active' | 'closed' | 'resolved' | 'silenced';
24
- }): Promise<Issue>;
25
- /** Format one issue for terminal output — short, one line, scannable. */
26
- export declare function formatIssueLine(i: Issue): string;
27
- export {};
28
- //# sourceMappingURL=issue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../src/issue.ts"],"names":[],"mappings":"AAEA,KAAK,KAAK,GAAG;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;CACtD,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAgCD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;CACvD,CAAA;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAOxE;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;CAAE,GAC1F,OAAO,CAAC,KAAK,CAAC,CAKhB;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAKhD"}
package/lib/issue.js DELETED
@@ -1,53 +0,0 @@
1
- // `sentori-cli issue list / resolve / silence` — CI triage helpers.
2
- function url(c, path) {
3
- return `${c.apiUrl.replace(/\/+$/, '')}/admin/api/projects/${c.projectId}${path}`;
4
- }
5
- async function adminFetch(c, path, init) {
6
- const resp = await fetch(url(c, path), {
7
- ...init,
8
- headers: {
9
- Authorization: `Bearer ${c.token}`,
10
- 'Content-Type': 'application/json',
11
- ...(init?.headers ?? {}),
12
- },
13
- });
14
- if (!resp.ok) {
15
- let detail = '';
16
- try {
17
- detail = await resp.text();
18
- }
19
- catch {
20
- // ignore
21
- }
22
- throw new Error(`${resp.status} ${resp.statusText}${detail ? ` — ${detail.slice(0, 300)}` : ''}`);
23
- }
24
- // PATCH /issues/<id> returns the row; some endpoints might return no
25
- // content — handle both.
26
- const txt = await resp.text();
27
- return (txt ? JSON.parse(txt) : null);
28
- }
29
- export async function issueList(opts) {
30
- const q = new URLSearchParams();
31
- if (opts.status)
32
- q.set('status', opts.status);
33
- if (opts.limit)
34
- q.set('limit', String(opts.limit));
35
- if (opts.errorType)
36
- q.set('errorType', opts.errorType);
37
- const qs = q.toString();
38
- return adminFetch(opts.config, `/issues${qs ? '?' + qs : ''}`);
39
- }
40
- export async function issuePatch(config, issueId, body) {
41
- return adminFetch(config, `/issues/${encodeURIComponent(issueId)}`, {
42
- body: JSON.stringify(body),
43
- method: 'PATCH',
44
- });
45
- }
46
- /** Format one issue for terminal output — short, one line, scannable. */
47
- export function formatIssueLine(i) {
48
- const status = i.status.padEnd(9);
49
- const title = `${i.errorType}${i.messageSample ? `: ${i.messageSample}` : ''}`;
50
- const events = `${i.eventCount}×`;
51
- return `${i.id} ${status} ${title.slice(0, 80).padEnd(80)} ${events}`;
52
- }
53
- //# sourceMappingURL=issue.js.map
package/lib/issue.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../src/issue.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- export type AdminUpload = {
2
- apiUrl: string;
3
- projectId: string;
4
- release?: string;
5
- token: string;
6
- };
7
- export type DsymSlice = {
8
- arch: string;
9
- debugId: string;
10
- file: string;
11
- };
12
- /**
13
- * Use `dwarfdump --uuid <path>` to enumerate `(arch, debug_id, file)`
14
- * for each Mach-O slice. Returns [] if dwarfdump isn't installed or the
15
- * output couldn't be parsed; callers should fall back to explicit
16
- * `--debug-id` / `--arch` flags in that case.
17
- */
18
- export declare function dsymSlicesFromDwarfdump(path: string): DsymSlice[];
19
- /** Walk a `.dSYM` bundle and return the DWARF binary files inside
20
- * `Contents/Resources/DWARF/`. If `path` already points at a binary
21
- * (not a bundle), returns `[path]`. */
22
- export declare function dwarfBinariesIn(path: string): string[];
23
- export type DsymUploadOptions = AdminUpload & {
24
- /** Explicit overrides when dwarfdump isn't available. */
25
- arch?: string;
26
- debugId?: string;
27
- /** A `Foo.dSYM` bundle or a raw DWARF binary. */
28
- path: string;
29
- objectName?: string;
30
- };
31
- export type DsymUploadResult = {
32
- slices: {
33
- arch: string;
34
- debugId: string;
35
- }[];
36
- };
37
- export declare function uploadDsym(opts: DsymUploadOptions): Promise<DsymUploadResult>;
38
- export type MappingUploadOptions = AdminUpload & {
39
- debugId?: string;
40
- path: string;
41
- };
42
- export declare function uploadMapping(opts: MappingUploadOptions): Promise<void>;
43
- //# sourceMappingURL=native-artifacts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native-artifacts.d.ts","sourceRoot":"","sources":["../src/native-artifacts.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAkCD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAcvE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAejE;AAED;;wCAEwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBtD;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAA;AAE9E,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqCnF;AAID,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7E"}