github-issue-tower-defence-management 1.85.0 → 1.86.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/CHANGELOG.md +7 -0
- package/README.md +12 -0
- package/bin/adapter/entry-points/cli/index.js +37 -0
- package/bin/adapter/entry-points/cli/index.js.map +1 -1
- package/bin/adapter/entry-points/cli/projectConfig.js +2 -0
- package/bin/adapter/entry-points/cli/projectConfig.js.map +1 -1
- package/bin/adapter/entry-points/console/consoleServer.js +204 -0
- package/bin/adapter/entry-points/console/consoleServer.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/cli/index.test.ts +126 -0
- package/src/adapter/entry-points/cli/index.ts +66 -0
- package/src/adapter/entry-points/cli/projectConfig.ts +4 -0
- package/src/adapter/entry-points/console/consoleServer.test.ts +297 -0
- package/src/adapter/entry-points/console/consoleServer.ts +220 -0
- package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
- package/types/adapter/entry-points/cli/projectConfig.d.ts +1 -0
- package/types/adapter/entry-points/cli/projectConfig.d.ts.map +1 -1
- package/types/adapter/entry-points/console/consoleServer.d.ts +19 -0
- package/types/adapter/entry-points/console/consoleServer.d.ts.map +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [1.86.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.85.0...v1.86.0) (2026-06-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **console:** add serveConsole CLI subcommand HTTP server skeleton ([#847](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/847)) ([e9442d9](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/e9442d9c1c0f4823c92786a706b30ae30b1d9400)), closes [#844](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/844)
|
|
7
|
+
|
|
1
8
|
# [1.85.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.84.1...v1.85.0) (2026-06-15)
|
|
2
9
|
|
|
3
10
|
|
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ Commands:
|
|
|
20
20
|
startDaemon [options] Start daemon to prepare GitHub issues
|
|
21
21
|
notifyFinishedIssuePreparation [options] Notify that issue preparation is finished
|
|
22
22
|
checkIssueReviewReadiness [options] Check whether an issue is review-ready (read-only; does not change Status or post any comment)
|
|
23
|
+
serveConsole [options] Start the local TDPM Console HTTP server
|
|
23
24
|
help [command] display help for command
|
|
24
25
|
|
|
25
26
|
Options for schedule:
|
|
@@ -52,8 +53,15 @@ Options for checkIssueReviewReadiness:
|
|
|
52
53
|
--configFilePath <path> Path to config file for tower defence management (required)
|
|
53
54
|
--issueUrl <url> GitHub issue URL (required)
|
|
54
55
|
--projectUrl <url> GitHub project URL
|
|
56
|
+
|
|
57
|
+
Options for serveConsole:
|
|
58
|
+
--configFilePath <path> Path to config file for tower defence management (required)
|
|
59
|
+
--port <number> Port for the console HTTP server (default: 9981)
|
|
60
|
+
--consoleDataOutputDir <path> Directory where console data files are written and served from
|
|
55
61
|
```
|
|
56
62
|
|
|
63
|
+
The `serveConsole` sub-command starts a local HTTP server that serves the TDPM Console. Every response is sent with `Cache-Control: no-store`. Any request path containing a segment that begins with a dot (for example `/.git` or `/.env`) is rejected with HTTP 404. The UI bootstrap assets (HTML and JS) are served without authentication; served `*.json` files and `/api/*` paths require an access token supplied either as the `k` query parameter (`?k=<token>`) or the `X-PV-Token` request header. The access token is read from the `consoleAccessToken` config value and never appears on the command line. This phase delivers only the server skeleton: the data files and the `/api/*` read and operation handlers are added in later phases, so an authenticated `/api/*` request currently passes the token gate and then returns 404. When the built UI bundle directory (`ui-dist`) is absent the server still starts and serves a minimal placeholder index for `/` and `/index.html`.
|
|
64
|
+
|
|
57
65
|
The `checkIssueReviewReadiness` sub-command lets an agent self-check whether an issue is currently review-ready. It does NOT change the issue Status field and does NOT post any comment. It writes a single JSON line to stdout of the shape `{ "reviewReady": boolean, "rejections": [{ "type": string, "detail": string }] }` and exits 0 on a successful evaluation regardless of readiness; a non-zero exit indicates an operational error (auth failure, network error). The rejection types include: `ISSUE_NOT_FOUND`, `NO_REPORT_FROM_AGENT_BOT`, `REPORT_HAS_NEXT_STEP`, `PULL_REQUEST_NOT_FOUND`, `PULL_REQUEST_IS_DRAFT`, `PULL_REQUEST_CONFLICTED`, `ANY_CI_JOB_FAILED_OR_IN_PROGRESS`, `REQUIRED_CI_JOB_NEVER_STARTED`, `ANY_REVIEW_COMMENT_NOT_RESOLVED`, and `MULTIPLE_PULL_REQUESTS_FOUND`. The `--projectUrl` option is optional; when omitted the command still runs using only the issue URL.
|
|
58
66
|
|
|
59
67
|
## Example 📖
|
|
@@ -80,6 +88,10 @@ npx github-issue-tower-defence-management notifyFinishedIssuePreparation --confi
|
|
|
80
88
|
npx github-issue-tower-defence-management checkIssueReviewReadiness --configFilePath ./preparator-config.yml --issueUrl https://github.com/HiromiShikata/test-repository/issues/1
|
|
81
89
|
```
|
|
82
90
|
|
|
91
|
+
```
|
|
92
|
+
npx github-issue-tower-defence-management serveConsole --configFilePath ./preparator-config.yml --port 9981
|
|
93
|
+
```
|
|
94
|
+
|
|
83
95
|
## Config
|
|
84
96
|
|
|
85
97
|
### Schedule Command Config
|
|
@@ -58,6 +58,8 @@ const NodeLocalCommandRunner_1 = require("../../repositories/NodeLocalCommandRun
|
|
|
58
58
|
const GitHubIssueCommentRepository_1 = require("../../repositories/GitHubIssueCommentRepository");
|
|
59
59
|
const FetchWebhookRepository_1 = require("../../repositories/FetchWebhookRepository");
|
|
60
60
|
const RevertOrphanedPreparationUseCase_1 = require("../../../domain/usecases/RevertOrphanedPreparationUseCase");
|
|
61
|
+
const path = __importStar(require("path"));
|
|
62
|
+
const consoleServer_1 = require("../console/consoleServer");
|
|
61
63
|
const buildGithubRepositoryParams = (localStorageRepository, token) => [
|
|
62
64
|
localStorageRepository,
|
|
63
65
|
token,
|
|
@@ -340,6 +342,41 @@ exports.program
|
|
|
340
342
|
});
|
|
341
343
|
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
342
344
|
});
|
|
345
|
+
exports.program
|
|
346
|
+
.command('serveConsole')
|
|
347
|
+
.description('Start the local TDPM Console HTTP server')
|
|
348
|
+
.requiredOption('--configFilePath <path>', 'Path to config file for tower defence management')
|
|
349
|
+
.option('--port <number>', `Port for the console HTTP server (default: ${consoleServer_1.DEFAULT_CONSOLE_PORT})`)
|
|
350
|
+
.option('--consoleDataOutputDir <path>', 'Directory where console data files are written and served from')
|
|
351
|
+
.action(async (options) => {
|
|
352
|
+
const config = (0, projectConfig_2.loadConfigFile)(options.configFilePath);
|
|
353
|
+
const accessToken = config.consoleAccessToken;
|
|
354
|
+
if (!accessToken) {
|
|
355
|
+
console.error('consoleAccessToken is required. Provide it via the config file.');
|
|
356
|
+
process.exit(1);
|
|
357
|
+
}
|
|
358
|
+
let port = consoleServer_1.DEFAULT_CONSOLE_PORT;
|
|
359
|
+
if (options.port !== undefined) {
|
|
360
|
+
const parsedPort = Number(options.port);
|
|
361
|
+
if (!Number.isFinite(parsedPort) ||
|
|
362
|
+
!Number.isInteger(parsedPort) ||
|
|
363
|
+
parsedPort <= 0 ||
|
|
364
|
+
parsedPort > 65535) {
|
|
365
|
+
console.error('Invalid value for --port. It must be a positive integer between 1 and 65535.');
|
|
366
|
+
process.exit(1);
|
|
367
|
+
}
|
|
368
|
+
port = parsedPort;
|
|
369
|
+
}
|
|
370
|
+
const uiDistDir = path.join(__dirname, 'ui-dist');
|
|
371
|
+
const consoleDataOutputDir = options.consoleDataOutputDir ?? null;
|
|
372
|
+
await (0, consoleServer_1.startConsoleServer)({
|
|
373
|
+
accessToken,
|
|
374
|
+
uiDistDir,
|
|
375
|
+
consoleDataOutputDir,
|
|
376
|
+
port,
|
|
377
|
+
});
|
|
378
|
+
console.log(`TDPM Console server listening on port ${port}`);
|
|
379
|
+
});
|
|
343
380
|
/* istanbul ignore next */
|
|
344
381
|
if (process.argv && require.main === module) {
|
|
345
382
|
exports.program.parse(process.argv);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -122,6 +122,7 @@ const loadConfigFile = (configFilePath) => {
|
|
|
122
122
|
awLogStaleThresholdMinutes: getNumberValue(parsed, 'awLogStaleThresholdMinutes'),
|
|
123
123
|
labelsAsLlmAgentName: getStringArrayValue(parsed, 'labelsAsLlmAgentName'),
|
|
124
124
|
changeTargetPathAliases: getStringRecordValue(parsed, 'changeTargetPathAliases'),
|
|
125
|
+
consoleAccessToken: getStringValue(parsed, 'consoleAccessToken'),
|
|
125
126
|
};
|
|
126
127
|
}
|
|
127
128
|
catch (error) {
|
|
@@ -232,6 +233,7 @@ const mergeConfigs = (configFile, cliOverrides, readmeOverrides) => ({
|
|
|
232
233
|
changeTargetPathAliases: readmeOverrides.changeTargetPathAliases ??
|
|
233
234
|
cliOverrides.changeTargetPathAliases ??
|
|
234
235
|
configFile.changeTargetPathAliases,
|
|
236
|
+
consoleAccessToken: cliOverrides.consoleAccessToken ?? configFile.consoleAccessToken,
|
|
235
237
|
});
|
|
236
238
|
exports.mergeConfigs = mergeConfigs;
|
|
237
239
|
const isGraphqlProjectV2ReadmeResponse = (value) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/projectConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,uCAAyB;
|
|
1
|
+
{"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/projectConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,204 @@
|
|
|
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.startConsoleServer = exports.createConsoleServer = exports.handleConsoleRequest = exports.extractProvidedToken = exports.isTokenValid = exports.requiresToken = exports.hasDotSegment = exports.CONSOLE_TOKEN_HEADER = exports.DEFAULT_CONSOLE_PORT = void 0;
|
|
37
|
+
const http = __importStar(require("http"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
exports.DEFAULT_CONSOLE_PORT = 9981;
|
|
41
|
+
exports.CONSOLE_TOKEN_HEADER = 'x-pv-token';
|
|
42
|
+
const PLACEHOLDER_INDEX_HTML = `<!DOCTYPE html>
|
|
43
|
+
<html lang="en">
|
|
44
|
+
<head>
|
|
45
|
+
<meta charset="utf-8" />
|
|
46
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
47
|
+
<title>TDPM Console</title>
|
|
48
|
+
</head>
|
|
49
|
+
<body>
|
|
50
|
+
<main>
|
|
51
|
+
<h1>TDPM Console</h1>
|
|
52
|
+
<p>The console UI bundle has not been built yet.</p>
|
|
53
|
+
</main>
|
|
54
|
+
</body>
|
|
55
|
+
</html>
|
|
56
|
+
`;
|
|
57
|
+
const MIME_TYPES = {
|
|
58
|
+
'.html': 'text/html; charset=utf-8',
|
|
59
|
+
'.js': 'text/javascript; charset=utf-8',
|
|
60
|
+
'.mjs': 'text/javascript; charset=utf-8',
|
|
61
|
+
'.css': 'text/css; charset=utf-8',
|
|
62
|
+
'.json': 'application/json; charset=utf-8',
|
|
63
|
+
'.svg': 'image/svg+xml',
|
|
64
|
+
'.png': 'image/png',
|
|
65
|
+
'.jpg': 'image/jpeg',
|
|
66
|
+
'.jpeg': 'image/jpeg',
|
|
67
|
+
'.gif': 'image/gif',
|
|
68
|
+
'.ico': 'image/x-icon',
|
|
69
|
+
'.map': 'application/json; charset=utf-8',
|
|
70
|
+
'.woff': 'font/woff',
|
|
71
|
+
'.woff2': 'font/woff2',
|
|
72
|
+
};
|
|
73
|
+
const hasDotSegment = (requestPath) => requestPath
|
|
74
|
+
.split('/')
|
|
75
|
+
.some((segment) => segment.length > 0 && segment.startsWith('.'));
|
|
76
|
+
exports.hasDotSegment = hasDotSegment;
|
|
77
|
+
const requiresToken = (requestPath) => requestPath.startsWith('/api/') ||
|
|
78
|
+
requestPath === '/api' ||
|
|
79
|
+
requestPath.endsWith('.json');
|
|
80
|
+
exports.requiresToken = requiresToken;
|
|
81
|
+
const isTokenValid = (expectedToken, providedToken) => providedToken !== null && providedToken === expectedToken;
|
|
82
|
+
exports.isTokenValid = isTokenValid;
|
|
83
|
+
const extractProvidedToken = (queryToken, headerToken) => {
|
|
84
|
+
if (typeof queryToken === 'string' && queryToken.length > 0) {
|
|
85
|
+
return queryToken;
|
|
86
|
+
}
|
|
87
|
+
if (typeof headerToken === 'string' && headerToken.length > 0) {
|
|
88
|
+
return headerToken;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
};
|
|
92
|
+
exports.extractProvidedToken = extractProvidedToken;
|
|
93
|
+
const contentTypeForPath = (filePath) => {
|
|
94
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
95
|
+
return MIME_TYPES[extension] ?? 'application/octet-stream';
|
|
96
|
+
};
|
|
97
|
+
const resolveStaticFilePath = (uiDistDir, requestPath) => {
|
|
98
|
+
const relativePath = requestPath === '/' ? '/index.html' : requestPath;
|
|
99
|
+
const normalized = path
|
|
100
|
+
.normalize(relativePath)
|
|
101
|
+
.replace(/^(\.\.(\/|\\|$))+/, '');
|
|
102
|
+
const candidate = path.join(uiDistDir, normalized);
|
|
103
|
+
const resolvedRoot = path.resolve(uiDistDir);
|
|
104
|
+
const resolvedCandidate = path.resolve(candidate);
|
|
105
|
+
if (resolvedCandidate !== resolvedRoot &&
|
|
106
|
+
!resolvedCandidate.startsWith(resolvedRoot + path.sep)) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return resolvedCandidate;
|
|
110
|
+
};
|
|
111
|
+
const readStaticFile = (filePath) => {
|
|
112
|
+
try {
|
|
113
|
+
const stat = fs.statSync(filePath);
|
|
114
|
+
if (!stat.isFile()) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return fs.readFileSync(filePath);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const sendNotFound = (response) => {
|
|
124
|
+
response.writeHead(404, {
|
|
125
|
+
'Content-Type': 'text/plain; charset=utf-8',
|
|
126
|
+
'Cache-Control': 'no-store',
|
|
127
|
+
});
|
|
128
|
+
response.end('Not Found');
|
|
129
|
+
};
|
|
130
|
+
const sendUnauthorized = (response) => {
|
|
131
|
+
response.writeHead(401, {
|
|
132
|
+
'Content-Type': 'text/plain; charset=utf-8',
|
|
133
|
+
'Cache-Control': 'no-store',
|
|
134
|
+
});
|
|
135
|
+
response.end('Unauthorized');
|
|
136
|
+
};
|
|
137
|
+
const serveBootstrapIndex = (response) => {
|
|
138
|
+
response.writeHead(200, {
|
|
139
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
140
|
+
'Cache-Control': 'no-store',
|
|
141
|
+
});
|
|
142
|
+
response.end(PLACEHOLDER_INDEX_HTML);
|
|
143
|
+
};
|
|
144
|
+
const handleConsoleRequest = (options, request, response) => {
|
|
145
|
+
const requestUrl = new URL(request.url ?? '/', 'http://localhost');
|
|
146
|
+
const requestPath = requestUrl.pathname;
|
|
147
|
+
if ((0, exports.hasDotSegment)(requestPath)) {
|
|
148
|
+
sendNotFound(response);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if ((0, exports.requiresToken)(requestPath)) {
|
|
152
|
+
const providedToken = (0, exports.extractProvidedToken)(requestUrl.searchParams.get('k'), request.headers[exports.CONSOLE_TOKEN_HEADER]);
|
|
153
|
+
if (!(0, exports.isTokenValid)(options.accessToken, providedToken)) {
|
|
154
|
+
sendUnauthorized(response);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
sendNotFound(response);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (requestPath === '/' || requestPath === '/index.html') {
|
|
161
|
+
const indexFilePath = resolveStaticFilePath(options.uiDistDir, '/index.html');
|
|
162
|
+
const indexContent = indexFilePath === null ? null : readStaticFile(indexFilePath);
|
|
163
|
+
if (indexContent === null) {
|
|
164
|
+
serveBootstrapIndex(response);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
response.writeHead(200, {
|
|
168
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
169
|
+
'Cache-Control': 'no-store',
|
|
170
|
+
});
|
|
171
|
+
response.end(indexContent);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const staticFilePath = resolveStaticFilePath(options.uiDistDir, requestPath);
|
|
175
|
+
if (staticFilePath === null) {
|
|
176
|
+
sendNotFound(response);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const staticContent = readStaticFile(staticFilePath);
|
|
180
|
+
if (staticContent === null) {
|
|
181
|
+
sendNotFound(response);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
response.writeHead(200, {
|
|
185
|
+
'Content-Type': contentTypeForPath(staticFilePath),
|
|
186
|
+
'Cache-Control': 'no-store',
|
|
187
|
+
});
|
|
188
|
+
response.end(staticContent);
|
|
189
|
+
};
|
|
190
|
+
exports.handleConsoleRequest = handleConsoleRequest;
|
|
191
|
+
const createConsoleServer = (options) => http.createServer((request, response) => {
|
|
192
|
+
(0, exports.handleConsoleRequest)(options, request, response);
|
|
193
|
+
});
|
|
194
|
+
exports.createConsoleServer = createConsoleServer;
|
|
195
|
+
const startConsoleServer = (options) => new Promise((resolve, reject) => {
|
|
196
|
+
const server = (0, exports.createConsoleServer)(options);
|
|
197
|
+
server.once('error', reject);
|
|
198
|
+
server.listen(options.port, () => {
|
|
199
|
+
server.removeListener('error', reject);
|
|
200
|
+
resolve(server);
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
exports.startConsoleServer = startConsoleServer;
|
|
204
|
+
//# sourceMappingURL=consoleServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consoleServer.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleServer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -60,6 +60,25 @@ jest.mock('../handlers/HandleScheduledEventUseCaseHandler', () => ({
|
|
|
60
60
|
handle: jest.fn().mockResolvedValue(null),
|
|
61
61
|
})),
|
|
62
62
|
}));
|
|
63
|
+
import type { StartConsoleServerOptions } from '../console/consoleServer';
|
|
64
|
+
|
|
65
|
+
const mockStartConsoleServer = jest
|
|
66
|
+
.fn<Promise<unknown>, [StartConsoleServerOptions]>()
|
|
67
|
+
.mockResolvedValue({
|
|
68
|
+
close: jest.fn(),
|
|
69
|
+
address: jest.fn().mockReturnValue({ port: 9981 }),
|
|
70
|
+
});
|
|
71
|
+
jest.mock('../console/consoleServer', () => {
|
|
72
|
+
const actual: Record<string, unknown> = jest.requireActual(
|
|
73
|
+
'../console/consoleServer',
|
|
74
|
+
);
|
|
75
|
+
return {
|
|
76
|
+
...actual,
|
|
77
|
+
startConsoleServer: (
|
|
78
|
+
options: StartConsoleServerOptions,
|
|
79
|
+
): Promise<unknown> => mockStartConsoleServer(options),
|
|
80
|
+
};
|
|
81
|
+
});
|
|
63
82
|
|
|
64
83
|
describe('CLI', () => {
|
|
65
84
|
const originalEnv = process.env;
|
|
@@ -1644,4 +1663,111 @@ mysteryKey: 'value'
|
|
|
1644
1663
|
processExitSpy.mockRestore();
|
|
1645
1664
|
});
|
|
1646
1665
|
});
|
|
1666
|
+
|
|
1667
|
+
describe('serveConsole', () => {
|
|
1668
|
+
it('should appear in the CLI help output', () => {
|
|
1669
|
+
const helpText = program.helpInformation();
|
|
1670
|
+
expect(helpText).toContain('serveConsole');
|
|
1671
|
+
});
|
|
1672
|
+
|
|
1673
|
+
it('should start the server on the default port 9981 when --port is omitted', async () => {
|
|
1674
|
+
writeConfig({ ...defaultConfig, consoleAccessToken: 'config-token' });
|
|
1675
|
+
const logSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
1676
|
+
|
|
1677
|
+
await program.parseAsync([
|
|
1678
|
+
'node',
|
|
1679
|
+
'test',
|
|
1680
|
+
'serveConsole',
|
|
1681
|
+
'--configFilePath',
|
|
1682
|
+
configFilePath,
|
|
1683
|
+
]);
|
|
1684
|
+
|
|
1685
|
+
expect(mockStartConsoleServer).toHaveBeenCalledTimes(1);
|
|
1686
|
+
const callArg = mockStartConsoleServer.mock.calls[0][0];
|
|
1687
|
+
expect(callArg.port).toBe(9981);
|
|
1688
|
+
expect(callArg.accessToken).toBe('config-token');
|
|
1689
|
+
expect(callArg.consoleDataOutputDir).toBeNull();
|
|
1690
|
+
expect(typeof callArg.uiDistDir).toBe('string');
|
|
1691
|
+
|
|
1692
|
+
logSpy.mockRestore();
|
|
1693
|
+
});
|
|
1694
|
+
|
|
1695
|
+
it('should use the provided --port and --consoleDataOutputDir', async () => {
|
|
1696
|
+
writeConfig({ ...defaultConfig, consoleAccessToken: 'config-token' });
|
|
1697
|
+
const logSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
1698
|
+
|
|
1699
|
+
await program.parseAsync([
|
|
1700
|
+
'node',
|
|
1701
|
+
'test',
|
|
1702
|
+
'serveConsole',
|
|
1703
|
+
'--configFilePath',
|
|
1704
|
+
configFilePath,
|
|
1705
|
+
'--port',
|
|
1706
|
+
'12345',
|
|
1707
|
+
'--consoleDataOutputDir',
|
|
1708
|
+
'/tmp/console-data',
|
|
1709
|
+
]);
|
|
1710
|
+
|
|
1711
|
+
const callArg = mockStartConsoleServer.mock.calls[0][0];
|
|
1712
|
+
expect(callArg.port).toBe(12345);
|
|
1713
|
+
expect(callArg.consoleDataOutputDir).toBe('/tmp/console-data');
|
|
1714
|
+
|
|
1715
|
+
logSpy.mockRestore();
|
|
1716
|
+
});
|
|
1717
|
+
|
|
1718
|
+
it('should exit with error when consoleAccessToken is missing from config', async () => {
|
|
1719
|
+
writeConfig(defaultConfig);
|
|
1720
|
+
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
1721
|
+
const processExitSpy = jest
|
|
1722
|
+
.spyOn(process, 'exit')
|
|
1723
|
+
.mockImplementation(() => {
|
|
1724
|
+
throw new Error('process.exit called');
|
|
1725
|
+
});
|
|
1726
|
+
|
|
1727
|
+
await expect(
|
|
1728
|
+
program.parseAsync([
|
|
1729
|
+
'node',
|
|
1730
|
+
'test',
|
|
1731
|
+
'serveConsole',
|
|
1732
|
+
'--configFilePath',
|
|
1733
|
+
configFilePath,
|
|
1734
|
+
]),
|
|
1735
|
+
).rejects.toThrow('process.exit called');
|
|
1736
|
+
|
|
1737
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(
|
|
1738
|
+
'consoleAccessToken is required. Provide it via the config file.',
|
|
1739
|
+
);
|
|
1740
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
1741
|
+
|
|
1742
|
+
consoleErrorSpy.mockRestore();
|
|
1743
|
+
processExitSpy.mockRestore();
|
|
1744
|
+
});
|
|
1745
|
+
|
|
1746
|
+
it('should exit with error for an invalid --port value', async () => {
|
|
1747
|
+
writeConfig({ ...defaultConfig, consoleAccessToken: 'config-token' });
|
|
1748
|
+
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
1749
|
+
const processExitSpy = jest
|
|
1750
|
+
.spyOn(process, 'exit')
|
|
1751
|
+
.mockImplementation(() => {
|
|
1752
|
+
throw new Error('process.exit called');
|
|
1753
|
+
});
|
|
1754
|
+
|
|
1755
|
+
await expect(
|
|
1756
|
+
program.parseAsync([
|
|
1757
|
+
'node',
|
|
1758
|
+
'test',
|
|
1759
|
+
'serveConsole',
|
|
1760
|
+
'--configFilePath',
|
|
1761
|
+
configFilePath,
|
|
1762
|
+
'--port',
|
|
1763
|
+
'not-a-number',
|
|
1764
|
+
]),
|
|
1765
|
+
).rejects.toThrow('process.exit called');
|
|
1766
|
+
|
|
1767
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
1768
|
+
|
|
1769
|
+
consoleErrorSpy.mockRestore();
|
|
1770
|
+
processExitSpy.mockRestore();
|
|
1771
|
+
});
|
|
1772
|
+
});
|
|
1647
1773
|
});
|
|
@@ -31,6 +31,11 @@ import { NodeLocalCommandRunner } from '../../repositories/NodeLocalCommandRunne
|
|
|
31
31
|
import { GitHubIssueCommentRepository } from '../../repositories/GitHubIssueCommentRepository';
|
|
32
32
|
import { FetchWebhookRepository } from '../../repositories/FetchWebhookRepository';
|
|
33
33
|
import { RevertOrphanedPreparationUseCase } from '../../../domain/usecases/RevertOrphanedPreparationUseCase';
|
|
34
|
+
import * as path from 'path';
|
|
35
|
+
import {
|
|
36
|
+
DEFAULT_CONSOLE_PORT,
|
|
37
|
+
startConsoleServer,
|
|
38
|
+
} from '../console/consoleServer';
|
|
34
39
|
|
|
35
40
|
type StartDaemonOptions = {
|
|
36
41
|
projectUrl?: string;
|
|
@@ -60,6 +65,12 @@ type CheckIssueReviewReadinessOptions = {
|
|
|
60
65
|
configFilePath: string;
|
|
61
66
|
};
|
|
62
67
|
|
|
68
|
+
type ServeConsoleOptions = {
|
|
69
|
+
configFilePath: string;
|
|
70
|
+
port?: string;
|
|
71
|
+
consoleDataOutputDir?: string;
|
|
72
|
+
};
|
|
73
|
+
|
|
63
74
|
const buildGithubRepositoryParams = (
|
|
64
75
|
localStorageRepository: LocalStorageRepository,
|
|
65
76
|
token: string,
|
|
@@ -554,6 +565,61 @@ program
|
|
|
554
565
|
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
555
566
|
});
|
|
556
567
|
|
|
568
|
+
program
|
|
569
|
+
.command('serveConsole')
|
|
570
|
+
.description('Start the local TDPM Console HTTP server')
|
|
571
|
+
.requiredOption(
|
|
572
|
+
'--configFilePath <path>',
|
|
573
|
+
'Path to config file for tower defence management',
|
|
574
|
+
)
|
|
575
|
+
.option(
|
|
576
|
+
'--port <number>',
|
|
577
|
+
`Port for the console HTTP server (default: ${DEFAULT_CONSOLE_PORT})`,
|
|
578
|
+
)
|
|
579
|
+
.option(
|
|
580
|
+
'--consoleDataOutputDir <path>',
|
|
581
|
+
'Directory where console data files are written and served from',
|
|
582
|
+
)
|
|
583
|
+
.action(async (options: ServeConsoleOptions) => {
|
|
584
|
+
const config = loadConfigFile(options.configFilePath);
|
|
585
|
+
|
|
586
|
+
const accessToken = config.consoleAccessToken;
|
|
587
|
+
if (!accessToken) {
|
|
588
|
+
console.error(
|
|
589
|
+
'consoleAccessToken is required. Provide it via the config file.',
|
|
590
|
+
);
|
|
591
|
+
process.exit(1);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
let port = DEFAULT_CONSOLE_PORT;
|
|
595
|
+
if (options.port !== undefined) {
|
|
596
|
+
const parsedPort = Number(options.port);
|
|
597
|
+
if (
|
|
598
|
+
!Number.isFinite(parsedPort) ||
|
|
599
|
+
!Number.isInteger(parsedPort) ||
|
|
600
|
+
parsedPort <= 0 ||
|
|
601
|
+
parsedPort > 65535
|
|
602
|
+
) {
|
|
603
|
+
console.error(
|
|
604
|
+
'Invalid value for --port. It must be a positive integer between 1 and 65535.',
|
|
605
|
+
);
|
|
606
|
+
process.exit(1);
|
|
607
|
+
}
|
|
608
|
+
port = parsedPort;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
const uiDistDir = path.join(__dirname, 'ui-dist');
|
|
612
|
+
const consoleDataOutputDir = options.consoleDataOutputDir ?? null;
|
|
613
|
+
|
|
614
|
+
await startConsoleServer({
|
|
615
|
+
accessToken,
|
|
616
|
+
uiDistDir,
|
|
617
|
+
consoleDataOutputDir,
|
|
618
|
+
port,
|
|
619
|
+
});
|
|
620
|
+
console.log(`TDPM Console server listening on port ${port}`);
|
|
621
|
+
});
|
|
622
|
+
|
|
557
623
|
/* istanbul ignore next */
|
|
558
624
|
if (process.argv && require.main === module) {
|
|
559
625
|
program.parse(process.argv);
|
|
@@ -21,6 +21,7 @@ export type ConfigFile = {
|
|
|
21
21
|
awLogStaleThresholdMinutes?: number;
|
|
22
22
|
labelsAsLlmAgentName?: string[];
|
|
23
23
|
changeTargetPathAliases?: Record<string, string>;
|
|
24
|
+
consoleAccessToken?: string;
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
const getStringValue = (
|
|
@@ -145,6 +146,7 @@ export const loadConfigFile = (configFilePath: string): ConfigFile => {
|
|
|
145
146
|
parsed,
|
|
146
147
|
'changeTargetPathAliases',
|
|
147
148
|
),
|
|
149
|
+
consoleAccessToken: getStringValue(parsed, 'consoleAccessToken'),
|
|
148
150
|
};
|
|
149
151
|
} catch (error) {
|
|
150
152
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -303,6 +305,8 @@ export const mergeConfigs = (
|
|
|
303
305
|
readmeOverrides.changeTargetPathAliases ??
|
|
304
306
|
cliOverrides.changeTargetPathAliases ??
|
|
305
307
|
configFile.changeTargetPathAliases,
|
|
308
|
+
consoleAccessToken:
|
|
309
|
+
cliOverrides.consoleAccessToken ?? configFile.consoleAccessToken,
|
|
306
310
|
});
|
|
307
311
|
|
|
308
312
|
type GraphqlProjectV2ReadmeResponse = {
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import * as http from 'http';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_CONSOLE_PORT,
|
|
7
|
+
CONSOLE_TOKEN_HEADER,
|
|
8
|
+
hasDotSegment,
|
|
9
|
+
requiresToken,
|
|
10
|
+
isTokenValid,
|
|
11
|
+
extractProvidedToken,
|
|
12
|
+
startConsoleServer,
|
|
13
|
+
} from './consoleServer';
|
|
14
|
+
|
|
15
|
+
describe('consoleServer pure helpers', () => {
|
|
16
|
+
describe('DEFAULT_CONSOLE_PORT', () => {
|
|
17
|
+
it('is 9981', () => {
|
|
18
|
+
expect(DEFAULT_CONSOLE_PORT).toBe(9981);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe('hasDotSegment', () => {
|
|
23
|
+
it('returns true for a top-level dot segment', () => {
|
|
24
|
+
expect(hasDotSegment('/.git')).toBe(true);
|
|
25
|
+
expect(hasDotSegment('/.env')).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('returns true for a nested dot segment', () => {
|
|
29
|
+
expect(hasDotSegment('/foo/.bar')).toBe(true);
|
|
30
|
+
expect(hasDotSegment('/a/b/.hidden/c')).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('returns false for paths without dot segments', () => {
|
|
34
|
+
expect(hasDotSegment('/')).toBe(false);
|
|
35
|
+
expect(hasDotSegment('/index.html')).toBe(false);
|
|
36
|
+
expect(hasDotSegment('/assets/app.js')).toBe(false);
|
|
37
|
+
expect(hasDotSegment('/api/itembody')).toBe(false);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('requiresToken', () => {
|
|
42
|
+
it('requires a token for .json paths', () => {
|
|
43
|
+
expect(requiresToken('/data/situation.json')).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('requires a token for /api/* paths', () => {
|
|
47
|
+
expect(requiresToken('/api/review')).toBe(true);
|
|
48
|
+
expect(requiresToken('/api')).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('does not require a token for bootstrap assets', () => {
|
|
52
|
+
expect(requiresToken('/')).toBe(false);
|
|
53
|
+
expect(requiresToken('/index.html')).toBe(false);
|
|
54
|
+
expect(requiresToken('/assets/app.js')).toBe(false);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
describe('isTokenValid', () => {
|
|
59
|
+
it('accepts a matching token', () => {
|
|
60
|
+
expect(isTokenValid('expected', 'expected')).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('rejects a missing or mismatched token', () => {
|
|
64
|
+
expect(isTokenValid('expected', null)).toBe(false);
|
|
65
|
+
expect(isTokenValid('expected', 'other')).toBe(false);
|
|
66
|
+
expect(isTokenValid('expected', '')).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
describe('extractProvidedToken', () => {
|
|
71
|
+
it('prefers the query token', () => {
|
|
72
|
+
expect(extractProvidedToken('fromQuery', 'fromHeader')).toBe('fromQuery');
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('falls back to the header token', () => {
|
|
76
|
+
expect(extractProvidedToken(null, 'fromHeader')).toBe('fromHeader');
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('returns null when neither is present', () => {
|
|
80
|
+
expect(extractProvidedToken(null, undefined)).toBeNull();
|
|
81
|
+
expect(extractProvidedToken('', undefined)).toBeNull();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe('consoleServer integration', () => {
|
|
87
|
+
const testToken = 'integration-test-token-value';
|
|
88
|
+
|
|
89
|
+
const requestServer = (
|
|
90
|
+
server: http.Server,
|
|
91
|
+
requestPath: string,
|
|
92
|
+
headers: http.OutgoingHttpHeaders = {},
|
|
93
|
+
): Promise<{
|
|
94
|
+
statusCode: number;
|
|
95
|
+
body: string;
|
|
96
|
+
cacheControl: string | undefined;
|
|
97
|
+
contentType: string | undefined;
|
|
98
|
+
}> => {
|
|
99
|
+
const address = server.address();
|
|
100
|
+
if (address === null || typeof address === 'string') {
|
|
101
|
+
throw new Error('server is not listening on a TCP port');
|
|
102
|
+
}
|
|
103
|
+
const port = address.port;
|
|
104
|
+
return new Promise((resolve, reject) => {
|
|
105
|
+
const request = http.request(
|
|
106
|
+
{ host: '127.0.0.1', port, path: requestPath, headers },
|
|
107
|
+
(response) => {
|
|
108
|
+
const chunks: Uint8Array[] = [];
|
|
109
|
+
response.on('data', (chunk: Uint8Array) => chunks.push(chunk));
|
|
110
|
+
response.on('end', () => {
|
|
111
|
+
resolve({
|
|
112
|
+
statusCode: response.statusCode ?? 0,
|
|
113
|
+
body: Buffer.concat(chunks).toString('utf-8'),
|
|
114
|
+
cacheControl: response.headers['cache-control'],
|
|
115
|
+
contentType: response.headers['content-type'],
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
);
|
|
120
|
+
request.on('error', reject);
|
|
121
|
+
request.end();
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const closeServer = (server: http.Server): Promise<void> =>
|
|
126
|
+
new Promise((resolve, reject) => {
|
|
127
|
+
server.close((error) => {
|
|
128
|
+
if (error) {
|
|
129
|
+
reject(error);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
resolve();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('starts on an ephemeral port and closes gracefully', async () => {
|
|
137
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
138
|
+
const server = await startConsoleServer({
|
|
139
|
+
accessToken: testToken,
|
|
140
|
+
uiDistDir: path.join(tmpDir, 'ui-dist'),
|
|
141
|
+
consoleDataOutputDir: null,
|
|
142
|
+
port: 0,
|
|
143
|
+
});
|
|
144
|
+
const address = server.address();
|
|
145
|
+
expect(address).not.toBeNull();
|
|
146
|
+
expect(typeof address).not.toBe('string');
|
|
147
|
+
await closeServer(server);
|
|
148
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it('serves the placeholder index without a token when ui-dist is absent', async () => {
|
|
152
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
153
|
+
const server = await startConsoleServer({
|
|
154
|
+
accessToken: testToken,
|
|
155
|
+
uiDistDir: path.join(tmpDir, 'missing-ui-dist'),
|
|
156
|
+
consoleDataOutputDir: null,
|
|
157
|
+
port: 0,
|
|
158
|
+
});
|
|
159
|
+
try {
|
|
160
|
+
const root = await requestServer(server, '/');
|
|
161
|
+
expect(root.statusCode).toBe(200);
|
|
162
|
+
expect(root.body).toContain('TDPM Console');
|
|
163
|
+
expect(root.cacheControl).toBe('no-store');
|
|
164
|
+
expect(root.contentType).toContain('text/html');
|
|
165
|
+
|
|
166
|
+
const indexHtml = await requestServer(server, '/index.html');
|
|
167
|
+
expect(indexHtml.statusCode).toBe(200);
|
|
168
|
+
expect(indexHtml.cacheControl).toBe('no-store');
|
|
169
|
+
} finally {
|
|
170
|
+
await closeServer(server);
|
|
171
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('returns 404 for a missing non-index file when ui-dist is absent', async () => {
|
|
176
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
177
|
+
const server = await startConsoleServer({
|
|
178
|
+
accessToken: testToken,
|
|
179
|
+
uiDistDir: path.join(tmpDir, 'missing-ui-dist'),
|
|
180
|
+
consoleDataOutputDir: null,
|
|
181
|
+
port: 0,
|
|
182
|
+
});
|
|
183
|
+
try {
|
|
184
|
+
const missing = await requestServer(server, '/assets/app.js');
|
|
185
|
+
expect(missing.statusCode).toBe(404);
|
|
186
|
+
expect(missing.cacheControl).toBe('no-store');
|
|
187
|
+
} finally {
|
|
188
|
+
await closeServer(server);
|
|
189
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it('serves built bootstrap assets without a token', async () => {
|
|
194
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
195
|
+
const uiDistDir = path.join(tmpDir, 'ui-dist');
|
|
196
|
+
fs.mkdirSync(path.join(uiDistDir, 'assets'), { recursive: true });
|
|
197
|
+
fs.writeFileSync(
|
|
198
|
+
path.join(uiDistDir, 'index.html'),
|
|
199
|
+
'<!DOCTYPE html><title>built</title>',
|
|
200
|
+
);
|
|
201
|
+
fs.writeFileSync(
|
|
202
|
+
path.join(uiDistDir, 'assets', 'app.js'),
|
|
203
|
+
'console.log("app");',
|
|
204
|
+
);
|
|
205
|
+
const server = await startConsoleServer({
|
|
206
|
+
accessToken: testToken,
|
|
207
|
+
uiDistDir,
|
|
208
|
+
consoleDataOutputDir: null,
|
|
209
|
+
port: 0,
|
|
210
|
+
});
|
|
211
|
+
try {
|
|
212
|
+
const index = await requestServer(server, '/');
|
|
213
|
+
expect(index.statusCode).toBe(200);
|
|
214
|
+
expect(index.body).toContain('built');
|
|
215
|
+
|
|
216
|
+
const appJs = await requestServer(server, '/assets/app.js');
|
|
217
|
+
expect(appJs.statusCode).toBe(200);
|
|
218
|
+
expect(appJs.body).toContain('app');
|
|
219
|
+
expect(appJs.contentType).toContain('text/javascript');
|
|
220
|
+
expect(appJs.cacheControl).toBe('no-store');
|
|
221
|
+
} finally {
|
|
222
|
+
await closeServer(server);
|
|
223
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('rejects dot-prefixed paths with 404', async () => {
|
|
228
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
229
|
+
const uiDistDir = path.join(tmpDir, 'ui-dist');
|
|
230
|
+
fs.mkdirSync(uiDistDir, { recursive: true });
|
|
231
|
+
fs.writeFileSync(path.join(uiDistDir, '.env'), 'SECRET=should-not-serve');
|
|
232
|
+
const server = await startConsoleServer({
|
|
233
|
+
accessToken: testToken,
|
|
234
|
+
uiDistDir,
|
|
235
|
+
consoleDataOutputDir: null,
|
|
236
|
+
port: 0,
|
|
237
|
+
});
|
|
238
|
+
try {
|
|
239
|
+
const dotEnv = await requestServer(server, '/.env');
|
|
240
|
+
expect(dotEnv.statusCode).toBe(404);
|
|
241
|
+
expect(dotEnv.body).not.toContain('SECRET');
|
|
242
|
+
|
|
243
|
+
const dotGit = await requestServer(server, '/.git/config');
|
|
244
|
+
expect(dotGit.statusCode).toBe(404);
|
|
245
|
+
|
|
246
|
+
const nestedDot = await requestServer(server, '/foo/.bar');
|
|
247
|
+
expect(nestedDot.statusCode).toBe(404);
|
|
248
|
+
} finally {
|
|
249
|
+
await closeServer(server);
|
|
250
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
it('rejects .json and /api/* without a token and passes the gate with a valid token', async () => {
|
|
255
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
256
|
+
const server = await startConsoleServer({
|
|
257
|
+
accessToken: testToken,
|
|
258
|
+
uiDistDir: path.join(tmpDir, 'ui-dist'),
|
|
259
|
+
consoleDataOutputDir: null,
|
|
260
|
+
port: 0,
|
|
261
|
+
});
|
|
262
|
+
try {
|
|
263
|
+
const jsonNoToken = await requestServer(server, '/data/situation.json');
|
|
264
|
+
expect(jsonNoToken.statusCode).toBe(401);
|
|
265
|
+
expect(jsonNoToken.cacheControl).toBe('no-store');
|
|
266
|
+
|
|
267
|
+
const apiNoToken = await requestServer(server, '/api/review');
|
|
268
|
+
expect(apiNoToken.statusCode).toBe(401);
|
|
269
|
+
|
|
270
|
+
const jsonWithQueryToken = await requestServer(
|
|
271
|
+
server,
|
|
272
|
+
`/data/situation.json?k=${testToken}`,
|
|
273
|
+
);
|
|
274
|
+
expect(jsonWithQueryToken.statusCode).toBe(404);
|
|
275
|
+
|
|
276
|
+
const apiWithQueryToken = await requestServer(
|
|
277
|
+
server,
|
|
278
|
+
`/api/review?k=${testToken}`,
|
|
279
|
+
);
|
|
280
|
+
expect(apiWithQueryToken.statusCode).toBe(404);
|
|
281
|
+
|
|
282
|
+
const apiWithHeaderToken = await requestServer(server, '/api/review', {
|
|
283
|
+
[CONSOLE_TOKEN_HEADER]: testToken,
|
|
284
|
+
});
|
|
285
|
+
expect(apiWithHeaderToken.statusCode).toBe(404);
|
|
286
|
+
|
|
287
|
+
const apiWithWrongToken = await requestServer(
|
|
288
|
+
server,
|
|
289
|
+
'/api/review?k=wrong-token',
|
|
290
|
+
);
|
|
291
|
+
expect(apiWithWrongToken.statusCode).toBe(401);
|
|
292
|
+
} finally {
|
|
293
|
+
await closeServer(server);
|
|
294
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
});
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import * as http from 'http';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
|
|
5
|
+
export const DEFAULT_CONSOLE_PORT = 9981;
|
|
6
|
+
|
|
7
|
+
export const CONSOLE_TOKEN_HEADER = 'x-pv-token';
|
|
8
|
+
|
|
9
|
+
const PLACEHOLDER_INDEX_HTML = `<!DOCTYPE html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
14
|
+
<title>TDPM Console</title>
|
|
15
|
+
</head>
|
|
16
|
+
<body>
|
|
17
|
+
<main>
|
|
18
|
+
<h1>TDPM Console</h1>
|
|
19
|
+
<p>The console UI bundle has not been built yet.</p>
|
|
20
|
+
</main>
|
|
21
|
+
</body>
|
|
22
|
+
</html>
|
|
23
|
+
`;
|
|
24
|
+
|
|
25
|
+
const MIME_TYPES: Record<string, string> = {
|
|
26
|
+
'.html': 'text/html; charset=utf-8',
|
|
27
|
+
'.js': 'text/javascript; charset=utf-8',
|
|
28
|
+
'.mjs': 'text/javascript; charset=utf-8',
|
|
29
|
+
'.css': 'text/css; charset=utf-8',
|
|
30
|
+
'.json': 'application/json; charset=utf-8',
|
|
31
|
+
'.svg': 'image/svg+xml',
|
|
32
|
+
'.png': 'image/png',
|
|
33
|
+
'.jpg': 'image/jpeg',
|
|
34
|
+
'.jpeg': 'image/jpeg',
|
|
35
|
+
'.gif': 'image/gif',
|
|
36
|
+
'.ico': 'image/x-icon',
|
|
37
|
+
'.map': 'application/json; charset=utf-8',
|
|
38
|
+
'.woff': 'font/woff',
|
|
39
|
+
'.woff2': 'font/woff2',
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const hasDotSegment = (requestPath: string): boolean =>
|
|
43
|
+
requestPath
|
|
44
|
+
.split('/')
|
|
45
|
+
.some((segment) => segment.length > 0 && segment.startsWith('.'));
|
|
46
|
+
|
|
47
|
+
export const requiresToken = (requestPath: string): boolean =>
|
|
48
|
+
requestPath.startsWith('/api/') ||
|
|
49
|
+
requestPath === '/api' ||
|
|
50
|
+
requestPath.endsWith('.json');
|
|
51
|
+
|
|
52
|
+
export const isTokenValid = (
|
|
53
|
+
expectedToken: string,
|
|
54
|
+
providedToken: string | null,
|
|
55
|
+
): boolean => providedToken !== null && providedToken === expectedToken;
|
|
56
|
+
|
|
57
|
+
export const extractProvidedToken = (
|
|
58
|
+
queryToken: string | string[] | null,
|
|
59
|
+
headerToken: string | string[] | undefined,
|
|
60
|
+
): string | null => {
|
|
61
|
+
if (typeof queryToken === 'string' && queryToken.length > 0) {
|
|
62
|
+
return queryToken;
|
|
63
|
+
}
|
|
64
|
+
if (typeof headerToken === 'string' && headerToken.length > 0) {
|
|
65
|
+
return headerToken;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const contentTypeForPath = (filePath: string): string => {
|
|
71
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
72
|
+
return MIME_TYPES[extension] ?? 'application/octet-stream';
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const resolveStaticFilePath = (
|
|
76
|
+
uiDistDir: string,
|
|
77
|
+
requestPath: string,
|
|
78
|
+
): string | null => {
|
|
79
|
+
const relativePath = requestPath === '/' ? '/index.html' : requestPath;
|
|
80
|
+
const normalized = path
|
|
81
|
+
.normalize(relativePath)
|
|
82
|
+
.replace(/^(\.\.(\/|\\|$))+/, '');
|
|
83
|
+
const candidate = path.join(uiDistDir, normalized);
|
|
84
|
+
const resolvedRoot = path.resolve(uiDistDir);
|
|
85
|
+
const resolvedCandidate = path.resolve(candidate);
|
|
86
|
+
if (
|
|
87
|
+
resolvedCandidate !== resolvedRoot &&
|
|
88
|
+
!resolvedCandidate.startsWith(resolvedRoot + path.sep)
|
|
89
|
+
) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return resolvedCandidate;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const readStaticFile = (filePath: string): Buffer | null => {
|
|
96
|
+
try {
|
|
97
|
+
const stat = fs.statSync(filePath);
|
|
98
|
+
if (!stat.isFile()) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return fs.readFileSync(filePath);
|
|
102
|
+
} catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export type ConsoleServerOptions = {
|
|
108
|
+
accessToken: string;
|
|
109
|
+
uiDistDir: string;
|
|
110
|
+
consoleDataOutputDir: string | null;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const sendNotFound = (response: http.ServerResponse): void => {
|
|
114
|
+
response.writeHead(404, {
|
|
115
|
+
'Content-Type': 'text/plain; charset=utf-8',
|
|
116
|
+
'Cache-Control': 'no-store',
|
|
117
|
+
});
|
|
118
|
+
response.end('Not Found');
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const sendUnauthorized = (response: http.ServerResponse): void => {
|
|
122
|
+
response.writeHead(401, {
|
|
123
|
+
'Content-Type': 'text/plain; charset=utf-8',
|
|
124
|
+
'Cache-Control': 'no-store',
|
|
125
|
+
});
|
|
126
|
+
response.end('Unauthorized');
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const serveBootstrapIndex = (response: http.ServerResponse): void => {
|
|
130
|
+
response.writeHead(200, {
|
|
131
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
132
|
+
'Cache-Control': 'no-store',
|
|
133
|
+
});
|
|
134
|
+
response.end(PLACEHOLDER_INDEX_HTML);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const handleConsoleRequest = (
|
|
138
|
+
options: ConsoleServerOptions,
|
|
139
|
+
request: http.IncomingMessage,
|
|
140
|
+
response: http.ServerResponse,
|
|
141
|
+
): void => {
|
|
142
|
+
const requestUrl = new URL(request.url ?? '/', 'http://localhost');
|
|
143
|
+
const requestPath = requestUrl.pathname;
|
|
144
|
+
|
|
145
|
+
if (hasDotSegment(requestPath)) {
|
|
146
|
+
sendNotFound(response);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (requiresToken(requestPath)) {
|
|
151
|
+
const providedToken = extractProvidedToken(
|
|
152
|
+
requestUrl.searchParams.get('k'),
|
|
153
|
+
request.headers[CONSOLE_TOKEN_HEADER],
|
|
154
|
+
);
|
|
155
|
+
if (!isTokenValid(options.accessToken, providedToken)) {
|
|
156
|
+
sendUnauthorized(response);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
sendNotFound(response);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (requestPath === '/' || requestPath === '/index.html') {
|
|
164
|
+
const indexFilePath = resolveStaticFilePath(
|
|
165
|
+
options.uiDistDir,
|
|
166
|
+
'/index.html',
|
|
167
|
+
);
|
|
168
|
+
const indexContent =
|
|
169
|
+
indexFilePath === null ? null : readStaticFile(indexFilePath);
|
|
170
|
+
if (indexContent === null) {
|
|
171
|
+
serveBootstrapIndex(response);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
response.writeHead(200, {
|
|
175
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
176
|
+
'Cache-Control': 'no-store',
|
|
177
|
+
});
|
|
178
|
+
response.end(indexContent);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const staticFilePath = resolveStaticFilePath(options.uiDistDir, requestPath);
|
|
183
|
+
if (staticFilePath === null) {
|
|
184
|
+
sendNotFound(response);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const staticContent = readStaticFile(staticFilePath);
|
|
188
|
+
if (staticContent === null) {
|
|
189
|
+
sendNotFound(response);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
response.writeHead(200, {
|
|
193
|
+
'Content-Type': contentTypeForPath(staticFilePath),
|
|
194
|
+
'Cache-Control': 'no-store',
|
|
195
|
+
});
|
|
196
|
+
response.end(staticContent);
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
export const createConsoleServer = (
|
|
200
|
+
options: ConsoleServerOptions,
|
|
201
|
+
): http.Server =>
|
|
202
|
+
http.createServer((request, response) => {
|
|
203
|
+
handleConsoleRequest(options, request, response);
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
export type StartConsoleServerOptions = ConsoleServerOptions & {
|
|
207
|
+
port: number;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export const startConsoleServer = (
|
|
211
|
+
options: StartConsoleServerOptions,
|
|
212
|
+
): Promise<http.Server> =>
|
|
213
|
+
new Promise((resolve, reject) => {
|
|
214
|
+
const server = createConsoleServer(options);
|
|
215
|
+
server.once('error', reject);
|
|
216
|
+
server.listen(options.port, () => {
|
|
217
|
+
server.removeListener('error', reject);
|
|
218
|
+
resolve(server);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAgFzB,eAAO,MAAM,OAAO,SAAgB,CAAC"}
|
|
@@ -18,6 +18,7 @@ export type ConfigFile = {
|
|
|
18
18
|
awLogStaleThresholdMinutes?: number;
|
|
19
19
|
labelsAsLlmAgentName?: string[];
|
|
20
20
|
changeTargetPathAliases?: Record<string, string>;
|
|
21
|
+
consoleAccessToken?: string;
|
|
21
22
|
};
|
|
22
23
|
export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
|
|
23
24
|
export declare const loadConfigFile: (configFilePath: string) => ConfigFile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/projectConfig.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"projectConfig.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/projectConfig.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAsDF,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CACH,CAAC;AAqBvE,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,KAAG,UAyDvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,EACd,aAAa,MAAM,KAClB,UAoEF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,cAAc,UAAU,EACxB,iBAAiB,UAAU,KAC1B,UAyED,CAAC;AAkBH,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,EAClB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CA0DvB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as http from 'http';
|
|
2
|
+
export declare const DEFAULT_CONSOLE_PORT = 9981;
|
|
3
|
+
export declare const CONSOLE_TOKEN_HEADER = "x-pv-token";
|
|
4
|
+
export declare const hasDotSegment: (requestPath: string) => boolean;
|
|
5
|
+
export declare const requiresToken: (requestPath: string) => boolean;
|
|
6
|
+
export declare const isTokenValid: (expectedToken: string, providedToken: string | null) => boolean;
|
|
7
|
+
export declare const extractProvidedToken: (queryToken: string | string[] | null, headerToken: string | string[] | undefined) => string | null;
|
|
8
|
+
export type ConsoleServerOptions = {
|
|
9
|
+
accessToken: string;
|
|
10
|
+
uiDistDir: string;
|
|
11
|
+
consoleDataOutputDir: string | null;
|
|
12
|
+
};
|
|
13
|
+
export declare const handleConsoleRequest: (options: ConsoleServerOptions, request: http.IncomingMessage, response: http.ServerResponse) => void;
|
|
14
|
+
export declare const createConsoleServer: (options: ConsoleServerOptions) => http.Server;
|
|
15
|
+
export type StartConsoleServerOptions = ConsoleServerOptions & {
|
|
16
|
+
port: number;
|
|
17
|
+
};
|
|
18
|
+
export declare const startConsoleServer: (options: StartConsoleServerOptions) => Promise<http.Server>;
|
|
19
|
+
//# sourceMappingURL=consoleServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consoleServer.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAmCjD,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,KAAG,OAGiB,CAAC;AAEtE,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,KAAG,OAGrB,CAAC;AAEhC,eAAO,MAAM,YAAY,GACvB,eAAe,MAAM,EACrB,eAAe,MAAM,GAAG,IAAI,KAC3B,OAAoE,CAAC;AAExE,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EACpC,aAAa,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,KACzC,MAAM,GAAG,IAQX,CAAC;AAuCF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AA0BF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,oBAAoB,EAC7B,SAAS,IAAI,CAAC,eAAe,EAC7B,UAAU,IAAI,CAAC,cAAc,KAC5B,IAwDF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,oBAAoB,KAC5B,IAAI,CAAC,MAGJ,CAAC;AAEL,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,GAAG;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,yBAAyB,KACjC,OAAO,CAAC,IAAI,CAAC,MAAM,CAQlB,CAAC"}
|