UNPKG

@candriajs/git-neko-kit

Version:

Github, Gitee, GitCode API封装库

1 lines 8.57 kB
import{FailedRevokeAppAccrssTokenMsg as e,GitHubClient as t,MissingAccessTokenMsg as n,MissingAppClientMsg as r,MissingAppInstallIdMsg as i,MissingAppSlugMsg as a,MissingOrgParamMsg as o,MissingRepoOwnerOrNameMsg as s,MissingUserNameParamMsg as c,RepoMovedMsg as l,RepoNotFoundMsg as u,RevokeAccessTokenSuccessMsg as d,format_date as f}from"./client-sGV7POG-.mjs";import{capitalize as p,isEmpty as m}from"radash";var h=class extends t{constructor(e){super(e),this.userToken=e.userToken,this.base_url=e.base_url,this.api_url=e.api_url}async get_app_info(e){if(!e.app_slug)throw Error(a);if(!this.userToken)throw Error(n);try{this.setRequestConfig({token:this.userToken});let{app_slug:t}=e,n=await this.get(`/apps/${t}`);if(n.data){let[e,t]=await Promise.all([this.format?f(n.data.created_at):n.data.created_at,this.format?f(n.data.updated_at):n.data.updated_at]),r={id:n.data.id,name:n.data.name,client_id:n.data.client_id,slug:n.data.slug,owner:{id:n.data.owner.id,login:n.data.owner.login,name:m(n.data.owner.name)?null:n.data.owner.name,email:m(n.data.owner.email)?null:n.data.owner.email,html_url:n.data.owner.html_url,avatar_url:n.data.owner.avatar_url,type:p(n.data.owner.type.toLowerCase())},description:n.data.description,external_url:n.data.external_url,html_url:n.data.html_url,permissions:n.data.permissions,events:n.data.events,created_at:e,updated_at:t};n.data=r}return n}catch(e){throw Error(`[GitHub] 获取应用信息失败: ${e.message}`)}}async get_app_info_by_auth(){if(!this.is_app_client)throw Error(r);try{this.setRequestConfig({token:this.jwtToken});let e=await this.get(`/app`);if(e.data){let[t,n]=await Promise.all([this.format?f(e.data.created_at):e.data.created_at,this.format?f(e.data.updated_at):e.data.updated_at]),r={id:e.data.id,name:e.data.name,client_id:e.data.client_id,slug:e.data.slug,owner:{id:e.data.owner.id,login:e.data.owner.login,name:m(e.data.owner.name)?null:e.data.owner.name,email:m(e.data.owner.email)?null:e.data.owner.email,html_url:e.data.owner.html_url,avatar_url:e.data.owner.avatar_url,type:p(e.data.owner.type.toLowerCase())},description:e.data.description,external_url:e.data.external_url,html_url:e.data.html_url,permissions:e.data.permissions,events:e.data.events,created_at:t,updated_at:n};e.data=r}return e}catch(e){throw Error(`[GitHub] 获取应用信息失败: ${e.message}`)}}async get_app_installation_by_repo(e){if(!this.is_app_client)throw Error(r);if(!e.owner||!e.repo)throw Error(s);try{this.setRequestConfig({token:this.jwtToken});let{owner:t,repo:n}=e,r=await this.get(`/repos/${t}/${n}/installation`);switch(r.statusCode){case 404:throw Error(u);case 301:throw Error(l)}if(r.data){let[e,t]=await Promise.all([this.format?f(r.data.created_at):r.data.created_at,this.format?f(r.data.updated_at):r.data.updated_at]),n={id:r.data.id,html_url:r.data.html_url,app_id:r.data.app_id,app_slug:r.data.app_slug,target_id:r.data.target_id,target_type:r.data.target_type,account:{id:r.data.account.id,login:r.data.account.login,name:m(r.data.account.name)?null:r.data.account.name,email:m(r.data.account.email)?null:r.data.account.email,html_url:r.data.account.html_url,avatar_url:r.data.account.avatar_url,type:p(r.data.account.type.toLowerCase())},repository_selection:r.data.repository_selection,access_tokens_url:r.data.access_tokens_url,repositories_url:r.data.repositories_url,permissions:r.data.permissions,events:r.data.events,created_at:e,updated_at:t};r.data=n}return r}catch(e){throw Error(`[GitHub] 获取存储库安装应用信息失败: ${e.message}`)}}async get_app_installation_by_user(e){if(!this.is_app_client)throw Error(r);if(!e.username)throw Error(c);try{this.setRequestConfig({token:this.jwtToken});let{username:t}=e,n=await this.get(`/users/${t}/installation`);switch(n.statusCode){case 404:throw Error(u);case 301:throw Error(l)}if(n.data){let[e,t]=await Promise.all([this.format?f(n.data.created_at):n.data.created_at,this.format?f(n.data.updated_at):n.data.updated_at]),r={id:n.data.id,html_url:n.data.html_url,app_id:n.data.app_id,app_slug:n.data.app_slug,target_id:n.data.target_id,target_type:n.data.target_type,account:{id:n.data.account.id,login:n.data.account.login,name:m(n.data.account.name)?null:n.data.account.name,email:m(n.data.account.email)?null:n.data.account.email,html_url:n.data.account.html_url,avatar_url:n.data.account.avatar_url,type:p(n.data.account.type.toLowerCase())},repository_selection:n.data.repository_selection,access_tokens_url:n.data.access_tokens_url,repositories_url:n.data.repositories_url,permissions:n.data.permissions,events:n.data.events,created_at:e,updated_at:t};n.data=r}return n}catch(e){throw Error(`[GitHub] 获取存储库安装应用信息失败: ${e.message}`)}}async get_app_installation_by_org(e){if(!this.is_app_client)throw Error(r);if(!e.org)throw Error(o);try{this.setRequestConfig({token:this.jwtToken});let{org:t}=e,n=await this.get(`/orgs/${t}/installation`);switch(n.statusCode){case 404:throw Error(u);case 301:throw Error(l)}if(n.data){let[e,t]=await Promise.all([this.format?f(n.data.created_at):n.data.created_at,this.format?f(n.data.updated_at):n.data.updated_at]),r={id:n.data.id,html_url:n.data.html_url,app_id:n.data.app_id,app_slug:n.data.app_slug,target_id:n.data.target_id,target_type:n.data.target_type,account:{id:n.data.account.id,login:n.data.account.login,name:m(n.data.account.name)?null:n.data.account.name,email:m(n.data.account.email)?null:n.data.account.email,html_url:n.data.account.html_url,avatar_url:n.data.account.avatar_url,type:p(n.data.account.type.toLowerCase())},repository_selection:n.data.repository_selection,access_tokens_url:n.data.access_tokens_url,repositories_url:n.data.repositories_url,permissions:n.data.permissions,events:n.data.events,created_at:e,updated_at:t};n.data=r}return n}catch(e){throw Error(`[GitHub] 获取存储库安装应用信息失败: ${e.message}`)}}async create_access_token_for_app(e){if(!e.installation_id)throw Error(i);try{this.setRequestConfig({token:this.jwtToken});let t={};e.repositories&&(t.repositories=e.repositories),e.repository_ids&&(t.repository_ids=e.repository_ids),e.permissions&&(t.permissions=e.permissions);let n=await this.post(`app/installations/${e.installation_id}/access_tokens`,t);if(n.statusCode===201&&n.data){let e=this.format?await f(n.data.expires_at):n.data.expires_at,t={token:n.data.token,expires_at:e,permissions:n.data.permissions,repository_selection:n.data.repository_selection,repositories:await Promise.all(n.data.repositories.map(async e=>({id:e.id,name:e.name,full_name:e.full_name,owner:{id:e.owner.id,login:e.owner.login,name:m(n.data.owner.name)?null:n.data.owner.name,avatar_url:e.owner.avatar_url,type:e.owner.type,html_url:e.owner.html_url},public:!e.private,private:e.private,visibility:e.private?`private`:`public`,fork:e.fork,archived:e.archived,disabled:e.disabled,html_url:e.html_url,description:e.description,stargazers_count:e.stargazers_count,watchers_count:e.watchers_count,language:e.language,forks_count:e.forks_count,open_issues_count:e.open_issues_count,default_branch:e.default_branch,created_at:this.format?await f(e.created_at):e.created_at,updated_at:this.format?await f(e.updated_at):e.updated_at,pushed_at:this.format?await f(e.pushed_at):e.pushed_at})))};n.data=t}return n}catch(e){throw Error(`[GitHub] 为应用程序创建访问令牌失败: ${e.message}`)}}async revoke_access_token_for_app(){this.setRequestConfig({token:this.jwtToken});let t=await this.delete(`/installation/token`),n=!1,r=`error`,i,a=400,o;return t.statusCode===201?(n=!0,r=`ok`,a=200,i=`请求成功`,o={success:n,message:d}):(n=!1,r=`error`,a=403,i=`请求失败`,o={success:n,message:e}),Promise.resolve({success:n,status:r,statusCode:a,msg:i,data:o})}async create_install_link(e){try{if(!this.is_app_client)throw Error(r);let t=new URL(`apps/${await this.get_app_name()}/installations/new`,this.base_url);return t.search=new URLSearchParams({...e&&{state:e}}).toString(),t.toString()}catch(e){throw Error(`[GitHub] 生成应用安装链接失败: ${e.message}`)}}async create_config_install_link(e){try{if(!this.is_app_client)throw Error(r);let t=new URL(`apps/${await this.get_app_name()}/installations/new`,this.base_url);return t.search=new URLSearchParams({...e&&{state:e}}).toString(),t.toString()}catch(e){throw Error(`[GitHub] 生成应用配置链接失败: ${e.message}`)}}async get_app_name(){return(await this.get_app_info_by_auth()).data.name}async is_app_installed_in_repo(e){try{let t=await this.get_app_installation_by_repo({owner:e.owner,repo:e.repo});return!!t}catch{return!1}}};export{h as App};