@wocker/ws 1.0.21 → 1.0.23
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 +8 -0
- package/lib/AppModule.js +46 -75
- package/lib/controllers/DebugController.d.ts +4 -2
- package/lib/controllers/DebugController.js +19 -11
- package/lib/controllers/ExperimentalController.d.ts +8 -0
- package/lib/controllers/ExperimentalController.js +77 -0
- package/lib/controllers/PluginController.d.ts +4 -5
- package/lib/controllers/PluginController.js +14 -59
- package/lib/controllers/PresetController.d.ts +9 -3
- package/lib/controllers/PresetController.js +61 -52
- package/lib/controllers/ProjectController.d.ts +7 -2
- package/lib/controllers/ProjectController.js +124 -94
- package/lib/controllers/index.d.ts +1 -3
- package/lib/controllers/index.js +1 -3
- package/lib/env.d.ts +2 -2
- package/lib/env.js +3 -3
- package/lib/main.js +16 -7
- package/lib/makes/GithubClient.d.ts +14 -0
- package/lib/makes/GithubClient.js +65 -0
- package/lib/makes/Logger.d.ts +1 -1
- package/lib/makes/Plugin.d.ts +5 -0
- package/lib/makes/Plugin.js +15 -0
- package/lib/makes/index.d.ts +1 -1
- package/lib/makes/index.js +1 -1
- package/lib/modules/app/index.d.ts +2 -0
- package/lib/{plugins/proxmox → modules/app}/index.js +6 -13
- package/lib/modules/docker/index.d.ts +8 -0
- package/lib/modules/docker/index.js +41 -0
- package/lib/modules/docker/services/ContainerService.d.ts +14 -0
- package/lib/modules/docker/services/ContainerService.js +115 -0
- package/lib/{services → modules/docker/services}/DockerService.d.ts +12 -5
- package/lib/{services → modules/docker/services}/DockerService.js +33 -117
- package/lib/modules/docker/services/ImageService.d.ts +18 -0
- package/lib/modules/docker/services/ImageService.js +68 -0
- package/lib/modules/docker/services/ModemService.d.ts +14 -0
- package/lib/modules/docker/services/ModemService.js +137 -0
- package/lib/modules/docker/services/ProtoService.d.ts +6 -0
- package/lib/modules/docker/services/ProtoService.js +20 -0
- package/lib/modules/index.d.ts +3 -0
- package/lib/{plugins → modules}/index.js +3 -3
- package/lib/modules/keystore/controllers/KeystoreController.d.ts +11 -0
- package/lib/modules/keystore/controllers/KeystoreController.js +106 -0
- package/lib/modules/keystore/index.d.ts +4 -0
- package/lib/{plugins/elastic-search → modules/keystore}/index.js +16 -9
- package/lib/modules/keystore/providers/FileKeystoreProvider.d.ts +16 -0
- package/lib/modules/keystore/providers/FileKeystoreProvider.js +97 -0
- package/lib/modules/keystore/providers/KeytarKeystoreProvider.d.ts +9 -0
- package/lib/modules/keystore/providers/KeytarKeystoreProvider.js +74 -0
- package/lib/modules/keystore/services/KeystoreService.d.ts +12 -0
- package/lib/modules/keystore/services/KeystoreService.js +70 -0
- package/lib/modules/keystore/types/FileKeystore.d.ts +17 -0
- package/lib/modules/keystore/types/FileKeystore.js +33 -0
- package/lib/modules/keystore/types/Keytar.d.ts +8 -0
- package/lib/modules/keystore/types/Keytar.js +2 -0
- package/lib/modules/keystore/utils/createEncryptionKey.d.ts +1 -0
- package/lib/modules/keystore/utils/createEncryptionKey.js +46 -0
- package/lib/modules/keystore/utils/createPasswordHash.d.ts +1 -0
- package/lib/modules/keystore/utils/createPasswordHash.js +20 -0
- package/lib/modules/keystore/utils/decrypt.d.ts +1 -0
- package/lib/modules/keystore/utils/decrypt.js +15 -0
- package/lib/modules/keystore/utils/encrypt.d.ts +1 -0
- package/lib/modules/keystore/utils/encrypt.js +19 -0
- package/lib/modules/keystore/utils/index.d.ts +5 -0
- package/lib/{services → modules/keystore/utils}/index.js +5 -10
- package/lib/modules/keystore/utils/verifyPasswordHash.d.ts +1 -0
- package/lib/modules/keystore/utils/verifyPasswordHash.js +9 -0
- package/lib/{controllers → modules/proxy/controllers}/CertController.d.ts +2 -1
- package/lib/{controllers → modules/proxy/controllers}/CertController.js +4 -3
- package/lib/{controllers → modules/proxy/controllers}/ProxyController.d.ts +4 -1
- package/lib/{controllers → modules/proxy/controllers}/ProxyController.js +46 -37
- package/lib/modules/proxy/index.d.ts +5 -0
- package/lib/modules/proxy/index.js +39 -0
- package/lib/{services → modules/proxy/services}/CertService.d.ts +3 -3
- package/lib/{services → modules/proxy/services}/CertService.js +11 -11
- package/lib/{services → modules/proxy/services}/ProxyService.d.ts +2 -2
- package/lib/{services → modules/proxy/services}/ProxyService.js +21 -13
- package/lib/repositories/PresetRepository.d.ts +23 -0
- package/lib/repositories/PresetRepository.js +115 -0
- package/lib/repositories/index.d.ts +1 -0
- package/lib/repositories/index.js +17 -0
- package/lib/services/AppConfigService.d.ts +6 -2
- package/lib/services/AppConfigService.js +60 -53
- package/lib/services/AppEventsService.d.ts +4 -4
- package/lib/services/AppEventsService.js +14 -10
- package/lib/services/LogService.d.ts +3 -1
- package/lib/services/LogService.js +12 -10
- package/lib/services/PluginService.d.ts +8 -2
- package/lib/services/PluginService.js +69 -16
- package/lib/services/PresetService.d.ts +9 -8
- package/lib/services/PresetService.js +145 -260
- package/lib/services/ProjectService.d.ts +8 -5
- package/lib/services/ProjectService.js +44 -18
- package/lib/utils/followProgress2.d.ts +1 -0
- package/lib/utils/followProgress2.js +63 -0
- package/lib/utils/index.d.ts +1 -4
- package/lib/utils/index.js +1 -4
- package/package.json +24 -15
- package/proto/buildkit.proto +55 -0
- package/proto/solver/pb/ops.proto +443 -0
- package/lib/controllers/ImageController.d.ts +0 -7
- package/lib/controllers/ImageController.js +0 -46
- package/lib/makes/FS.d.ts +0 -27
- package/lib/makes/FS.js +0 -284
- package/lib/makes/LineConvertStream.d.ts +0 -11
- package/lib/makes/LineConvertStream.js +0 -42
- package/lib/makes/Model.d.ts +0 -5
- package/lib/makes/Model.js +0 -12
- package/lib/plugins/MongodbPlugin.d.ts +0 -20
- package/lib/plugins/MongodbPlugin.js +0 -288
- package/lib/plugins/elastic-search/controllers/ElasticSearchController.d.ts +0 -10
- package/lib/plugins/elastic-search/controllers/ElasticSearchController.js +0 -91
- package/lib/plugins/elastic-search/index.d.ts +0 -2
- package/lib/plugins/index.d.ts +0 -3
- package/lib/plugins/proxmox/controllers/ProxmoxController.d.ts +0 -14
- package/lib/plugins/proxmox/controllers/ProxmoxController.js +0 -127
- package/lib/plugins/proxmox/index.d.ts +0 -2
- package/lib/services/index.d.ts +0 -10
- package/lib/utils/followProgress.d.ts +0 -1
- package/lib/utils/followProgress.js +0 -73
- package/lib/utils/volumeFormat.d.ts +0 -6
- package/lib/utils/volumeFormat.js +0 -8
- package/lib/utils/volumeParse.d.ts +0 -2
- package/lib/utils/volumeParse.js +0 -13
- package/presets/bun/Dockerfile +0 -11
- package/presets/bun/config.json +0 -4
- /package/lib/{utils/format-size-units.d.ts → modules/docker/utils/formatSizeUnits.d.ts} +0 -0
- /package/lib/{utils/format-size-units.js → modules/docker/utils/formatSizeUnits.js} +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ModemService = void 0;
|
|
13
|
+
const core_1 = require("@wocker/core");
|
|
14
|
+
const formatSizeUnits_1 = require("../utils/formatSizeUnits");
|
|
15
|
+
const ProtoService_1 = require("./ProtoService");
|
|
16
|
+
let ModemService = class ModemService extends core_1.ModemService {
|
|
17
|
+
constructor(protoService) {
|
|
18
|
+
super();
|
|
19
|
+
this.protoService = protoService;
|
|
20
|
+
}
|
|
21
|
+
get modem() {
|
|
22
|
+
if (!this._modem) {
|
|
23
|
+
const Modem = require("docker-modem");
|
|
24
|
+
this._modem = new Modem({
|
|
25
|
+
socketPath: "/var/run/docker.sock"
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return this._modem;
|
|
29
|
+
}
|
|
30
|
+
get docker() {
|
|
31
|
+
if (!this._docker) {
|
|
32
|
+
const Docker = require("dockerode");
|
|
33
|
+
this._docker = new Docker({
|
|
34
|
+
modem: this.modem
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return this._docker;
|
|
38
|
+
}
|
|
39
|
+
async attachStream(stream) {
|
|
40
|
+
if (process.stdin.isTTY) {
|
|
41
|
+
process.stdin.setRawMode(true);
|
|
42
|
+
}
|
|
43
|
+
process.stdin.resume();
|
|
44
|
+
process.stdin.setEncoding("utf8");
|
|
45
|
+
process.stdin.pipe(stream);
|
|
46
|
+
stream.setEncoding("utf8");
|
|
47
|
+
stream.pipe(process.stdout);
|
|
48
|
+
try {
|
|
49
|
+
await new Promise((resolve, reject) => {
|
|
50
|
+
stream.on("end", resolve);
|
|
51
|
+
stream.on("error", reject);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
process.stdin.pause();
|
|
56
|
+
if (process.stdin.isTTY) {
|
|
57
|
+
process.stdin.setRawMode(false);
|
|
58
|
+
}
|
|
59
|
+
process.stdin.unpipe(stream);
|
|
60
|
+
stream.unpipe(process.stdout);
|
|
61
|
+
}
|
|
62
|
+
return stream;
|
|
63
|
+
}
|
|
64
|
+
async followProgress(stream) {
|
|
65
|
+
let isEnded = false, line = 0;
|
|
66
|
+
const mapLines = {};
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
const handleEnd = () => {
|
|
69
|
+
if (!isEnded) {
|
|
70
|
+
resolve();
|
|
71
|
+
}
|
|
72
|
+
isEnded = true;
|
|
73
|
+
};
|
|
74
|
+
stream.on("data", (chunk) => {
|
|
75
|
+
const text = chunk.toString().replace(/}\s*\{/g, "},{"), items = JSON.parse(`[${text}]`);
|
|
76
|
+
for (const item of items) {
|
|
77
|
+
if (item.id === "moby.buildkit.trace") {
|
|
78
|
+
}
|
|
79
|
+
if (item.stream) {
|
|
80
|
+
process.stdout.write(`${item.stream}`);
|
|
81
|
+
line += item.stream.split("\n").length - 1;
|
|
82
|
+
}
|
|
83
|
+
else if (item.id) {
|
|
84
|
+
const { id, status, processDetail: { current, total, } = {} } = item;
|
|
85
|
+
if (typeof mapLines[id] === "undefined") {
|
|
86
|
+
mapLines[id] = line;
|
|
87
|
+
}
|
|
88
|
+
const targetLine = typeof mapLines[id] !== "undefined"
|
|
89
|
+
? mapLines[id]
|
|
90
|
+
: line;
|
|
91
|
+
const dy = line - targetLine;
|
|
92
|
+
if (dy > 0) {
|
|
93
|
+
process.stdout.write("\x1b[s");
|
|
94
|
+
process.stdout.write(`\x1b[${dy}A`);
|
|
95
|
+
}
|
|
96
|
+
process.stdout.write("\x1b[2K");
|
|
97
|
+
let str = `${id}: ${status}\n`;
|
|
98
|
+
if (status === "Downloading") {
|
|
99
|
+
const width = process.stdout.columns;
|
|
100
|
+
const sizeWidth = 19, totalWidth = width - id.length - status.length - sizeWidth - 7, currentWidth = Math.floor(totalWidth * (current / total)), formatSize = `${(0, formatSizeUnits_1.formatSizeUnits)(current)}/${(0, formatSizeUnits_1.formatSizeUnits)(total)}`;
|
|
101
|
+
str = `${id}: ${status} [${"█".repeat(currentWidth)}${"░".repeat(totalWidth - currentWidth)}] ${formatSize}\n`;
|
|
102
|
+
}
|
|
103
|
+
process.stdout.write(str);
|
|
104
|
+
if (dy > 0) {
|
|
105
|
+
process.stdout.write("\x1b[u");
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
line++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (typeof item.aux === "object") {
|
|
112
|
+
const str = `auxID: ${item.aux.ID}`;
|
|
113
|
+
process.stdout.write(`${str}\n`);
|
|
114
|
+
line += Math.ceil(str.length / process.stdout.columns);
|
|
115
|
+
}
|
|
116
|
+
else if (item.status) {
|
|
117
|
+
process.stdout.write(`${item.status}\n`);
|
|
118
|
+
line += Math.ceil(item.status.length / process.stdout.columns);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.info("Unexpected data", item);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
stream.on("end", handleEnd);
|
|
126
|
+
stream.on("close", handleEnd);
|
|
127
|
+
stream.on("error", (err) => {
|
|
128
|
+
reject(err);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
exports.ModemService = ModemService;
|
|
134
|
+
exports.ModemService = ModemService = __decorate([
|
|
135
|
+
(0, core_1.Injectable)("MODEM_SERVICE"),
|
|
136
|
+
__metadata("design:paramtypes", [ProtoService_1.ProtoService])
|
|
137
|
+
], ModemService);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProtoService = void 0;
|
|
4
|
+
const protobufjs_1 = require("protobufjs");
|
|
5
|
+
const env_1 = require("../../../env");
|
|
6
|
+
class ProtoService {
|
|
7
|
+
get root() {
|
|
8
|
+
if (!this._root) {
|
|
9
|
+
this._root = (0, protobufjs_1.loadSync)([
|
|
10
|
+
`${env_1.ROOT_DIR}/proto/solver/pb/ops.proto`,
|
|
11
|
+
`${env_1.ROOT_DIR}/proto/buildkit.proto`
|
|
12
|
+
]);
|
|
13
|
+
}
|
|
14
|
+
return this._root;
|
|
15
|
+
}
|
|
16
|
+
lookupType(path) {
|
|
17
|
+
return this.root.lookupType(path);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.ProtoService = ProtoService;
|
|
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./docker"), exports);
|
|
18
|
+
__exportStar(require("./keystore"), exports);
|
|
19
|
+
__exportStar(require("./proxy"), exports);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AppConfigService } from "../../../services/AppConfigService";
|
|
2
|
+
import { KeystoreService } from "../services/KeystoreService";
|
|
3
|
+
export declare class KeystoreController {
|
|
4
|
+
protected readonly appConfigService: AppConfigService;
|
|
5
|
+
protected readonly keystoreService: KeystoreService;
|
|
6
|
+
constructor(appConfigService: AppConfigService, keystoreService: KeystoreService);
|
|
7
|
+
init(provider?: string): Promise<void>;
|
|
8
|
+
add(name?: string, provider?: string): Promise<void>;
|
|
9
|
+
inspect(name?: string, provider?: string): Promise<string | undefined>;
|
|
10
|
+
delete(name?: string, provider?: string): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.KeystoreController = void 0;
|
|
16
|
+
const core_1 = require("@wocker/core");
|
|
17
|
+
const utils_1 = require("@wocker/utils");
|
|
18
|
+
const AppConfigService_1 = require("../../../services/AppConfigService");
|
|
19
|
+
const KeystoreService_1 = require("../services/KeystoreService");
|
|
20
|
+
let KeystoreController = class KeystoreController {
|
|
21
|
+
constructor(appConfigService, keystoreService) {
|
|
22
|
+
this.appConfigService = appConfigService;
|
|
23
|
+
this.keystoreService = keystoreService;
|
|
24
|
+
}
|
|
25
|
+
async init(provider) {
|
|
26
|
+
if (!provider) {
|
|
27
|
+
provider = await (0, utils_1.promptSelect)({
|
|
28
|
+
message: "Keystore provider",
|
|
29
|
+
type: "text",
|
|
30
|
+
options: ["file", "keytar"]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (!this.keystoreService.hasProvider(provider)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.appConfigService.config.keystore = provider;
|
|
37
|
+
this.appConfigService.save();
|
|
38
|
+
}
|
|
39
|
+
async add(name, provider) {
|
|
40
|
+
const value = await (0, utils_1.promptInput)({
|
|
41
|
+
message: "Secret value",
|
|
42
|
+
type: "password"
|
|
43
|
+
});
|
|
44
|
+
await this.keystoreService.provider(provider).set(name, value);
|
|
45
|
+
}
|
|
46
|
+
async inspect(name, provider) {
|
|
47
|
+
return this.keystoreService.provider(provider).get(name);
|
|
48
|
+
}
|
|
49
|
+
async delete(name, provider) {
|
|
50
|
+
await this.keystoreService.provider(provider).delete(name);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.KeystoreController = KeystoreController;
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, core_1.Command)("keystore:init"),
|
|
56
|
+
__param(0, (0, core_1.Option)("provider", {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Keystore provider name"
|
|
59
|
+
})),
|
|
60
|
+
__metadata("design:type", Function),
|
|
61
|
+
__metadata("design:paramtypes", [String]),
|
|
62
|
+
__metadata("design:returntype", Promise)
|
|
63
|
+
], KeystoreController.prototype, "init", null);
|
|
64
|
+
__decorate([
|
|
65
|
+
(0, core_1.Command)("secret:create [name]"),
|
|
66
|
+
(0, core_1.Description)("Adds secret value to keystore"),
|
|
67
|
+
__param(0, (0, core_1.Param)("name")),
|
|
68
|
+
__param(1, (0, core_1.Option)("provider", {
|
|
69
|
+
alias: "p",
|
|
70
|
+
type: "string",
|
|
71
|
+
description: "Provider name"
|
|
72
|
+
})),
|
|
73
|
+
__metadata("design:type", Function),
|
|
74
|
+
__metadata("design:paramtypes", [String, String]),
|
|
75
|
+
__metadata("design:returntype", Promise)
|
|
76
|
+
], KeystoreController.prototype, "add", null);
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, core_1.Command)("secret:inspect [name]"),
|
|
79
|
+
__param(0, (0, core_1.Param)("name")),
|
|
80
|
+
__param(1, (0, core_1.Option)("provider", {
|
|
81
|
+
type: "string",
|
|
82
|
+
alias: "p"
|
|
83
|
+
})),
|
|
84
|
+
__metadata("design:type", Function),
|
|
85
|
+
__metadata("design:paramtypes", [String, String]),
|
|
86
|
+
__metadata("design:returntype", Promise)
|
|
87
|
+
], KeystoreController.prototype, "inspect", null);
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, core_1.Command)("secret:rm [name]"),
|
|
90
|
+
(0, core_1.Description)("Removes secret value from keystore"),
|
|
91
|
+
__param(0, (0, core_1.Param)("name")),
|
|
92
|
+
__param(1, (0, core_1.Option)("provider", {
|
|
93
|
+
type: "string",
|
|
94
|
+
alias: "p",
|
|
95
|
+
description: "Provider name"
|
|
96
|
+
})),
|
|
97
|
+
__metadata("design:type", Function),
|
|
98
|
+
__metadata("design:paramtypes", [String, String]),
|
|
99
|
+
__metadata("design:returntype", Promise)
|
|
100
|
+
], KeystoreController.prototype, "delete", null);
|
|
101
|
+
exports.KeystoreController = KeystoreController = __decorate([
|
|
102
|
+
(0, core_1.Controller)(),
|
|
103
|
+
(0, core_1.Description)("Keystore commands"),
|
|
104
|
+
__metadata("design:paramtypes", [AppConfigService_1.AppConfigService,
|
|
105
|
+
KeystoreService_1.KeystoreService])
|
|
106
|
+
], KeystoreController);
|
|
@@ -6,17 +6,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
9
|
+
exports.KeystoreService = exports.KeystoreModule = void 0;
|
|
10
10
|
const core_1 = require("@wocker/core");
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const KeystoreController_1 = require("./controllers/KeystoreController");
|
|
12
|
+
const KeystoreService_1 = require("./services/KeystoreService");
|
|
13
|
+
Object.defineProperty(exports, "KeystoreService", { enumerable: true, get: function () { return KeystoreService_1.KeystoreService; } });
|
|
14
|
+
let KeystoreModule = class KeystoreModule {
|
|
13
15
|
};
|
|
14
|
-
exports.
|
|
15
|
-
exports.
|
|
16
|
-
(0, core_1.
|
|
17
|
-
name: "elastic-search",
|
|
16
|
+
exports.KeystoreModule = KeystoreModule;
|
|
17
|
+
exports.KeystoreModule = KeystoreModule = __decorate([
|
|
18
|
+
(0, core_1.Module)({
|
|
18
19
|
controllers: [
|
|
19
|
-
|
|
20
|
+
KeystoreController_1.KeystoreController
|
|
21
|
+
],
|
|
22
|
+
providers: [
|
|
23
|
+
KeystoreService_1.KeystoreService
|
|
24
|
+
],
|
|
25
|
+
exports: [
|
|
26
|
+
KeystoreService_1.KeystoreService
|
|
20
27
|
]
|
|
21
28
|
})
|
|
22
|
-
],
|
|
29
|
+
], KeystoreModule);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { KeystoreProvider } from "@wocker/core";
|
|
2
|
+
import { AppConfigService } from "../../../services/AppConfigService";
|
|
3
|
+
import { FileKeystore } from "../types/FileKeystore";
|
|
4
|
+
export declare class FileKeystoreProvider extends KeystoreProvider {
|
|
5
|
+
protected readonly appConfigService: AppConfigService;
|
|
6
|
+
protected password?: string;
|
|
7
|
+
protected encryptionKey?: Buffer;
|
|
8
|
+
protected _keystore?: FileKeystore;
|
|
9
|
+
constructor(appConfigService: AppConfigService);
|
|
10
|
+
protected get keystore(): FileKeystore;
|
|
11
|
+
protected get passwordHash(): string | undefined;
|
|
12
|
+
protected getEncryptionKey(): Promise<Buffer>;
|
|
13
|
+
get(key: string, defaultValue?: string): Promise<string | undefined>;
|
|
14
|
+
set(key: string, value: string): Promise<void>;
|
|
15
|
+
delete(key: string): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.FileKeystoreProvider = void 0;
|
|
13
|
+
const core_1 = require("@wocker/core");
|
|
14
|
+
const utils_1 = require("@wocker/utils");
|
|
15
|
+
const AppConfigService_1 = require("../../../services/AppConfigService");
|
|
16
|
+
const FileKeystore_1 = require("../types/FileKeystore");
|
|
17
|
+
const utils_2 = require("../utils");
|
|
18
|
+
let FileKeystoreProvider = class FileKeystoreProvider extends core_1.KeystoreProvider {
|
|
19
|
+
constructor(appConfigService) {
|
|
20
|
+
super();
|
|
21
|
+
this.appConfigService = appConfigService;
|
|
22
|
+
}
|
|
23
|
+
get keystore() {
|
|
24
|
+
if (!this._keystore) {
|
|
25
|
+
const fs = this.appConfigService.fs;
|
|
26
|
+
let data = {
|
|
27
|
+
secrets: {}
|
|
28
|
+
};
|
|
29
|
+
if (fs.exists("wocker.keystore.js")) {
|
|
30
|
+
try {
|
|
31
|
+
data = {
|
|
32
|
+
...require(fs.path("wocker.keystore.js"))
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
this._keystore = new class extends FileKeystore_1.FileKeystore {
|
|
39
|
+
save() {
|
|
40
|
+
if (!fs.exists()) {
|
|
41
|
+
fs.mkdir("");
|
|
42
|
+
}
|
|
43
|
+
fs.writeFile("wocker.keystore.js", this.toString());
|
|
44
|
+
}
|
|
45
|
+
}(data);
|
|
46
|
+
}
|
|
47
|
+
return this._keystore;
|
|
48
|
+
}
|
|
49
|
+
get passwordHash() {
|
|
50
|
+
return this.keystore.passwordHash;
|
|
51
|
+
}
|
|
52
|
+
async getEncryptionKey() {
|
|
53
|
+
if (!this.encryptionKey) {
|
|
54
|
+
const password = await (0, utils_1.promptInput)({
|
|
55
|
+
required: true,
|
|
56
|
+
min: 6,
|
|
57
|
+
max: 32,
|
|
58
|
+
message: "Keystore password",
|
|
59
|
+
type: "password",
|
|
60
|
+
validate: async (value) => {
|
|
61
|
+
if (typeof value !== "string" || !this.passwordHash || (0, utils_2.verifyPasswordHash)(value, this.passwordHash)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return "Invalid password";
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
if (!this.keystore.passwordHash) {
|
|
68
|
+
this.keystore.passwordHash = (0, utils_2.createPasswordHash)(password);
|
|
69
|
+
this.keystore.save();
|
|
70
|
+
}
|
|
71
|
+
this.encryptionKey = (0, utils_2.createEncryptionKey)(password, this.keystore.passwordHash);
|
|
72
|
+
}
|
|
73
|
+
return this.encryptionKey;
|
|
74
|
+
}
|
|
75
|
+
async get(key, defaultValue) {
|
|
76
|
+
const value = this.keystore.get(key);
|
|
77
|
+
if (!value) {
|
|
78
|
+
return defaultValue;
|
|
79
|
+
}
|
|
80
|
+
const encryptionKey = await this.getEncryptionKey();
|
|
81
|
+
return (0, utils_2.decrypt)(encryptionKey, value);
|
|
82
|
+
}
|
|
83
|
+
async set(key, value) {
|
|
84
|
+
const encryptionKey = await this.getEncryptionKey();
|
|
85
|
+
this.keystore.set(key, (0, utils_2.encrypt)(encryptionKey, value));
|
|
86
|
+
this.keystore.save();
|
|
87
|
+
}
|
|
88
|
+
async delete(key) {
|
|
89
|
+
this.keystore.delete(key);
|
|
90
|
+
this.keystore.save();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
exports.FileKeystoreProvider = FileKeystoreProvider;
|
|
94
|
+
exports.FileKeystoreProvider = FileKeystoreProvider = __decorate([
|
|
95
|
+
(0, core_1.Injectable)(),
|
|
96
|
+
__metadata("design:paramtypes", [AppConfigService_1.AppConfigService])
|
|
97
|
+
], FileKeystoreProvider);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { KeystoreProvider } from "@wocker/core";
|
|
2
|
+
import { Keytar } from "../types/Keytar";
|
|
3
|
+
export declare class KeytarKeystoreProvider extends KeystoreProvider {
|
|
4
|
+
protected _keytar?: any;
|
|
5
|
+
get(key: string, defaultValue?: string): Promise<string | undefined>;
|
|
6
|
+
set(key: string, value: string): Promise<void>;
|
|
7
|
+
delete(key: string): Promise<void>;
|
|
8
|
+
protected getKeytar(): Promise<Keytar>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.KeytarKeystoreProvider = void 0;
|
|
43
|
+
const core_1 = require("@wocker/core");
|
|
44
|
+
const env_1 = require("../../../env");
|
|
45
|
+
let KeytarKeystoreProvider = class KeytarKeystoreProvider extends core_1.KeystoreProvider {
|
|
46
|
+
async get(key, defaultValue) {
|
|
47
|
+
const keytar = await this.getKeytar();
|
|
48
|
+
const value = await keytar.getPassword(env_1.KEYTAR_SERVICE, key);
|
|
49
|
+
return value || defaultValue;
|
|
50
|
+
}
|
|
51
|
+
async set(key, value) {
|
|
52
|
+
const keytar = await this.getKeytar();
|
|
53
|
+
try {
|
|
54
|
+
await keytar.setPassword(env_1.KEYTAR_SERVICE, key, value);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.log(err.message);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async delete(key) {
|
|
61
|
+
const keytar = await this.getKeytar();
|
|
62
|
+
await keytar.deletePassword(env_1.KEYTAR_SERVICE, key);
|
|
63
|
+
}
|
|
64
|
+
async getKeytar() {
|
|
65
|
+
if (!this._keytar) {
|
|
66
|
+
this._keytar = await Promise.resolve().then(() => __importStar(require("keytar")));
|
|
67
|
+
}
|
|
68
|
+
return this._keytar;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
exports.KeytarKeystoreProvider = KeytarKeystoreProvider;
|
|
72
|
+
exports.KeytarKeystoreProvider = KeytarKeystoreProvider = __decorate([
|
|
73
|
+
(0, core_1.Injectable)()
|
|
74
|
+
], KeytarKeystoreProvider);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { KeystoreService as CoreKeystoreService, KeystoreProvider } from "@wocker/core";
|
|
2
|
+
import { AppConfigService } from "../../../services/AppConfigService";
|
|
3
|
+
export declare class KeystoreService extends CoreKeystoreService {
|
|
4
|
+
protected readonly appConfigService: AppConfigService;
|
|
5
|
+
protected providers: Map<string, KeystoreProvider>;
|
|
6
|
+
constructor(appConfigService: AppConfigService);
|
|
7
|
+
hasProvider(name: string): boolean;
|
|
8
|
+
provider(name?: string): KeystoreProvider;
|
|
9
|
+
get(keys: string | string[], byDefault?: string): Promise<string | undefined>;
|
|
10
|
+
set(key: string, value: string): Promise<void>;
|
|
11
|
+
registerProvider(name: string, provider: KeystoreProvider): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.KeystoreService = void 0;
|
|
13
|
+
const core_1 = require("@wocker/core");
|
|
14
|
+
const AppConfigService_1 = require("../../../services/AppConfigService");
|
|
15
|
+
const KeytarKeystoreProvider_1 = require("./../providers/KeytarKeystoreProvider");
|
|
16
|
+
const FileKeystoreProvider_1 = require("./../providers/FileKeystoreProvider");
|
|
17
|
+
let KeystoreService = class KeystoreService extends core_1.KeystoreService {
|
|
18
|
+
constructor(appConfigService) {
|
|
19
|
+
super();
|
|
20
|
+
this.appConfigService = appConfigService;
|
|
21
|
+
this.providers = new Map();
|
|
22
|
+
}
|
|
23
|
+
hasProvider(name) {
|
|
24
|
+
return ["file", "keytar"].includes(name);
|
|
25
|
+
}
|
|
26
|
+
provider(name) {
|
|
27
|
+
if (!name) {
|
|
28
|
+
name = this.appConfigService.config.keystore;
|
|
29
|
+
}
|
|
30
|
+
if (!name) {
|
|
31
|
+
name = "file";
|
|
32
|
+
}
|
|
33
|
+
switch (name) {
|
|
34
|
+
case "file":
|
|
35
|
+
return new FileKeystoreProvider_1.FileKeystoreProvider(this.appConfigService);
|
|
36
|
+
case "keytar":
|
|
37
|
+
return new KeytarKeystoreProvider_1.KeytarKeystoreProvider();
|
|
38
|
+
default:
|
|
39
|
+
throw new Error(`Unknown keystore provider "${name}"`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async get(keys, byDefault) {
|
|
43
|
+
const provider = this.provider();
|
|
44
|
+
if (Array.isArray(keys)) {
|
|
45
|
+
for (const key of keys) {
|
|
46
|
+
const value = await provider.get(key);
|
|
47
|
+
if (value) {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return byDefault;
|
|
52
|
+
}
|
|
53
|
+
return provider.get(keys, byDefault);
|
|
54
|
+
}
|
|
55
|
+
async set(key, value) {
|
|
56
|
+
const provider = this.provider();
|
|
57
|
+
await provider.set(key, value);
|
|
58
|
+
}
|
|
59
|
+
registerProvider(name, provider) {
|
|
60
|
+
if (this.providers.has(name)) {
|
|
61
|
+
throw new Error(`Provider ${name} already registered`);
|
|
62
|
+
}
|
|
63
|
+
this.providers.set(name, provider);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
exports.KeystoreService = KeystoreService;
|
|
67
|
+
exports.KeystoreService = KeystoreService = __decorate([
|
|
68
|
+
(0, core_1.Injectable)("KEYSTORE_SERVICE"),
|
|
69
|
+
__metadata("design:paramtypes", [AppConfigService_1.AppConfigService])
|
|
70
|
+
], KeystoreService);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type Secrets = Record<string, string>;
|
|
2
|
+
type Props = {
|
|
3
|
+
passwordHash?: string;
|
|
4
|
+
secrets?: Secrets;
|
|
5
|
+
};
|
|
6
|
+
export declare abstract class FileKeystore {
|
|
7
|
+
passwordHash?: string;
|
|
8
|
+
protected secrets: Secrets;
|
|
9
|
+
constructor(data: Props);
|
|
10
|
+
abstract save(): void;
|
|
11
|
+
get(key: string): string | undefined;
|
|
12
|
+
set(key: string, value: string): void;
|
|
13
|
+
delete(key: string): void;
|
|
14
|
+
toObject(): {};
|
|
15
|
+
toString(): string;
|
|
16
|
+
}
|
|
17
|
+
export {};
|