@zincapp/znvault-plugin-payara 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/tls.d.ts +7 -0
- package/dist/cli/commands/tls.d.ts.map +1 -0
- package/dist/cli/commands/tls.js +183 -0
- package/dist/cli/commands/tls.js.map +1 -0
- package/dist/cli/formatters.d.ts +4 -0
- package/dist/cli/formatters.d.ts.map +1 -1
- package/dist/cli/formatters.js +7 -0
- package/dist/cli/formatters.js.map +1 -1
- package/dist/cli/http-client.d.ts +23 -1
- package/dist/cli/http-client.d.ts.map +1 -1
- package/dist/cli/http-client.js +91 -11
- package/dist/cli/http-client.js.map +1 -1
- package/dist/cli/listr-deploy.d.ts.map +1 -1
- package/dist/cli/listr-deploy.js +7 -3
- package/dist/cli/listr-deploy.js.map +1 -1
- package/dist/cli/progress.d.ts.map +1 -1
- package/dist/cli/progress.js +4 -3
- package/dist/cli/progress.js.map +1 -1
- package/dist/cli/types.d.ts +15 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +64 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +65 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/payara-env.d.ts +14 -0
- package/dist/payara-env.d.ts.map +1 -1
- package/dist/payara-env.js +66 -8
- package/dist/payara-env.js.map +1 -1
- package/dist/payara-manager.d.ts +1 -0
- package/dist/payara-manager.d.ts.map +1 -1
- package/dist/payara-manager.js +14 -6
- package/dist/payara-manager.js.map +1 -1
- package/dist/routes/deploy.d.ts.map +1 -1
- package/dist/routes/deploy.js +13 -0
- package/dist/routes/deploy.js.map +1 -1
- package/dist/secrets-handler.d.ts.map +1 -1
- package/dist/secrets-handler.js +7 -2
- package/dist/secrets-handler.js.map +1 -1
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +8 -3
- package/dist/session-store.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/war-deployer.d.ts +10 -0
- package/dist/war-deployer.d.ts.map +1 -1
- package/dist/war-deployer.js +46 -19
- package/dist/war-deployer.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@ export { registerConfigCommands } from './deploy-config.js';
|
|
|
2
2
|
export { registerLifecycleCommands } from './lifecycle.js';
|
|
3
3
|
export { registerDeployRunCommand } from './deploy-run.js';
|
|
4
4
|
export { registerDeployWarCommand } from './deploy-war.js';
|
|
5
|
+
export { registerTLSCommands } from './tls.js';
|
|
5
6
|
export { deployToHost, uploadFullWar, deployChunked, analyzeHost } from './deploy.js';
|
|
6
7
|
export type { DeployOperationResult } from './deploy.js';
|
|
7
8
|
export { exitWithError, getConfigOrExit, withErrorHandling, loadInquirer, confirmPrompt, saveConfigsOrExit, } from './helpers.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
|
|
@@ -4,5 +4,6 @@ export { registerConfigCommands } from './deploy-config.js';
|
|
|
4
4
|
export { registerLifecycleCommands } from './lifecycle.js';
|
|
5
5
|
export { registerDeployRunCommand } from './deploy-run.js';
|
|
6
6
|
export { registerDeployWarCommand } from './deploy-war.js';
|
|
7
|
+
export { registerTLSCommands } from './tls.js';
|
|
7
8
|
export { deployToHost, uploadFullWar, deployChunked, analyzeHost } from './deploy.js';
|
|
8
9
|
export { exitWithError, getConfigOrExit, withErrorHandling, loadInquirer, confirmPrompt, saveConfigsOrExit, } from './helpers.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,kCAAkC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,kCAAkC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tls.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tls.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmDpD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,gBAAgB,GACpB,IAAI,CAoKN"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
// Path: src/cli/commands/tls.ts
|
|
2
|
+
// TLS setup and verification commands
|
|
3
|
+
import { loadDeployConfigs } from '../config-store.js';
|
|
4
|
+
import { ANSI, parsePort } from '../constants.js';
|
|
5
|
+
import { agentGet, configureTLS } from '../http-client.js';
|
|
6
|
+
import { getErrorMessage } from '../../utils/error.js';
|
|
7
|
+
import { withErrorHandling } from './helpers.js';
|
|
8
|
+
import { writeFileSync, mkdirSync, existsSync, readFileSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { homedir } from 'node:os';
|
|
11
|
+
/** Default directory for storing CA certificates */
|
|
12
|
+
const DEFAULT_CA_DIR = join(homedir(), '.znvault', 'ca');
|
|
13
|
+
/** Default CA certificate filename */
|
|
14
|
+
const DEFAULT_CA_FILENAME = 'agent-tls-ca.pem';
|
|
15
|
+
/**
|
|
16
|
+
* Get the default CA certificate path
|
|
17
|
+
*/
|
|
18
|
+
function getDefaultCACertPath() {
|
|
19
|
+
return join(DEFAULT_CA_DIR, DEFAULT_CA_FILENAME);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch and save CA certificate from vault
|
|
23
|
+
*/
|
|
24
|
+
async function fetchAndSaveCA(ctx) {
|
|
25
|
+
ctx.output.info('Fetching agent TLS CA certificate from vault...');
|
|
26
|
+
// Use the vault client to get the CA certificate
|
|
27
|
+
const response = await ctx.client.get('/v1/agents/tls/ca');
|
|
28
|
+
// Ensure directory exists
|
|
29
|
+
if (!existsSync(DEFAULT_CA_DIR)) {
|
|
30
|
+
mkdirSync(DEFAULT_CA_DIR, { recursive: true, mode: 0o700 });
|
|
31
|
+
}
|
|
32
|
+
// Save CA certificate
|
|
33
|
+
const caPath = getDefaultCACertPath();
|
|
34
|
+
writeFileSync(caPath, response.certificate, { mode: 0o644 });
|
|
35
|
+
return caPath;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Register TLS commands
|
|
39
|
+
*/
|
|
40
|
+
export function registerTLSCommands(deploy, ctx) {
|
|
41
|
+
const tlsCmd = deploy
|
|
42
|
+
.command('tls')
|
|
43
|
+
.description('TLS certificate management for secure agent connections');
|
|
44
|
+
// deploy tls setup
|
|
45
|
+
tlsCmd
|
|
46
|
+
.command('setup')
|
|
47
|
+
.description('Setup TLS for secure agent connections (fetches CA from vault)')
|
|
48
|
+
.option('--ca-path <path>', 'Custom path to save CA certificate')
|
|
49
|
+
.action(async (options) => {
|
|
50
|
+
await withErrorHandling(ctx, async () => {
|
|
51
|
+
// Fetch CA from vault
|
|
52
|
+
const caPath = await fetchAndSaveCA(ctx);
|
|
53
|
+
// Show certificate info
|
|
54
|
+
const cert = readFileSync(caPath, 'utf-8');
|
|
55
|
+
const subjectMatch = cert.match(/Subject:.*?CN\s*=\s*([^,\n]+)/);
|
|
56
|
+
const cn = subjectMatch?.[1]?.trim() ?? 'Unknown';
|
|
57
|
+
console.log(`\n${ANSI.bold}CA Certificate Saved:${ANSI.reset}`);
|
|
58
|
+
console.log(` Path: ${caPath}`);
|
|
59
|
+
console.log(` Subject CN: ${cn}`);
|
|
60
|
+
console.log('');
|
|
61
|
+
ctx.output.success('TLS setup complete. CA certificate cached locally.');
|
|
62
|
+
ctx.output.info('To enable TLS for a deploy config, run:');
|
|
63
|
+
console.log(` ${ANSI.cyan}znvault deploy config set <name> tls true${ANSI.reset}`);
|
|
64
|
+
}, 'TLS setup failed');
|
|
65
|
+
});
|
|
66
|
+
// deploy tls status
|
|
67
|
+
tlsCmd
|
|
68
|
+
.command('status')
|
|
69
|
+
.description('Show TLS configuration status')
|
|
70
|
+
.action(async () => {
|
|
71
|
+
await withErrorHandling(ctx, async () => {
|
|
72
|
+
const caPath = getDefaultCACertPath();
|
|
73
|
+
const store = await loadDeployConfigs();
|
|
74
|
+
console.log(`\n${ANSI.bold}TLS Status:${ANSI.reset}\n`);
|
|
75
|
+
// Check if CA is cached
|
|
76
|
+
if (existsSync(caPath)) {
|
|
77
|
+
console.log(` CA Certificate: ${ANSI.green}cached${ANSI.reset}`);
|
|
78
|
+
console.log(` CA Path: ${caPath}`);
|
|
79
|
+
// Show expiry info
|
|
80
|
+
try {
|
|
81
|
+
const response = await ctx.client.get('/v1/agents/tls/ca');
|
|
82
|
+
const expiry = new Date(response.notAfter);
|
|
83
|
+
const daysUntilExpiry = Math.round((expiry.getTime() - Date.now()) / (24 * 60 * 60 * 1000));
|
|
84
|
+
console.log(` CA Subject: ${response.subjectCn}`);
|
|
85
|
+
console.log(` CA Expires: ${expiry.toISOString()} (${daysUntilExpiry} days)`);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Couldn't fetch from vault
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.log(` CA Certificate: ${ANSI.red}not cached${ANSI.reset}`);
|
|
93
|
+
console.log(` Run '${ANSI.cyan}znvault deploy tls setup${ANSI.reset}' to fetch CA`);
|
|
94
|
+
}
|
|
95
|
+
console.log('');
|
|
96
|
+
// Show configs with TLS enabled
|
|
97
|
+
const tlsConfigs = Object.entries(store.configs).filter(([_, config]) => config.tls?.verify !== false);
|
|
98
|
+
const noTlsConfigs = Object.entries(store.configs).filter(([_, config]) => config.tls?.verify === false);
|
|
99
|
+
if (tlsConfigs.length > 0) {
|
|
100
|
+
console.log(` ${ANSI.bold}Configs with TLS verification:${ANSI.reset}`);
|
|
101
|
+
for (const [name, config] of tlsConfigs) {
|
|
102
|
+
const port = config.tls?.httpsPort ?? 9443;
|
|
103
|
+
console.log(` ${ANSI.green}✓${ANSI.reset} ${name} (HTTPS port: ${port})`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (noTlsConfigs.length > 0) {
|
|
107
|
+
console.log(` ${ANSI.bold}Configs without TLS:${ANSI.reset}`);
|
|
108
|
+
for (const [name] of noTlsConfigs) {
|
|
109
|
+
console.log(` ${ANSI.yellow}○${ANSI.reset} ${name} (HTTP)`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (Object.keys(store.configs).length === 0) {
|
|
113
|
+
console.log(' No deploy configs found.');
|
|
114
|
+
}
|
|
115
|
+
console.log('');
|
|
116
|
+
}, 'Failed to get TLS status');
|
|
117
|
+
});
|
|
118
|
+
// deploy tls verify <hostname>
|
|
119
|
+
tlsCmd
|
|
120
|
+
.command('verify <hostname>')
|
|
121
|
+
.description('Verify TLS connectivity to an agent')
|
|
122
|
+
.option('-p, --port <port>', 'HTTPS port (default: 9443)', '9443')
|
|
123
|
+
.option('--ca-path <path>', 'Path to CA certificate')
|
|
124
|
+
.option('-k, --insecure', 'Skip TLS verification')
|
|
125
|
+
.action(async (hostname, options) => {
|
|
126
|
+
await withErrorHandling(ctx, async () => {
|
|
127
|
+
const port = parsePort(options.port);
|
|
128
|
+
const caPath = options.caPath ?? getDefaultCACertPath();
|
|
129
|
+
// Configure TLS options
|
|
130
|
+
if (options.insecure) {
|
|
131
|
+
configureTLS({ verify: false });
|
|
132
|
+
console.log(`${ANSI.yellow}Warning: TLS verification disabled${ANSI.reset}\n`);
|
|
133
|
+
}
|
|
134
|
+
else if (existsSync(caPath)) {
|
|
135
|
+
configureTLS({ verify: true, caCertPath: caPath });
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
ctx.output.error(`CA certificate not found at ${caPath}`);
|
|
139
|
+
ctx.output.info(`Run '${ANSI.cyan}znvault deploy tls setup${ANSI.reset}' to fetch CA from vault`);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
ctx.output.info(`Verifying TLS connection to ${hostname}:${port}...`);
|
|
143
|
+
const url = `https://${hostname}:${port}/health`;
|
|
144
|
+
try {
|
|
145
|
+
const health = await agentGet(url, 10000);
|
|
146
|
+
console.log('');
|
|
147
|
+
console.log(` ${ANSI.green}✓${ANSI.reset} TLS connection successful`);
|
|
148
|
+
console.log(` Agent Status: ${health.status}`);
|
|
149
|
+
console.log(` Agent Version: ${health.version}`);
|
|
150
|
+
console.log('');
|
|
151
|
+
ctx.output.success('TLS verification passed');
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
const message = getErrorMessage(err);
|
|
155
|
+
if (message.includes('certificate') || message.includes('SSL') || message.includes('TLS')) {
|
|
156
|
+
ctx.output.error('TLS verification failed - certificate issue');
|
|
157
|
+
ctx.output.info('The CA certificate may be incorrect or expired.');
|
|
158
|
+
ctx.output.info(`Run '${ANSI.cyan}znvault deploy tls setup${ANSI.reset}' to refresh CA`);
|
|
159
|
+
}
|
|
160
|
+
else if (message.includes('ECONNREFUSED')) {
|
|
161
|
+
ctx.output.error(`Connection refused. Is the agent running HTTPS on port ${port}?`);
|
|
162
|
+
}
|
|
163
|
+
else if (message.includes('timeout')) {
|
|
164
|
+
ctx.output.error('Connection timed out');
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
ctx.output.error(`TLS verification failed: ${message}`);
|
|
168
|
+
}
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
}, 'TLS verification failed');
|
|
172
|
+
});
|
|
173
|
+
// deploy tls refresh
|
|
174
|
+
tlsCmd
|
|
175
|
+
.command('refresh')
|
|
176
|
+
.description('Refresh cached CA certificate from vault')
|
|
177
|
+
.action(async () => {
|
|
178
|
+
await withErrorHandling(ctx, async () => {
|
|
179
|
+
const caPath = await fetchAndSaveCA(ctx);
|
|
180
|
+
ctx.output.success(`CA certificate refreshed: ${caPath}`);
|
|
181
|
+
}, 'Failed to refresh CA certificate');
|
|
182
|
+
});
|
|
183
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tls.js","sourceRoot":"","sources":["../../../src/cli/commands/tls.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,sCAAsC;AAItC,OAAO,EAAE,iBAAiB,EAAqB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAkB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAW,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,oDAAoD;AACpD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAEzD,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAE/C;;GAEG;AACH,SAAS,oBAAoB;IAC3B,OAAO,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,GAAqB;IACjD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAEnE,iDAAiD;IACjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAOlC,mBAAmB,CAAC,CAAC;IAExB,0BAA0B;IAC1B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,GAAqB;IAErB,MAAM,MAAM,GAAG,MAAM;SAClB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,mBAAmB;IACnB,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YACtC,sBAAsB;YACtB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;YAEzC,wBAAwB;YACxB,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACjE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;YACzE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,4CAA4C,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtF,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAC;YAExC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YAExD,wBAAwB;YACxB,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;gBAEpC,mBAAmB;gBACnB,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAGlC,mBAAmB,CAAC,CAAC;oBAExB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;oBAE5F,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,KAAK,eAAe,QAAQ,CAAC,CAAC;gBACjF,CAAC;gBAAC,MAAM,CAAC;oBACP,4BAA4B;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,GAAG,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,2BAA2B,IAAI,CAAC,KAAK,eAAe,CAAC,CAAC;YACvF,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,gCAAgC;YAChC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;YACvG,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;YAEzG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,iCAAiC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzE,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;oBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,iBAAiB,IAAI,GAAG,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/D,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC,EAAE,0BAA0B,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,+BAA+B;IAC/B,MAAM;SACH,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,CAAC;SACjE,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;SACpD,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,OAA8D,EAAE,EAAE;QACjG,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;YAExD,wBAAwB;YACxB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,qCAAqC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;gBAC1D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,2BAA2B,IAAI,CAAC,KAAK,0BAA0B,CAAC,CAAC;gBAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,IAAI,IAAI,KAAK,CAAC,CAAC;YAEtE,MAAM,GAAG,GAAG,WAAW,QAAQ,IAAI,IAAI,SAAS,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAsC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,4BAA4B,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAEhB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;gBAErC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1F,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBAChE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;oBACnE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,2BAA2B,IAAI,CAAC,KAAK,iBAAiB,CAAC,CAAC;gBAC3F,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC5C,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,0DAA0D,IAAI,GAAG,CAAC,CAAC;gBACtF,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,qBAAqB;IACrB,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;YACzC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,kCAAkC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/cli/formatters.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ export declare function formatDuration(ms: number): string;
|
|
|
10
10
|
* Format date to relative time or absolute
|
|
11
11
|
*/
|
|
12
12
|
export declare function formatDate(date: Date): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format timestamp to time only (HH:MM:SS)
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatTime(timestamp: number): string;
|
|
13
17
|
/**
|
|
14
18
|
* Create a progress bar string
|
|
15
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAS7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAM9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAGjE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpF"}
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAS7C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAM9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAGjE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpF"}
|
package/dist/cli/formatters.js
CHANGED
|
@@ -35,6 +35,13 @@ export function formatDate(date) {
|
|
|
35
35
|
return `${Math.floor(diff / 3600000)}h ago`;
|
|
36
36
|
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Format timestamp to time only (HH:MM:SS)
|
|
40
|
+
*/
|
|
41
|
+
export function formatTime(timestamp) {
|
|
42
|
+
const date = new Date(timestamp);
|
|
43
|
+
return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });
|
|
44
|
+
}
|
|
38
45
|
/**
|
|
39
46
|
* Create a progress bar string
|
|
40
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/cli/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import type { DeployResult } from '../types.js';
|
|
2
2
|
import type { AgentPostResult } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* TLS configuration for HTTPS connections
|
|
5
|
+
*/
|
|
6
|
+
export interface TLSOptions {
|
|
7
|
+
/** Enable TLS verification (default: true) */
|
|
8
|
+
verify?: boolean;
|
|
9
|
+
/** Path to CA certificate file (PEM format) */
|
|
10
|
+
caCertPath?: string;
|
|
11
|
+
/** Inline CA certificate (PEM format) */
|
|
12
|
+
caCert?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Configure TLS options for all HTTPS requests
|
|
16
|
+
*/
|
|
17
|
+
export declare function configureTLS(options: TLSOptions): void;
|
|
3
18
|
/**
|
|
4
19
|
* GET request to agent endpoint
|
|
5
20
|
*/
|
|
@@ -33,6 +48,13 @@ export declare function pollDeploymentStatus(pluginUrl: string, startedAfter: nu
|
|
|
33
48
|
* 1. Host already includes protocol and port (e.g., http://host:9100)
|
|
34
49
|
* 2. Host includes protocol but no port (e.g., http://host)
|
|
35
50
|
* 3. Host is just hostname/IP (e.g., 172.16.220.55)
|
|
51
|
+
*
|
|
52
|
+
* @param useTLS - If true, use HTTPS protocol (default: false for backwards compat)
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildPluginUrl(host: string, defaultPort: number, useTLS?: boolean): string;
|
|
55
|
+
/**
|
|
56
|
+
* Build plugin URL with automatic TLS detection
|
|
57
|
+
* Uses HTTPS if TLS is configured, otherwise HTTP
|
|
36
58
|
*/
|
|
37
|
-
export declare function
|
|
59
|
+
export declare function buildPluginUrlAuto(host: string, httpPort: number, httpsPort: number): string;
|
|
38
60
|
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/cli/http-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/cli/http-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,YAAY,CAAC;AAW5E;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAEtD;AA8DD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,SAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,CAYrF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,OAAO,SAAwB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAgC7B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAgBzE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,SAA0B,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwCtE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,MAAM,CAkBxF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAM5F"}
|
package/dist/cli/http-client.js
CHANGED
|
@@ -1,16 +1,81 @@
|
|
|
1
1
|
// Path: src/cli/http-client.ts
|
|
2
|
-
// HTTP client for agent communication
|
|
2
|
+
// HTTP/HTTPS client for agent communication
|
|
3
3
|
import { AGENT_TIMEOUT_MS, DEPLOYMENT_TIMEOUT_MS, STATUS_POLL_INTERVAL_MS, STATUS_POLL_MAX_WAIT_MS, } from './constants.js';
|
|
4
4
|
import { getErrorMessage } from '../utils/error.js';
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
// Global TLS options for all requests
|
|
7
|
+
let globalTLSOptions = { verify: true };
|
|
8
|
+
/**
|
|
9
|
+
* Configure TLS options for all HTTPS requests
|
|
10
|
+
*/
|
|
11
|
+
export function configureTLS(options) {
|
|
12
|
+
globalTLSOptions = { ...globalTLSOptions, ...options };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get fetch options with TLS configuration for HTTPS URLs
|
|
16
|
+
*/
|
|
17
|
+
function getFetchOptions(url, baseOptions) {
|
|
18
|
+
// Only apply TLS options for HTTPS URLs
|
|
19
|
+
if (!url.startsWith('https://')) {
|
|
20
|
+
return baseOptions;
|
|
21
|
+
}
|
|
22
|
+
const options = { ...baseOptions };
|
|
23
|
+
// Note: Node.js native fetch doesn't support custom TLS options directly.
|
|
24
|
+
// We use undici's dispatcher option which is compatible with Node 18+
|
|
25
|
+
// For older Node versions or when using node-fetch, different approach is needed.
|
|
26
|
+
// For Bun runtime, TLS options are handled differently
|
|
27
|
+
if (typeof process !== 'undefined' && process.versions?.bun) {
|
|
28
|
+
// Bun uses native TLS options
|
|
29
|
+
if (!globalTLSOptions.verify) {
|
|
30
|
+
options.tls = { rejectUnauthorized: false };
|
|
31
|
+
}
|
|
32
|
+
else if (globalTLSOptions.caCertPath || globalTLSOptions.caCert) {
|
|
33
|
+
const ca = globalTLSOptions.caCert ??
|
|
34
|
+
(globalTLSOptions.caCertPath ? readFileSync(globalTLSOptions.caCertPath, 'utf-8') : undefined);
|
|
35
|
+
if (ca) {
|
|
36
|
+
options.tls = { ca };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return options;
|
|
40
|
+
}
|
|
41
|
+
// For Node.js, we need to use the undici dispatcher
|
|
42
|
+
try {
|
|
43
|
+
// Dynamic import to avoid issues if undici is not available
|
|
44
|
+
const { Agent } = require('undici');
|
|
45
|
+
const agentOptions = {};
|
|
46
|
+
if (!globalTLSOptions.verify) {
|
|
47
|
+
agentOptions.connect = { rejectUnauthorized: false };
|
|
48
|
+
}
|
|
49
|
+
else if (globalTLSOptions.caCertPath || globalTLSOptions.caCert) {
|
|
50
|
+
const ca = globalTLSOptions.caCert ??
|
|
51
|
+
(globalTLSOptions.caCertPath ? readFileSync(globalTLSOptions.caCertPath, 'utf-8') : undefined);
|
|
52
|
+
if (ca) {
|
|
53
|
+
agentOptions.connect = { ca };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (Object.keys(agentOptions).length > 0) {
|
|
57
|
+
options.dispatcher = new Agent(agentOptions);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// undici not available, fall back to process.env workaround
|
|
62
|
+
if (!globalTLSOptions.verify) {
|
|
63
|
+
// WARNING: This disables TLS verification globally
|
|
64
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return options;
|
|
68
|
+
}
|
|
5
69
|
/**
|
|
6
70
|
* GET request to agent endpoint
|
|
7
71
|
*/
|
|
8
72
|
export async function agentGet(url, timeout = AGENT_TIMEOUT_MS) {
|
|
9
|
-
const
|
|
73
|
+
const options = getFetchOptions(url, {
|
|
10
74
|
method: 'GET',
|
|
11
75
|
headers: { 'Accept': 'application/json' },
|
|
12
76
|
signal: AbortSignal.timeout(timeout),
|
|
13
77
|
});
|
|
78
|
+
const response = await fetch(url, options);
|
|
14
79
|
if (!response.ok) {
|
|
15
80
|
const text = await response.text();
|
|
16
81
|
throw new Error(`Agent request failed: ${response.status} ${text}`);
|
|
@@ -23,7 +88,7 @@ export async function agentGet(url, timeout = AGENT_TIMEOUT_MS) {
|
|
|
23
88
|
*/
|
|
24
89
|
export async function agentPostWithStatus(url, body, timeout = DEPLOYMENT_TIMEOUT_MS) {
|
|
25
90
|
try {
|
|
26
|
-
const
|
|
91
|
+
const options = getFetchOptions(url, {
|
|
27
92
|
method: 'POST',
|
|
28
93
|
headers: {
|
|
29
94
|
'Content-Type': 'application/json',
|
|
@@ -32,6 +97,7 @@ export async function agentPostWithStatus(url, body, timeout = DEPLOYMENT_TIMEOU
|
|
|
32
97
|
body: JSON.stringify(body),
|
|
33
98
|
signal: AbortSignal.timeout(timeout),
|
|
34
99
|
});
|
|
100
|
+
const response = await fetch(url, options);
|
|
35
101
|
if (response.ok) {
|
|
36
102
|
const data = await response.json();
|
|
37
103
|
return { ok: true, data };
|
|
@@ -55,7 +121,7 @@ export async function agentPostWithStatus(url, body, timeout = DEPLOYMENT_TIMEOU
|
|
|
55
121
|
* Legacy agentPost for backwards compatibility (throws on non-2xx)
|
|
56
122
|
*/
|
|
57
123
|
export async function agentPost(url, body) {
|
|
58
|
-
const
|
|
124
|
+
const options = getFetchOptions(url, {
|
|
59
125
|
method: 'POST',
|
|
60
126
|
headers: {
|
|
61
127
|
'Content-Type': 'application/json',
|
|
@@ -64,6 +130,7 @@ export async function agentPost(url, body) {
|
|
|
64
130
|
body: JSON.stringify(body),
|
|
65
131
|
signal: AbortSignal.timeout(AGENT_TIMEOUT_MS),
|
|
66
132
|
});
|
|
133
|
+
const response = await fetch(url, options);
|
|
67
134
|
if (!response.ok) {
|
|
68
135
|
const text = await response.text();
|
|
69
136
|
throw new Error(`Agent request failed: ${response.status} ${text}`);
|
|
@@ -98,10 +165,9 @@ export async function pollDeploymentStatus(pluginUrl, startedAfter, progress, ma
|
|
|
98
165
|
const elapsed = Math.round((Date.now() - pollStart) / 1000);
|
|
99
166
|
progress.waitingForDeployment(elapsed, status.currentStep);
|
|
100
167
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
168
|
+
// NOTE: We intentionally do NOT return early based on appDeployed && healthy
|
|
169
|
+
// because that could be from a PREVIOUS deployment. We MUST wait for
|
|
170
|
+
// lastCompletedAt > startedAfter to confirm THIS deployment finished.
|
|
105
171
|
await new Promise(r => setTimeout(r, STATUS_POLL_INTERVAL_MS));
|
|
106
172
|
}
|
|
107
173
|
catch {
|
|
@@ -116,13 +182,16 @@ export async function pollDeploymentStatus(pluginUrl, startedAfter, progress, ma
|
|
|
116
182
|
* 1. Host already includes protocol and port (e.g., http://host:9100)
|
|
117
183
|
* 2. Host includes protocol but no port (e.g., http://host)
|
|
118
184
|
* 3. Host is just hostname/IP (e.g., 172.16.220.55)
|
|
185
|
+
*
|
|
186
|
+
* @param useTLS - If true, use HTTPS protocol (default: false for backwards compat)
|
|
119
187
|
*/
|
|
120
|
-
export function buildPluginUrl(host, defaultPort) {
|
|
188
|
+
export function buildPluginUrl(host, defaultPort, useTLS = false) {
|
|
121
189
|
const trimmed = host.replace(/\/$/, '');
|
|
190
|
+
const defaultProtocol = useTLS ? 'https' : 'http';
|
|
122
191
|
// Parse the URL to check for existing port
|
|
123
192
|
try {
|
|
124
193
|
// Add protocol if missing for URL parsing
|
|
125
|
-
const urlString = trimmed.startsWith('http') ? trimmed :
|
|
194
|
+
const urlString = trimmed.startsWith('http') ? trimmed : `${defaultProtocol}://${trimmed}`;
|
|
126
195
|
const url = new URL(urlString);
|
|
127
196
|
// If URL has a port explicitly set, use it; otherwise use defaultPort
|
|
128
197
|
const effectivePort = url.port || String(defaultPort);
|
|
@@ -130,7 +199,18 @@ export function buildPluginUrl(host, defaultPort) {
|
|
|
130
199
|
}
|
|
131
200
|
catch {
|
|
132
201
|
// Fallback for invalid URLs - just append port
|
|
133
|
-
const withProtocol = trimmed.startsWith('http') ? trimmed :
|
|
202
|
+
const withProtocol = trimmed.startsWith('http') ? trimmed : `${defaultProtocol}://${trimmed}`;
|
|
134
203
|
return `${withProtocol}:${defaultPort}/plugins/payara`;
|
|
135
204
|
}
|
|
136
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Build plugin URL with automatic TLS detection
|
|
208
|
+
* Uses HTTPS if TLS is configured, otherwise HTTP
|
|
209
|
+
*/
|
|
210
|
+
export function buildPluginUrlAuto(host, httpPort, httpsPort) {
|
|
211
|
+
const useTLS = globalTLSOptions.caCertPath !== undefined ||
|
|
212
|
+
globalTLSOptions.caCert !== undefined ||
|
|
213
|
+
!globalTLSOptions.verify;
|
|
214
|
+
const port = useTLS ? httpsPort : httpPort;
|
|
215
|
+
return buildPluginUrl(host, port, useTLS);
|
|
216
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/cli/http-client.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/cli/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listr-deploy.d.ts","sourceRoot":"","sources":["../../src/cli/listr-deploy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAM1D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACzC,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,gBAAgB,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,aAAa,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,0CAA0C;IAC1C,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"listr-deploy.d.ts","sourceRoot":"","sources":["../../src/cli/listr-deploy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAM1D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACzC,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,gBAAgB,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,aAAa,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,0CAA0C;IAC1C,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AA4HD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAuHxB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,aAAa,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,IAAI,CAwBN"}
|
package/dist/cli/listr-deploy.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Listr, PRESET_TIMER } from 'listr2';
|
|
|
4
4
|
import { deployToHost } from './commands/deploy.js';
|
|
5
5
|
import { performHealthCheck } from './host-checks.js';
|
|
6
6
|
import { ProgressReporter } from './progress.js';
|
|
7
|
-
import { formatSize, formatDuration } from './formatters.js';
|
|
7
|
+
import { formatSize, formatDuration, formatTime } from './formatters.js';
|
|
8
8
|
/**
|
|
9
9
|
* Create a deployment task for a single host
|
|
10
10
|
*/
|
|
@@ -73,9 +73,11 @@ function createHostTask(host, options) {
|
|
|
73
73
|
}
|
|
74
74
|
});
|
|
75
75
|
const elapsed = formatDuration(Date.now() - startTime);
|
|
76
|
+
const completedAt = result.result?.completedAt;
|
|
77
|
+
const timeStr = completedAt ? ` @ ${formatTime(completedAt)}` : '';
|
|
76
78
|
if (healthResult.success) {
|
|
77
79
|
ctx.successful++;
|
|
78
|
-
task.title = `${host} - deployed + healthy (${elapsed})`;
|
|
80
|
+
task.title = `${host} - deployed + healthy (${elapsed})${timeStr}`;
|
|
79
81
|
}
|
|
80
82
|
else {
|
|
81
83
|
ctx.healthCheckFailed++;
|
|
@@ -88,8 +90,10 @@ function createHostTask(host, options) {
|
|
|
88
90
|
else {
|
|
89
91
|
// No health check configured
|
|
90
92
|
const elapsed = formatDuration(Date.now() - startTime);
|
|
93
|
+
const completedAt = result.result?.completedAt;
|
|
94
|
+
const timeStr = completedAt ? ` @ ${formatTime(completedAt)}` : '';
|
|
91
95
|
ctx.successful++;
|
|
92
|
-
task.title = `${host} - deployed (${elapsed})`;
|
|
96
|
+
task.title = `${host} - deployed (${elapsed})${timeStr}`;
|
|
93
97
|
}
|
|
94
98
|
},
|
|
95
99
|
rendererOptions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listr-deploy.js","sourceRoot":"","sources":["../../src/cli/listr-deploy.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,yEAAyE;AAEzE,OAAO,EAAE,KAAK,EAAa,YAAY,EAAE,MAAM,QAAQ,CAAC;AAIxD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"listr-deploy.js","sourceRoot":"","sources":["../../src/cli/listr-deploy.ts"],"names":[],"mappings":"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"}
|