UNPKG

@tycoonsystems/tycoon-modules

Version:
1 lines 13.6 kB
import React from"react";import{v4 as uuidv4}from"uuid";import Tooltip from"@mui/material/Tooltip";import AdminStyles from"./Admin.module.scss";import{fetchPost}from"@tycoonsystems/tycoon-modules/utility/fetch";const allowedTypes=["application/gzip","application/x-gzip","application/json"],Module=c=>{const[t,a]=React.useState(!1),[e,l]=React.useState(null),[n,r]=React.useState(null),[i,s]=React.useState(null),[o,u]=React.useState(null),[d,m]=React.useState(null),[p,f]=React.useState(null),[g,R]=React.useState(null),[h,y]=React.useState(null),[E,b]=React.useState(null),[v,w]=React.useState(null),[k,O]=React.useState(null),[_,D]=React.useState(null),[x,j]=React.useState(-1),P=React.useRef(),S=React.useRef(),B=React.useRef(),C=React.useRef(),N=React.useRef();var T=React.useRef();const I=T?.current?.value??c.apiUrl,z=(React.useEffect(()=>{var e;t||(e=uuidv4(),l(e),a(!0))},[t]),React.useEffect(()=>{-1===x&&!k&&I&&c.domainKey&&c._loggedIn&&(j((new Date).getTime()),z(I,c.domainKey,c._loggedIn))},[e,I,c.domainKey,c._loggedIn]),async(e,t,a)=>{if(a.identifier&&a.hash&&t){a={identifier:a.identifier,hash:a.hash,domainKey:t},t=await fetchPost(e+"/a/getpackages",null,null,a);if(t&&t.hasOwnProperty("status")){if("disauthenticated"==t.status)return logout(),"disauthenticated";if("failed"==t.status)return!1;if("success"==t.status&&t.data){console.log(t.data),t?.ssh&&D(t.ssh);e=t.data.toString();try{e&&JSON.parse(e)&&O(JSON.parse(e)),w(null)}catch(e){w("Failed to fetch packages")}return t}}}return!1}),U=async(t,a,l,n,i={})=>{if(r(null),l.identifier&&l.hash&&a){let e;c.setFetchBusy&&(c.setFetchBusy(!0),e=setTimeout(()=>{c.setFetchBusy(!1)},1e4)),(i?.uninstall?f:i?.npm_install?y:m)(null);l={identifier:l.identifier,hash:l.hash,username:l.username,domainKey:a,package:n,options:i},a=await fetchPost(t+"/a/installpackage",null,null,l);if(clearTimeout(e),c.setFetchBusy(!1),a&&a.hasOwnProperty("status")){if("disauthenticated"==a.status)return logout(),"disauthenticated";if("failed"==a.status)return a.data&&(i?.uninstall?f:i?.npm_install?y:m)(a.data),!1;if("success"==a.status&&a.data)return(i?.uninstall?f:i?.npm_install?y:m)(a.report??"done"),a}}return!1};var A=React.useCallback(l=>{try{if(console.log(l.target),r(null),l&&l.target&&l.target.files){var e=l.target.files;if(e&&0<e.length){const n=Array.from(e).slice(0,1<e.length?1:e.length).filter(e=>{console.log(e.type);e=e.type&&-1<allowedTypes.indexOf(e.type);return e||r("Some types that were uploaded were not allowed. Please check that you are uploading the appropriate types for any file upload"),e}).map(e=>{var t=e.slice(0,e.size,e.type);return new File([t],uuidv4()+".tar.gz",{type:e.type})});(async()=>{if(!c.fetchBusy&&I&&c.domainKey&&c._loggedIn){const a=new FormData;n&&n.forEach(e=>{a.append("file",e)}),a.append("domainKey",c.domainKey),a.append("hash",c._loggedIn.hash),a.append("identifier",c._loggedIn.identifier),c.setFetchBusy&&(c.setFetchBusy(!0),setTimeout(()=>{c.setFetchBusy(!1)},3e4));let e;var t=(e=l?.target?.getAttribute("modif")?l.target.getAttribute("modif"):e)&&"public"===e?await L(I,c.domainKey,c._loggedIn,a):e&&"package"===e?await W(I,c.domainKey,c._loggedIn,a):await M(I,c.domainKey,c._loggedIn,a);t&&(c.setFetchBusy&&c.setFetchBusy(!1),"success"===t.status)&&(e&&"public"===e?u:e&&"package"===e?R:s)(`Build Uploaded at ${(new Date).toDateString()} `+(new Date).toTimeString()),P.current&&(P.current.value="")}})()}}}catch(e){console.log(e),setWarning({message:"There was an issue uploading images"})}});const M=async(e,t,a,l)=>{if(a.identifier&&a.hash&&t){a=await fetchPost(e+"/a/uploadbuild",null,null,l,{formData:!0});if(a&&a.hasOwnProperty("status")){if("disauthenticated"==a.status)return logout(),"disauthenticated";if("failed"==a.status)return!1;if("success"==a.status)return a}}return!1},L=async(e,t,a,l)=>{if(a.identifier&&a.hash&&t){a=await fetchPost(e+"/a/uploadbuildpublic",null,null,l,{formData:!0});if(a&&a.hasOwnProperty("status")){if("disauthenticated"==a.status)return logout(),"disauthenticated";if("failed"==a.status)return!1;if("success"==a.status)return a}}return!1},W=async(e,t,a,l)=>{if(a.identifier&&a.hash&&t){a=await fetchPost(e+"/a/uploadbuildpackage",null,null,l,{formData:!0});if(a&&a.hasOwnProperty("status")){if("disauthenticated"==a.status)return logout(),"disauthenticated";if("failed"==a.status)return!1;if("success"==a.status)return a}}return!1};var F=React.useCallback(e=>{console.log(e.target),e?.target?.getAttribute("modif")?(e=e.target.getAttribute("modif"))&&("public"===e&&S.current?S.current.click():"package"===e&&B.current&&B.current.click()):P.current&&P.current.click()}),K=React.useCallback(e=>{console.log(e,I),e?.target?.getAttribute("modif")?(e=e.target.getAttribute("modif"))&&("uninstall"===e&&N?.current?.value?U(I,c.domainKey,c._loggedIn,N.current.value,{uninstall:!0}):"npm_install"===e&&U(I,c.domainKey,c._loggedIn,"all",{npm_install:!0})):C?.current?.value&&U(I,c.domainKey,c._loggedIn,C.current.value)});var H=React.useCallback(e=>{(async(t,a,l)=>{if(r(null),l.identifier&&l.hash&&a){let e;c.setFetchBusy&&(c.setFetchBusy(!0),e=setTimeout(()=>{c.setFetchBusy(!1)},1e4)),b(null);l={identifier:l.identifier,hash:l.hash,username:l.username,domainKey:a},a=await fetchPost(t+"/a/daemonbuild",null,null,l);if(clearTimeout(e),c.setFetchBusy(!1),a&&a.hasOwnProperty("status")){if("disauthenticated"==a.status)return!logout();if("failed"==a.status)return!b("Daemon Failed");if("success"==a.status&&a.data)return b("Attempted to Daemon Build. Refresh on another tab to check"),a}}})(I,c.domainKey,c._loggedIn)});React.useCallback(e=>{console.log(e)}),React.useCallback(e=>{console.log(e)});const J=React.useCallback(async e=>{if(c?._loggedIn.identifier&&c?._loggedIn.hash&&c.domainKey){var t,a,l,e=e?.target?.getAttribute("item"),n={identifier:c._loggedIn.identifier,hash:c._loggedIn.hash,domainKey:c.domainKey,dborigin:c.dborigin,item:e??null},n={method:"POST",cred:c.corsdefault,headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(n)},n=await fetch(c.apiUrl+"/a/downloadconfig",n);console.log(n);try{n?.ok&&(t=await n.blob(),a=window.URL.createObjectURL(t),(l=document.createElement("a")).href=a,l.download="rsa"===e?"id_rsa":"id_rsa.pub",document.body.appendChild(l),l.click(),l.remove())}catch(e){}}return!1});var V=c?.domainUrl?c.domainUrl.replace(/(?:www\.)?/,""):"";return React.createElement("div",{className:c.className+" Admin_Deploy_Container"},n?React.createElement("p",{className:"error",style:{marginTop:".5rem"},onClick:()=>{r(null)}},n):null,React.createElement("h3",null,"Deploy"),React.createElement("div",{className:"Admin_Deploy_InternalContainer"},React.createElement("section",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Working environment URL",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Environment")))),React.createElement("p",{className:"admin_prompt"},"Used for all API calls on this page only"),React.createElement("input",{type:"text",defaultValue:c?.apiUrl,ref:T})),React.createElement("section",null,React.createElement("input",{type:"file",style:{display:"none"},ref:P,onChange:A}),React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Upload your new build in .next.tar.gz format. Use makebuild script to create new build",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Push New Build")))),React.createElement("div",null,React.createElement("button",{onClick:F},"Upload Build"),i?React.createElement("div",{className:"admin_update"},i):null))),React.createElement("section",null,React.createElement("input",{type:"file",style:{display:"none"},ref:S,onChange:A,modif:"public"}),React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Upload your new public folder in public.tar.gz format. Use makebuild script to create public folder tar",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Push New Public Folder")))),React.createElement("div",null,React.createElement("button",{onClick:F,modif:"public"},"Upload Public Folder"),o?React.createElement("div",{className:"admin_update"},o):null))),React.createElement("section",null,React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Daemons current build uploaded to client server directory",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Run Build")))),React.createElement("p",{className:"admin_prompt"},"Caution: Running a bad build will bring down the platform immediately. Running new builds without having installed packages will cause the platform to be taken offline as well. This is temporary until platform at sys.",V," can be run to serve builds when ",c.domainUrl," is offline."),React.createElement("div",null,React.createElement("button",{onClick:H,modif:"public"},"Deploy Build"),E?React.createElement("div",{className:"admin_update"},E):null))),React.createElement("section",null,React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Currently installed Packages",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Installed Client Packages")))),React.createElement("div",{className:"admin_container",style:{maxHeight:"300px",overflow:"auto"}},k?.dependencies&&Object.entries(k.dependencies)?Object.entries(k.dependencies).map((e,t)=>React.createElement("div",{className:"flex gap-p5",key:t},React.createElement("div",null,e[0]),React.createElement("div",null,e[1]))):null),v)),React.createElement("section",null,React.createElement("input",{type:"file",style:{display:"none"},ref:B,onChange:A,modif:"package"}),React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Upload your new public folder in public.tar.gz format. Use makebuild script to create public folder tar",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Push New Package.json")))),React.createElement("div",null,React.createElement("button",{onClick:F,modif:"package"},"Upload Package.json"),g?React.createElement("div",{className:"admin_update"},g):null))),React.createElement("section",null,React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Run npm install with uploaded package.json file",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Run npm install")))),React.createElement("div",{className:AdminStyles.adminPair+" admin_pair"},React.createElement("button",{onClick:K,modif:"npm_install"},"Install")),h?React.createElement("div",{className:"admin_update"},h):null)),React.createElement("section",null,React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Install NPM Package here. Use Package@Version syntax for specific Version if required. Request must be approved by repo if package not already whitelisted",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Run Install")))),React.createElement("div",{className:AdminStyles.adminPair+" admin_pair"},React.createElement("input",{type:"text",placeholder:"NPM Package",ref:C}),React.createElement("button",{onClick:K},"Install")),d?React.createElement("div",{className:"admin_update"},d):null)),React.createElement("section",null,React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Will uninstall package referenced here. Ensure to upload new build before uninstalling packages that current build relies on. Otherwise platform will go down",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Run Uninstall")))),React.createElement("div",{className:AdminStyles.adminPair+" admin_pair"},React.createElement("input",{type:"text",placeholder:"NPM Package",ref:N}),React.createElement("button",{onClick:K,modif:"uninstall"},"Uninstall")),p?React.createElement("div",{className:"admin_update"},p):null)),React.createElement("section",null,React.createElement("div",null,React.createElement("div",{style:{width:"fit-content"}},React.createElement(Tooltip,{title:"Your SSH info for secure shell to web client and github actions",placement:"right"},React.createElement("div",{style:{marginBottom:".125rem"}},React.createElement("b",null,"Server SSH Info")))),_?React.createElement("div",{style:{background:"#1d1d1d",padding:".5rem"}},Object.entries(_).map(e=>React.createElement("div",{className:"flex gap-p2",style:{margin:".25rem 0"}},React.createElement("label",{style:{fontWeight:600,whiteSpace:"nowrap"}},e[0]?.toString?""+e[0].charAt(0).toUpperCase()+e[0].substring(1,e[0].length):""),-1<["rsa","rsaPub"].indexOf(e[0])?React.createElement("button",{onClick:J,item:e[0]},"Click to download"):e[0]?.toString&&e[0].toLowerCase().match("githubaction")?React.createElement("pre",{style:{margin:0}},e[1]):React.createElement("div",null,e[1])))):React.createElement("div",null,"Not generated")))))};export default Module;