@kweaver-ai/kweaver-sdk 0.4.1 → 0.4.4

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.
@@ -0,0 +1,684 @@
1
+ import { ensureValidToken, formatHttpError } from "../auth/oauth.js";
2
+ import { HttpError } from "../utils/http.js";
3
+ import { vegaHealth, listVegaCatalogs, getVegaCatalog, vegaCatalogHealthStatus, testVegaCatalogConnection, discoverVegaCatalog, listVegaCatalogResources, listVegaResources, getVegaResource, queryVegaResourceData, previewVegaResource, listVegaConnectorTypes, getVegaConnectorType, listVegaDiscoverTasks, } from "../api/vega.js";
4
+ import { formatCallOutput } from "./call.js";
5
+ import { resolveBusinessDomain } from "../config/store.js";
6
+ // ---------------------------------------------------------------------------
7
+ // Help
8
+ // ---------------------------------------------------------------------------
9
+ function printVegaHelp() {
10
+ console.log(`kweaver vega
11
+
12
+ Subcommands:
13
+ health Check Vega service health
14
+ stats Show catalog statistics
15
+ inspect Health + catalog summary + running tasks
16
+ catalog list [--status X] [--limit N] [--offset N]
17
+ catalog get <id>
18
+ catalog health <ids...> | --all Health-check catalogs
19
+ catalog test-connection <id> Test catalog connectivity
20
+ catalog discover <id> [--wait] Trigger discovery
21
+ catalog resources <id> [--category X] [--limit N]
22
+ resource list [--catalog-id X] [--category X] [--status X] [--limit N] [--offset N]
23
+ resource get <id>
24
+ resource query <id> -d <json-body> Query resource data
25
+ resource preview <id> [--limit N] Preview resource data
26
+ connector-type list List connector types
27
+ connector-type get <type> Get connector type details
28
+
29
+ Common flags:
30
+ -bd, --biz-domain <s> Business domain (default: bd_public)
31
+ --pretty Pretty-print JSON (default)`);
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Common flag parser
35
+ // ---------------------------------------------------------------------------
36
+ function parseCommonFlags(args) {
37
+ let businessDomain = "";
38
+ let pretty = true;
39
+ const remaining = [];
40
+ for (let i = 0; i < args.length; i += 1) {
41
+ const arg = args[i];
42
+ if ((arg === "-bd" || arg === "--biz-domain") && args[i + 1]) {
43
+ businessDomain = args[++i];
44
+ continue;
45
+ }
46
+ if (arg === "--pretty") {
47
+ pretty = true;
48
+ continue;
49
+ }
50
+ remaining.push(arg);
51
+ }
52
+ if (!businessDomain)
53
+ businessDomain = resolveBusinessDomain();
54
+ return { remaining, businessDomain, pretty };
55
+ }
56
+ // ---------------------------------------------------------------------------
57
+ // Main router
58
+ // ---------------------------------------------------------------------------
59
+ export async function runVegaCommand(args) {
60
+ const [subcommand, ...rest] = args;
61
+ if (!subcommand || subcommand === "--help" || subcommand === "-h") {
62
+ printVegaHelp();
63
+ return 0;
64
+ }
65
+ const dispatch = () => {
66
+ if (subcommand === "health")
67
+ return runVegaHealthCommand(rest);
68
+ if (subcommand === "stats")
69
+ return runVegaStatsCommand(rest);
70
+ if (subcommand === "inspect")
71
+ return runVegaInspectCommand(rest);
72
+ if (subcommand === "catalog")
73
+ return runVegaCatalogCommand(rest);
74
+ if (subcommand === "resource")
75
+ return runVegaResourceCommand(rest);
76
+ if (subcommand === "connector-type")
77
+ return runVegaConnectorTypeCommand(rest);
78
+ return Promise.resolve(-1);
79
+ };
80
+ try {
81
+ const code = await dispatch();
82
+ if (code === -1) {
83
+ console.error(`Unknown vega subcommand: ${subcommand}`);
84
+ return 1;
85
+ }
86
+ return code;
87
+ }
88
+ catch (error) {
89
+ if (error instanceof HttpError && error.status === 401) {
90
+ try {
91
+ await ensureValidToken({ forceRefresh: true });
92
+ return await dispatch();
93
+ }
94
+ catch (retryError) {
95
+ console.error(formatHttpError(retryError));
96
+ return 1;
97
+ }
98
+ }
99
+ console.error(formatHttpError(error));
100
+ return 1;
101
+ }
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Top-level: health
105
+ // ---------------------------------------------------------------------------
106
+ async function runVegaHealthCommand(args) {
107
+ if (args.includes("--help") || args.includes("-h")) {
108
+ console.log("kweaver vega health\n\nCheck Vega service health.");
109
+ return 0;
110
+ }
111
+ const { businessDomain, pretty } = parseCommonFlags(args);
112
+ const token = await ensureValidToken();
113
+ const body = await vegaHealth({
114
+ baseUrl: token.baseUrl,
115
+ accessToken: token.accessToken,
116
+ businessDomain,
117
+ });
118
+ console.log(formatCallOutput(body, pretty));
119
+ return 0;
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // Top-level: stats
123
+ // ---------------------------------------------------------------------------
124
+ async function runVegaStatsCommand(args) {
125
+ if (args.includes("--help") || args.includes("-h")) {
126
+ console.log("kweaver vega stats\n\nShow catalog statistics.");
127
+ return 0;
128
+ }
129
+ const { businessDomain, pretty } = parseCommonFlags(args);
130
+ const token = await ensureValidToken();
131
+ const body = await listVegaCatalogs({
132
+ baseUrl: token.baseUrl,
133
+ accessToken: token.accessToken,
134
+ limit: 100,
135
+ businessDomain,
136
+ });
137
+ const parsed = JSON.parse(body);
138
+ const entries = Array.isArray(parsed) ? parsed : (parsed.entries ?? parsed.data ?? parsed.items ?? parsed.catalogs ?? []);
139
+ const count = Array.isArray(entries) ? entries.length : 0;
140
+ const stats = { catalog_count: count };
141
+ console.log(pretty ? JSON.stringify(stats, null, 2) : JSON.stringify(stats));
142
+ return 0;
143
+ }
144
+ // ---------------------------------------------------------------------------
145
+ // Top-level: inspect
146
+ // ---------------------------------------------------------------------------
147
+ async function runVegaInspectCommand(args) {
148
+ if (args.includes("--help") || args.includes("-h")) {
149
+ console.log("kweaver vega inspect\n\nHealth + catalog summary + running discover tasks.");
150
+ return 0;
151
+ }
152
+ const { businessDomain, pretty } = parseCommonFlags(args);
153
+ const token = await ensureValidToken();
154
+ const base = { baseUrl: token.baseUrl, accessToken: token.accessToken, businessDomain };
155
+ const result = {};
156
+ // Health — best-effort
157
+ try {
158
+ const healthBody = await vegaHealth(base);
159
+ result.health = JSON.parse(healthBody);
160
+ }
161
+ catch (err) {
162
+ console.error(`warn: health check failed: ${err instanceof Error ? err.message : String(err)}`);
163
+ result.health = null;
164
+ }
165
+ // Catalogs — best-effort
166
+ try {
167
+ const catalogsBody = await listVegaCatalogs({ ...base, limit: 100 });
168
+ const parsed = JSON.parse(catalogsBody);
169
+ const entries = Array.isArray(parsed) ? parsed : (parsed.entries ?? parsed.data ?? parsed.items ?? parsed.catalogs ?? []);
170
+ result.catalog_count = Array.isArray(entries) ? entries.length : 0;
171
+ }
172
+ catch (err) {
173
+ console.error(`warn: catalog list failed: ${err instanceof Error ? err.message : String(err)}`);
174
+ result.catalog_count = null;
175
+ }
176
+ // Running discover tasks — best-effort
177
+ try {
178
+ const tasksBody = await listVegaDiscoverTasks({ ...base, status: "running" });
179
+ const parsed = JSON.parse(tasksBody);
180
+ const entries = Array.isArray(parsed) ? parsed : (parsed.entries ?? parsed.data ?? parsed.items ?? parsed.tasks ?? []);
181
+ result.running_discover_tasks = Array.isArray(entries) ? entries.length : 0;
182
+ }
183
+ catch (err) {
184
+ console.error(`warn: discover tasks query failed: ${err instanceof Error ? err.message : String(err)}`);
185
+ result.running_discover_tasks = null;
186
+ }
187
+ console.log(pretty ? JSON.stringify(result, null, 2) : JSON.stringify(result));
188
+ return 0;
189
+ }
190
+ // ---------------------------------------------------------------------------
191
+ // Catalog router
192
+ // ---------------------------------------------------------------------------
193
+ async function runVegaCatalogCommand(args) {
194
+ const [sub, ...rest] = args;
195
+ if (!sub || sub === "--help" || sub === "-h") {
196
+ console.log(`kweaver vega catalog
197
+
198
+ Subcommands:
199
+ list [--status X] [--limit N] [--offset N]
200
+ get <id>
201
+ health <ids...> | --all
202
+ test-connection <id>
203
+ discover <id> [--wait]
204
+ resources <id> [--category X] [--limit N]`);
205
+ return 0;
206
+ }
207
+ if (sub === "list")
208
+ return await runCatalogList(rest);
209
+ if (sub === "get")
210
+ return await runCatalogGet(rest);
211
+ if (sub === "health")
212
+ return await runCatalogHealth(rest);
213
+ if (sub === "test-connection")
214
+ return await runCatalogTestConnection(rest);
215
+ if (sub === "discover")
216
+ return await runCatalogDiscover(rest);
217
+ if (sub === "resources")
218
+ return await runCatalogResources(rest);
219
+ console.error(`Unknown catalog subcommand: ${sub}`);
220
+ return 1;
221
+ }
222
+ // ---------------------------------------------------------------------------
223
+ // catalog list
224
+ // ---------------------------------------------------------------------------
225
+ async function runCatalogList(args) {
226
+ if (args.includes("--help") || args.includes("-h")) {
227
+ console.log(`kweaver vega catalog list [options]
228
+
229
+ Options:
230
+ --status <s> Filter by status
231
+ --limit <n> Max results
232
+ --offset <n> Offset
233
+ -bd, --biz-domain Business domain (default: bd_public)
234
+ --pretty Pretty-print JSON (default)`);
235
+ return 0;
236
+ }
237
+ let status;
238
+ let limit;
239
+ let offset;
240
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
241
+ for (let i = 0; i < remaining.length; i += 1) {
242
+ const arg = remaining[i];
243
+ if (arg === "--status" && remaining[i + 1]) {
244
+ status = remaining[++i];
245
+ continue;
246
+ }
247
+ if (arg === "--limit" && remaining[i + 1]) {
248
+ limit = parseInt(remaining[++i], 10);
249
+ continue;
250
+ }
251
+ if (arg === "--offset" && remaining[i + 1]) {
252
+ offset = parseInt(remaining[++i], 10);
253
+ continue;
254
+ }
255
+ }
256
+ const token = await ensureValidToken();
257
+ const body = await listVegaCatalogs({
258
+ baseUrl: token.baseUrl,
259
+ accessToken: token.accessToken,
260
+ status,
261
+ limit,
262
+ offset,
263
+ businessDomain,
264
+ });
265
+ console.log(formatCallOutput(body, pretty));
266
+ return 0;
267
+ }
268
+ // ---------------------------------------------------------------------------
269
+ // catalog get
270
+ // ---------------------------------------------------------------------------
271
+ async function runCatalogGet(args) {
272
+ if (args.includes("--help") || args.includes("-h")) {
273
+ console.log("kweaver vega catalog get <id>");
274
+ return 0;
275
+ }
276
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
277
+ const id = remaining.find((a) => !a.startsWith("-"));
278
+ if (!id) {
279
+ console.error("Usage: kweaver vega catalog get <id>");
280
+ return 1;
281
+ }
282
+ const token = await ensureValidToken();
283
+ const body = await getVegaCatalog({
284
+ baseUrl: token.baseUrl,
285
+ accessToken: token.accessToken,
286
+ id,
287
+ businessDomain,
288
+ });
289
+ console.log(formatCallOutput(body, pretty));
290
+ return 0;
291
+ }
292
+ // ---------------------------------------------------------------------------
293
+ // catalog health
294
+ // ---------------------------------------------------------------------------
295
+ async function runCatalogHealth(args) {
296
+ if (args.includes("--help") || args.includes("-h")) {
297
+ console.log(`kweaver vega catalog health <ids...> | --all
298
+
299
+ Options:
300
+ --all Check health of all catalogs`);
301
+ return 0;
302
+ }
303
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
304
+ const useAll = remaining.includes("--all");
305
+ const positionalIds = remaining.filter((a) => !a.startsWith("-"));
306
+ const token = await ensureValidToken();
307
+ const base = { baseUrl: token.baseUrl, accessToken: token.accessToken, businessDomain };
308
+ let ids;
309
+ if (useAll) {
310
+ const catalogsBody = await listVegaCatalogs({ ...base, limit: 100 });
311
+ const parsed = JSON.parse(catalogsBody);
312
+ const entries = Array.isArray(parsed) ? parsed : (parsed.entries ?? parsed.data ?? parsed.items ?? parsed.catalogs ?? []);
313
+ if (!Array.isArray(entries) || entries.length === 0) {
314
+ console.error("No catalogs found.");
315
+ return 1;
316
+ }
317
+ ids = entries
318
+ .map((e) => String(e.id ?? e.catalog_id ?? ""))
319
+ .filter(Boolean)
320
+ .join(",");
321
+ }
322
+ else if (positionalIds.length > 0) {
323
+ ids = positionalIds.join(",");
324
+ }
325
+ else {
326
+ console.error("Usage: kweaver vega catalog health <ids...> | --all");
327
+ return 1;
328
+ }
329
+ const body = await vegaCatalogHealthStatus({ ...base, ids });
330
+ console.log(formatCallOutput(body, pretty));
331
+ return 0;
332
+ }
333
+ // ---------------------------------------------------------------------------
334
+ // catalog test-connection
335
+ // ---------------------------------------------------------------------------
336
+ async function runCatalogTestConnection(args) {
337
+ if (args.includes("--help") || args.includes("-h")) {
338
+ console.log("kweaver vega catalog test-connection <id>");
339
+ return 0;
340
+ }
341
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
342
+ const id = remaining.find((a) => !a.startsWith("-"));
343
+ if (!id) {
344
+ console.error("Usage: kweaver vega catalog test-connection <id>");
345
+ return 1;
346
+ }
347
+ const token = await ensureValidToken();
348
+ const body = await testVegaCatalogConnection({
349
+ baseUrl: token.baseUrl,
350
+ accessToken: token.accessToken,
351
+ id,
352
+ businessDomain,
353
+ });
354
+ console.log(formatCallOutput(body, pretty));
355
+ return 0;
356
+ }
357
+ // ---------------------------------------------------------------------------
358
+ // catalog discover
359
+ // ---------------------------------------------------------------------------
360
+ async function runCatalogDiscover(args) {
361
+ if (args.includes("--help") || args.includes("-h")) {
362
+ console.log(`kweaver vega catalog discover <id> [--wait]
363
+
364
+ Options:
365
+ --wait Wait for discovery to complete`);
366
+ return 0;
367
+ }
368
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
369
+ const wait = remaining.includes("--wait");
370
+ const id = remaining.find((a) => !a.startsWith("-"));
371
+ if (!id) {
372
+ console.error("Usage: kweaver vega catalog discover <id> [--wait]");
373
+ return 1;
374
+ }
375
+ const token = await ensureValidToken();
376
+ const body = await discoverVegaCatalog({
377
+ baseUrl: token.baseUrl,
378
+ accessToken: token.accessToken,
379
+ id,
380
+ wait: wait ? true : undefined,
381
+ businessDomain,
382
+ });
383
+ console.log(formatCallOutput(body, pretty));
384
+ return 0;
385
+ }
386
+ // ---------------------------------------------------------------------------
387
+ // catalog resources
388
+ // ---------------------------------------------------------------------------
389
+ async function runCatalogResources(args) {
390
+ if (args.includes("--help") || args.includes("-h")) {
391
+ console.log(`kweaver vega catalog resources <id> [options]
392
+
393
+ Options:
394
+ --category <s> Filter by category
395
+ --limit <n> Max results`);
396
+ return 0;
397
+ }
398
+ let category;
399
+ let limit;
400
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
401
+ const positionals = [];
402
+ for (let i = 0; i < remaining.length; i += 1) {
403
+ const arg = remaining[i];
404
+ if (arg === "--category" && remaining[i + 1]) {
405
+ category = remaining[++i];
406
+ continue;
407
+ }
408
+ if (arg === "--limit" && remaining[i + 1]) {
409
+ limit = parseInt(remaining[++i], 10);
410
+ continue;
411
+ }
412
+ if (!arg.startsWith("-")) {
413
+ positionals.push(arg);
414
+ }
415
+ }
416
+ const id = positionals[0];
417
+ if (!id) {
418
+ console.error("Usage: kweaver vega catalog resources <id> [--category X] [--limit N]");
419
+ return 1;
420
+ }
421
+ const token = await ensureValidToken();
422
+ const body = await listVegaCatalogResources({
423
+ baseUrl: token.baseUrl,
424
+ accessToken: token.accessToken,
425
+ id,
426
+ category,
427
+ limit,
428
+ businessDomain,
429
+ });
430
+ console.log(formatCallOutput(body, pretty));
431
+ return 0;
432
+ }
433
+ // ---------------------------------------------------------------------------
434
+ // Resource router
435
+ // ---------------------------------------------------------------------------
436
+ async function runVegaResourceCommand(args) {
437
+ const [sub, ...rest] = args;
438
+ if (!sub || sub === "--help" || sub === "-h") {
439
+ console.log(`kweaver vega resource
440
+
441
+ Subcommands:
442
+ list [--catalog-id X] [--category X] [--status X] [--limit N] [--offset N]
443
+ get <id>
444
+ query <id> -d <json-body>
445
+ preview <id> [--limit N]`);
446
+ return 0;
447
+ }
448
+ if (sub === "list")
449
+ return await runResourceList(rest);
450
+ if (sub === "get")
451
+ return await runResourceGet(rest);
452
+ if (sub === "query")
453
+ return await runResourceQuery(rest);
454
+ if (sub === "preview")
455
+ return await runResourcePreview(rest);
456
+ console.error(`Unknown resource subcommand: ${sub}`);
457
+ return 1;
458
+ }
459
+ // ---------------------------------------------------------------------------
460
+ // resource list
461
+ // ---------------------------------------------------------------------------
462
+ async function runResourceList(args) {
463
+ if (args.includes("--help") || args.includes("-h")) {
464
+ console.log(`kweaver vega resource list [options]
465
+
466
+ Options:
467
+ --catalog-id <s> Filter by catalog
468
+ --category <s> Filter by category
469
+ --status <s> Filter by status
470
+ --limit <n> Max results
471
+ --offset <n> Offset
472
+ -bd, --biz-domain Business domain (default: bd_public)
473
+ --pretty Pretty-print JSON (default)`);
474
+ return 0;
475
+ }
476
+ let catalogId;
477
+ let category;
478
+ let status;
479
+ let limit;
480
+ let offset;
481
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
482
+ for (let i = 0; i < remaining.length; i += 1) {
483
+ const arg = remaining[i];
484
+ if (arg === "--catalog-id" && remaining[i + 1]) {
485
+ catalogId = remaining[++i];
486
+ continue;
487
+ }
488
+ if (arg === "--category" && remaining[i + 1]) {
489
+ category = remaining[++i];
490
+ continue;
491
+ }
492
+ if (arg === "--status" && remaining[i + 1]) {
493
+ status = remaining[++i];
494
+ continue;
495
+ }
496
+ if (arg === "--limit" && remaining[i + 1]) {
497
+ limit = parseInt(remaining[++i], 10);
498
+ continue;
499
+ }
500
+ if (arg === "--offset" && remaining[i + 1]) {
501
+ offset = parseInt(remaining[++i], 10);
502
+ continue;
503
+ }
504
+ }
505
+ const token = await ensureValidToken();
506
+ const body = await listVegaResources({
507
+ baseUrl: token.baseUrl,
508
+ accessToken: token.accessToken,
509
+ catalogId,
510
+ category,
511
+ status,
512
+ limit,
513
+ offset,
514
+ businessDomain,
515
+ });
516
+ console.log(formatCallOutput(body, pretty));
517
+ return 0;
518
+ }
519
+ // ---------------------------------------------------------------------------
520
+ // resource get
521
+ // ---------------------------------------------------------------------------
522
+ async function runResourceGet(args) {
523
+ if (args.includes("--help") || args.includes("-h")) {
524
+ console.log("kweaver vega resource get <id>");
525
+ return 0;
526
+ }
527
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
528
+ const id = remaining.find((a) => !a.startsWith("-"));
529
+ if (!id) {
530
+ console.error("Usage: kweaver vega resource get <id>");
531
+ return 1;
532
+ }
533
+ const token = await ensureValidToken();
534
+ const body = await getVegaResource({
535
+ baseUrl: token.baseUrl,
536
+ accessToken: token.accessToken,
537
+ id,
538
+ businessDomain,
539
+ });
540
+ console.log(formatCallOutput(body, pretty));
541
+ return 0;
542
+ }
543
+ // ---------------------------------------------------------------------------
544
+ // resource query
545
+ // ---------------------------------------------------------------------------
546
+ async function runResourceQuery(args) {
547
+ if (args.includes("--help") || args.includes("-h")) {
548
+ console.log(`kweaver vega resource query <id> -d <json-body>
549
+
550
+ Options:
551
+ -d, --data <json> Request body (JSON string)`);
552
+ return 0;
553
+ }
554
+ let data;
555
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
556
+ const positionals = [];
557
+ for (let i = 0; i < remaining.length; i += 1) {
558
+ const arg = remaining[i];
559
+ if ((arg === "-d" || arg === "--data") && remaining[i + 1]) {
560
+ data = remaining[++i];
561
+ continue;
562
+ }
563
+ if (!arg.startsWith("-")) {
564
+ positionals.push(arg);
565
+ }
566
+ }
567
+ const id = positionals[0];
568
+ if (!id || !data) {
569
+ console.error("Usage: kweaver vega resource query <id> -d <json-body>");
570
+ return 1;
571
+ }
572
+ const token = await ensureValidToken();
573
+ const body = await queryVegaResourceData({
574
+ baseUrl: token.baseUrl,
575
+ accessToken: token.accessToken,
576
+ id,
577
+ body: data,
578
+ businessDomain,
579
+ });
580
+ console.log(formatCallOutput(body, pretty));
581
+ return 0;
582
+ }
583
+ // ---------------------------------------------------------------------------
584
+ // resource preview
585
+ // ---------------------------------------------------------------------------
586
+ async function runResourcePreview(args) {
587
+ if (args.includes("--help") || args.includes("-h")) {
588
+ console.log(`kweaver vega resource preview <id> [--limit N]
589
+
590
+ Options:
591
+ --limit <n> Number of rows to preview (default: 10)`);
592
+ return 0;
593
+ }
594
+ let limit;
595
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
596
+ const positionals = [];
597
+ for (let i = 0; i < remaining.length; i += 1) {
598
+ const arg = remaining[i];
599
+ if (arg === "--limit" && remaining[i + 1]) {
600
+ limit = parseInt(remaining[++i], 10);
601
+ continue;
602
+ }
603
+ if (!arg.startsWith("-")) {
604
+ positionals.push(arg);
605
+ }
606
+ }
607
+ const id = positionals[0];
608
+ if (!id) {
609
+ console.error("Usage: kweaver vega resource preview <id> [--limit N]");
610
+ return 1;
611
+ }
612
+ const token = await ensureValidToken();
613
+ const body = await previewVegaResource({
614
+ baseUrl: token.baseUrl,
615
+ accessToken: token.accessToken,
616
+ id,
617
+ limit,
618
+ businessDomain,
619
+ });
620
+ console.log(formatCallOutput(body, pretty));
621
+ return 0;
622
+ }
623
+ // ---------------------------------------------------------------------------
624
+ // Connector-type router
625
+ // ---------------------------------------------------------------------------
626
+ async function runVegaConnectorTypeCommand(args) {
627
+ const [sub, ...rest] = args;
628
+ if (!sub || sub === "--help" || sub === "-h") {
629
+ console.log(`kweaver vega connector-type
630
+
631
+ Subcommands:
632
+ list List connector types
633
+ get <type> Get connector type details`);
634
+ return 0;
635
+ }
636
+ if (sub === "list")
637
+ return await runConnectorTypeList(rest);
638
+ if (sub === "get")
639
+ return await runConnectorTypeGet(rest);
640
+ console.error(`Unknown connector-type subcommand: ${sub}`);
641
+ return 1;
642
+ }
643
+ // ---------------------------------------------------------------------------
644
+ // connector-type list
645
+ // ---------------------------------------------------------------------------
646
+ async function runConnectorTypeList(args) {
647
+ if (args.includes("--help") || args.includes("-h")) {
648
+ console.log("kweaver vega connector-type list");
649
+ return 0;
650
+ }
651
+ const { businessDomain, pretty } = parseCommonFlags(args);
652
+ const token = await ensureValidToken();
653
+ const body = await listVegaConnectorTypes({
654
+ baseUrl: token.baseUrl,
655
+ accessToken: token.accessToken,
656
+ businessDomain,
657
+ });
658
+ console.log(formatCallOutput(body, pretty));
659
+ return 0;
660
+ }
661
+ // ---------------------------------------------------------------------------
662
+ // connector-type get
663
+ // ---------------------------------------------------------------------------
664
+ async function runConnectorTypeGet(args) {
665
+ if (args.includes("--help") || args.includes("-h")) {
666
+ console.log("kweaver vega connector-type get <type>");
667
+ return 0;
668
+ }
669
+ const { remaining, businessDomain, pretty } = parseCommonFlags(args);
670
+ const type = remaining.find((a) => !a.startsWith("-"));
671
+ if (!type) {
672
+ console.error("Usage: kweaver vega connector-type get <type>");
673
+ return 1;
674
+ }
675
+ const token = await ensureValidToken();
676
+ const body = await getVegaConnectorType({
677
+ baseUrl: token.baseUrl,
678
+ accessToken: token.accessToken,
679
+ type,
680
+ businessDomain,
681
+ });
682
+ console.log(formatCallOutput(body, pretty));
683
+ return 0;
684
+ }