@pipeline-builder/pipeline-manager 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +74 -0
- package/cdk.json +91 -0
- package/config.yml +94 -0
- package/dist/boilerplate.d.ts +3 -0
- package/dist/boilerplate.d.ts.map +1 -0
- package/dist/boilerplate.js +58 -0
- package/dist/cdk.json +91 -0
- package/dist/cli.d.ts +62 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +372 -0
- package/dist/commands/bootstrap.d.ts +11 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +159 -0
- package/dist/commands/create-pipeline.d.ts +12 -0
- package/dist/commands/create-pipeline.d.ts.map +1 -0
- package/dist/commands/create-pipeline.js +291 -0
- package/dist/commands/deploy.d.ts +15 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +167 -0
- package/dist/commands/get-pipeline.d.ts +13 -0
- package/dist/commands/get-pipeline.d.ts.map +1 -0
- package/dist/commands/get-pipeline.js +97 -0
- package/dist/commands/get-plugin.d.ts +13 -0
- package/dist/commands/get-plugin.d.ts.map +1 -0
- package/dist/commands/get-plugin.js +98 -0
- package/dist/commands/list-pipelines.d.ts +20 -0
- package/dist/commands/list-pipelines.d.ts.map +1 -0
- package/dist/commands/list-pipelines.js +172 -0
- package/dist/commands/list-plugins.d.ts +20 -0
- package/dist/commands/list-plugins.d.ts.map +1 -0
- package/dist/commands/list-plugins.js +167 -0
- package/dist/commands/login.d.ts +21 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +179 -0
- package/dist/commands/setup-events.d.ts +15 -0
- package/dist/commands/setup-events.d.ts.map +1 -0
- package/dist/commands/setup-events.js +177 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +89 -0
- package/dist/commands/store-token.d.ts +20 -0
- package/dist/commands/store-token.d.ts.map +1 -0
- package/dist/commands/store-token.js +233 -0
- package/dist/commands/synth.d.ts +21 -0
- package/dist/commands/synth.d.ts.map +1 -0
- package/dist/commands/synth.js +143 -0
- package/dist/commands/upload-plugin.d.ts +21 -0
- package/dist/commands/upload-plugin.d.ts.map +1 -0
- package/dist/commands/upload-plugin.js +311 -0
- package/dist/commands/version.d.ts +12 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +223 -0
- package/dist/config/cli.constants.d.ts +101 -0
- package/dist/config/cli.constants.d.ts.map +1 -0
- package/dist/config/cli.constants.js +165 -0
- package/dist/config.yml +94 -0
- package/dist/templates/events-stack.json +141 -0
- package/dist/types/config.d.ts +44 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/error.d.ts +61 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +39 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/pipeline.d.ts +144 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +5 -0
- package/dist/types/plugin.d.ts +160 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +5 -0
- package/dist/utils/api-client.d.ts +26 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +160 -0
- package/dist/utils/audit-log.d.ts +8 -0
- package/dist/utils/audit-log.d.ts.map +1 -0
- package/dist/utils/audit-log.js +53 -0
- package/dist/utils/auth-guard.d.ts +16 -0
- package/dist/utils/auth-guard.d.ts.map +1 -0
- package/dist/utils/auth-guard.js +25 -0
- package/dist/utils/aws-secrets.d.ts +21 -0
- package/dist/utils/aws-secrets.d.ts.map +1 -0
- package/dist/utils/aws-secrets.js +74 -0
- package/dist/utils/banner.d.ts +19 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +59 -0
- package/dist/utils/cdk-utils.d.ts +51 -0
- package/dist/utils/cdk-utils.d.ts.map +1 -0
- package/dist/utils/cdk-utils.js +101 -0
- package/dist/utils/command-utils.d.ts +56 -0
- package/dist/utils/command-utils.d.ts.map +1 -0
- package/dist/utils/command-utils.js +138 -0
- package/dist/utils/config-loader.d.ts +27 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +166 -0
- package/dist/utils/error-handler.d.ts +29 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +255 -0
- package/dist/utils/list-command-utils.d.ts +23 -0
- package/dist/utils/list-command-utils.d.ts.map +1 -0
- package/dist/utils/list-command-utils.js +60 -0
- package/dist/utils/output-utils.d.ts +60 -0
- package/dist/utils/output-utils.d.ts.map +1 -0
- package/dist/utils/output-utils.js +320 -0
- package/dist/utils/rate-limiter.d.ts +14 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +73 -0
- package/package.json +144 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.printCommandHeader = printCommandHeader;
|
|
9
|
+
exports.printExecutionSummary = printExecutionSummary;
|
|
10
|
+
exports.printSslWarning = printSslWarning;
|
|
11
|
+
exports.resolveToken = resolveToken;
|
|
12
|
+
exports.createAuthenticatedClientAsync = createAuthenticatedClientAsync;
|
|
13
|
+
exports.createAuthenticatedClient = createAuthenticatedClient;
|
|
14
|
+
exports.validateEntityId = validateEntityId;
|
|
15
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
16
|
+
const api_client_1 = require("./api-client");
|
|
17
|
+
const aws_secrets_1 = require("./aws-secrets");
|
|
18
|
+
const config_loader_1 = require("./config-loader");
|
|
19
|
+
const output_utils_1 = require("./output-utils");
|
|
20
|
+
const cli_constants_1 = require("../config/cli.constants");
|
|
21
|
+
const { bold, cyan, green, magenta } = picocolors_1.default;
|
|
22
|
+
/**
|
|
23
|
+
* Print command header with section title and execution ID.
|
|
24
|
+
* Returns the execution ID for use in error handlers and summaries.
|
|
25
|
+
*/
|
|
26
|
+
function printCommandHeader(title, subtitle) {
|
|
27
|
+
const executionId = (0, cli_constants_1.generateExecutionId)();
|
|
28
|
+
(0, output_utils_1.printSection)(title);
|
|
29
|
+
console.log(`${magenta(`[EXE-${executionId}]`)} ${cyan(bold(subtitle || title))}`);
|
|
30
|
+
console.log('');
|
|
31
|
+
return executionId;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Print execution summary with ID, duration, and status.
|
|
35
|
+
*/
|
|
36
|
+
function printExecutionSummary(executionId, duration) {
|
|
37
|
+
console.log('');
|
|
38
|
+
(0, output_utils_1.printKeyValue)({
|
|
39
|
+
'Execution ID': executionId,
|
|
40
|
+
'Duration': (0, cli_constants_1.formatDuration)(duration),
|
|
41
|
+
'Status': green('✓ Success'),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Warn if SSL verification is disabled.
|
|
46
|
+
*/
|
|
47
|
+
function printSslWarning(verifySsl) {
|
|
48
|
+
if (verifySsl === false) {
|
|
49
|
+
(0, output_utils_1.printWarning)('SSL certificate verification is DISABLED');
|
|
50
|
+
console.log('');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a platform auth token using two methods (in priority order):
|
|
55
|
+
*
|
|
56
|
+
* 1. PLATFORM_TOKEN env var
|
|
57
|
+
* 2. --store-tokens flag → fetch credentials from AWS Secrets Manager, then authenticate
|
|
58
|
+
*
|
|
59
|
+
* @returns JWT token string
|
|
60
|
+
*/
|
|
61
|
+
async function resolveToken(options) {
|
|
62
|
+
// Path 1: PLATFORM_TOKEN env var
|
|
63
|
+
if (process.env.PLATFORM_TOKEN) {
|
|
64
|
+
(0, output_utils_1.printInfo)('Using PLATFORM_TOKEN from environment');
|
|
65
|
+
return process.env.PLATFORM_TOKEN;
|
|
66
|
+
}
|
|
67
|
+
// Path 2: --store-tokens → read PLATFORM_SECRET_NAME from Secrets Manager
|
|
68
|
+
if (options.storeTokens) {
|
|
69
|
+
const secretName = process.env.PLATFORM_SECRET_NAME;
|
|
70
|
+
if (!secretName) {
|
|
71
|
+
throw new Error('PLATFORM_SECRET_NAME env var is required with --store-tokens');
|
|
72
|
+
}
|
|
73
|
+
(0, output_utils_1.printInfo)('Fetching secret from Secrets Manager', { secret: secretName });
|
|
74
|
+
const secretJson = await (0, aws_secrets_1.getSecretValue)(secretName, { region: options.region, profile: options.profile });
|
|
75
|
+
const secret = JSON.parse(secretJson);
|
|
76
|
+
(0, output_utils_1.printSuccess)('Secret retrieved from Secrets Manager');
|
|
77
|
+
if (!secret.accessToken) {
|
|
78
|
+
throw new Error('Secret missing accessToken — run "pipeline-manager store-token" to generate');
|
|
79
|
+
}
|
|
80
|
+
(0, output_utils_1.printInfo)('Using stored JWT token');
|
|
81
|
+
return secret.accessToken;
|
|
82
|
+
}
|
|
83
|
+
throw new Error('Authentication required. Use one of:\n' +
|
|
84
|
+
' - Set PLATFORM_TOKEN environment variable\n' +
|
|
85
|
+
' - Pass --store-tokens with PLATFORM_SECRET_NAME env var');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Initialize and return an authenticated API client.
|
|
89
|
+
*
|
|
90
|
+
* Supports two auth methods:
|
|
91
|
+
* 1. PLATFORM_TOKEN env var
|
|
92
|
+
* 2. --store-tokens + PLATFORM_SECRET_NAME env var → fetch token from Secrets Manager
|
|
93
|
+
*/
|
|
94
|
+
async function createAuthenticatedClientAsync(options) {
|
|
95
|
+
// Resolve token and set it in env so ApiClient/getConfig can find it
|
|
96
|
+
if (!process.env.PLATFORM_TOKEN) {
|
|
97
|
+
const token = await resolveToken(options);
|
|
98
|
+
process.env.PLATFORM_TOKEN = token;
|
|
99
|
+
}
|
|
100
|
+
return createAuthenticatedClient(options);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Initialize and return an authenticated API client (sync — requires PLATFORM_TOKEN).
|
|
104
|
+
* Use createAuthenticatedClientAsync for --store-tokens support.
|
|
105
|
+
*/
|
|
106
|
+
function createAuthenticatedClient(options) {
|
|
107
|
+
const config = (0, config_loader_1.getConfigWithOptions)(options);
|
|
108
|
+
(0, output_utils_1.printInfo)('Initializing API client', { baseUrl: config.api.baseUrl });
|
|
109
|
+
const client = new api_client_1.ApiClient(config);
|
|
110
|
+
if (!client.isAuthenticated()) {
|
|
111
|
+
(0, output_utils_1.printError)('Not authenticated', { hint: 'Set PLATFORM_TOKEN or use --store-tokens' });
|
|
112
|
+
throw new Error('Authentication required');
|
|
113
|
+
}
|
|
114
|
+
(0, output_utils_1.printSuccess)('API client initialized');
|
|
115
|
+
return client;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Validate a required entity ID (ULID or UUID format).
|
|
119
|
+
* Returns trimmed ID.
|
|
120
|
+
*
|
|
121
|
+
* @throws Error if ID is empty
|
|
122
|
+
*/
|
|
123
|
+
function validateEntityId(id, entityName) {
|
|
124
|
+
if (!id || typeof id !== 'string' || id.trim().length === 0) {
|
|
125
|
+
(0, output_utils_1.printError)(`Invalid ${entityName} ID`, { provided: id });
|
|
126
|
+
throw new Error(`${entityName} ID must be a non-empty string`);
|
|
127
|
+
}
|
|
128
|
+
const trimmed = id.trim();
|
|
129
|
+
if (trimmed.length !== 26 && trimmed.length !== 36) {
|
|
130
|
+
(0, output_utils_1.printWarning)(`${entityName} ID format may be invalid`, {
|
|
131
|
+
provided: trimmed,
|
|
132
|
+
expectedLength: '26 characters (ULID) or 36 characters (UUID)',
|
|
133
|
+
actualLength: trimmed.length,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return trimmed;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb21tYW5kLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7OztBQWV0QyxnREFNQztBQUtELHNEQU9DO0FBS0QsMENBS0M7QUFVRCxvQ0FzQ0M7QUFTRCx3RUFhQztBQU1ELDhEQVlDO0FBUUQsNENBaUJDO0FBMUpELDREQUE4QjtBQUM5Qiw2Q0FBeUM7QUFDekMsK0NBQStDO0FBQy9DLG1EQUErRDtBQUMvRCxpREFBZ0g7QUFDaEgsMkRBQThFO0FBRTlFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxvQkFBSSxDQUFDO0FBRTVDOzs7R0FHRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLEtBQWEsRUFBRSxRQUFpQjtJQUNqRSxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUFtQixHQUFFLENBQUM7SUFDMUMsSUFBQSwyQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxXQUFXLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxRQUFnQjtJQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLElBQUEsNEJBQWEsRUFBQztRQUNaLGNBQWMsRUFBRSxXQUFXO1FBQzNCLFVBQVUsRUFBRSxJQUFBLDhCQUFjLEVBQUMsUUFBUSxDQUFDO1FBQ3BDLFFB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LHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUEsMkJBQVksRUFBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLEVBQXNCLEVBQUUsVUFBa0I7SUFDekUsSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxJQUFBLHlCQUFVLEVBQUMsV0FBVyxVQUFVLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLGdDQUFnQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUUxQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkQsSUFBQSwyQkFBWSxFQUFDLEdBQUcsVUFBVSwyQkFBMkIsRUFBRTtZQUNyRCxRQUFRLEVBQUUsT0FBTztZQUNqQixjQUFjLEVBQUUsOENBQThDO1lBQzlELFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBnZXRTZWNyZXRWYWx1ZSB9IGZyb20gJy4vYXdzLXNlY3JldHMnO1xuaW1wb3J0IHsgQ29uZmlnLCBnZXRDb25maWdXaXRoT3B0aW9ucyB9IGZyb20gJy4vY29uZmlnLWxvYWRlcic7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZ2VuZXJhdGVFeGVjdXRpb25JZCB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBncmVlbiwgbWFnZW50YSB9ID0gcGljbztcblxuLyoqXG4gKiBQcmludCBjb21tYW5kIGhlYWRlciB3aXRoIHNlY3Rpb24gdGl0bGUgYW5kIGV4ZWN1dGlvbiBJRC5cbiAqIFJldHVybnMgdGhlIGV4ZWN1dGlvbiBJRCBmb3IgdXNlIGluIGVycm9yIGhhbmRsZXJzIGFuZCBzdW1tYXJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludENvbW1hbmRIZWFkZXIodGl0bGU6IHN0cmluZywgc3VidGl0bGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBleGVjdXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKTtcbiAgcHJpbnRTZWN0aW9uKHRpdGxlKTtcbiAgY29uc29sZS5sb2coYCR7bWFnZW50YShgW0VYRS0ke2V4ZWN1dGlvbklkfV1gKX0gJHtjeWFuKGJvbGQoc3VidGl0bGUgfHwgdGl0bGUpKX1gKTtcbiAgY29uc29sZS5sb2coJycpO1xuICByZXR1cm4gZXhlY3V0aW9uSWQ7XG59XG5cbi8qKlxuICogUHJpbnQgZXhlY3V0aW9uIHN1bW1hcnkgd2l0aCBJRCwgZHVyYXRpb24sIGFuZCBzdGF0dXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEV4ZWN1dGlvblN1bW1hcnkoZXhlY3V0aW9uSWQ6IHN0cmluZywgZHVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAnRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbiksXG4gICAgJ1N0YXR1cyc6IGdyZWVuKCfinJMgU3VjY2VzcycpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBXYXJuIGlmIFNTTCB2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFNzbFdhcm5pbmcodmVyaWZ5U3NsPzogYm9vbGVhbik6IHZvaWQge1xuICBpZiAodmVyaWZ5U3NsID09PSBmYWxzZSkge1xuICAgIHByaW50V2FybmluZygnU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBpcyBESVNBQkxFRCcpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwbGF0Zm9ybSBhdXRoIHRva2VuIHVzaW5nIHR3byBtZXRob2RzIChpbiBwcmlvcml0eSBvcmRlcik6XG4gKlxuICogMS4gUExBVEZPUk1fVE9LRU4gZW52IHZhclxuICogMi4gLS1zdG9yZS10b2tlbnMgZmxhZyDihpIgZmV0Y2ggY3JlZGVudGlhbHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyLCB0aGVuIGF1dGhlbnRpY2F0ZVxuICpcbiAqIEByZXR1cm5zIEpXVCB0b2tlbiBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVUb2tlbihvcHRpb25zOiB7XG4gIHN0b3JlVG9rZW5zPzogYm9vbGVhbjtcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIFBhdGggMTogUExBVEZPUk1fVE9LRU4gZW52IHZhclxuICBpZiAocHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU4pIHtcbiAgICBwcmludEluZm8oJ1VzaW5nIFBMQVRGT1JNX1RPS0VOIGZyb20gZW52aXJvbm1lbnQnKTtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU47XG4gIH1cblxuICAvLyBQYXRoIDI6IC0tc3RvcmUtdG9rZW5zIOKGkiByZWFkIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gIGlmIChvcHRpb25zLnN0b3JlVG9rZW5zKSB7XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FO1xuICAgIGlmICghc2VjcmV0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIGlzIHJlcXVpcmVkIHdpdGggLS1zdG9yZS10b2tlbnMnKTtcbiAgICB9XG5cbiAgICBwcmludEluZm8oJ0ZldGNoaW5nIHNlY3JldCBmcm9tIFNlY3JldHMgTWFuYWdlcicsIHsgc2VjcmV0OiBzZWNyZXROYW1lIH0pO1xuXG4gICAgY29uc3Qgc2VjcmV0SnNvbiA9IGF3YWl0IGdldFNlY3JldFZhbHVlKHNlY3JldE5hbWUsIHsgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbiwgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIH0pO1xuICAgIGNvbnN0IHNlY3JldCA9IEpTT04ucGFyc2Uoc2VjcmV0SnNvbikgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcmludFN1Y2Nlc3MoJ1NlY3JldCByZXRyaWV2ZWQgZnJvbSBTZWNyZXRzIE1hbmFnZXInKTtcblxuICAgIGlmICghc2VjcmV0LmFjY2Vzc1Rva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3JldCBtaXNzaW5nIGFjY2Vzc1Rva2VuIOKAlCBydW4gXCJwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuXCIgdG8gZ2VuZXJhdGUnKTtcbiAgICB9XG5cbiAgICBwcmludEluZm8oJ1VzaW5nIHN0b3JlZCBKV1QgdG9rZW4nKTtcbiAgICByZXR1cm4gc2VjcmV0LmFjY2Vzc1Rva2VuO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZC4gVXNlIG9uZSBvZjpcXG4nICtcbiAgICAnICAtIFNldCBQTEFURk9STV9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZVxcbicgK1xuICAgICcgIC0gUGFzcyAtLXN0b3JlLXRva2VucyB3aXRoIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXInLFxuICApO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYW5kIHJldHVybiBhbiBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnQuXG4gKlxuICogU3VwcG9ydHMgdHdvIGF1dGggbWV0aG9kczpcbiAqIDEuIFBMQVRGT1JNX1RPS0VOIGVudiB2YXJcbiAqIDIuIC0tc3RvcmUtdG9rZW5zICsgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciDihpIgZmV0Y2ggdG9rZW4gZnJvbSBTZWNyZXRzIE1hbmFnZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zOiB7XG4gIHN0b3JlVG9rZW5zPzogYm9vbGVhbjtcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xufSk6IFByb21pc2U8QXBpQ2xpZW50PiB7XG4gIC8vIFJlc29sdmUgdG9rZW4gYW5kIHNldCBpdCBpbiBlbnYgc28gQXBpQ2xpZW50L2dldENvbmZpZyBjYW4gZmluZCBpdFxuICBpZiAoIXByb2Nlc3MuZW52LlBMQVRGT1JNX1RPS0VOKSB7XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCByZXNvbHZlVG9rZW4ob3B0aW9ucyk7XG4gICAgcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU4gPSB0b2tlbjtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYW5kIHJldHVybiBhbiBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnQgKHN5bmMg4oCUIHJlcXVpcmVzIFBMQVRGT1JNX1RPS0VOKS5cbiAqIFVzZSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMgZm9yIC0tc3RvcmUtdG9rZW5zIHN1cHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnM6IHsgdmVyaWZ5U3NsPzogYm9vbGVhbiB9KTogQXBpQ2xpZW50IHtcbiAgY29uc3QgY29uZmlnOiBDb25maWcgPSBnZXRDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zKTtcbiAgcHJpbnRJbmZvKCdJbml0aWFsaXppbmcgQVBJIGNsaWVudCcsIHsgYmFzZVVybDogY29uZmlnLmFwaS5iYXNlVXJsIH0pO1xuICBjb25zdCBjbGllbnQgPSBuZXcgQXBpQ2xpZW50KGNvbmZpZyk7XG5cbiAgaWYgKCFjbGllbnQuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICBwcmludEVycm9yKCdOb3QgYXV0aGVudGljYXRlZCcsIHsgaGludDogJ1NldCBQTEFURk9STV9UT0tFTiBvciB1c2UgLS1zdG9yZS10b2tlbnMnIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHByaW50U3VjY2VzcygnQVBJIGNsaWVudCBpbml0aWFsaXplZCcpO1xuICByZXR1cm4gY2xpZW50O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgcmVxdWlyZWQgZW50aXR5IElEIChVTElEIG9yIFVVSUQgZm9ybWF0KS5cbiAqIFJldHVybnMgdHJpbW1lZCBJRC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIGlmIElEIGlzIGVtcHR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVudGl0eUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVudGl0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWQgfHwgdHlwZW9mIGlkICE9PSAnc3RyaW5nJyB8fCBpZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcHJpbnRFcnJvcihgSW52YWxpZCAke2VudGl0eU5hbWV9IElEYCwgeyBwcm92aWRlZDogaWQgfSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2VudGl0eU5hbWV9IElEIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cblxuICBjb25zdCB0cmltbWVkID0gaWQudHJpbSgpO1xuXG4gIGlmICh0cmltbWVkLmxlbmd0aCAhPT0gMjYgJiYgdHJpbW1lZC5sZW5ndGggIT09IDM2KSB7XG4gICAgcHJpbnRXYXJuaW5nKGAke2VudGl0eU5hbWV9IElEIGZvcm1hdCBtYXkgYmUgaW52YWxpZGAsIHtcbiAgICAgIHByb3ZpZGVkOiB0cmltbWVkLFxuICAgICAgZXhwZWN0ZWRMZW5ndGg6ICcyNiBjaGFyYWN0ZXJzIChVTElEKSBvciAzNiBjaGFyYWN0ZXJzIChVVUlEKScsXG4gICAgICBhY3R1YWxMZW5ndGg6IHRyaW1tZWQubGVuZ3RoLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbiJdfQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Config } from '../types';
|
|
2
|
+
export type { Config };
|
|
3
|
+
/**
|
|
4
|
+
* Load configuration from files and environment.
|
|
5
|
+
*
|
|
6
|
+
* Priority (last wins):
|
|
7
|
+
* 1. Built-in defaults
|
|
8
|
+
* 2. User config file: ~/.pipeline-manager/config.yml
|
|
9
|
+
* 3. Project config file: CLI_CONFIG_PATH or ./config.yml
|
|
10
|
+
* 4. Environment variables
|
|
11
|
+
*
|
|
12
|
+
* Auth token MUST come from PLATFORM_TOKEN env var (never from config file).
|
|
13
|
+
*/
|
|
14
|
+
export declare function getConfig(): Config;
|
|
15
|
+
/**
|
|
16
|
+
* Return a copy of `config` with SSL verification disabled.
|
|
17
|
+
*/
|
|
18
|
+
export declare function withSSLDisabled(config: Config): Config;
|
|
19
|
+
/**
|
|
20
|
+
* Load configuration, optionally disabling SSL based on command options.
|
|
21
|
+
* Replaces the repeated pattern:
|
|
22
|
+
* `options.verifySsl === false ? withSSLDisabled(getConfig()) : getConfig()`
|
|
23
|
+
*/
|
|
24
|
+
export declare function getConfigWithOptions(options: {
|
|
25
|
+
verifySsl?: boolean;
|
|
26
|
+
}): Config;
|
|
27
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,YAAY,EAAE,MAAM,EAAE,CAAC;AA4CvB;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,IAAI,MAAM,CA0DlC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAG7E"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.getConfig = getConfig;
|
|
39
|
+
exports.withSSLDisabled = withSSLDisabled;
|
|
40
|
+
exports.getConfigWithOptions = getConfigWithOptions;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const yaml = __importStar(require("yaml"));
|
|
45
|
+
const output_utils_1 = require("./output-utils");
|
|
46
|
+
/**
|
|
47
|
+
* Default configuration — API endpoint paths and connection settings.
|
|
48
|
+
*/
|
|
49
|
+
const defaultConfig = {
|
|
50
|
+
api: {
|
|
51
|
+
baseUrl: 'https://localhost:8443',
|
|
52
|
+
timeout: 30_000,
|
|
53
|
+
pipelineUrl: '/api/pipeline',
|
|
54
|
+
pipelineListUrl: '/api/pipelines',
|
|
55
|
+
pluginUrl: '/api/plugin',
|
|
56
|
+
pluginListUrl: '/api/plugins',
|
|
57
|
+
pluginUploadUrl: '/api/plugin/upload',
|
|
58
|
+
rejectUnauthorized: true,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
/** User config file path: ~/.pipeline-manager/config.yml */
|
|
62
|
+
const USER_CONFIG_PATH = path.join(os.homedir(), '.pipeline-manager', 'config.yml');
|
|
63
|
+
/**
|
|
64
|
+
* Load a YAML config file and merge its `api` section into the config.
|
|
65
|
+
* Returns the merged config or the original if file doesn't exist or fails.
|
|
66
|
+
*/
|
|
67
|
+
function loadConfigFile(filePath, config) {
|
|
68
|
+
if (!fs.existsSync(filePath))
|
|
69
|
+
return config;
|
|
70
|
+
try {
|
|
71
|
+
(0, output_utils_1.printDebug)('Loading configuration', { path: filePath });
|
|
72
|
+
const parsed = yaml.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
73
|
+
if (parsed?.auth) {
|
|
74
|
+
(0, output_utils_1.printWarning)('Auth section in config file is ignored — use PLATFORM_TOKEN env var');
|
|
75
|
+
}
|
|
76
|
+
return { api: { ...config.api, ...parsed?.api } };
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
(0, output_utils_1.printWarning)('Failed to load config file, using defaults', {
|
|
80
|
+
path: filePath,
|
|
81
|
+
error: error instanceof Error ? error.message : String(error),
|
|
82
|
+
});
|
|
83
|
+
return config;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Load configuration from files and environment.
|
|
88
|
+
*
|
|
89
|
+
* Priority (last wins):
|
|
90
|
+
* 1. Built-in defaults
|
|
91
|
+
* 2. User config file: ~/.pipeline-manager/config.yml
|
|
92
|
+
* 3. Project config file: CLI_CONFIG_PATH or ./config.yml
|
|
93
|
+
* 4. Environment variables
|
|
94
|
+
*
|
|
95
|
+
* Auth token MUST come from PLATFORM_TOKEN env var (never from config file).
|
|
96
|
+
*/
|
|
97
|
+
function getConfig() {
|
|
98
|
+
const projectConfigPath = process.env.CLI_CONFIG_PATH || path.join(__dirname, '../config.yml');
|
|
99
|
+
// Layer 1: defaults → Layer 2: user config → Layer 3: project config
|
|
100
|
+
let config = loadConfigFile(USER_CONFIG_PATH, { ...defaultConfig });
|
|
101
|
+
config = loadConfigFile(projectConfigPath, config);
|
|
102
|
+
// Layer 4: environment variable overrides
|
|
103
|
+
// Layer 4: environment variable overrides
|
|
104
|
+
if (process.env.PLATFORM_BASE_URL) {
|
|
105
|
+
config.api.baseUrl = process.env.PLATFORM_BASE_URL;
|
|
106
|
+
(0, output_utils_1.printDebug)('Using PLATFORM_BASE_URL from environment', { baseUrl: config.api.baseUrl });
|
|
107
|
+
}
|
|
108
|
+
if (process.env.TLS_REJECT_UNAUTHORIZED !== undefined) {
|
|
109
|
+
const disable = process.env.TLS_REJECT_UNAUTHORIZED === '0';
|
|
110
|
+
if (disable && process.env.NODE_ENV === 'production') {
|
|
111
|
+
(0, output_utils_1.printWarning)('Ignoring TLS_REJECT_UNAUTHORIZED=0 in production — SSL verification remains enabled');
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
config.api.rejectUnauthorized = !disable;
|
|
115
|
+
if (disable) {
|
|
116
|
+
(0, output_utils_1.printWarning)('SSL certificate validation disabled via TLS_REJECT_UNAUTHORIZED=0');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (process.env.UPLOAD_TIMEOUT) {
|
|
121
|
+
const parsed = parseInt(process.env.UPLOAD_TIMEOUT, 10);
|
|
122
|
+
if (!isNaN(parsed) && parsed > 0) {
|
|
123
|
+
config.api.uploadTimeout = parsed;
|
|
124
|
+
(0, output_utils_1.printDebug)('Using UPLOAD_TIMEOUT from environment', { uploadTimeout: `${parsed}ms` });
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
(0, output_utils_1.printWarning)('Invalid UPLOAD_TIMEOUT value, using default', { provided: process.env.UPLOAD_TIMEOUT });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Token is REQUIRED from environment
|
|
131
|
+
const token = process.env.PLATFORM_TOKEN;
|
|
132
|
+
if (!token) {
|
|
133
|
+
(0, output_utils_1.printError)('PLATFORM_TOKEN environment variable is not set');
|
|
134
|
+
throw new Error('PLATFORM_TOKEN environment variable is required');
|
|
135
|
+
}
|
|
136
|
+
if (token.trim().length === 0) {
|
|
137
|
+
throw new Error('PLATFORM_TOKEN must be a non-empty string');
|
|
138
|
+
}
|
|
139
|
+
if (token.includes(' ')) {
|
|
140
|
+
(0, output_utils_1.printWarning)('PLATFORM_TOKEN contains whitespace — this may cause issues');
|
|
141
|
+
}
|
|
142
|
+
(0, output_utils_1.printDebug)('Configuration loaded successfully');
|
|
143
|
+
return {
|
|
144
|
+
...config,
|
|
145
|
+
auth: { token },
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Return a copy of `config` with SSL verification disabled.
|
|
150
|
+
*/
|
|
151
|
+
function withSSLDisabled(config) {
|
|
152
|
+
return {
|
|
153
|
+
...config,
|
|
154
|
+
api: { ...config.api, rejectUnauthorized: false },
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Load configuration, optionally disabling SSL based on command options.
|
|
159
|
+
* Replaces the repeated pattern:
|
|
160
|
+
* `options.verifySsl === false ? withSSLDisabled(getConfig()) : getConfig()`
|
|
161
|
+
*/
|
|
162
|
+
function getConfigWithOptions(options) {
|
|
163
|
+
const config = getConfig();
|
|
164
|
+
return options.verifySsl === false ? withSSLDisabled(config) : config;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25maWctbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdFdEMsOEJBMERDO0FBS0QsMENBS0M7QUFPRCxvREFHQztBQTVJRCx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QiwyQ0FBNkI7QUFFN0IsaURBQXNFO0FBSXRFOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQXlCO0lBQzFDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsT0FBTyxFQUFFLE1BQU07UUFDZixXQUFXLEVBQUUsZUFBZTtRQUM1QixlQUFlLEVBQUUsZ0JBQWdCO1FBQ2pDLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLGFBQWEsRUFBRSxjQUFjO1FBQzdCLGVBQWUsRUFBRSxvQkFBb0I7UUFDckMsa0JBQWtCLEVBQUUsSUFBSTtLQUN6QjtDQUNGLENBQUM7QUFFRiw0REFBNEQ7QUFDNUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUVwRjs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxRQUFnQixFQUFFLE1BQTRCO0lBQ3BFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRTVDLElBQUksQ0FBQztRQUNILElBQUEseUJBQVUsRUFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVB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dHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICd5YW1sJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50RXJyb3IsIHByaW50V2FybmluZyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzJztcblxuZXhwb3J0IHR5cGUgeyBDb25maWcgfTtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24g4oCUIEFQSSBlbmRwb2ludCBwYXRocyBhbmQgY29ubmVjdGlvbiBzZXR0aW5ncy5cbiAqL1xuY29uc3QgZGVmYXVsdENvbmZpZzogT21pdDxDb25maWcsICdhdXRoJz4gPSB7XG4gIGFwaToge1xuICAgIGJhc2VVcmw6ICdodHRwczovL2xvY2FsaG9zdDo4NDQzJyxcbiAgICB0aW1lb3V0OiAzMF8wMDAsXG4gICAgcGlwZWxpbmVVcmw6ICcvYXBpL3BpcGVsaW5lJyxcbiAgICBwaXBlbGluZUxpc3RVcmw6ICcvYXBpL3BpcGVsaW5lcycsXG4gICAgcGx1Z2luVXJsOiAnL2FwaS9wbHVnaW4nLFxuICAgIHBsdWdpbkxpc3RVcmw6ICcvYXBpL3BsdWdpbnMnLFxuICAgIHBsdWdpblVwbG9hZFVybDogJy9hcGkvcGx1Z2luL3VwbG9hZCcsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiB0cnVlLFxuICB9LFxufTtcblxuLyoqIFVzZXIgY29uZmlnIGZpbGUgcGF0aDogfi8ucGlwZWxpbmUtbWFuYWdlci9jb25maWcueW1sICovXG5jb25zdCBVU0VSX0NPTkZJR19QQVRIID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5waXBlbGluZS1tYW5hZ2VyJywgJ2NvbmZpZy55bWwnKTtcblxuLyoqXG4gKiBMb2FkIGEgWUFNTCBjb25maWcgZmlsZSBhbmQgbWVyZ2UgaXRzIGBhcGlgIHNlY3Rpb24gaW50byB0aGUgY29uZmlnLlxuICogUmV0dXJucyB0aGUgbWVyZ2VkIGNvbmZpZyBvciB0aGUgb3JpZ2luYWwgaWYgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGZhaWxzLlxuICovXG5mdW5jdGlvbiBsb2FkQ29uZmlnRmlsZShmaWxlUGF0aDogc3RyaW5nLCBjb25maWc6IE9taXQ8Q29uZmlnLCAnYXV0aCc+KTogT21pdDxDb25maWcsICdhdXRoJz4ge1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSByZXR1cm4gY29uZmlnO1xuXG4gIHRyeSB7XG4gICAgcHJpbnREZWJ1ZygnTG9hZGluZyBjb25maWd1cmF0aW9uJywgeyBwYXRoOiBmaWxlUGF0aCB9KTtcbiAgICBjb25zdCBwYXJzZWQgPSB5YW1sLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04JykpO1xuICAgIGlmIChwYXJzZWQ/LmF1dGgpIHtcbiAgICAgIHByaW50V2FybmluZygnQXV0aCBzZWN0aW9uIGluIGNvbmZpZyBmaWxlIGlzIGlnbm9yZWQg4oCUIHVzZSBQTEFURk9STV9UT0tFTiBlbnYgdmFyJyk7XG4gICAgfVxuICAgIHJldHVybiB7IGFwaTogeyAuLi5jb25maWcuYXBpLCAuLi5wYXJzZWQ/LmFwaSB9IH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdGYWlsZWQgdG8gbG9hZCBjb25maWcgZmlsZSwgdXNpbmcgZGVmYXVsdHMnLCB7XG4gICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVzIGFuZCBlbnZpcm9ubWVudC5cbiAqXG4gKiBQcmlvcml0eSAobGFzdCB3aW5zKTpcbiAqIDEuIEJ1aWx0LWluIGRlZmF1bHRzXG4gKiAyLiBVc2VyIGNvbmZpZyBmaWxlOiB+Ly5waXBlbGluZS1tYW5hZ2VyL2NvbmZpZy55bWxcbiAqIDMuIFByb2plY3QgY29uZmlnIGZpbGU6IENMSV9DT05GSUdfUEFUSCBvciAuL2NvbmZpZy55bWxcbiAqIDQuIEVudmlyb25tZW50IHZhcmlhYmxlc1xuICpcbiAqIEF1dGggdG9rZW4gTVVTVCBjb21lIGZyb20gUExBVEZPUk1fVE9LRU4gZW52IHZhciAobmV2ZXIgZnJvbSBjb25maWcgZmlsZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogQ29uZmlnIHtcbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwcm9jZXNzLmVudi5DTElfQ09ORklHX1BBVEggfHwgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2NvbmZpZy55bWwnKTtcblxuICAvLyBMYXllciAxOiBkZWZhdWx0cyDihpIgTGF5ZXIgMjogdXNlciBjb25maWcg4oaSIExheWVyIDM6IHByb2plY3QgY29uZmlnXG4gIGxldCBjb25maWcgPSBsb2FkQ29uZmlnRmlsZShVU0VSX0NPTkZJR19QQVRILCB7IC4uLmRlZmF1bHRDb25maWcgfSk7XG4gIGNvbmZpZyA9IGxvYWRDb25maWdGaWxlKHByb2plY3RDb25maWdQYXRoLCBjb25maWcpO1xuXG4gIC8vIExheWVyIDQ6IGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlc1xuICAvLyBMYXllciA0OiBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXNcbiAgaWYgKHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMKSB7XG4gICAgY29uZmlnLmFwaS5iYXNlVXJsID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkw7XG4gICAgcHJpbnREZWJ1ZygnVXNpbmcgUExBVEZPUk1fQkFTRV9VUkwgZnJvbSBlbnZpcm9ubWVudCcsIHsgYmFzZVVybDogY29uZmlnLmFwaS5iYXNlVXJsIH0pO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52LlRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkaXNhYmxlID0gcHJvY2Vzcy5lbnYuVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPT09ICcwJztcbiAgICBpZiAoZGlzYWJsZSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcmludFdhcm5pbmcoJ0lnbm9yaW5nIFRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgaW4gcHJvZHVjdGlvbiDigJQgU1NMIHZlcmlmaWNhdGlvbiByZW1haW5zIGVuYWJsZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmFwaS5yZWplY3RVbmF1dGhvcml6ZWQgPSAhZGlzYWJsZTtcbiAgICAgIGlmIChkaXNhYmxlKSB7XG4gICAgICAgIHByaW50V2FybmluZygnU1NMIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gZGlzYWJsZWQgdmlhIFRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuVVBMT0FEX1RJTUVPVVQpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5VUExPQURfVElNRU9VVCwgMTApO1xuICAgIGlmICghaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPiAwKSB7XG4gICAgICBjb25maWcuYXBpLnVwbG9hZFRpbWVvdXQgPSBwYXJzZWQ7XG4gICAgICBwcmludERlYnVnKCdVc2luZyBVUExPQURfVElNRU9VVCBmcm9tIGVudmlyb25tZW50JywgeyB1cGxvYWRUaW1lb3V0OiBgJHtwYXJzZWR9bXNgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgVVBMT0FEX1RJTUVPVVQgdmFsdWUsIHVzaW5nIGRlZmF1bHQnLCB7IHByb3ZpZGVkOiBwcm9jZXNzLmVudi5VUExPQURfVElNRU9VVCB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBUb2tlbiBpcyBSRVFVSVJFRCBmcm9tIGVudmlyb25tZW50XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU47XG5cbiAgaWYgKCF0b2tlbikge1xuICAgIHByaW50RXJyb3IoJ1BMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAodG9rZW4udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUExBVEZPUk1fVE9LRU4gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmICh0b2tlbi5pbmNsdWRlcygnICcpKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdQTEFURk9STV9UT0tFTiBjb250YWlucyB3aGl0ZXNwYWNlIOKAlCB0aGlzIG1heSBjYXVzZSBpc3N1ZXMnKTtcbiAgfVxuXG4gIHByaW50RGVidWcoJ0NvbmZpZ3VyYXRpb24gbG9hZGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIGF1dGg6IHsgdG9rZW4gfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBjb3B5IG9mIGBjb25maWdgIHdpdGggU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTU0xEaXNhYmxlZChjb25maWc6IENvbmZpZyk6IENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIGFwaTogeyAuLi5jb25maWcuYXBpLCByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlIH0sXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBjb25maWd1cmF0aW9uLCBvcHRpb25hbGx5IGRpc2FibGluZyBTU0wgYmFzZWQgb24gY29tbWFuZCBvcHRpb25zLlxuICogUmVwbGFjZXMgdGhlIHJlcGVhdGVkIHBhdHRlcm46XG4gKiAgIGBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyB3aXRoU1NMRGlzYWJsZWQoZ2V0Q29uZmlnKCkpIDogZ2V0Q29uZmlnKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zOiB7IHZlcmlmeVNzbD86IGJvb2xlYW4gfSk6IENvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICByZXR1cm4gb3B0aW9ucy52ZXJpZnlTc2wgPT09IGZhbHNlID8gd2l0aFNTTERpc2FibGVkKGNvbmZpZykgOiBjb25maWc7XG59XG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ERROR_CODES, ErrorCode, ErrorHandlerOptions } from '../types';
|
|
2
|
+
export { ERROR_CODES };
|
|
3
|
+
export type { ErrorCode };
|
|
4
|
+
/**
|
|
5
|
+
* Format and handle errors with colored output
|
|
6
|
+
*/
|
|
7
|
+
export declare function handleError(err: unknown, code?: ErrorCode, options?: ErrorHandlerOptions): never;
|
|
8
|
+
/**
|
|
9
|
+
* Validation error class
|
|
10
|
+
*/
|
|
11
|
+
export declare class ValidationError extends Error {
|
|
12
|
+
field?: string | undefined;
|
|
13
|
+
value?: unknown | undefined;
|
|
14
|
+
rule?: string | undefined;
|
|
15
|
+
expected?: string | undefined;
|
|
16
|
+
constructor(message: string, field?: string | undefined, value?: unknown | undefined, rule?: string | undefined, expected?: string | undefined);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Network error class
|
|
20
|
+
*/
|
|
21
|
+
export declare class NetworkError extends Error {
|
|
22
|
+
url?: string | undefined;
|
|
23
|
+
cause?: Error | undefined;
|
|
24
|
+
timeout?: number | undefined;
|
|
25
|
+
requestMade: boolean;
|
|
26
|
+
responseReceived: boolean;
|
|
27
|
+
constructor(message: string, url?: string | undefined, cause?: Error | undefined, timeout?: number | undefined, requestMade?: boolean, responseReceived?: boolean);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EACX,SAAS,EACT,mBAAmB,EAEpB,MAAM,UAAU,CAAC;AAKlB,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,SAA+B,EACrC,OAAO,GAAE,mBAAwB,GAChC,KAAK,CA0GP;AAID;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,CAAC,EAAE,MAAM;IACd,KAAK,CAAC,EAAE,OAAO;IACf,IAAI,CAAC,EAAE,MAAM;IACb,QAAQ,CAAC,EAAE,MAAM;gBAJxB,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,KAAK,CAAC,EAAE,OAAO,YAAA,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA;CAM3B;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG5B,GAAG,CAAC,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,KAAK;IACb,OAAO,CAAC,EAAE,MAAM;IAChB,WAAW,EAAE,OAAO;IACpB,gBAAgB,EAAE,OAAO;gBALhC,OAAO,EAAE,MAAM,EACR,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,KAAK,CAAC,EAAE,KAAK,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,WAAW,GAAE,OAAc,EAC3B,gBAAgB,GAAE,OAAe;CAM3C"}
|