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.
- package/bin/addmachine.js +1 -5
- package/bin/derivekey.js +2 -7
- package/bin/portsecuredaemon.js +1 -8
- package/bin/securessh.js +2 -7
- package/bin/setupnotify.js +2 -6
- package/bin/signfiles.js +2 -7
- package/bin/testnotify.js +2 -6
- package/bin/unrevoke.js +1 -5
- package/misc/dist/ownIPs.ts.cache +2 -2
- package/misc/https/dist/certs.ts.cache +12 -9
- package/misc/https/dist/persistentLocalStorage.ts.cache +10 -4
- package/package.json +1 -1
- package/security/authorizedKeys/daemon/daemon.ts +142 -7
- package/security/authorizedKeys/daemon/dist/changes.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/git.ts.cache +26 -8
- package/security/authorizedKeys/daemon/dist/notify.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/paths.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/repoFiles.ts.cache +4 -6
- package/security/authorizedKeys/daemon/dist/revocation.ts.cache +0 -0
- package/security/authorizedKeys/daemon/dist/sessions.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/state.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/trust.ts.cache +85 -265
- package/security/authorizedKeys/daemon/git.d.ts +8 -0
- package/security/authorizedKeys/daemon/git.ts +22 -4
- package/security/authorizedKeys/daemon/repoFiles.ts +2 -4
- package/security/authorizedKeys/daemon/trust.d.ts +25 -19
- package/security/authorizedKeys/daemon/trust.ts +91 -278
- package/security/authorizedKeys/dist/authorizedKeys.ts.cache +2 -2
- package/security/authorizedKeys/dist/keysRepo.ts.cache +2 -2
- package/security/authorizedKeys/dist/revokeSource.ts.cache +2 -2
- package/security/authorizedKeys/dist/sources.ts.cache +2 -2
- package/security/authorizedKeys/secureSSH.ts +6 -1
- package/security/authorizedKeys/unrevoke.ts +2 -198
- package/security/authorizedKeys/unrevokeCli.ts +204 -0
- package/security/helpers/dist/paths.ts.cache +2 -2
- package/security/helpers/dist/remoteSSH.ts.cache +2 -2
- package/security/helpers/dist/spawn.ts.cache +2 -2
- package/security/helpers/remoteSSH.d.ts +35 -0
- package/security/keys/deriveKey.d.ts +0 -1
- package/security/keys/deriveKey.ts +1 -56
- package/security/keys/deriveKeyCli.ts +62 -0
- package/security/keys/dist/deriveKey.ts.cache +4 -51
- package/security/keys/dist/sshKeyFile.ts.cache +5 -3
- package/security/machines/addMachine.ts +31 -61
- package/security/machines/dist/addMachine.ts.cache +72 -57
- package/security/machines/dist/machines.ts.cache +134 -55
- package/security/machines/machines.d.ts +11 -0
- package/security/machines/machines.ts +134 -57
- package/security/notifications/dist/discord.ts.cache +2 -2
- package/security/notifications/setupNotify.ts +6 -1
- package/security/notifications/testNotify.ts +6 -1
- package/security/signedFiles/dist/manifest.ts.cache +2 -2
- package/security/signedFiles/dist/sshsig.ts.cache +138 -0
- package/security/signedFiles/signFiles.ts +11 -52
- package/security/signedFiles/signFilesCli.ts +54 -0
- package/security/signedFiles/sshsig.d.ts +13 -0
- package/security/signedFiles/sshsig.ts +141 -0
- package/storage/dist/backblaze.ts.cache +10 -2
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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 {
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
83
|
-
}
|
|
84
|
-
return files.sort();
|
|
85
|
-
}
|
|
92
|
+
return found.sort();
|
|
93
|
+
};
|
|
86
94
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
|
98
|
-
|
|
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
|
-
|
|
116
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplZEtleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhdXRob3JpemVkS2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMkRBQTZCO0FBQzdCLGdEQUF3QjtBQUV4QixTQUFnQixhQUFhLENBQUMsUUFBZ0I7SUFDMUMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs4RUFDOEU7QUFDOUUsU0FBZ0IsY0FBYyxDQUFDLE9BQWU7SUFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzSCxDQUFDO0FBUkQsd0NBUUM7QUFFWSxRQUFBLGNBQWMsR0FBRyxvQ0FBb0MsQ0FBQztBQUVuRTttR0FDbUc7QUFDbkcsU0FBZ0Isa0JBQWtCLENBQUMsT0FBZTtJQUM5QyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBTkQsZ0RBTUM7QUFFRDt3RkFDd0Y7QUFDeEYsU0FBZ0IsY0FBYyxDQUFDLE9BQWU7SUFDMUMsSUFBSSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1IsT0FBTyxzQkFBYyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQU5ELHdDQU1DO0FBRUQ7Ozs7MEZBSTBGO0FBQzFGLFNBQWdCLGNBQWMsQ0FBQyxPQUFlLEVBQUUsU0FBbUI7SUFDL0QsSUFBSSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztJQUNuQixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTztRQUNILE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUN0RixLQUFLO0tBQ1IsQ0FBQztBQUNOLENBQUM7QUFkRCx3Q0FjQztBQUVELDZFQUE2RTtBQUM3RSxTQUFnQixZQUFZLENBQUMsT0FBZTtJQUN4QyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sSUFBSSxJQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzVFLENBQUM7QUFWRCxvQ0FVQztBQUVEOzs2RUFFNkU7QUFDN0UsU0FBZ0IsV0FBVyxDQUFDLE9BQWU7SUFDdkMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckUsQ0FBQztBQVJELGtDQVFDO0FBRUQ7Ozs7OztnRkFNZ0Y7QUFDaEYsU0FBZ0IsZUFBZSxDQUFDLElBQWM7SUFDMUMsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQzVCLElBQUksYUFBYSxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO0lBQ2hELEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2YsUUFBUSxDQUFDLElBQUksQ0FBQyxpRUFBaUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRyxTQUFTO1FBQ2IsQ0FBQztRQUNELHNGQUFzRjtRQUN0RixJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQy9DLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixTQUFTO1FBQ2IsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQ1QsR0FBRyxPQUFPLENBQUMsTUFBTSwyQ0FBMkMsV0FBVyxpQkFBaUI7Y0FDdEYsc0NBQXNDO2NBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNoRSxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUF4QkQsMENBd0JDO0FBRUQ7bUVBQ21FO0FBQzVELEtBQUssVUFBVSxZQUFZLENBQUMsUUFBZ0I7SUFDL0MsSUFBSSxZQUFZLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMxRCxJQUFJLE9BQU8sR0FBRyxNQUFNLGtCQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxhQUFhLENBQUMsTUFBTSxrQkFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELFFBQVEsaUJBQWlCLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQWZELG9DQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplS2V5cyhjb250ZW50czogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnRzLnNwbGl0KFwiXFxuXCIpLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKS5maWx0ZXIobGluZSA9PiBsaW5lICYmICFsaW5lLnN0YXJ0c1dpdGgoXCIjXCIpKTtcbn1cblxuLyoqIFRoZSBmaW5nZXJwcmludCBzc2ggaXRzZWxmIHJlcG9ydHMgZm9yIGEga2V5LCB3aGljaCBpcyB3aGF0IHRoZSBzc2hkIGxvZyBuYW1lcyBhbmQgdGhlcmVmb3JlXG4gICAgd2hhdCBhIHJldm9jYXRpb24gaXMga2V5ZWQgYnkuIFJldHVybnMgXCJcIiBmb3IgYSBsaW5lIHRoYXQgaG9sZHMgbm8ga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleUZpbmdlcnByaW50KGtleUxpbmU6IHN0cmluZykge1xuICAgIGxldCBwYXJ0cyA9IGtleUxpbmUudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgbGV0IHR5cGVJbmRleCA9IHBhcnRzLmZpbmRJbmRleChwYXJ0ID0+IC9eKHNzaC18ZWNkc2EtfHNrLSkvLnRlc3QocGFydCkpO1xuICAgIGxldCBibG9iID0gdHlwZUluZGV4ID49IDAgJiYgcGFydHNbdHlwZUluZGV4ICsgMV0gfHwgXCJcIjtcbiAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlNIQTI1NjpcIiArIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShCdWZmZXIuZnJvbShibG9iLCBcImJhc2U2NFwiKSkuZGlnZXN0KFwiYmFzZTY0XCIpLnJlcGxhY2UoLz0rJC8sIFwiXCIpO1xufVxuXG5leHBvcnQgY29uc3QgTk9fUkVTVFJJQ1RJT04gPSBcIkFOWSBBRERSRVNTIChubyBmcm9tPSByZXN0cmljdGlvbilcIjtcblxuLyoqIFRoZSBhZGRyZXNzZXMgYSBrZXkgbWF5IGJlIHVzZWQgZnJvbSwgb25lIGJ5IG9uZSwgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIGtleSBjYXJyaWVzIG5vIGZyb209XG4gICAgYXQgYWxsLiBVbmRlZmluZWQgYW5kIGFuIGVtcHR5IGxpc3QgYXJlIHZlcnkgZGlmZmVyZW50IHRoaW5ncywgc28gdGhleSBzdGF5IGRpc3Rpbmd1aXNoYWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZXlSZXN0cmljdGlvbkxpc3Qoa2V5TGluZTogc3RyaW5nKSB7XG4gICAgbGV0IG1hdGNoID0ga2V5TGluZS5tYXRjaCgvZnJvbT1cIihbXlwiXSopXCIvKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaFsxXS5zcGxpdChcIixcIikubWFwKGVudHJ5ID0+IGVudHJ5LnRyaW0oKSkuZmlsdGVyKGVudHJ5ID0+IGVudHJ5KTtcbn1cblxuLyoqIFRoZSBhZGRyZXNzZXMgYSBrZXkgbWF5IGJlIHVzZWQgZnJvbSwgd2hpY2ggaXMgdGhlIHBhcnQgb2YgYW4gYXV0aG9yaXplZF9rZXlzIGxpbmUgdGhhdFxuICAgIGRlY2lkZXMgaG93IG11Y2ggYSBzdG9sZW4ga2V5IGlzIHdvcnRoLiBBIGtleSB3aXRoIG5vIHJlc3RyaWN0aW9uIHNheXMgc28gbG91ZGx5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtleVJlc3RyaWN0aW9uKGtleUxpbmU6IHN0cmluZykge1xuICAgIGxldCBsaXN0ID0ga2V5UmVzdHJpY3Rpb25MaXN0KGtleUxpbmUpO1xuICAgIGlmICghbGlzdCkge1xuICAgICAgICByZXR1cm4gTk9fUkVTVFJJQ1RJT047XG4gICAgfVxuICAgIHJldHVybiBsaXN0LmpvaW4oXCIsXCIpO1xufVxuXG4vKiogQWRkcyBhZGRyZXNzZXMgdG8gYSBrZXkncyBmcm9tPSBsaXN0LCBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSBsaW5lIGV4YWN0bHkgYXMgaXQgd2FzLiBSZXR1cm5zXG4gICAgd2hpY2ggYWRkcmVzc2VzIHdlcmUgYWN0dWFsbHkgbmV3LCBzbyBhIGNhbGxlciBjYW4gcmVwb3J0IG9ubHkgd2hhdCBpdCBjaGFuZ2VkLlxuXG4gICAgQSBrZXkgd2l0aCBubyBmcm9tPSBhdCBhbGwgaXMgbGVmdCBhbG9uZTogYWRkaW5nIG9uZSB3b3VsZCBzaWxlbnRseSByZXN0cmljdCBhIGtleSB0aGF0IGlzXG4gICAgY3VycmVudGx5IHVucmVzdHJpY3RlZCwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgZGVjaXNpb24gdGhhbiB0aGUgb25lIGJlaW5nIG1hZGUgaGVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0FkZHJlc3NlcyhrZXlMaW5lOiBzdHJpbmcsIGFkZHJlc3Nlczogc3RyaW5nW10pIHtcbiAgICBsZXQgbGlzdCA9IGtleVJlc3RyaWN0aW9uTGlzdChrZXlMaW5lKTtcbiAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgcmV0dXJuIHsga2V5TGluZSwgYWRkZWQ6IFtdIGFzIHN0cmluZ1tdIH07XG4gICAgfVxuICAgIGxldCBhbGxvd2VkID0gbGlzdDtcbiAgICBsZXQgYWRkZWQgPSBhZGRyZXNzZXMuZmlsdGVyKGFkZHJlc3MgPT4gYWRkcmVzcyAmJiAhYWxsb3dlZC5pbmNsdWRlcyhhZGRyZXNzKSk7XG4gICAgaWYgKCFhZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsga2V5TGluZSwgYWRkZWQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5TGluZToga2V5TGluZS5yZXBsYWNlKC9mcm9tPVwiW15cIl0qXCIvLCBgZnJvbT1cIiR7Wy4uLmFsbG93ZWQsIC4uLmFkZGVkXS5qb2luKFwiLFwiKX1cImApLFxuICAgICAgICBhZGRlZCxcbiAgICB9O1xufVxuXG4vKiogRW5vdWdoIHRvIHJlY29nbmlzZSB3aG9zZSBrZXkgdGhpcyBpcyB3aXRob3V0IHByaW50aW5nIHRoZSB3aG9sZSBibG9iLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZUtleShrZXlMaW5lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFydHMgPSBrZXlMaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgIGxldCB0eXBlSW5kZXggPSBwYXJ0cy5maW5kSW5kZXgocGFydCA9PiAvXihzc2gtfGVjZHNhLXxzay0pLy50ZXN0KHBhcnQpKTtcbiAgICBpZiAodHlwZUluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4ga2V5TGluZS5zbGljZSgwLCA2MCk7XG4gICAgfVxuICAgIGxldCB0eXBlID0gcGFydHNbdHlwZUluZGV4XTtcbiAgICBsZXQgYmxvYiA9IHBhcnRzW3R5cGVJbmRleCArIDFdIHx8IFwiXCI7XG4gICAgbGV0IGNvbW1lbnQgPSBwYXJ0cy5zbGljZSh0eXBlSW5kZXggKyAyKS5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gYCR7dHlwZX0gLi4uJHtibG9iLnNsaWNlKC0xMil9JHtjb21tZW50ICYmIGAgJHtjb21tZW50fWAgfHwgXCJcIn1gO1xufVxuXG4vKiogVGhlIHNob3J0ZXN0IHRoaW5nIHRoYXQgc3RpbGwgaWRlbnRpZmllcyBhIGtleSB0byBhIHBlcnNvbjogdGhlIGNvbW1lbnQgaXQgY2Fycmllcywgd2hpY2ggaXNcbiAgICB1c3VhbGx5IHVzZXJAbWFjaGluZSwgYW5kIG90aGVyd2lzZSB0aGUgdGFpbCBvZiB0aGUga2V5IGl0c2VsZi4gRm9yIHRoZSBmaXJzdCBsaW5lIG9mIGFcbiAgICBub3RpZmljYXRpb24sIHdoZXJlIHRoZXJlIGlzIG9ubHkgcm9vbSBmb3IgdGhlIG9uZSB0aGluZyB0aGF0IG1hdHRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5TmljZU5hbWUoa2V5TGluZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcnRzID0ga2V5TGluZS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICBsZXQgdHlwZUluZGV4ID0gcGFydHMuZmluZEluZGV4KHBhcnQgPT4gL14oc3NoLXxlY2RzYS18c2stKS8udGVzdChwYXJ0KSk7XG4gICAgaWYgKHR5cGVJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIGtleUxpbmUuc2xpY2UoMCwgMjApO1xuICAgIH1cbiAgICBsZXQgY29tbWVudCA9IHBhcnRzLnNsaWNlKHR5cGVJbmRleCArIDIpLmpvaW4oXCIgXCIpO1xuICAgIHJldHVybiBjb21tZW50IHx8IGAuLi4keyhwYXJ0c1t0eXBlSW5kZXggKyAxXSB8fCBcIlwiKS5zbGljZSgtOCl9YDtcbn1cblxuLyoqIFdoYXQgYSBzZXQgb2Yga2V5cyBoYXMgdG8gc2F0aXNmeSBiZWZvcmUgaXQgaXMgd29ydGggc2lnbmluZywgYXMgYSBsaXN0IG9mIGNvbXBsYWludHMuXG5cbiAgICBFdmVyeSBrZXkgbmVlZHMgYSBmcm9tPSwgYmVjYXVzZSBhbiB1bnJlc3RyaWN0ZWQga2V5IGNhbiBuZXZlciBiZSBjYXVnaHQgYmVpbmcgdXNlZCBmcm9tIHRoZVxuICAgIHdyb25nIHBsYWNlLCBhbmQgYmVpbmcgY2F1Z2h0IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgdHJpZ2dlcnMgYSByZXZvY2F0aW9uLlxuXG4gICAgTm8gdHdvIGtleXMgbWF5IGFsbG93IHRoZSBzYW1lIGFkZHJlc3NlcywgYmVjYXVzZSB0aGF0IGlzIG9uZSBwZXJzb24gaG9sZGluZyB0d28ga2V5czogcmV2b2tpbmdcbiAgICBvbmUgb2YgdGhlbSBsZWF2ZXMgdGhlIG90aGVyIHdvcmtpbmcsIHNvIHRoZSByZXZvY2F0aW9uIGFjaGlldmVzIG5vdGhpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEtleVByb2JsZW1zKGtleXM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHByb2JsZW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBieVJlc3RyaWN0aW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGxldCByZXN0cmljdGlvbiA9IGtleVJlc3RyaWN0aW9uTGlzdChrZXkpO1xuICAgICAgICBpZiAoIXJlc3RyaWN0aW9uKSB7XG4gICAgICAgICAgICBwcm9ibGVtcy5wdXNoKGBubyBmcm9tPSByZXN0cmljdGlvbiwgc28gaXQgY2FuIGJlIHVzZWQgZnJvbSBhbnl3aGVyZTpcXG4gICAgICAke3N1bW1hcml6ZUtleShrZXkpfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGVkLCBzbyB0aGUgc2FtZSBhZGRyZXNzZXMgd3JpdHRlbiBpbiBhIGRpZmZlcmVudCBvcmRlciBzdGlsbCBjb3VudCBhcyB0aGUgc2FtZS5cbiAgICAgICAgbGV0IGlkZW50aXR5ID0gWy4uLnJlc3RyaWN0aW9uXS5zb3J0KCkuam9pbihcIixcIik7XG4gICAgICAgIGJ5UmVzdHJpY3Rpb24uc2V0KGlkZW50aXR5LCBbLi4uKGJ5UmVzdHJpY3Rpb24uZ2V0KGlkZW50aXR5KSB8fCBbXSksIGtleV0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBbcmVzdHJpY3Rpb24sIHNoYXJpbmddIG9mIGJ5UmVzdHJpY3Rpb24pIHtcbiAgICAgICAgaWYgKHNoYXJpbmcubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJvYmxlbXMucHVzaChcbiAgICAgICAgICAgIGAke3NoYXJpbmcubGVuZ3RofSBrZXlzIGFsbG93IGV4YWN0bHkgdGhlIHNhbWUgYWRkcmVzc2VzICgke3Jlc3RyaWN0aW9ufSksIHdoaWNoIGlzIG9uZWBcbiAgICAgICAgICAgICsgYCBwZXJzb24gaG9sZGluZyBtb3JlIHRoYW4gb25lIGtleTpcXG5gXG4gICAgICAgICAgICArIHNoYXJpbmcubWFwKGtleSA9PiBgICAgICAgJHtzdW1tYXJpemVLZXkoa2V5KX1gKS5qb2luKFwiXFxuXCIpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwcm9ibGVtcztcbn1cblxuLyoqIFJlYWRzIHRoZSBhdXRob3JpemVkIGtleXMgYSByZXBvIGNoZWNrb3V0IHdhbnRzIGFwcGxpZWQuIFByZWZlcnMgYSB0b3AgbGV2ZWwgYXV0aG9yaXplZF9rZXlzXG4gICAgZmlsZSBhbmQgb3RoZXJ3aXNlIGNvbmNhdGVuYXRlcyBldmVyeSAucHViIGF0IHRoZSB0b3AgbGV2ZWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcG9LZXlzKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgY29tYmluZWRQYXRoID0gcGF0aC5qb2luKHJlcG9QYXRoLCBcImF1dGhvcml6ZWRfa2V5c1wiKTtcbiAgICBsZXQgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIocmVwb1BhdGgpO1xuICAgIGlmIChlbnRyaWVzLmluY2x1ZGVzKFwiYXV0aG9yaXplZF9rZXlzXCIpKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVLZXlzKGF3YWl0IGZzLnJlYWRGaWxlKGNvbWJpbmVkUGF0aCwgXCJ1dGY4XCIpKTtcbiAgICB9XG4gICAgbGV0IHB1YkZpbGVzID0gZW50cmllcy5maWx0ZXIobmFtZSA9PiBuYW1lLmVuZHNXaXRoKFwiLnB1YlwiKSkuc29ydCgpO1xuICAgIGlmICghcHViRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXV0aG9yaXplZF9rZXlzIG9yIGF0IGxlYXN0IG9uZSAucHViIGZpbGUgaW4gJHtyZXBvUGF0aH0sIGZvdW5kIG5laXRoZXJgKTtcbiAgICB9XG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgbmFtZSBvZiBwdWJGaWxlcykge1xuICAgICAgICBrZXlzLnB1c2goLi4ubm9ybWFsaXplS2V5cyhhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ocmVwb1BhdGgsIG5hbWUpLCBcInV0ZjhcIikpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG4iXX0=
|
|
145
|
-
/* _JS_SOURCE_HASH = "
|
|
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 = "
|
|
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 = "
|
|
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 = "
|
|
68
|
+
/* _JS_SOURCE_HASH = "9f5e55c14512350a4741b91f05d443110c0b1041a09d3141b6c3cbc79612378f"; */
|
|
@@ -647,7 +647,7 @@ function requireRoot() {
|
|
|
647
647
|
}
|
|
648
648
|
}
|
|
649
649
|
|
|
650
|
-
|
|
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());
|