sliftutils 1.7.133 → 1.7.134

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.
Files changed (58) hide show
  1. package/bin/addmachine.js +1 -5
  2. package/bin/derivekey.js +2 -7
  3. package/bin/portsecuredaemon.js +1 -8
  4. package/bin/securessh.js +2 -7
  5. package/bin/setupnotify.js +2 -6
  6. package/bin/signfiles.js +2 -7
  7. package/bin/testnotify.js +2 -6
  8. package/bin/unrevoke.js +1 -5
  9. package/misc/dist/ownIPs.ts.cache +2 -2
  10. package/misc/https/dist/certs.ts.cache +12 -9
  11. package/misc/https/dist/persistentLocalStorage.ts.cache +10 -4
  12. package/package.json +1 -1
  13. package/security/authorizedKeys/daemon/daemon.ts +142 -7
  14. package/security/authorizedKeys/daemon/dist/changes.ts.cache +2 -2
  15. package/security/authorizedKeys/daemon/dist/git.ts.cache +26 -8
  16. package/security/authorizedKeys/daemon/dist/notify.ts.cache +2 -2
  17. package/security/authorizedKeys/daemon/dist/paths.ts.cache +2 -2
  18. package/security/authorizedKeys/daemon/dist/repoFiles.ts.cache +4 -6
  19. package/security/authorizedKeys/daemon/dist/revocation.ts.cache +0 -0
  20. package/security/authorizedKeys/daemon/dist/sessions.ts.cache +2 -2
  21. package/security/authorizedKeys/daemon/dist/state.ts.cache +2 -2
  22. package/security/authorizedKeys/daemon/dist/trust.ts.cache +85 -265
  23. package/security/authorizedKeys/daemon/git.d.ts +8 -0
  24. package/security/authorizedKeys/daemon/git.ts +22 -4
  25. package/security/authorizedKeys/daemon/repoFiles.ts +2 -4
  26. package/security/authorizedKeys/daemon/trust.d.ts +25 -19
  27. package/security/authorizedKeys/daemon/trust.ts +91 -278
  28. package/security/authorizedKeys/dist/authorizedKeys.ts.cache +2 -2
  29. package/security/authorizedKeys/dist/keysRepo.ts.cache +2 -2
  30. package/security/authorizedKeys/dist/revokeSource.ts.cache +2 -2
  31. package/security/authorizedKeys/dist/sources.ts.cache +2 -2
  32. package/security/authorizedKeys/secureSSH.ts +6 -1
  33. package/security/authorizedKeys/unrevoke.ts +2 -198
  34. package/security/authorizedKeys/unrevokeCli.ts +204 -0
  35. package/security/helpers/dist/paths.ts.cache +2 -2
  36. package/security/helpers/dist/remoteSSH.ts.cache +2 -2
  37. package/security/helpers/dist/spawn.ts.cache +2 -2
  38. package/security/helpers/remoteSSH.d.ts +35 -0
  39. package/security/keys/deriveKey.d.ts +0 -1
  40. package/security/keys/deriveKey.ts +1 -56
  41. package/security/keys/deriveKeyCli.ts +62 -0
  42. package/security/keys/dist/deriveKey.ts.cache +4 -51
  43. package/security/keys/dist/sshKeyFile.ts.cache +5 -3
  44. package/security/machines/addMachine.ts +31 -61
  45. package/security/machines/dist/addMachine.ts.cache +72 -57
  46. package/security/machines/dist/machines.ts.cache +134 -55
  47. package/security/machines/machines.d.ts +11 -0
  48. package/security/machines/machines.ts +134 -57
  49. package/security/notifications/dist/discord.ts.cache +2 -2
  50. package/security/notifications/setupNotify.ts +6 -1
  51. package/security/notifications/testNotify.ts +6 -1
  52. package/security/signedFiles/dist/manifest.ts.cache +2 -2
  53. package/security/signedFiles/dist/sshsig.ts.cache +138 -0
  54. package/security/signedFiles/signFiles.ts +11 -52
  55. package/security/signedFiles/signFilesCli.ts +54 -0
  56. package/security/signedFiles/sshsig.d.ts +13 -0
  57. package/security/signedFiles/sshsig.ts +141 -0
  58. package/storage/dist/backblaze.ts.cache +10 -2
@@ -1,20 +1,26 @@
1
- /** The signature carries the public key that made it, so the key itself can be reported rather
2
- than only a fingerprint. Returns it in the usual "type base64" form. */
3
- export declare function publicKeyFromSignature(signatureText: string): {
4
- publicKey: string;
5
- fingerprint: string;
6
- };
7
- /** Reads one checkout's keys. Prefers a top level authorized_keys file and otherwise concatenates
8
- every .pub at the top level. */
9
- export declare function readCheckoutKeys(repoPath: string): Promise<string[]>;
10
- /** Proves a checkout on disk was signed, and that the files in it are the ones that were signed.
11
- Returns the signer, and throws if anything about that does not hold.
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ export declare const UNSIGNED = "";
4
+ /** A repo that cannot be trusted, with the message ready for whoever asked. Not every caller
5
+ treats these the same - a source keeps its last keys, a machine list is just refused - so the
6
+ kind is carried rather than acted on here. */
7
+ export declare class SignedRepoError extends Error {
8
+ problem: string;
9
+ headline: string;
10
+ body: string;
11
+ constructor(problem: string, headline: string, body: string);
12
+ }
13
+ /** Everything a signed checkout vouches for, in one call: who signed it, and the contents of every
14
+ file the signature actually covers.
12
15
 
13
- Anything reading a repo for something other than ssh keys goes through this first: the whole
14
- checkout is covered by one manifest, so a machine list is exactly as trustworthy as the keys
15
- beside it, and neither is worth reading unsigned. */
16
- export declare function verifyCheckout(repoPath: string): Promise<string>;
17
- export declare function describeSigner(signer: string): string;
18
- /** The keys a source is allowed to contribute right now. A source signed by someone we have not
19
- accepted keeps contributing the keys we last accepted, until the delay has passed. */
20
- export declare function resolveSourceKeys(repoURL: string): Promise<string[]>;
16
+ UNSIGNED with no files when there is no signature at all. Throws a SignedRepoError when a
17
+ signature is present but does not hold up, or when a file it signed for was changed or removed
18
+ without re-signing - either way the caller keeps whatever it last accepted rather than believing
19
+ a repo that no longer matches what was signed. A file not in the manifest is just unsigned, so
20
+ it is left out and warned about rather than treated as tampering. */
21
+ export declare function readSignedRepo(repoPath: string): Promise<{
22
+ signer: string;
23
+ manifestHash: string;
24
+ signatureHash: string;
25
+ files: Map<string, Buffer>;
26
+ }>;
@@ -1,312 +1,125 @@
1
1
  import crypto from "crypto";
2
2
  import fs from "fs/promises";
3
3
  import path from "path";
4
- import { spawnPromise } from "../../helpers/spawn";
5
- import { normalizeKeys } from "../authorizedKeys";
6
- import { sourceRepoPath } from "../sources";
7
4
  import { MANIFEST_NAME, normalizeContent, SIGN_NAMESPACE, SIGNATURE_NAME } from "../../signedFiles/manifest";
8
- import { MAX_ERROR_BODY_LENGTH, SIGNER_CHANGE_DELAY } from "./paths";
9
- import { notify } from "./notify";
10
- import { saveState, sourceState } from "./state";
5
+ import { verifySSHSIG } from "../../signedFiles/sshsig";
11
6
 
12
7
  // A source that has never been signed reads as this, so losing a signature counts as a change of
13
8
  // signer rather than as something to wave through.
14
- const UNSIGNED = "";
9
+ export const UNSIGNED = "";
15
10
  // What fixes both of the signature problems we report, so the message can say so rather than
16
11
  // leaving someone to work it out.
17
12
  const SIGN_COMMAND = "yarn signfiles git";
18
13
 
19
- async function pathExists(filePath: string) {
20
- try {
21
- await fs.access(filePath);
22
- return true;
23
- } catch (e) {
24
- return false;
14
+ /** A repo that cannot be trusted, with the message ready for whoever asked. Not every caller
15
+ treats these the same - a source keeps its last keys, a machine list is just refused - so the
16
+ kind is carried rather than acted on here. */
17
+ export class SignedRepoError extends Error {
18
+ constructor(public problem: string, public headline: string, public body: string) {
19
+ super(`${headline}. ${body}`);
25
20
  }
26
21
  }
27
22
 
28
- function readSSHString(buffer: Buffer, offset: number) {
29
- let length = buffer.readUInt32BE(offset);
30
- return buffer.subarray(offset + 4, offset + 4 + length);
31
- }
32
-
33
- /** The signature carries the public key that made it, so the key itself can be reported rather
34
- than only a fingerprint. Returns it in the usual "type base64" form. */
35
- export function publicKeyFromSignature(signatureText: string) {
36
- let body = signatureText.split("\n").filter(line => line && !line.startsWith("-----")).join("");
37
- let blob = Buffer.from(body, "base64");
38
- if (blob.subarray(0, 6).toString() !== "SSHSIG") {
39
- throw new Error(`Expected an SSHSIG signature, started with ${blob.subarray(0, 6).toString()}`);
23
+ /** Everything a signed checkout vouches for, in one call: who signed it, and the contents of every
24
+ file the signature actually covers.
25
+
26
+ UNSIGNED with no files when there is no signature at all. Throws a SignedRepoError when a
27
+ signature is present but does not hold up, or when a file it signed for was changed or removed
28
+ without re-signing - either way the caller keeps whatever it last accepted rather than believing
29
+ a repo that no longer matches what was signed. A file not in the manifest is just unsigned, so
30
+ it is left out and warned about rather than treated as tampering. */
31
+ export async function readSignedRepo(repoPath: string): Promise<{
32
+ signer: string;
33
+ manifestHash: string;
34
+ signatureHash: string;
35
+ files: Map<string, Buffer>;
36
+ }> {
37
+ let manifestBytes = await fs.readFile(path.join(repoPath, MANIFEST_NAME)).catch(() => undefined);
38
+ let signatureBytes = await fs.readFile(path.join(repoPath, SIGNATURE_NAME)).catch(() => undefined);
39
+ let manifestHash = manifestBytes && crypto.createHash("sha256").update(manifestBytes).digest("hex") || "";
40
+ let signatureHash = signatureBytes && crypto.createHash("sha256").update(signatureBytes).digest("hex") || "";
41
+
42
+ if (!manifestBytes && !signatureBytes) {
43
+ console.log(`${repoPath} is not signed, ignoring all of its files`);
44
+ return { signer: UNSIGNED, manifestHash, signatureHash, files: new Map() };
45
+ }
46
+
47
+ let broken = (detail: string) => new SignedRepoError(
48
+ "corrupt",
49
+ `KEY REPO SIGNATURE IS BROKEN`,
50
+ `The signature on ${repoPath} does not check out, so everything in it is being ignored and`
51
+ + ` this machine keeps using what it last accepted.\n\n${detail}`
52
+ + `\n\nTo replace the signature, run in that repo:\n\`\`\`\n${SIGN_COMMAND}\n\`\`\``
53
+ );
54
+ if (!manifestBytes || !signatureBytes) {
55
+ throw broken(`Only one of ${MANIFEST_NAME} and ${SIGNATURE_NAME} is present.`);
40
56
  }
41
- // The magic, then a uint32 version, then the public key.
42
- let publicKey = readSSHString(blob, 6 + 4);
43
- let keyType = readSSHString(publicKey, 0).toString();
44
- let fingerprint = "SHA256:" + crypto.createHash("sha256").update(publicKey).digest("base64").replace(/=+$/, "");
45
- return { publicKey: `${keyType} ${publicKey.toString("base64")}`, fingerprint };
46
- }
47
57
 
48
- /** Reads one checkout's keys. Prefers a top level authorized_keys file and otherwise concatenates
49
- every .pub at the top level. */
50
- export async function readCheckoutKeys(repoPath: string) {
51
- let combinedPath = path.join(repoPath, "authorized_keys");
52
- if (await pathExists(combinedPath)) {
53
- return normalizeKeys(await fs.readFile(combinedPath, "utf8"));
54
- }
55
- let pubFiles = (await fs.readdir(repoPath)).filter(name => name.endsWith(".pub")).sort();
56
- if (!pubFiles.length) {
57
- throw new Error(`Expected authorized_keys or at least one .pub file in ${repoPath}, found neither`);
58
- }
59
- let keys: string[] = [];
60
- for (let name of pubFiles) {
61
- keys.push(...normalizeKeys(await fs.readFile(path.join(repoPath, name), "utf8")));
58
+ let signer: string;
59
+ try {
60
+ // The signature covers the normalised bytes, so a checkout that arrived with CRLF still
61
+ // verifies rather than looking like tampering.
62
+ signer = verifySSHSIG({
63
+ signature: signatureBytes.toString("utf8"),
64
+ message: normalizeContent(manifestBytes),
65
+ namespace: SIGN_NAMESPACE,
66
+ }).publicKey;
67
+ } catch (e) {
68
+ throw broken(`${e}`);
62
69
  }
63
- return keys;
64
- }
65
70
 
66
- /** Every file in a checkout, other than git's own directory and the signature files, which cannot
67
- describe themselves. */
68
- async function listCheckoutFiles(repoPath: string, prefix?: string): Promise<string[]> {
69
- let files: string[] = [];
70
- for (let entry of await fs.readdir(path.join(repoPath, prefix || ""), { withFileTypes: true })) {
71
- let relativePath = prefix && `${prefix}/${entry.name}` || entry.name;
72
- if (entry.name === ".git") {
73
- continue;
74
- }
75
- if (!prefix && (entry.name === MANIFEST_NAME || entry.name === SIGNATURE_NAME)) {
76
- continue;
77
- }
78
- if (entry.isDirectory()) {
79
- files.push(...await listCheckoutFiles(repoPath, relativePath));
80
- continue;
71
+ let stale = (detail: string) => new SignedRepoError(
72
+ "stale",
73
+ `KEY REPO CHANGED WITHOUT BEING SIGNED`,
74
+ `${detail}, so the repo is being ignored and this machine keeps using what it last accepted.`
75
+ + `\n\nTo make the change take effect, run in that repo:\n\`\`\`\n${SIGN_COMMAND}\n\`\`\``
76
+ );
77
+
78
+ // Every file on disk, other than git's own directory and the two signature files, which cannot
79
+ // describe themselves.
80
+ let listCheckoutFiles = async (prefix?: string): Promise<string[]> => {
81
+ let found: string[] = [];
82
+ for (let entry of await fs.readdir(path.join(repoPath, prefix || ""), { withFileTypes: true })) {
83
+ let relativePath = prefix && `${prefix}/${entry.name}` || entry.name;
84
+ if (entry.name === ".git") continue;
85
+ if (!prefix && (entry.name === MANIFEST_NAME || entry.name === SIGNATURE_NAME)) continue;
86
+ if (entry.isDirectory()) {
87
+ found.push(...await listCheckoutFiles(relativePath));
88
+ continue;
89
+ }
90
+ found.push(relativePath);
81
91
  }
82
- files.push(relativePath);
83
- }
84
- return files.sort();
85
- }
92
+ return found.sort();
93
+ };
86
94
 
87
- /** The signature only covers the manifest, so the manifest has to be checked against what is
88
- actually on disk. Both directions matter: a missing file changes what the keys mean, and an
89
- extra unlisted file could add keys nobody signed for. */
90
- async function verifyManifestMatchesFiles(repoPath: string) {
91
- let manifest = JSON.parse(await fs.readFile(path.join(repoPath, MANIFEST_NAME), "utf8"));
92
- let listed = new Map<string, { path: string; size: number; sha256: string }>(
93
- (manifest.files || []).map((file: { path: string }) => [file.path, file])
95
+ let manifest = JSON.parse(manifestBytes.toString("utf8"));
96
+ let listed = new Map<string, { size: number; sha256: string }>(
97
+ (manifest.files || []).map((file: { path: string; size: number; sha256: string }) => [file.path, file])
94
98
  );
95
- let actual = await listCheckoutFiles(repoPath);
96
99
 
97
- let missing = [...listed.keys()].filter(filePath => !actual.includes(filePath));
98
- if (missing.length) {
99
- throw new Error(`Expected the signed files to be present, ${missing.length} missing, first ${missing[0]}`);
100
- }
101
- let extra = actual.filter(filePath => !listed.has(filePath));
102
- if (extra.length) {
103
- throw new Error(`Expected only signed files to be present, ${extra.length} extra, first ${extra[0]}`);
104
- }
105
- for (let filePath of actual) {
100
+ let files = new Map<string, Buffer>();
101
+ for (let filePath of await listCheckoutFiles()) {
106
102
  let expected = listed.get(filePath);
103
+ // A file the signature never mentioned is not tampering, it is just unsigned - left out
104
+ // rather than trusted. An extra file in a working tree is ordinary, so it is only a note.
107
105
  if (!expected) {
106
+ console.log(`Ignoring ${path.join(repoPath, filePath)}, it is not in the signed manifest`);
108
107
  continue;
109
108
  }
110
109
  let contents = normalizeContent(await fs.readFile(path.join(repoPath, filePath)));
111
- if (contents.length !== expected.size) {
112
- throw new Error(`Expected ${filePath} to be ${expected.size} bytes, was ${contents.length}`);
113
- }
114
110
  let hash = crypto.createHash("sha256").update(contents).digest("hex");
115
- if (hash !== expected.sha256) {
116
- throw new Error(`Expected ${filePath} to hash to ${expected.sha256}, was ${hash}`);
111
+ // A file the manifest DOES name, but whose content no longer matches, is a signed file
112
+ // changed without re-signing - the repo being edited out from under its signature.
113
+ if (contents.length !== expected.size || hash !== expected.sha256) {
114
+ throw stale(`${path.join(repoPath, filePath)} was changed after it was signed`);
117
115
  }
116
+ files.set(filePath, contents);
118
117
  }
119
- }
120
-
121
- /** The manifest and signature as they stand, whether or not they are any good. The hashes are
122
- what tell a signature that was never updated apart from one that is broken. */
123
- async function readSignatureFiles(repoPath: string) {
124
- let manifestPath = path.join(repoPath, MANIFEST_NAME);
125
- let signaturePath = path.join(repoPath, SIGNATURE_NAME);
126
- let manifest = await pathExists(manifestPath) && await fs.readFile(manifestPath) || undefined;
127
- let signature = await pathExists(signaturePath) && await fs.readFile(signaturePath) || undefined;
128
- return {
129
- manifest,
130
- signature,
131
- manifestHash: manifest && crypto.createHash("sha256").update(manifest).digest("hex") || "",
132
- signatureHash: signature && crypto.createHash("sha256").update(signature).digest("hex") || "",
133
- };
134
- }
135
-
136
- /** Who signed this checkout. Returns UNSIGNED when there is no signature at all, and throws when
137
- there is one that does not hold up - an unverifiable signature is never treated as an identity,
138
- so it can never become something we accept. */
139
- async function verifyCheckoutSigner(config: {
140
- repoPath: string;
141
- files: { manifest?: Buffer; signature?: Buffer };
142
- }) {
143
- let { repoPath, files } = config;
144
- if (!files.manifest && !files.signature) {
145
- return UNSIGNED;
146
- }
147
- if (!files.manifest || !files.signature) {
148
- throw new Error(`Expected both ${MANIFEST_NAME} and ${SIGNATURE_NAME}, only one is present`);
149
- }
150
- let result = await spawnPromise({
151
- command: "ssh-keygen",
152
- args: ["-Y", "check-novalidate", "-n", SIGN_NAMESPACE, "-s", path.join(repoPath, SIGNATURE_NAME)],
153
- // The signature covers the normalised bytes, so a checkout that arrived with CRLF still
154
- // verifies rather than looking like tampering.
155
- input: normalizeContent(files.manifest).toString("utf8"),
156
- });
157
- if (result.status !== 0) {
158
- throw new Error(
159
- `the signature over ${MANIFEST_NAME} does not verify: `
160
- + `${(result.stdout + result.stderr).trim().slice(0, MAX_ERROR_BODY_LENGTH)}`
161
- );
162
- }
163
- let reported = `${result.stdout} ${result.stderr}`.match(/(SHA256:[A-Za-z0-9+/=]+)/);
164
- if (!reported) {
165
- throw new Error(`ssh-keygen reported no signer fingerprint, said ${result.stdout.slice(0, MAX_ERROR_BODY_LENGTH)}`);
166
- }
167
- let { publicKey, fingerprint } = publicKeyFromSignature(files.signature.toString("utf8"));
168
- // The key we read out of the signature has to be the one ssh-keygen just checked against,
169
- // otherwise we would be reporting an identity that did not sign anything.
170
- if (fingerprint !== reported[1]) {
171
- throw new Error(`the signing key reads as ${fingerprint} but ssh-keygen verified ${reported[1]}`);
172
- }
173
- await verifyManifestMatchesFiles(repoPath);
174
- return publicKey;
175
- }
176
-
177
- /** Proves a checkout on disk was signed, and that the files in it are the ones that were signed.
178
- Returns the signer, and throws if anything about that does not hold.
179
-
180
- Anything reading a repo for something other than ssh keys goes through this first: the whole
181
- checkout is covered by one manifest, so a machine list is exactly as trustworthy as the keys
182
- beside it, and neither is worth reading unsigned. */
183
- export async function verifyCheckout(repoPath: string) {
184
- return await verifyCheckoutSigner({ repoPath, files: await readSignatureFiles(repoPath) });
185
- }
186
-
187
- export function describeSigner(signer: string) {
188
- return signer === UNSIGNED && "<no public key>" || signer;
189
- }
190
-
191
- /** Reports a problem with a source's signature, but only when it is not the same problem we
192
- already reported, so a fault that persists does not repeat every check. */
193
- async function reportProblem(config: { repoURL: string; problem: string; headline: string; body: string }) {
194
- let { repoURL, problem, headline, body } = config;
195
- let sourceStateValue = sourceState(repoURL);
196
- if (sourceStateValue.reportedProblem === problem) {
197
- return;
198
- }
199
- sourceStateValue.reportedProblem = problem;
200
- await saveState();
201
- await notify(headline, body);
202
- }
203
-
204
- /** The keys a source is allowed to contribute right now. A source signed by someone we have not
205
- accepted keeps contributing the keys we last accepted, until the delay has passed. */
206
- export async function resolveSourceKeys(repoURL: string) {
207
- let sourceStateValue = sourceState(repoURL);
208
- let repoPath = sourceRepoPath(repoURL);
209
- let files = await readSignatureFiles(repoPath);
210
-
211
- let signer: string;
212
- try {
213
- signer = await verifyCheckoutSigner({ repoPath, files });
214
- } catch (e) {
215
- // Nothing here is trustworthy, so nothing here is used. Which of the two problems it is
216
- // depends on whether the signature is simply the one we already accepted.
217
- let unchanged = files.manifestHash === sourceStateValue.acceptedManifestHash
218
- && files.signatureHash === sourceStateValue.acceptedSignatureHash;
219
- if (unchanged) {
220
- await reportProblem({
221
- repoURL,
222
- problem: "stale",
223
- headline: `KEY REPO CHANGED WITHOUT BEING SIGNED`,
224
- body: `\`${repoURL}\` changed, but nobody signed the change, so it is being ignored`
225
- + ` and this machine is still using the keys signed by`
226
- + ` \`${describeSigner(sourceStateValue.acceptedSigner)}\`.`
227
- + `\n\nTo make the change take effect, run this in that repo:`
228
- + `\n\`\`\`\n${SIGN_COMMAND}\n\`\`\``,
229
- });
230
- } else {
231
- await reportProblem({
232
- repoURL,
233
- problem: "corrupt",
234
- headline: `KEY REPO SIGNATURE IS BROKEN`,
235
- body: `The signature on \`${repoURL}\` does not check out, so everything in it is`
236
- + ` being ignored and this machine is still using the keys signed by`
237
- + ` \`${describeSigner(sourceStateValue.acceptedSigner)}\`.`
238
- + `\n\n${e}`
239
- + `\n\nTo replace the signature, run this in that repo:`
240
- + `\n\`\`\`\n${SIGN_COMMAND}\n\`\`\``,
241
- });
242
- }
243
- return sourceStateValue.acceptedKeys;
244
- }
245
- if (sourceStateValue.reportedProblem) {
246
- sourceStateValue.reportedProblem = "";
247
- await saveState();
248
- }
249
- let checkoutKeys = await readCheckoutKeys(repoPath);
250
-
251
- let accept = async () => {
252
- sourceStateValue.accepted = true;
253
- sourceStateValue.acceptedSigner = signer;
254
- sourceStateValue.acceptedKeys = checkoutKeys;
255
- sourceStateValue.acceptedManifestHash = files.manifestHash;
256
- sourceStateValue.acceptedSignatureHash = files.signatureHash;
257
- sourceStateValue.pendingSigner = UNSIGNED;
258
- sourceStateValue.pendingSince = 0;
259
- await saveState();
260
- return checkoutKeys;
261
- };
262
-
263
- // Nothing has ever been accepted from this source, so this is what we start trusting.
264
- if (!sourceStateValue.accepted) {
265
- console.log(`Trusting ${repoURL} as signed by ${describeSigner(signer)}`);
266
- return await accept();
267
- }
268
-
269
- if (signer === sourceStateValue.acceptedSigner) {
270
- // Back to the signer we already trust, so anything we were waiting on is moot.
271
- if (sourceStateValue.pendingSince) {
272
- console.log(`${repoURL} is signed by its accepted key again, dropping the pending change`);
118
+ for (let filePath of listed.keys()) {
119
+ if (!files.has(filePath)) {
120
+ throw stale(`${path.join(repoPath, filePath)} is signed for but missing`);
273
121
  }
274
- return await accept();
275
- }
276
-
277
- // Going from nothing to something signed is only ever an improvement, so it does not wait.
278
- if (sourceStateValue.acceptedSigner === UNSIGNED) {
279
- await notify(`KEY REPO IS NOW SIGNED`,
280
- `\`${repoURL}\` was not signed at all before, so this is an improvement and its keys`
281
- + ` are being applied right away.`
282
- + `\n\nsigned by: \`${signer}\``
283
- );
284
- return await accept();
285
- }
286
-
287
- // A signer we have not accepted. Anything new restarts the wait, so publishing twice in a row
288
- // gains an attacker nothing. pendingSince is what marks a wait as running, because an unsigned
289
- // checkout is itself a signer value and cannot double as "nothing pending".
290
- if (!sourceStateValue.pendingSince || signer !== sourceStateValue.pendingSigner) {
291
- sourceStateValue.pendingSigner = signer;
292
- sourceStateValue.pendingSince = Date.now();
293
- await saveState();
294
- await notify(`KEY REPO SIGNED BY A DIFFERENT KEY`,
295
- `Somebody else is signing \`${repoURL}\` now. Its keys are NOT being applied, and this`
296
- + ` machine is still using the ones it already had. If nothing changes, the new signer`
297
- + ` is accepted in 24 hours.`
298
- + `\n\nIf that was not you, fix the repo before the 24 hours are up.`
299
- + `\n\nsigned by now: \`${describeSigner(signer)}\``
300
- + `\nsigned by before: \`${describeSigner(sourceStateValue.acceptedSigner)}\``
301
- );
302
- return sourceStateValue.acceptedKeys;
303
- }
304
-
305
- if (Date.now() - sourceStateValue.pendingSince < SIGNER_CHANGE_DELAY) {
306
- return sourceStateValue.acceptedKeys;
307
122
  }
308
123
 
309
- // Same new signer, 24 hours later, and nobody stopped it.
310
- console.log(`Accepting ${describeSigner(signer)} for ${repoURL} after the ${SIGNER_CHANGE_DELAY}ms wait`);
311
- return await accept();
124
+ return { signer, manifestHash, signatureHash, files };
312
125
  }
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -142,4 +142,4 @@ async function readRepoKeys(repoPath) {
142
142
  }
143
143
  exports.readRepoKeys = readRepoKeys;
144
144
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplZEtleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhdXRob3JpemVkS2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMkRBQTZCO0FBQzdCLGdEQUF3QjtBQUV4QixTQUFnQixhQUFhLENBQUMsUUFBZ0I7SUFDMUMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs4RUFDOEU7QUFDOUUsU0FBZ0IsY0FBYyxDQUFDLE9BQWU7SUFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FB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QUFFLENBQUM7UUFDdEMsT0FBTyxhQUFhLENBQUMsTUFBTSxrQkFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELFFBQVEsaUJBQWlCLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQWZELG9DQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplS2V5cyhjb250ZW50czogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnRzLnNwbGl0KFwiXFxuXCIpLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKS5maWx0ZXIobGluZSA9PiBsaW5lICYmICFsaW5lLnN0YXJ0c1dpdGgoXCIjXCIpKTtcbn1cblxuLyoqIFRoZSBmaW5nZXJwcmludCBzc2ggaXRzZWxmIHJlcG9ydHMgZm9yIGEga2V5LCB3aGljaCBpcyB3aGF0IHRoZSBzc2hkIGxvZyBuYW1lcyBhbmQgdGhlcmVmb3JlXG4gICAgd2hhdCBhIHJldm9jYXRpb24gaXMga2V5ZWQgYnkuIFJldHVybnMgXCJcIiBmb3IgYSBsaW5lIHRoYXQgaG9sZHMgbm8ga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleUZpbmdlcnByaW50KGtleUxpbmU6IHN0cmluZykge1xuICAgIGxldCBwYXJ0cyA9IGtleUxpbmUudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgbGV0IHR5cGVJbmRleCA9IHBhcnRzLmZpbmRJbmRleChwYXJ0ID0+IC9eKHNzaC18ZWNkc2EtfHNrLSkvLnRlc3QocGFydCkpO1xuICAgIGxldCBibG9iID0gdHlwZUluZGV4ID49IDAgJiYgcGFydHNbdHlwZUluZGV4ICsgMV0gfHwgXCJcIjtcbiAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlNIQTI1NjpcIiArIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShCdWZmZXIuZnJvbShibG9iLCBcImJhc2U2NFwiKSkuZGlnZXN0KFwiYmFzZTY0XCIpLnJlcGxhY2UoLz0rJC8sIFwiXCIpO1xufVxuXG5leHBvcnQgY29uc3QgTk9fUkVTVFJJQ1RJT04gPSBcIkFOWSBBRERSRVNTIChubyBmcm9tPSByZXN0cmljdGlvbilcIjtcblxuLyoqIFRoZSBhZGRyZXNzZXMgYSBrZXkgbWF5IGJlIHVzZWQgZnJvbSwgb25lIGJ5IG9uZSwgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIGtleSBjYXJyaWVzIG5vIGZyb209XG4gICAgYXQgYWxsLiBVbmRlZmluZWQgYW5kIGFuIGVtcHR5IGxpc3QgYXJlIHZlcnkgZGlmZmVyZW50IHRoaW5ncywgc28gdGhleSBzdGF5IGRpc3Rpbmd1aXNoYWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZXlSZXN0cmljdGlvbkxpc3Qoa2V5TGluZTogc3RyaW5nKSB7XG4gICAgbGV0IG1hdGNoID0ga2V5TGluZS5tYXRjaCgvZnJvbT1cIihbXlwiXSopXCIvKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaFsxXS5zcGxpdChcIixcIikubWFwKGVudHJ5ID0+IGVudHJ5LnRyaW0oKSkuZmlsdGVyKGVudHJ5ID0+IGVudHJ5KTtcbn1cblxuLyoqIFRoZSBhZGRyZXNzZXMgYSBrZXkgbWF5IGJlIHVzZWQgZnJvbSwgd2hpY2ggaXMgdGhlIHBhcnQgb2YgYW4gYXV0aG9yaXplZF9rZXlzIGxpbmUgdGhhdFxuICAgIGRlY2lkZXMgaG93IG11Y2ggYSBzdG9sZW4ga2V5IGlzIHdvcnRoLiBBIGtleSB3aXRoIG5vIHJlc3RyaWN0aW9uIHNheXMgc28gbG91ZGx5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleVJlc3RyaWN0aW9uKGtleUxpbmU6IHN0cmluZykge1xuICAgIGxldCBsaXN0ID0ga2V5UmVzdHJpY3Rpb25MaXN0KGtleUxpbmUpO1xuICAgIGlmICghbGlzdCkge1xuICAgICAgICByZXR1cm4gTk9fUkVTVFJJQ1RJT047XG4gICAgfVxuICAgIHJldHVybiBsaXN0LmpvaW4oXCIsXCIpO1xufVxuXG4vKiogQWRkcyBhZGRyZXNzZXMgdG8gYSBrZXkncyBmcm9tPSBsaXN0LCBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSBsaW5lIGV4YWN0bHkgYXMgaXQgd2FzLiBSZXR1cm5zXG4gICAgd2hpY2ggYWRkcmVzc2VzIHdlcmUgYWN0dWFsbHkgbmV3LCBzbyBhIGNhbGxlciBjYW4gcmVwb3J0IG9ubHkgd2hhdCBpdCBjaGFuZ2VkLlxuXG4gICAgQSBrZXkgd2l0aCBubyBmcm9tPSBhdCBhbGwgaXMgbGVmdCBhbG9uZTogYWRkaW5nIG9uZSB3b3VsZCBzaWxlbnRseSByZXN0cmljdCBhIGtleSB0aGF0IGlzXG4gICAgY3VycmVudGx5IHVucmVzdHJpY3RlZCwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgZGVjaXNpb24gdGhhbiB0aGUgb25lIGJlaW5nIG1hZGUgaGVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0FkZHJlc3NlcyhrZXlMaW5lOiBzdHJpbmcsIGFkZHJlc3Nlczogc3RyaW5nW10pIHtcbiAgICBsZXQgbGlzdCA9IGtleVJlc3RyaWN0aW9uTGlzdChrZXlMaW5lKTtcbiAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgcmV0dXJuIHsga2V5TGluZSwgYWRkZWQ6IFtdIGFzIHN0cmluZ1tdIH07XG4gICAgfVxuICAgIGxldCBhbGxvd2VkID0gbGlzdDtcbiAgICBsZXQgYWRkZWQgPSBhZGRyZXNzZXMuZmlsdGVyKGFkZHJlc3MgPT4gYWRkcmVzcyAmJiAhYWxsb3dlZC5pbmNsdWRlcyhhZGRyZXNzKSk7XG4gICAgaWYgKCFhZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsga2V5TGluZSwgYWRkZWQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5TGluZToga2V5TGluZS5yZXBsYWNlKC9mcm9tPVwiW15cIl0qXCIvLCBgZnJvbT1cIiR7Wy4uLmFsbG93ZWQsIC4uLmFkZGVkXS5qb2luKFwiLFwiKX1cImApLFxuICAgICAgICBhZGRlZCxcbiAgICB9O1xufVxuXG4vKiogRW5vdWdoIHRvIHJlY29nbmlzZSB3aG9zZSBrZXkgdGhpcyBpcyB3aXRob3V0IHByaW50aW5nIHRoZSB3aG9sZSBibG9iLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZUtleShrZXlMaW5lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFydHMgPSBrZXlMaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgIGxldCB0eXBlSW5kZXggPSBwYXJ0cy5maW5kSW5kZXgocGFydCA9PiAvXihzc2gtfGVjZHNhLXxzay0pLy50ZXN0KHBhcnQpKTtcbiAgICBpZiAodHlwZUluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4ga2V5TGluZS5zbGljZSgwLCA2MCk7XG4gICAgfVxuICAgIGxldCB0eXBlID0gcGFydHNbdHlwZUluZGV4XTtcbiAgICBsZXQgYmxvYiA9IHBhcnRzW3R5cGVJbmRleCArIDFdIHx8IFwiXCI7XG4gICAgbGV0IGNvbW1lbnQgPSBwYXJ0cy5zbGljZSh0eXBlSW5kZXggKyAyKS5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gYCR7dHlwZX0gLi4uJHtibG9iLnNsaWNlKC0xMil9JHtjb21tZW50ICYmIGAgJHtjb21tZW50fWAgfHwgXCJcIn1gO1xufVxuXG4vKiogVGhlIHNob3J0ZXN0IHRoaW5nIHRoYXQgc3RpbGwgaWRlbnRpZmllcyBhIGtleSB0byBhIHBlcnNvbjogdGhlIGNvbW1lbnQgaXQgY2Fycmllcywgd2hpY2ggaXNcbiAgICB1c3VhbGx5IHVzZXJAbWFjaGluZSwgYW5kIG90aGVyd2lzZSB0aGUgdGFpbCBvZiB0aGUga2V5IGl0c2VsZi4gRm9yIHRoZSBmaXJzdCBsaW5lIG9mIGFcbiAgICBub3RpZmljYXRpb24sIHdoZXJlIHRoZXJlIGlzIG9ubHkgcm9vbSBmb3IgdGhlIG9uZSB0aGluZyB0aGF0IG1hdHRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5TmljZU5hbWUoa2V5TGluZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcnRzID0ga2V5TGluZS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICBsZXQgdHlwZUluZGV4ID0gcGFydHMuZmluZEluZGV4KHBhcnQgPT4gL14oc3NoLXxlY2RzYS18c2stKS8udGVzdChwYXJ0KSk7XG4gICAgaWYgKHR5cGVJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIGtleUxpbmUuc2xpY2UoMCwgMjApO1xuICAgIH1cbiAgICBsZXQgY29tbWVudCA9IHBhcnRzLnNsaWNlKHR5cGVJbmRleCArIDIpLmpvaW4oXCIgXCIpO1xuICAgIHJldHVybiBjb21tZW50IHx8IGAuLi4keyhwYXJ0c1t0eXBlSW5kZXggKyAxXSB8fCBcIlwiKS5zbGljZSgtOCl9YDtcbn1cblxuLyoqIFdoYXQgYSBzZXQgb2Yga2V5cyBoYXMgdG8gc2F0aXNmeSBiZWZvcmUgaXQgaXMgd29ydGggc2lnbmluZywgYXMgYSBsaXN0IG9mIGNvbXBsYWludHMuXG5cbiAgICBFdmVyeSBrZXkgbmVlZHMgYSBmcm9tPSwgYmVjYXVzZSBhbiB1bnJlc3RyaWN0ZWQga2V5IGNhbiBuZXZlciBiZSBjYXVnaHQgYmVpbmcgdXNlZCBmcm9tIHRoZVxuICAgIHdyb25nIHBsYWNlLCBhbmQgYmVpbmcgY2F1Z2h0IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgdHJpZ2dlcnMgYSByZXZvY2F0aW9uLlxuXG4gICAgTm8gdHdvIGtleXMgbWF5IGFsbG93IHRoZSBzYW1lIGFkZHJlc3NlcywgYmVjYXVzZSB0aGF0IGlzIG9uZSBwZXJzb24gaG9sZGluZyB0d28ga2V5czogcmV2b2tpbmdcbiAgICBvbmUgb2YgdGhlbSBsZWF2ZXMgdGhlIG90aGVyIHdvcmtpbmcsIHNvIHRoZSByZXZvY2F0aW9uIGFjaGlldmVzIG5vdGhpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEtleVByb2JsZW1zKGtleXM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHByb2JsZW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBieVJlc3RyaWN0aW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGxldCByZXN0cmljdGlvbiA9IGtleVJlc3RyaWN0aW9uTGlzdChrZXkpO1xuICAgICAgICBpZiAoIXJlc3RyaWN0aW9uKSB7XG4gICAgICAgICAgICBwcm9ibGVtcy5wdXNoKGBubyBmcm9tPSByZXN0cmljdGlvbiwgc28gaXQgY2FuIGJlIHVzZWQgZnJvbSBhbnl3aGVyZTpcXG4gICAgICAke3N1bW1hcml6ZUtleShrZXkpfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGVkLCBzbyB0aGUgc2FtZSBhZGRyZXNzZXMgd3JpdHRlbiBpbiBhIGRpZmZlcmVudCBvcmRlciBzdGlsbCBjb3VudCBhcyB0aGUgc2FtZS5cbiAgICAgICAgbGV0IGlkZW50aXR5ID0gWy4uLnJlc3RyaWN0aW9uXS5zb3J0KCkuam9pbihcIixcIik7XG4gICAgICAgIGJ5UmVzdHJpY3Rpb24uc2V0KGlkZW50aXR5LCBbLi4uKGJ5UmVzdHJpY3Rpb24uZ2V0KGlkZW50aXR5KSB8fCBbXSksIGtleV0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBbcmVzdHJpY3Rpb24sIHNoYXJpbmddIG9mIGJ5UmVzdHJpY3Rpb24pIHtcbiAgICAgICAgaWYgKHNoYXJpbmcubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJvYmxlbXMucHVzaChcbiAgICAgICAgICAgIGAke3NoYXJpbmcubGVuZ3RofSBrZXlzIGFsbG93IGV4YWN0bHkgdGhlIHNhbWUgYWRkcmVzc2VzICgke3Jlc3RyaWN0aW9ufSksIHdoaWNoIGlzIG9uZWBcbiAgICAgICAgICAgICsgYCBwZXJzb24gaG9sZGluZyBtb3JlIHRoYW4gb25lIGtleTpcXG5gXG4gICAgICAgICAgICArIHNoYXJpbmcubWFwKGtleSA9PiBgICAgICAgJHtzdW1tYXJpemVLZXkoa2V5KX1gKS5qb2luKFwiXFxuXCIpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwcm9ibGVtcztcbn1cblxuLyoqIFJlYWRzIHRoZSBhdXRob3JpemVkIGtleXMgYSByZXBvIGNoZWNrb3V0IHdhbnRzIGFwcGxpZWQuIFByZWZlcnMgYSB0b3AgbGV2ZWwgYXV0aG9yaXplZF9rZXlzXG4gICAgZmlsZSBhbmQgb3RoZXJ3aXNlIGNvbmNhdGVuYXRlcyBldmVyeSAucHViIGF0IHRoZSB0b3AgbGV2ZWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcG9LZXlzKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgY29tYmluZWRQYXRoID0gcGF0aC5qb2luKHJlcG9QYXRoLCBcImF1dGhvcml6ZWRfa2V5c1wiKTtcbiAgICBsZXQgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIocmVwb1BhdGgpO1xuICAgIGlmIChlbnRyaWVzLmluY2x1ZGVzKFwiYXV0aG9yaXplZF9rZXlzXCIpKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVLZXlzKGF3YWl0IGZzLnJlYWRGaWxlKGNvbWJpbmVkUGF0aCwgXCJ1dGY4XCIpKTtcbiAgICB9XG4gICAgbGV0IHB1YkZpbGVzID0gZW50cmllcy5maWx0ZXIobmFtZSA9PiBuYW1lLmVuZHNXaXRoKFwiLnB1YlwiKSkuc29ydCgpO1xuICAgIGlmICghcHViRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXV0aG9yaXplZF9rZXlzIG9yIGF0IGxlYXN0IG9uZSAucHViIGZpbGUgaW4gJHtyZXBvUGF0aH0sIGZvdW5kIG5laXRoZXJgKTtcbiAgICB9XG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgbmFtZSBvZiBwdWJGaWxlcykge1xuICAgICAgICBrZXlzLnB1c2goLi4ubm9ybWFsaXplS2V5cyhhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ocmVwb1BhdGgsIG5hbWUpLCBcInV0ZjhcIikpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG4iXX0=
145
- /* _JS_SOURCE_HASH = "5dc60c0f88ff3878003bf57017d1342326afa7c6a9f511d5896e4113565a7823"; */
145
+ /* _JS_SOURCE_HASH = "622a4e8d2e5f745af7a714ec04f3cfd72e7e92f0c7d74044c6ca1d511499b9d9"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -108,4 +108,4 @@ async function resolveKeysRepo(named) {
108
108
  }
109
109
  exports.resolveKeysRepo = resolveKeysRepo;
110
110
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c1JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJrZXlzUmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNkI7QUFDN0IsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QiwwQ0FBNkM7QUFDN0MscURBQWdEO0FBQ2hELHVDQUEyQztBQUMzQyw0Q0FBOEM7QUFDOUMsNENBQWdEO0FBRWhELGdHQUFnRztBQUNoRyxnR0FBZ0c7QUFDaEcsaUdBQWlHO0FBQ2pHLEVBQUU7QUFDRixpR0FBaUc7QUFDakcscUVBQXFFO0FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUM7QUFFL0MsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUM7UUFDRCxNQUFNLGtCQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUM7QUFFRDttRkFDbUY7QUFDbkYsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDRCxNQUFNLElBQUEsNkJBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLEtBQUssVUFBVSxzQkFBc0I7SUFDakMsNkZBQTZGO0lBQzdGLGtGQUFrRjtJQUNsRixJQUFJLFFB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LElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxvQ0FBb0MsSUFBSTtVQUMvRSxDQUFDLFlBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxPQUFPO1lBQ3hCLENBQUMsQ0FBQyxvQ0FBb0MsY0FBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0I7a0JBQzNGLDJDQUEyQyxjQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDOUUsQ0FBQyxDQUFDLDZEQUE2RDtrQkFDN0QsNENBQTRDO2tCQUM1QyxvREFBb0QsQ0FBQyxDQUM5RCxDQUFDO0FBQ04sQ0FBQztBQWxDRCwwQ0FrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQ09ORklHX1BBVEggfSBmcm9tIFwiLi9kYWVtb24vcGF0aHNcIjtcbmltcG9ydCB7IHJlYWRSZXBvS2V5cyB9IGZyb20gXCIuL2F1dGhvcml6ZWRLZXlzXCI7XG5pbXBvcnQgeyBzb3VyY2VSZXBvUGF0aCB9IGZyb20gXCIuL3NvdXJjZXNcIjtcbmltcG9ydCB7IGV4cGFuZEhvbWUgfSBmcm9tIFwiLi4vaGVscGVycy9wYXRoc1wiO1xuaW1wb3J0IHsgc3Bhd25Qcm9taXNlIH0gZnJvbSBcIi4uL2hlbHBlcnMvc3Bhd25cIjtcblxuLy8gVGhlIG9uZSBwbGFjZSB0aGF0IGFuc3dlcnMgXCJ3aGljaCBrZXlzIHJlcG9cIi4gRXZlcnl0aGluZyB0aGF0IHJlYWRzIG9yIHdyaXRlcyBvbmUgY29tZXMgaGVyZTpcbi8vIHNpZ25pbmcsIHVucmV2b2tpbmcsIG1hY2hpbmUgdHJ1c3QsIGFuZCBhZGRpbmcgYSBtYWNoaW5lLiBUaGV5IHdlcmUgZWFjaCB3b3JraW5nIGl0IG91dCB0aGVpclxuLy8gb3duIHdheSwgd2hpY2ggaXMgaG93IHNpZ25maWxlcyBlbmRlZCB1cCBzaWduaW5nIHdoYXRldmVyIHJlcG8geW91IGhhcHBlbmVkIHRvIGJlIHN0YW5kaW5nIGluLlxuLy9cbi8vIFdoZXJlIGEgV2luZG93cyBtYWNoaW5lIGlzIGV4cGVjdGVkIHRvIGtlZXAgaXQsIHJlbGF0aXZlIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gVGhlcmUgaXMgbm9cbi8vIGRhZW1vbiB0aGVyZSBhbmQgbm8gL2V0Yywgc28gYSBzaWJsaW5nIGNoZWNrb3V0IGlzIHRoZSBjb252ZW50aW9uLlxuY29uc3QgV0lORE9XU19SRVBPX1BBVEggPSBcIi4uL2F1dGhvcml6ZWRfa2V5c1wiO1xuXG5hc3luYyBmdW5jdGlvbiBwYXRoRXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKiBBIGdpdCBjaGVja291dCB0aGF0IGFjdHVhbGx5IGhvbGRzIGtleXMuIEJvdGggaGFsdmVzIG1hdHRlcjogYSByZXBvIHdpdGggbm8gYXV0aG9yaXplZF9rZXlzIGlzXG4gICAgc29tZSBvdGhlciByZXBvLCBhbmQgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBjaGVja291dCBoYXMgbm90aGluZyB0byBwdXNoLiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNLZXlzUmVwbyhyZXBvUGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKCFhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihyZXBvUGF0aCwgXCIuZ2l0XCIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHJlYWRSZXBvS2V5cyhyZXBvUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLyoqIFRoZSByZXBvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBpbnNpZGUsIG9yIFwiXCIgd2hlbiBpdCBpcyBub3QgaW5zaWRlIG9uZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcG9PZkN1cnJlbnREaXJlY3RvcnkoKSB7XG4gICAgLy8gUmVhZCBmb3IgaXRzIHZhbHVlLCBzbyBzdGRvdXQgaGFzIHRvIGJlIG9uIGl0cyBvd24uIHJ1blByb21pc2Ugam9pbnMgaXQgd2l0aCBzdGRlcnIsIGFuZCBhXG4gICAgLy8gZ2l0IHdhcm5pbmcgZ2x1ZWQgdG8gdGhlIGZyb250IG9mIHRoaXMgYmVjb21lcyBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGV4aXN0LlxuICAgIGxldCB0b3BMZXZlbCA9IGF3YWl0IHNwYXduUHJvbWlzZSh7IGNvbW1hbmQ6IFwiZ2l0XCIsIGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSB9KTtcbiAgICByZXR1cm4gdG9wTGV2ZWwuc3RhdHVzID09PSAwICYmIHRvcExldmVsLnN0ZG91dC50cmltKCkgfHwgXCJcIjtcbn1cblxuLyoqIFdoZXJlIHRoaXMgbWFjaGluZSdzIG93biBrZXlzIHJlcG8gaXMsIHdoZW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG5vdCBvbmUuXG5cbiAgICBPbiBhIGhvc3QgdGhhdCBpcyB0aGUgY2hlY2tvdXQgdGhlIGRhZW1vbiBrZWVwcyB1cCB0byBkYXRlLiBPbiBXaW5kb3dzIHRoZXJlIGlzIG5vIGRhZW1vbiwgc29cbiAgICBpdCBpcyB0aGUgc2libGluZyBkaXJlY3RvcnkuICovXG5hc3luYyBmdW5jdGlvbiBjb25maWd1cmVkUmVwbygpIHtcbiAgICBpZiAob3MucGxhdGZvcm0oKSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoV0lORE9XU19SRVBPX1BBVEgpO1xuICAgIH1cbiAgICBsZXQgY29uZmlnID0gYXdhaXQgZnMucmVhZEZpbGUoQ09ORklHX1BBVEgsIFwidXRmOFwiKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICBsZXQgc291cmNlVVJMID0gY29uZmlnICYmIChKU09OLnBhcnNlKGNvbmZpZykucmVwb1NvdXJjZXMgfHwgW10pWzBdIHx8IFwiXCI7XG4gICAgcmV0dXJuIHNvdXJjZVVSTCAmJiBzb3VyY2VSZXBvUGF0aChzb3VyY2VVUkwpIHx8IFwiXCI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9yaWdpbk9mKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgb3JpZ2luID0gYXdhaXQgc3Bhd25Qcm9taXNlKHsgY29tbWFuZDogXCJnaXRcIiwgYXJnczogW1wicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCBcIm9yaWdpblwiXSwgY3dkOiByZXBvUGF0aCB9KTtcbiAgICBsZXQgdXJsID0gb3JpZ2luLnN0ZG91dC50cmltKCk7XG4gICAgaWYgKG9yaWdpbi5zdGF0dXMgIT09IDAgfHwgIXVybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7cmVwb1BhdGh9IHRvIGhhdmUgYW4gb3JpZ2luIHJlbW90ZSwgaXQgaGFzIG5vbmVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqIFRoZSBrZXlzIHJlcG8gdG8gYWN0IG9uLlxuXG4gICAgQSBuYW1lZCBvbmUgaWYgdGhlcmUgaXMgb25lLCBvdGhlcndpc2UgdGhlIHJlcG8gdGhlIGNvbW1hbmQgaXMgYmVpbmcgcnVuIGluIGlmIHRoYXQgcmVwbyBob2xkc1xuICAgIGtleXMsIG90aGVyd2lzZSB0aGlzIG1hY2hpbmUncyBvd24uIFJ1bm5pbmcgaW4gc29tZSBvdGhlciByZXBvIHRoZXJlZm9yZSByZWFjaGVzIHRoZSBrZXlzIHJlcG9cbiAgICByYXRoZXIgdGhhbiBhY3Rpbmcgb24gd2hhdGV2ZXIgaGFwcGVuZWQgdG8gYmUgYXJvdW5kIC0gc2lnbmluZyBzbGlmdHV0aWxzIGJlY2F1c2UgdGhhdCBpcyB3aGVyZVxuICAgIHRoZSB0ZXJtaW5hbCB3YXMgaXMgbmV2ZXIgd2hhdCBhbnlib2R5IG1lYW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVLZXlzUmVwbyhuYW1lZD86IHN0cmluZyk6IFByb21pc2U8eyByZXBvUGF0aDogc3RyaW5nOyBzb3VyY2VVUkw6IHN0cmluZyB9PiB7XG4gICAgbGV0IHRyaWVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgbGV0IGNhbmRpZGF0ZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKG5hbWVkKSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaChleHBhbmRIb21lKG5hbWVkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBhd2FpdCByZXBvT2ZDdXJyZW50RGlyZWN0b3J5KCk7XG4gICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbmZpZ3VyZWQgPSBhd2FpdCBjb25maWd1cmVkUmVwbygpO1xuICAgICAgICBpZiAoY29uZmlndXJlZCAmJiBjb25maWd1cmVkICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goY29uZmlndXJlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCByZXBvUGF0aCBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGlmIChhd2FpdCBpc0tleXNSZXBvKHJlcG9QYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVwb1BhdGgsIHNvdXJjZVVSTDogYXdhaXQgb3JpZ2luT2YocmVwb1BhdGgpIH07XG4gICAgICAgIH1cbiAgICAgICAgdHJpZWQucHVzaChyZXBvUGF0aCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYSBnaXQgcmVwbyBob2xkaW5nIGF1dGhvcml6ZWRfa2V5cywgZm91bmQgbm9uZS5cXG5gXG4gICAgICAgICsgYExvb2tlZCBpbjpcXG4gICR7dHJpZWQuam9pbihcIlxcbiAgXCIpIHx8IFwiKG5vd2hlcmUgLSB0aGlzIGlzIG5vdCBhIGdpdCByZXBvKVwifVxcbmBcbiAgICAgICAgKyAob3MucGxhdGZvcm0oKSA9PT0gXCJ3aW4zMlwiXG4gICAgICAgICAgICA/IGBPbiBXaW5kb3dzIHRoZSByZXBvIGlzIHJlYWQgZnJvbSAke3BhdGgucmVzb2x2ZShXSU5ET1dTX1JFUE9fUEFUSCl9LCBzbyBjbG9uZSBpdCB0aGVyZTpcXG5gXG4gICAgICAgICAgICArIGAgIGdpdCBjbG9uZSA8eW91ciBhdXRob3JpemVkX2tleXMgcmVwbz4gJHtwYXRoLnJlc29sdmUoV0lORE9XU19SRVBPX1BBVEgpfWBcbiAgICAgICAgICAgIDogYFNldCB0aGlzIG1hY2hpbmUgdXAsIG9yIHJ1biB0aGlzIGZyb20gaW5zaWRlIGEga2V5cyByZXBvOlxcbmBcbiAgICAgICAgICAgICsgYCAgeWFybiBzZXR1cG5vdGlmeSA8ZGlzY29yZC13ZWJob29rLXVybD5cXG5gXG4gICAgICAgICAgICArIGAgIHlhcm4gc2VjdXJlc3NoIGFkZCA8cmVwby1wcml2YXRlLWtleT4gPHJlcG8tdXJsPmApXG4gICAgKTtcbn1cbiJdfQ==
111
- /* _JS_SOURCE_HASH = "cc6f1a68a3ed8776d2d177cfa31dd8917cb1f08773131d306af563402dc5c293"; */
111
+ /* _JS_SOURCE_HASH = "0a60b8461fd314f179501c420f00b557b2f1144e5f6481cc44dd42796e78d895"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -54,4 +54,4 @@ function deriveRevokeKey(sourcePrivateKey) {
54
54
  }
55
55
  exports.deriveRevokeKey = deriveRevokeKey;
56
56
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2tlU291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmV2b2tlU291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGlEQUFxRDtBQUNyRCxtREFBcUY7QUFDckYsZ0RBQXdCO0FBQ3hCLHVDQUEwRjtBQUUxRiwrRkFBK0Y7QUFDL0YsZ0dBQWdHO0FBQ2hHLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQywrRkFBK0Y7QUFDL0Ysa0VBQWtFO0FBQ3JELFFBQUEsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7QUFFbEQsU0FBZ0IsYUFBYSxDQUFDLFNBQWlCO0lBQzNDLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBRyxVQUFVLEdBQUcsY0FBYyxNQUFNLENBQUM7QUFDaEQsQ0FBQztBQUhELHNDQUdDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLFNBQWlCO0lBQzNDLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFBLGlCQUFPLEdBQUUsRUFBRSxHQUFHLElBQUEsb0JBQVUsRUFBQyxTQUFTLENBQUMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLFNBQWlCO0lBQ2pELE9BQU8sR0FBRyw4QkFBb0IsSUFBSSxJQUFBLG9CQUFVLEVBQUMsU0FBUyxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUM7QUFDL0UsQ0FBQztBQUZELGtEQUVDO0FBRUQsK0ZBQStGO0FBQ3hGLEtBQUssVUFBVSxhQUFhLENBQUMsU0FBaUI7SUFDakQsT0FBTyxNQUFNLElBQUEsaUJBQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsU0FBaUI7SUFDNUMsT0FBTyxHQUFHLG1CQUFTLElBQUksSUFBQSxvQkFBVSxFQUFDLFNBQVMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDO0FBQ3BFLENBQUM7QUFGRCx3Q0FFQztBQUVEO3lGQUN5RjtBQUN6RixTQUFnQixlQUFlLENBQUMsZ0JBQXdCO0lBQ3BELElBQUksTUFBTSxHQUFHLElBQUEsbUNBQXNCLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxJQUFJLE9BQU8sR0FBRyxJQUFBLDRCQUFnQixFQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLHdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUMvRSxPQUFPO1FBQ0gsU0FBUyxFQUFFLGVBQWUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUztTQUNoRCxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3ZCLGNBQWMsRUFBRSxJQUFBLG9DQUF1QixFQUFDO1lBQ3BDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLFlBQVksSUFBSSx3QkFBZ0IsRUFBRTtTQUNuRSxDQUFDO0tBQ0wsQ0FBQztBQUNOLENBQUM7QUFiRCwwQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlcml2ZUVkMjU1MTlLZXkgfSBmcm9tIFwiLi4va2V5cy9kZXJpdmVLZXlcIjtcbmltcG9ydCB7IGZvcm1hdE9wZW5TU0hQcml2YXRlS2V5LCBwYXJzZU9wZW5TU0hQcml2YXRlS2V5IH0gZnJvbSBcIi4uL2tleXMvc3NoS2V5RmlsZVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZpbmRLZXksIGtleXNEaXIsIExFR0FDWV9SRVBPX0tFWVNfRElSLCBSRVBPU19ESVIsIHNvdXJjZU5hbWUgfSBmcm9tIFwiLi9zb3VyY2VzXCI7XG5cbi8vIEEgc291cmNlJ3MgcmV2b2NhdGlvbnMgbGl2ZSBpbiBhIHJlcG8gYmVzaWRlIGl0LiBEZXJpdmVkIHJhdGhlciB0aGFuIGNvbmZpZ3VyZWQsIHNvIGFkZGluZyBhXG4vLyBzb3VyY2UgYnJpbmdzIGl0cyByZXZva2UgcmVwbyB3aXRoIGl0IGFuZCB0aGVyZSBpcyBub3RoaW5nIGV4dHJhIHRvIHBhc3Mgb24gdGhlIGNvbW1hbmQgbGluZS5cbmNvbnN0IFJFVk9LRURfU1VGRklYID0gXCJfcmV2b2tlZFwiO1xuLy8gR2l0SHViIHdpbGwgbm90IHRha2UgdGhlIHNhbWUgcHVibGljIGtleSBhcyBhIGRlcGxveSBrZXkgb24gdHdvIHJlcG9zLCBzbyB0aGUgcmV2b2tlIHJlcG8gaXNcbi8vIHJlYWNoZWQgd2l0aCBhIGtleSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSdzLCB1bmRlciB0aGlzIGxhYmVsLlxuZXhwb3J0IGNvbnN0IFJFVk9LRV9LRVlfTEFCRUwgPSBcInJldm9rZWdpdGh1YmtleVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlUmVwb1VSTChzb3VyY2VVUkw6IHN0cmluZykge1xuICAgIGxldCB3aXRob3V0R2l0ID0gc291cmNlVVJMLnJlcGxhY2UoL1xcLmdpdCQvLCBcIlwiKTtcbiAgICByZXR1cm4gYCR7d2l0aG91dEdpdH0ke1JFVk9LRURfU1VGRklYfS5naXRgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlS2V5UGF0aChzb3VyY2VVUkw6IHN0cmluZykge1xuICAgIHJldHVybiBwYXRoLmpvaW4oa2V5c0RpcigpLCBgJHtzb3VyY2VOYW1lKHNvdXJjZVVSTCl9JHtSRVZPS0VEX1NVRkZJWH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZ2FjeVJldm9rZUtleVBhdGgoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7TEVHQUNZX1JFUE9fS0VZU19ESVJ9LyR7c291cmNlTmFtZShzb3VyY2VVUkwpfSR7UkVWT0tFRF9TVUZGSVh9YDtcbn1cblxuLyoqIFdoZXJldmVyIHRoaXMgc291cmNlJ3MgcmV2b2tlIGtleSBhbHJlYWR5IGlzLCBvciBub3RoaW5nIGlmIGl0IGhhcyBub3QgYmVlbiBkZXJpdmVkIHlldC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kUmV2b2tlS2V5KHNvdXJjZVVSTDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZpbmRLZXkoeyBjdXJyZW50OiByZXZva2VLZXlQYXRoKHNvdXJjZVVSTCksIGxlZ2FjeTogbGVnYWN5UmV2b2tlS2V5UGF0aChzb3VyY2VVUkwpIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlUmVwb1BhdGgoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7UkVQT1NfRElSfS8ke3NvdXJjZU5hbWUoc291cmNlVVJMKX0ke1JFVk9LRURfU1VGRklYfWA7XG59XG5cbi8qKiBUaGUgcmV2b2tlIHJlcG8ncyBrZXksIHdvcmtlZCBvdXQgZnJvbSB0aGUgc291cmNlIHJlcG8ncyBrZXkuIEFueXRoaW5nIGhvbGRpbmcgdGhlIHNvdXJjZSBrZXlcbiAgICBjYW4gcHJvZHVjZSBpdCwgc28gaXQgbmV2ZXIgaGFzIHRvIGJlIHN0b3JlZCBhbnl3aGVyZSBzZXBhcmF0ZWx5IG9yIGhhbmRlZCBhcm91bmQuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlUmV2b2tlS2V5KHNvdXJjZVByaXZhdGVLZXk6IHN0cmluZykge1xuICAgIGxldCBzb3VyY2UgPSBwYXJzZU9wZW5TU0hQcml2YXRlS2V5KHNvdXJjZVByaXZhdGVLZXkpO1xuICAgIGxldCBkZXJpdmVkID0gZGVyaXZlRWQyNTUxOUtleSh7IHNlZWQ6IHNvdXJjZS5zZWVkLCBsYWJlbDogUkVWT0tFX0tFWV9MQUJFTCB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwdWJsaWNLZXk6IGBzc2gtZWQyNTUxOSAke0J1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyLmZyb20oWzAsIDAsIDAsIDExXSksIEJ1ZmZlci5mcm9tKFwic3NoLWVkMjU1MTlcIiksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShbMCwgMCwgMCwgMzJdKSwgZGVyaXZlZC5wdWJsaWNLZXksXG4gICAgICAgIF0pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWAsXG4gICAgICAgIHByaXZhdGVLZXlGaWxlOiBmb3JtYXRPcGVuU1NIUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBzZWVkOiBkZXJpdmVkLnNlZWQsXG4gICAgICAgICAgICBjb21tZW50OiBgJHtzb3VyY2UuY29tbWVudCB8fCBcInBvcnRzZWN1cmVcIn0gJHtSRVZPS0VfS0VZX0xBQkVMfWAsXG4gICAgICAgIH0pLFxuICAgIH07XG59XG4iXX0=
57
- /* _JS_SOURCE_HASH = "fa19b1fd43388ad835ac95f96f64acb37f8ebbc316741e6c48fc273ac174e1e7"; */
57
+ /* _JS_SOURCE_HASH = "1cf044f3f2be95082155ec3ae573bd217e3e92827eeb2871ed71ea00d0bf4d4b"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -65,4 +65,4 @@ async function findSourceKey(repoURL) {
65
65
  }
66
66
  exports.findSourceKey = findSourceKey;
67
67
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkRBQTZCO0FBQzdCLDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIsZ0dBQWdHO0FBQ2hHLG1HQUFtRztBQUVuRyxrR0FBa0c7QUFDbEcsMENBQTBDO0FBQzdCLFFBQUEsYUFBYSxHQUFHLGlCQUFpQixDQUFDO0FBQy9DLGdHQUFnRztBQUNoRyx5QkFBeUI7QUFDWixRQUFBLG9CQUFvQixHQUFHLDJCQUEyQixDQUFDO0FBQ25ELFFBQUEsU0FBUyxHQUFHLDJDQUEyQyxDQUFDO0FBRXJFLFNBQWdCLE9BQU87SUFDbkIsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLFlBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxxQkFBYSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELDBCQUVDO0FBRUQ7MkZBQzJGO0FBQzNGLFNBQWdCLFVBQVUsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hGLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxPQUFlO0lBQ3pDLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxPQUFlO0lBQy9DLE9BQU8sR0FBRyw0QkFBb0IsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUM1RCxDQUFDO0FBRkQsa0RBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsT0FBZTtJQUMxQyxPQUFPLEdBQUcsaUJBQVMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNqRCxDQUFDO0FBRkQsd0NBRUM7QUFFRCxLQUFLLFVBQVUsVUFBVSxDQUFDLFFBQWdCO0lBQ3RDLElBQUksQ0FBQztRQUNELE1BQU0sa0JBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDVCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQztBQUVEO2lGQUNpRjtBQUMxRSxLQUFLLFVBQVUsT0FBTyxDQUFDLE1BQTJDO0lBQ3JFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLElBQUksTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFURCwwQkFTQztBQUVNLEtBQUssVUFBVSxhQUFhLENBQUMsT0FBZTtJQUMvQyxPQUFPLE1BQU0sT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFGRCxzQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8vIFBPUlRFRCBDT0RFOiBub3RoaW5nIGhlcmUgaXMgZHVwbGljYXRlZCBhbnkgbW9yZSwgdGhlIGRhZW1vbiBpbXBvcnRzIGl0IGRpcmVjdGx5LiBLZXB0IGluIG9uZVxuLy8gcGxhY2UgYmVjYXVzZSB0aGUgZGFlbW9uIGFuZCB0aGUgZGVwbG95IGhhdmUgdG8gYWdyZWUgb24gd2hlcmUgYSBzb3VyY2UncyBrZXkgYW5kIGNoZWNrb3V0IGxpdmUuXG5cbi8vIFRoZSB1c2VyJ3Mgb3duIGZvbGRlciwgc28gdGhpcyB3b3JrcyB0aGUgc2FtZSBvbiBhIG1hY2hpbmUgdGhhdCBoYXMgbm8gL2V0Yy4gVGhlIGRhZW1vbiBydW5zIGFzXG4vLyByb290LCBzbyBvbiBhIGhvc3QgdGhpcyBpcyByb290J3MgaG9tZS5cbmV4cG9ydCBjb25zdCBLRVlTX0RJUl9OQU1FID0gXCJhdXRob3JpemVkX2tleXNcIjtcbi8vIFdoZXJlIGtleXMgdXNlZCB0byBnby4gU3RpbGwgcmVhZCwgc28gYSBob3N0IHNldCB1cCBiZWZvcmUgdGhpcyBrZWVwcyB3b3JraW5nLCBidXQgbm90aGluZyBpc1xuLy8gd3JpdHRlbiBoZXJlIGFueSBtb3JlLlxuZXhwb3J0IGNvbnN0IExFR0FDWV9SRVBPX0tFWVNfRElSID0gXCIvZXRjL3BvcnRzZWN1cmUvcmVwby1rZXlzXCI7XG5leHBvcnQgY29uc3QgUkVQT1NfRElSID0gXCIvdmFyL2xpYi9wb3J0c2VjdXJlL2F1dGhvcml6ZWQta2V5cy1yZXBvc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24ga2V5c0RpcigpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgS0VZU19ESVJfTkFNRSk7XG59XG5cbi8qKiBBIHJlcG8gdXJsIHJlZHVjZWQgdG8gc29tZXRoaW5nIHVzYWJsZSBhcyBhIGZpbGUgbmFtZS4gRGVyaXZlZCByYXRoZXIgdGhhbiBjb25maWd1cmVkLCBzbyB0aGVcbiAgICBkYWVtb24gYW5kIHRoZSBkZXBsb3kgc2NyaXB0IGFsd2F5cyBhZ3JlZSBvbiB3aGVyZSBhIHNvdXJjZSdzIGtleSBhbmQgY2hlY2tvdXQgbGl2ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3VyY2VOYW1lKHJlcG9VUkw6IHN0cmluZykge1xuICAgIHJldHVybiByZXBvVVJMLnJlcGxhY2UoL1teQS1aYS16MC05XSsvZywgXCItXCIpLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIikudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZUtleVBhdGgocmVwb1VSTDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihrZXlzRGlyKCksIHNvdXJjZU5hbWUocmVwb1VSTCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVnYWN5U291cmNlS2V5UGF0aChyZXBvVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7TEVHQUNZX1JFUE9fS0VZU19ESVJ9LyR7c291cmNlTmFtZShyZXBvVVJMKX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc291cmNlUmVwb1BhdGgocmVwb1VSTDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke1JFUE9TX0RJUn0vJHtzb3VyY2VOYW1lKHJlcG9VUkwpfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLyoqIFRoZSBrZXkgZm9yIGEgc291cmNlLCB3aGVyZXZlciBpdCBoYXBwZW5zIHRvIGJlLiBUaGUgdXNlciBmb2xkZXIgaXMgd2hlcmUgdGhleSBnbyBub3csIGFuZCB0aGVcbiAgICBvbGQgbG9jYXRpb24gaXMgc3RpbGwgcmVhZCBzbyBhIGhvc3QgdGhhdCBwcmVkYXRlcyB0aGUgbW92ZSBrZWVwcyB3b3JraW5nLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRLZXkoY29uZmlnOiB7IGN1cnJlbnQ6IHN0cmluZzsgbGVnYWN5OiBzdHJpbmcgfSkge1xuICAgIGxldCB7IGN1cnJlbnQsIGxlZ2FjeSB9ID0gY29uZmlnO1xuICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKGN1cnJlbnQpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhsZWdhY3kpKSB7XG4gICAgICAgIHJldHVybiBsZWdhY3k7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFNvdXJjZUtleShyZXBvVVJMOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgZmluZEtleSh7IGN1cnJlbnQ6IHNvdXJjZUtleVBhdGgocmVwb1VSTCksIGxlZ2FjeTogbGVnYWN5U291cmNlS2V5UGF0aChyZXBvVVJMKSB9KTtcbn1cbiJdfQ==
68
- /* _JS_SOURCE_HASH = "d66a91022052069dc8a7c111312ca09502fb4974baa795ec49d4d0ebed0668bf"; */
68
+ /* _JS_SOURCE_HASH = "9f5e55c14512350a4741b91f05d443110c0b1041a09d3141b6c3cbc79612378f"; */
@@ -647,7 +647,7 @@ function requireRoot() {
647
647
  }
648
648
  }
649
649
 
650
- export async function main() {
650
+ async function main() {
651
651
  // What was typed is checked before anything about this machine is. A command that does not
652
652
  // make sense is worth saying so about whoever is running it, and being told to find sudo only
653
653
  // to then be told the arguments were wrong is two trips for one mistake.
@@ -671,3 +671,8 @@ export async function main() {
671
671
  }
672
672
  await removeSource({ host, repoURL: await resolveRepoURL(rest[0]) });
673
673
  }
674
+
675
+ main().catch(e => {
676
+ console.error(`${e}`);
677
+ process.exitCode = 1;
678
+ }).finally(() => process.exit());