@1mill/sops
Version:
```bash npm install @1mill/sops ```
3 lines (2 loc) • 1.71 kB
JavaScript
const e=require("fs"),{DecryptCommand:s,KMSClient:t}=require("@aws-sdk/client-kms"),{fetchNodeEnv:i}=require("./fetchNodeEnv"),{walkAndDecrypt:r}=require("./walkAndDecrypt");module.exports={Sops:class{constructor({accessKeyId:e=i("MILL_SOPS_AWS_ACCESS_KEY_ID")||i("AWS_ACCESS_KEY_ID")||i("AWS_ACCESS_KEY"),endpoint:s=i("MILL_SOPS_AWS_ENDPOINT")||i("AWS_ENDPOINT"),file:t=(i("MILL_SOPS_FILE")||"production"===i("NODE_ENV")?"prod.secrets.sops.json":"dev.secrets.sops.json"),region:r=i("MILL_SOPS_AWS_REGION")||i("AWS_REGION"),secretAccessKey:c=i("MILL_SOPS_AWS_SECRET_ACCESS_KEY")||i("AWS_SECRET_ACCESS_KEY"),sessionToken:n=i("AWS_SESSION_TOKEN")}){if(this.accessKeyId=e,!this.accessKeyId)throw new Error('AWS "accessKeyId" is required');if(this.region=r,!this.region)throw new Error('AWS "region" is required');if(this.secretAccessKey=c,!this.secretAccessKey)throw new Error('AWS "secretAccessKey" is required');if(this.sessionToken=n,this.endpoint=s,this.client=void 0,this.file=t,!this.file)throw new Error('SOPS "file" is required');this.secrets={}}async _buildSecrets(){if(0!==Object.keys(this.secrets).length)return;void 0===this.client&&(this.client=new t({credentials:{accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,sessionToken:this.sessionToken},endpoint:this.endpoint,region:this.region}));const i=JSON.parse(e.readFileSync(this.file,"utf-8").toString());let c=null;for(const e of i.sops.kms){if(!e.enc)continue;const t=new s({CiphertextBlob:Buffer.from(e.enc,"base64")});if(c=(await this.client.send(t)).Plaintext,c)break}this.secrets=r({tree:i,key:c})}async decrypt(e){return await this._buildSecrets(),e?this.secrets[e]:this.secrets}}};
//# sourceMappingURL=index.modern.js.map