@ycmd/creds
Version:
LSK.js CLI Creds is the easiest way to manage GitHub / Gitlab secrets and credentials
16 lines (11 loc) • 5.46 kB
JavaScript
;
var err = require('@lsk4/err');
var log = require('@lsk4/log');
var E = require('axios');
var fishbird = require('fishbird');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var E__default = /*#__PURE__*/_interopDefault(E);
var j=Object.defineProperty;var h=(u,e)=>j(u,"name",{value:e,configurable:!0});var p=class{static{h(this,"Service");}client;log=log.createLogger(this.constructor.name);constructor(e){this.assign(e),this.checkConfig(),this.client=this.createClient(e.clientOptions);}createClient(e={}){return E__default.default.create(e)}assign(e){Object.assign(this,e);}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 e=this.projectPath;if(!e)throw new err.Err("!projectPath");return e}getProjectId(){return this.projectId}getProjectCredsUrl(){let e=this.projectCredsUrl;if(!e)throw new err.Err("!projectCredsUrl");return e}getProjectCredsOwner(){let e=this.projectCredsOwner;if(!e)throw new err.Err("!projectCredsOwner");return e}async uploadSecret(e,t){throw new err.Err("NOT_IMPLEMENTED","uploadSecret method not implemented")}async uploadVariable(e,t){throw new err.Err("NOT_IMPLEMENTED","uploadVariable method not implemented")}async removeOldHooks(){}async uploadHook(e){}async uploadHooks(e){if(!e)throw new err.Err("!env");let{hooks:t=[]}=e;try{await this.removeOldHooks();}catch(o){this.log.error("[ERR] Old hooks removing failed:",err.Err.getMessage(o));}await fishbird.map(t,async(o,l)=>{try{await this.uploadHook(o),this.log.info(`[OK] Hook ${l} uploaded`);}catch(a){this.log.error(`[ERR] Hook ${l} not uploaded:`,err.Err.getMessage(a));}});}async uploadAll(e){if(!e)throw new err.Err("!env");let{secrets:t={},variables:o={},files:l=[]}=e;await this.uploadHooks(e),await fishbird.map(Object.entries(t),async([a,s])=>{try{await this.uploadSecret(a,s),this.log.info(`[OK] Secret ${a} uploaded`);}catch(i){this.log.error(`[ERR] Secret ${a} not uploaded as secret, because`,err.Err.getMessage(i)),this.log.trace(i);}}),await fishbird.map(Object.entries(o),async([a,s])=>{try{await this.uploadVariable(a,s),this.log.info(`[OK] Variable ${a} uploaded`);}catch(i){this.log.error(`[ERR] Variable ${a} not uploaded as variable, because`,err.Err.getMessage(i)),this.log.trace(i);}}),await fishbird.map(Object.values(l),async({name:a,credType:s,content:i})=>{let n=a,g=i;try{if(s==="variable")await this.uploadVariable(n,g);else if(s==="secret")await this.uploadSecret(n,g);else if(s==="skip"){this.log.debug(`[SKIP] File ${n} uploaded as ${s}`);return}else throw new err.Err("unknown credType",{credType:s});this.log.info(`[OK] File ${n} uploaded as ${s}`);}catch(m){this.log.error(`[ERR] File ${n} not uploaded as ${s}, because`,err.Err.getMessage(m)),this.log.trace(m);}});}};var w=!0,f=class extends p{static{h(this,"GitlabService");}projectId;projectName;projectPath;projectCredsUrl;projectCredsOwner;token;server;force=!0;log=log.createLogger(this.constructor.name);constructor(e){super(e),this.assign(e),this.checkConfig(),this.client=this.createClient(e.clientOptions);}checkConfig(){if(!this.projectId)throw new err.Err("!projectId");if(!this.server)throw new err.Err("!server");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(e={}){return E__default.default.create({baseURL:`https://${this.server}/api/v4/projects/${this.projectId}`,headers:{"PRIVATE-TOKEN":this.token},...e})}getServiceHostname(){return this.server}getProjectUrl(){return `https://${this.getServiceHostname()}/${this.projectPath}`}getProjectCICDSettingURL(){return `${this.getProjectUrl()}/-/settings/ci_cd`}async uploadVariableOrSecret(e,t,o={}){let l=typeof t=="string"?t:t.value,a=t?.type||o?.type||"file",s=!!(t?.protected??o?.protected??!1),{data:i}=await this.client({method:"get",url:`/variables/${e}`}).catch(n=>{return {data:{value:"@lskjs/creds"}}});if(i.value&&i.value.indexOf("@lskjs/creds")===-1&&!w){this.log.warn(`[IGNORE] Project ${this.projectId} ${e}`);return}await this.client({method:"delete",url:`/variables/${e}`}).catch(()=>{}),await this.client({method:"post",url:"/variables",data:{key:e,value:l,variable_type:a,protected:s,...o}});}async uploadSecret(e,t,o={}){return this.uploadVariableOrSecret(e,t,{type:"file",protected:!!(o.protected??!0)})}async uploadVariable(e,t,o={}){return this.uploadVariableOrSecret(e,t,{type:"env_var",protected:!!(o.protected??!1)})}async uploadEnv(){throw this.log.warn("GitLab uploading env doesn't supported"),new err.Err("NOT_IMPLEMENTED")}async removeOldHooks(){let{data:e}=await this.client({method:"get",url:"/hooks"}).catch(t=>{return {data:{value:"@lskjs/creds"}}});await fishbird.map(e,async({id:t})=>{await this.client({method:"delete",url:`/hooks/${t}`});});}async uploadHook(e){await this.client({method:"post",url:"/hooks",data:e});}};
exports.GitlabService = f;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=GitlabService.js.map