41 lines
1.3 KiB
JavaScript
41 lines
1.3 KiB
JavaScript
|
import fs from "node:fs";
|
||
|
import os from "node:os";
|
||
|
import InfisicalClient from "infisical-node";
|
||
|
import rls from "readline-sync";
|
||
|
import {loadConfig, upsertConfig} from "./configurator.js";
|
||
|
const envpath = `${os.homedir()}/.env`;
|
||
|
//upsertConfig(); //TODO Build Configuration Generator
|
||
|
const config = loadConfig();
|
||
|
const secrets = {};
|
||
|
|
||
|
const siteURL = config.infisicalInstance;
|
||
|
const projects = config.projects;
|
||
|
const pendingSecrets = [];
|
||
|
|
||
|
async function getProjectSecrets(project, environment, token, path="/", includeImports=true){
|
||
|
const client = new InfisicalClient({token, siteURL});
|
||
|
const secrets = await client.getAllSecrets({environment, path, includeImports, attachToProcessEnv: false});
|
||
|
return secrets.map((s)=>({...s, project, path}))
|
||
|
}
|
||
|
|
||
|
function mapToFile(secrets, filename){
|
||
|
const envSecrets = secrets.map((s)=>`export ${s.secretName}=${s.secretValue}`).join("\n");
|
||
|
fs.writeFileSync(`${envpath}/${filename}`, envSecrets);
|
||
|
}
|
||
|
|
||
|
for(var p of projects){
|
||
|
for(var e of p.environments){
|
||
|
if(!process.env[e.envar]) throw Error(`${e.envar} could not be found!`);
|
||
|
for(var path of e.paths){
|
||
|
pendingSecrets.push(getProjectSecrets(p.name, e.slug, process.env[e.envar], path));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const loadedSecrets = await Promise.all(pendingSecrets)
|
||
|
const filteredSecrets = loadedSecrets.flat(2).filter((s)=>!s.isFallback);
|
||
|
console.log(filteredSecrets);
|
||
|
|
||
|
|
||
|
|