@anvil-works/anvil-cli 0.7.0-canary.6 → 0.7.0-canary.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js
CHANGED
|
@@ -7389,6 +7389,7 @@ var __webpack_exports__ = {};
|
|
|
7389
7389
|
const external_node_fs_namespaceObject = require("node:fs");
|
|
7390
7390
|
const external_node_path_namespaceObject = require("node:path");
|
|
7391
7391
|
const external_node_crypto_namespaceObject = require("node:crypto");
|
|
7392
|
+
var external_node_crypto_default = /*#__PURE__*/ __webpack_require__.n(external_node_crypto_namespaceObject);
|
|
7392
7393
|
const external_node_assert_namespaceObject = require("node:assert");
|
|
7393
7394
|
const isObject = (value)=>{
|
|
7394
7395
|
const type = typeof value;
|
|
@@ -14246,7 +14247,43 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14246
14247
|
function getAuthFilePath(gitDir) {
|
|
14247
14248
|
return external_path_default().join(gitDir, "anvil-auth.json");
|
|
14248
14249
|
}
|
|
14249
|
-
|
|
14250
|
+
function decodeKey(b64key) {
|
|
14251
|
+
const key = Buffer.from(b64key, "base64");
|
|
14252
|
+
if (32 !== key.length) throw new Error("Encryption key must be a base64-encoded 32-byte key");
|
|
14253
|
+
return key;
|
|
14254
|
+
}
|
|
14255
|
+
function encrypt(plainText, b64key) {
|
|
14256
|
+
const key = decodeKey(b64key);
|
|
14257
|
+
const iv = external_node_crypto_default().randomBytes(12);
|
|
14258
|
+
const cipher = external_node_crypto_default().createCipheriv("aes-256-gcm", key, iv);
|
|
14259
|
+
const ciphertext = Buffer.concat([
|
|
14260
|
+
cipher.update(plainText, "utf8"),
|
|
14261
|
+
cipher.final()
|
|
14262
|
+
]);
|
|
14263
|
+
const authTag = cipher.getAuthTag();
|
|
14264
|
+
return JSON.stringify({
|
|
14265
|
+
version: 1,
|
|
14266
|
+
algorithm: "aes-256-gcm",
|
|
14267
|
+
iv: iv.toString("base64"),
|
|
14268
|
+
authTag: authTag.toString("base64"),
|
|
14269
|
+
ciphertext: ciphertext.toString("base64")
|
|
14270
|
+
}, null, 2);
|
|
14271
|
+
}
|
|
14272
|
+
function decrypt(json, b64key) {
|
|
14273
|
+
const key = decodeKey(b64key);
|
|
14274
|
+
const payload = JSON.parse(json);
|
|
14275
|
+
if (1 !== payload.version || "aes-256-gcm" !== payload.algorithm) throw new Error("Unsupported encrypted file format");
|
|
14276
|
+
const iv = Buffer.from(payload.iv, "base64");
|
|
14277
|
+
const authTag = Buffer.from(payload.authTag, "base64");
|
|
14278
|
+
const ciphertext = Buffer.from(payload.ciphertext, "base64");
|
|
14279
|
+
const decipher = external_node_crypto_default().createDecipheriv("aes-256-gcm", key, iv);
|
|
14280
|
+
decipher.setAuthTag(authTag);
|
|
14281
|
+
return Buffer.concat([
|
|
14282
|
+
decipher.update(ciphertext),
|
|
14283
|
+
decipher.final()
|
|
14284
|
+
]).toString("utf8");
|
|
14285
|
+
}
|
|
14286
|
+
async function writeAuthToFile(repoPath, auth, encryptionKey) {
|
|
14250
14287
|
const git = esm_default(repoPath);
|
|
14251
14288
|
const gitDir = await getRepositoryGitDir(repoPath, git);
|
|
14252
14289
|
const authFilePath = getAuthFilePath(gitDir);
|
|
@@ -14254,8 +14291,8 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14254
14291
|
recursive: true
|
|
14255
14292
|
});
|
|
14256
14293
|
const authJson = JSON.stringify(auth, null, 2);
|
|
14257
|
-
await external_fs_.promises.writeFile(authFilePath, authJson, {
|
|
14258
|
-
mode:
|
|
14294
|
+
await external_fs_.promises.writeFile(authFilePath, encrypt(authJson, encryptionKey), {
|
|
14295
|
+
mode: 384
|
|
14259
14296
|
});
|
|
14260
14297
|
await external_fs_.promises.chmod(authFilePath, 448);
|
|
14261
14298
|
await git.raw([
|
|
@@ -14272,7 +14309,8 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14272
14309
|
const authFilePath = getAuthFilePath(gitDir);
|
|
14273
14310
|
if (!external_fs_default().existsSync(authFilePath)) return;
|
|
14274
14311
|
const authJson = await external_fs_.promises.readFile(authFilePath, "utf8");
|
|
14275
|
-
|
|
14312
|
+
const key = process.env["ANVIL_AUTH_FILE_ENCRYPTION_KEY"];
|
|
14313
|
+
if (key) return JSON.parse(decrypt(authJson, key));
|
|
14276
14314
|
};
|
|
14277
14315
|
function getDefaultAnvilUrl() {
|
|
14278
14316
|
return resolveAnvilUrl();
|
|
@@ -14361,7 +14399,7 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14361
14399
|
if (inMemoryAuth) inMemoryAuth.tokens = newTokens;
|
|
14362
14400
|
else if (repoAuth) {
|
|
14363
14401
|
repoAuth.tokens = newTokens;
|
|
14364
|
-
await writeAuthToFile(repoContext, repoAuth);
|
|
14402
|
+
await writeAuthToFile(repoContext, repoAuth, process.env["ANVIL_AUTH_FILE_ENCRYPTION_KEY"]);
|
|
14365
14403
|
} else {
|
|
14366
14404
|
let accountUsername = username;
|
|
14367
14405
|
if (!accountUsername) {
|
|
@@ -19310,7 +19348,7 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
19310
19348
|
} catch (e) {
|
|
19311
19349
|
throw new Error(`Checkout clone succeeded, but failed to configure repository credentials: ${errors_getErrorMessage(e)}. The repository exists at ${destinationDisplay}, but Git auth bridge setup is incomplete.`);
|
|
19312
19350
|
}
|
|
19313
|
-
if (options.storeAuth) await deps.writeAuthToFile(destinationPath, options.storeAuth);
|
|
19351
|
+
if (options.storeAuth) await deps.writeAuthToFile(destinationPath, options.storeAuth.auth, options.storeAuth.encryptionKey);
|
|
19314
19352
|
return {
|
|
19315
19353
|
appId: parsed.appId,
|
|
19316
19354
|
appName: validation.app_name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AASlD,OAAO,EAAiB,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAqB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAiE,MAAM,uBAAuB,CAAC;AAGpH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11617,6 +11617,7 @@ var __webpack_exports__ = {};
|
|
|
11617
11617
|
const external_node_process_namespaceObject = require("node:process");
|
|
11618
11618
|
const external_node_fs_namespaceObject = require("node:fs");
|
|
11619
11619
|
const external_node_crypto_namespaceObject = require("node:crypto");
|
|
11620
|
+
var external_node_crypto_default = /*#__PURE__*/ __webpack_require__.n(external_node_crypto_namespaceObject);
|
|
11620
11621
|
const external_node_assert_namespaceObject = require("node:assert");
|
|
11621
11622
|
const isObject = (value)=>{
|
|
11622
11623
|
const type = typeof value;
|
|
@@ -14217,7 +14218,43 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14217
14218
|
function getAuthFilePath(gitDir) {
|
|
14218
14219
|
return external_path_default().join(gitDir, "anvil-auth.json");
|
|
14219
14220
|
}
|
|
14220
|
-
|
|
14221
|
+
function decodeKey(b64key) {
|
|
14222
|
+
const key = Buffer.from(b64key, "base64");
|
|
14223
|
+
if (32 !== key.length) throw new Error("Encryption key must be a base64-encoded 32-byte key");
|
|
14224
|
+
return key;
|
|
14225
|
+
}
|
|
14226
|
+
function encrypt(plainText, b64key) {
|
|
14227
|
+
const key = decodeKey(b64key);
|
|
14228
|
+
const iv = external_node_crypto_default().randomBytes(12);
|
|
14229
|
+
const cipher = external_node_crypto_default().createCipheriv("aes-256-gcm", key, iv);
|
|
14230
|
+
const ciphertext = Buffer.concat([
|
|
14231
|
+
cipher.update(plainText, "utf8"),
|
|
14232
|
+
cipher.final()
|
|
14233
|
+
]);
|
|
14234
|
+
const authTag = cipher.getAuthTag();
|
|
14235
|
+
return JSON.stringify({
|
|
14236
|
+
version: 1,
|
|
14237
|
+
algorithm: "aes-256-gcm",
|
|
14238
|
+
iv: iv.toString("base64"),
|
|
14239
|
+
authTag: authTag.toString("base64"),
|
|
14240
|
+
ciphertext: ciphertext.toString("base64")
|
|
14241
|
+
}, null, 2);
|
|
14242
|
+
}
|
|
14243
|
+
function decrypt(json, b64key) {
|
|
14244
|
+
const key = decodeKey(b64key);
|
|
14245
|
+
const payload = JSON.parse(json);
|
|
14246
|
+
if (1 !== payload.version || "aes-256-gcm" !== payload.algorithm) throw new Error("Unsupported encrypted file format");
|
|
14247
|
+
const iv = Buffer.from(payload.iv, "base64");
|
|
14248
|
+
const authTag = Buffer.from(payload.authTag, "base64");
|
|
14249
|
+
const ciphertext = Buffer.from(payload.ciphertext, "base64");
|
|
14250
|
+
const decipher = external_node_crypto_default().createDecipheriv("aes-256-gcm", key, iv);
|
|
14251
|
+
decipher.setAuthTag(authTag);
|
|
14252
|
+
return Buffer.concat([
|
|
14253
|
+
decipher.update(ciphertext),
|
|
14254
|
+
decipher.final()
|
|
14255
|
+
]).toString("utf8");
|
|
14256
|
+
}
|
|
14257
|
+
async function writeAuthToFile(repoPath, auth, encryptionKey) {
|
|
14221
14258
|
const git = esm_default(repoPath);
|
|
14222
14259
|
const gitDir = await getRepositoryGitDir(repoPath, git);
|
|
14223
14260
|
const authFilePath = getAuthFilePath(gitDir);
|
|
@@ -14225,8 +14262,8 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14225
14262
|
recursive: true
|
|
14226
14263
|
});
|
|
14227
14264
|
const authJson = JSON.stringify(auth, null, 2);
|
|
14228
|
-
await external_fs_.promises.writeFile(authFilePath, authJson, {
|
|
14229
|
-
mode:
|
|
14265
|
+
await external_fs_.promises.writeFile(authFilePath, encrypt(authJson, encryptionKey), {
|
|
14266
|
+
mode: 384
|
|
14230
14267
|
});
|
|
14231
14268
|
await external_fs_.promises.chmod(authFilePath, 448);
|
|
14232
14269
|
await git.raw([
|
|
@@ -14243,7 +14280,8 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14243
14280
|
const authFilePath = getAuthFilePath(gitDir);
|
|
14244
14281
|
if (!external_fs_default().existsSync(authFilePath)) return;
|
|
14245
14282
|
const authJson = await external_fs_.promises.readFile(authFilePath, "utf8");
|
|
14246
|
-
|
|
14283
|
+
const key = process.env["ANVIL_AUTH_FILE_ENCRYPTION_KEY"];
|
|
14284
|
+
if (key) return JSON.parse(decrypt(authJson, key));
|
|
14247
14285
|
};
|
|
14248
14286
|
function getDefaultAnvilUrl() {
|
|
14249
14287
|
return resolveAnvilUrl();
|
|
@@ -14342,7 +14380,7 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
14342
14380
|
if (inMemoryAuth) inMemoryAuth.tokens = newTokens;
|
|
14343
14381
|
else if (repoAuth) {
|
|
14344
14382
|
repoAuth.tokens = newTokens;
|
|
14345
|
-
await writeAuthToFile(repoContext, repoAuth);
|
|
14383
|
+
await writeAuthToFile(repoContext, repoAuth, process.env["ANVIL_AUTH_FILE_ENCRYPTION_KEY"]);
|
|
14346
14384
|
} else {
|
|
14347
14385
|
let accountUsername = username;
|
|
14348
14386
|
if (!accountUsername) {
|
|
@@ -18504,7 +18542,7 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
18504
18542
|
} catch (e) {
|
|
18505
18543
|
throw new Error(`Checkout clone succeeded, but failed to configure repository credentials: ${errors_getErrorMessage(e)}. The repository exists at ${destinationDisplay}, but Git auth bridge setup is incomplete.`);
|
|
18506
18544
|
}
|
|
18507
|
-
if (options.storeAuth) await deps.writeAuthToFile(destinationPath, options.storeAuth);
|
|
18545
|
+
if (options.storeAuth) await deps.writeAuthToFile(destinationPath, options.storeAuth.auth, options.storeAuth.encryptionKey);
|
|
18508
18546
|
return {
|
|
18509
18547
|
appId: parsed.appId,
|
|
18510
18548
|
appName: validation.app_name,
|
|
@@ -31,6 +31,6 @@ export declare function hardenCheckoutGitAuth(options: {
|
|
|
31
31
|
cleanRemoteUrl: string;
|
|
32
32
|
}>;
|
|
33
33
|
export declare function parseAppIdFromGitPath(pathValue?: string): string | undefined;
|
|
34
|
-
export declare function writeAuthToFile(repoPath: string, auth: AuthData): Promise<string>;
|
|
34
|
+
export declare function writeAuthToFile(repoPath: string, auth: AuthData, encryptionKey: string): Promise<string>;
|
|
35
35
|
export declare const readAuthFromRepo: (repoPath: string) => Promise<AuthData | undefined>;
|
|
36
36
|
//# sourceMappingURL=git-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-auth.d.ts","sourceRoot":"","sources":["../../src/services/git-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-auth.d.ts","sourceRoot":"","sources":["../../src/services/git-auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,QAAQ,CAAC;AAIrC,MAAM,WAAW,cAAc;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAkBD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC9B,GAAG,MAAM,CAcT;AAWD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAUhG;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/G;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA2BpE;AAiCD,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC,GAAG,MAAM,CAWT;AA0BD,wBAAsB,+BAA+B,CACjD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC9B,GACF,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBtC;AAED,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5E;AA+DD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAe5F;AAED,eAAO,MAAM,gBAAgB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAiBrF,CAAC"}
|