dsh-github-app 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/client.js +3 -3
- package/icon.png +0 -0
- package/index.mjs +0 -1
- package/locale/en.json +5 -0
- package/package.json +3 -1
- package/_virtual/_rollup-plugin-process-env.mjs +0 -6
package/client/client.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(function(){let e={INNETJS_CSS:`.gh-section{color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;font-size:14px;line-height:22px;width:100%}.gh-row{align-items:center;border-bottom:.5px solid var(--dsw-alias-border-l2);display:flex;gap:8px;padding:16px 0}.gh-row:last-of-type{border-bottom:none}.gh-text{flex:1;flex-direction:column;gap:4px;padding-right:48px}.gh-text,.gh-titleRow{display:flex;min-width:0}.gh-titleRow{align-items:center;flex-wrap:wrap;gap:8px}.gh-title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.gh-badge{align-items:center;border:.5px solid transparent;border-radius:999px;display:inline-flex;flex:none;font-size:11px;font-weight:500;gap:5px;line-height:17px;padding:1px 8px;white-space:nowrap}.gh-badge-missing{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.gh-badge-missing,.gh-badge-pending{background:var(--dsw-alias-bg-module-platform)}.gh-badge-pending{border-color:var(--dsw-alias-label-caption);color:var(--dsw-alias-label-secondary)}.gh-badge-connected{background:var(--dsw-alias-bg-module-platform);border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.gh-dot{background:currentColor;border-radius:50%;flex:none;height:6px;width:6px}.gh-desc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px;white-space:pre-line}.gh-desc code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.gh-control{align-items:center;display:flex;flex:none;gap:8px;min-width:0}.gh-timer{box-sizing:border-box;color:var(--dsw-alias-label-primary);display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;font-variant-numeric:tabular-nums;line-height:22px;min-width:72px;text-align:right}.gh-timer-soon{color:var(--dsw-alias-state-warn-primary)}.gh-timer-expired{color:var(--dsw-alias-state-error-primary)}.gh-input{background:var(--dsw-alias-bg-module-platform);border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;height:36px;line-height:22px;max-width:320px;padding:0 14px}.gh-input:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-input:disabled{cursor:default;opacity:.5}.gh-input:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-button{align-items:center;border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;cursor:pointer;display:inline-flex;font:inherit;font-size:14px;gap:6px;height:36px;justify-content:center;line-height:22px;padding:0 14px;white-space:nowrap}.gh-button:disabled{cursor:default;opacity:.4}.gh-button:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-primary{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font-weight:500}.gh-primary:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.gh-secondary{background:transparent;border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary)}.gh-secondary:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput{color:var(--dsw-alias-label-secondary);font-size:12px}.gh-fileInput::file-selector-button{align-items:center;background:transparent;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);cursor:pointer;display:inline-flex;font:inherit;font-size:12px;height:28px;justify-content:center;line-height:18px;margin-right:8px;padding:0 10px;white-space:nowrap}.gh-fileInput::file-selector-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput:disabled::file-selector-button{cursor:default;opacity:.4}.gh-notice{border-radius:var(--dsw-radius-md);font-size:12px;line-height:18px;margin:0;padding:8px 12px}.gh-notice-success{color:var(--dsw-alias-state-success-primary)}.gh-notice-error,.gh-notice-success{background:var(--dsw-alias-bg-module-platform)}.gh-notice-error{color:var(--dsw-alias-state-error-primary)}.gh-loading{border-bottom:.5px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;padding:16px 0}@media (max-width:640px){.gh-row{flex-wrap:wrap}.gh-text{flex-basis:100%;padding-right:0}.gh-control{align-items:stretch;width:100%}.gh-input{max-width:none;width:100%}}`};typeof process>`u`?globalThis.process={env:e}:process.env?Object.assign(process.env,e):process.env=e})();function e(e){return typeof e!=`string`||e.trim()===``?`Passphrase is required.`:e.length<8?`Passphrase must be at least 8 characters.`:e.length>1024?`Passphrase must be at most 1024 characters.`:null}async function t(e,t){let n=Object.assign({action:e},t||{}),r=await fetch(`/github/api`,{method:`POST`,headers:{"content-type":`application/json`},credentials:`same-origin`,body:JSON.stringify(n)}),i=null;try{i=await r.json()}catch{i=null}let a=typeof i==`object`&&i?i:null;if(a&&a.ok===!1){let e=a.error,t=e&&typeof e.message==`string`?e.message:`Request failed`;throw Error(t)}if(!r.ok)throw Error(`GitHub request failed (HTTP `+r.status+`).`);if(!a)throw Error(`Unreadable response.`);return Object.prototype.hasOwnProperty.call(a,`value`)?a.value:a}function n(e){return e<10?`0`+e:String(e)}function r(e){let t=Math.max(0,Math.ceil(e/1e3)),r=t%60,i=Math.floor(t/60)%60;return t>=3600?Math.floor(t/3600)+`:`+n(i)+`:`+n(r):n(i)+`:`+n(r)}function i(e){return e==null||!Number.isFinite(e)?`unknown`:e<=0?`expired`:e<3e5?`soon`:`valid`}function a(e,t,n){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:typeof t==`number`&&Number.isFinite(t)&&t>0?t+n:null}function o(e){if(typeof document>`u`||!document.head||document.querySelector(`style[data-plugin="${e}"]`)!==null)return;let t=document.createElement(`style`);t.dataset.plugin=e,t.textContent=`.gh-section{color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;font-size:14px;line-height:22px;width:100%}.gh-row{align-items:center;border-bottom:.5px solid var(--dsw-alias-border-l2);display:flex;gap:8px;padding:16px 0}.gh-row:last-of-type{border-bottom:none}.gh-text{flex:1;flex-direction:column;gap:4px;padding-right:48px}.gh-text,.gh-titleRow{display:flex;min-width:0}.gh-titleRow{align-items:center;flex-wrap:wrap;gap:8px}.gh-title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.gh-badge{align-items:center;border:.5px solid transparent;border-radius:999px;display:inline-flex;flex:none;font-size:11px;font-weight:500;gap:5px;line-height:17px;padding:1px 8px;white-space:nowrap}.gh-badge-missing{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.gh-badge-missing,.gh-badge-pending{background:var(--dsw-alias-bg-module-platform)}.gh-badge-pending{border-color:var(--dsw-alias-label-caption);color:var(--dsw-alias-label-secondary)}.gh-badge-connected{background:var(--dsw-alias-bg-module-platform);border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.gh-dot{background:currentColor;border-radius:50%;flex:none;height:6px;width:6px}.gh-desc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px;white-space:pre-line}.gh-desc code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.gh-control{align-items:center;display:flex;flex:none;gap:8px;min-width:0}.gh-timer{box-sizing:border-box;color:var(--dsw-alias-label-primary);display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;font-variant-numeric:tabular-nums;line-height:22px;min-width:72px;text-align:right}.gh-timer-soon{color:var(--dsw-alias-state-warn-primary)}.gh-timer-expired{color:var(--dsw-alias-state-error-primary)}.gh-input{background:var(--dsw-alias-bg-module-platform);border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;height:36px;line-height:22px;max-width:320px;padding:0 14px}.gh-input:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-input:disabled{cursor:default;opacity:.5}.gh-input:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-button{align-items:center;border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;cursor:pointer;display:inline-flex;font:inherit;font-size:14px;gap:6px;height:36px;justify-content:center;line-height:22px;padding:0 14px;white-space:nowrap}.gh-button:disabled{cursor:default;opacity:.4}.gh-button:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-primary{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font-weight:500}.gh-primary:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.gh-secondary{background:transparent;border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary)}.gh-secondary:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput{color:var(--dsw-alias-label-secondary);font-size:12px}.gh-fileInput::file-selector-button{align-items:center;background:transparent;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);cursor:pointer;display:inline-flex;font:inherit;font-size:12px;height:28px;justify-content:center;line-height:18px;margin-right:8px;padding:0 10px;white-space:nowrap}.gh-fileInput::file-selector-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput:disabled::file-selector-button{cursor:default;opacity:.4}.gh-notice{border-radius:var(--dsw-radius-md);font-size:12px;line-height:18px;margin:0;padding:8px 12px}.gh-notice-success{color:var(--dsw-alias-state-success-primary)}.gh-notice-error,.gh-notice-success{background:var(--dsw-alias-bg-module-platform)}.gh-notice-error{color:var(--dsw-alias-state-error-primary)}.gh-loading{border-bottom:.5px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;padding:16px 0}@media (max-width:640px){.gh-row{flex-wrap:wrap}.gh-text{flex-basis:100%;padding-right:0}.gh-control{align-items:stretch;width:100%}.gh-input{max-width:none;width:100%}}`,document.head.appendChild(t)}function s(e,t){return e instanceof Error&&e.message?e.message:t}let c;function l(){return c}function u(e){c=e}function d({children:e,variant:t=`primary`,disabled:n,onClick:r}){return/* @__PURE__ */ l().createElement(`button`,{className:`gh-button gh-`+t,disabled:n,onClick:r},e)}function f({expiresAt:e,onExpired:t}){let n=l(),{useEffect:a,useRef:o,useState:s}=n,[c,u]=s(()=>Date.now()),d=o(null);a(()=>{if(u(Date.now()),e===null)return;let t=setInterval(()=>u(Date.now()),1e3);return()=>clearInterval(t)},[e]);let f=e===null?null:e-c;if(a(()=>{f===null||f>0||d.current!==e&&(d.current=e,t&&t())},[e,f]),f===null)return null;let p=i(f),m=p===`soon`?`gh-timer-soon`:p===`expired`?`gh-timer-expired`:`gh-timer-valid`;return/* @__PURE__ */ n.createElement(`span`,{className:`gh-timer `+m},r(f))}function p({onChange:e,accept:t,disabled:n}){return/* @__PURE__ */ l().createElement(`input`,{className:`gh-fileInput`,type:`file`,accept:t,disabled:n,onChange:e})}function m({value:e,onChange:t,type:n=`text`,placeholder:r,disabled:i}){return/* @__PURE__ */ l().createElement(`input`,{className:`gh-input`,type:n,value:e,disabled:i,onChange:e=>t(e.target.value),placeholder:r})}function ee({kind:e,text:t}){return/* @__PURE__ */ l().createElement(`div`,{className:`gh-notice gh-notice-`+e,style:{marginTop:`16px`}},t)}function h({title:e,description:t,control:n,badge:r}){let i=l();return/* @__PURE__ */ i.createElement(`div`,{className:`gh-row`},/* @__PURE__ */ i.createElement(`div`,{className:`gh-text`},/* @__PURE__ */ i.createElement(`div`,{className:`gh-titleRow`},/* @__PURE__ */ i.createElement(`span`,{className:`gh-title`},e),r||null),t?/* @__PURE__ */ i.createElement(`div`,{className:`gh-desc`},t):null),/* @__PURE__ */ i.createElement(`div`,{className:`gh-control`},n))}function g({state:e,label:t}){let n=l();return/* @__PURE__ */ n.createElement(`span`,{className:`gh-badge gh-badge-`+e},/* @__PURE__ */ n.createElement(`span`,{className:`gh-dot`}),t)}function _(e,t){let n={};return t===null||(e.appId!==t.appId&&(n.appId=e.appId),e.installationId!==t.installationId&&(n.installationId=e.installationId),e.gitUserName!==t.gitUserName&&(n.gitUserName=e.gitUserName),e.gitUserEmail!==t.gitUserEmail&&(n.gitUserEmail=e.gitUserEmail)),n}function te(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let e=String(r.result||``);t(e.includes(`,`)?e.split(`,`)[1]:e)},r.onerror=()=>n(r.error||/* @__PURE__ */ Error(`File read failed`)),r.readAsDataURL(e)})}function v(){let n=l(),{useState:r,useEffect:i,useRef:o}=n,[c,u]=r(!0),[v,y]=r(!1),[b,x]=r(null),[S,ne]=r(null),[C,w]=r(``),[T,E]=r(``),[D,O]=r(``),[k,A]=r(``),[j,M]=r(``),N=o(!1),P=o(null);function F(){return{appId:C,installationId:T,gitUserName:D,gitUserEmail:k}}async function I(){try{let e=await t(`status`),n=e&&e.config,r=e&&e.gitIdentity,i={appId:n&&n.appId||``,installationId:n&&n.installationId||``,gitUserName:n&&n.gitUserName||r&&r.name||``,gitUserEmail:n&&n.gitUserEmail||r&&r.email||``};ne(e),w(i.appId),E(i.installationId),O(i.gitUserName),A(i.gitUserEmail),P.current=i,N.current=!0}catch(e){x({kind:`error`,text:s(e,`Failed to load status.`)})}finally{u(!1)}}i(()=>{I()},[]),i(()=>{let e=P.current;if(!N.current||e===null)return;let n=_(F(),e);if(Object.keys(n).length===0)return;let r=setTimeout(async()=>{try{await t(`saveConfig`,n),P.current={...e,...n}}catch(e){x({kind:`error`,text:s(e,`Save failed.`)})}},600);return()=>clearTimeout(r)},[C,T,D,k]);async function re(){let e=P.current;if(e===null)return;let n=_(F(),e);Object.keys(n).length!==0&&(await t(`saveConfig`,n),P.current={...e,...n})}async function L(e){y(!0),x(null);try{await e(),await I()}catch(e){x({kind:`error`,text:s(e,`Action failed.`)})}finally{y(!1)}}async function ie(){await L(async()=>{let e=await t(`installGh`);if(e&&e.install&&e.install.ok===!1)throw Error(e.install.error||`Install failed.`);x({kind:`success`,text:`Missing components installed.`})})}function R(){let t=e(j);return t===null||(x({kind:`error`,text:t}),!1)}async function ae(e){let n=e.target.files&&e.target.files[0];n&&(R()&&await L(async()=>{let e=await te(n);await t(`saveConfig`,{..._(F(),P.current),pemBase64:e,pemFileName:n.name,passphrase:j}),x({kind:`success`,text:`Private key uploaded and encrypted.`})}),e.target.value=``)}async function oe(){R()&&await L(async()=>{await re();let e=await t(`connect`,{passphrase:j});if(e&&e.connect&&e.connect.ok===!1)throw Error(e.connect.error||`Connect failed.`);M(``),x({kind:`success`,text:`Connected.`})})}async function se(){await L(async()=>{await t(`disconnect`),M(``),x({kind:`success`,text:`Disconnected.`})})}if(c)return/* @__PURE__ */ n.createElement(`div`,{className:`gh-section`},/* @__PURE__ */ n.createElement(`div`,{className:`gh-loading`},`Loading…`));let z=S?.gh??{installed:!1,version:null},B=S?.git??{installed:!1,version:null},V=S?.config??{hasKey:!1,keyFileName:null,appId:``,installationId:``,gitUserName:``,gitUserEmail:``},H=S?.auth??{loggedIn:!1,gitConfigured:!1},U=S?.token??null,W=z.installed&&B.installed,G=v||!W,K=v||!B.installed,ce=U!==null&&Number.isFinite(U.ttlSeconds)?U.ttlSeconds:3600,le=U!==null&&Number.isFinite(U.issuedAt)?U.issuedAt:null,ue=U!==null&&Number.isFinite(U.expiresAt)?U.expiresAt:null,de=H.loggedIn?a(ue,le,ce*1e3):null,q=`Ready`,J=`connected`;W||(q=`Install required`,J=`missing`);let Y=`Pending setup`,X=`pending`;H.loggedIn?(Y=`Connected`,X=`connected`):(V.hasKey||H.error)&&(Y=`Disconnected`,X=`missing`);let Z=`Authenticate GitHub CLI with a GitHub App`;!H.loggedIn&&H.error&&(Z+=`
|
|
2
|
-
`+
|
|
3
|
-
`+(
|
|
1
|
+
window.__ModuleLoader__.load({id:`dsh-github-app`,factory(e){var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("react"),i=e("react/jsx-runtime");function a(e){return typeof e!=`string`||e.trim()===``?`Passphrase is required.`:e.length<8?`Passphrase must be at least 8 characters.`:e.length>1024?`Passphrase must be at most 1024 characters.`:null}function o({children:e,variant:t=`primary`,disabled:n,onClick:r}){return/* @__PURE__ */ (0,i.jsx)(`button`,{className:`gh-button gh-`+t,disabled:n,onClick:r,children:e})}async function s(e,t){let n=Object.assign({action:e},t||{}),r=await fetch(`/github/api`,{method:`POST`,headers:{"content-type":`application/json`},credentials:`same-origin`,body:JSON.stringify(n)}),i=null;try{i=await r.json()}catch{i=null}let a=typeof i==`object`&&i?i:null;if(a&&a.ok===!1){let e=a.error,t=e&&typeof e.message==`string`?e.message:`Request failed`;throw Error(t)}if(!r.ok)throw Error(`GitHub request failed (HTTP `+r.status+`).`);if(!a)throw Error(`Unreadable response.`);return Object.prototype.hasOwnProperty.call(a,`value`)?a.value:a}function c(e){return e<10?`0`+e:String(e)}function l(e){let t=Math.max(0,Math.ceil(e/1e3)),n=t%60,r=Math.floor(t/60)%60;return t>=3600?Math.floor(t/3600)+`:`+c(r)+`:`+c(n):c(r)+`:`+c(n)}function u(e){return e==null||!Number.isFinite(e)?`unknown`:e<=0?`expired`:e<3e5?`soon`:`valid`}function ee(e,t,n){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:typeof t==`number`&&Number.isFinite(t)&&t>0?t+n:null}function d(e){if(typeof document>`u`||!document.head||document.querySelector(`style[data-plugin="${e}"]`)!==null)return;let t=document.createElement(`style`);t.dataset.plugin=e,t.textContent=`.gh-section{color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;font-size:14px;line-height:22px;width:100%}.gh-row{align-items:center;border-bottom:.5px solid var(--dsw-alias-border-l2);display:flex;gap:8px;padding:16px 0}.gh-row:last-of-type{border-bottom:none}.gh-text{flex:1;flex-direction:column;gap:4px;padding-right:48px}.gh-text,.gh-titleRow{display:flex;min-width:0}.gh-titleRow{align-items:center;flex-wrap:wrap;gap:8px}.gh-title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.gh-badge{align-items:center;border:.5px solid transparent;border-radius:999px;display:inline-flex;flex:none;font-size:11px;font-weight:500;gap:5px;line-height:17px;padding:1px 8px;white-space:nowrap}.gh-badge-missing{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.gh-badge-missing,.gh-badge-pending{background:var(--dsw-alias-bg-module-platform)}.gh-badge-pending{border-color:var(--dsw-alias-label-caption);color:var(--dsw-alias-label-secondary)}.gh-badge-connected{background:var(--dsw-alias-bg-module-platform);border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.gh-dot{background:currentColor;border-radius:50%;flex:none;height:6px;width:6px}.gh-desc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px;white-space:pre-line}.gh-desc code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.gh-control{align-items:center;display:flex;flex:none;gap:8px;min-width:0}.gh-timer{box-sizing:border-box;color:var(--dsw-alias-label-primary);display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;font-variant-numeric:tabular-nums;line-height:22px;min-width:72px;text-align:right}.gh-timer-soon{color:var(--dsw-alias-state-warn-primary)}.gh-timer-expired{color:var(--dsw-alias-state-error-primary)}.gh-input{background:var(--dsw-alias-bg-module-platform);border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;height:36px;line-height:22px;max-width:320px;padding:0 14px}.gh-input:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-input:disabled{cursor:default;opacity:.5}.gh-input:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-button{align-items:center;border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;cursor:pointer;display:inline-flex;font:inherit;font-size:14px;gap:6px;height:36px;justify-content:center;line-height:22px;padding:0 14px;white-space:nowrap}.gh-button:disabled{cursor:default;opacity:.4}.gh-button:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-primary{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font-weight:500}.gh-primary:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.gh-secondary{background:transparent;border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary)}.gh-secondary:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput{color:var(--dsw-alias-label-secondary);font-size:12px}.gh-fileInput::file-selector-button{align-items:center;background:transparent;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);cursor:pointer;display:inline-flex;font:inherit;font-size:12px;height:28px;justify-content:center;line-height:18px;margin-right:8px;padding:0 10px;white-space:nowrap}.gh-fileInput::file-selector-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput:disabled::file-selector-button{cursor:default;opacity:.4}.gh-notice{border-radius:var(--dsw-radius-md);font-size:12px;line-height:18px;margin:0;padding:8px 12px}.gh-notice-success{color:var(--dsw-alias-state-success-primary)}.gh-notice-error,.gh-notice-success{background:var(--dsw-alias-bg-module-platform)}.gh-notice-error{color:var(--dsw-alias-state-error-primary)}.gh-loading{border-bottom:.5px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;padding:16px 0}@media (max-width:640px){.gh-row{flex-wrap:wrap}.gh-text{flex-basis:100%;padding-right:0}.gh-control{align-items:stretch;width:100%}.gh-input{max-width:none;width:100%}}`,document.head.appendChild(t)}function f(e,t){return e instanceof Error&&e.message?e.message:t}function te({expiresAt:e,onExpired:t}){let[n,a]=(0,r.useState)(()=>Date.now()),o=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(a(Date.now()),e===null)return;let t=setInterval(()=>a(Date.now()),1e3);return()=>clearInterval(t)},[e]);let s=e===null?null:e-n;if((0,r.useEffect)(()=>{s===null||s>0||o.current!==e&&(o.current=e,t&&t())},[e,s]),s===null)return null;let c=u(s);return/* @__PURE__ */ (0,i.jsx)(`span`,{className:`gh-timer `+(c===`soon`?`gh-timer-soon`:c===`expired`?`gh-timer-expired`:`gh-timer-valid`),children:l(s)})}function p({onChange:e,accept:t,disabled:n}){return/* @__PURE__ */ (0,i.jsx)(`input`,{className:`gh-fileInput`,type:`file`,accept:t,disabled:n,onChange:e})}function m({value:e,onChange:t,type:n=`text`,placeholder:r,disabled:a}){return/* @__PURE__ */ (0,i.jsx)(`input`,{className:`gh-input`,type:n,value:e,disabled:a,onChange:e=>t(e.target.value),placeholder:r})}function ne({kind:e,text:t}){return/* @__PURE__ */ (0,i.jsx)(`div`,{className:`gh-notice gh-notice-`+e,style:{marginTop:`16px`},children:t})}function h({title:e,description:t,control:n,badge:r}){return/* @__PURE__ */ (0,i.jsxs)(`div`,{className:`gh-row`,children:[/* @__PURE__ */ (0,i.jsxs)(`div`,{className:`gh-text`,children:[/* @__PURE__ */ (0,i.jsxs)(`div`,{className:`gh-titleRow`,children:[/* @__PURE__ */ (0,i.jsx)(`span`,{className:`gh-title`,children:e}),r||null]}),t?/* @__PURE__ */ (0,i.jsx)(`div`,{className:`gh-desc`,children:t}):null]}),/* @__PURE__ */ (0,i.jsx)(`div`,{className:`gh-control`,children:n})]})}function g({state:e,label:t}){return/* @__PURE__ */ (0,i.jsxs)(`span`,{className:`gh-badge gh-badge-`+e,children:[/* @__PURE__ */ (0,i.jsx)(`span`,{className:`gh-dot`}),t]})}function _(e,t){let n={};return t===null||(e.appId!==t.appId&&(n.appId=e.appId),e.installationId!==t.installationId&&(n.installationId=e.installationId),e.gitUserName!==t.gitUserName&&(n.gitUserName=e.gitUserName),e.gitUserEmail!==t.gitUserEmail&&(n.gitUserEmail=e.gitUserEmail)),n}function re(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let e=String(r.result||``);t(e.includes(`,`)?e.split(`,`)[1]:e)},r.onerror=()=>n(r.error||/* @__PURE__ */ Error(`File read failed`)),r.readAsDataURL(e)})}function v(){let[e,t]=(0,r.useState)(!0),[n,c]=(0,r.useState)(!1),[l,u]=(0,r.useState)(null),[d,v]=(0,r.useState)(null),[y,b]=(0,r.useState)(``),[x,S]=(0,r.useState)(``),[C,w]=(0,r.useState)(``),[T,E]=(0,r.useState)(``),[D,O]=(0,r.useState)(``),k=(0,r.useRef)(!1),A=(0,r.useRef)(null);function j(){return{appId:y,installationId:x,gitUserName:C,gitUserEmail:T}}async function M(){try{let e=await s(`status`),t=e&&e.config,n=e&&e.gitIdentity,r={appId:t&&t.appId||``,installationId:t&&t.installationId||``,gitUserName:t&&t.gitUserName||n&&n.name||``,gitUserEmail:t&&t.gitUserEmail||n&&n.email||``};v(e),b(r.appId),S(r.installationId),w(r.gitUserName),E(r.gitUserEmail),A.current=r,k.current=!0}catch(e){u({kind:`error`,text:f(e,`Failed to load status.`)})}finally{t(!1)}}(0,r.useEffect)(()=>{M()},[]),(0,r.useEffect)(()=>{let e=A.current;if(!k.current||e===null)return;let t=_(j(),e);if(Object.keys(t).length===0)return;let n=setTimeout(async()=>{try{await s(`saveConfig`,t),A.current={...e,...t}}catch(e){u({kind:`error`,text:f(e,`Save failed.`)})}},600);return()=>clearTimeout(n)},[y,x,C,T]);async function ie(){let e=A.current;if(e===null)return;let t=_(j(),e);Object.keys(t).length!==0&&(await s(`saveConfig`,t),A.current={...e,...t})}async function N(e){c(!0),u(null);try{await e(),await M()}catch(e){u({kind:`error`,text:f(e,`Action failed.`)})}finally{c(!1)}}async function ae(){await N(async()=>{let e=await s(`installGh`);if(e&&e.install&&e.install.ok===!1)throw Error(e.install.error||`Install failed.`);u({kind:`success`,text:`Missing components installed.`})})}function P(){let e=a(D);return e===null||(u({kind:`error`,text:e}),!1)}async function F(e){let t=e.target.files&&e.target.files[0];t&&(P()&&await N(async()=>{let e=await re(t);await s(`saveConfig`,{..._(j(),A.current),pemBase64:e,pemFileName:t.name,passphrase:D}),u({kind:`success`,text:`Private key uploaded and encrypted.`})}),e.target.value=``)}async function oe(){P()&&await N(async()=>{await ie();let e=await s(`connect`,{passphrase:D});if(e&&e.connect&&e.connect.ok===!1)throw Error(e.connect.error||`Connect failed.`);O(``),u({kind:`success`,text:`Connected.`})})}async function se(){await N(async()=>{await s(`disconnect`),O(``),u({kind:`success`,text:`Disconnected.`})})}if(e)return/* @__PURE__ */ (0,i.jsx)(`div`,{className:`gh-section`,children:/* @__PURE__ */ (0,i.jsx)(`div`,{className:`gh-loading`,children:`Loading…`})});let I=d?.gh??{installed:!1,version:null},L=d?.git??{installed:!1,version:null},R=d?.config??{hasKey:!1,keyFileName:null,appId:``,installationId:``,gitUserName:``,gitUserEmail:``},z=d?.auth??{loggedIn:!1,gitConfigured:!1},B=d?.token??null,V=I.installed&&L.installed,H=n||!V,U=n||!L.installed,W=B!==null&&Number.isFinite(B.ttlSeconds)?B.ttlSeconds:3600,G=B!==null&&Number.isFinite(B.issuedAt)?B.issuedAt:null,K=B!==null&&Number.isFinite(B.expiresAt)?B.expiresAt:null,ce=z.loggedIn?ee(K,G,W*1e3):null,q=`Ready`,J=`connected`;V||(q=`Install required`,J=`missing`);let Y=`Pending setup`,X=`pending`;z.loggedIn?(Y=`Connected`,X=`connected`):(R.hasKey||z.error)&&(Y=`Disconnected`,X=`missing`);let Z=`Authenticate GitHub CLI with a GitHub App`;!z.loggedIn&&z.error&&(Z+=`
|
|
2
|
+
`+z.error);let Q=null;V||(Q=/* @__PURE__ */ (0,i.jsx)(o,{disabled:n,onClick:ae,children:n?`Installing…`:`Install missing components`}));let $;return $=z.loggedIn?/* @__PURE__ */ (0,i.jsx)(o,{variant:`secondary`,disabled:n||!I.installed,onClick:se,children:n?`Disconnecting…`:`Disconnect`}):/* @__PURE__ */ (0,i.jsx)(o,{disabled:H||!R.hasKey||!y||!x,onClick:oe,children:n?`Connecting…`:`Connect`}),/* @__PURE__ */ (0,i.jsxs)(`div`,{className:`gh-section`,children:[/* @__PURE__ */ (0,i.jsx)(h,{title:`CLI status`,description:(I.installed?`GitHub version `+(I.version||`unknown`):`GitHub CLI is not installed`)+`
|
|
3
|
+
`+(L.installed?`Git version `+(L.version||`unknown`):`Git is not installed`),badge:/* @__PURE__ */ (0,i.jsx)(g,{state:J,label:q}),control:Q},`status`),/* @__PURE__ */ (0,i.jsx)(h,{title:`App ID`,description:`Your GitHub App ID`,control:/* @__PURE__ */ (0,i.jsx)(m,{value:y,disabled:H,onChange:b,placeholder:`123456`})},`appId`),/* @__PURE__ */ (0,i.jsx)(h,{title:`Installation ID`,description:`Your GitHub App installation ID`,control:/* @__PURE__ */ (0,i.jsx)(m,{value:x,disabled:H,onChange:S,placeholder:`12345678`})},`installationId`),/* @__PURE__ */ (0,i.jsx)(h,{title:`Git user name`,description:`Commit author name (git config --global user.name)`,control:/* @__PURE__ */ (0,i.jsx)(m,{value:C,disabled:U,onChange:w,placeholder:`Your Name`})},`gitUserName`),/* @__PURE__ */ (0,i.jsx)(h,{title:`Git user email`,description:`Commit author email (git config --global user.email)`,control:/* @__PURE__ */ (0,i.jsx)(m,{type:`email`,value:T,disabled:U,onChange:E,placeholder:`you@example.com`})},`gitUserEmail`),/* @__PURE__ */ (0,i.jsx)(h,{title:`Key passphrase`,description:`Encrypts the private key at rest. It is never stored and is required for upload and every connect.`,control:/* @__PURE__ */ (0,i.jsx)(m,{type:`password`,value:D,disabled:n,onChange:O,placeholder:`At least 8 characters`})},`passphrase`),/* @__PURE__ */ (0,i.jsx)(h,{title:`Private key (.pem)`,description:R.hasKey?`Key uploaded and encrypted`+(R.keyFileName?` (`+R.keyFileName+`)`:``):`Upload the GitHub App private key`,control:/* @__PURE__ */ (0,i.jsx)(p,{accept:`.pem`,disabled:H,onChange:F})},`key`),/* @__PURE__ */ (0,i.jsx)(h,{title:`Connection`,description:Z,badge:/* @__PURE__ */ (0,i.jsx)(g,{state:X,label:Y}),control:/* @__PURE__ */ (0,i.jsxs)(i.Fragment,{children:[/* @__PURE__ */ (0,i.jsx)(te,{expiresAt:ce,onExpired:M}),$]})},`actions`),l?/* @__PURE__ */ (0,i.jsx)(ne,{kind:l.kind,text:l.text}):null]})}let y=[`slots`];function b(e){d(`dsh-github-app`),e.slots.inject(`settings.section`,()=>e.slots.register({name:`settings.section`,id:`github`,order:40,label:`GitHub`},v))}return n.apply=b,n.inject=y,t.exports}});
|
package/icon.png
ADDED
|
Binary file
|
package/index.mjs
CHANGED
package/locale/en.json
ADDED
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-github-app",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "GitHub CLI (gh) integration for DSH: configure a GitHub App and authenticate gh for git operations.",
|
|
5
|
+
"icon": "./icon.png",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"main": "index.mjs",
|
|
7
8
|
"types": "index.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": "./index.mjs",
|
|
10
11
|
"./client": "./client/client.js",
|
|
12
|
+
"./locale/*.json": "./locale/*.json",
|
|
11
13
|
"./package.json": "./package.json"
|
|
12
14
|
},
|
|
13
15
|
"author": "Mikhail Lysikov <d8corp@mail.ru>",
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
(function() {
|
|
2
|
-
const env = { "INNETJS_CSS": ".gh-section{color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;font-size:14px;line-height:22px;width:100%}.gh-row{align-items:center;border-bottom:.5px solid var(--dsw-alias-border-l2);display:flex;gap:8px;padding:16px 0}.gh-row:last-of-type{border-bottom:none}.gh-text{flex:1;flex-direction:column;gap:4px;padding-right:48px}.gh-text,.gh-titleRow{display:flex;min-width:0}.gh-titleRow{align-items:center;flex-wrap:wrap;gap:8px}.gh-title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.gh-badge{align-items:center;border:.5px solid transparent;border-radius:999px;display:inline-flex;flex:none;font-size:11px;font-weight:500;gap:5px;line-height:17px;padding:1px 8px;white-space:nowrap}.gh-badge-missing{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.gh-badge-missing,.gh-badge-pending{background:var(--dsw-alias-bg-module-platform)}.gh-badge-pending{border-color:var(--dsw-alias-label-caption);color:var(--dsw-alias-label-secondary)}.gh-badge-connected{background:var(--dsw-alias-bg-module-platform);border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary)}.gh-dot{background:currentColor;border-radius:50%;flex:none;height:6px;width:6px}.gh-desc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px;white-space:pre-line}.gh-desc code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.gh-control{align-items:center;display:flex;flex:none;gap:8px;min-width:0}.gh-timer{box-sizing:border-box;color:var(--dsw-alias-label-primary);display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;font-variant-numeric:tabular-nums;line-height:22px;min-width:72px;text-align:right}.gh-timer-soon{color:var(--dsw-alias-state-warn-primary)}.gh-timer-expired{color:var(--dsw-alias-state-error-primary)}.gh-input{background:var(--dsw-alias-bg-module-platform);border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;height:36px;line-height:22px;max-width:320px;padding:0 14px}.gh-input:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-input:disabled{cursor:default;opacity:.5}.gh-input:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-button{align-items:center;border:none;border-radius:var(--dsw-radius-md);box-sizing:border-box;cursor:pointer;display:inline-flex;font:inherit;font-size:14px;gap:6px;height:36px;justify-content:center;line-height:22px;padding:0 14px;white-space:nowrap}.gh-button:disabled{cursor:default;opacity:.4}.gh-button:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:2px}.gh-primary{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font-weight:500}.gh-primary:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.gh-secondary{background:transparent;border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary)}.gh-secondary:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput{color:var(--dsw-alias-label-secondary);font-size:12px}.gh-fileInput::file-selector-button{align-items:center;background:transparent;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);box-sizing:border-box;color:var(--dsw-alias-label-primary);cursor:pointer;display:inline-flex;font:inherit;font-size:12px;height:28px;justify-content:center;line-height:18px;margin-right:8px;padding:0 10px;white-space:nowrap}.gh-fileInput::file-selector-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.gh-fileInput:disabled::file-selector-button{cursor:default;opacity:.4}.gh-notice{border-radius:var(--dsw-radius-md);font-size:12px;line-height:18px;margin:0;padding:8px 12px}.gh-notice-success{color:var(--dsw-alias-state-success-primary)}.gh-notice-error,.gh-notice-success{background:var(--dsw-alias-bg-module-platform)}.gh-notice-error{color:var(--dsw-alias-state-error-primary)}.gh-loading{border-bottom:.5px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;padding:16px 0}@media (max-width:640px){.gh-row{flex-wrap:wrap}.gh-text{flex-basis:100%;padding-right:0}.gh-control{align-items:stretch;width:100%}.gh-input{max-width:none;width:100%}}" };
|
|
3
|
-
if (typeof process === "undefined") globalThis.process = { env };
|
|
4
|
-
else if (process.env) Object.assign(process.env, env);
|
|
5
|
-
else process.env = env;
|
|
6
|
-
})();
|