@faros-fde-sandbox/cli 1.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/LICENSE +17 -0
- package/README.md +416 -0
- package/bin/faros +3 -0
- package/lib/commands/logs/index.d.ts +3 -0
- package/lib/commands/logs/index.d.ts.map +1 -0
- package/lib/commands/logs/index.js +162 -0
- package/lib/commands/logs/index.js.map +1 -0
- package/lib/commands/sources/index.d.ts +3 -0
- package/lib/commands/sources/index.d.ts.map +1 -0
- package/lib/commands/sources/index.js +99 -0
- package/lib/commands/sources/index.js.map +1 -0
- package/lib/commands/sync/ci-cd.d.ts +3 -0
- package/lib/commands/sync/ci-cd.d.ts.map +1 -0
- package/lib/commands/sync/ci-cd.js +188 -0
- package/lib/commands/sync/ci-cd.js.map +1 -0
- package/lib/commands/sync/index.d.ts +3 -0
- package/lib/commands/sync/index.d.ts.map +1 -0
- package/lib/commands/sync/index.js +25 -0
- package/lib/commands/sync/index.js.map +1 -0
- package/lib/commands/sync/tests.d.ts +3 -0
- package/lib/commands/sync/tests.d.ts.map +1 -0
- package/lib/commands/sync/tests.js +317 -0
- package/lib/commands/sync/tests.js.map +1 -0
- package/lib/config/loader.d.ts +5 -0
- package/lib/config/loader.d.ts.map +1 -0
- package/lib/config/loader.js +137 -0
- package/lib/config/loader.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +73 -0
- package/lib/index.js.map +1 -0
- package/lib/lib/api/client.d.ts +8 -0
- package/lib/lib/api/client.d.ts.map +1 -0
- package/lib/lib/api/client.js +43 -0
- package/lib/lib/api/client.js.map +1 -0
- package/lib/lib/sources/s3.d.ts +19 -0
- package/lib/lib/sources/s3.d.ts.map +1 -0
- package/lib/lib/sources/s3.js +139 -0
- package/lib/lib/sources/s3.js.map +1 -0
- package/lib/lib/ui/index.d.ts +32 -0
- package/lib/lib/ui/index.d.ts.map +1 -0
- package/lib/lib/ui/index.js +88 -0
- package/lib/lib/ui/index.js.map +1 -0
- package/lib/types/config.d.ts +160 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/config.js +40 -0
- package/lib/types/config.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
|
+
export interface S3Config {
|
|
3
|
+
readonly region?: string;
|
|
4
|
+
readonly accessKeyId?: string;
|
|
5
|
+
readonly secretAccessKey?: string;
|
|
6
|
+
readonly endpoint?: string;
|
|
7
|
+
readonly profile?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function createS3Client(config: S3Config): S3Client;
|
|
10
|
+
export interface S3Uri {
|
|
11
|
+
bucket: string;
|
|
12
|
+
key: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function parseS3Uri(uri: string): S3Uri;
|
|
15
|
+
export declare function listS3Objects(client: S3Client, bucket: string, prefix: string, pattern?: string): Promise<string[]>;
|
|
16
|
+
export declare function downloadS3Object(client: S3Client, bucket: string, key: string): Promise<string>;
|
|
17
|
+
export declare function downloadS3Objects(client: S3Client, bucket: string, keys: string[]): Promise<string[]>;
|
|
18
|
+
export declare function cleanupTempFiles(files: string[]): void;
|
|
19
|
+
//# sourceMappingURL=s3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../../src/lib/sources/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAIT,MAAM,oBAAoB,CAAC;AAM5B,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAuBzD;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAW7C;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CA2BnB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUtD"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createS3Client = createS3Client;
|
|
37
|
+
exports.parseS3Uri = parseS3Uri;
|
|
38
|
+
exports.listS3Objects = listS3Objects;
|
|
39
|
+
exports.downloadS3Object = downloadS3Object;
|
|
40
|
+
exports.downloadS3Objects = downloadS3Objects;
|
|
41
|
+
exports.cleanupTempFiles = cleanupTempFiles;
|
|
42
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
function createS3Client(config) {
|
|
47
|
+
const s3Config = {};
|
|
48
|
+
if (config.region) {
|
|
49
|
+
s3Config.region = config.region;
|
|
50
|
+
}
|
|
51
|
+
if (config.accessKeyId && config.secretAccessKey) {
|
|
52
|
+
s3Config.credentials = {
|
|
53
|
+
accessKeyId: config.accessKeyId,
|
|
54
|
+
secretAccessKey: config.secretAccessKey,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (config.endpoint) {
|
|
58
|
+
s3Config.endpoint = config.endpoint;
|
|
59
|
+
}
|
|
60
|
+
if (config.profile) {
|
|
61
|
+
process.env.AWS_PROFILE = config.profile;
|
|
62
|
+
}
|
|
63
|
+
return new client_s3_1.S3Client(s3Config);
|
|
64
|
+
}
|
|
65
|
+
function parseS3Uri(uri) {
|
|
66
|
+
const match = uri.match(/^s3:\/\/([^/]+)\/(.+)$/);
|
|
67
|
+
if (!match) {
|
|
68
|
+
throw new Error(`Invalid S3 URI format: ${uri}. Expected format: s3://bucket/key`);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
bucket: match[1],
|
|
72
|
+
key: match[2],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async function listS3Objects(client, bucket, prefix, pattern) {
|
|
76
|
+
const keys = [];
|
|
77
|
+
let continuationToken;
|
|
78
|
+
do {
|
|
79
|
+
const command = new client_s3_1.ListObjectsV2Command({
|
|
80
|
+
Bucket: bucket,
|
|
81
|
+
Prefix: prefix,
|
|
82
|
+
ContinuationToken: continuationToken,
|
|
83
|
+
});
|
|
84
|
+
const response = await client.send(command);
|
|
85
|
+
if (response.Contents) {
|
|
86
|
+
for (const obj of response.Contents) {
|
|
87
|
+
if (obj.Key) {
|
|
88
|
+
if (!pattern || new RegExp(pattern).test(obj.Key)) {
|
|
89
|
+
keys.push(obj.Key);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
continuationToken = response.NextContinuationToken;
|
|
95
|
+
} while (continuationToken);
|
|
96
|
+
return keys;
|
|
97
|
+
}
|
|
98
|
+
async function downloadS3Object(client, bucket, key) {
|
|
99
|
+
const command = new client_s3_1.GetObjectCommand({
|
|
100
|
+
Bucket: bucket,
|
|
101
|
+
Key: key,
|
|
102
|
+
});
|
|
103
|
+
const response = await client.send(command);
|
|
104
|
+
if (!response.Body) {
|
|
105
|
+
throw new Error(`No content in S3 object: s3://${bucket}/${key}`);
|
|
106
|
+
}
|
|
107
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'faros-s3-'));
|
|
108
|
+
const tempFile = path.join(tempDir, path.basename(key));
|
|
109
|
+
const body = response.Body;
|
|
110
|
+
const fileStream = fs.createWriteStream(tempFile);
|
|
111
|
+
await new Promise((resolve, reject) => {
|
|
112
|
+
body.pipe(fileStream);
|
|
113
|
+
body.on('error', reject);
|
|
114
|
+
fileStream.on('finish', () => resolve());
|
|
115
|
+
fileStream.on('error', reject);
|
|
116
|
+
});
|
|
117
|
+
return tempFile;
|
|
118
|
+
}
|
|
119
|
+
async function downloadS3Objects(client, bucket, keys) {
|
|
120
|
+
const tempFiles = [];
|
|
121
|
+
for (const key of keys) {
|
|
122
|
+
const tempFile = await downloadS3Object(client, bucket, key);
|
|
123
|
+
tempFiles.push(tempFile);
|
|
124
|
+
}
|
|
125
|
+
return tempFiles;
|
|
126
|
+
}
|
|
127
|
+
function cleanupTempFiles(files) {
|
|
128
|
+
for (const file of files) {
|
|
129
|
+
try {
|
|
130
|
+
const dir = path.dirname(file);
|
|
131
|
+
fs.unlinkSync(file);
|
|
132
|
+
fs.rmdirSync(dir);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Ignore errors
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=s3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/lib/sources/s3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Ora } from 'ora';
|
|
2
|
+
import cliProgress from 'cli-progress';
|
|
3
|
+
import Table from 'cli-table3';
|
|
4
|
+
export declare const isCI: boolean;
|
|
5
|
+
export declare const ciName: string | null;
|
|
6
|
+
export declare const ui: {
|
|
7
|
+
success: string;
|
|
8
|
+
error: string;
|
|
9
|
+
warning: string;
|
|
10
|
+
info: string;
|
|
11
|
+
spinner(text: string): Ora | {
|
|
12
|
+
start: () => void;
|
|
13
|
+
succeed: (t?: string) => void;
|
|
14
|
+
fail: (t?: string) => void;
|
|
15
|
+
warn: (t?: string) => void;
|
|
16
|
+
};
|
|
17
|
+
progressBar(total: number, options?: Partial<cliProgress.Options>): cliProgress.SingleBar | {
|
|
18
|
+
start: () => void;
|
|
19
|
+
update: (value: number) => void;
|
|
20
|
+
stop: () => void;
|
|
21
|
+
};
|
|
22
|
+
table(head: string[], options?: Partial<Table.TableConstructorOptions>): Table.Table;
|
|
23
|
+
box(message: string, options?: any): string;
|
|
24
|
+
log: {
|
|
25
|
+
success: (message: string) => void;
|
|
26
|
+
error: (message: string) => void;
|
|
27
|
+
warning: (message: string) => void;
|
|
28
|
+
info: (message: string) => void;
|
|
29
|
+
debug: (message: string) => void;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/index.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG/B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,MAAM,YAAY,CAAC;AAI/B,eAAO,MAAM,IAAI,SAAc,CAAC;AAChC,eAAO,MAAM,MAAM,eAAc,CAAC;AAGlC,eAAO,MAAM,EAAE;;;;;kBAQC,MAAM,GAAG,GAAG,GAAG;QAAE,KAAK,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;uBActH,MAAM,YAAY,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;;wBAM3C,MAAM;;;gBAsBhB,MAAM,EAAE,YAAY,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;iBASzD,MAAM,YAAY,GAAG;;2BAWb,MAAM;yBACR,MAAM;2BACJ,MAAM;wBACT,MAAM;yBACL,MAAM;;CAE1B,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ui = exports.ciName = exports.isCI = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const figures_1 = __importDefault(require("figures"));
|
|
10
|
+
const boxen_1 = __importDefault(require("boxen"));
|
|
11
|
+
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
12
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
13
|
+
const ci_info_1 = __importDefault(require("ci-info"));
|
|
14
|
+
// Detect CI environment
|
|
15
|
+
exports.isCI = ci_info_1.default.isCI;
|
|
16
|
+
exports.ciName = ci_info_1.default.name;
|
|
17
|
+
// Create styled logger
|
|
18
|
+
exports.ui = {
|
|
19
|
+
// Symbols
|
|
20
|
+
success: chalk_1.default.green(figures_1.default.tick),
|
|
21
|
+
error: chalk_1.default.red(figures_1.default.cross),
|
|
22
|
+
warning: chalk_1.default.yellow(figures_1.default.warning),
|
|
23
|
+
info: chalk_1.default.blue(figures_1.default.info),
|
|
24
|
+
// Spinners
|
|
25
|
+
spinner(text) {
|
|
26
|
+
if (exports.isCI) {
|
|
27
|
+
// In CI, return a mock spinner that just logs
|
|
28
|
+
return {
|
|
29
|
+
start: () => console.log(text),
|
|
30
|
+
succeed: (t) => console.log(chalk_1.default.green(figures_1.default.tick), t || text),
|
|
31
|
+
fail: (t) => console.error(chalk_1.default.red(figures_1.default.cross), t || text),
|
|
32
|
+
warn: (t) => console.warn(chalk_1.default.yellow(figures_1.default.warning), t || text),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return (0, ora_1.default)({ text, color: 'blue' });
|
|
36
|
+
},
|
|
37
|
+
// Progress bar
|
|
38
|
+
progressBar(total, options) {
|
|
39
|
+
if (exports.isCI) {
|
|
40
|
+
// In CI, return a simple counter
|
|
41
|
+
let current = 0;
|
|
42
|
+
return {
|
|
43
|
+
start: () => console.log(`Starting (0/${total})`),
|
|
44
|
+
update: (value) => {
|
|
45
|
+
current = value;
|
|
46
|
+
if (value % Math.ceil(total / 10) === 0 || value === total) {
|
|
47
|
+
console.log(`Progress: ${value}/${total} (${Math.round(value / total * 100)}%)`);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
stop: () => console.log(`Completed (${current}/${total})`),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const bar = new cli_progress_1.default.SingleBar({
|
|
54
|
+
format: `${chalk_1.default.blue('Progress')} |{bar}| {percentage}% | {value}/{total}`,
|
|
55
|
+
barCompleteChar: '\u2588',
|
|
56
|
+
barIncompleteChar: '\u2591',
|
|
57
|
+
hideCursor: true,
|
|
58
|
+
...options,
|
|
59
|
+
});
|
|
60
|
+
return bar;
|
|
61
|
+
},
|
|
62
|
+
// Table
|
|
63
|
+
table(head, options) {
|
|
64
|
+
return new cli_table3_1.default({
|
|
65
|
+
head: head.map(h => chalk_1.default.bold(h)),
|
|
66
|
+
style: { head: [] },
|
|
67
|
+
...options,
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
// Box
|
|
71
|
+
box(message, options) {
|
|
72
|
+
return (0, boxen_1.default)(message, {
|
|
73
|
+
padding: 1,
|
|
74
|
+
margin: 1,
|
|
75
|
+
borderStyle: 'round',
|
|
76
|
+
...options,
|
|
77
|
+
});
|
|
78
|
+
},
|
|
79
|
+
// Logging helpers
|
|
80
|
+
log: {
|
|
81
|
+
success: (message) => console.log(chalk_1.default.green(figures_1.default.tick), message),
|
|
82
|
+
error: (message) => console.error(chalk_1.default.red(figures_1.default.cross), message),
|
|
83
|
+
warning: (message) => console.warn(chalk_1.default.yellow(figures_1.default.warning), message),
|
|
84
|
+
info: (message) => console.log(chalk_1.default.blue(figures_1.default.info), message),
|
|
85
|
+
debug: (message) => console.log(chalk_1.default.dim(message)),
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ConfigSchema: z.ZodObject<{
|
|
3
|
+
url: z.ZodDefault<z.ZodString>;
|
|
4
|
+
graph: z.ZodDefault<z.ZodString>;
|
|
5
|
+
stagingGraph: z.ZodOptional<z.ZodString>;
|
|
6
|
+
origin: z.ZodDefault<z.ZodString>;
|
|
7
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
8
|
+
sources: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
9
|
+
type: z.ZodOptional<z.ZodString>;
|
|
10
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
11
|
+
token: z.ZodOptional<z.ZodString>;
|
|
12
|
+
bucket: z.ZodOptional<z.ZodString>;
|
|
13
|
+
region: z.ZodOptional<z.ZodString>;
|
|
14
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
15
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
16
|
+
syncInterval: z.ZodOptional<z.ZodString>;
|
|
17
|
+
streams: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
apiKey?: string | undefined;
|
|
20
|
+
type?: string | undefined;
|
|
21
|
+
token?: string | undefined;
|
|
22
|
+
bucket?: string | undefined;
|
|
23
|
+
region?: string | undefined;
|
|
24
|
+
prefix?: string | undefined;
|
|
25
|
+
pattern?: string | undefined;
|
|
26
|
+
syncInterval?: string | undefined;
|
|
27
|
+
streams?: string[] | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
apiKey?: string | undefined;
|
|
30
|
+
type?: string | undefined;
|
|
31
|
+
token?: string | undefined;
|
|
32
|
+
bucket?: string | undefined;
|
|
33
|
+
region?: string | undefined;
|
|
34
|
+
prefix?: string | undefined;
|
|
35
|
+
pattern?: string | undefined;
|
|
36
|
+
syncInterval?: string | undefined;
|
|
37
|
+
streams?: string[] | undefined;
|
|
38
|
+
}>>>;
|
|
39
|
+
defaults: z.ZodOptional<z.ZodObject<{
|
|
40
|
+
testSource: z.ZodOptional<z.ZodString>;
|
|
41
|
+
testType: z.ZodOptional<z.ZodString>;
|
|
42
|
+
concurrency: z.ZodDefault<z.ZodNumber>;
|
|
43
|
+
}, "strip", z.ZodTypeAny, {
|
|
44
|
+
concurrency: number;
|
|
45
|
+
testSource?: string | undefined;
|
|
46
|
+
testType?: string | undefined;
|
|
47
|
+
}, {
|
|
48
|
+
testSource?: string | undefined;
|
|
49
|
+
testType?: string | undefined;
|
|
50
|
+
concurrency?: number | undefined;
|
|
51
|
+
}>>;
|
|
52
|
+
logs: z.ZodOptional<z.ZodObject<{
|
|
53
|
+
level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
|
|
54
|
+
directory: z.ZodOptional<z.ZodString>;
|
|
55
|
+
retention: z.ZodOptional<z.ZodString>;
|
|
56
|
+
}, "strip", z.ZodTypeAny, {
|
|
57
|
+
level: "debug" | "info" | "warn" | "error";
|
|
58
|
+
directory?: string | undefined;
|
|
59
|
+
retention?: string | undefined;
|
|
60
|
+
}, {
|
|
61
|
+
level?: "debug" | "info" | "warn" | "error" | undefined;
|
|
62
|
+
directory?: string | undefined;
|
|
63
|
+
retention?: string | undefined;
|
|
64
|
+
}>>;
|
|
65
|
+
}, "strip", z.ZodTypeAny, {
|
|
66
|
+
url: string;
|
|
67
|
+
graph: string;
|
|
68
|
+
origin: string;
|
|
69
|
+
stagingGraph?: string | undefined;
|
|
70
|
+
apiKey?: string | undefined;
|
|
71
|
+
sources?: Record<string, {
|
|
72
|
+
apiKey?: string | undefined;
|
|
73
|
+
type?: string | undefined;
|
|
74
|
+
token?: string | undefined;
|
|
75
|
+
bucket?: string | undefined;
|
|
76
|
+
region?: string | undefined;
|
|
77
|
+
prefix?: string | undefined;
|
|
78
|
+
pattern?: string | undefined;
|
|
79
|
+
syncInterval?: string | undefined;
|
|
80
|
+
streams?: string[] | undefined;
|
|
81
|
+
}> | undefined;
|
|
82
|
+
defaults?: {
|
|
83
|
+
concurrency: number;
|
|
84
|
+
testSource?: string | undefined;
|
|
85
|
+
testType?: string | undefined;
|
|
86
|
+
} | undefined;
|
|
87
|
+
logs?: {
|
|
88
|
+
level: "debug" | "info" | "warn" | "error";
|
|
89
|
+
directory?: string | undefined;
|
|
90
|
+
retention?: string | undefined;
|
|
91
|
+
} | undefined;
|
|
92
|
+
}, {
|
|
93
|
+
url?: string | undefined;
|
|
94
|
+
graph?: string | undefined;
|
|
95
|
+
stagingGraph?: string | undefined;
|
|
96
|
+
origin?: string | undefined;
|
|
97
|
+
apiKey?: string | undefined;
|
|
98
|
+
sources?: Record<string, {
|
|
99
|
+
apiKey?: string | undefined;
|
|
100
|
+
type?: string | undefined;
|
|
101
|
+
token?: string | undefined;
|
|
102
|
+
bucket?: string | undefined;
|
|
103
|
+
region?: string | undefined;
|
|
104
|
+
prefix?: string | undefined;
|
|
105
|
+
pattern?: string | undefined;
|
|
106
|
+
syncInterval?: string | undefined;
|
|
107
|
+
streams?: string[] | undefined;
|
|
108
|
+
}> | undefined;
|
|
109
|
+
defaults?: {
|
|
110
|
+
testSource?: string | undefined;
|
|
111
|
+
testType?: string | undefined;
|
|
112
|
+
concurrency?: number | undefined;
|
|
113
|
+
} | undefined;
|
|
114
|
+
logs?: {
|
|
115
|
+
level?: "debug" | "info" | "warn" | "error" | undefined;
|
|
116
|
+
directory?: string | undefined;
|
|
117
|
+
retention?: string | undefined;
|
|
118
|
+
} | undefined;
|
|
119
|
+
}>;
|
|
120
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
121
|
+
export interface BaseCommandOptions {
|
|
122
|
+
apiKey?: string;
|
|
123
|
+
url?: string;
|
|
124
|
+
graph?: string;
|
|
125
|
+
debug?: boolean;
|
|
126
|
+
quiet?: boolean;
|
|
127
|
+
json?: boolean;
|
|
128
|
+
noColor?: boolean;
|
|
129
|
+
dryRun?: boolean;
|
|
130
|
+
validate?: boolean;
|
|
131
|
+
preview?: boolean;
|
|
132
|
+
}
|
|
133
|
+
export interface SyncTestsOptions extends BaseCommandOptions {
|
|
134
|
+
format?: string;
|
|
135
|
+
source?: string;
|
|
136
|
+
type?: string;
|
|
137
|
+
commit?: string;
|
|
138
|
+
testStart?: string;
|
|
139
|
+
testEnd?: string;
|
|
140
|
+
concurrency?: number;
|
|
141
|
+
s3Region?: string;
|
|
142
|
+
s3Profile?: string;
|
|
143
|
+
s3AccessKeyId?: string;
|
|
144
|
+
s3SecretAccessKey?: string;
|
|
145
|
+
pattern?: string;
|
|
146
|
+
}
|
|
147
|
+
export interface SyncCICDOptions extends BaseCommandOptions {
|
|
148
|
+
status?: string;
|
|
149
|
+
commit?: string;
|
|
150
|
+
run?: string;
|
|
151
|
+
runStatus?: string;
|
|
152
|
+
runStartTime?: string;
|
|
153
|
+
runEndTime?: string;
|
|
154
|
+
deploy?: string;
|
|
155
|
+
deployStatus?: string;
|
|
156
|
+
deployStartTime?: string;
|
|
157
|
+
deployEndTime?: string;
|
|
158
|
+
artifact?: string;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// Config schema
|
|
6
|
+
// NOTE: Sensitive credentials should be in .env, not config files
|
|
7
|
+
exports.ConfigSchema = zod_1.z.object({
|
|
8
|
+
// API Configuration (can be in config file)
|
|
9
|
+
url: zod_1.z.string().url().default('https://prod.api.faros.ai'),
|
|
10
|
+
graph: zod_1.z.string().default('default'),
|
|
11
|
+
stagingGraph: zod_1.z.string().optional(),
|
|
12
|
+
origin: zod_1.z.string().default('faros-cli'),
|
|
13
|
+
// Credentials (prefer .env over config file)
|
|
14
|
+
apiKey: zod_1.z.string().optional(), // Prefer FAROS_API_KEY env var
|
|
15
|
+
// Data Sources (credentials should be in .env)
|
|
16
|
+
sources: zod_1.z.record(zod_1.z.object({
|
|
17
|
+
type: zod_1.z.string().optional(),
|
|
18
|
+
apiKey: zod_1.z.string().optional(), // Prefer SOURCE_API_KEY env var
|
|
19
|
+
token: zod_1.z.string().optional(), // Prefer SOURCE_TOKEN env var
|
|
20
|
+
bucket: zod_1.z.string().optional(), // S3 bucket name
|
|
21
|
+
region: zod_1.z.string().optional(), // S3 region
|
|
22
|
+
prefix: zod_1.z.string().optional(), // S3 prefix
|
|
23
|
+
pattern: zod_1.z.string().optional(), // S3 pattern
|
|
24
|
+
syncInterval: zod_1.z.string().optional(),
|
|
25
|
+
streams: zod_1.z.array(zod_1.z.string()).optional(),
|
|
26
|
+
})).optional(),
|
|
27
|
+
// Defaults
|
|
28
|
+
defaults: zod_1.z.object({
|
|
29
|
+
testSource: zod_1.z.string().optional(),
|
|
30
|
+
testType: zod_1.z.string().optional(),
|
|
31
|
+
concurrency: zod_1.z.number().default(8),
|
|
32
|
+
}).optional(),
|
|
33
|
+
// Logging
|
|
34
|
+
logs: zod_1.z.object({
|
|
35
|
+
level: zod_1.z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
36
|
+
directory: zod_1.z.string().optional(),
|
|
37
|
+
retention: zod_1.z.string().optional(),
|
|
38
|
+
}).optional(),
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,gBAAgB;AAChB,kEAAkE;AACrD,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,4CAA4C;IAC5C,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC;IAC1D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACpC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IAEvC,6CAA6C;IAC7C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,+BAA+B;IAE9D,+CAA+C;IAC/C,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,gCAAgC;QAC/D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,8BAA8B;QAC5D,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,iBAAiB;QAChD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY;QAC3C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY;QAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,aAAa;QAC7C,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACxC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAEd,WAAW;IACX,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;QACjB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;KACnC,CAAC,CAAC,QAAQ,EAAE;IAEb,UAAU;IACV,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACjE,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@faros-fde-sandbox/cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Modern CLI for Faros AI - sync data, manage sources, view logs",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"faros",
|
|
7
|
+
"observability",
|
|
8
|
+
"devops",
|
|
9
|
+
"ci-cd",
|
|
10
|
+
"quality",
|
|
11
|
+
"testing",
|
|
12
|
+
"linear",
|
|
13
|
+
"github"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://www.faros.ai",
|
|
16
|
+
"author": "Faros AI, Inc.",
|
|
17
|
+
"license": "Apache-2.0",
|
|
18
|
+
"bin": {
|
|
19
|
+
"faros": "./bin/faros"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"lib/",
|
|
23
|
+
"bin/"
|
|
24
|
+
],
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"main": "./lib/index.js",
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc -p tsconfig.json",
|
|
34
|
+
"clean": "rm -rf lib node_modules",
|
|
35
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
36
|
+
"fix": "prettier --write 'src/**/*.ts' && npm run lint -- --fix",
|
|
37
|
+
"lint": "eslint 'src/**/*.ts'",
|
|
38
|
+
"prepare": "npm run build",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"test:watch": "vitest"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@aws-sdk/client-s3": "^3.700.0",
|
|
44
|
+
"axios": "^1.8.2",
|
|
45
|
+
"axios-retry": "^4.5.0",
|
|
46
|
+
"boxen": "^8.0.1",
|
|
47
|
+
"chalk": "^5.3.0",
|
|
48
|
+
"ci-info": "^4.0.0",
|
|
49
|
+
"cli-progress": "^3.12.0",
|
|
50
|
+
"cli-table3": "^0.6.5",
|
|
51
|
+
"commander": "^12.1.0",
|
|
52
|
+
"cosmiconfig": "^9.0.0",
|
|
53
|
+
"dotenv": "^16.4.5",
|
|
54
|
+
"figures": "^6.1.0",
|
|
55
|
+
"ora": "^8.1.0",
|
|
56
|
+
"p-limit": "^3.1.0",
|
|
57
|
+
"pino": "^9.5.0",
|
|
58
|
+
"pino-pretty": "^11.2.2",
|
|
59
|
+
"test-results-parser": "^0.2.3",
|
|
60
|
+
"update-notifier": "^7.3.1",
|
|
61
|
+
"uuid": "^11.0.3",
|
|
62
|
+
"zod": "^3.23.8"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@types/cli-progress": "^3.11.6",
|
|
66
|
+
"@types/js-yaml": "^4.0.9",
|
|
67
|
+
"@types/node": "^22.15.17",
|
|
68
|
+
"@types/update-notifier": "^6.0.8",
|
|
69
|
+
"js-yaml": "^4.1.1",
|
|
70
|
+
"prettier": "^2.7.1",
|
|
71
|
+
"typescript": "^5.9.3",
|
|
72
|
+
"vitest": "^2.1.6"
|
|
73
|
+
}
|
|
74
|
+
}
|