infisical-autoenv/index.js
2023-11-05 11:50:53 -07:00

40 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);