harperdb 4.5.8 → 4.5.9
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/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +116 -124
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/build-local/asset-manifest.json +34 -34
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/164.a89f3fc2.chunk.js +1 -0
- package/studio/build-local/static/js/{101.de926db6.chunk.js → 504.6e6ee908.chunk.js} +2 -2
- package/studio/build-local/static/js/833.e460eaf4.chunk.js +1 -0
- package/studio/build-local/static/js/browse-csvupload.84fd1ae9.chunk.js +1 -0
- package/studio/build-local/static/js/browse-datatable.21e650e1.chunk.js +1 -0
- package/studio/build-local/static/js/browse-entitymanager.4547c0d8.chunk.js +1 -0
- package/studio/build-local/static/js/browse-jsonviewer.71355c20.chunk.js +1 -0
- package/studio/build-local/static/js/custom-functions.31d65bca.chunk.js +1 -0
- package/studio/build-local/static/js/instance-cluster.031dcced.chunk.js +1 -0
- package/studio/build-local/static/js/instance-config.9a23d6ae.chunk.js +1 -0
- package/studio/build-local/static/js/instance-logs.fdaf96ec.chunk.js +1 -0
- package/studio/build-local/static/js/instance-roles.984ced56.chunk.js +1 -0
- package/studio/build-local/static/js/{instance-status.2f3aaaf7.chunk.js → instance-status.192a5e2f.chunk.js} +1 -1
- package/studio/build-local/static/js/instance-users-datatable.40846e47.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users-edit.f10344c8.chunk.js +1 -0
- package/studio/build-local/static/js/instance-users.adc43a74.chunk.js +1 -0
- package/studio/build-local/static/js/instance.9689d62b.chunk.js +1 -0
- package/studio/build-local/static/js/instances.f28e5ce7.chunk.js +1 -0
- package/studio/build-local/static/js/{main.44262b30.js → main.491129ee.js} +2 -2
- package/studio/build-local/static/js/offline-app.5bc1159b.chunk.js +1 -0
- package/studio/build-local/static/js/online-app.22102869.chunk.js +1 -0
- package/studio/build-local/static/js/organization-billing.56e7e051.chunk.js +1 -0
- package/studio/build-local/static/js/organization-users.b46b9e8f.chunk.js +1 -0
- package/studio/build-local/static/js/organization.eab64d57.chunk.js +1 -0
- package/studio/build-local/static/js/organizations.4567ae59.chunk.js +1 -0
- package/studio/build-local/static/js/profile.d45cd6b3.chunk.js +1 -0
- package/studio/build-local/static/js/resetPassword.812fc880.chunk.js +1 -0
- package/studio/build-local/static/js/roles-jsonviewer.73c8bb9d.chunk.js +1 -0
- package/studio/build-local/static/js/signIn.32766fa9.chunk.js +1 -0
- package/studio/build-local/static/js/signUp.07fd6662.chunk.js +1 -0
- package/studio/build-local/static/js/structure-reloader.ce2b39d2.chunk.js +1 -0
- package/studio/build-local/static/js/topnav.e661156c.chunk.js +1 -0
- package/studio/build-local/static/js/updatePassword.dcac970c.chunk.js +1 -0
- package/utility/scripts/restartHdb.js +1 -1
- package/studio/build-local/static/js/164.13a1ca36.chunk.js +0 -1
- package/studio/build-local/static/js/833.475ee615.chunk.js +0 -1
- package/studio/build-local/static/js/browse-csvupload.cfcf1c79.chunk.js +0 -1
- package/studio/build-local/static/js/browse-datatable.85de5169.chunk.js +0 -1
- package/studio/build-local/static/js/browse-entitymanager.dddb5da8.chunk.js +0 -1
- package/studio/build-local/static/js/browse-jsonviewer.059b4189.chunk.js +0 -1
- package/studio/build-local/static/js/custom-functions.2c2e634c.chunk.js +0 -1
- package/studio/build-local/static/js/instance-cluster.daef89d8.chunk.js +0 -1
- package/studio/build-local/static/js/instance-config.ba645bea.chunk.js +0 -1
- package/studio/build-local/static/js/instance-logs.33ace406.chunk.js +0 -1
- package/studio/build-local/static/js/instance-roles.0276d83f.chunk.js +0 -1
- package/studio/build-local/static/js/instance-users-datatable.f75cf637.chunk.js +0 -1
- package/studio/build-local/static/js/instance-users-edit.3a3bc76f.chunk.js +0 -1
- package/studio/build-local/static/js/instance-users.70ee5db2.chunk.js +0 -1
- package/studio/build-local/static/js/instance.0bbb9d0e.chunk.js +0 -1
- package/studio/build-local/static/js/instances.e86d288b.chunk.js +0 -1
- package/studio/build-local/static/js/offline-app.edb4be85.chunk.js +0 -1
- package/studio/build-local/static/js/online-app.45440c0e.chunk.js +0 -1
- package/studio/build-local/static/js/organization-billing.3ff0b995.chunk.js +0 -1
- package/studio/build-local/static/js/organization-users.710f96e7.chunk.js +0 -1
- package/studio/build-local/static/js/organization.1aa3da8e.chunk.js +0 -1
- package/studio/build-local/static/js/organizations.259e09d3.chunk.js +0 -1
- package/studio/build-local/static/js/profile.c1840496.chunk.js +0 -1
- package/studio/build-local/static/js/resetPassword.37769fbe.chunk.js +0 -1
- package/studio/build-local/static/js/roles-jsonviewer.b8cc0628.chunk.js +0 -1
- package/studio/build-local/static/js/signIn.061b438e.chunk.js +0 -1
- package/studio/build-local/static/js/signUp.cabe1d80.chunk.js +0 -1
- package/studio/build-local/static/js/structure-reloader.fd360bad.chunk.js +0 -1
- package/studio/build-local/static/js/topnav.1fce7836.chunk.js +0 -1
- package/studio/build-local/static/js/updatePassword.dc41627a.chunk.js +0 -1
- /package/studio/build-local/static/js/{101.de926db6.chunk.js.LICENSE.txt → 504.6e6ee908.chunk.js.LICENSE.txt} +0 -0
- /package/studio/build-local/static/js/{main.44262b30.js.LICENSE.txt → main.491129ee.js.LICENSE.txt} +0 -0
|
@@ -24,7 +24,7 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
|
|
|
24
24
|
`)}catch(r){r.code==="ENOENT"?Xr.debug("no license file found"):Xr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(ice.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=XG(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Xr.error("There was an error parsing the license string."),Xr.error(s),e.ram_allocation=sl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return bN=e,e}a(IN,"licenseSearch");async function pce(){return bN||await IN(),bN}a(pce,"getLicense");function Ece(){let e=IN().ram_allocation,t=process.constrainedMemory?.()||zG();if(t=Math.round(Math.min(t,zG())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(Ece,"checkMemoryLimit")});var DN=P((WCe,nq)=>{var xg=Xu(),eq=require("chalk"),zn=j(),tq=require("prompt"),{promisify:gce}=require("util"),CN=(H(),D($)),Sce=require("fs-extra"),Tce=require("path"),Ace=oe(),{packageJson:Rce}=pt(),rq=ue();rq.initSync();var yce=require("moment"),bce=gce(tq.get),Oce=Tce.join(rq.getHdbBasePath(),CN.LICENSE_KEY_DIR_NAME,CN.LICENSE_FILE_NAME,CN.LICENSE_FILE_NAME);nq.exports={getFingerprint:wce,setLicense:Nce,parseLicense:PN,register:Ice,getRegistrationInfo:Pce};async function Nce(e){if(e&&e.key&&e.company){try{zn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await PN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw zn.error(r),zn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Nce,"setLicense");async function wce(){let e={};try{e=await xg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw zn.error(r),zn.error(t),new Error(r)}return e}a(wce,"getFingerprint");async function PN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");zn.info("Validating license input...");let r=xg.validateLicense(e,t);if(zn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(zn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(zn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{zn.info("writing license to disk"),await Sce.writeFile(Oce,JSON.stringify({license_key:e,company:t}))}catch(n){throw zn.error("Failed to write License"),n}return"Registration successful."}a(PN,"parseLicense");async function Ice(){let e=await Cce();return PN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Ice,"register");async function Cce(){let e=await xg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:eq.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:eq.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{tq.start()}catch(n){zn.error(n)}let r;try{r=await bce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Cce,"promptForRegistration");async function Pce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await xg.getLicense()}catch(r){throw zn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Ace.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Rce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=yce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Pce,"getRegistrationInfo")});var iq=P((QCe,sq)=>{"use strict";var Dce=It(),LN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,_,h,m){this.port=t,o===null&&(o=void 0),this.server_name=r+Dce.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:h},HDB:{users:m}},this.system_account="SYS"}};sq.exports=LN});var cq=P((JCe,aq)=>{"use strict";var oq=It(),MN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+oq.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+oq.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};aq.exports=MN});var uq=P((ZCe,lq)=>{"use strict";var vN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};lq.exports=vN});var fq=P((tPe,dq)=>{"use strict";var Lce=It(),UN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Lce.SERVER_SUFFIX.ADMIN,this.password=r}};dq.exports=UN});var Fg=P((nPe,mq)=>{"use strict";var il=require("path"),ol=require("fs-extra"),Mce=iq(),vce=cq(),Uce=uq(),xce=fq(),xN=Gn(),ed=oe(),yn=Ot(),Hg=(H(),D($)),sh=It(),{CONFIG_PARAMS:Yt}=Hg,td=j(),ih=ue(),_q=io(),BN=Er(),Bce=Qs(),Zu="clustering",Hce=1e4,hq=50;mq.exports={generateNatsConfig:Fce,removeNatsConfig:Gce,getHubConfigPath:kce};function kce(){let e=ih.get(Yt.ROOTPATH);return il.join(e,Zu,sh.NATS_CONFIG_FILES.HUB_SERVER)}a(kce,"getHubConfigPath");async function Fce(e=!1,t=void 0){let r=ih.get(Yt.ROOTPATH);ol.ensureDirSync(il.join(r,"clustering","leaf")),ih.initSync();let n=yn.getConfigFromFile(Yt.CLUSTERING_TLS_CERT_AUTH),s=yn.getConfigFromFile(Yt.CLUSTERING_TLS_PRIVATEKEY),i=yn.getConfigFromFile(Yt.CLUSTERING_TLS_CERTIFICATE);!await ol.exists(i)&&!await ol.exists(!n)&&await Bce.createNatsCerts();let o=il.join(r,Zu,sh.PID_FILES.HUB),c=il.join(r,Zu,sh.PID_FILES.LEAF),l=yn.getConfigFromFile(Yt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=il.join(r,Zu,sh.NATS_CONFIG_FILES.HUB_SERVER),f=il.join(r,Zu,sh.NATS_CONFIG_FILES.LEAF_SERVER),d=yn.getConfigFromFile(Yt.CLUSTERING_TLS_INSECURE),_=yn.getConfigFromFile(Yt.CLUSTERING_TLS_VERIFY),h=yn.getConfigFromFile(Yt.CLUSTERING_NODENAME),m=yn.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await BN.checkNATSServerInstalled()||kg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await xN.listUsers(),g=yn.getConfigFromFile(Yt.CLUSTERING_USER),R=await xN.getClusterUser();(ed.isEmpty(R)||R.active!==!0)&&kg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Bg(Yt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Bg(Yt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Bg(Yt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Bg(Yt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],T=[];for(let[ie,W]of S.entries())W.role?.role===Hg.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(E.push(new xce(W.username,_q.decrypt(W.hash))),T.push(new Uce(W.username,_q.decrypt(W.hash))));let N=[],{hub_routes:v}=yn.getClusteringRoutes();if(!ed.isEmptyOrZeroLength(v))for(let ie of v)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${ie.host}:${ie.port}`);let k=new Mce(yn.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_NETWORK_PORT),h,o,i,s,n,d,_,m,yn.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yn.getConfigFromFile(Yt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,E,T);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=ed.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Hg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ol.writeJson(u,k),td.trace(`Hub server config written to ${u}`));let G=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${m}`,Y=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${m}`,X=new vce(yn.getConfigFromFile(Yt.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[G],[Y],E,T,i,s,n,d);n==null&&delete X.tls.ca_file,(t===void 0||t===Hg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ol.writeJson(f,X),td.trace(`Leaf server config written to ${f}`))}a(Fce,"generateNatsConfig");async function Bg(e){let t=ih.get(e);return ed.isEmpty(t)&&kg(`port undefined for '${e}'`),await ed.isPortTaken(t)&&kg(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(Bg,"isPortAvailable");function kg(e){let t=`Error generating clustering config: ${e}`;td.error(t),console.error(t),process.exit(1)}a(kg,"generateNatsConfigError");async function Gce(e){let{port:t,config_file:r}=BN.getServerConfig(e),{username:n,decrypt_hash:s}=await xN.getClusterUser(),i=0,o=2e3;for(;i<hq;){try{let f=await BN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){td.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=hq)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&td.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ed.async_set_timeout(u)}let c="0".repeat(Hce),l=il.join(ih.get(Yt.ROOTPATH),Zu,r);await ol.writeFile(l,c),await ol.remove(l),td.notify(e,"started.")}a(Gce,"removeNatsConfig")});var FN={};Ue(FN,{compactOnStart:()=>qce,copyDb:()=>Aq});async function qce(){Na.notify("Running compact on start"),console.log("Running compact on start");let e=(0,HN.get)(U.ROOTPATH),t=new Map,r=Xe();(0,kN.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Gg.join)(e,"backup",n+".mdb"),o=(0,Gg.join)(e,tc,n+"-copy.mdb"),c=0;try{c=await pq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Na.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Aq(n,o),console.log("Backing up",n,"to",i),await(0,al.move)(s,i,{overwrite:!0})}try{rd()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,al.move)(i,s,{overwrite:!0}),await(0,al.remove)((0,Gg.join)(e,tc,`${n}-copy.mdb-lock`));try{rd()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Na.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,kN.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,al.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw rd(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await pq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
25
25
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
26
26
|
Database backup has not been removed and can be found here: ${s}`;Na.error(l),console.error(l)}(0,HN.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,al.remove)(s))}}async function pq(e){let t=await(0,Tq.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Aq(e,t){console.log("copyDb start");let r=Xe()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,Eq.open)(new gq.default(t)),c=o.openDB(qg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:_,value:h}of s.getRange({transaction:f})){let m=h.is_hash_attribute||h.isPrimaryKey,S,g;if(m&&(S=h.compression,g=$g(),g?h.compression=g:delete h.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(_,h),!(m||h.indexed))continue;let R=new Sq.default(!m,m);R.encoding="binary",R.compression=S;let E=n.openDB(_,R);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",R.compression=g;let T=o.openDB(_,R);T.encoder=null,console.log("copying",_,"from",e,"to",t),await d(E,T,m,f)}if(i){let _=n.openDB(qg.AUDIT_STORE_NAME,oh);console.log("copying audit log for",e,"to",t),d(i,_,!1,f)}async function d(_,h,m,S){let g=0,R=0,E=1e7,T=null;for(;E-- >0;)try{for(let N of _.getKeys({start:T,transaction:S}))try{T=N;let{value:v,version:k}=_.getEntry(N,{transaction:S});l=h.put(N,v,m?k:void 0),g++,S.openTimer&&(S.openTimer=0),R+=(N?.length||10)+v.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(v){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,v)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof T=="string"){if(T==="z")return console.error("Reached end of dbi",T,"for",e,"to",t);T=T.slice(0,-2)+"z"}else if(typeof T=="number")T++;else return console.error("Unknown key type",T,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var Eq,Gg,al,HN,gq,Sq,qg,Tq,kN,Na,GN=ye(()=>{Me();Eq=require("lmdb"),Gg=require("path"),al=require("fs-extra"),HN=M(ue()),gq=M(Lf()),Sq=M(Df()),qg=M(Ut());H();eo();Tq=M(oo()),kN=M(Ot()),Na=M(j());a(qce,"compactOnStart");a(pq,"getTotalDBRecordCount");a(Aq,"copyDb")});var sd=P((fPe,Iq)=>{"use strict";var $ce=require("minimist"),{isMainThread:$N,parentPort:ch,threadId:lPe}=require("worker_threads"),nt=(H(),D($)),Pi=j(),VN=oe(),Kg=Fg(),Vg=Er(),uPe=It(),Oq=Ot(),Js=id(),Rq=Yu(),{compactOnStart:Vce}=(GN(),D(FN)),Kce=rc(),{restartWorkers:Yg,onMessageByType:Yce}=rt(),{handleHDBError:Wce,hdb_errors:zce}=me(),{HTTP_STATUS_CODES:Qce}=zce,lh=ue(),{sendOperationToNode:yq,getThisNodeName:jce,monitorNodeCAs:Jce}=(ds(),D(Ea)),{getHDBNodeTable:dPe}=(Kc(),D(sO));lh.initSync();var ah=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,Xce="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",bq="Clustering is not enabled so cannot be restarted",Zce="Invalid service",nd,Es;Iq.exports={restart:Nq,restartService:KN};$N&&Yce(nt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await KN({service:e.workerType}):Nq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Nq(e){Es=Object.keys(e).length===0,nd=await Js.isServiceRegistered(nt.PROCESS_DESCRIPTORS.HDB);let t=$ce(process.argv);if(t.service){await KN(t);return}if(Es&&!nd){console.error(Xce);return}if(Es&&console.log(ah),nd){Js.enterPM2Mode(),Pi.notify(ah);let r=Kce(Object.keys(nt.CONFIG_PARAM_MAP),!0);return VN.isEmptyOrZeroLength(Object.keys(r))||Oq.updateConfigValue(void 0,void 0,r,!0,!0),ele(),ah}return $N?(Pi.notify(ah),lh.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Vce(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{Yg()},50)):ch.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),ah}a(Nq,"restart");async function KN(e){let{service:t}=e;if(nt.HDB_PROCESS_SERVICES[t]===void 0)throw Wce(new Error,Zce,Qce.BAD_REQUEST,void 0,void 0,!0);if(Js.expectedRestartOfChildren(),nd=await Js.isServiceRegistered(nt.PROCESS_DESCRIPTORS.HDB),!$N){e.replicated&&Jce(),ch.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),ch.ref(),await new Promise(s=>{ch.on("message",i=>{i.type==="restart-complete"&&(s(),ch.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===jce())continue;let i;try{({job_id:i}=await yq(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let h=new Error("Timed out waiting for restart job to complete");h.replicated=n,c(h)}let _=(await yq(s,{operation:"get_job",id:i})).results[0];if(_.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:_.message})),_.status==="ERROR"){clearInterval(f);let h=new Error(_.message);h.replicated=n,c(h)}},250)}))}return{replicated:n}}return}let r;switch(t){case nt.HDB_PROCESS_SERVICES.clustering:if(!lh.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bq;break}Es&&console.log("Restarting clustering"),Pi.notify("Restarting clustering"),await wq();break;case nt.HDB_PROCESS_SERVICES.clustering_config:case nt.HDB_PROCESS_SERVICES["clustering config"]:if(!lh.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bq;break}Es&&console.log("Restarting clustering_config"),Pi.notify("Restarting clustering_config"),await Js.reloadClustering();break;case"custom_functions":case"custom functions":case nt.HDB_PROCESS_SERVICES.harperdb:case nt.HDB_PROCESS_SERVICES.http_workers:case nt.HDB_PROCESS_SERVICES.http:if(Es&&!nd){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Es&&console.log("Restarting http_workers"),Pi.notify("Restarting http_workers"),Es?await Js.restart(nt.PROCESS_DESCRIPTORS.HDB):await Yg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Pi.error(r),Es&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(KN,"restartService");async function ele(){await wq(),await Js.restart(nt.PROCESS_DESCRIPTORS.HDB),await VN.async_set_timeout(2e3),lh.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await qN(),Es&&(await Vg.closeConnection(),process.exit(0))}a(ele,"restartPM2Mode");async function wq(){if(!Oq.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await Rq.getHDBProcessInfo()).clustering.length===0)Pi.trace("Clustering not running, restart will start clustering services"),await Kg.generateNatsConfig(!0),await Js.startClusteringProcesses(),await Js.startClusteringThreads(),await qN(),Es&&await Vg.closeConnection();else{await Kg.generateNatsConfig(!0),nd?(Pi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Js.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Js.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await Rq.getHDBProcessInfo()).clustering.forEach(s=>{Pi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await VN.async_set_timeout(3e3),await qN(),await Vg.updateLocalStreams(),Es&&await Vg.closeConnection(),Pi.trace("Restart clustering restarting ingest and reply service threads");let t=Yg(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Yg(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wq,"restartClustering");async function qN(){await Kg.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Kg.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(qN,"removeNatsConfig")});var kq=P((mPe,Hq)=>{"use strict";var hPe=require("lodash"),bn=(H(),D($)),{handleHDBError:Cq,hdb_errors:tle}=me(),{HDB_ERROR_MSGS:rle,HTTP_STATUS_CODES:nle}=tle,YN=j();Hq.exports={getRolePermissions:ile};var cl=Object.create(null),sle=a(e=>({key:e,perms:{}}),"perms_template_obj"),Mq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),vq=a((e=!1,t=!1,r=!1,n=!1)=>({[bn.PERMS_CRUD_ENUM.READ]:e,[bn.PERMS_CRUD_ENUM.INSERT]:t,[bn.PERMS_CRUD_ENUM.UPDATE]:r,[bn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),WN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...vq(t,r,n,s)}),"table_perms_template"),Pq=a((e,t=vq())=>({attribute_name:e,describe:Bq(t),[uh]:t[uh],[zN]:t[zN],[QN]:t[QN]}),"attr_perms_template"),Dq=a((e,t=!1)=>({attribute_name:e,describe:t,[uh]:t}),"timestamp_attr_perms_template"),{READ:uh,INSERT:zN,UPDATE:QN}=bn.PERMS_CRUD_ENUM,Uq=Object.values(bn.PERMS_CRUD_ENUM),xq=[uh,zN,QN];function ile(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[bn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(cl[t]&&cl[t].key===n)return cl[t].perms;let s=ole(e,r);return cl[t]?cl[t].key=n:cl[t]=sle(n),cl[t].perms=s,s}catch(r){if(!e[bn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[bn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<bn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw YN.error(n),YN.debug(r),Cq(new Error,rle.OUTDATED_PERMS_TRANSLATION_ERROR,nle.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
27
|
-
${r.stack}`;throw YN.error(n),Cq(new Error)}}}a(ile,"getRolePermissions");function ole(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[bn.SYSTEM_SCHEMA_NAME]=n[bn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=ale(t[i]);return}r[i]=Mq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=cle(c,l);r[i].describe||Uq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=WN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=WN()})}),r}a(ole,"translateRolePermissions");function ale(e){let t=Mq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=WN(!0,!0,!0,!0,!0)}),t}a(ale,"createStructureUserPermissions");function cle(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,_=f;return bn.TIME_STAMP_NAMES.includes(d)&&(_=Dq(d,f[uh])),u[d]=_,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Pq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=Bq(f),s.attribute_permissions.push(f),c||lle(f,l)}else if(u!==o){let f;bn.TIME_STAMP_NAMES.includes(u)?f=Dq(u):f=Pq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Lq(s),s}else return e.describe=Lq(e),e}a(cle,"getTableAttrPerms");function Lq(e){return Uq.filter(t=>e[t]).length>0}a(Lq,"getSchemaTableDescribePerm");function Bq(e){return xq.filter(t=>e[t]).length>0}a(Bq,"getAttributeDescribePerm");function lle(e,t){xq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(lle,"checkForHashPerms")});var dh={};Ue(dh,{authentication:()=>Yq,bypassAuth:()=>Ele,login:()=>Sle,logout:()=>Tle,start:()=>gle});function Ele(){Kq=!0}async function Yq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let h=e.isOperationsServer?_le?fle:[]:dle?ule:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let m=Zr.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new fo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",m],["Access-Control-Allow-Origin",i]]);return Wg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),Wg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Wg){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",m=s?.split(/;\s+/)||[];for(let S of m)if(S.startsWith(h)){let g=S.indexOf(";");l=S.slice(h.length,g===-1?S.length:g),u=await Fq.get(l);break}e.session=u||(u={})}let f=a((h,m,S)=>{let g=new od.AuthAuditLog(h,m,$o.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),m===Ds.SUCCESS?jN.notify(g):jN.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&jN.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await ze.getUser(h,null,e),f(h,Ds.SUCCESS,"mTLS")):(0,od.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=ll.get(n),!d){let h=n.indexOf(" "),m=n.slice(0,h),S=n.slice(h+1),g,R;try{switch(m){case"Basic":let E=atob(S),T=E.indexOf(":");g=E.slice(0,T),R=E.slice(T+1),d=g||R?await ze.getUser(g,R,e):null;break;case"Bearer":try{d=await Ub(S)}catch(N){if(N.message==="invalid token")try{return await DE(S),c({status:-1})}catch{throw N}}break}}catch(E){return mle&&(ll.get(S)||(ll.set(S,S),f(g,Ds.FAILURE,m))),c({status:401,body:ra({error:E.message},e)})}ll.set(n,d),hle&&f(d.username,Ds.SUCCESS,m)}e.user=d}else u?.user?e.user=await ze.getUser(u.user,null,e):(Kq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,qq.getSuperUser)());Wg&&(e.session.update=function(h){let m=Zr.get(U.AUTHENTICATION_COOKIE_EXPIRES);if(!l){l=(0,$q.v4)();let S=Zr.get(U.AUTHENTICATION_COOKIE_DOMAINS),g=m?new Date(Date.now()+(0,JN.convertToMS)(m)).toUTCString():ple,R=S?.find(N=>r.host?.endsWith(N)),T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${g}; ${R?"Domain="+R+"; ":""}HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):_?.headers?.set&&_.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):_?.headers?.set&&(i&&_.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),_.headers.set("X-Hdb-Session","Secure"))),h.id=l,Fq.put(h,{expiresAt:m?Date.now()+(0,JN.convertToMS)(m):void 0})},e.login=async function(h,m){let S=e.user=await ze.authenticateUser(h,m,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let _=await t(e);return _&&(_.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&fi.loginPath?(_.status=302,_.headers.set("Location",fi.loginPath(e))):_.headers.set("WWW-Authenticate","Basic")),c(_))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new fo);for(let d=0;d<u;){let _=o[d++];f.set(_,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function gle({server:e,port:t,securePort:r}){e.http(Yq,t||r?{port:t,securePort:r}:{port:"all"}),Gq||(Gq=!0,setInterval(()=>{ll=new Map},Zr.get(U.AUTHENTICATION_CACHETTL)).unref(),Vq.user.addListener(()=>{ll=new Map}))}async function Sle(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password??""),"Login successful"}async function Tle(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var qq,$q,Zr,od,Vq,JN,jN,ule,dle,fle,_le,Fq,Wg,Kq,hle,mle,ple,ll,Gq,zg=ye(()=>{qq=M(Gn());qr();jl();yu();Me();$q=require("uuid"),Zr=M(ue());H();od=M(j()),Vq=M(Qf());S_();JN=M(oe());ji();jN=(0,od.loggerWithTag)("auth-event");Zr.initSync();ule=Zr.get(U.HTTP_CORSACCESSLIST),dle=Zr.get(U.HTTP_CORS),fle=Zr.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),_le=Zr.get(U.OPERATIONSAPI_NETWORK_CORS),Fq=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Wg=Zr.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,Kq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Zr.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,hle=Zr.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,mle=Zr.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ple="Tue, 01 Oct 8307 19:33:20 GMT",ll=new Map;ze.onInvalidatedUser(()=>{ll=new Map});a(Ele,"bypassAuth");a(Yq,"authentication");a(gle,"start");a(Sle,"login");a(Tle,"logout")});var Zq=P((OPe,Xq)=>{"use strict";var Ne=require("joi"),Wq=require("fs-extra"),zq=require("path"),Qn=tt(),Qq=ue(),jq=(H(),D($)),Jq=j(),{hdb_errors:Ale}=me(),{HDB_ERROR_MSGS:en}=Ale,Ao=/^[a-zA-Z0-9-_]+$/,Rle=/^[a-zA-Z0-9-_]+$/;Xq.exports={getDropCustomFunctionValidator:ble,setCustomFunctionValidator:Ole,addComponentValidator:Cle,dropCustomFunctionProjectValidator:Ple,packageComponentValidator:Dle,deployComponentValidator:Lle,setComponentFileValidator:Nle,getComponentFileValidator:Ile,dropComponentFileValidator:wle,addSSHKeyValidator:Mle,updateSSHKeyValidator:vle,deleteSSHKeyValidator:Ule,setSSHKnownHostsValidator:xle};function Qg(e,t,r){try{let n=Qq.get(jq.CONFIG_PARAMS.COMPONENTSROOT),s=zq.join(n,t);return Wq.existsSync(s)?e?t:r.message(en.PROJECT_EXISTS):e?r.message(en.NO_PROJECT):t}catch(n){return Jq.error(n),r.message(en.VALIDATION_ERR)}}a(Qg,"checkProjectExists");function fh(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(fh,"checkFilePath");function yle(e,t,r,n){try{let s=Qq.get(jq.CONFIG_PARAMS.COMPONENTSROOT),i=zq.join(s,e,t,r+".js");return Wq.existsSync(i)?r:n.message(en.NO_FILE)}catch(s){return Jq.error(s),n.message(en.VALIDATION_ERR)}}a(yle,"checkFileExists");function ble(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Ao).custom(yle.bind(null,e.project,e.type)).custom(fh).required().messages({"string.pattern.base":en.BAD_FILE_NAME})});return Qn.validateBySchema(e,t)}a(ble,"getDropCustomFunctionValidator");function Ole(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(fh).required(),function_content:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Ole,"setCustomFunctionValidator");function Nle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),file:Ne.string().custom(fh).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Nle,"setComponentFileValidator");function wle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),file:Ne.string().custom(fh).optional()});return Qn.validateBySchema(e,t)}a(wle,"dropComponentFileValidator");function Ile(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(fh).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Ile,"getComponentFileValidator");function Cle(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!1)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(Cle,"addComponentValidator");function Ple(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(Ple,"dropCustomFunctionProjectValidator");function Dle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Qn.validateBySchema(e,t)}a(Dle,"packageComponentValidator");function Lle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Qn.validateBySchema(e,t)}a(Lle,"deployComponentValidator");function Mle(e){let t=Ne.object({name:Ne.string().pattern(Rle).required().messages({"string.pattern.base":en.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Qn.validateBySchema(e,t)}a(Mle,"addSSHKeyValidator");function vle(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Qn.validateBySchema(e,t)}a(vle,"updateSSHKeyValidator");function Ule(e){let t=Ne.object({name:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Ule,"deleteSSHKeyValidator");function xle(e){let t=Ne.object({known_hosts:Ne.string().required()});return Qn.validateBySchema(e,t)}a(xle,"setSSHKnownHostsValidator")});var mh=P((wPe,s$)=>{"use strict";var jg=require("joi"),wa=require("path"),ad=require("fs-extra"),{exec:Ble,spawn:Hle}=require("child_process"),kle=require("util"),Fle=kle.promisify(Ble),cd=(H(),D($)),{PACKAGE_ROOT:Gle}=pt(),{handleHDBError:_h,hdb_errors:qle}=me(),{HTTP_STATUS_CODES:hh}=qle,ul=ue(),$le=tt(),Ia=j(),{once:Vle}=require("events");ul.initSync();var XN=ul.get(cd.CONFIG_PARAMS.COMPONENTSROOT),e$="npm install --force --omit=dev --json",Kle=`${e$} --dry-run`,Yle=ul.get(cd.CONFIG_PARAMS.ROOTPATH),Jg=wa.join(Yle,"ssh");s$.exports={installModules:jle,auditModules:Jle,installAllRootModules:Wle,uninstallRootModule:zle,linkHarperdb:Qle,runCommand:ld};async function Wle(e=!1,t=ul.get(cd.CONFIG_PARAMS.ROOTPATH)){await Xg();let r=!1,n=process.env;ad.pathExistsSync(Jg)&&ad.readdirSync(Jg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+wa.join(Jg,"config")+" -o UserKnownHostsFile="+wa.join(Jg,"known_hosts"),...process.env},r=!0)});try{let s=ul.get(cd.CONFIG_PARAMS.ROOTPATH),i=wa.join(s,"node_modules","harperdb");ad.lstatSync(i).isSymbolicLink()&&ad.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Ia.error("Error removing symlink:",s)}await ld(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Wle,"installAllRootModules");async function zle(e){await ld(`npm uninstall ${e}`,ul.get(cd.CONFIG_PARAMS.ROOTPATH))}a(zle,"uninstallRootModule");async function Qle(){await Xg(),await ld(`npm link ${Gle}`,ul.get(cd.CONFIG_PARAMS.ROOTPATH))}a(Qle,"linkHarperdb");async function ld(e,t=void 0,r=process.env){Ia.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Hle(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();Ia.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();Ia.error({tagName:"npm_run_command:stderr"},l),i+=l});let[o]=await Vle(n,"close");if(o!==0)throw new Error(`Command \`${e}\` exited with code ${o}.${i===""?"":` Error: ${i}`}`);return s||void 0}a(ld,"runCommand");async function jle(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Ia.warn(t,e.projects);let r=n$(e);if(r)throw _h(r,r.message,hh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?Kle:e$;await Xg(),await r$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=wa.join(XN,u),d,_=null;try{let{stdout:h,stderr:m}=await Fle(i,{cwd:f});d=h?h.replace(`
|
|
27
|
+
${r.stack}`;throw YN.error(n),Cq(new Error)}}}a(ile,"getRolePermissions");function ole(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[bn.SYSTEM_SCHEMA_NAME]=n[bn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=ale(t[i]);return}r[i]=Mq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=cle(c,l);r[i].describe||Uq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=WN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=WN()})}),r}a(ole,"translateRolePermissions");function ale(e){let t=Mq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=WN(!0,!0,!0,!0,!0)}),t}a(ale,"createStructureUserPermissions");function cle(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,_=f;return bn.TIME_STAMP_NAMES.includes(d)&&(_=Dq(d,f[uh])),u[d]=_,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Pq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=Bq(f),s.attribute_permissions.push(f),c||lle(f,l)}else if(u!==o){let f;bn.TIME_STAMP_NAMES.includes(u)?f=Dq(u):f=Pq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=Lq(s),s}else return e.describe=Lq(e),e}a(cle,"getTableAttrPerms");function Lq(e){return Uq.filter(t=>e[t]).length>0}a(Lq,"getSchemaTableDescribePerm");function Bq(e){return xq.filter(t=>e[t]).length>0}a(Bq,"getAttributeDescribePerm");function lle(e,t){xq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(lle,"checkForHashPerms")});var dh={};Ue(dh,{authentication:()=>Yq,bypassAuth:()=>Ele,login:()=>Sle,logout:()=>Tle,start:()=>gle});function Ele(){Kq=!0}async function Yq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let h=e.isOperationsServer?_le?fle:[]:dle?ule:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let m=Zr.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",S=new fo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",m],["Access-Control-Allow-Origin",i]]);return Wg&&S.set("Access-Control-Allow-Credentials","true"),{status:200,headers:S}}o.push("Access-Control-Allow-Origin",i),Wg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Wg){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",m=s?.split(/;\s+/)||[];for(let S of m)if(S.startsWith(h)){let g=S.indexOf(";");l=S.slice(h.length,g===-1?S.length:g),u=await Fq.get(l);break}e.session=u||(u={})}let f=a((h,m,S)=>{let g=new od.AuthAuditLog(h,m,$o.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),m===Ds.SUCCESS?jN.notify(g):jN.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&jN.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await ze.getUser(h,null,e),f(h,Ds.SUCCESS,"mTLS")):(0,od.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=ll.get(n),!d){let h=n.indexOf(" "),m=n.slice(0,h),S=n.slice(h+1),g,R;try{switch(m){case"Basic":let E=atob(S),T=E.indexOf(":");g=E.slice(0,T),R=E.slice(T+1),d=g||R?await ze.getUser(g,R,e):null;break;case"Bearer":try{d=await Ub(S)}catch(N){if(N.message==="invalid token")try{return await DE(S),c({status:-1})}catch{throw N}}break}}catch(E){return mle&&(ll.get(S)||(ll.set(S,S),f(g,Ds.FAILURE,m))),c({status:401,body:ra({error:E.message},e)})}ll.set(n,d),hle&&f(d.username,Ds.SUCCESS,m)}e.user=d}else u?.user?e.user=await ze.getUser(u.user,null,e):(Kq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,qq.getSuperUser)());Wg&&(e.session.update=function(h){let m=Zr.get(U.AUTHENTICATION_COOKIE_EXPIRES);if(!l){l=(0,$q.v4)();let S=Zr.get(U.AUTHENTICATION_COOKIE_DOMAINS),g=m?new Date(Date.now()+(0,JN.convertToMS)(m)).toUTCString():ple,R=S?.find(N=>r.host?.endsWith(N)),T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${g}; ${R?"Domain="+R+"; ":""}HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):_?.headers?.set&&_.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):_?.headers?.set&&(i&&_.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),_.headers.set("X-Hdb-Session","Secure"))),h.id=l,Fq.put(h,{expiresAt:m?Date.now()+(0,JN.convertToMS)(m):void 0})},e.login=async function(h,m){let S=e.user=await ze.authenticateUser(h,m,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let _=await t(e);return _&&(_.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&fi.loginPath?(_.status=302,_.headers.set("Location",fi.loginPath(e))):_.headers.set("WWW-Authenticate","Basic")),c(_))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new fo);for(let d=0;d<u;){let _=o[d++];f.set(_,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function gle({server:e,port:t,securePort:r}){e.http(Yq,t||r?{port:t,securePort:r}:{port:"all"}),Gq||(Gq=!0,setInterval(()=>{ll=new Map},Zr.get(U.AUTHENTICATION_CACHETTL)).unref(),Vq.user.addListener(()=>{ll=new Map}))}async function Sle(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password??""),"Login successful"}async function Tle(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var qq,$q,Zr,od,Vq,JN,jN,ule,dle,fle,_le,Fq,Wg,Kq,hle,mle,ple,ll,Gq,zg=ye(()=>{qq=M(Gn());qr();jl();yu();Me();$q=require("uuid"),Zr=M(ue());H();od=M(j()),Vq=M(Qf());S_();JN=M(oe());ji();jN=(0,od.loggerWithTag)("auth-event");Zr.initSync();ule=Zr.get(U.HTTP_CORSACCESSLIST),dle=Zr.get(U.HTTP_CORS),fle=Zr.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),_le=Zr.get(U.OPERATIONSAPI_NETWORK_CORS),Fq=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Wg=Zr.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,Kq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Zr.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,hle=Zr.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,mle=Zr.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ple="Tue, 01 Oct 8307 19:33:20 GMT",ll=new Map;ze.onInvalidatedUser(()=>{ll=new Map});a(Ele,"bypassAuth");a(Yq,"authentication");a(gle,"start");a(Sle,"login");a(Tle,"logout")});var Zq=P((OPe,Xq)=>{"use strict";var Ne=require("joi"),Wq=require("fs-extra"),zq=require("path"),Qn=tt(),Qq=ue(),jq=(H(),D($)),Jq=j(),{hdb_errors:Ale}=me(),{HDB_ERROR_MSGS:en}=Ale,Ao=/^[a-zA-Z0-9-_]+$/,Rle=/^[a-zA-Z0-9-_]+$/;Xq.exports={getDropCustomFunctionValidator:ble,setCustomFunctionValidator:Ole,addComponentValidator:Cle,dropCustomFunctionProjectValidator:Ple,packageComponentValidator:Dle,deployComponentValidator:Lle,setComponentFileValidator:Nle,getComponentFileValidator:Ile,dropComponentFileValidator:wle,addSSHKeyValidator:Mle,updateSSHKeyValidator:vle,deleteSSHKeyValidator:Ule,setSSHKnownHostsValidator:xle};function Qg(e,t,r){try{let n=Qq.get(jq.CONFIG_PARAMS.COMPONENTSROOT),s=zq.join(n,t);return Wq.existsSync(s)?e?t:r.message(en.PROJECT_EXISTS):e?r.message(en.NO_PROJECT):t}catch(n){return Jq.error(n),r.message(en.VALIDATION_ERR)}}a(Qg,"checkProjectExists");function fh(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(fh,"checkFilePath");function yle(e,t,r,n){try{let s=Qq.get(jq.CONFIG_PARAMS.COMPONENTSROOT),i=zq.join(s,e,t,r+".js");return Wq.existsSync(i)?r:n.message(en.NO_FILE)}catch(s){return Jq.error(s),n.message(en.VALIDATION_ERR)}}a(yle,"checkFileExists");function ble(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Ao).custom(yle.bind(null,e.project,e.type)).custom(fh).required().messages({"string.pattern.base":en.BAD_FILE_NAME})});return Qn.validateBySchema(e,t)}a(ble,"getDropCustomFunctionValidator");function Ole(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(fh).required(),function_content:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Ole,"setCustomFunctionValidator");function Nle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),file:Ne.string().custom(fh).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Nle,"setComponentFileValidator");function wle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),file:Ne.string().custom(fh).optional()});return Qn.validateBySchema(e,t)}a(wle,"dropComponentFileValidator");function Ile(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(fh).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qn.validateBySchema(e,t)}a(Ile,"getComponentFileValidator");function Cle(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!1)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(Cle,"addComponentValidator");function Ple(e){let t=Ne.object({project:Ne.string().pattern(Ao).custom(Qg.bind(null,!0)).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME})});return Qn.validateBySchema(e,t)}a(Ple,"dropCustomFunctionProjectValidator");function Dle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean(),skip_symlinks:Ne.boolean()});return Qn.validateBySchema(e,t)}a(Dle,"packageComponentValidator");function Lle(e){let t=Ne.object({project:Ne.string().pattern(Ao).required().messages({"string.pattern.base":en.BAD_PROJECT_NAME}),package:Ne.string().optional(),restart:Ne.alternatives().try(Ne.boolean(),Ne.string().valid("rolling")).optional()});return Qn.validateBySchema(e,t)}a(Lle,"deployComponentValidator");function Mle(e){let t=Ne.object({name:Ne.string().pattern(Rle).required().messages({"string.pattern.base":en.BAD_SSH_KEY_NAME}),key:Ne.string().required(),host:Ne.string().required(),hostname:Ne.string().required(),known_hosts:Ne.string().optional()});return Qn.validateBySchema(e,t)}a(Mle,"addSSHKeyValidator");function vle(e){let t=Ne.object({name:Ne.string().required(),key:Ne.string().required()});return Qn.validateBySchema(e,t)}a(vle,"updateSSHKeyValidator");function Ule(e){let t=Ne.object({name:Ne.string().required()});return Qn.validateBySchema(e,t)}a(Ule,"deleteSSHKeyValidator");function xle(e){let t=Ne.object({known_hosts:Ne.string().required()});return Qn.validateBySchema(e,t)}a(xle,"setSSHKnownHostsValidator")});var mh=P((wPe,s$)=>{"use strict";var jg=require("joi"),wa=require("path"),ad=require("fs-extra"),{exec:Ble,spawn:Hle}=require("child_process"),kle=require("util"),Fle=kle.promisify(Ble),cd=(H(),D($)),{PACKAGE_ROOT:Gle}=pt(),{handleHDBError:_h,hdb_errors:qle}=me(),{HTTP_STATUS_CODES:hh}=qle,ul=ue(),$le=tt(),Ia=j(),{once:Vle}=require("events");ul.initSync();var XN=ul.get(cd.CONFIG_PARAMS.COMPONENTSROOT),e$="npm install --force --omit=dev --json",Kle=`${e$} --dry-run`,Yle=ul.get(cd.CONFIG_PARAMS.ROOTPATH),Jg=wa.join(Yle,"ssh");s$.exports={installModules:jle,auditModules:Jle,installAllRootModules:Wle,uninstallRootModule:zle,linkHarperdb:Qle,runCommand:ld};async function Wle(e=!1,t=ul.get(cd.CONFIG_PARAMS.ROOTPATH)){await Xg();let r=!1,n=process.env;ad.pathExistsSync(Jg)&&ad.readdirSync(Jg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+wa.join(Jg,"config")+" -o UserKnownHostsFile="+wa.join(Jg,"known_hosts"),...process.env},r=!0)});try{let s=ul.get(cd.CONFIG_PARAMS.ROOTPATH),i=wa.join(s,"node_modules","harperdb");ad.lstatSync(i).isSymbolicLink()&&ad.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Ia.error("Error removing symlink:",s)}await ld(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}a(Wle,"installAllRootModules");async function zle(e){await ld(`npm uninstall ${e}`,ul.get(cd.CONFIG_PARAMS.ROOTPATH))}a(zle,"uninstallRootModule");async function Qle(){await Xg(),await ld(`npm link ${Gle}`,ul.get(cd.CONFIG_PARAMS.ROOTPATH))}a(Qle,"linkHarperdb");async function ld(e,t=void 0,r=process.env){Ia.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Hle(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();Ia.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();Ia.error({tagName:"npm_run_command:stderr"},l),i+=l});let[o]=await Vle(n,"close");if(o!==0)throw new Error(`Command \`${e}\` exited with code ${o}.${i===""?"":` Error: ${i}`}`);return s||void 0}a(ld,"runCommand");async function jle(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Ia.warn(t,e.projects);let r=n$(e);if(r)throw _h(r,r.message,hh.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?Kle:e$;await Xg(),await r$(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=wa.join(XN,u),d,_=null;try{let{stdout:h,stderr:m}=await Fle(i,{cwd:f});d=h?h.replace(`
|
|
28
28
|
`,""):null,_=m?m.replace(`
|
|
29
29
|
`,""):null}catch(h){h.stderr?o[u].npm_error=t$(h.stderr):o[u].npm_error=h.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(_)}catch{o[u].npm_error=_}}return Ia.info(`finished installModules with response ${o}`),o.warning=t,o}a(jle,"installModules");function t$(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
30
30
|
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(t$,"parseNPMStdErr");async function Jle(e){Ia.info(`starting auditModules for request: ${e}`);let t=n$(e);if(t)throw _h(t,t.message,hh.BAD_REQUEST);let{projects:r}=e;await Xg(),await r$(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=wa.join(XN,o);n[o]={npm_output:null,npm_error:null};try{let l=await ld("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=t$(l.stderr)}}return Ia.info(`finished auditModules with response ${n}`),n}a(Jle,"auditModules");async function Xg(){return await ld("npm -v"),!0}a(Xg,"checkNPMInstalled");async function r$(e){if(!Array.isArray(e)||e.length===0)throw _h(new Error,"projects argument must be an array with at least 1 element",hh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=wa.join(XN,i.toString());if(!await ad.pathExists(o)){t.push(i);continue}let l=wa.join(o,"package.json");await ad.pathExists(l)||r.push(i)}if(t.length>0)throw _h(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,hh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw _h(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,hh.BAD_REQUEST,void 0,void 0,!0)}a(r$,"checkProjectPaths");function n$(e){let t=jg.object({projects:jg.array().min(1).items(jg.string()).required(),dry_run:jg.boolean().default(!1)});return $le.validateBySchema(e,t)}a(n$,"modulesValidator")});var ew=P((CPe,u$)=>{"use strict";var gs=require("fs-extra"),Eh=require("path"),ph=j(),i$=oe(),{PACKAGE_ROOT:Xle}=pt(),ZN=(H(),D($)),l$=ue(),Zle=Ot();u$.exports=eue;async function eue(){let e=tue(),t=l$.get(ZN.CONFIG_PARAMS.ROOTPATH),r=Eh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Xle}},s=Eh.join(t,"node_modules");gs.ensureDirSync(s);let i,o=!0,c=!1;try{i=gs.readJsonSync(r)}catch(l){if(i$.isEmptyOrZeroLength(e))return;if(l.code!==ZN.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!i$.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=a$(u);n.dependencies[l]=f+u}if(!o){ph.notify("Installing components"),await c$(r,n,null),await o$(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=a$(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(gs.statSync(new URL(u+"/package.json")).mtimeMs>gs.statSync(r).mtimeMs){c=!0;break}}catch(_){ph.info(`Error checking ${u}/package.json modification time`,_);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(ph.notify("Removing component",l),c=!0);c&&(ph.notify("Updating components."),await c$(r,n,i),await o$(t,e))}a(eue,"installComponents");function o$(e,t){return Promise.all(t.map(({name:r})=>{let n=Eh.join(e,"node_modules",r),s=Eh.join(e,"components",r);if(gs.existsSync(n)&&gs.lstatSync(n).isDirectory())return gs.move(n,s,{overwrite:!0}).then(()=>{gs.symlink(s,n)})}))}a(o$,"moveModuleToComponents");function tue(){let e=Zle.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(tue,"getComponentsConfig");function a$(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Eh.extname(e)||gs.existsSync(e)?"file:":"github:"}a(a$,"getPkgPrefix");async function c$(e,t,r){ph.trace("npm installing components package.json",t),gs.writeFileSync(e,JSON.stringify(t,null," "));try{await mh().installAllRootModules(l$.get(ZN.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?gs.writeFileSync(e,JSON.stringify(r,null," ")):gs.unlinkSync(e),n}}a(c$,"installPackages")});var h$={};Ue(h$,{packageDirectory:()=>rue});function rue(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];f$.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,d$.join)("cache","webpack")):void 0}).pipe((0,_$.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var d$,f$,_$,m$=ye(()=>{d$=require("path"),f$=M(require("tar-fs")),_$=require("node:zlib");a(rue,"packageDirectory")});var nw=P(S$=>{"use strict";var be=require("fs-extra"),tw=require("fast-glob"),Ie=require("path"),nue=require("tar-fs"),sue=require("gunzip-maybe"),rw=require("normalize-path"),On=Zq(),xt=j(),ot=(H(),D($)),Wt=ue(),Zg=Ot(),iue=oe(),{PACKAGE_ROOT:oue}=pt(),{handleHDBError:Bt,hdb_errors:aue}=me(),{basename:cue}=require("path"),lue=ew(),E$=ue(),{Readable:uue}=require("stream"),{isMainThread:due}=require("worker_threads"),{HDB_ERROR_MSGS:dl,HTTP_STATUS_CODES:Ht}=aue,g$=rt(),{replicateOperation:Xs}=(ds(),D(Ea)),{packageDirectory:fue}=(m$(),D(h$)),p$=mh(),_ue=Ie.join(oue,"application-template"),hue=Wt.get(ot.CONFIG_PARAMS.ROOTPATH),Ca=Ie.join(hue,"ssh"),Ro=Ie.join(Ca,"known_hosts");function mue(){xt.trace("getting custom api status");let e={};try{e={port:Wt.get(ot.CONFIG_PARAMS.HTTP_PORT),directory:Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Bt(new Error,dl.FUNCTION_STATUS,Ht.INTERNAL_SERVER_ERROR,xt.ERR,t)}return e}a(mue,"customFunctionsStatus");function pue(){xt.trace("getting custom api endpoints");let e={},t=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT);try{tw.sync(rw(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:tw.sync(rw(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:tw.sync(rw(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Bt(new Error,dl.GET_FUNCTIONS,Ht.INTERNAL_SERVER_ERROR,xt.ERR,r)}return e}a(pue,"getCustomFunctions");function Eue(e){e.project&&(e.project=Ie.parse(e.project).name),e.file&&(e.file=Ie.parse(e.file).name);let t=On.getDropCustomFunctionValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);xt.trace("getting custom api endpoint file content");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Ie.join(r,n,s,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw Bt(new Error,dl.GET_FUNCTION,Ht.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(Eue,"getCustomFunction");async function gue(e){e.project&&(e.project=Ie.parse(e.project).name),e.file&&(e.file=Ie.parse(e.file).name);let t=On.setCustomFunctionValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);xt.trace("setting custom function file content");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{be.outputFileSync(Ie.join(r,n,s,i+".js"),o);let c=await Xs(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Bt(new Error,dl.SET_FUNCTION,Ht.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(gue,"setCustomFunction");async function Sue(e){e.project&&(e.project=Ie.parse(e.project).name),e.file&&(e.file=Ie.parse(e.file).name);let t=On.getDropCustomFunctionValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);xt.trace("dropping custom function file");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{be.unlinkSync(Ie.join(r,n,s,i+".js"));let o=await Xs(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Bt(new Error,dl.DROP_FUNCTION,Ht.INTERNAL_SERVER_ERROR,xt.ERR,o)}}a(Sue,"dropCustomFunction");async function Tue(e){e.project&&(e.project=Ie.parse(e.project).name);let t=On.addComponentValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);xt.trace("adding component");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ie.join(r,n);be.mkdirSync(s,{recursive:!0}),be.copySync(_ue,s);let i=await Xs(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Bt(new Error,dl.ADD_FUNCTION,Ht.INTERNAL_SERVER_ERROR,xt.ERR,s)}}a(Tue,"addComponent");async function Aue(e){e.project&&(e.project=Ie.parse(e.project).name);let t=On.dropCustomFunctionProjectValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);xt.trace("dropping custom function project");let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Wt.get(ot.CONFIG_PARAMS.APPS);if(!iue.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return Zg.updateConfigValue(ot.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Ie.join(r,n);be.rmSync(i,{recursive:!0});let o=await Xs(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Bt(new Error,dl.DROP_FUNCTION_PROJECT,Ht.INTERNAL_SERVER_ERROR,xt.ERR,i)}}a(Aue,"dropCustomFunctionProject");async function Rue(e){e.project&&(e.project=Ie.parse(e.project).name);let t=On.packageComponentValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;xt.trace("packaging component",n);let s;try{s=await be.realpath(Ie.join(r,n))}catch(o){if(o.code!==ot.NODE_ERROR_CODES.ENOENT)throw o;try{s=await be.realpath(Ie.join(Wt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ot.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await fue(s,e)).toString("base64");return{project:n,payload:i}}a(Rue,"packageComponent");async function yue(e){e.project?e.project=Ie.parse(e.project).name:e.package&&(e.project=bue(e.package));let t=On.deployComponentValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let r=Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(xt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Ie.join(r,n),i="file:"+c,await be.emptyDir(c);let S=uue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,T)=>{S.pipe(sue()).pipe(nue.extract(c,{finish:E})).on("error",T)});let g=await be.readdir(c);g.length===1&&g[0]==="package"&&(await be.copy(Ie.join(c,"package"),c),await be.remove(Ie.join(c,"package")));let R=Ie.join(c,"node_modules");o?await p$.runCommand(o,c):be.existsSync(R)||await p$.installAllRootModules(!1,c)}else{await Zg.addConfig(n,{package:i}),await lue();let S=E$.get(ot.CONFIG_PARAMS.ROOTPATH);c=Ie.join(S,"node_modules",n)}if(due)return;let l=new Map;l.isWorker=!0;let u=(Sh(),D(gh)),f;u.setErrorReporter(S=>f=S);let d=cue(c),_=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,_)}if(f)throw f;xt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let m=await Xs(e);if(e.restart===!0)g$.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await sw().executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=g.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}a(yue,"deployComponent");function bue(e){if(e.startsWith("git+ssh://"))return Ie.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Ie.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(be.readFileSync(Ie.join(e,"package.json"),"utf8"));return Ie.basename(t)}catch{}return Ie.basename(e)}a(bue,"getProjectNameFromPackage");async function Oue(){let e=a(async(s,i)=>{try{let o=await be.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Ie.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await be.stat(u),d={name:Ie.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return xt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),{name:Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT).split(Ie.sep).slice(-1).pop(),entries:[]}),n=(Sh(),D(gh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Oue,"getComponents");async function Nue(e){let t=On.getComponentFileValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let n=Zg.getConfigObj()[e.project]||e.project==="harperdb"?Ie.join(E$.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules"):Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await be.stat(Ie.join(n,e.project,e.file));return{message:await be.readFile(Ie.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ot.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ie.join(e.project,e.file)}'`):i}}a(Nue,"getComponentFile");async function wue(e){let t=On.setComponentFileValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Ie.join(Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await be.ensureFile(n),await be.outputFile(n,e.payload,r)):await be.ensureDir(n);let s=await Xs(e);return s.message="Successfully set component: "+e.file,s}a(wue,"setComponentFile");async function Iue(e){let t=On.dropComponentFileValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Ie.join(r,n):r,i=Ie.join(Wt.get(ot.CONFIG_PARAMS.COMPONENTSROOT),s),o=Ie.join(Wt.get(ot.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await be.pathExists(o)&&await be.unlink(o),await be.pathExists(i)&&await be.remove(i);let c=Ie.join(Wt.get(ot.CONFIG_PARAMS.ROOTPATH),"package.json");if(await be.pathExists(c)){let u=JSON.parse(await be.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await be.writeFile(c,JSON.stringify(u,null,2),"utf8")}Zg.deleteConfigFromFile([r]);let l=await Xs(e);return e.restart===!0?(g$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Iue,"dropComponent");async function Cue(e){let t=On.addSSHKeyValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;xt.trace("adding ssh key",r);let c=Ie.join(Ca,r+".key"),l=Ie.join(Ca,"config");if(await be.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await be.outputFile(c,n),await be.chmod(c,"0600");let u=`#${r}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunkharperdb_studio=self.webpackChunkharperdb_studio||[]).push([[164],{5604:function(e,t,n){!function(e,t){"use strict";function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function o(e){return o="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}function c(e,t){if(null==e)return{};var n,r,o=i(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function u(e,t){return s(e)||l(e,t)||p(e,t)||d()}function s(e){if(Array.isArray(e))return e}function l(e,t){var n=e&&("undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=n){var r,o,a=[],i=!0,c=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(u){c=!0,o=u}finally{try{i||null==n.return||n.return()}finally{if(c)throw o}}return a}}function p(e,t){if(e){if("string"===typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function d(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function m(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var g,y,h,v,b={exports:{}};function w(){return y?g:(y=1,g="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}function E(){if(v)return h;v=1;var e=w();function t(){}function n(){}return n.resetWarningCache=t,h=function(){function r(t,n,r,o,a,i){if(i!==e){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function o(){return r}r.isRequired=r;var a={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:o,element:r,elementType:r,instanceOf:o,node:r,objectOf:o,oneOf:o,oneOfType:o,shape:o,exact:o,checkPropTypes:n,resetWarningCache:t};return a.PropTypes=a,a}}b.exports=E()();var k=m(b.exports),C=function(e,n,r){var o=!!r,a=t.useRef(r);t.useEffect((function(){a.current=r}),[r]),t.useEffect((function(){if(!o||!e)return function(){};var t=function(){a.current&&a.current.apply(a,arguments)};return e.on(n,t),function(){e.off(n,t)}}),[o,n,e,a])},S=function(e){var n=t.useRef(e);return t.useEffect((function(){n.current=e}),[e]),n.current},O=function(e){return null!==e&&"object"===o(e)},j=function(e){return O(e)&&"function"===typeof e.then},_=function(e){return O(e)&&"function"===typeof e.elements&&"function"===typeof e.createToken&&"function"===typeof e.createPaymentMethod&&"function"===typeof e.confirmCardPayment},P="[object Object]",A=function e(t,n){if(!O(t)||!O(n))return t===n;var r=Array.isArray(t);if(r!==Array.isArray(n))return!1;var o=Object.prototype.toString.call(t)===P;if(o!==(Object.prototype.toString.call(n)===P))return!1;if(!o&&!r)return t===n;var a=Object.keys(t),i=Object.keys(n);if(a.length!==i.length)return!1;for(var c={},u=0;u<a.length;u+=1)c[a[u]]=!0;for(var s=0;s<i.length;s+=1)c[i[s]]=!0;var l=Object.keys(c);if(l.length!==a.length)return!1;var p=t,f=n,d=function(t){return e(p[t],f[t])};return l.every(d)},x=function(e,t,n){return O(e)?Object.keys(e).reduce((function(o,i){var c=!O(t)||!A(e[i],t[i]);return n.includes(i)?(c&&console.warn("Unsupported prop change: options.".concat(i," is not a mutable property.")),o):c?r(r({},o||{}),{},a({},i,e[i])):o}),null):null},I="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",N=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I;if(null===e||_(e))return e;throw new Error(t)},R=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I;if(j(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return N(e,t)}))};var n=N(e,t);return null===n?{tag:"empty"}:{tag:"sync",stripe:n}},F=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},T=t.createContext(null);T.displayName="ElementsContext";var M=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},L=function(e){var n=e.stripe,r=e.options,o=e.children,a=t.useMemo((function(){return R(n)}),[n]),i=u(t.useState((function(){return{stripe:"sync"===a.tag?a.stripe:null,elements:"sync"===a.tag?a.stripe.elements(r):null}})),2),c=i[0],s=i[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==a.tag||c.stripe?"sync"!==a.tag||c.stripe||t(a.stripe):a.stripePromise.then((function(n){n&&e&&t(n)})),function(){e=!1}}),[a,c,r]);var l=S(n);t.useEffect((function(){null!==l&&l!==n&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[l,n]);var p=S(r);return t.useEffect((function(){if(c.elements){var e=x(r,p,["clientSecret","fonts"]);e&&c.elements.update(e)}}),[r,p,c.elements]),t.useEffect((function(){F(c.stripe)}),[c.stripe]),t.createElement(T.Provider,{value:c},o)};L.propTypes={stripe:k.any,options:k.object};var U=function(e){var n=t.useContext(T);return M(n,e)},D=function(){return U("calls useElements()").elements},G=function(e){return(0,e.children)(U("mounts <ElementsConsumer>"))};G.propTypes={children:k.func.isRequired};var q=["on","session"],B=t.createContext(null);B.displayName="CheckoutSdkContext";var $=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},Y=t.createContext(null);Y.displayName="CheckoutContext";var W=function(e,t){if(!e)return null;e.on,e.session;var n=c(e,q);return t?Object.assign(t,n):Object.assign(e.session(),n)},z="Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",Q=function(e){var n=e.stripe,r=e.options,o=e.children,a=t.useMemo((function(){return R(n,z)}),[n]),i=u(t.useState(null),2),c=i[0],s=i[1],l=u(t.useState((function(){return{stripe:"sync"===a.tag?a.stripe:null,checkoutSdk:null}})),2),p=l[0],f=l[1],d=function(e,t){f((function(n){return n.stripe&&n.checkoutSdk?n:{stripe:e,checkoutSdk:t}}))},m=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==a.tag||p.stripe?"sync"===a.tag&&a.stripe&&!m.current&&(m.current=!0,a.stripe.initCheckout(r).then((function(e){e&&(d(a.stripe,e),e.on("change",s))}))):a.stripePromise.then((function(t){t&&e&&!m.current&&(m.current=!0,t.initCheckout(r).then((function(e){e&&(d(t,e),e.on("change",s))})))})),function(){e=!1}}),[a,p,r,s]);var g=S(n);t.useEffect((function(){null!==g&&g!==n&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[g,n]);var y=S(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var n=null===y||void 0===y||null===(e=y.elementsOptions)||void 0===e?void 0:e.appearance,o=null===r||void 0===r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;o&&!A(o,n)&&p.checkoutSdk.changeAppearance(o)}}),[r,y,p.checkoutSdk]),t.useEffect((function(){F(p.stripe)}),[p.stripe]);var h=t.useMemo((function(){return W(p.checkoutSdk,c)}),[p.checkoutSdk,c]);return p.checkoutSdk?t.createElement(B.Provider,{value:p},t.createElement(Y.Provider,{value:h},o)):null};Q.propTypes={stripe:k.any,options:k.shape({fetchClientSecret:k.func.isRequired,elementsOptions:k.object}).isRequired};var V=function(e){var n=t.useContext(B);return $(n,e)},Z=function(e){var n=t.useContext(B),r=t.useContext(T);if(n&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return n?$(n,e):M(r,e)},H=function(){V("calls useCheckout()");var e=t.useContext(Y);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},K=["mode"],J=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},X=function(e,n){var r="".concat(J(e),"Element"),o=n?function(e){Z("mounts <".concat(r,">"));var n=e.id,o=e.className;return t.createElement("div",{id:n,className:o})}:function(n){var o,a=n.id,i=n.className,s=n.options,l=void 0===s?{}:s,p=n.onBlur,f=n.onFocus,d=n.onReady,m=n.onChange,g=n.onEscape,y=n.onClick,h=n.onLoadError,v=n.onLoaderStart,b=n.onNetworksChange,w=n.onConfirm,E=n.onCancel,k=n.onShippingAddressChange,O=n.onShippingRateChange,j=Z("mounts <".concat(r,">")),_="elements"in j?j.elements:null,P="checkoutSdk"in j?j.checkoutSdk:null,A=u(t.useState(null),2),I=A[0],N=A[1],R=t.useRef(null),F=t.useRef(null);C(I,"blur",p),C(I,"focus",f),C(I,"escape",g),C(I,"click",y),C(I,"loaderror",h),C(I,"loaderstart",v),C(I,"networkschange",b),C(I,"confirm",w),C(I,"cancel",E),C(I,"shippingaddresschange",k),C(I,"shippingratechange",O),C(I,"change",m),d&&(o="expressCheckout"===e?d:function(){d(I)}),C(I,"ready",o),t.useLayoutEffect((function(){if(null===R.current&&null!==F.current&&(_||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(l);break;case"address":if(!("mode"in l))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var n=l.mode,o=c(l,K);if("shipping"===n)t=P.createShippingAddressElement(o);else{if("billing"!==n)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(o)}break;case"expressCheckout":t=P.createExpressCheckoutElement(l);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(r,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else _&&(t=_.create(e,l));R.current=t,N(t),t&&t.mount(F.current)}}),[_,P,l]);var T=S(l);return t.useEffect((function(){if(R.current){var e=x(l,T,["paymentRequest"]);e&&"update"in R.current&&R.current.update(e)}}),[l,T]),t.useLayoutEffect((function(){return function(){if(R.current&&"function"===typeof R.current.destroy)try{R.current.destroy(),R.current=null}catch(e){}}}),[]),t.createElement("div",{id:a,className:i,ref:F})};return o.propTypes={id:k.string,className:k.string,onChange:k.func,onBlur:k.func,onFocus:k.func,onReady:k.func,onEscape:k.func,onClick:k.func,onLoadError:k.func,onLoaderStart:k.func,onNetworksChange:k.func,onConfirm:k.func,onCancel:k.func,onShippingAddressChange:k.func,onShippingRateChange:k.func,options:k.object},o.displayName=r,o.__elementType=e,o},ee="undefined"===typeof window,te=t.createContext(null);te.displayName="EmbeddedCheckoutProviderContext";var ne=function(){var e=t.useContext(te);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},re="Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",oe=function(e){var n=e.stripe,r=e.options,o=e.children,a=t.useMemo((function(){return R(n,re)}),[n]),i=t.useRef(null),c=t.useRef(null),s=u(t.useState({embeddedCheckout:null}),2),l=s[0],p=s[1];t.useEffect((function(){if(!c.current&&!i.current){var e=function(e){c.current||i.current||(c.current=e,i.current=c.current.initEmbeddedCheckout(r).then((function(e){p({embeddedCheckout:e})})))};"async"!==a.tag||c.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==a.tag||c.current||!r.clientSecret&&!r.fetchClientSecret||e(a.stripe):a.stripePromise.then((function(t){t&&e(t)}))}}),[a,r,l,c]),t.useEffect((function(){return function(){l.embeddedCheckout?(i.current=null,l.embeddedCheckout.destroy()):i.current&&i.current.then((function(){i.current=null,l.embeddedCheckout&&l.embeddedCheckout.destroy()}))}}),[l.embeddedCheckout]),t.useEffect((function(){F(c)}),[c]);var f=S(n);t.useEffect((function(){null!==f&&f!==n&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[f,n]);var d=S(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(te.Provider,{value:l},o)},ae=function(e){var n=e.id,r=e.className,o=ne().embeddedCheckout,a=t.useRef(!1),i=t.useRef(null);return t.useLayoutEffect((function(){return!a.current&&o&&null!==i.current&&(o.mount(i.current),a.current=!0),function(){if(a.current&&o)try{o.unmount(),a.current=!1}catch(e){}}}),[o]),t.createElement("div",{ref:i,id:n,className:r})},ie=function(e){var n=e.id,r=e.className;return ne(),t.createElement("div",{id:n,className:r})},ce=ee?ie:ae,ue=function(){return Z("calls useStripe()").stripe},se=X("auBankAccount",ee),le=X("card",ee),pe=X("cardNumber",ee),fe=X("cardExpiry",ee),de=X("cardCvc",ee),me=X("fpxBank",ee),ge=X("iban",ee),ye=X("idealBank",ee),he=X("p24Bank",ee),ve=X("epsBank",ee),be=X("payment",ee),we=X("expressCheckout",ee),Ee=X("currencySelector",ee),ke=X("paymentRequestButton",ee),Ce=X("linkAuthentication",ee),Se=X("address",ee),Oe=X("shippingAddress",ee),je=X("paymentMethodMessaging",ee),_e=X("affirmMessage",ee),Pe=X("afterpayClearpayMessage",ee);e.AddressElement=Se,e.AffirmMessageElement=_e,e.AfterpayClearpayMessageElement=Pe,e.AuBankAccountElement=se,e.CardCvcElement=de,e.CardElement=le,e.CardExpiryElement=fe,e.CardNumberElement=pe,e.CheckoutProvider=Q,e.CurrencySelectorElement=Ee,e.Elements=L,e.ElementsConsumer=G,e.EmbeddedCheckout=ce,e.EmbeddedCheckoutProvider=oe,e.EpsBankElement=ve,e.ExpressCheckoutElement=we,e.FpxBankElement=me,e.IbanElement=ge,e.IdealBankElement=ye,e.LinkAuthenticationElement=Ce,e.P24BankElement=he,e.PaymentElement=be,e.PaymentMethodMessagingElement=je,e.PaymentRequestButtonElement=ke,e.ShippingAddressElement=Oe,e.useCheckout=H,e.useElements=D,e.useStripe=ue}(t,n(9950))},9817:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=e||"";t&&(a=e.toString().trim().replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g,(function(e,t,r){return t>0&&t+e.length!==r.length&&e.search(n)>-1&&":"!==r.charAt(t-2)&&("-"!==r.charAt(t+e.length)||"-"===r.charAt(t-1))&&r.charAt(t-1).search(/[^\s-]/)<0?e.toLowerCase():e.substr(1).search(/[A-Z]|\../)>-1?e:e.charAt(0).toUpperCase()+e.substr(1)})));o&&(a=function(e){if(function(e){return"string"===typeof e&&-1!==e.indexOf("@")}(e))return console.warn("This arg looks like an email address, redacting."),r;return e}(a));return a};var n=/^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i;var r="REDACTED (Potential Email Address)"},8860:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.GA4=void 0;var r=u(n(1461)),o=u(n(9817)),a=["eventCategory","eventAction","eventLabel","eventValue","hitType"],i=["title","location"],c=["page","hitType"];function u(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function p(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){v(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,c=[],u=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);u=!0);}catch(l){s=!0,o=l}finally{try{if(!u&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,t)||g(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"===typeof e)return y(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,b(r.key),r)}}function v(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e){var t=function(e,t){if("object"!==l(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===l(t)?t:String(t)}var w=function(){function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),v(this,"reset",(function(){t.isInitialized=!1,t._testMode=!1,t._currentMeasurementId,t._hasLoadedGA=!1,t._isQueuing=!1,t._queueGtag=[]})),v(this,"_gtag",(function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];t._testMode||t._isQueuing?t._queueGtag.push(n):r.default.apply(void 0,n)})),v(this,"_loadGA",(function(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"https://www.googletagmanager.com/gtag/js";if("undefined"!==typeof window&&"undefined"!==typeof document&&!t._hasLoadedGA){var o=document.createElement("script");o.async=!0,o.src="".concat(r,"?id=").concat(e),n&&o.setAttribute("nonce",n),document.body.appendChild(o),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)},t._hasLoadedGA=!0}})),v(this,"_toGtagOptions",(function(e){if(e){var t={cookieUpdate:"cookie_update",cookieExpires:"cookie_expires",cookieDomain:"cookie_domain",cookieFlags:"cookie_flags",userId:"user_id",clientId:"client_id",anonymizeIp:"anonymize_ip",contentGroup1:"content_group1",contentGroup2:"content_group2",contentGroup3:"content_group3",contentGroup4:"content_group4",contentGroup5:"content_group5",allowAdFeatures:"allow_google_signals",allowAdPersonalizationSignals:"allow_ad_personalization_signals",nonInteraction:"non_interaction",page:"page_path",hitCallback:"event_callback"};return Object.entries(e).reduce((function(e,n){var r=m(n,2),o=r[0],a=r[1];return t[o]?e[t[o]]=a:e[o]=a,e}),{})}})),v(this,"initialize",(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Require GA_MEASUREMENT_ID");var r="string"===typeof e?[{trackingId:e}]:e;t._currentMeasurementId=r[0].trackingId;var o=n.gaOptions,a=n.gtagOptions,i=n.nonce,c=n.testMode,u=void 0!==c&&c,s=n.gtagUrl;if(t._testMode=u,u||t._loadGA(t._currentMeasurementId,i,s),t.isInitialized||(t._gtag("js",new Date),r.forEach((function(e){var n=d(d(d({},t._toGtagOptions(d(d({},o),e.gaOptions))),a),e.gtagOptions);Object.keys(n).length?t._gtag("config",e.trackingId,n):t._gtag("config",e.trackingId)}))),t.isInitialized=!0,!u){var l=p(t._queueGtag);for(t._queueGtag=[],t._isQueuing=!1;l.length;){var f=l.shift();t._gtag.apply(t,p(f)),"get"===f[0]&&(t._isQueuing=!0)}}})),v(this,"set",(function(e){e?"object"===l(e)?(0===Object.keys(e).length&&console.warn("empty `fieldsObject` given to .set()"),t._gaCommand("set",e)):console.warn("Expected `fieldsObject` arg to be an Object"):console.warn("`fieldsObject` is required in .set()")})),v(this,"_gaCommandSendEvent",(function(e,n,r,o,a){t._gtag("event",n,d(d({event_category:e,event_label:r,value:o},a&&{non_interaction:a.nonInteraction}),t._toGtagOptions(a)))})),v(this,"_gaCommandSendEventParameters",(function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];if("string"===typeof n[0])t._gaCommandSendEvent.apply(t,p(n.slice(1)));else{var o=n[0],i=o.eventCategory,c=o.eventAction,u=o.eventLabel,l=o.eventValue,f=(o.hitType,s(o,a));t._gaCommandSendEvent(i,c,u,l,f)}})),v(this,"_gaCommandSendTiming",(function(e,n,r,o){t._gtag("event","timing_complete",{name:n,value:r,event_category:e,event_label:o})})),v(this,"_gaCommandSendPageview",(function(e,n){if(n&&Object.keys(n).length){var r=t._toGtagOptions(n),o=r.title,a=r.location,c=s(r,i);t._gtag("event","page_view",d(d(d(d({},e&&{page_path:e}),o&&{page_title:o}),a&&{page_location:a}),c))}else e?t._gtag("event","page_view",{page_path:e}):t._gtag("event","page_view")})),v(this,"_gaCommandSendPageviewParameters",(function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];if("string"===typeof n[0])t._gaCommandSendPageview.apply(t,p(n.slice(1)));else{var o=n[0],a=o.page,i=(o.hitType,s(o,c));t._gaCommandSendPageview(a,i)}})),v(this,"_gaCommandSend",(function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o="string"===typeof n[0]?n[0]:n[0].hitType;switch(o){case"event":t._gaCommandSendEventParameters.apply(t,n);break;case"pageview":t._gaCommandSendPageviewParameters.apply(t,n);break;case"timing":t._gaCommandSendTiming.apply(t,p(n.slice(1)));break;case"screenview":case"transaction":case"item":case"social":case"exception":console.warn("Unsupported send command: ".concat(o));break;default:console.warn("Send command doesn't exist: ".concat(o))}})),v(this,"_gaCommandSet",(function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];"string"===typeof n[0]&&(n[0]=v({},n[0],n[1])),t._gtag("set",t._toGtagOptions(n[0]))})),v(this,"_gaCommand",(function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];switch(e){case"send":t._gaCommandSend.apply(t,r);break;case"set":t._gaCommandSet.apply(t,r);break;default:console.warn("Command doesn't exist: ".concat(e))}})),v(this,"ga",(function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];if("string"===typeof n[0])t._gaCommand.apply(t,n);else{var o=n[0];t._gtag("get",t._currentMeasurementId,"client_id",(function(e){t._isQueuing=!1;var n=t._queueGtag;for(o({get:function(n){return"clientId"===n?e:"trackingId"===n?t._currentMeasurementId:"apiVersion"===n?"1":void 0}});n.length;){var r=n.shift();t._gtag.apply(t,p(r))}})),t._isQueuing=!0}return t.ga})),v(this,"event",(function(e,n){if("string"===typeof e)t._gtag("event",e,t._toGtagOptions(n));else{var r=e.action,a=e.category,i=e.label,c=e.value,u=e.nonInteraction,s=e.transport;if(!a||!r)return void console.warn("args.category AND args.action are required in event()");var l={hitType:"event",eventCategory:(0,o.default)(a),eventAction:(0,o.default)(r)};i&&(l.eventLabel=(0,o.default)(i)),"undefined"!==typeof c&&("number"!==typeof c?console.warn("Expected `args.value` arg to be a Number."):l.eventValue=c),"undefined"!==typeof u&&("boolean"!==typeof u?console.warn("`args.nonInteraction` must be a boolean."):l.nonInteraction=u),"undefined"!==typeof s&&("string"!==typeof s?console.warn("`args.transport` must be a string."):(-1===["beacon","xhr","image"].indexOf(s)&&console.warn("`args.transport` must be either one of these values: `beacon`, `xhr` or `image`"),l.transport=s)),t._gaCommand("send",l)}})),v(this,"send",(function(e){t._gaCommand("send",e)})),this.reset()}var t,n,u;return t=e,n=[{key:"gtag",value:function(){this._gtag.apply(this,arguments)}}],n&&h(t.prototype,n),u&&h(t,u),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.GA4=w;var E=new w;t.default=E},1461:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r;"undefined"!==typeof window&&("undefined"===typeof window.gtag&&(window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)}),(r=window).gtag.apply(r,t))};t.default=n},7732:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}t.Ay=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!==r(e)&&"function"!==typeof e)return{default:e};var n=a(t);if(n&&n.has(e))return n.get(e);var o={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in e)if("default"!==c&&Object.prototype.hasOwnProperty.call(e,c)){var u=i?Object.getOwnPropertyDescriptor(e,c):null;u&&(u.get||u.set)?Object.defineProperty(o,c,u):o[c]=e[c]}o.default=e,n&&n.set(e,o);return o}(n(8860));function a(e){if("function"!==typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(a=function(e){return e?n:t})(e)}o.GA4;var i=o.default;t.Ay=i},9335:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var r=n(9950),o=n(1942),a=n.n(o),i=n(8738),c=n.n(i),u=n(1497),s=["className","cssModule","fluid","tag"];function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}function p(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={tag:u.Wx,fluid:a().oneOfType([a().bool,a().string]),className:a().string,cssModule:a().object};function d(e){var t=e.className,n=e.cssModule,o=e.fluid,a=e.tag,i=void 0===a?"div":a,f=p(e,s),d="container";!0===o?d="container-fluid":o&&(d="container-".concat(o));var m=(0,u.qO)(c()(t,d),n);return r.createElement(i,l({},f,{className:m}))}d.propTypes=f;const m=d},135:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(9950),o=function(){};function a(e,t,n){var a=(0,r.useRef)(o);(0,r.useEffect)((function(){a.current=e})),(0,r.useEffect)((function(){n&&null!==t&&!1!==t&&a.current()}),[n]),(0,r.useEffect)((function(){if(null!==t&&!1!==t){var e=setInterval((function(){return a.current()}),t);return function(){return clearInterval(e)}}}),[t])}},7202:(e,t,n)=>{"use strict";n.d(t,{c:()=>y});var r,o="https://js.stripe.com",a="".concat(o,"/v3"),i=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,c=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,u="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",s=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",n=document.createElement("script");n.src="".concat(a).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(n),n},l=null,p=null,f=null,d=function(e){return null!==l?l:(l=new Promise((function(t,n){if("undefined"!==typeof window&&"undefined"!==typeof document)if(window.Stripe&&e&&console.warn(u),window.Stripe)t(window.Stripe);else try{var r=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(o,'"]')),n=0;n<t.length;n++){var r=t[n];if(e=r.src,i.test(e)||c.test(e))return r}return null}();if(r&&e)console.warn(u);else if(r){if(r&&null!==f&&null!==p){var a;r.removeEventListener("load",f),r.removeEventListener("error",p),null===(a=r.parentNode)||void 0===a||a.removeChild(r),r=s(e)}}else r=s(e);f=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(t,n),p=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(n),r.addEventListener("load",f),r.addEventListener("error",p)}catch(l){return void n(l)}else t(null)}))).catch((function(e){return l=null,Promise.reject(e)}))},m=!1,g=function(){return r||(r=d(null).catch((function(e){return r=null,Promise.reject(e)})))};Promise.resolve().then((function(){return g()})).catch((function(e){m||console.warn(e)}));var y=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];m=!0;var r=Date.now();return g().then((function(e){return function(e,t,n){if(null===e)return null;var r=t[0].match(/^pk_test/),o=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==o&&console.warn("Stripe.js@".concat(o," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var a=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(a,n),a}(e,t,r)}))}},4283:(e,t,n)=>{"use strict";n.d(t,{A:()=>P});var r={};n.r(r),n.d(r,{exclude:()=>_,extract:()=>E,parse:()=>k,parseUrl:()=>S,pick:()=>j,stringify:()=>C,stringifyUrl:()=>O});const o="%[a-f0-9]{2}",a=new RegExp("("+o+")|([^%]+?)","gi"),i=new RegExp("("+o+")+","gi");function c(e,t){try{return[decodeURIComponent(e.join(""))]}catch{}if(1===e.length)return e;t=t||1;const n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],c(n),c(r))}function u(e){try{return decodeURIComponent(e)}catch{let t=e.match(a)||[];for(let n=1;n<t.length;n++)t=(e=c(t,n).join("")).match(a)||[];return e}}function s(e){if("string"!==typeof e)throw new TypeError("Expected `encodedURI` to be of type `string`, got `"+typeof e+"`");try{return decodeURIComponent(e)}catch{return function(e){const t={"%FE%FF":"\ufffd\ufffd","%FF%FE":"\ufffd\ufffd"};let n=i.exec(e);for(;n;){try{t[n[0]]=decodeURIComponent(n[0])}catch{const e=u(n[0]);e!==n[0]&&(t[n[0]]=e)}n=i.exec(e)}t["%C2"]="\ufffd";const r=Object.keys(t);for(const o of r)e=e.replace(new RegExp(o,"g"),t[o]);return e}(e)}}function l(e,t){const n={};if(Array.isArray(t))for(const r of t){const t=Object.getOwnPropertyDescriptor(e,r);t?.enumerable&&Object.defineProperty(n,r,t)}else for(const r of Reflect.ownKeys(e)){const o=Object.getOwnPropertyDescriptor(e,r);if(o.enumerable){t(r,e[r],e)&&Object.defineProperty(n,r,o)}}return n}function p(e,t){if("string"!==typeof e||"string"!==typeof t)throw new TypeError("Expected the arguments to be of type `string`");if(""===e||""===t)return[];const n=e.indexOf(t);return-1===n?[]:[e.slice(0,n),e.slice(n+t.length)]}const f=e=>null===e||void 0===e,d=e=>encodeURIComponent(e).replaceAll(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)),m=Symbol("encodeFragmentIdentifier");function g(e){if("string"!==typeof e||1!==e.length)throw new TypeError("arrayFormatSeparator must be single character string")}function y(e,t){return t.encode?t.strict?d(e):encodeURIComponent(e):e}function h(e,t){return t.decode?s(e):e}function v(e){return Array.isArray(e)?e.sort():"object"===typeof e?v(Object.keys(e)).sort(((e,t)=>Number(e)-Number(t))).map((t=>e[t])):e}function b(e){const t=e.indexOf("#");return-1!==t&&(e=e.slice(0,t)),e}function w(e,t,n){return"string"===n&&"string"===typeof e?e:"function"===typeof n&&"string"===typeof e?n(e):!t.parseBooleans||null===e||"true"!==e.toLowerCase()&&"false"!==e.toLowerCase()?"number"!==n||Number.isNaN(Number(e))||"string"!==typeof e||""===e.trim()?t.parseNumbers&&!Number.isNaN(Number(e))&&"string"===typeof e&&""!==e.trim()?Number(e):e:Number(e):"true"===e.toLowerCase()}function E(e){const t=(e=b(e)).indexOf("?");return-1===t?"":e.slice(t+1)}function k(e,t){g((t={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,types:Object.create(null),...t}).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case"index":return(e,n,r)=>{t=/\[(\d*)]$/.exec(e),e=e.replace(/\[\d*]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return(e,n,r)=>{t=/(\[])$/.exec(e),e=e.replace(/\[]$/,""),t?void 0!==r[e]?r[e]=[...r[e],n]:r[e]=[n]:r[e]=n};case"colon-list-separator":return(e,n,r)=>{t=/(:list)$/.exec(e),e=e.replace(/:list$/,""),t?void 0!==r[e]?r[e]=[...r[e],n]:r[e]=[n]:r[e]=n};case"comma":case"separator":return(t,n,r)=>{const o="string"===typeof n&&n.includes(e.arrayFormatSeparator),a="string"===typeof n&&!o&&h(n,e).includes(e.arrayFormatSeparator);n=a?h(n,e):n;const i=o||a?n.split(e.arrayFormatSeparator).map((t=>h(t,e))):null===n?n:h(n,e);r[t]=i};case"bracket-separator":return(t,n,r)=>{const o=/(\[])$/.test(t);if(t=t.replace(/\[]$/,""),!o)return void(r[t]=n?h(n,e):n);const a=null===n?[]:h(n,e).split(e.arrayFormatSeparator);void 0!==r[t]?r[t]=[...r[t],...a]:r[t]=a};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[...[n[e]].flat(),t]:n[e]=t}}}(t),r=Object.create(null);if("string"!==typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,"")))return r;for(const o of e.split("&")){if(""===o)continue;const e=t.decode?o.replaceAll("+"," "):o;let[a,i]=p(e,"=");void 0===a&&(a=e),i=void 0===i?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?i:h(i,t),n(h(a,t),i,r)}for(const[o,a]of Object.entries(r))if("object"===typeof a&&null!==a&&"string"!==t.types[o])for(const[e,n]of Object.entries(a)){const r=t.types[o]?t.types[o].replace("[]",""):void 0;a[e]=w(n,t,r)}else"object"===typeof a&&null!==a&&"string"===t.types[o]?r[o]=Object.values(a).join(t.arrayFormatSeparator):r[o]=w(a,t,t.types[o]);return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce(((e,t)=>{const n=r[t];return e[t]=Boolean(n)&&"object"===typeof n&&!Array.isArray(n)?v(n):n,e}),Object.create(null))}function C(e,t){if(!e)return"";g((t={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...t}).arrayFormatSeparator);const n=n=>t.skipNull&&f(e[n])||t.skipEmptyString&&""===e[n],r=function(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const o=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[y(t,e),"[",o,"]"].join("")]:[...n,[y(t,e),"[",y(o,e),"]=",y(r,e)].join("")]};case"bracket":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[y(t,e),"[]"].join("")]:[...n,[y(t,e),"[]=",y(r,e)].join("")];case"colon-list-separator":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[y(t,e),":list="].join("")]:[...n,[y(t,e),":list=",y(r,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t="bracket-separator"===e.arrayFormat?"[]=":"=";return n=>(r,o)=>void 0===o||e.skipNull&&null===o||e.skipEmptyString&&""===o?r:(o=null===o?"":o,0===r.length?[[y(n,e),t,y(o,e)].join("")]:[[r,y(o,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,y(t,e)]:[...n,[y(t,e),"=",y(r,e)].join("")]}}(t),o={};for(const[i,c]of Object.entries(e))n(i)||(o[i]=c);const a=Object.keys(o);return!1!==t.sort&&a.sort(t.sort),a.map((n=>{const o=e[n];return void 0===o?"":null===o?y(n,t):Array.isArray(o)?0===o.length&&"bracket-separator"===t.arrayFormat?y(n,t)+"[]":o.reduce(r(n),[]).join("&"):y(n,t)+"="+y(o,t)})).filter((e=>e.length>0)).join("&")}function S(e,t){t={decode:!0,...t};let[n,r]=p(e,"#");return void 0===n&&(n=e),{url:n?.split("?")?.[0]??"",query:k(E(e),t),...t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:h(r,t)}:{}}}function O(e,t){t={encode:!0,strict:!0,[m]:!0,...t};const n=b(e.url).split("?")[0]||"";let r=C({...k(E(e.url),{sort:!1}),...e.query},t);r&&=`?${r}`;let o=function(e){let t="";const n=e.indexOf("#");return-1!==n&&(t=e.slice(n)),t}(e.url);if("string"===typeof e.fragmentIdentifier){const r=new URL(n);r.hash=e.fragmentIdentifier,o=t[m]?r.hash:`#${e.fragmentIdentifier}`}return`${n}${r}${o}`}function j(e,t,n){n={parseFragmentIdentifier:!0,[m]:!1,...n};const{url:r,query:o,fragmentIdentifier:a}=S(e,n);return O({url:r,query:l(o,t),fragmentIdentifier:a},n)}function _(e,t,n){return j(e,Array.isArray(t)?e=>!t.includes(e):(e,n)=>!t(e,n),n)}const P=r}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkharperdb_studio=self.webpackChunkharperdb_studio||[]).push([[833],{8040:(e,a,t)=>{t.d(a,{A:()=>o});t(9950);var r=t(4414);const o=function(e){let{message:a,options:t,close:o}=e;return(0,r.jsxs)("button",{type:"button",tabIndex:"0",className:`alert ${t.type}`,onClick:o,children:[(0,r.jsxs)("div",{className:"text-white icon",children:["info"===t.type&&(0,r.jsx)("i",{className:"fa fa-lg fa-info-circle"}),"success"===t.type&&(0,r.jsx)("i",{className:"fa fa-lg fa-check-circle"}),"error"===t.type&&(0,r.jsx)("i",{className:"fa fa-lg fa-exclamation-circle"})]}),(0,r.jsx)("div",{className:"text-white message",children:a})]})}},3150:(e,a,t)=>{t.d(a,{A:()=>c});t(9950);var r=t(4084),o=t(8156),s=t(7176),n=t(6114),l=t(3452),i=t(4414);const c=function(e){let{error:a,componentStack:t,resetErrorBoundary:c,extraClass:u}=e;return(0,i.jsx)("div",{className:"d-flex justify-content-center align-items-center auth-centered-container",children:(0,i.jsx)(r.A,{className:`error-boundary mb-3 w-400 ${u}`,children:(0,i.jsxs)(o.A,{children:[(0,i.jsxs)("b",{children:["Component Error ",(new Date).toLocaleTimeString()]}),(0,i.jsx)("hr",{className:"my-1"}),(0,i.jsx)("div",{className:"error-message",children:a.message}),(0,i.jsx)("hr",{className:"my-1"}),(0,i.jsx)("div",{className:"stack-trace",children:(0,i.jsx)("pre",{children:t})}),(0,i.jsxs)(s.A,{children:[(0,i.jsx)(n.A,{children:(0,i.jsx)(l.A,{color:"danger",block:!0,href:"https://harperdbhelp.zendesk.com/hc/en-us/requests/new",target:"_blank",rel:"noopener noreferrer",children:"Create A Support Ticket"})}),(0,i.jsx)(n.A,{children:(0,i.jsx)(l.A,{color:"success",block:!0,onClick:c,children:"Retry Component Load"})})]})]})})})}},884:(e,a,t)=>{t.d(a,{A:()=>l});t(9950);var r=t(4664),o=t(3150),s=t(5996),n=t(4414);const l=function(e){let{error:a,componentStack:t,resetErrorBoundary:l}=e;return(0,n.jsxs)("div",{id:"login-form",children:[(0,n.jsx)("div",{id:"login-logo",title:"Harper Logo"}),(0,n.jsxs)("div",{className:"version",children:["Studio v",s.A.studio_version]}),(0,n.jsx)(o.A,{error:a,componentStack:t}),(0,n.jsx)("div",{className:"text-center",children:(0,n.jsx)(r.k2,{to:"/",className:"login-nav-link",onClick:l,children:"Back to Login"})})]})}},4979:(e,a,t)=>{t.d(a,{A:()=>c});var r=t(4084),o=t(8156),s=t(7176),n=t(6114),l=(t(9950),t(4664)),i=t(4414);const c=function(e){let{header:a,body:t,spinner:c,links:u=!1,relative:d=!1}=e;return(0,i.jsxs)("div",{className:"loader "+(d?"relative":""),children:[(0,i.jsx)(r.A,{className:"mb-3",children:(0,i.jsxs)(o.A,{className:"text-center",children:[(0,i.jsxs)("div",{className:"mb-3",children:["\xa0",a,"\xa0"]}),(0,i.jsxs)("div",{className:"mt-2",children:["\xa0",c&&(0,i.jsx)("i",{className:"fa fa-spinner fa-spin"}),"\xa0"]}),(0,i.jsxs)("div",{className:"mt-2",children:["\xa0",t,"\xa0"]})]})}),u?(0,i.jsx)(s.A,{children:u.map((e=>(0,i.jsx)(n.A,{className:`login-nav-link-holder ${e.className||""}`,children:(0,i.jsx)(l.k2,{to:e.to,className:"login-nav-link",children:e.text})},e.to)))}):(0,i.jsx)("div",{className:"login-nav-link",children:"\xa0"})]})}},3628:(e,a,t)=>{t.d(a,{A:()=>s});var r=t(4038),o=t(5996);const s=async e=>{let{type:a="studio component",status:t="warn",url:s,operation:n,request:l,error:i,customer_id:c,compute_stack_id:u}=e,d=!1;try{var p;d=JSON.parse(localStorage.getItem("persistedUser"));const e={type:a,status:"studio component"===a?"warn":t,environment:o.A.env,user:(null===(p=d)||void 0===p?void 0:p.email)||"unknown",customer_id:c,compute_stack_id:u,url:s,operation:n,request:{...l,password:null!==l&&void 0!==l&&l.password?"xxxxxxxxx":void 0},error:i,timestamp:Date.now()},m=await(0,r.hd)(`${o.A.lms_api_url}addError`,{method:"POST",body:JSON.stringify(e),headers:{"Content-Type":"application/json",authorization:void 0}}),_=await m.json();(_.body||_).error||console.log("Reported ",o.A.env,e.status,a,n)}catch(m){console.log(m)}}},8342:(e,a,t)=>{t.d(a,{A:()=>n});var r=t(5553),o=t(3628),s=t(5996);const n=async()=>{let e=null;try{e=[{value:"ap-west",label:"Mumbai, IN",country:"in"},{value:"ca-central",label:"Toronto, CA",country:"ca"},{value:"ap-southeast",label:"Sydney, AU",country:"au"},{value:"us-central",label:"Dallas, TX",country:"us"},{value:"us-ord",label:"Chicago, IL",country:"us"},{value:"us-west",label:"Fremont, CA",country:"us"},{value:"us-southeast",label:"Atlanta, GA",country:"us"},{value:"us-east",label:"Newark, NJ",country:"us"},{value:"us-lax",label:"Los Angeles, CA",country:"us"},{value:"us-mia",label:"Miami, FL",country:"us"},{value:"us-sea",label:"Seattle, WA",country:"us"},{value:"us-iad",label:"Washington, DC",country:"us"},{value:"eu-west",label:"London, UK",country:"uk"},{value:"ap-south",label:"Singapore, SG",country:"sg"},{value:"eu-central",label:"Frankfurt, DE",country:"de"},{value:"ap-northeast",label:"Tokyo, JP",country:"jp"},{value:"se-sto",label:"Stockholm, SE",country:"se"},{value:"nl-ams",label:"Amsterdam, NL",country:"nl"},{value:"fr-par",label:"Paris, FR",country:"fr"},{value:"es-mad",label:"Madrid, ES",country:"es"},{value:"jp-osa",label:"Osaka, JP",country:"jp"},{value:"in-maa",label:"Chennai, IN",country:"in"},{value:"id-cgk",label:"Jakarta, ID",country:"id"},{value:"br-gru",label:"S\xe3o Paulo, BR",country:"br"},{value:"br-gru",label:"S\xe3o Paulo, BR",country:"br"}].sort(((e,a)=>e.label<a.label?-1:1));let a=[];return Array.isArray(e)&&(a=e),r.A.update((e=>{e.akamaiRegions=a}))}catch(a){return(0,o.A)({type:"lms data",status:"error",url:s.A.lms_api_url,operation:"getAkamaiRegions",error:{catch:a.toString()}})}}},2676:(e,a,t)=>{t.d(a,{A:()=>l});var r=t(2714),o=t(5553),s=t(5996),n=t(3628);const l=async()=>{let e=null;try{return e=await(0,r.A)({endpoint:"getCurrentVersion",method:"POST"}),e.number?(e.studio||(e.studio=s.A.studio_version),o.A.update((a=>{a.version=e}))):!1}catch(a){return(0,n.A)({type:"lms data",status:"error",url:s.A.lms_api_url,operation:"getCurrentVersion",error:{catch:a.toString()}})}}},2763:(e,a,t)=>{t.d(a,{A:()=>u});var r=t(2714),o=t(5553),s=t(3628),n=t(2434),l=t(2696),i=t(5996);const c={dev:{cloud_compute:"prod_Gh1XXQx6J8YaJl",local_compute:"prod_GoB3yLzygPeGMu",wavelength_compute:"prod_KloxOQofDaLs7q",akamai_compute:"prod_O2DOH61yn3qP6g",cloud_storage:"prod_GoUJnVwOYvTjU9"},stage:{cloud_compute:"prod_Gh1XXQx6J8YaJl",local_compute:"prod_GoB3yLzygPeGMu",wavelength_compute:"prod_KloxOQofDaLs7q",akamai_compute:"prod_O2DOH61yn3qP6g",cloud_storage:"prod_GoUJnVwOYvTjU9"},prod:{cloud_compute:"prod_GdDIHGH6lzEqgv",local_compute:"prod_H0Xx9dKkQqhMx9",wavelength_compute:"prod_KlorPRd9r1RKcz",akamai_compute:"prod_O7j9wiS1g7kPZU",cloud_storage:"prod_H0XnsrToBa7a7G"}},u=async()=>{try{const e=await(0,r.A)({endpoint:"getProducts",method:"POST"});return!e.error&&o.A.update((a=>{var t,r,o,s,u;a.products={cloud_storage:(0,l.A)((null===(t=e.find((e=>e.id===c[i.A.env].cloud_storage)))||void 0===t?void 0:t.plans.filter((e=>!e.metadata.prepaid)))||[]),cloud_compute:(0,n.A)((null===(r=e.find((e=>e.id===c[i.A.env].cloud_compute)))||void 0===r?void 0:r.plans.filter((e=>!e.metadata.prepaid)))||[]),wavelength_compute:(0,n.A)((null===(o=e.find((e=>e.id===c[i.A.env].wavelength_compute)))||void 0===o?void 0:o.plans.filter((e=>!e.metadata.prepaid)))||[]),akamai_compute:(0,n.A)((null===(s=e.find((e=>e.id===c[i.A.env].akamai_compute)))||void 0===s?void 0:s.plans.filter((e=>!e.metadata.prepaid)))||[]),local_compute:(0,n.A)((null===(u=e.find((e=>e.id===c[i.A.env].local_compute)))||void 0===u?void 0:u.plans.filter((e=>!e.metadata.prepaid)))||[])}}))}catch(e){return(0,s.A)({type:"lms data",status:"error",url:i.A.lms_api_url,operation:"getProducts",error:{catch:e.toString()}})}}},7806:(e,a,t)=>{t.d(a,{A:()=>l});var r=t(2714),o=t(5553),s=t(3628),n=t(5996);const l=async()=>{let e=null;try{e=await(0,r.A)({endpoint:"getRegions",method:"POST"});let a=[];return Array.isArray(e)&&(a=e),o.A.update((e=>{e.regions=a}))}catch(a){return(0,s.A)({type:"lms data",status:"error",url:n.A.lms_api_url,operation:"getRegions",error:{catch:a.toString()}})}}},3304:(e,a,t)=>{t.d(a,{A:()=>l});var r=t(2714),o=t(5553),s=t(3628),n=t(5996);const l=async e=>{let{email:a,pass:t,loggingIn:l=!1,signal:i}=e,c=null;try{if(c=await(0,r.A)({endpoint:"getUser",method:"POST",signal:i,payload:{email:a,password:t,loggingIn:l}}),c.error&&l)return o.A.update((e=>{e.auth={...c,time:Date.now()}}));if(c.error)return!1;c.orgs?Array.isArray(c.orgs)||(c.orgs=[c.orgs]):c.orgs=[{customer_id:c.customer_id.toString(),customer_name:`${c.firstname}'s Org`,status:"owner"}];const e={email:a,pass:t,...c};return o.A.update((a=>{a.auth=e})),e}catch(u){return l||(0,s.A)({type:"lms data",status:"error",url:n.A.lms_api_url,operation:"getUser",error:{catch:u.message}}),o.A.update((e=>{e.auth={error:!0,message:u.message,time:Date.now()}}))}}},1129:(e,a,t)=>{t.d(a,{A:()=>l});var r=t(2714),o=t(5553),s=t(3628),n=t(5996);const l=async()=>{let e=null;try{e=await(0,r.A)({endpoint:"wl/getWavelengthRegions",method:"POST"});let a=[];return Array.isArray(e)&&(a=e.map((e=>({label:`${e.communications_service_provider.replace(/(^\w{1})|(\s+\w{1})/g,(e=>e.toUpperCase()))} / ${e.location.replace(/(^\w{1})|(\s+\w{1})/g,(e=>e.toUpperCase()))}`,value:e.wavelength_zone_id})))),o.A.update((e=>{e.wavelengthRegions=a}))}catch(a){return(0,s.A)({type:"lms data",status:"error",url:n.A.lms_api_url,operation:"getWavelengthRegions",error:{catch:a.toString()}})}}},2714:(e,a,t)=>{t.d(a,{A:()=>n});var r=t(4038),o=t(5996),s=t(3628);const n=async e=>{let{endpoint:a,payload:t,auth:n,signal:l}=e;const i={type:"lms api",status:"error",url:o.A.lms_api_url,operation:a,request:t,customer_id:null===t||void 0===t?void 0:t.customer_id,compute_stack_id:null===t||void 0===t?void 0:t.compute_stack_id};try{const e=await(0,r.hd)(`${o.A.lms_api_url}${a}`,{signal:l,method:"POST",body:JSON.stringify(t),headers:null!==n&&void 0!==n&&n.email&&null!==n&&void 0!==n&&n.pass?{"Content-Type":"application/json",authorization:`Basic ${btoa(`${n.email}:${n.pass}`)}`}:{"Content-Type":"application/json"}}),c=await e.json(),u=c.body||c;return u.errorType?((0,s.A)({...i,status:"warn",error:u}),{error:!0,message:u.errorMessage}):u.error||"Internal server error"===u.message?(t.loggingIn||(0,s.A)({...i,error:u}),{error:!0,message:u.message.replace(/Validation error:|Throttling error:|Bad request:|Internal Server Error:|Unauthorized:|StripeInvalidRequestError:|TypeError:/g,"").trim()||"The server did not respond"}):u}catch(c){return["Aborted","Network request failed"].includes(c.message)||"TypeError: Network request failed"===c||(0,s.A)({...i,error:{catch:c.message}}),{error:!0,message:c.message}}}},5971:(e,a,t)=>{t.d(a,{A:()=>r});const r=e=>{document.getElementById("dynamic-favicon").href=`/images/favicon_${e||"purple"}.png`}},7372:(e,a,t)=>{t.d(a,{A:()=>d});var r=t(2676),o=t(2763),s=t(7806),n=t(1129),l=t(8342),i=t(5553),c=t(1659),u=t(5996);const d=e=>{var a;let{currentPath:t,navigate:d,setFetchingUser:p,persistedUser:m,setPersistedUser:_,instanceAuths:v,controller:g}=e;return(e=>{const a=window.location.host.indexOf("akamai")>=0,t=a?["akamai"]:["purple","light","dark"];i.A.update((r=>{r.theme=1===t.length?t[0]:t.indexOf(e)>=0?e:"dark",r.themes=t,r.is_akamai=a}))})(m.theme),u.A.is_local_studio?(i.A.update((e=>{e.instances=[{compute_stack_id:"local",url:u.A.local_studio_dev_url||"/",instance_name:"local"}]})),p(!1),null!==v&&void 0!==v&&null!==(a=v.local)&&void 0!==a&&a.valid?(p(!1),setTimeout(d("/o/local/i/local/browse"),10)):d("/")):["/sign-up","/reset-password","/resend-registration-email"].includes(t)?(p(!1),_({})):["/sign-in"].includes(t)?d("/"):(null!==m&&void 0!==m&&m.email?(0,c.A)({auth:m,controller:g,setFetchingUser:p,loggingIn:!0}):p(!1),(0,r.A)(),(0,o.A)(),(0,s.A)(),(0,n.A)(),(0,l.A)(),i.A.update((e=>{e.auth={email:null===m||void 0===m?void 0:m.email,pass:null===m||void 0===m?void 0:m.pass}})))}},1659:(e,a,t)=>{t.d(a,{A:()=>o});var r=t(3304);const o=async e=>{let{auth:a,loggingIn:t=!1,controller:o,setFetchingUser:s=!1}=e;null!==a&&void 0!==a&&a.email&&null!==a&&void 0!==a&&a.pass&&(o=new AbortController,s&&s(!0),await(0,r.A)({...a,loggingIn:t,signal:o.signal}),s&&s(!1))}},2434:(e,a,t)=>{t.d(a,{A:()=>o});var r=t(4549);const o=e=>{const a=[];return e.map((e=>{let{id:t,amount_decimal:o,interval:s,amount:n,active:l,subscription_id:i,name:c,quantity:u,available:d,metadata:{ram_allocation:p,instance_type:m,has_gpus:_}}=e;const v=i?0:parseInt(o,10)/100,g=(0,r.A)(n),h=i?c:"0"===o?"FREE":`${g}`,A=i?c:"0"===o?"FREE":`${g}/${s}`,y=!!p&&parseInt(p,10),b=y/1024+"GB",x=`${b} RAM ${_?"+ GPU Support ":""}\u2022 ${i?`${c} \u2022 ${d} remaining`:"0"!==o?`${g}/${s}`:"FREE"} ${l?"":"(legacy)"}`;return y&&a.push({label:x,value:{active:l,instance_type:m,stripe_plan_id:t,compute_interval:s,compute_subscription_name:c,compute_subscription_id:i,compute_quantity:u,compute_quantity_available:d,compute_ram:y,compute_ram_string:b,compute_price:v,compute_comma_amount:g,compute_price_string:h,compute_price_string_with_interval:A}})})),a.sort(((e,a)=>e.value.compute_ram===a.value.compute_ram?e.value.compute_subscription_name>a.value.compute_subscription_name?1:-1:e.value.compute_ram-a.value.compute_ram))}},2696:(e,a,t)=>{t.d(a,{A:()=>o});var r=t(4549);const o=e=>{const a=[];return e.map((e=>{let{tiers:t,interval:o,active:s,id:n,subscription_id:l,name:i,available:c}=e;const u=t.find((e=>!!e.up_to)).up_to;return[...new Set([u,10,100,250,500,1e3,1500,2e3,2500,3e3,3500,4e3,4500,5e3,5500,6e3,6500,7e3,7500,8e3,8500,9e3,9500,1e4])].filter((e=>!l||e!==u)).map((e=>{const u=t.find((a=>a.up_to&&e<=a.up_to||!a.up_to)),d=l?0:e*(u.unit_amount/100),p=l?i:d?`$${(0,r.A)(d.toFixed(2))}`:"FREE",m=l?i:d?`$${(0,r.A)(d.toFixed(2))}/${o}`:"FREE",_=e>=1e3?e/1e3+"TB":`${e}GB`,v=c?c>1e3?`${(c/1024).toFixed(2)}TB`:`${c}GB`:0,g=`${_} \u2022 ${l?`${i} \u2022 ${v} remaining`:d?`$${(0,r.A)(d.toFixed(2))}/${o}`:"FREE"} ${s?"":"(legacy)"}`;return a.push({label:g,value:{active:s,data_volume_size:e,iops:3e3,storage_interval:o,stripe_storage_plan_id:n,storage_subscription_id:l,storage_subscription_name:i,storage_quantity_available:c,storage_price:d,storage_price_string:p,storage_price_string_with_interval:m,data_volume_size_string:_}})}))})),a.sort(((e,a)=>e.value.data_volume_size===a.value.data_volume_size?e.value.storage_subscription_name>a.value.storage_subscription_name?1:-1:e.value.data_volume_size-a.value.data_volume_size))}},5553:(e,a,t)=>{t.d(a,{A:()=>r});const r=new(t(6713).il)({auth:!1,customer:!1,users:!1,products:!1,regions:!1,integrations:!1,subscriptions:!1,instances:!1,alarms:!1,alarmsError:!1,hasCard:!1,lastUpdate:!1,orgSearch:"",filterSearch:"",filterLocal:!0,filterCloud:!0,version:!1,theme:"dark",postmanCollection:!1})},5283:(e,a,t)=>{t.d(a,{A:()=>r});const r=(0,t(6997).A)("persistedUser")},4549:(e,a,t)=>{t.d(a,{A:()=>r});const r=e=>e&&e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkharperdb_studio=self.webpackChunkharperdb_studio||[]).push([[417],{8086:(e,s,r)=>{r.r(s),r.d(s,{default:()=>N});var a=r(9950),t=r(4084),l=r(8156),c=r(7176),i=r(6114),o=r(3452),n=r(4664),d=r(5488),u=r(6713),m=r(9163),h=r.n(m),p=r(9435),x=r(5269),b=r(127);const f=async e=>{let{auth:s,url:r,id:a}=e;return(0,b.A)({operation:{operation:"get_job",id:a},auth:s,url:r})};var v=r(2773);var g=r(3628),j=r(3150),A=r(4414);const _=function(){const e=(0,n.Zp)(),{schema:s,table:r,customer_id:t,compute_stack_id:l}=(0,n.g)(),m=(0,u.O$)(x.A,(e=>e.auth)),_=(0,u.O$)(x.A,(e=>e.url)),[k,C]=(0,a.useState)({}),[$,w]=(0,a.useState)({}),[N,R]=(0,a.useState)(!1),y=(0,a.useCallback)((async a=>{try{const[{status:c,message:i}]=await f({auth:m,url:_,id:a});return"ERROR"===c?["Error: CSV Load failed from URL","Error downloading CSV file"].some((e=>-1!==i.indexOf(e)))?w({error:"The URL did not return a valid csv file"}):["unsupported content type"].some((e=>-1!==i.indexOf(e)))?w({error:`File error: ${i.split(",")[1]}`}):w({error:i.split(":")[1]}):"COMPLETE"!==c&&N?setTimeout((()=>y(a)),2e3):(x.A.update((e=>{e.lastUpdate=Date.now()})),setTimeout((()=>e(`/o/${t}/i/${l}/browse/${s}/${r}`)),1e3))}catch(c){return setTimeout((()=>{x.A.update((e=>{e.lastUpdate=Date.now()})),e(`/o/${t}/i/${l}/browse/${s}/${r}`)}),2e3)}}),[N]);return h()((async()=>{if($.submitted)if((0,v.A)(k.csv_url)){w({uploading:!0});const e=await(async e=>{let{schema:s,table:r,csv_url:a,auth:t,url:l}=e;return(0,b.A)({operation:{operation:"csv_url_load",action:"insert",transact_to_cluster:!0,schema:s,table:r,csv_url:a},auth:t,url:l})})({schema:s,table:r,csv_url:k.csv_url,auth:m,url:_}),a=e.message.replace("Starting job with id ","");setTimeout((()=>y(a)),1e3)}else w({error:"Please provide a valid URL"}),setTimeout((()=>w({})),2e3)}),[$]),h()((()=>R(!0)),(()=>R(!1)),[]),(0,A.jsx)(p.tH,{onError:(e,s)=>(0,g.A)({error:{message:e.message,componentStack:s}}),FallbackComponent:j.A,children:(0,A.jsxs)(c.A,{children:[(0,A.jsxs)(i.A,{xs:"12",lg:"4",className:"pt-1 pb-2",children:["Import A CSV File From URL",(0,A.jsx)("br",{}),(0,A.jsx)("span",{className:"text-small",children:"csv must be publicly accessible"})]}),(0,A.jsx)(i.A,{xs:"12",lg:"4",children:$.error?(0,A.jsxs)("div",{className:"text-danger csv-status",children:[(0,A.jsx)("i",{className:"fa fa-exclamation-triangle me-3"}),$.error]}):$.uploading?(0,A.jsxs)("div",{className:"csv-status",children:[(0,A.jsx)("i",{className:"fa fa-spin fa-spinner me-3"}),"uploading .csv into ",s,".",r]}):(0,A.jsx)(d.A,{onChange:e=>C({csv_url:e.target.value}),type:"text",invalid:k.csv_url&&!(0,v.A)(k.csv_url),id:"csv_url",title:"csv url",placeholder:"CSV file URL",value:k.csv_url||"",disabled:$.submitted})}),(0,A.jsx)(i.A,{xs:"12",lg:"4",children:$.error?(0,A.jsx)(o.A,{id:"clearURL",block:!0,color:"danger",onClick:()=>{w({}),C({})},children:"Clear URL"}):(0,A.jsx)(o.A,{id:"importFromURL",disabled:!!Object.keys($).length||!(0,v.A)(k.csv_url),block:!0,color:"success",onClick:()=>w({submitted:!0}),children:"Import From URL"})})]})})};var k=r(4472),C=r(5996);var $=r(4549);const w=function(){const e=(0,n.Zp)(),{schema:s,table:r,customer_id:t,compute_stack_id:l}=(0,n.g)(),d=(0,u.O$)(x.A,(e=>e.auth)),m=(0,u.O$)(x.A,(e=>e.url)),[v,_]=(0,a.useState)({}),[w,N]=(0,a.useState)({}),[R,y]=(0,a.useState)(!1),T=(0,a.useCallback)((async a=>{try{const[{status:c,message:i}]=await f({auth:d,url:m,id:a});return"ERROR"===c?-1!==i.indexOf("transaction aborted due to record(s) with a hash value that contains a forward slash")?N({error:"The CSV file contains a row with a forward slash in the hash field."}):-1!==i.indexOf("Invalid column name")?N({error:"The CSV file contains an invalid column name."}):N({error:i}):"COMPLETE"!==c&&R?setTimeout((()=>T(a)),1e3):setTimeout((()=>e(`/o/${t}/i/${l}/browse/${s}/${r}`)),1e3)}catch(c){return setTimeout((()=>{e(`/o/${t}/i/${l}/browse/${s}/${r}`)}),2e3)}}),[R]),S=(0,a.useCallback)((e=>{e.forEach((e=>{const s=new FileReader;s.onabort=()=>N({error:"File reading was aborted"}),s.onerror=()=>N({error:"file reading has failed"}),s.onload=()=>{N({processing:!0});const e=s.result.split(/\r\n|\n/).filter((e=>e.trim().length)).length-1;_({records:e,csv_file:s.result}),N({processed:!0})},e.size>C.A.max_file_upload_size?N({error:"File exceeds 10MB Limit. Use URL Loader Above."}):s.readAsText(e)}))}),[]);return h()((async()=>{if(w.submitted)if(v.csv_file){N({uploading:!0});const e=await(async e=>{let{schema:s,table:r,csv_file:a,auth:t,url:l}=e;return(0,b.A)({operation:{operation:"csv_data_load",action:"insert",transact_to_cluster:!0,schema:s,table:r,data:a},auth:t,url:l})})({schema:s,table:r,csv_file:v.csv_file,auth:d,url:m}),a=e.message.replace("Starting job with id ","");setTimeout((()=>T(a)),1e3)}else N({error:"Please select a valid CSV file"})}),[w]),h()((()=>y(!0)),(()=>y(!1)),[]),(0,A.jsx)(p.tH,{onError:(e,s)=>(0,g.A)({error:{message:e.message,componentStack:s}}),FallbackComponent:j.A,children:(0,A.jsxs)(c.A,{children:[(0,A.jsxs)(i.A,{xs:"12",lg:"4",className:"pt-1 pb-2",children:["Upload A CSV File",(0,A.jsx)("br",{}),(0,A.jsx)("span",{className:"text-small",children:"from your computer (10MB limit)"})]}),(0,A.jsx)(i.A,{xs:"12",lg:"4",children:w.error?(0,A.jsx)("div",{className:"text-danger csv-status",children:w.error}):w.uploading?(0,A.jsxs)("div",{className:"csv-status",children:[(0,A.jsx)("i",{className:"fa fa-spin fa-spinner me-3"}),"inserting ",(0,$.A)(v.records)," records into ",s,".",r]}):w.processed?(0,A.jsx)(o.A,{id:"replaceFile",block:!0,color:"default",onClick:()=>{N({}),_({})},children:(0,A.jsxs)("span",{className:"text-nowrap text-small",children:[(0,A.jsx)("i",{className:"fa fa-thumbs-up text-success me-3"}),(0,$.A)(v.records)," records. Click here to replace file."]})}):w.processing?(0,A.jsxs)("div",{className:"csv-status",children:[(0,A.jsx)("i",{className:"fa fa-spin fa-spinner"})," processing ",(0,$.A)(v.records)," records"]}):(0,A.jsx)(k.Ay,{onDrop:S,children:e=>{let{getRootProps:s,getInputProps:r}=e;return(0,A.jsxs)("div",{...s(),className:"drop-zone",children:[(0,A.jsx)("input",{...r()}),"Click or Drag to select a .csv file"]})}})}),(0,A.jsx)(i.A,{xs:"12",lg:"4",children:w.error?(0,A.jsx)(o.A,{id:"clearFile",color:"danger",block:!0,className:"px-5 clear-files",onClick:()=>{N({}),_({})},children:"Clear File"}):(0,A.jsxs)(o.A,{id:"insertRecords",block:!0,disabled:w.uploading||!v.csv_file,color:"success",onClick:()=>N({submitted:!0}),children:["Insert ",(0,$.A)(v.records)," Records"]})})]})})};const N=function(){const e=(0,n.Zp)(),{schema:s,table:r,customer_id:a,compute_stack_id:d}=(0,n.g)();return(0,A.jsxs)("div",{id:"csv-upload",children:[(0,A.jsxs)("span",{className:"floating-card-header",children:[s," > ",r," > csv upload"]}),(0,A.jsx)(t.A,{className:"my-3",children:(0,A.jsxs)(l.A,{children:[(0,A.jsx)(_,{}),(0,A.jsx)("hr",{className:"my-3"}),(0,A.jsx)(w,{}),(0,A.jsx)("hr",{className:"my-3"}),(0,A.jsxs)(c.A,{children:[(0,A.jsxs)(i.A,{lg:"8",className:"py-1 d-none d-lg-inline-block",children:["Return to Table",(0,A.jsx)("br",{}),(0,A.jsx)("span",{className:"text-small",children:"do not upload csv data"})]}),(0,A.jsx)(i.A,{xs:"12",lg:"4",children:(0,A.jsx)(o.A,{id:"returnToTable",block:!0,color:"grey",onClick:()=>e(`/o/${a}/i/${d}/browse/${s}/${r}`),children:"Return to Table"})})]})]})})]})}},2773:(e,s,r)=>{r.d(s,{A:()=>a});const a=e=>!!new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(e)}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkharperdb_studio=self.webpackChunkharperdb_studio||[]).push([[702],{6816:(e,t,a)=>{a.r(t),a.d(t,{default:()=>_});var n=a(9950),r=a(4664),s=a(135),o=a(4084),l=a(8156),i=a(6713),c=a(5269),d=a(5996),u=a(7176),h=a(6114),g=a(3452),f=a(4549),p=a(5502),m=a(4414);const b=function(e){let{totalRecords:t,loading:a,loadingFilter:n,refresh:s,autoRefresh:o,onlyCached:l,toggleAutoRefresh:i,toggleOnlyCached:c,toggleFilter:d}=e;const b=(0,r.Zp)(),{compute_stack_id:x,schema:v,table:y,customer_id:j}=(0,r.g)();return(0,m.jsxs)(u.A,{className:"floating-card-header",children:[(0,m.jsxs)(h.A,{children:[v,"\xa0",y&&`> ${y} > `,o||!a&&!n?(0,m.jsxs)("span",{children:[(0,f.A)(t)," record",1!==t?"s":""]}):(0,m.jsx)("i",{className:"fa fa-spinner fa-spin"})]}),(0,m.jsxs)(h.A,{className:"text-end",children:[(0,m.jsx)(g.A,{id:"refresh",color:"link",tabIndex:"0",title:`Refresh table ${y}`,className:"me-2",onClick:s,children:(0,m.jsx)("i",{className:"fa "+(a?"fa-spinner fa-spin":"fa-sync-alt")})}),(0,m.jsxs)(g.A,{id:"toggleAutoRefresh",color:"link",tabIndex:"0",title:"Turn on Auto-Refresh",onClick:i,children:[(0,m.jsx)("span",{className:"me-2",children:"auto"}),(0,m.jsx)("i",{className:"fa fa-lg fa-toggle-"+(o?"on":"off")})]}),(0,m.jsx)("span",{className:"mx-3 text",children:"|"}),(0,m.jsxs)(g.A,{id:"toggleOnlyCached",color:"link",tabIndex:"0",title:"Only show cached data",onClick:c,children:[(0,m.jsx)("span",{className:"me-2",children:"only cached"}),(0,m.jsx)("i",{className:"fa fa-lg fa-toggle-"+(l?"on":"off")})]}),(0,m.jsx)("span",{className:"mx-3 text",children:"|"}),(0,m.jsx)(g.A,{id:"toggleSearch",color:"link",tabIndex:"0",title:`Filter table ${y}`,className:"me-3",onClick:d,children:(0,m.jsx)("i",{className:"fa fa-search"})}),(0,m.jsx)(g.A,{id:"addRecord",color:"link",tabIndex:"0",title:`Add new record to table ${y}`,className:"me-3",onClick:()=>{(0,p.Ak)(),b(`/o/${j}/i/${x}/browse/${v}/${y}/add`)},children:(0,m.jsx)("i",{className:"fa fa-plus"})}),(0,m.jsx)(g.A,{id:"bulkUpload",color:"link",tabIndex:"0",className:"me-2",title:`Bulk Upload CSV to ${y}`,onClick:()=>b(`/o/${j}/i/${x}/browse/${v}/${y}/csv`),children:(0,m.jsx)("i",{className:"fa fa-file-upload"})})]})]})};var x=a(4343),v=a(127);const y=async e=>{let{schema:t,table:a,filtered:n,pageSize:r,onlyCached:s,sorted:o,page:l,auth:i,url:c,signal:d,signal2:u}=e,h=!1,g=0,f=1,m=[],b=!1,x=!1,y=[],j=["*"],A=[];const w=l*r;try{let e=(0,p.b5)(t,a);if(e||(e=await(async e=>{let{auth:t,url:a,schema:n,table:r,signal:s}=e;return(0,v.A)({operation:{operation:"describe_table",schema:n,table:r},auth:t,url:a,signal:s})})({auth:i,url:c,schema:t,table:a,signal:u}),(0,p.Iz)(t,a,e)),e.error)throw b=[],new Error("table");const{record_count:n,attributes:s,hash_attribute:o}=e;y=s,b=s.map((e=>e.attribute)),void 0===o?(x="$id",j=["$id","*"]):x=o,g=n,y=s,f=g&&Math.ceil(g/r)}catch(S){h=S.message}if(g)try{if(m=n.length?await(async e=>{let{auth:t,url:a,schema:n,table:r,operator:s,get_attributes:o,limit:l,offset:i,onlyCached:c,conditions:d,signal:u}=e;return(0,v.A)({operation:{operation:"search_by_conditions",schema:n,table:r,operator:s,get_attributes:o,limit:l,offset:i,conditions:d,onlyIfCached:c,noCacheStore:c},auth:t,url:a,signal:u})})({schema:t,table:a,operator:"and",get_attributes:j,limit:r,offset:w,sort:o.length?{attribute:o[0].id,descending:o[0].desc}:void 0,conditions:n.map((e=>({search_attribute:e.id,search_type:"contains",search_value:e.value}))),auth:i,url:c,signal:d,onlyCached:s}):await(async e=>{let{auth:t,url:a,schema:n,table:r,search_attribute:s,search_value:o,get_attributes:l,limit:i,offset:c,sort:d,onlyCached:u,signal:h}=e;return(0,v.A)({operation:{operation:"search_by_value",schema:n,table:r,search_attribute:s,search_value:o,get_attributes:l,limit:i,offset:c,sort:d,onlyIfCached:u,noCacheStore:u},auth:t,url:a,signal:h})})({schema:t,table:a,search_attribute:x,search_value:"*",get_attributes:j,limit:r,offset:w,sort:o.length?{attribute:o[0].id,descending:o[0].desc}:void 0,auth:i,url:c,signal:d,onlyCached:s}),m.error||!Array.isArray(m))throw new Error(m.message)}catch(S){h=S.message}A=((e,t)=>{if(!e.length)return[];if(t.length>=8)return[];const a=new Map(t.map(((e,t)=>[e,t]))),n=new Map;for(const r of e)for(const e of Object.keys(r))if(!a.has(e)){const t=n.get(e)||0;n.set(e,t+1)}return Array.from(n).sort(((e,t)=>{let[,a]=e,[,n]=t;return n-a})).map((e=>{let[t]=e;return t})).slice(0,8-t.length)})(m,b),b.push(...A);const C=b.filter((e=>![x,"__createdtime__","__updatedtime__"].includes(e))),N=C.reduce(((e,t)=>({...e,[t]:null})),{});b.includes("__createdtime__")&&C.push("__createdtime__"),b.includes("__updatedtime__")&&C.push("__updatedtime__");const _=(x?[x,...C]:[...C]).map((e=>({Header:"$id"===e?"Primary Key":e.toString(),accessor:t=>t[e.toString()]})));return{newData:m||[],newEntityAttributes:N,newTotalRecords:g,newTotalPages:f,hashAttribute:x,schemaAttributes:y,dataTableColumns:_,error:"table"===h?`You are not authorized to view ${t}:${a}`:h,dynamicAttributesFromDataTable:A}},j=async e=>{let t,a,{schema:n,table:r,filtered:s,pageSize:o,auth:l,url:i,signal:c}=e;try{let e=`SELECT count(*) as newTotalRecords FROM \`${n}\`.\`${r}\` `;s.length&&(e+=`WHERE ${s.map((e=>` \`${e.id}\` LIKE '%${e.value}%'`)).join(" AND ")}`),[{newTotalRecords:a}]=await(async e=>{let{auth:t,url:a,sql:n,signal:r}=e;return(0,v.A)({operation:{operation:"sql",sql:n},auth:t,url:a,signal:r})})({auth:l,url:i,sql:e,signal:c}),t=a&&Math.ceil(a/o)}catch(d){t=1,a=0}return{newTotalRecords:a,newTotalPages:t}};var A=a(5283);let w,C,N;const _=function(e){var t;let{tableState:a,setTableState:u,activeTable:h}=e;const g=(0,r.Zp)(),{compute_stack_id:f,schema:v,table:_,customer_id:S}=(0,r.g)(),P=(0,i.O$)(c.A,(e=>e.auth)),k=(0,i.O$)(c.A,(e=>e.url)),[O,R]=(0,n.useState)(!1),[z,$]=(0,n.useState)(!1),[T,F]=(0,n.useState)(!1),[E,D]=(0,n.useState)(!1),[I,M]=(0,n.useState)(!0),[q,H]=(0,A.A)({});return(0,n.useEffect)((()=>{var e,t,n;null===(e=w)||void 0===e||e.abort(),null===(t=C)||void 0===t||t.abort(),null===(n=N)||void 0===n||n.abort(),D(!1),F(!1);let r=!0;return(async()=>{var e;a.filtered.length||F(!0),w=new AbortController,C=new AbortController;const{newData:t,newTotalRecords:n,newTotalPages:s,newEntityAttributes:o,hashAttribute:l,dynamicAttributesFromDataTable:i,dataTableColumns:c,schemaAttributes:d,error:g}=await y({schema:v,table:_,filtered:a.filtered,pageSize:parseInt(a.pageSize,10),sorted:a.sorted,onlyCached:null===q||void 0===q||null===(e=q.onlyCached)||void 0===e?void 0:e[h],page:a.page,auth:P,url:k,signal:w.signal,signal2:C.signal});r&&(F(!1),t.error?u({...a,tableData:[],error:g}):(a.filtered.length?t.length<a.pageSize?(R(1),$(t.length)):(async()=>{D(!0),R(!1),N=new AbortController;const{newTotalRecords:e,newTotalPages:t}=await j({schema:v,table:_,filtered:a.filtered,pageSize:parseInt(a.pageSize,10),auth:P,url:k,signal:N.signal});r&&(D(!1),R(t),$(e))})():(R(s),$(n)),u({...a,tableData:t,newEntityAttributes:o,hashAttribute:l,dataTableColumns:c,dynamicAttributesFromDataTable:i,schemaAttributes:d,error:g})))})(),()=>{var e,t,a;null===(e=w)||void 0===e||e.abort(),null===(t=C)||void 0===t||t.abort(),null===(a=N)||void 0===a||a.abort(),r=!1}}),[a.sorted,a.page,a.filtered,a.pageSize,q.onlyCached,I,h]),(0,s.A)((()=>a.autoRefresh&&M(Date.now())),d.A.refresh_content_interval),(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(b,{totalRecords:z,loading:T,loadingFilter:E,autoRefresh:a.autoRefresh,onlyCached:null===q||void 0===q||null===(t=q.onlyCached)||void 0===t?void 0:t[h],refresh:()=>{(0,p.Ak)(),M(Date.now())},toggleAutoRefresh:()=>{u({...a,autoRefresh:!a.autoRefresh}),(0,p.Ak)()},toggleOnlyCached:()=>{var e;const t="object"===typeof q.onlyCached?{...q.onlyCached}:{};t[h]=!(null!==q&&void 0!==q&&null!==(e=q.onlyCached)&&void 0!==e&&e[h]),H({...q,onlyCached:t})},toggleFilter:()=>{u({...a,showFilter:!a.showFilter})}}),(0,m.jsx)(o.A,{className:"my-3",children:(0,m.jsx)(l.A,{className:"react-table-holder",children:(0,m.jsx)(x.A,{manual:!0,columns:a.dataTableColumns||[],data:a.tableData||[],error:a.error,tableDescriptionAttributes:a.schemaAttributes,dynamicAttributesFromDataTable:a.dynamicAttributesFromDataTable,currentPage:a.page,pageSize:a.pageSize,totalPages:O||0,showFilter:a.showFilter,sorted:a.sorted.length?a.sorted:[{id:a.hashAttribute,desc:!1}],loading:T&&!a.autoRefresh,onFilteredChange:e=>{u({...a,page:0,filtered:e})},onSortedChange:e=>{u({...a,page:0,sorted:e})},onPageChange:e=>{u({...a,page:e})},onPageSizeChange:e=>{u({...a,page:0,pageSize:e})},onRowClick:e=>{const t=e[a.hashAttribute],n=encodeURIComponent(v),r=encodeURIComponent(_),s=encodeURIComponent(t);g(`/o/${S}/i/${f}/browse/${n}/${r}/edit/${s}`,{state:{hashValue:t}})}})})})]})}},4343:(e,t,a)=>{a.d(t,{A:()=>y});var n=a(9950),r=a(2043),s=a(5488),o=a(9435),l=a(7176),i=a(6114),c=a(4414);const d=e=>{let{headerGroups:t,onSortedChange:a,sorted:n,showFilter:r,dynamicAttributesFromDataTable:s,tableDescriptionAttributes:o}=e;const d=e=>{let t=!1;return o.forEach((a=>{a.attribute===e&&(a.is_primary_key||a.indexed)&&(t=!0)})),t};return t.map((e=>{const{key:t,...o}=e.getHeaderGroupProps();return(0,c.jsxs)("div",{...o,children:[(0,c.jsx)(l.A,{className:"header g-0",children:e.headers.map((e=>{var t,r;return(0,c.jsx)(i.A,{onClick:()=>{var t,r;s&&!s.includes(e.id)&&d(e.id)&&a([{id:e.id,desc:(null===(t=n[0])||void 0===t?void 0:t.id)===e.id&&!(null!==(r=n[0])&&void 0!==r&&r.desc)}])},className:`${(null===(t=n[0])||void 0===t?void 0:t.id)===e.id?"sorted":""} ${null!==(r=n[0])&&void 0!==r&&r.desc?"desc":"asc"} ${-1!==e.id.indexOf("hdb-narrow")?"action":""} px-1 ${s&&!s.includes(e.id)&&d(e.id)?"":"disabled-column"}`,children:(0,c.jsx)("div",{className:"text-renderer",children:e.render("Header")})},e.id)}))}),r&&(0,c.jsx)(l.A,{className:"filter g-0",children:e.headers.map((e=>(0,c.jsx)(i.A,{className:-1!==e.id.indexOf("hdb-narrow")?"action":"",children:e.render("Filter")},e.id)))})]},t)}))};var u=a(3452);const h=function(e){let{page:t,pageSize:a,totalPages:n,onPageChange:r,onPageSizeChange:o,loading:d}=e;return(0,c.jsxs)(l.A,{className:"pagination",children:[(0,c.jsx)(i.A,{xs:"12",sm:"2",className:"previous",children:(0,c.jsx)(u.A,{className:"mb-2 btn-pagination",color:"purple",block:!0,onClick:()=>r(t-1),disabled:!n||0===t,children:(0,c.jsx)("i",{className:"fa fa-chevron-left"})})}),(0,c.jsxs)(i.A,{xs:"12",sm:"4",className:"paginator",children:[(0,c.jsx)("i",{className:"fa fa-book me-2"}),(0,c.jsx)(s.A,{className:"mb-2",type:"number",value:t+1,min:1,max:n,onChange:e=>r(e.target.value-1)}),(0,c.jsxs)("div",{className:"page-count",children:["\xa0/\xa0",d?(0,c.jsx)("i",{className:"fa fa-spinner fa-spin"}):n]})]}),(0,c.jsx)(i.A,{xs:"12",sm:"4",className:"page-size",children:(0,c.jsx)(s.A,{className:"mb-2",type:"select",value:a,onChange:e=>o(e.target.value),children:[20,50,100,250].map((e=>(0,c.jsxs)("option",{value:e,children:[e," rows"]},e)))})}),(0,c.jsx)(i.A,{xs:"12",sm:"2",className:"next",children:(0,c.jsx)(u.A,{className:"mb-2 pull-right btn-pagination",block:!0,color:"purple",onClick:()=>r(t+1),disabled:!n||t+1===n,children:(0,c.jsx)("i",{className:"fa fa-chevron-right"})})})]})};const g=function(e){let{previousPage:t,canPreviousPage:a,pageIndex:n,gotoPage:r,setPageSize:o,pageCount:d,nextPage:h,canNextPage:g,loading:f}=e;return(0,c.jsxs)(l.A,{className:"pagination",children:[(0,c.jsx)(i.A,{xs:"12",sm:"2",className:"previous",children:(0,c.jsx)(u.A,{className:"mb-2 btn-pagination",color:"purple",block:!0,onClick:t,disabled:!d||!a,children:(0,c.jsx)("i",{className:"fa fa-chevron-left"})})}),(0,c.jsxs)(i.A,{xs:"12",sm:"4",className:"paginator",children:[(0,c.jsx)("i",{className:"fa fa-book me-2"}),(0,c.jsx)(s.A,{className:"mb-2",type:"number",value:n+1||1,min:1,max:d,onChange:e=>r(e.target.value?Number(e.target.value)-1:0)}),(0,c.jsxs)("div",{className:"page-count",children:["\xa0/\xa0",f?(0,c.jsx)("i",{className:"fa fa-spinner fa-spin"}):d]})]}),(0,c.jsx)(i.A,{xs:"12",sm:"4",className:"page-size",children:(0,c.jsx)(s.A,{className:"mb-2",type:"select",onChange:e=>{r(0),setTimeout((()=>o(e.target.value)),1e3)},children:[20,50,100,250].map((e=>(0,c.jsxs)("option",{value:e,children:[e," rows"]},e)))})}),(0,c.jsx)(i.A,{xs:"12",sm:"2",className:"next",children:(0,c.jsx)(u.A,{className:"mb-2 pull-right btn-pagination",block:!0,color:"purple",onClick:h,disabled:!d||!g,children:(0,c.jsx)("i",{className:"fa fa-chevron-right"})})})]})};const f=function(e){let{prepareRow:t,row:a,onRowClick:n=!1}=e;return t(a),(0,c.jsx)(l.A,{onClick:()=>n&&n(a.original),className:"g-0",children:a.cells.map((e=>(0,c.jsx)(i.A,{className:-1!==e.column.id.indexOf("hdb-narrow")?"action":"",children:e.render("Cell")},`${e.row.id}-${e.column.id}`)))})};var p=a(3628),m=a(3150);function b(e){let{value:t}=e;return(0,c.jsx)("div",{className:"text-renderer",children:t})}function x(e){let{src:t}=e;const[a,r]=(0,n.useState)(!1),[s,o]=(0,n.useState)(!1);return(0,c.jsxs)("div",{className:"image-renderer",onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1),children:[(0,c.jsx)("i",{className:"fa fa-image"}),a&&s?(0,c.jsxs)("div",{className:"preview-image no-image",children:[(0,c.jsx)("i",{className:"fa fa-ban text-danger"}),(0,c.jsx)("div",{className:"mt-2",children:"image failed to load"})]}):a?(0,c.jsx)("img",{onError:o,alt:t,src:t,className:"preview-image"}):null]})}const v={Filter:e=>{let{column:{filterValue:t,setFilter:a}}=e;return(0,c.jsx)(s.A,{type:"text",value:t||"",onChange:e=>a(e.target.value||void 0)})},Cell:e=>{let{value:t}=e;return(e=>{switch(Object.prototype.toString.call(e)){case"[object Array]":case"[object Object]":return(0,c.jsx)(b,{value:JSON.stringify(e)});case"[object Boolean]":return(0,c.jsx)(b,{value:e?"true":"false"});case"[object String]":return(t=e)&&(t.match(/^https?.*\.(jpeg|jpg|gif|png)$/)||-1!==t.indexOf("data:image"))?(0,c.jsx)(x,{src:e}):(0,c.jsx)(b,{value:e});default:return(0,c.jsx)(b,{value:e})}var t})(t)}};const y=function(e){let{columns:t,data:a,error:s,currentPage:l,pageSize:i,totalPages:u,onFilteredChange:b,onSortedChange:x,onPageChange:y,onPageSizeChange:j,showFilter:A,onRowClick:w,sorted:C,loading:N,dynamicAttributesFromDataTable:_,tableDescriptionAttributes:S,manual:P=!1}=e;const{headerGroups:k,page:O,rows:R,prepareRow:z,state:$,setAllFilters:T,canPreviousPage:F,canNextPage:E,pageOptions:D,pageCount:I,gotoPage:M,nextPage:q,previousPage:H,setPageSize:U}=(0,r.useTable)({columns:t,data:a,defaultColumn:v,onFilteredChange:b,onSortedChange:x,onPageChange:y,onPageSizeChange:j,onRowClick:w,manualPagination:P,manualFilters:P,initialState:{pageIndex:l,pageSize:i}},r.useFilters,r.usePagination),[B,G]=(0,n.useState)(!0),V=P||!O.length?R:O;return(0,n.useEffect)((()=>{!A&&$.filters.length?T([]):b($.filters)}),[$.filters,A]),(0,n.useEffect)((()=>{setTimeout((()=>G(!1)),100)}),[null===V||void 0===V?void 0:V.length]),(0,c.jsxs)(o.tH,{onError:(e,t)=>(0,p.A)({error:{message:e.message,componentStack:t}}),FallbackComponent:m.A,children:[(0,c.jsxs)("div",{className:"react-table-scroller",children:[(0,c.jsx)(d,{headerGroups:k,tableDescriptionAttributes:S,dynamicAttributesFromDataTable:_,onSortedChange:x,sorted:C,showFilter:A}),N||B?(0,c.jsx)("div",{className:"centered text-center",children:(0,c.jsx)("i",{className:"fa fa-spinner fa-spin"})}):V.length?V.map((e=>(0,c.jsx)(f,{row:e,prepareRow:z,onRowClick:w},e.id))):(0,c.jsxs)("div",{className:"centered text-center",children:[(0,c.jsx)("i",{className:"fa fa-exclamation-triangle text-danger"}),(0,c.jsx)("div",{className:"mt-2 text-darkgrey",children:s?`Error loading data: ${s}`:"no records"})]})]}),P?(0,c.jsx)(h,{page:l,pageSize:i,totalPages:u,onPageChange:y,onPageSizeChange:j,loading:N}):(0,c.jsx)(g,{previousPage:H,pageSize:i,canPreviousPage:F,pageIndex:$.pageIndex,pageOptions:D,gotoPage:M,setPageSize:U,pageCount:I,nextPage:q,canNextPage:E,loading:N})]})}},5488:(e,t,a)=>{a.d(t,{A:()=>y});var n=a(9950),r=a(1942),s=a.n(r),o=a(8738),l=a.n(o),i=a(1497);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}var d=["className","cssModule","type","bsSize","valid","invalid","tag","addon","plaintext","innerRef"];function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},u.apply(this,arguments)}function h(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function g(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function p(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var a,n=b(e);if(t){var r=b(this).constructor;a=Reflect.construct(n,arguments,r)}else a=n.apply(this,arguments);return function(e,t){if(t&&("object"===c(t)||"function"===typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return m(e)}(this,a)}}function m(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}var x={children:s().node,type:s().string,size:s().oneOfType([s().number,s().string]),bsSize:s().string,valid:s().bool,invalid:s().bool,tag:i.Wx,innerRef:s().oneOfType([s().object,s().func,s().string]),plaintext:s().bool,addon:s().bool,className:s().string,cssModule:s().object},v=function(e){!function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}(o,e);var t,a,r,s=p(o);function o(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),(t=s.call(this,e)).getRef=t.getRef.bind(m(t)),t.focus=t.focus.bind(m(t)),t}return t=o,(a=[{key:"getRef",value:function(e){this.props.innerRef&&this.props.innerRef(e),this.ref=e}},{key:"focus",value:function(){this.ref&&this.ref.focus()}},{key:"render",value:function(){var e=this.props,t=e.className,a=e.cssModule,r=e.type,s=void 0===r?"text":r,o=e.bsSize,c=e.valid,g=e.invalid,f=e.tag,p=e.addon,m=e.plaintext,b=e.innerRef,x=h(e,d),v=["switch","radio","checkbox"].indexOf(s)>-1,y="select"===s,j="range"===s,A=f||(y||"textarea"===s?s:"input"),w="form-control";m?(w="".concat(w,"-plaintext"),A=f||"input"):j?w="form-range":y?w="form-select":v&&(w=p?null:"form-check-input"),x.size&&/\D/g.test(x.size)&&((0,i.mc)('Please use the prop "bsSize" instead of the "size" to bootstrap\'s input sizing.'),o=x.size,delete x.size);var C=(0,i.qO)(l()(t,g&&"is-invalid",c&&"is-valid",!!o&&(y?"form-select-".concat(o):"form-control-".concat(o)),w),a);return("input"===A||f&&"function"===typeof f)&&(x.type="switch"===s?"checkbox":s),x.children&&!m&&"select"!==s&&"string"===typeof A&&"select"!==A&&((0,i.mc)('Input with a type of "'.concat(s,'" cannot have children. Please use "value"/"defaultValue" instead.')),delete x.children),n.createElement(A,u({},x,{ref:b,className:C,"aria-invalid":g}))}}])&&g(t.prototype,a),r&&g(t,r),Object.defineProperty(t,"prototype",{writable:!1}),o}(n.Component);v.propTypes=x;const y=v}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkharperdb_studio=self.webpackChunkharperdb_studio||[]).push([[972],{1271:(e,t,r)=>{r.r(t),r.d(t,{default:()=>x});var n=r(9950),a=r(4084),o=r(8156),i=r(6713),s=r(7176),c=r(6114),l=r(5488),u=r(3452),f=r(4664),d=r(7348),p=r(127),m=r(5269);var h=r(5900),b=r(4414);const g=function(e){let{items:t,itemType:r,activeSchema:a,toggleDropItem:o,toggleCreate:g,baseUrl:y}=e;const v=(0,f.Zp)(),x=(0,d.MW)(),j=(0,i.O$)(m.A,(e=>e.auth)),A=(0,i.O$)(m.A,(e=>e.url)),[w,N]=(0,n.useState)(!1),[O,k]=(0,n.useState)(!1),[$,S]=(0,n.useState)(!1),[C,D]=(0,n.useState)(!1),[I,R]=(0,n.useState)(!1),_=async e=>{e.preventDefault();let n=!1;if(w&&!t.includes(w)||(k(!0),n=!0),w&&!w.match(/^\w+$/)&&(k(!0),n=!0,x.error("You may only use alphanumeric characters or underscores.")),w&&w.match(/^\d+$/)&&(k(!0),n=!0,x.error("You may not provide a number as a name.")),"table"!==r||$||(n=!0,D(!0)),n)return!1;R(!0);const o={operation:`create_${r}`};"table"===r?(o.schema=a,o.table=w,o.hash_attribute=$):o.schema=w;const i=await(0,p.A)({operation:o,auth:j,url:A});return i.error?(R(!1),g(!1),x.error(i.message)):(0,h.A)({auth:j,url:A})};return(0,n.useEffect)((()=>{o()}),[o]),(0,n.useEffect)((()=>{w&&t.find((e=>e===w))&&v(`${y}/${w}`)}),[t]),(0,b.jsxs)(s.A,{className:"item-row form",children:[(0,b.jsx)(c.A,{className:"input-holder",children:(0,b.jsx)(l.A,{id:"name",invalid:O,onChange:e=>{k(!1),N(e.target.value)},value:w||"",disabled:I,type:"text",name:"name",placeholder:"name"})}),"table"===r&&(0,b.jsx)(c.A,{className:"input-holder",children:(0,b.jsx)(l.A,{id:"hash_attribute",invalid:C,disabled:I,onChange:e=>{D(!1),S(e.target.value)},value:$||"",type:"test",name:"hash_attribute",placeholder:"hash attr."})}),(0,b.jsx)(c.A,{className:"item-action",children:I?(0,b.jsx)(u.A,{id:"creatingItem",color:"success",className:"round",children:(0,b.jsx)("i",{className:"fa fa-spinner fa-spin text-white"})}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(u.A,{id:"createItem",color:"success",className:"round me-1",onClick:_,onKeyDown:e=>13!==e.keyCode||_(e),children:(0,b.jsx)("i",{className:"fa fa-check text-white"})}),(0,b.jsx)(u.A,{id:"toggleCreate",color:"black",className:"round",onClick:()=>g(!1),children:(0,b.jsx)("i",{className:"fa fa-times text-white"})})]})})]})};const y=function(e){let{item:t,itemType:r,baseUrl:a,isActive:o,toggleDropItem:l,isDropping:g,activeSchema:y}=e;const v=(0,f.Zp)(),x=(0,d.MW)(),[j,A]=(0,n.useState)(!1),[w,N]=(0,n.useState)(!1),O=(0,i.O$)(m.A,(e=>e.auth)),k=(0,i.O$)(m.A,(e=>e.url));return(0,b.jsxs)(s.A,{title:`View${o?"ing":""} ${r} ${t}`,className:"item-row "+(o?"active":""),onClick:()=>{!(o||g||j)&&v(`${a}/${t}`),(0,h.A)({auth:O,url:k})},tabIndex:"0",children:[(0,b.jsx)(c.A,{className:"item-label "+(j?"text-danger text-nowrap":""),children:j?`drop ${t}?`:t}),(0,b.jsx)(c.A,{className:"item-action",children:w?(0,b.jsx)(u.A,{tabIndex:"-1",disabled:!0,color:"purple",className:"round",children:(0,b.jsx)("i",{className:"fa fa-spinner fa-spin"})}):j?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(u.A,{id:"confirmDropItem",color:"danger",className:"round me-1",title:`confirm drop ${r} ${t}`,onClick:()=>{A(!1),N(!0),(async()=>{if(!r||!j)return!1;const e={operation:`drop_${r}`};"table"===r?(e.schema=y,e.table=t):e.schema=t;const n=await(0,p.A)({operation:e,auth:O,url:k});n.error?(A(!1),N(!1),x.error(n.message)):(await(0,h.A)({auth:O,url:k}),v(a))})()},children:(0,b.jsx)("i",{className:"text-white fa fa-check"})}),(0,b.jsx)(u.A,{id:"cancelDropItem",color:"black",className:"round",title:`Cancel drop ${r} ${t}`,onClick:()=>{A(!1)},children:(0,b.jsx)("i",{className:"text-white fa fa-times"})})]}):g?(0,b.jsx)(u.A,{id:"dropItem",color:"danger",className:"round",title:`Drop ${r} ${t}`,onClick:()=>{A(t),l(!1)},children:(0,b.jsx)("i",{className:"text-white fa fa-minus"})}):o?(0,b.jsx)(u.A,{tabIndex:"-1",color:"purple",className:"round",children:(0,b.jsx)("i",{className:"fa fa-chevron-right"})}):null})]},t)};const v=function(e){let{items:t,itemType:r,toggleDropItem:n,isDropping:a,toggleCreate:o,isCreating:i,showForm:l}=e;return(0,b.jsxs)(s.A,{className:"floating-card-header",children:[(0,b.jsxs)(c.A,{children:[r,"s"]}),l&&null!==t&&void 0!==t&&t.length?(0,b.jsxs)(c.A,{className:"text-end",children:[(0,b.jsx)(u.A,{id:"toggleRemove",color:"link",title:`Remove ${r}s`,className:"add-remove me-3",onClick:()=>{n(!a),o(!1)},children:(0,b.jsx)("i",{className:"fa fa-minus"})}),(0,b.jsx)(u.A,{id:"toggleCreate",color:"link",title:`Add ${r}`,className:"add-remove me-1",onClick:()=>{o(!i),n(!1)},children:(0,b.jsx)("i",{className:"fa fa-plus"})})]}):null]})};const x=function(e){var t;let{items:r,activeItem:s,activeSchema:c=!1,showForm:l,baseUrl:u,itemType:f}=e;const[d,p]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),j=(0,i.O$)(m.A,(e=>e.registration)),[A,w]=(null===j||void 0===j||null===(t=j.version)||void 0===t?void 0:t.split("."))||[],N=parseFloat(`${A}.${w}`);return(0,n.useEffect)((()=>{x(),p()}),[s,c,r]),(0,b.jsxs)("div",{className:"entity-manager",children:[(0,b.jsx)(v,{items:r,itemType:f,isDropping:d,toggleDropItem:p,isCreating:h,toggleCreate:x,showForm:l}),(0,b.jsxs)(a.A,{className:"my-3",children:[r&&r.length?(0,b.jsx)(o.A,{className:"scrollable "+(h?"creating":""),children:r.map((e=>(0,b.jsx)(y,{item:e,itemType:f,baseUrl:u,isActive:s===e,isDropping:d,toggleDropItem:p,activeSchema:c},e)))}):null,l&&(r&&!r.length||h)?(0,b.jsx)(o.A,{children:(0,b.jsx)(g,{items:r,itemType:f,baseUrl:u,activeSchema:c,isDropping:d,toggleDropItem:p,isCreating:h,toggleCreate:x})}):!r||r.length||l?null:(0,b.jsx)(o.A,{children:(0,b.jsxs)("div",{className:"py-3 text-center no-content",children:["no visible ",N>=4.2?"databases":"schemas"," or tables"]})})]})]})}},5488:(e,t,r)=>{r.d(t,{A:()=>x});var n=r(9950),a=r(1942),o=r.n(a),i=r(8738),s=r.n(i),c=r(1497);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}var u=["className","cssModule","type","bsSize","valid","invalid","tag","addon","plaintext","innerRef"];function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},f.apply(this,arguments)}function d(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function p(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function m(e,t){return m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},m(e,t)}function h(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=g(e);if(t){var a=g(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return function(e,t){if(t&&("object"===l(t)||"function"===typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return b(e)}(this,r)}}function b(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e){return g=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},g(e)}var y={children:o().node,type:o().string,size:o().oneOfType([o().number,o().string]),bsSize:o().string,valid:o().bool,invalid:o().bool,tag:c.Wx,innerRef:o().oneOfType([o().object,o().func,o().string]),plaintext:o().bool,addon:o().bool,className:o().string,cssModule:o().object},v=function(e){!function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&m(e,t)}(i,e);var t,r,a,o=h(i);function i(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),(t=o.call(this,e)).getRef=t.getRef.bind(b(t)),t.focus=t.focus.bind(b(t)),t}return t=i,(r=[{key:"getRef",value:function(e){this.props.innerRef&&this.props.innerRef(e),this.ref=e}},{key:"focus",value:function(){this.ref&&this.ref.focus()}},{key:"render",value:function(){var e=this.props,t=e.className,r=e.cssModule,a=e.type,o=void 0===a?"text":a,i=e.bsSize,l=e.valid,p=e.invalid,m=e.tag,h=e.addon,b=e.plaintext,g=e.innerRef,y=d(e,u),v=["switch","radio","checkbox"].indexOf(o)>-1,x="select"===o,j="range"===o,A=m||(x||"textarea"===o?o:"input"),w="form-control";b?(w="".concat(w,"-plaintext"),A=m||"input"):j?w="form-range":x?w="form-select":v&&(w=h?null:"form-check-input"),y.size&&/\D/g.test(y.size)&&((0,c.mc)('Please use the prop "bsSize" instead of the "size" to bootstrap\'s input sizing.'),i=y.size,delete y.size);var N=(0,c.qO)(s()(t,p&&"is-invalid",l&&"is-valid",!!i&&(x?"form-select-".concat(i):"form-control-".concat(i)),w),r);return("input"===A||m&&"function"===typeof m)&&(y.type="switch"===o?"checkbox":o),y.children&&!b&&"select"!==o&&"string"===typeof A&&"select"!==A&&((0,c.mc)('Input with a type of "'.concat(o,'" cannot have children. Please use "value"/"defaultValue" instead.')),delete y.children),n.createElement(A,f({},y,{ref:g,className:N,"aria-invalid":p}))}}])&&p(t.prototype,r),a&&p(t,a),Object.defineProperty(t,"prototype",{writable:!1}),i}(n.Component);v.propTypes=y;const x=v}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkharperdb_studio=self.webpackChunkharperdb_studio||[]).push([[374],{3888:(e,a,s)=>{s.r(a),s.d(a,{default:()=>$});var t=s(9950),r=s(5023),l=s(4084),i=s(8156),n=s(7176),d=s(6114),c=s(3452),o=s(4664),h=s(9163),u=s.n(h),m=s(6713),f=s(7348),b=s(9435),p=s(5269),j=s(5553),x=s(127),_=s(3628),A=s(3150),k=s(4414);const $=function(e){let{newEntityAttributes:a,hashAttribute:s}=e;const{customer_id:h,schema:$,table:N,hash:g,action:y,compute_stack_id:v}=(0,o.g)(),w=decodeURIComponent($),C=decodeURIComponent(N),S=decodeURIComponent(g),I=(0,f.MW)(),{state:O}=(0,o.zy)(),T=(0,o.Zp)(),D=(0,m.O$)(p.A,(e=>e.auth)),E=(0,m.O$)(p.A,(e=>e.url)),F=(0,m.O$)(j.A,(e=>e.theme)),R=(0,t.useRef)(null),[U,J]=(0,t.useState)("{}"),[V,M]=(0,t.useState)(),[Y,z]=(0,t.useState)(!0),[H,P]=(0,t.useState)(!1),[W,Z]=(0,t.useState)(!1),q=`/o/${h}/i/${v}/browse/${w}/${C}`,B=async e=>{if(e.preventDefault(),Y||I.error("Please insert valid JSON to proceed"),!y||!Y)return!1;P(!0);const a=JSON.parse(U),s={operation:{operation:"edit"===y?"update":"insert",schema:w,table:C,records:"edit"!==y&&Array.isArray(a)?a:[a]},auth:D,url:E},{error:t,message:r}=await(0,x.A)(s);return t?(I.error(r),P(!1)):(p.A.update((e=>{e.lastUpdate=Date.now()})),setTimeout((()=>T(`/o/${h}/i/${v}/browse/${w}/${C}`)),1e3))};return(0,t.useEffect)((()=>{var e,a;null!==(e=R.current)&&void 0!==e&&null!==(a=e.editor)&&void 0!==a&&a.setTheme&&R.current.editor.setTheme("dark"===F?"vs-dark":"light")}),[F]),u()((()=>{a||T(q)}),[]),u()((async()=>{if("edit"===y){let a;null!==O&&void 0!==O&&O.hashValue?a=[O.hashValue]:(e=S,a=`${parseFloat(e)}`===e?[`${S}`,parseInt(S,10)]:[S]);const t=await(0,x.A)({operation:{operation:"search_by_hash",schema:w,table:C,hash_values:a,get_attributes:["*"],onlyIfCached:!0,noCacheStore:!0},auth:D,url:E}),[r]=t;if(r){const e=r[s],a=r.__createdtime__,t=r.__updatedtime__;delete r.__createdtime__,delete r.__updatedtime__,delete r[s];const l={[s]:e,...r,__createdtime__:a,__updatedtime__:t};J(JSON.stringify(l,null,4))}else T(q),I.error("Unable to find record with that hash_attribute")}else J(JSON.stringify(a||{},null,4));var e}),[S]),(0,k.jsxs)(b.tH,{onError:(e,a)=>(0,_.A)({error:{message:e.message,componentStack:a}}),FallbackComponent:A.A,children:[(0,k.jsxs)("span",{className:"floating-card-header",children:[w," ",C&&">"," ",C," ","add"===y?"> add new":S?`> edit > ${S}`:"","\xa0"]}),(0,k.jsx)(l.A,{className:"my-3",children:(0,k.jsxs)(i.A,{children:[(0,k.jsx)("ul",{className:"text-small",children:"add"===y&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)("li",{children:['The hash_attribute for this table is "',(0,k.jsx)("b",{children:s}),'", and will auto-generate. You may manually add it if you want to specify its value.']}),(0,k.jsxs)("li",{children:[(0,k.jsx)("b",{children:"You may paste in an array"})," if you want to add more than one record at a time."]})]})}),(0,k.jsx)(l.A,{className:"mb-2 json-editor-holder",children:(0,k.jsx)(i.A,{children:(0,k.jsx)(r.Ay,{height:"350px",language:"json",value:U,theme:"vs-dark",onValidate:e=>{z(0===e.length)},onChange:e=>{J(e)},onMount:(e,a)=>{R.current=a}})})}),(0,k.jsxs)(n.A,{children:[(0,k.jsx)(d.A,{md:"4",className:"mt-2",children:V?(0,k.jsx)("div",{className:"pt-2",children:"Delete this record?"}):(0,k.jsx)(c.A,{disabled:H||W,id:"backToTable",block:!0,color:"black",onClick:()=>T(`/o/${h}/i/${v}/browse/${w}/${C}`),children:(0,k.jsx)("i",{className:"fa fa-chevron-left"})})}),"add"===y?(0,k.jsx)(d.A,{md:"8",children:(0,k.jsx)(c.A,{disabled:H||!Y,id:"addEditItem",className:"mt-2",onClick:B,block:!0,color:"success",children:(0,k.jsx)("i",{className:"fa "+(H?"fa-spinner fa-spin":"fa-save")})})}):V?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(d.A,{md:"4",className:"mt-2",children:(0,k.jsx)(c.A,{disabled:H||W,id:"cancelDelete",block:!0,color:"black",onClick:()=>M(!1),children:(0,k.jsx)("i",{className:"fa fa-ban"})})}),(0,k.jsx)(d.A,{md:"4",children:(0,k.jsx)(c.A,{disabled:H||W,id:"deleteRecord",className:"mt-2",onClick:async e=>{if(e.preventDefault(),!y)return!1;Z(!0);const{error:a,message:s}=await(0,x.A)({operation:{operation:"delete",schema:w,table:C,hash_values:[O.hashValue]},auth:D,url:E});return a?(I.error(s),M(!1),Z(!1)):setTimeout((()=>T(`/o/${h}/i/${v}/browse/${w}/${C}`)),100)},block:!0,color:"success",children:(0,k.jsx)("i",{className:"fa "+(W?"fa-spinner fa-spin":"fa-check")})})})]}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(d.A,{md:"4",className:"mt-2",children:(0,k.jsx)(c.A,{disabled:H||W,id:"confirmDelete",block:!0,color:"danger",onClick:()=>M(S),children:(0,k.jsx)("i",{className:"fa fa-trash"})})}),(0,k.jsx)(d.A,{md:"4",children:(0,k.jsx)(c.A,{disabled:H||!Y,id:"addEditItem",className:"mt-2",onClick:B,block:!0,color:"success",children:(0,k.jsx)("i",{className:"fa "+(H?"fa-spinner fa-spin":"fa-save")})})})]})]})]})})]})}}}]);
|