UNPKG

@ycmd/creds

Version:

LSK.js CLI Creds is the easiest way to manage GitHub / Gitlab secrets and credentials

18 lines (13 loc) 5.44 kB
'use strict'; var err = require('@lsk4/err'); var log = require('@lsk4/log'); var k = require('axios'); var m = require('libsodium-wrappers'); var fishbird = require('fishbird'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var k__default = /*#__PURE__*/_interopDefault(k); var m__default = /*#__PURE__*/_interopDefault(m); var j=Object.defineProperty;var p=(w,t)=>j(w,"name",{value:t,configurable:!0});var g=class{static{p(this,"Service");}client;log=log.createLogger(this.constructor.name);constructor(t){this.assign(t),this.checkConfig(),this.client=this.createClient(t.clientOptions);}createClient(t={}){return k__default.default.create(t)}assign(t){Object.assign(this,t);}checkConfig(){throw new err.Err("NOT_IMPLEMENTED","checkConfig method not implemented")}getServiceHostname(){throw new err.Err("NOT_IMPLEMENTED","getServiceHostname method not implemented")}getProjectUrl(){throw new err.Err("NOT_IMPLEMENTED","getProjectUrl method not implemented")}getProjectCICDSettingURL(){throw new err.Err("NOT_IMPLEMENTED","getProjectCICDSettingURL method not implemented")}getProjectPath(){let t=this.projectPath;if(!t)throw new err.Err("!projectPath");return t}getProjectId(){return this.projectId}getProjectCredsUrl(){let t=this.projectCredsUrl;if(!t)throw new err.Err("!projectCredsUrl");return t}getProjectCredsOwner(){let t=this.projectCredsOwner;if(!t)throw new err.Err("!projectCredsOwner");return t}async uploadSecret(t,a){throw new err.Err("NOT_IMPLEMENTED","uploadSecret method not implemented")}async uploadVariable(t,a){throw new err.Err("NOT_IMPLEMENTED","uploadVariable method not implemented")}async removeOldHooks(){}async uploadHook(t){}async uploadHooks(t){if(!t)throw new err.Err("!env");let{hooks:a=[]}=t;try{await this.removeOldHooks();}catch(r){this.log.error("[ERR] Old hooks removing failed:",err.Err.getMessage(r));}await fishbird.map(a,async(r,n)=>{try{await this.uploadHook(r),this.log.info(`[OK] Hook ${n} uploaded`);}catch(e){this.log.error(`[ERR] Hook ${n} not uploaded:`,err.Err.getMessage(e));}});}async uploadAll(t){if(!t)throw new err.Err("!env");let{secrets:a={},variables:r={},files:n=[]}=t;await this.uploadHooks(t),await fishbird.map(Object.entries(a),async([e,s])=>{try{await this.uploadSecret(e,s),this.log.info(`[OK] Secret ${e} uploaded`);}catch(i){this.log.error(`[ERR] Secret ${e} not uploaded as secret, because`,err.Err.getMessage(i)),this.log.trace(i);}}),await fishbird.map(Object.entries(r),async([e,s])=>{try{await this.uploadVariable(e,s),this.log.info(`[OK] Variable ${e} uploaded`);}catch(i){this.log.error(`[ERR] Variable ${e} not uploaded as variable, because`,err.Err.getMessage(i)),this.log.trace(i);}}),await fishbird.map(Object.values(n),async({name:e,credType:s,content:i})=>{let h=e,d=i;try{if(s==="variable")await this.uploadVariable(h,d);else if(s==="secret")await this.uploadSecret(h,d);else if(s==="skip"){this.log.debug(`[SKIP] File ${h} uploaded as ${s}`);return}else throw new err.Err("unknown credType",{credType:s});this.log.info(`[OK] File ${h} uploaded as ${s}`);}catch(l){this.log.error(`[ERR] File ${h} not uploaded as ${s}, because`,err.Err.getMessage(l)),this.log.trace(l);}});}};var f=class extends g{static{p(this,"GithubService");}projectName;projectPath;projectCredsUrl;projectCredsOwner;token;server;log=log.createLogger(this.constructor.name);constructor(t){super(t),this.assign(t),this.checkConfig(),this.client=this.createClient(t.clientOptions);}checkConfig(){if(!this.projectName)throw new err.Err("!projectName");if(!this.projectPath)throw new err.Err("!projectPath");if(!this.projectCredsUrl)throw new err.Err("!projectCredsUrl");if(!this.projectCredsOwner)throw new err.Err("!projectCredsOwner");if(!this.token)throw new err.Err("!token")}createClient(t={}){let r=`https://${this.server||"api.github.com"}/repos/${this.getProjectPath()}`;return k__default.default.create({baseURL:r,headers:{Accept:"application/vnd.github+json",Authorization:`Bearer ${this.token}`,"X-GitHub-Api-Version":"2022-11-28"},...t})}getServiceHostname(){return "github.com"}getProjectPath(){return this.projectPath}getProjectUrl(){return `https://${this.getServiceHostname()}/${this.getProjectPath()}`}getProjectCICDSettingURL(){return `${this.getProjectUrl()}/settings/secrets/actions`}async uploadSecret(t,a){let{data:r}=await this.client({method:"get",url:"/actions/secrets/public-key"}).catch(l=>{throw new err.Err(l.message,{data:l?.response?.data})}),n=typeof a=="string"?a:a.value;if(!r?.key)throw new err.Err("!publicKey");if(!r?.key_id)throw new err.Err("!publicKeyId");await m__default.default.ready;let e=m__default.default,s=e.from_base64(r.key,e.base64_variants.ORIGINAL),i=e.from_string(n),h=e.crypto_box_seal(i,s),d=e.to_base64(h,e.base64_variants.ORIGINAL);await this.client({method:"put",url:`/actions/secrets/${t}`,data:{encrypted_value:d,key_id:r.key_id}});}async uploadVariable(t,a){let r=typeof a=="string"?a:a.value,{data:n,status:e}=await this.client({method:"get",url:`/actions/variables/${t}`}).catch(s=>s?.response);e===404&&await this.client({method:"post",url:"/actions/variables",data:{name:t,value:r}}),e===200&&n.name.toLowerCase()===t.toLowerCase()&&await this.client({method:"patch",url:`/actions/variables/${t}`,data:{name:t,value:r}});}uploadHook(){throw new err.Err("Github hooks not supported yet")}}; exports.GithubService = f; //# sourceMappingURL=out.js.map //# sourceMappingURL=GithubService.js.map