@zincapp/znvault-cli 2.1.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 +310 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +660 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/apikey.d.ts +3 -0
- package/dist/commands/apikey.d.ts.map +1 -0
- package/dist/commands/apikey.js +767 -0
- package/dist/commands/apikey.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +147 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +426 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/cert.d.ts +3 -0
- package/dist/commands/cert.d.ts.map +1 -0
- package/dist/commands/cert.js +398 -0
- package/dist/commands/cert.js.map +1 -0
- package/dist/commands/cluster.d.ts +3 -0
- package/dist/commands/cluster.d.ts.map +1 -0
- package/dist/commands/cluster.js +228 -0
- package/dist/commands/cluster.js.map +1 -0
- package/dist/commands/emergency.d.ts +3 -0
- package/dist/commands/emergency.d.ts.map +1 -0
- package/dist/commands/emergency.js +223 -0
- package/dist/commands/emergency.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +188 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/lockdown.d.ts +3 -0
- package/dist/commands/lockdown.d.ts.map +1 -0
- package/dist/commands/lockdown.js +232 -0
- package/dist/commands/lockdown.js.map +1 -0
- package/dist/commands/permissions.d.ts +3 -0
- package/dist/commands/permissions.d.ts.map +1 -0
- package/dist/commands/permissions.js +168 -0
- package/dist/commands/permissions.js.map +1 -0
- package/dist/commands/policy.d.ts +3 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +660 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/superadmin.d.ts +3 -0
- package/dist/commands/superadmin.d.ts.map +1 -0
- package/dist/commands/superadmin.js +203 -0
- package/dist/commands/superadmin.js.map +1 -0
- package/dist/commands/tenant.d.ts +3 -0
- package/dist/commands/tenant.d.ts.map +1 -0
- package/dist/commands/tenant.js +277 -0
- package/dist/commands/tenant.js.map +1 -0
- package/dist/commands/update.d.ts +9 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +359 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/user.d.ts +3 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +363 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/client.d.ts +246 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +734 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/config.d.ts +130 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +342 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/db.d.ts +111 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/db.js +698 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/local.d.ts +41 -0
- package/dist/lib/local.d.ts.map +1 -0
- package/dist/lib/local.js +236 -0
- package/dist/lib/local.js.map +1 -0
- package/dist/lib/mode.d.ts +210 -0
- package/dist/lib/mode.d.ts.map +1 -0
- package/dist/lib/mode.js +389 -0
- package/dist/lib/mode.js.map +1 -0
- package/dist/lib/output.d.ts +61 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +190 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/prompts.d.ts +32 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +96 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/services/auto-update-daemon.d.ts +48 -0
- package/dist/services/auto-update-daemon.d.ts.map +1 -0
- package/dist/services/auto-update-daemon.js +296 -0
- package/dist/services/auto-update-daemon.js.map +1 -0
- package/dist/services/signature-verifier.d.ts +38 -0
- package/dist/services/signature-verifier.d.ts.map +1 -0
- package/dist/services/signature-verifier.js +209 -0
- package/dist/services/signature-verifier.js.map +1 -0
- package/dist/services/update-checker.d.ts +39 -0
- package/dist/services/update-checker.d.ts.map +1 -0
- package/dist/services/update-checker.js +198 -0
- package/dist/services/update-checker.js.map +1 -0
- package/dist/services/update-installer.d.ts +54 -0
- package/dist/services/update-installer.d.ts.map +1 -0
- package/dist/services/update-installer.js +360 -0
- package/dist/services/update-installer.js.map +1 -0
- package/dist/types/index.d.ts +411 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/update.d.ts +137 -0
- package/dist/types/update.d.ts.map +1 -0
- package/dist/types/update.js +27 -0
- package/dist/types/update.js.map +1 -0
- package/dist/utils/platform.d.ts +35 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +115 -0
- package/dist/utils/platform.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
// Path: znvault-cli/src/services/update-installer.ts
|
|
2
|
+
/**
|
|
3
|
+
* Update Installer Service
|
|
4
|
+
*
|
|
5
|
+
* Downloads, verifies, and installs agent updates with atomic replacement
|
|
6
|
+
* and automatic rollback on failure.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
import * as https from 'https';
|
|
12
|
+
import { exec } from 'child_process';
|
|
13
|
+
import { promisify } from 'util';
|
|
14
|
+
import { getSignatureVerifier } from './signature-verifier.js';
|
|
15
|
+
import { getInstallPath } from '../utils/platform.js';
|
|
16
|
+
const execAsync = promisify(exec);
|
|
17
|
+
export class UpdateInstaller {
|
|
18
|
+
installPath;
|
|
19
|
+
onProgress;
|
|
20
|
+
constructor(installPath, onProgress) {
|
|
21
|
+
this.installPath = installPath || getInstallPath();
|
|
22
|
+
this.onProgress = onProgress;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Report progress to callback
|
|
26
|
+
*/
|
|
27
|
+
report(progress) {
|
|
28
|
+
if (this.onProgress) {
|
|
29
|
+
this.onProgress(progress);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Download file with progress reporting
|
|
34
|
+
*/
|
|
35
|
+
async download(url, destPath, onProgress) {
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
const file = fs.createWriteStream(destPath);
|
|
38
|
+
https.get(url, { rejectUnauthorized: true }, (res) => {
|
|
39
|
+
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
40
|
+
// Handle redirect
|
|
41
|
+
const redirectUrl = res.headers.location;
|
|
42
|
+
if (redirectUrl) {
|
|
43
|
+
file.close();
|
|
44
|
+
fs.unlinkSync(destPath);
|
|
45
|
+
this.download(redirectUrl, destPath, onProgress).then(resolve).catch(reject);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (res.statusCode !== 200) {
|
|
50
|
+
file.close();
|
|
51
|
+
fs.unlinkSync(destPath);
|
|
52
|
+
reject(new Error(`Download failed: HTTP ${res.statusCode}`));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const totalSize = parseInt(res.headers['content-length'] || '0', 10);
|
|
56
|
+
let downloadedSize = 0;
|
|
57
|
+
res.on('data', (chunk) => {
|
|
58
|
+
downloadedSize += chunk.length;
|
|
59
|
+
if (totalSize > 0 && onProgress) {
|
|
60
|
+
const percent = Math.round((downloadedSize / totalSize) * 100);
|
|
61
|
+
onProgress(percent);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
res.pipe(file);
|
|
65
|
+
file.on('finish', () => {
|
|
66
|
+
file.close();
|
|
67
|
+
resolve();
|
|
68
|
+
});
|
|
69
|
+
file.on('error', (err) => {
|
|
70
|
+
file.close();
|
|
71
|
+
fs.unlinkSync(destPath);
|
|
72
|
+
reject(err);
|
|
73
|
+
});
|
|
74
|
+
}).on('error', (err) => {
|
|
75
|
+
file.close();
|
|
76
|
+
if (fs.existsSync(destPath)) {
|
|
77
|
+
fs.unlinkSync(destPath);
|
|
78
|
+
}
|
|
79
|
+
reject(err);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract tarball to directory
|
|
85
|
+
*/
|
|
86
|
+
async extractTarball(tarballPath, extractDir) {
|
|
87
|
+
await execAsync(`tar -xzf "${tarballPath}" -C "${extractDir}"`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Find the binary in extracted directory
|
|
91
|
+
*/
|
|
92
|
+
findBinary(extractDir) {
|
|
93
|
+
// Check common locations
|
|
94
|
+
const candidates = [
|
|
95
|
+
path.join(extractDir, 'znvault'),
|
|
96
|
+
path.join(extractDir, 'bin', 'znvault'),
|
|
97
|
+
path.join(extractDir, 'vault-agent'),
|
|
98
|
+
path.join(extractDir, 'bin', 'vault-agent'),
|
|
99
|
+
];
|
|
100
|
+
for (const candidate of candidates) {
|
|
101
|
+
if (fs.existsSync(candidate)) {
|
|
102
|
+
return candidate;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Search recursively
|
|
106
|
+
const files = fs.readdirSync(extractDir);
|
|
107
|
+
for (const file of files) {
|
|
108
|
+
const filePath = path.join(extractDir, file);
|
|
109
|
+
const stat = fs.statSync(filePath);
|
|
110
|
+
if (stat.isDirectory()) {
|
|
111
|
+
const found = this.findBinary(filePath);
|
|
112
|
+
if (found)
|
|
113
|
+
return found;
|
|
114
|
+
}
|
|
115
|
+
else if (file === 'znvault' || file === 'vault-agent') {
|
|
116
|
+
return filePath;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Install the update
|
|
123
|
+
*
|
|
124
|
+
* @param artifact - Artifact info with URL, checksum, and signature
|
|
125
|
+
* @param version - Version being installed
|
|
126
|
+
*/
|
|
127
|
+
async install(artifact, version) {
|
|
128
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'znvault-update-'));
|
|
129
|
+
const tarballPath = path.join(tmpDir, `vault-agent_${version}.tar.gz`);
|
|
130
|
+
const extractDir = path.join(tmpDir, 'extracted');
|
|
131
|
+
try {
|
|
132
|
+
// 1. Download
|
|
133
|
+
this.report({
|
|
134
|
+
stage: 'downloading',
|
|
135
|
+
progress: 0,
|
|
136
|
+
message: 'Downloading update...',
|
|
137
|
+
});
|
|
138
|
+
await this.download(artifact.url, tarballPath, (progress) => {
|
|
139
|
+
this.report({
|
|
140
|
+
stage: 'downloading',
|
|
141
|
+
progress,
|
|
142
|
+
message: `Downloading: ${progress}%`,
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
// 2. Verify checksum
|
|
146
|
+
this.report({
|
|
147
|
+
stage: 'verifying',
|
|
148
|
+
message: 'Verifying checksum...',
|
|
149
|
+
});
|
|
150
|
+
const verifier = getSignatureVerifier();
|
|
151
|
+
if (!verifier.verifyChecksum(tarballPath, artifact.sha256)) {
|
|
152
|
+
throw new Error('Checksum verification failed - file may be corrupted');
|
|
153
|
+
}
|
|
154
|
+
// 3. Verify signature
|
|
155
|
+
this.report({
|
|
156
|
+
stage: 'verifying',
|
|
157
|
+
message: 'Verifying GPG signature...',
|
|
158
|
+
});
|
|
159
|
+
const signatureValid = await verifier.verifySignature(tarballPath, artifact.signature);
|
|
160
|
+
if (!signatureValid) {
|
|
161
|
+
throw new Error('Signature verification failed - update may be tampered');
|
|
162
|
+
}
|
|
163
|
+
// 4. Extract
|
|
164
|
+
this.report({
|
|
165
|
+
stage: 'installing',
|
|
166
|
+
message: 'Extracting update...',
|
|
167
|
+
});
|
|
168
|
+
fs.mkdirSync(extractDir, { recursive: true });
|
|
169
|
+
await this.extractTarball(tarballPath, extractDir);
|
|
170
|
+
// 5. Find binary
|
|
171
|
+
const newBinaryPath = this.findBinary(extractDir);
|
|
172
|
+
if (!newBinaryPath) {
|
|
173
|
+
throw new Error('Could not find binary in extracted archive');
|
|
174
|
+
}
|
|
175
|
+
// 6. Install (directory-based for node packages, binary for standalone)
|
|
176
|
+
this.report({
|
|
177
|
+
stage: 'installing',
|
|
178
|
+
message: 'Installing update...',
|
|
179
|
+
});
|
|
180
|
+
// Check if this is a node package (has dist/) or standalone binary
|
|
181
|
+
const hasDistDir = fs.existsSync(path.join(extractDir, 'dist'));
|
|
182
|
+
if (hasDistDir) {
|
|
183
|
+
// Node package: install entire directory
|
|
184
|
+
await this.installDirectory(extractDir);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Standalone binary: atomic replacement
|
|
188
|
+
await this.atomicReplace(newBinaryPath);
|
|
189
|
+
}
|
|
190
|
+
// 7. Complete
|
|
191
|
+
this.report({
|
|
192
|
+
stage: 'complete',
|
|
193
|
+
message: `Successfully updated to version ${version}`,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
this.report({
|
|
198
|
+
stage: 'error',
|
|
199
|
+
message: 'Update failed',
|
|
200
|
+
error: err instanceof Error ? err.message : String(err),
|
|
201
|
+
});
|
|
202
|
+
throw err;
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
// Cleanup temp directory
|
|
206
|
+
try {
|
|
207
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Ignore cleanup errors
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Install a directory-based package (Node.js with dist/)
|
|
216
|
+
*/
|
|
217
|
+
async installDirectory(extractDir) {
|
|
218
|
+
const installDir = path.dirname(this.installPath);
|
|
219
|
+
const backupDir = `${installDir}.backup`;
|
|
220
|
+
// Ensure parent directory exists
|
|
221
|
+
const parentDir = path.dirname(installDir);
|
|
222
|
+
if (!fs.existsSync(parentDir)) {
|
|
223
|
+
fs.mkdirSync(parentDir, { recursive: true });
|
|
224
|
+
}
|
|
225
|
+
// Backup current installation if it exists
|
|
226
|
+
const hasExisting = fs.existsSync(installDir);
|
|
227
|
+
if (hasExisting) {
|
|
228
|
+
// Remove old backup if exists
|
|
229
|
+
if (fs.existsSync(backupDir)) {
|
|
230
|
+
fs.rmSync(backupDir, { recursive: true, force: true });
|
|
231
|
+
}
|
|
232
|
+
fs.renameSync(installDir, backupDir);
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
// Copy extracted contents to install directory
|
|
236
|
+
fs.mkdirSync(installDir, { recursive: true });
|
|
237
|
+
await this.copyDirectory(extractDir, installDir);
|
|
238
|
+
// Make wrapper script executable
|
|
239
|
+
if (fs.existsSync(this.installPath)) {
|
|
240
|
+
fs.chmodSync(this.installPath, 0o755);
|
|
241
|
+
}
|
|
242
|
+
// Remove backup on success
|
|
243
|
+
if (hasExisting && fs.existsSync(backupDir)) {
|
|
244
|
+
fs.rmSync(backupDir, { recursive: true, force: true });
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
// Rollback on failure
|
|
249
|
+
if (hasExisting && fs.existsSync(backupDir)) {
|
|
250
|
+
try {
|
|
251
|
+
if (fs.existsSync(installDir)) {
|
|
252
|
+
fs.rmSync(installDir, { recursive: true, force: true });
|
|
253
|
+
}
|
|
254
|
+
fs.renameSync(backupDir, installDir);
|
|
255
|
+
}
|
|
256
|
+
catch (rollbackErr) {
|
|
257
|
+
console.error('Rollback failed:', rollbackErr);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
throw err;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Recursively copy a directory
|
|
265
|
+
*/
|
|
266
|
+
async copyDirectory(src, dest) {
|
|
267
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
268
|
+
for (const entry of entries) {
|
|
269
|
+
const srcPath = path.join(src, entry.name);
|
|
270
|
+
const destPath = path.join(dest, entry.name);
|
|
271
|
+
if (entry.isDirectory()) {
|
|
272
|
+
fs.mkdirSync(destPath, { recursive: true });
|
|
273
|
+
await this.copyDirectory(srcPath, destPath);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
fs.copyFileSync(srcPath, destPath);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Atomically replace the binary with rollback on failure
|
|
282
|
+
*/
|
|
283
|
+
async atomicReplace(newBinaryPath) {
|
|
284
|
+
const backupPath = `${this.installPath}.backup`;
|
|
285
|
+
const installDir = path.dirname(this.installPath);
|
|
286
|
+
// Ensure install directory exists
|
|
287
|
+
if (!fs.existsSync(installDir)) {
|
|
288
|
+
fs.mkdirSync(installDir, { recursive: true });
|
|
289
|
+
}
|
|
290
|
+
// Backup current binary if it exists
|
|
291
|
+
const hasExisting = fs.existsSync(this.installPath);
|
|
292
|
+
if (hasExisting) {
|
|
293
|
+
fs.copyFileSync(this.installPath, backupPath);
|
|
294
|
+
}
|
|
295
|
+
try {
|
|
296
|
+
// Copy new binary to temp location in target directory
|
|
297
|
+
const tempPath = `${this.installPath}.new`;
|
|
298
|
+
fs.copyFileSync(newBinaryPath, tempPath);
|
|
299
|
+
fs.chmodSync(tempPath, 0o755);
|
|
300
|
+
// Atomic rename
|
|
301
|
+
fs.renameSync(tempPath, this.installPath);
|
|
302
|
+
// Remove backup on success
|
|
303
|
+
if (hasExisting && fs.existsSync(backupPath)) {
|
|
304
|
+
fs.unlinkSync(backupPath);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
// Rollback on failure
|
|
309
|
+
if (hasExisting && fs.existsSync(backupPath)) {
|
|
310
|
+
try {
|
|
311
|
+
fs.copyFileSync(backupPath, this.installPath);
|
|
312
|
+
fs.unlinkSync(backupPath);
|
|
313
|
+
}
|
|
314
|
+
catch (rollbackErr) {
|
|
315
|
+
console.error('Rollback failed:', rollbackErr);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
throw err;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Check if we have permission to install
|
|
323
|
+
*/
|
|
324
|
+
canInstall() {
|
|
325
|
+
const installDir = path.dirname(this.installPath);
|
|
326
|
+
// Check if directory exists and is writable
|
|
327
|
+
try {
|
|
328
|
+
if (!fs.existsSync(installDir)) {
|
|
329
|
+
// Check if we can create it
|
|
330
|
+
const parentDir = path.dirname(installDir);
|
|
331
|
+
fs.accessSync(parentDir, fs.constants.W_OK);
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
fs.accessSync(installDir, fs.constants.W_OK);
|
|
335
|
+
}
|
|
336
|
+
// If binary exists, check if we can write to it
|
|
337
|
+
if (fs.existsSync(this.installPath)) {
|
|
338
|
+
fs.accessSync(this.installPath, fs.constants.W_OK);
|
|
339
|
+
}
|
|
340
|
+
return { canInstall: true };
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
return {
|
|
344
|
+
canInstall: false,
|
|
345
|
+
reason: `No write permission to ${this.installPath}. Run with sudo or change install path.`,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Get the install path
|
|
351
|
+
*/
|
|
352
|
+
getInstallPath() {
|
|
353
|
+
return this.installPath;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// Factory function
|
|
357
|
+
export function createUpdateInstaller(installPath, onProgress) {
|
|
358
|
+
return new UpdateInstaller(installPath, onProgress);
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=update-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-installer.js","sourceRoot":"","sources":["../../src/services/update-installer.ts"],"names":[],"mappings":"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"}
|