@guanjinke/artifact-client 1.5.1 → 1.6.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/README.md +30 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +6 -5
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/stored-client.d.ts +24 -0
- package/dist/cli/stored-client.d.ts.map +1 -0
- package/dist/cli/stored-client.js +59 -0
- package/dist/cli/stored-client.js.map +1 -0
- package/dist/cli/web.d.ts +23 -0
- package/dist/cli/web.d.ts.map +1 -0
- package/dist/cli/web.js +99 -0
- package/dist/cli/web.js.map +1 -0
- package/dist/environment/builder.d.ts.map +1 -1
- package/dist/environment/builder.js +21 -10
- package/dist/environment/builder.js.map +1 -1
- package/dist/environment/catalog.d.ts.map +1 -1
- package/dist/environment/catalog.js +18 -0
- package/dist/environment/catalog.js.map +1 -1
- package/dist/environment/config.d.ts.map +1 -1
- package/dist/environment/config.js +3 -1
- package/dist/environment/config.js.map +1 -1
- package/dist/environment/manager.d.ts +9 -0
- package/dist/environment/manager.d.ts.map +1 -1
- package/dist/environment/manager.js +32 -3
- package/dist/environment/manager.js.map +1 -1
- package/dist/environment/plan.d.ts +36 -0
- package/dist/environment/plan.d.ts.map +1 -1
- package/dist/environment/plan.js +52 -9
- package/dist/environment/plan.js.map +1 -1
- package/dist/environment/types.d.ts +7 -2
- package/dist/environment/types.d.ts.map +1 -1
- package/dist/environment/update.d.ts +2 -0
- package/dist/environment/update.d.ts.map +1 -1
- package/dist/environment/update.js +19 -10
- package/dist/environment/update.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/web/api.d.ts +23 -0
- package/dist/web/api.d.ts.map +1 -0
- package/dist/web/api.js +273 -0
- package/dist/web/api.js.map +1 -0
- package/dist/web/assets.d.ts +26 -0
- package/dist/web/assets.d.ts.map +1 -0
- package/dist/web/assets.js +87 -0
- package/dist/web/assets.js.map +1 -0
- package/dist/web/http.d.ts +41 -0
- package/dist/web/http.d.ts.map +1 -0
- package/dist/web/http.js +167 -0
- package/dist/web/http.js.map +1 -0
- package/dist/web/jobs.d.ts +69 -0
- package/dist/web/jobs.d.ts.map +1 -0
- package/dist/web/jobs.js +110 -0
- package/dist/web/jobs.js.map +1 -0
- package/dist/web/providers.d.ts +9 -0
- package/dist/web/providers.d.ts.map +1 -0
- package/dist/web/providers.js +17 -0
- package/dist/web/providers.js.map +1 -0
- package/dist/web/server.d.ts +41 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +134 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/static/app.js +59 -0
- package/dist/web/static/favicon.svg +12 -0
- package/dist/web/static/index.html +15 -0
- package/dist/web/static/styles.css +1263 -0
- package/dist/web/types.d.ts +52 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +3 -0
- package/dist/web/types.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,134 @@
|
|
|
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.tokenizedUrl = tokenizedUrl;
|
|
37
|
+
exports.startWebServer = startWebServer;
|
|
38
|
+
const http = __importStar(require("http"));
|
|
39
|
+
const config_manager_1 = require("../cli/config-manager");
|
|
40
|
+
const version_1 = require("../cli/version");
|
|
41
|
+
const manager_1 = require("../environment/manager");
|
|
42
|
+
const registry_1 = require("../environment/registry");
|
|
43
|
+
const root_1 = require("../environment/root");
|
|
44
|
+
const update_1 = require("../environment/update");
|
|
45
|
+
const api_1 = require("./api");
|
|
46
|
+
const assets_1 = require("./assets");
|
|
47
|
+
const http_1 = require("./http");
|
|
48
|
+
const jobs_1 = require("./jobs");
|
|
49
|
+
const providers_1 = require("./providers");
|
|
50
|
+
const defaultBodyLimit = 64 * 1024;
|
|
51
|
+
/** The token lives in the URL fragment: fragments are not sent in requests. */
|
|
52
|
+
function tokenizedUrl(url, token) {
|
|
53
|
+
return `${url}#token=${encodeURIComponent(token)}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Start the local web interface.
|
|
57
|
+
*
|
|
58
|
+
* It binds loopback only, requires the token for every API call, rejects any
|
|
59
|
+
* request whose Host header is not one of its own loopback names (DNS
|
|
60
|
+
* rebinding) and never sends a CORS header, so a page on another origin can
|
|
61
|
+
* neither read a reply nor send the custom token header.
|
|
62
|
+
*/
|
|
63
|
+
async function startWebServer(options) {
|
|
64
|
+
if (typeof options.token !== 'string' || options.token.length < 16)
|
|
65
|
+
throw new Error('The web token must be at least 16 characters: use --token or let `afm web` generate one.');
|
|
66
|
+
const port = options.port ?? 0;
|
|
67
|
+
if (!Number.isInteger(port) || port < 0 || port > 65535)
|
|
68
|
+
throw new Error('Port must be an integer between 0 and 65535.');
|
|
69
|
+
const host = options.host ?? '127.0.0.1';
|
|
70
|
+
const assetsDirectory = options.assetsDirectory ?? (0, assets_1.defaultAssetDirectory)();
|
|
71
|
+
await (0, assets_1.verifyAssets)(assetsDirectory);
|
|
72
|
+
// lifecycle stages are reported by the job itself (the page is the console);
|
|
73
|
+
// create and update receive the job's progress sink per call.
|
|
74
|
+
const manager = options.manager ?? new manager_1.EnvironmentManager();
|
|
75
|
+
const context = {
|
|
76
|
+
token: options.token,
|
|
77
|
+
manager,
|
|
78
|
+
updater: options.updater ?? new update_1.EnvironmentUpdater(),
|
|
79
|
+
registry: options.registry ?? new registry_1.EnvironmentRegistry(),
|
|
80
|
+
providers: options.providers ?? (0, providers_1.storedProviders)(),
|
|
81
|
+
state: options.state ?? (() => ({ environmentRoot: (0, config_manager_1.getEnvironmentRoot)() ?? null, version: (0, version_1.getPackageVersion)(), platform: process.platform })),
|
|
82
|
+
jobs: options.jobs ?? new jobs_1.JobStore(),
|
|
83
|
+
assetsDirectory,
|
|
84
|
+
maxBodyBytes: options.maxBodyBytes ?? defaultBodyLimit,
|
|
85
|
+
resolveRoot: options.resolveRoot ?? defaultResolveRoot,
|
|
86
|
+
};
|
|
87
|
+
// Until the port is known the Host allowlist cannot be built, so the listener
|
|
88
|
+
// answers a startup reply and is swapped for the real handler on 'listening'.
|
|
89
|
+
let handler = (request, response) => {
|
|
90
|
+
(0, http_1.sendJson)(response, 503, { error: 'Server is starting.' });
|
|
91
|
+
};
|
|
92
|
+
const server = http.createServer((request, response) => handler(request, response));
|
|
93
|
+
await new Promise((resolve, reject) => {
|
|
94
|
+
const onError = (error) => { server.removeListener('listening', onListening); reject(error); };
|
|
95
|
+
const onListening = () => { server.removeListener('error', onError); resolve(); };
|
|
96
|
+
server.once('error', onError);
|
|
97
|
+
server.once('listening', onListening);
|
|
98
|
+
server.listen({ host, port });
|
|
99
|
+
});
|
|
100
|
+
const bound = server.address().port;
|
|
101
|
+
const allowedHosts = new Set([`${host}:${bound}`, `127.0.0.1:${bound}`, `localhost:${bound}`]);
|
|
102
|
+
handler = (0, api_1.createRequestHandler)({ ...context, allowedHosts });
|
|
103
|
+
const url = `http://${host}:${bound}/`;
|
|
104
|
+
return {
|
|
105
|
+
host,
|
|
106
|
+
port: bound,
|
|
107
|
+
url,
|
|
108
|
+
tokenUrl: tokenizedUrl(url, options.token),
|
|
109
|
+
jobs: context.jobs,
|
|
110
|
+
close: () => new Promise((resolve, reject) => {
|
|
111
|
+
// Idle keep-alive sockets would otherwise keep the process alive after Ctrl+C.
|
|
112
|
+
server.closeIdleConnections();
|
|
113
|
+
server.close(error => (error ? reject(error) : resolve()));
|
|
114
|
+
server.closeAllConnections();
|
|
115
|
+
}),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve the target directory of a create request.
|
|
120
|
+
*
|
|
121
|
+
* This mirrors `create-env`: an explicit directory wins, otherwise the
|
|
122
|
+
* configured environment root is used, and the root container is created for a
|
|
123
|
+
* real run (never for a dry run).
|
|
124
|
+
*/
|
|
125
|
+
async function defaultResolveRoot(name, requested, dryRun) {
|
|
126
|
+
const configured = (0, config_manager_1.getEnvironmentRoot)();
|
|
127
|
+
const root = requested ?? (configured === undefined ? undefined : (0, root_1.resolveNamedEnvironmentDirectory)(configured, name));
|
|
128
|
+
if (root === undefined)
|
|
129
|
+
throw new http_1.HttpError(400, 'No environment root configured: pass "root", or set one with `afm env root <path>`.');
|
|
130
|
+
if (configured !== undefined && !dryRun)
|
|
131
|
+
await (0, root_1.resolveEnvironmentContainer)(configured, (0, config_manager_1.getConfigDir)(), { create: true });
|
|
132
|
+
return root;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
|