Setting the file. One moment. Source Secrets · Wix Replatform · wix/skills · Skills Docsscripts/source-secrets.js
scripts/source-secrets.js
JavaScript·80 lines·3 KB
);
10
11function usage() {
12 return [
13 'Usage:',
14 ' node skills/wix-replatform/scripts/source-secrets.js resolve --env-file <path> --wix-env-file <path> --keys <A,B> --project <name> [--meta-site-id <id>] [--no-create-placeholders]',
15 '',
16 'Outputs only key names and statuses. Secret values are never printed.',
17 'Exit codes: 0 every key is usable locally (ok: true); 2 a key still needs the user (needsUser: true,',
18 'request only unresolvedKeys); 1 a vault read/create failed or the arguments are invalid.',
19 '',
20 'Example (confirm a hydration without opening the env file):',
21 ' node skills/wix-replatform/scripts/source-secrets.js resolve --env-file migrations/<project>/config/source.env --wix-env-file migrations/<project>/config/wix.env --keys WP_USERNAME,WP_APPLICATION_PASSWORD --project <project>',
22 ' Read result.postHydrationReport: { exists, keys: { KEY: present|blank|placeholder|missing } } for the local env file.',
23 ].join('\n');
24}
25
26function parseArgs(argv) {
27 const args = { _: [] };
28 for (let i = 0; i < argv.length; i += 1) {
29 const token = argv[i];
30 if (!token.startsWith('--')) {
31 args._.push(token);
32 continue;
33 }
34 if (token === '--no-create-placeholders') {
35 args.createPlaceholders = false;
36 continue;
37 }
38 const key = token.slice(2).replace(/-([a-z])/g, (_, c) => c.toUpperCase());
39 args[key] = argv[i + 1];
40 i += 1;
41 }
42 return args;
43}
44
45async function main() {
46 const args = parseArgs(process.argv.slice(2));
47 const command = args._[0];
48 if (command !== 'resolve' || !args.envFile || !args.wixEnvFile || !args.keys || !args.project) {
49 process.stderr.write(`${usage()}\n`);
50 process.exit(1);
51 }
52
53 const wixEnv = await readEnvFile(path.resolve(args.wixEnvFile));
54 const client = createWixSecretsClient({
55 authToken: wixEnv.WIX_AUTH_TOKEN || process.env.WIX_AUTH_TOKEN,
56 siteId: wixEnv.WIX_SITE_ID || process.env.WIX_SITE_ID,
57 });
58 const keys = String(args.keys).split(',').map((key) => key.trim()).filter(Boolean);
59 const result = await resolveSourceSecrets({
60 envFilePath: path.resolve(args.envFile),
61 keys,
62 project: args.project,
63 metaSiteId: args.metaSiteId || wixEnv.WIX_META_SITE_ID || process.env.WIX_META_SITE_ID,
64 client,
65 createPlaceholders: args.createPlaceholders !== false,
66 });
67
68 process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
69 const vaultError = Object.values(result.keys).some((item) => item.status === 'unreadable' || item.status === 'failed');
70 process.exit(result.ok ? 0 : vaultError ? 1 : 2);
71}
72
73if (require.main === module) {
74 main().catch((error) => {
75 process.stderr.write(`${error && error.message ? error.message : error}\n`);
76 process.exit(1);
77 });
78}
79
80module.exports = { parseArgs, usage };