@expo/devcert 1.1.1 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/certificate-authority.js +24 -24
- package/dist/certificates.js +15 -15
- package/dist/constants.js +27 -26
- package/dist/index.d.ts +3 -4
- package/dist/index.js +24 -24
- package/dist/platforms/darwin.js +28 -28
- package/dist/platforms/index.js +1 -1
- package/dist/platforms/linux.js +33 -33
- package/dist/platforms/shared.js +18 -18
- package/dist/platforms/win32.js +15 -16
- package/dist/user-interface.js +4 -4
- package/dist/utils.d.ts +3 -4
- package/dist/utils.js +11 -11
- package/package.json +4 -7
- package/src/index.ts +2 -3
- package/src/platforms/win32.ts +3 -4
package/dist/platforms/win32.js
CHANGED
|
@@ -4,11 +4,10 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
5
5
|
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
6
6
|
const fs_1 = require("fs");
|
|
7
|
-
const rimraf_1 = require("rimraf");
|
|
8
7
|
const shared_1 = require("./shared");
|
|
9
8
|
const utils_1 = require("../utils");
|
|
10
9
|
const user_interface_1 = tslib_1.__importDefault(require("../user-interface"));
|
|
11
|
-
const debug = debug_1.default('devcert:platforms:windows');
|
|
10
|
+
const debug = (0, debug_1.default)('devcert:platforms:windows');
|
|
12
11
|
let encryptionKey;
|
|
13
12
|
class WindowsPlatform {
|
|
14
13
|
constructor() {
|
|
@@ -22,12 +21,12 @@ class WindowsPlatform {
|
|
|
22
21
|
* machine to try updating the Firefox store is basically a nightmare, so we
|
|
23
22
|
* don't even try it - we just bail out to the GUI.
|
|
24
23
|
*/
|
|
25
|
-
addToTrustStores(
|
|
26
|
-
return tslib_1.__awaiter(this,
|
|
24
|
+
addToTrustStores(certificatePath_1) {
|
|
25
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (certificatePath, options = {}) {
|
|
27
26
|
// IE, Chrome, system utils
|
|
28
27
|
debug('adding devcert root to Windows OS trust store');
|
|
29
28
|
try {
|
|
30
|
-
utils_1.run('certutil', ['-addstore', '-user', 'root', certificatePath]);
|
|
29
|
+
(0, utils_1.run)('certutil', ['-addstore', '-user', 'root', certificatePath]);
|
|
31
30
|
}
|
|
32
31
|
catch (e) {
|
|
33
32
|
e.output.map((buffer) => {
|
|
@@ -39,7 +38,7 @@ class WindowsPlatform {
|
|
|
39
38
|
debug('adding devcert root to Firefox trust store');
|
|
40
39
|
// Firefox (don't even try NSS certutil, no easy install for Windows)
|
|
41
40
|
try {
|
|
42
|
-
yield shared_1.openCertificateInFirefox('start firefox', certificatePath);
|
|
41
|
+
yield (0, shared_1.openCertificateInFirefox)('start firefox', certificatePath);
|
|
43
42
|
}
|
|
44
43
|
catch (_a) {
|
|
45
44
|
debug('Error opening Firefox, most likely Firefox is not installed');
|
|
@@ -50,7 +49,7 @@ class WindowsPlatform {
|
|
|
50
49
|
debug('removing devcert root from Windows OS trust store');
|
|
51
50
|
try {
|
|
52
51
|
console.warn('Removing old certificates from trust stores. You may be prompted to grant permission for this. It\'s safe to delete old devcert certificates.');
|
|
53
|
-
utils_1.run('certutil', ['-delstore', '-user', 'root', 'devcert']);
|
|
52
|
+
(0, utils_1.run)('certutil', ['-delstore', '-user', 'root', 'devcert']);
|
|
54
53
|
}
|
|
55
54
|
catch (e) {
|
|
56
55
|
debug(`failed to remove ${certificatePath} from Windows OS trust store, continuing. ${e.toString()}`);
|
|
@@ -58,25 +57,25 @@ class WindowsPlatform {
|
|
|
58
57
|
}
|
|
59
58
|
addDomainToHostFileIfMissing(domain) {
|
|
60
59
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
let hostsFileContents = fs_1.readFileSync(this.HOST_FILE_PATH, 'utf8');
|
|
60
|
+
let hostsFileContents = (0, fs_1.readFileSync)(this.HOST_FILE_PATH, 'utf8');
|
|
62
61
|
if (!hostsFileContents.includes(domain)) {
|
|
63
|
-
yield utils_1.sudo(`echo 127.0.0.1 ${domain} >> ${this.HOST_FILE_PATH}`);
|
|
62
|
+
yield (0, utils_1.sudo)(`echo 127.0.0.1 ${domain} >> ${this.HOST_FILE_PATH}`);
|
|
64
63
|
}
|
|
65
64
|
});
|
|
66
65
|
}
|
|
67
66
|
deleteProtectedFiles(filepath) {
|
|
68
|
-
shared_1.assertNotTouchingFiles(filepath, 'delete');
|
|
69
|
-
|
|
67
|
+
(0, shared_1.assertNotTouchingFiles)(filepath, 'delete');
|
|
68
|
+
(0, fs_1.rmSync)(filepath, { force: true, recursive: true });
|
|
70
69
|
}
|
|
71
70
|
readProtectedFile(filepath) {
|
|
72
71
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
shared_1.assertNotTouchingFiles(filepath, 'read');
|
|
72
|
+
(0, shared_1.assertNotTouchingFiles)(filepath, 'read');
|
|
74
73
|
if (!encryptionKey) {
|
|
75
74
|
encryptionKey = yield user_interface_1.default.getWindowsEncryptionPassword();
|
|
76
75
|
}
|
|
77
76
|
// Try to decrypt the file
|
|
78
77
|
try {
|
|
79
|
-
return this.decrypt(fs_1.readFileSync(filepath, 'utf8'), encryptionKey);
|
|
78
|
+
return this.decrypt((0, fs_1.readFileSync)(filepath, 'utf8'), encryptionKey);
|
|
80
79
|
}
|
|
81
80
|
catch (e) {
|
|
82
81
|
// If it's a bad password, clear the cached copy and retry
|
|
@@ -90,12 +89,12 @@ class WindowsPlatform {
|
|
|
90
89
|
}
|
|
91
90
|
writeProtectedFile(filepath, contents) {
|
|
92
91
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
shared_1.assertNotTouchingFiles(filepath, 'write');
|
|
92
|
+
(0, shared_1.assertNotTouchingFiles)(filepath, 'write');
|
|
94
93
|
if (!encryptionKey) {
|
|
95
94
|
encryptionKey = yield user_interface_1.default.getWindowsEncryptionPassword();
|
|
96
95
|
}
|
|
97
96
|
let encryptedContents = this.encrypt(contents, encryptionKey);
|
|
98
|
-
fs_1.writeFileSync(filepath, encryptedContents);
|
|
97
|
+
(0, fs_1.writeFileSync)(filepath, encryptedContents);
|
|
99
98
|
});
|
|
100
99
|
}
|
|
101
100
|
encrypt(text, key) {
|
|
@@ -108,4 +107,4 @@ class WindowsPlatform {
|
|
|
108
107
|
}
|
|
109
108
|
}
|
|
110
109
|
exports.default = WindowsPlatform;
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luMzIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBsYXRmb3Jtcy93aW4zMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwREFBZ0M7QUFDaEMsNERBQTRCO0FBQzVCLDJCQUFnRjtBQUVoRixxQ0FBNEU7QUFFNUUsb0NBQXFDO0FBQ3JDLCtFQUFtQztBQUVuQyxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVcsRUFBQywyQkFBMkIsQ0FBQyxDQUFDO0FBRXZELElBQUksYUFBcUIsQ0FBQztBQUUxQixNQUFxQixlQUFlO0lBQXBDO1FBRVUsbUJBQWMsR0FBRyw0Q0FBNEMsQ0FBQztJQTBGeEUsQ0FBQztJQXhGQzs7Ozs7OztPQU9HO0lBQ0csZ0JBQWdCO3FFQUFDLGVBQXVCLEVBQUUsVUFBbUIsRUFBRTtZQUNuRSwyQkFBMkI7WUFDM0IsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUE7WUFDdEQsSUFBSSxDQUFDO2dCQUNILElBQUEsV0FBRyxFQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtvQkFDOUIsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO1lBQ25ELHFFQUFxRTtZQUNyRSxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFBLGlDQUF3QixFQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQUMsV0FBTSxDQUFDO2dCQUNQLEtBQUssQ0FB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QUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxPQUFPLENBQUMsU0FBaUIsRUFBRSxHQUFXO1FBQzVDLElBQUksUUFBUSxHQUFHLGdCQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUUsQ0FBQztDQUVGO0FBNUZELGtDQTRGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBybVN5bmMgYXMgcm0sIHdyaXRlRmlsZVN5bmMgYXMgd3JpdGUsIHJlYWRGaWxlU3luYyBhcyByZWFkIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IGFzc2VydE5vdFRvdWNoaW5nRmlsZXMsIG9wZW5DZXJ0aWZpY2F0ZUluRmlyZWZveCB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnLic7XG5pbXBvcnQgeyBydW4sIHN1ZG8gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgVUkgZnJvbSAnLi4vdXNlci1pbnRlcmZhY2UnO1xuXG5jb25zdCBkZWJ1ZyA9IGNyZWF0ZURlYnVnKCdkZXZjZXJ0OnBsYXRmb3Jtczp3aW5kb3dzJyk7XG5cbmxldCBlbmNyeXB0aW9uS2V5OiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbmRvd3NQbGF0Zm9ybSBpbXBsZW1lbnRzIFBsYXRmb3JtIHtcblxuICBwcml2YXRlIEhPU1RfRklMRV9QQVRIID0gJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcRHJpdmVyc1xcXFxldGNcXFxcaG9zdHMnO1xuXG4gIC8qKlxuICAgKiBXaW5kb3dzIGlzIGF0IGxlYXN0IHNpbXBsZS4gTGlrZSBtYWNPUywgbW9zdCBhcHBsaWNhdGlvbnMgd2lsbCBkZWxlZ2F0ZSB0b1xuICAgKiB0aGUgc3lzdGVtIHRydXN0IHN0b3JlLCB3aGljaCBpcyB1cGRhdGVkIHdpdGggdGhlIGNvbmZ1c2luZ2x5IG5hbWVkXG4gICAqIGBjZXJ0dXRpbGAgZXhlIChub3QgdGhlIHNhbWUgYXMgdGhlIE5TUy9Nb3ppbGxhIGNlcnR1dGlsKS4gRmlyZWZveCBkb2VzIGl0J3NcbiAgICogb3duIHRoaW5nIGFzIHVzdWFsLCBhbmQgZ2V0dGluZyBhIGNvcHkgb2YgTlNTIGNlcnR1dGlsIG9udG8gdGhlIFdpbmRvd3NcbiAgICogbWFjaGluZSB0byB0cnkgdXBkYXRpbmcgdGhlIEZpcmVmb3ggc3RvcmUgaXMgYmFzaWNhbGx5IGEgbmlnaHRtYXJlLCBzbyB3ZVxuICAgKiBkb24ndCBldmVuIHRyeSBpdCAtIHdlIGp1c3QgYmFpbCBvdXQgdG8gdGhlIEdVSS5cbiAgICovXG4gIGFzeW5jIGFkZFRvVHJ1c3RTdG9yZXMoY2VydGlmaWNhdGVQYXRoOiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElFLCBDaHJvbWUsIHN5c3RlbSB1dGlsc1xuICAgIGRlYnVnKCdhZGRpbmcgZGV2Y2VydCByb290IHRvIFdpbmRvd3MgT1MgdHJ1c3Qgc3RvcmUnKVxuICAgIHRyeSB7XG4gICAgICBydW4oJ2NlcnR1dGlsJywgWyctYWRkc3RvcmUnLCAnLXVzZXInLCAncm9vdCcsIGNlcnRpZmljYXRlUGF0aF0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUub3V0cHV0Lm1hcCgoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKGJ1ZmZlcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGJ1ZmZlci50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGRlYnVnKCdhZGRpbmcgZGV2Y2VydCByb290IHRvIEZpcmVmb3ggdHJ1c3Qgc3RvcmUnKVxuICAgIC8vIEZpcmVmb3ggKGRvbid0IGV2ZW4gdHJ5IE5TUyBjZXJ0dXRpbCwgbm8gZWFzeSBpbnN0YWxsIGZvciBXaW5kb3dzKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcGVuQ2VydGlmaWNhdGVJbkZpcmVmb3goJ3N0YXJ0IGZpcmVmb3gnLCBjZXJ0aWZpY2F0ZVBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgZGVidWcoJ0Vycm9yIG9wZW5pbmcgRmlyZWZveCwgbW9zdCBsaWtlbHkgRmlyZWZveCBpcyBub3QgaW5zdGFsbGVkJyk7XG4gICAgfVxuICB9XG4gIFxuICByZW1vdmVGcm9tVHJ1c3RTdG9yZXMoY2VydGlmaWNhdGVQYXRoOiBzdHJpbmcpIHtcbiAgICBkZWJ1ZygncmVtb3ZpbmcgZGV2Y2VydCByb290IGZyb20gV2luZG93cyBPUyB0cnVzdCBzdG9yZScpO1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1JlbW92aW5nIG9sZCBjZXJ0aWZpY2F0ZXMgZnJvbSB0cnVzdCBzdG9yZXMuIFlvdSBtYXkgYmUgcHJvbXB0ZWQgdG8gZ3JhbnQgcGVybWlzc2lvbiBmb3IgdGhpcy4gSXRcXCdzIHNhZmUgdG8gZGVsZXRlIG9sZCBkZXZjZXJ0IGNlcnRpZmljYXRlcy4nKTtcbiAgICAgIHJ1bignY2VydHV0aWwnLCBbJy1kZWxzdG9yZScsICctdXNlcicsICdyb290JywgJ2RldmNlcnQnXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoYGZhaWxlZCB0byByZW1vdmUgJHsgY2VydGlmaWNhdGVQYXRoIH0gZnJvbSBXaW5kb3dzIE9TIHRydXN0IHN0b3JlLCBjb250aW51aW5nLiAkeyBlLnRvU3RyaW5nKCkgfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkRG9tYWluVG9Ib3N0RmlsZUlmTWlzc2luZyhkb21haW46IHN0cmluZykge1xuICAgIGxldCBob3N0c0ZpbGVDb250ZW50cyA9IHJlYWQodGhpcy5IT1NUX0ZJTEVfUEFUSCwgJ3V0ZjgnKTtcbiAgICBpZiAoIWhvc3RzRmlsZUNvbnRlbnRzLmluY2x1ZGVzKGRvbWFpbikpIHtcbiAgICAgIGF3YWl0IHN1ZG8oYGVjaG8gMTI3LjAuMC4xICAkeyBkb21haW4gfSA+PiAkeyB0aGlzLkhPU1RfRklMRV9QQVRIIH1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIGRlbGV0ZVByb3RlY3RlZEZpbGVzKGZpbGVwYXRoOiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RUb3VjaGluZ0ZpbGVzKGZpbGVwYXRoLCAnZGVsZXRlJyk7XG4gICAgcm0oZmlsZXBhdGgsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRQcm90ZWN0ZWRGaWxlKGZpbGVwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGFzc2VydE5vdFRvdWNoaW5nRmlsZXMoZmlsZXBhdGgsICdyZWFkJyk7XG4gICAgaWYgKCFlbmNyeXB0aW9uS2V5KSB7XG4gICAgICBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgVUkuZ2V0V2luZG93c0VuY3J5cHRpb25QYXNzd29yZCgpO1xuICAgIH1cbiAgICAvLyBUcnkgdG8gZGVjcnlwdCB0aGUgZmlsZVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWNyeXB0KHJlYWQoZmlsZXBhdGgsICd1dGY4JyksIGVuY3J5cHRpb25LZXkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIGl0J3MgYSBiYWQgcGFzc3dvcmQsIGNsZWFyIHRoZSBjYWNoZWQgY29weSBhbmQgcmV0cnlcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5kZXhPZignYmFkIGRlY3J5cHQnKSA+PSAtMSkge1xuICAgICAgICBlbmNyeXB0aW9uS2V5ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVhZFByb3RlY3RlZEZpbGUoZmlsZXBhdGgpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB3cml0ZVByb3RlY3RlZEZpbGUoZmlsZXBhdGg6IHN0cmluZywgY29udGVudHM6IHN0cmluZykge1xuICAgIGFzc2VydE5vdFRvdWNoaW5nRmlsZXMoZmlsZXBhdGgsICd3cml0ZScpO1xuICAgIGlmICghZW5jcnlwdGlvbktleSkge1xuICAgICAgZW5jcnlwdGlvbktleSA9IGF3YWl0IFVJLmdldFdpbmRvd3NFbmNyeXB0aW9uUGFzc3dvcmQoKTtcbiAgICB9XG4gICAgbGV0IGVuY3J5cHRlZENvbnRlbnRzID0gdGhpcy5lbmNyeXB0KGNvbnRlbnRzLCBlbmNyeXB0aW9uS2V5KTtcbiAgICB3cml0ZShmaWxlcGF0aCwgZW5jcnlwdGVkQ29udGVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmNyeXB0KHRleHQ6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcignYWVzMjU2JywgbmV3IEJ1ZmZlcihrZXkpKTtcbiAgICByZXR1cm4gY2lwaGVyLnVwZGF0ZSh0ZXh0LCAndXRmOCcsICdoZXgnKSArIGNpcGhlci5maW5hbCgnaGV4Jyk7XG4gIH1cblxuICBwcml2YXRlIGRlY3J5cHQoZW5jcnlwdGVkOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyKCdhZXMyNTYnLCBuZXcgQnVmZmVyKGtleSkpO1xuICAgIHJldHVybiBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkLCAnaGV4JywgJ3V0ZjgnKSArIGRlY2lwaGVyLmZpbmFsKCd1dGY4Jyk7XG4gIH1cblxufVxuIl19
|
package/dist/user-interface.js
CHANGED
|
@@ -6,7 +6,7 @@ const utils_1 = require("./utils");
|
|
|
6
6
|
const DefaultUI = {
|
|
7
7
|
getWindowsEncryptionPassword() {
|
|
8
8
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
9
|
-
return yield password_prompt_1.default('devcert password (http://bit.ly/devcert-what-password?):');
|
|
9
|
+
return yield (0, password_prompt_1.default)('devcert password (http://bit.ly/devcert-what-password?):');
|
|
10
10
|
});
|
|
11
11
|
},
|
|
12
12
|
warnChromeOnLinuxWithoutCertutil() {
|
|
@@ -44,7 +44,7 @@ const DefaultUI = {
|
|
|
44
44
|
|
|
45
45
|
<Press any key to launch Firefox wizard>
|
|
46
46
|
`);
|
|
47
|
-
yield utils_1.waitForUser();
|
|
47
|
+
yield (0, utils_1.waitForUser)();
|
|
48
48
|
});
|
|
49
49
|
},
|
|
50
50
|
firefoxWizardPromptPage(certificateURL) {
|
|
@@ -68,9 +68,9 @@ const DefaultUI = {
|
|
|
68
68
|
|
|
69
69
|
<Press any key to continue>
|
|
70
70
|
`);
|
|
71
|
-
yield utils_1.waitForUser();
|
|
71
|
+
yield (0, utils_1.waitForUser)();
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
75
|
exports.default = DefaultUI;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInVzZXItaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhFQUE2QztBQUM3QyxtQ0FBc0M7QUFXdEMsTUFBTSxTQUFTLEdBQWtCO0lBQ3pCLDRCQUE0Qjs7WUFDaEMsT0FBTyxNQUFNLElBQUEseUJBQWMsRUFBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzFGLENBQUM7S0FBQTtJQUNLLGdDQUFnQzs7WUFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7O0tBTVosQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBQ0ssNEJBQTRCOztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDeEQsQ0FBQztLQUFBO0lBQ0ssa0JBQWtCLENBQUMsZUFBZTs7WUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7OztRQVVQLGVBQWdCOzs7Ozs7S0FNcEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFBLG1CQUFXLEdBQUUsQ0FBQztRQUN0QixDQUFDO0tBQUE7SUFDSyx1QkFBdUIsQ0FBQyxjQUFzQjs7WUFDbEQsT0FBTzs7O3VEQUc0QyxjQUFjOzs7S0FHaEUsQ0FBQztRQUNKLENBQUM7S0FBQTtJQUNLLG9CQUFvQjs7WUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7OztLQU9YLENBQUMsQ0FBQTtZQUNGLE1BQU0sSUFBQSxtQkFBVyxHQUFFLENBQUM7UUFDdEIsQ0FBQztLQUFBO0NBQ0YsQ0FBQTtBQUVELGtCQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXNzd29yZFByb21wdCBmcm9tICdwYXNzd29yZC1wcm9tcHQnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXIgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VySW50ZXJmYWNlIHtcbiAgZ2V0V2luZG93c0VuY3J5cHRpb25QYXNzd29yZCgpOiBQcm9taXNlPHN0cmluZz47XG4gIHdhcm5DaHJvbWVPbkxpbnV4V2l0aG91dENlcnR1dGlsKCk6IFByb21pc2U8dm9pZD47XG4gIGNsb3NlRmlyZWZveEJlZm9yZUNvbnRpbnVpbmcoKTogUHJvbWlzZTx2b2lkPjtcbiAgc3RhcnRGaXJlZm94V2l6YXJkKGNlcnRpZmljYXRlSG9zdDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgZmlyZWZveFdpemFyZFByb21wdFBhZ2UoY2VydGlmaWNhdGVVUkw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgd2FpdEZvckZpcmVmb3hXaXphcmQoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgRGVmYXVsdFVJOiBVc2VySW50ZXJmYWNlID0ge1xuICBhc3luYyBnZXRXaW5kb3dzRW5jcnlwdGlvblBhc3N3b3JkKCkge1xuICAgIHJldHVybiBhd2FpdCBwYXNzd29yZFByb21wdCgnZGV2Y2VydCBwYXNzd29yZCAoaHR0cDovL2JpdC5seS9kZXZjZXJ0LXdoYXQtcGFzc3dvcmQ/KTonKTtcbiAgfSxcbiAgYXN5bmMgd2FybkNocm9tZU9uTGludXhXaXRob3V0Q2VydHV0aWwoKSB7XG4gICAgY29uc29sZS53YXJuKGBcbiAgICAgIFdBUk5JTkc6IEl0IGxvb2tzIGxpa2UgeW91IGhhdmUgQ2hyb21lIGluc3RhbGxlZCwgYnV0IHlvdSBzcGVjaWZpZWRcbiAgICAgICdza2lwQ2VydHV0aWxJbnN0YWxsOiB0cnVlJy4gVW5mb3J0dW5hdGVseSwgd2l0aG91dCBpbnN0YWxsaW5nXG4gICAgICBjZXJ0dXRpbCwgaXQncyBpbXBvc3NpYmxlIGdldCBDaHJvbWUgdG8gdHJ1c3QgZGV2Y2VydCdzIGNlcnRpZmljYXRlc1xuICAgICAgVGhlIGNlcnRpZmljYXRlcyB3aWxsIHdvcmssIGJ1dCBDaHJvbWUgd2lsbCBjb250aW51ZSB0byB3YXJuIHlvdSB0aGF0XG4gICAgICB0aGV5IGFyZSB1bnRydXN0ZWQuXG4gICAgYCk7XG4gIH0sXG4gIGFzeW5jIGNsb3NlRmlyZWZveEJlZm9yZUNvbnRpbnVpbmcoKSB7XG4gICAgY29uc29sZS5sb2coJ1BsZWFzZSBjbG9zZSBGaXJlZm94IGJlZm9yZSBjb250aW51aW5nJyk7XG4gIH0sXG4gIGFzeW5jIHN0YXJ0RmlyZWZveFdpemFyZChjZXJ0aWZpY2F0ZUhvc3QpIHtcbiAgICBjb25zb2xlLmxvZyhgXG4gICAgICBkZXZjZXJ0IHdhcyB1bmFibGUgdG8gYXV0b21hdGljYWxseSBjb25maWd1cmUgRmlyZWZveC4gWW91J2xsIG5lZWQgdG9cbiAgICAgIGNvbXBsZXRlIHRoaXMgcHJvY2VzcyBtYW51YWxseS4gRG9uJ3Qgd29ycnkgdGhvdWdoIC0gRmlyZWZveCB3aWxsIHdhbGtcbiAgICAgIHlvdSB0aHJvdWdoIGl0LlxuXG4gICAgICBXaGVuIHlvdSdyZSByZWFkeSwgaGl0IGFueSBrZXkgdG8gY29udGludWUuIEZpcmVmb3ggd2lsbCBsYXVuY2ggYW5kXG4gICAgICBkaXNwbGF5IGEgd2l6YXJkIHRvIHdhbGsgeW91IHRocm91Z2ggaG93IHRvIHRydXN0IHRoZSBkZXZjZXJ0XG4gICAgICBjZXJ0aWZpY2F0ZS4gV2hlbiB5b3UgYXJlIGZpbmlzaGVkLCBjb21lIGJhY2sgaGVyZSBhbmQgd2UnbGwgZmluaXNoIHVwLlxuXG4gICAgICAoSWYgRmlyZWZveCBkb2Vzbid0IHN0YXJ0LCBnbyBhaGVhZCBhbmQgc3RhcnQgaXQgYW5kIG5hdmlnYXRlIHRvXG4gICAgICAkeyBjZXJ0aWZpY2F0ZUhvc3QgfSBpbiBhIG5ldyB0YWIuKVxuXG4gICAgICBJZiB5b3UgYXJlIGN1cmlvdXMgYWJvdXQgd2h5IGFsbCB0aGlzIGlzIG5lY2Vzc2FyeSwgY2hlY2sgb3V0XG4gICAgICBodHRwczovL2dpdGh1Yi5jb20vZGF2ZXdhc21lci9kZXZjZXJ0I2hvdy1pdC13b3Jrc1xuXG4gICAgICA8UHJlc3MgYW55IGtleSB0byBsYXVuY2ggRmlyZWZveCB3aXphcmQ+XG4gICAgYCk7XG4gICAgYXdhaXQgd2FpdEZvclVzZXIoKTtcbiAgfSxcbiAgYXN5bmMgZmlyZWZveFdpemFyZFByb21wdFBhZ2UoY2VydGlmaWNhdGVVUkw6IHN0cmluZykge1xuICAgIHJldHVybiBgXG4gICAgICA8aHRtbD5cbiAgICAgICAgPGhlYWQ+XG4gICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj1cInJlZnJlc2hcIiBjb250ZW50PVwiMDsgdXJsPSR7Y2VydGlmaWNhdGVVUkx9XCIgLz5cbiAgICAgICAgPC9oZWFkPlxuICAgICAgPC9odG1sPlxuICAgIGA7XG4gIH0sXG4gIGFzeW5jIHdhaXRGb3JGaXJlZm94V2l6YXJkKCkge1xuICAgIGNvbnNvbGUubG9nKGBcbiAgICAgIExhdW5jaGluZyBGaXJlZm94IC4uLlxuXG4gICAgICBHcmVhdCEgT25jZSB5b3UndmUgZmluaXNoZWQgdGhlIEZpcmVmb3ggd2l6YXJkIGZvciBhZGRpbmcgdGhlIGRldmNlcnRcbiAgICAgIGNlcnRpZmljYXRlLCBqdXN0IGhpdCBhbnkga2V5IGhlcmUgYWdhaW4gYW5kIHdlJ2xsIHdyYXAgdXAuXG5cbiAgICAgIDxQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlPlxuICAgIGApXG4gICAgYXdhaXQgd2FpdEZvclVzZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEZWZhdWx0VUk7Il19
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { ExecFileSyncOptions } from 'child_process';
|
|
3
|
-
export declare function openssl(args: string[]): Buffer;
|
|
4
|
-
export declare function run(cmd: string, args: string[], options?: ExecFileSyncOptions): Buffer;
|
|
2
|
+
export declare function openssl(args: string[]): string | Buffer;
|
|
3
|
+
export declare function run(cmd: string, args: string[], options?: ExecFileSyncOptions): string | Buffer;
|
|
5
4
|
export declare function sudoAppend(file: string, input: ExecFileSyncOptions["input"]): void;
|
|
6
|
-
export declare function waitForUser(): Promise<
|
|
5
|
+
export declare function waitForUser(): Promise<unknown>;
|
|
7
6
|
export declare function reportableError(message: string): Error;
|
|
8
7
|
export declare function mktmp(): string;
|
|
9
8
|
export declare function sudo(cmd: string): Promise<string | null>;
|
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openssl = openssl;
|
|
4
|
+
exports.run = run;
|
|
5
|
+
exports.sudoAppend = sudoAppend;
|
|
6
|
+
exports.waitForUser = waitForUser;
|
|
7
|
+
exports.reportableError = reportableError;
|
|
8
|
+
exports.mktmp = mktmp;
|
|
9
|
+
exports.sudo = sudo;
|
|
3
10
|
const tslib_1 = require("tslib");
|
|
4
11
|
const child_process_1 = require("child_process");
|
|
5
12
|
const tmp_1 = tslib_1.__importDefault(require("tmp"));
|
|
@@ -7,44 +14,38 @@ const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
|
7
14
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
8
15
|
const sudo_prompt_1 = tslib_1.__importDefault(require("sudo-prompt"));
|
|
9
16
|
const constants_1 = require("./constants");
|
|
10
|
-
const debug = debug_1.default('devcert:util');
|
|
17
|
+
const debug = (0, debug_1.default)('devcert:util');
|
|
11
18
|
function openssl(args) {
|
|
12
19
|
return run('openssl', args, {
|
|
13
20
|
stdio: 'pipe',
|
|
14
21
|
env: Object.assign({
|
|
15
|
-
RANDFILE: path_1.default.join(constants_1.configPath('.rnd'))
|
|
22
|
+
RANDFILE: path_1.default.join((0, constants_1.configPath)('.rnd'))
|
|
16
23
|
}, process.env)
|
|
17
24
|
});
|
|
18
25
|
}
|
|
19
|
-
exports.openssl = openssl;
|
|
20
26
|
function run(cmd, args, options = {}) {
|
|
21
27
|
debug(`execFileSync: \`${cmd} ${args.join(' ')}\``);
|
|
22
|
-
return child_process_1.execFileSync(cmd, args, options);
|
|
28
|
+
return (0, child_process_1.execFileSync)(cmd, args, options);
|
|
23
29
|
}
|
|
24
|
-
exports.run = run;
|
|
25
30
|
function sudoAppend(file, input) {
|
|
26
31
|
run('sudo', ['tee', '-a', file], {
|
|
27
32
|
input
|
|
28
33
|
});
|
|
29
34
|
}
|
|
30
|
-
exports.sudoAppend = sudoAppend;
|
|
31
35
|
function waitForUser() {
|
|
32
36
|
return new Promise((resolve) => {
|
|
33
37
|
process.stdin.resume();
|
|
34
38
|
process.stdin.on('data', resolve);
|
|
35
39
|
});
|
|
36
40
|
}
|
|
37
|
-
exports.waitForUser = waitForUser;
|
|
38
41
|
function reportableError(message) {
|
|
39
42
|
return new Error(`${message} | This is a bug in devcert, please report the issue at https://github.com/davewasmer/devcert/issues`);
|
|
40
43
|
}
|
|
41
|
-
exports.reportableError = reportableError;
|
|
42
44
|
function mktmp() {
|
|
43
45
|
// discardDescriptor because windows complains the file is in use if we create a tmp file
|
|
44
46
|
// and then shell out to a process that tries to use it
|
|
45
47
|
return tmp_1.default.fileSync({ discardDescriptor: true }).name;
|
|
46
48
|
}
|
|
47
|
-
exports.mktmp = mktmp;
|
|
48
49
|
function sudo(cmd) {
|
|
49
50
|
return new Promise((resolve, reject) => {
|
|
50
51
|
sudo_prompt_1.default.exec(cmd, { name: 'devcert' }, (err, stdout, stderr) => {
|
|
@@ -53,5 +54,4 @@ function sudo(cmd) {
|
|
|
53
54
|
});
|
|
54
55
|
});
|
|
55
56
|
}
|
|
56
|
-
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2JyZW50L2NvZGUvZGV2Y2VydC8iLCJzb3VyY2VzIjpbInV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFrRTtBQUNsRSxzREFBc0I7QUFDdEIsMERBQWdDO0FBQ2hDLHdEQUF3QjtBQUN4QixzRUFBcUM7QUFFckMsMkNBQXlDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLGVBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUUxQyxpQkFBd0IsSUFBYztJQUNwQyxPQUFPLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQzFCLEtBQUssRUFBRSxNQUFNO1FBQ2IsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDakIsUUFBUSxFQUFFLGNBQUksQ0FBQyxJQUFJLENBQUMsc0JBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7S0FDaEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVBELDBCQU9DO0FBRUQsYUFBb0IsR0FBVyxFQUFFLElBQWMsRUFBRSxVQUErQixFQUFFO0lBQ2hGLEtBQUssQ0FBQyxtQkFBb0IsR0FBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE9BQU8sNEJBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFIRCxrQkFHQztBQUVELG9CQUEyQixJQUFZLEVBQUUsS0FBbUM7SUFDMUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDL0IsS0FBSztLQUNOLENBQUMsQ0FBQztBQUNMLENBQUM7QUFKRCxnQ0FJQztBQUVEO0lBQ0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUxELGtDQUtDO0FBRUQseUJBQWdDLE9BQWU7SUFDN0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sc0dBQXNHLENBQUMsQ0FBQztBQUNySSxDQUFDO0FBRkQsMENBRUM7QUFFRDtJQUNFLHlGQUF5RjtJQUN6Rix1REFBdUQ7SUFDdkQsT0FBTyxhQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEQsQ0FBQztBQUpELHNCQUlDO0FBRUQsY0FBcUIsR0FBVztJQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLHFCQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQWlCLEVBQUUsTUFBcUIsRUFBRSxNQUFxQixFQUFFLEVBQUU7WUFDNUcsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUU7WUFDbEcsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVBELG9CQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY0ZpbGVTeW5jLCBFeGVjRmlsZVN5bmNPcHRpb25zIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgdG1wIGZyb20gJ3RtcCc7XG5pbXBvcnQgY3JlYXRlRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc3Vkb1Byb21wdCBmcm9tICdzdWRvLXByb21wdCc7XG5cbmltcG9ydCB7IGNvbmZpZ1BhdGggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IGRlYnVnID0gY3JlYXRlRGVidWcoJ2RldmNlcnQ6dXRpbCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gb3BlbnNzbChhcmdzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gcnVuKCdvcGVuc3NsJywgYXJncywge1xuICAgIHN0ZGlvOiAncGlwZScsXG4gICAgZW52OiBPYmplY3QuYXNzaWduKHtcbiAgICAgIFJBTkRGSUxFOiBwYXRoLmpvaW4oY29uZmlnUGF0aCgnLnJuZCcpKVxuICAgIH0sIHByb2Nlc3MuZW52KVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bihjbWQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM6IEV4ZWNGaWxlU3luY09wdGlvbnMgPSB7fSkge1xuICBkZWJ1ZyhgZXhlY0ZpbGVTeW5jOiBcXGAkeyBjbWQgfSAke2FyZ3Muam9pbignICcpfVxcYGApO1xuICByZXR1cm4gZXhlY0ZpbGVTeW5jKGNtZCwgYXJncywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWRvQXBwZW5kKGZpbGU6IHN0cmluZywgaW5wdXQ6IEV4ZWNGaWxlU3luY09wdGlvbnNbXCJpbnB1dFwiXSkge1xuICBydW4oJ3N1ZG8nLCBbJ3RlZScsICctYScsIGZpbGVdLCB7XG4gICAgaW5wdXRcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yVXNlcigpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdkYXRhJywgcmVzb2x2ZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0YWJsZUVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICByZXR1cm4gbmV3IEVycm9yKGAke21lc3NhZ2V9IHwgVGhpcyBpcyBhIGJ1ZyBpbiBkZXZjZXJ0LCBwbGVhc2UgcmVwb3J0IHRoZSBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF2ZXdhc21lci9kZXZjZXJ0L2lzc3Vlc2ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWt0bXAoKSB7XG4gIC8vIGRpc2NhcmREZXNjcmlwdG9yIGJlY2F1c2Ugd2luZG93cyBjb21wbGFpbnMgdGhlIGZpbGUgaXMgaW4gdXNlIGlmIHdlIGNyZWF0ZSBhIHRtcCBmaWxlXG4gIC8vIGFuZCB0aGVuIHNoZWxsIG91dCB0byBhIHByb2Nlc3MgdGhhdCB0cmllcyB0byB1c2UgaXRcbiAgcmV0dXJuIHRtcC5maWxlU3luYyh7IGRpc2NhcmREZXNjcmlwdG9yOiB0cnVlIH0pLm5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWRvKGNtZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3Vkb1Byb21wdC5leGVjKGNtZCwgeyBuYW1lOiAnZGV2Y2VydCcgfSwgKGVycjogRXJyb3IgfCBudWxsLCBzdGRvdXQ6IHN0cmluZyB8IG51bGwsIHN0ZGVycjogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgbGV0IGVycm9yID0gZXJyIHx8ICh0eXBlb2Ygc3RkZXJyID09PSAnc3RyaW5nJyAmJiBzdGRlcnIudHJpbSgpLmxlbmd0aCA+IDAgJiYgbmV3IEVycm9yKHN0ZGVycikpIDtcbiAgICAgIGVycm9yID8gcmVqZWN0KGVycm9yKSA6IHJlc29sdmUoc3Rkb3V0KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsMEJBT0M7QUFFRCxrQkFHQztBQUVELGdDQUlDO0FBRUQsa0NBS0M7QUFFRCwwQ0FFQztBQUVELHNCQUlDO0FBRUQsb0JBT0M7O0FBdERELGlEQUFrRTtBQUNsRSxzREFBc0I7QUFDdEIsMERBQWdDO0FBQ2hDLHdEQUF3QjtBQUN4QixzRUFBcUM7QUFFckMsMkNBQXlDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBVyxFQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTFDLFNBQWdCLE9BQU8sQ0FBQyxJQUFjO0lBQ3BDLE9BQU8sR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUU7UUFDMUIsS0FBSyxFQUFFLE1BQU07UUFDYixHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNqQixRQUFRLEVBQUUsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFBLHNCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO0tBQ2hCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixHQUFHLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxVQUErQixFQUFFO0lBQ2hGLEtBQUssQ0FBQyxtQkFBb0IsR0FBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE9BQU8sSUFBQSw0QkFBWSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxJQUFZLEVBQUUsS0FBbUM7SUFDMUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDL0IsS0FBSztLQUNOLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixXQUFXO0lBQ3pCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsT0FBZTtJQUM3QyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsT0FBTyxzR0FBc0csQ0FBQyxDQUFDO0FBQ3JJLENBQUM7QUFFRCxTQUFnQixLQUFLO0lBQ25CLHlGQUF5RjtJQUN6Rix1REFBdUQ7SUFDdkQsT0FBTyxhQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEQsQ0FBQztBQUVELFNBQWdCLElBQUksQ0FBQyxHQUFXO0lBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMscUJBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBaUIsRUFBRSxNQUFxQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtZQUM1RyxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRTtZQUNsRyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY0ZpbGVTeW5jLCBFeGVjRmlsZVN5bmNPcHRpb25zIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgdG1wIGZyb20gJ3RtcCc7XG5pbXBvcnQgY3JlYXRlRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc3Vkb1Byb21wdCBmcm9tICdzdWRvLXByb21wdCc7XG5cbmltcG9ydCB7IGNvbmZpZ1BhdGggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IGRlYnVnID0gY3JlYXRlRGVidWcoJ2RldmNlcnQ6dXRpbCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gb3BlbnNzbChhcmdzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gcnVuKCdvcGVuc3NsJywgYXJncywge1xuICAgIHN0ZGlvOiAncGlwZScsXG4gICAgZW52OiBPYmplY3QuYXNzaWduKHtcbiAgICAgIFJBTkRGSUxFOiBwYXRoLmpvaW4oY29uZmlnUGF0aCgnLnJuZCcpKVxuICAgIH0sIHByb2Nlc3MuZW52KVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bihjbWQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM6IEV4ZWNGaWxlU3luY09wdGlvbnMgPSB7fSkge1xuICBkZWJ1ZyhgZXhlY0ZpbGVTeW5jOiBcXGAkeyBjbWQgfSAke2FyZ3Muam9pbignICcpfVxcYGApO1xuICByZXR1cm4gZXhlY0ZpbGVTeW5jKGNtZCwgYXJncywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWRvQXBwZW5kKGZpbGU6IHN0cmluZywgaW5wdXQ6IEV4ZWNGaWxlU3luY09wdGlvbnNbXCJpbnB1dFwiXSkge1xuICBydW4oJ3N1ZG8nLCBbJ3RlZScsICctYScsIGZpbGVdLCB7XG4gICAgaW5wdXRcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yVXNlcigpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdkYXRhJywgcmVzb2x2ZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0YWJsZUVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICByZXR1cm4gbmV3IEVycm9yKGAke21lc3NhZ2V9IHwgVGhpcyBpcyBhIGJ1ZyBpbiBkZXZjZXJ0LCBwbGVhc2UgcmVwb3J0IHRoZSBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF2ZXdhc21lci9kZXZjZXJ0L2lzc3Vlc2ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWt0bXAoKSB7XG4gIC8vIGRpc2NhcmREZXNjcmlwdG9yIGJlY2F1c2Ugd2luZG93cyBjb21wbGFpbnMgdGhlIGZpbGUgaXMgaW4gdXNlIGlmIHdlIGNyZWF0ZSBhIHRtcCBmaWxlXG4gIC8vIGFuZCB0aGVuIHNoZWxsIG91dCB0byBhIHByb2Nlc3MgdGhhdCB0cmllcyB0byB1c2UgaXRcbiAgcmV0dXJuIHRtcC5maWxlU3luYyh7IGRpc2NhcmREZXNjcmlwdG9yOiB0cnVlIH0pLm5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWRvKGNtZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3Vkb1Byb21wdC5leGVjKGNtZCwgeyBuYW1lOiAnZGV2Y2VydCcgfSwgKGVycjogRXJyb3IgfCBudWxsLCBzdGRvdXQ6IHN0cmluZyB8IG51bGwsIHN0ZGVycjogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgbGV0IGVycm9yID0gZXJyIHx8ICh0eXBlb2Ygc3RkZXJyID09PSAnc3RyaW5nJyAmJiBzdGRlcnIudHJpbSgpLmxlbmd0aCA+IDAgJiYgbmV3IEVycm9yKHN0ZGVycikpIDtcbiAgICAgIGVycm9yID8gcmVqZWN0KGVycm9yKSA6IHJlc29sdmUoc3Rkb3V0KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/devcert",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Generate trusted local SSL/TLS certificates for local SSL development",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -29,14 +29,12 @@
|
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/debug": "^0.0.30",
|
|
31
31
|
"@types/get-port": "^3.2.0",
|
|
32
|
-
"@types/glob": "^5.0.34",
|
|
33
32
|
"@types/lodash": "^4.14.92",
|
|
34
33
|
"@types/mkdirp": "^0.5.2",
|
|
35
|
-
"@types/node": "^
|
|
36
|
-
"@types/rimraf": "^2.0.2",
|
|
34
|
+
"@types/node": "^20.12.7",
|
|
37
35
|
"@types/tmp": "^0.0.33",
|
|
38
36
|
"standard-version": "^8.0.1",
|
|
39
|
-
"typescript": "^
|
|
37
|
+
"typescript": "^5.1.3"
|
|
40
38
|
},
|
|
41
39
|
"dependencies": {
|
|
42
40
|
"application-config-path": "^0.1.0",
|
|
@@ -44,11 +42,10 @@
|
|
|
44
42
|
"debug": "^3.1.0",
|
|
45
43
|
"eol": "^0.9.1",
|
|
46
44
|
"get-port": "^3.2.0",
|
|
47
|
-
"glob": "^
|
|
45
|
+
"glob": "^10.4.2",
|
|
48
46
|
"lodash": "^4.17.21",
|
|
49
47
|
"mkdirp": "^0.5.1",
|
|
50
48
|
"password-prompt": "^1.0.4",
|
|
51
|
-
"rimraf": "^2.6.2",
|
|
52
49
|
"sudo-prompt": "^8.2.0",
|
|
53
50
|
"tmp": "^0.0.33",
|
|
54
51
|
"tslib": "^2.4.0"
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { readFileSync as readFile, readdirSync as readdir, existsSync as exists } from 'fs';
|
|
1
|
+
import { rmSync as rm, readFileSync as readFile, readdirSync as readdir, existsSync as exists } from 'fs';
|
|
2
2
|
import createDebug from 'debug';
|
|
3
3
|
import { sync as commandExists } from 'command-exists';
|
|
4
|
-
import rimraf from 'rimraf';
|
|
5
4
|
import {
|
|
6
5
|
isMac,
|
|
7
6
|
isLinux,
|
|
@@ -128,5 +127,5 @@ export function configuredDomains() {
|
|
|
128
127
|
}
|
|
129
128
|
|
|
130
129
|
export function removeDomain(domain: string) {
|
|
131
|
-
return
|
|
130
|
+
return rm(pathForDomain(domain), { force: true, recursive: true });
|
|
132
131
|
}
|
package/src/platforms/win32.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import createDebug from 'debug';
|
|
2
2
|
import crypto from 'crypto';
|
|
3
|
-
import { writeFileSync as write, readFileSync as read } from 'fs';
|
|
4
|
-
import { sync as rimraf } from 'rimraf';
|
|
3
|
+
import { rmSync as rm, writeFileSync as write, readFileSync as read } from 'fs';
|
|
5
4
|
import { Options } from '../index';
|
|
6
5
|
import { assertNotTouchingFiles, openCertificateInFirefox } from './shared';
|
|
7
6
|
import { Platform } from '.';
|
|
@@ -64,7 +63,7 @@ export default class WindowsPlatform implements Platform {
|
|
|
64
63
|
|
|
65
64
|
deleteProtectedFiles(filepath: string) {
|
|
66
65
|
assertNotTouchingFiles(filepath, 'delete');
|
|
67
|
-
|
|
66
|
+
rm(filepath, { force: true, recursive: true });
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
async readProtectedFile(filepath: string): Promise<string> {
|
|
@@ -104,4 +103,4 @@ export default class WindowsPlatform implements Platform {
|
|
|
104
103
|
return decipher.update(encrypted, 'hex', 'utf8') + decipher.final('utf8');
|
|
105
104
|
}
|
|
106
105
|
|
|
107
|
-
}
|
|
106
|
+
}
|