harperdb 4.7.0-beta.2 → 4.7.0-beta.3

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.
@@ -17,7 +17,7 @@
17
17
  `,""));return r.replace(`
18
18
  `,"")}o(_q,"runCommand");async function Yae(){try{await Rae.access(yN)}catch{return!1}let e=await _q(`${yN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return bae.eq(t,Vae)}o(Yae,"checkNATSServerInstalled");async function wN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await hq.getClusterUser();if(bl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}Ei.trace("create nats connection called");let i=await Uae({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:$r.get(tt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:$r.get(tt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:$r.get(tt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ei.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&Ei.error("Error with Nats client connection, connection closed",a),i===yn&&gq()}),i}o(wN,"createConnection");function gq(){yn=void 0,Tl=void 0,yl=void 0,Rl=void 0}o(gq,"clearClientCache");async function Wae(){yn&&(await yn.drain(),yn=void 0,Tl=void 0,yl=void 0,Rl=void 0)}o(Wae,"closeConnection");var yn,Rl;async function Lp(){return Rl||(Rl=wN($r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),yn=await Rl),yn||Rl}o(Lp,"getConnection");async function Dp(){if(Tl)return Tl;bl(yn)&&await Lp();let{domain:e}=Ed(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Tl=await yn.jetstreamManager({domain:e,timeout:6e4}),Tl}o(Dp,"getJetStreamManager");async function Sq(){if(yl)return yl;bl(yn)&&await Lp();let{domain:e}=Ed(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return yl=yn.jetstream({domain:e,timeout:6e4}),yl}o(Sq,"getJetStream");async function ro(){let e=yn||await Lp(),t=Tl||await Dp(),r=yl||await Sq();return{connection:e,jsm:t,js:r}}o(ro,"getNATSReferences");async function zae(e){let t=$r.get(tt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await hq.getClusterUser(),s=await wN(t,r,n),i=IN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=Eq.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await oS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(zae,"getServerList");async function NN(e,t){let{jsm:r}=await ro(),n=$r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=$r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=$r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:xae.File,retention:Bae.Limits,subjects:t,discard:Fae.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(NN,"createLocalStream");async function Tq(){let{jsm:e}=await ro(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(Tq,"listStreams");async function jae(e){let{jsm:t}=await ro();await t.streams.delete(e)}o(jae,"deleteLocalStream");async function Qae(e){let{connection:t}=await ro(),r=[],n=IN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(Eq.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Qae,"listRemoteStreams");async function Jae(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ro(),i=dq(),a={durable_name:i,ack_policy:bN.Explicit};t&&(a.deliver_policy=AN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=RN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(rn.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Jae,"viewStream");async function*Xae(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ro(),i=dq(),a={durable_name:i,ack_policy:bN.Explicit};t&&(a.deliver_policy=AN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=RN(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(rn.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Xae,"viewStreamIterator");async function Zae(e,t,r,n){Ei.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=yq(n,r);let{js:s}=await ro(),i=await cS(),a=`${e}.${i}`,c=await qae(()=>n instanceof Uint8Array?n:pq.encode(n));try{Ei.trace(`publishToStream publishing to subject: ${a}`),Gae(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return bq(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ei.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await NN(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Zae,"publishToStream");function yq(e,t){t===void 0&&(t=Hae());let r=$r.get(tt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(rn.MSG_HEADERS.ORIGIN)&&r&&t.append(rn.MSG_HEADERS.ORIGIN,r),t}o(yq,"addNatsMsgHeader");function Ed(e){e=e.toLowerCase();let t=Pp.join($r.get(tt.CONFIG_PARAMS.ROOTPATH),$ae);if(e===tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bl(TN)&&(TN={port:Cp.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Cp.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_NODENAME)+rn.SERVER_SUFFIX.HUB,config_file:rn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Pp.join(t,rn.PID_FILES.HUB),hdbNatsPath:t}),TN;if(e===tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bl(SN)&&(SN={port:Cp.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Cp.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_NODENAME)+rn.SERVER_SUFFIX.LEAF,config_file:rn.NATS_CONFIG_FILES.LEAF_SERVER,domain:Cp.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_NODENAME)+rn.SERVER_SUFFIX.LEAF,pid_file_path:Pp.join(t,rn.PID_FILES.LEAF),hdbNatsPath:t}),SN;Ei.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Ed,"getServerConfig");async function Rq(e,t,r,n){try{await e.consumers.add(t,{ack_policy:bN.Explicit,durable_name:r,deliver_policy:AN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(Rq,"createConsumer");async function ece(e,t,r){await e.consumers.delete(t,r)}o(ece,"removeConsumer");function tce(e){return e.split(".")[1]}o(tce,"extractServerName");async function rce(e,t,r=6e4,n=IN()){if(!oS.isObject(t))throw new Error("data param must be an object");let s=pq.encode(t),{connection:i}=await ro(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return RN(c.data)}o(rce,"request");function CN(e){return new Promise(async(t,r)=>{let n=Nae(yN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(CN,"reloadNATS");async function nce(){let{pid_file_path:e}=Ed(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await CN(e)}o(nce,"reloadNATSHub");async function sce(){let{pid_file_path:e}=Ed(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await CN(e)}o(sce,"reloadNATSLeaf");function ice(e,t,r){let n;switch(e.code){case uq.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case uq.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(ice,"requestErrorHandler");async function oce(e,t){let r=t+rn.SERVER_SUFFIX.LEAF,{connection:n}=await ro(),{jsm:s}=await pce(r),{schema:i,table:a}=e,c=aS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await bq(async()=>{if(e.subscribe===!0)await Rq(s,c,n.info.server_name,l);else try{await ece(s,c,n.info.server_name)}catch(u){Ei.trace(u)}})}o(oce,"updateRemoteConsumer");async function ace(e,t,r,n){let s=aS.createNatsTableStreamName(e,t),i=r+rn.SERVER_SUFFIX.LEAF,a={type:tt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!mq&&Mae()<$r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=gN();await c(a)}await Lae(a),n==="stop"&&await oS.asyncSetTimeout(1e3)}o(ace,"updateConsumerIterator");function bq(e){return Pae.writeTransaction(tt.SYSTEM_SCHEMA_NAME,tt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(bq,"exclusiveLock");async function Aq(e,t){let r=aS.createNatsTableStreamName(e,t),n=await cS(),s=dce(e,t,n);await NN(r,[s])}o(Aq,"createLocalTableStream");async function cce(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await Aq(n,s)}}o(cce,"createTableStreams");async function Iq(e,t,r=void 0){if($r.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=aS.createNatsTableStreamName(e,t),{domain:s}=Ed(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Lp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ei.warn(n);else throw n}}o(Iq,"purgeTableStream");async function lce(e,t){if($r.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await Iq(e,t[r])}o(lce,"purgeSchemaTableStreams");async function uce(e){return(await Dp()).streams.info(e)}o(uce,"getStreamInfo");function dce(e,t,r){return`${rn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(dce,"createSubjectName");async function cS(){if(Op)return Op;if(Op=(await Dp())?.nc?.info?.server_name,Op===void 0)throw new Error("Unable to get jetstream manager server name");return Op}o(cS,"getJsmServerName");async function fce(){let e=await Dp(),t=await cS(),r=await Tq();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=mce(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ei.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(fce,"updateLocalStreams");function mce(e){let{config:t}=e,r=!1,n=$r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=$r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=$r.get(tt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(mce,"updateStreamLimits");async function pce(e){let t,r;try{t=await yn.jetstream({domain:e}),r=await yn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ei.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(pce,"connectToRemoteJS")});function ON(e){let t=e.get(lS),r=t?(0,_d.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:vp(e)??1,nodes:[]})})}i[n]=0,e.putSync(lS,(0,_d.pack)(r))}return r}function Mp(e){return ON(e).remoteNameToId}function Cq(e,t){let r=ON(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(lS,(0,_d.pack)(r)),s}function uS(e,t){let r=ON(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(lS,(0,_d.pack)(r))}return Nq.trace?.("The remote node name map",e,n,s),s}var Nq,_d,lS,PN=se(()=>{Nq=b(Xn());fs();_d=require("msgpackr"),lS=Symbol.for("remote-ids");o(ON,"getIdMappingRecord");o(Mp,"exportIdMapping");o(Cq,"remoteToLocalNodeId");o(uS,"getIdOfRemoteNode")});function MN(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Pq,hce(e.primaryStore,e.auditStore)):(c=Oq,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Lq(Oq[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Cu(t);let d=new DN(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function Lq(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),Dq(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Cu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,LN.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,LN.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function hce(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=Pq[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{Lq(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function Dq(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Mq(e){return e.nextTransaction||(MN({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),Dq(e)),e.nextTransaction}var LN,Oq,Pq,DN,vN=se(()=>{LN=b(Q());wu();va();ki();Oq=Object.create(null),Pq=Object.create(null);o(MN,"addSubscription");DN=class extends Jn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(Lq,"notifyFromTransactionData");o(hce,"listenToCommits");o(Dq,"nextTransaction");o(Mq,"whenNextTransaction")});var kq={};Re(kq,{commitsAwaitingReplication:()=>Sd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>Td,iterateRoutes:()=>xp,shouldReplicateToNode:()=>Up,subscribeToNodeUpdates:()=>yd});function Wt(){return vq||(vq=Ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Td(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function yd(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;Fq.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Wt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Up(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Wt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Ece(){yd(e=>{Qa({},(t,r)=>{let n=e.name,s=Uq.get(n);if(s||Uq.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Td(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Sd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*xp(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=gd.default.get(F.REPLICATION_SECUREPORT)??(!gd.default.get(F.REPLICATION_PORT)&&gd.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||gd.default.get(F.REPLICATION_PORT)||gd.default.get(F.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){xq.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var xq,Bq,gd,Fq,vq,Uq,Sd,Rd=se(()=>{we();fs();Em();xq=require("worker_threads"),Bq=b(_e()),gd=b(me());q();Fq=b(Xn());server.nodes=[];o(Wt,"getHDBNodeTable");o(Td,"getReplicationSharedStatus");o(yd,"subscribeToNodeUpdates");o(Up,"shouldReplicateToNode");Uq=new Map;Vv((e,t,r)=>{if(r>server.nodes.length)throw new Bq.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Sd||(Sd=new Map,Ece());let n=Sd.get(e);return n||(n=[],Sd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Ece,"startSubscriptionToReplications");o(xp,"iterateRoutes")});var Vq={};Re(Vq,{connectedToNode:()=>Al,disconnectedFromNode:()=>Ad,ensureNode:()=>Vo,requestClusterStatus:()=>$q,startOnMainThread:()=>UN});async function UN(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){dS.set(i,vp(l.auditStore));break}}}so.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=Wt().primaryStore.get(a);if(l!==null){let u=e.url??Ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Vo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Wt().primaryStore.get(a)&&c();for(let l of xp(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}yd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||Ja()&&i?.url===Ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Wt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ct.trace("Setting up node replication for",i),!i){for(let[f,m]of no){let p;for(let[h,{worker:E,nodes:g}]of m){let R=g[0];if(R&&R.name==a){p=!0;for(let[S,{worker:y}]of m)m.delete(S),ct.warn("Node was deleted, unsubscribing from node",a,S,f),y?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){no.get(f).iterator.remove(),no.delete(f);return}}return}if(c)return;if(!i.url){ct.info(`Node ${i.name} is missing url`);return}let l=no.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ct.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of bd)if(i.url===m.url){bd.delete(f);break}bd.set(i.name,i)}let u=at();if(l||(l=new Map,no.set(i.url,l)),l.iterator=Qa(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ct.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ct.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];dS.has(f)&&Bp.default.get(F.REPLICATION_FAILOVER)&&(E.push({replicateByDefault:m,name:it(),startTime:dS.get(f),endTime:Date.now(),replicates:!0}),dS.delete(f));let g=Up(i,f),R=so.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%R.length,h=R[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):Fp(S)},_ce);else{ct.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Wt().primaryStore.get(it())?.replicates}),Wt().primaryStore.get(it())?.replicates||(n=!1,ct.info("Disabling replication, this node name",it(),Wt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):mS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Ad=o(function(i){try{ct.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(bd.keys()),c=a.sort(),l=c.indexOf(i.name||_i(i.url));if(l===-1){ct.warn("Disconnected node not found in node map",i.name,a);return}let u=no.get(i.url),d=u?.get(i.database);if(!d){ct.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!Bp.default.get(F.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=bd.get(h);u=no.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:R,nodes:S}=g,y=!1;for(let C of d.nodes){if(S.some(I=>I.name===C.name)){ct.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}C.endTime<Date.now()||(S.push(C),y=!0)}if(d.nodes=[d.nodes[0]],!y){ct.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ct.info(`Failing over ${i.database} from ${i.name} to ${h}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):Fp({database:i.database,nodes:S});return}ct.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ct.error("Error failing over node",a)}},"disconnectedFromNode"),Al=o(function(i){let a=no.get(i.url),c=a?.get(i.database);if(!c){ct.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ct.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ct.debug("Connected node is not named yet",i.database,c);return}if(!Bp.default.get(F.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of no.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,so.onMessageByType)("disconnected-from-node",Ad),(0,so.onMessageByType)("connected-to-node",Al),(0,so.onMessageByType)("request-cluster-status",$q)}function $q(e,t){let r=[];for(let[n,s]of bd)try{let i=no.get(s.url);ct.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=Gq(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ct.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Vo(e,t){let r=Wt();e=e??_i(t.url),t.name=e;try{if(t.ca){let s=new qq.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ct.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ct.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!Bp.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=Gq(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ct.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var so,fS,ct,Hq,Bp,qq,Gq,_ce,no,Ad,Al,bd,dS,kp=se(()=>{we();so=b(nt());fs();fS=require("worker_threads");Rd();ct=b(Q()),Hq=b(require("lodash")),Bp=b(me());q();qq=require("crypto"),{cloneDeep:Gq}=Hq.default,_ce=200,no=new Map,bd=new Map,dS=new Map;o(UN,"startOnMainThread");o($q,"requestClusterStatus");fS.parentPort&&(Ad=o(e=>{fS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Al=o(e=>{fS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,so.onMessageByType)("subscribe-to-node",e=>{Fp(e)}),(0,so.onMessageByType)("unsubscribe-from-node",e=>{mS(e)}));o(Vo,"ensureNode")});var ps=v(Ht=>{"use strict";var Er=require("path"),{watch:gce}=require("chokidar"),Gn=require("fs-extra"),Id=require("node-forge"),Qq=require("net"),{generateKeyPair:xN,X509Certificate:Ko,createPrivateKey:Jq,randomBytes:Sce}=require("node:crypto"),Tce=require("util");xN=Tce.promisify(xN);var Lt=Id.pki,gi=require("joi"),{v4:Xq}=require("uuid"),{validateBySchema:HN}=ft(),{forComponent:yce}=Q(),ms=me(),Fs=(q(),M(z)),{CONFIG_PARAMS:wl}=Fs,Si=JA(),{ClientError:Xa}=_e(),hS=require("node:tls"),{relative:Zq,join:Rce}=require("node:path"),{CERTIFICATE_VALUES:Kq}=Si,bce=$c(),BN=St(),{table:Ace,getDatabases:Ice,databases:pS}=(we(),M(mt)),{getJWTRSAKeys:Yq}=(dd(),M(Ap)),Qe=yce("tls").conditional;Ht.generateKeys=$N;Ht.updateConfigCert=a$;Ht.createCsr=Dce;Ht.signCertificate=Mce;Ht.setCertTable=wd;Ht.loadCertificates=s$;Ht.reviewSelfSignedCert=KN;Ht.createTLSSelector=l$;Ht.listCertificates=d$;Ht.addCertificate=kce;Ht.removeCertificate=Gce;Ht.createNatsCerts=xce;Ht.generateCertsKeys=Uce;Ht.getReplicationCert=Gp;Ht.getReplicationCertAuth=Lce;Ht.renewSelfSigned=Bce;Ht.hostnamesFromCert=WN;Ht.getKey=qce;Ht.getHostnamesFromCertificate=$ce;Ht.getPrimaryHostName=YN;Ht.generateSerialNumber=gS;var{urlToNodeName:e$,getThisNodeUrl:wce,getThisNodeName:_S,clearThisNodeName:Nce}=(fs(),M(Yo)),{readFileSync:Cce,statSync:t$}=require("node:fs"),Ive=me(),{getTicketKeys:Oce,onMessageFromWorkers:Pce}=nt(),{isMainThread:r$}=require("worker_threads"),{TLSSocket:n$,createSecureContext:wve}=require("node:tls"),GN=3650,Hp=["127.0.0.1","localhost","::1"],qN=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function gS(){let e=Sce(8);return e[0]=e[0]&127|1,e.toString("hex")}o(gS,"generateSerialNumber");Pce(async e=>{e.type===Fs.ITC_EVENT_TYPES.RESTART&&(ms.initSync(!0),await KN())});var nn;function ec(){return nn||(nn=Ice().system.hdb_certificate,nn||(nn=Ace({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),nn}o(ec,"getCertTable");async function Gp(){let e=l$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(_S());if(!r)return;let n=new Ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(Gp,"getReplicationCert");async function Lce(){ec();let e=(await Gp()).options.cert,r=new Ko(e).issuer.match(/CN=(.*)/)?.[1];return nn.get(r)}o(Lce,"getReplicationCertAuth");var Wq,Za=new Map;function s$(){if(Wq)return;Wq=!0;let e=[{configKey:wl.TLS},{configKey:wl.OPERATIONSAPI_TLS}];ec();let t=Er.dirname(BN.getConfigFilePath()),r;for(let{configKey:n}of e){let s=BN.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&Zq(Rce(t,"keys"),a);c&&zq(a,l=>{Za.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&r$){let d;zq(u,f=>{if(Kq.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=c$(u),h=new Ko(p),E;try{E=YN(h)}catch(y){Qe.error?.("error extracting host name from certificate",y);return}if(E==null){Qe.error?.("No host name found on certificate");return}if(h.checkIssued(new Ko(Kq.cert)))return;let g=nn.primaryStore.get(E),R=t$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Qe.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=nn.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(s$,"loadCertificates");function zq(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&r$&&Qe.warn?.(`Reloading ${r}:`,i),n=c,t(c$(i)))}catch(c){Qe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Gn.existsSync(e)?s(e,t$(e)):Qe.error?.(`${r} file not found:`,e),gce(e,{persistent:!1}).on("change",s)}o(zq,"loadAndWatch");function FN(){let e=wce();if(e==null){let t=Hp[0];return Qe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e$(e)}o(FN,"getHost");function ES(){let e=_S();if(e==null){let t=Hp[0];return Qe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(ES,"getCommonName");async function Dce(){let e=await Gp(),t=Lt.certificateFromPem(e.options.cert),r=Lt.privateKeyFromPem(e.options.key);Qe.info?.("Creating CSR with cert named:",e.name);let n=Lt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:ES()},...qN];Qe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:i$()}];return Qe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Id.pki.certificationRequestToPem(n)}o(Dce,"createCsr");function i$(){let e=Hp.includes(ES())?Hp:[...Hp,ES()];return e.includes(FN())||e.push(FN()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>Qq.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(i$,"certExtensions");async function Mce(e){let t={},r=Er.join(ms.getHdbBasePath(),Fs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ec();for await(let d of nn.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Za.has(d.private_key_name)){n=Za.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Gn.exists(Er.join(r,d.private_key_name))){n=Gn.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await kN();s=d.ca,n=d.private_key}n=Lt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Lt.certificateFromPem(s.certificate);Qe.info?.("Signing CSR with cert named",s.name);let a=Lt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return Qe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Id.pki.createCertificate();c.serialNumber=gS(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+GN),Qe.info?.("sign cert setting validity:",c.validity),Qe.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),Qe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;Qe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Id.md.sha256.create()),t.certificate=Lt.certificateToPem(c)}else Qe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Mce,"signCertificate");async function vce(e,t){await wd({name:_S(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await wd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Lt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(vce,"createCertificateTable");async function wd(e){let t;try{t=new Ko(e.certificate)}catch(r){Qe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Qe.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ec(),await nn.patch(e)}o(wd,"setCertTable");async function $N(){let e=await xN("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Lt.publicKeyFromPem(e.publicKey),privateKey:Lt.privateKeyFromPem(e.privateKey)}}o($N,"generateKeys");async function VN(e,t,r){let n=Lt.createCertificate();if(!t){let a=await Gp();t=Lt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber=gS(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+GN);let i=[{name:"commonName",value:ES()},...qN];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(i$()),n.sign(e,Id.md.sha256.create()),Lt.certificateToPem(n)}o(VN,"generateCertificates");async function kN(){let e=await d$(),t;for(let r of e){if(!r.is_authority)continue;let n=await u$(r.private_key_name);if(r.private_key_name&&n&&new Ko(r.certificate).checkPrivateKey(Jq(n))){Qe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Qe.trace?.("No CA found with matching private key")}o(kN,"getCertAuthority");async function o$(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber=gS(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+GN);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ms.get(wl.REPLICATION_HOSTNAME)??e$(ms.get(wl.REPLICATION_URL))??Xq().split("-")[0]}`},...qN];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Id.md.sha256.create());let a=Er.join(ms.getHdbBasePath(),Fs.LICENSE_KEY_DIR_NAME),c=Er.join(a,Si.PRIVATEKEY_PEM_NAME);return r&&await Gn.writeFile(c,Lt.privateKeyToPem(e)),n}o(o$,"generateCertAuthority");async function Uce(){let{privateKey:e,publicKey:t}=await $N(),r=await o$(e,t),n=await VN(e,t,r);await vce(n,r),a$()}o(Uce,"generateCertsKeys");async function xce(){let e=await VN(Lt.privateKeyFromPem(Si.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(Si.CERTIFICATE_VALUES.cert)),t=Er.join(ms.getHdbBasePath(),Fs.LICENSE_KEY_DIR_NAME),r=Er.join(t,Si.NATS_CERTIFICATE_PEM_NAME);await Gn.exists(r)||await Gn.writeFile(r,e);let n=Er.join(t,Si.NATS_CA_PEM_NAME);await Gn.exists(n)||await Gn.writeFile(n,Si.CERTIFICATE_VALUES.cert)}o(xce,"createNatsCerts");async function Bce(){ec();for await(let e of nn.search([{attribute:"is_self_signed",value:!0}]))await nn.delete(e.name);await KN()}o(Bce,"renewSelfSigned");async function KN(){Nce(),await s$(),ec();let e=await kN();if(!e){Qe.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Lt.privateKeyFromPem(Gn.readFileSync(u)),keyPath:u}}catch(d){return Qe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ms.get(wl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=ms.get(wl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=Er.join(ms.getHdbBasePath(),Fs.LICENSE_KEY_DIR_NAME),c=Zq(a,i);s||(Qe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await $N(),Gn.existsSync(Er.join(a,Si.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${Xq().split("-")[0]}.pem`),await Gn.writeFile(Er.join(a,c),Lt.privateKeyToPem(s)));let l=await o$(s,Lt.setRsaPublicKey(s.n,s.e),!1);await wd({name:l.subject.getField("CN").value,uses:["https"],certificate:Lt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Gp()){let r=_S();Qe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await kN();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await VN(Lt.privateKeyFromPem(e.private_key),s,n);await wd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(KN,"reviewSelfSignedCert");function a$(){let e=bce(Object.keys(Fs.CONFIG_PARAM_MAP),!0),t=Er.join(ms.getHdbBasePath(),Fs.LICENSE_KEY_DIR_NAME),r=Er.join(t,Si.PRIVATEKEY_PEM_NAME),n=Er.join(t,Si.NATS_CERTIFICATE_PEM_NAME),s=Er.join(t,Si.NATS_CA_PEM_NAME),i=Fs.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),BN.updateConfigValue(void 0,void 0,a,!1,!0)}o(a$,"updateConfigCert");function c$(e){return e.startsWith("-----BEGIN")?e:Cce(e,"utf8")}o(c$,"readPEM");var jq=hS.createSecureContext;hS.createSecureContext=function(e){if(!e.cert||!e.key)return jq(e);let t={...e};delete t.key,delete t.cert;let r=jq(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Fce=n$.prototype._init;n$.prototype._init=function(e,t){Fce.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Il=new Map;function l$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Il.clear();let d=0;if(pS===void 0){c();return}for await(let f of pS.system.hdb_certificate.search([])){let m=f.certificate,p=new Ko(m);f.is_authority&&(p.asString=m,Il.set(p.subject,m))}for await(let f of pS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await u$(f.private_key_name),E=f.certificate,g=new Ko(E);if(Il.has(g.issuer)&&(E+=`
19
19
  `+Il.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:Oce(),availableCAs:Il,ca:t&&Array.from(Il.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(R.sessionIdContext=a.sessionIdContext);let S=f.hostnames??WN(g);Array.isArray(S)||(S=[S]);for(let I of S)I===FN()&&(p+=1);let y=hS.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Il),y.certStart=E.toString().slice(0,100);let C;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),Qq.isIP(I)&&(C=!0);let k=r.get(I)?.quality??0;Qe.trace?.("Assigning TLS for hostname",I,"if",p,">",k),p>k&&r.set(I,y)}else Qe.error?.("No hostname found for certificate at",hS.certificate);Qe.trace?.("Adding TLS",y.name,"for",a.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,a&&(a.defaultContext=y))}catch(m){Qe.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),pS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Qe.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Qe.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?Qe.debug?.("No certificate found to match",a,"using the default certificate"):Qe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Qe.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(l$,"createTLSSelector");async function u$(e){let t=Za.get(e);return!t&&e?await Gn.readFile(Er.join(ms.get(wl.ROOTPATH),Fs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(u$,"getPrivateKeyByName");async function d$(){ec();let e=[];for await(let t of nn.search([]))e.push(t);return e}o(d$,"listCertificates");async function kce(e){let t=HN(e,gi.object({name:gi.string().required(),certificate:gi.string().required(),is_authority:gi.boolean().required(),private_key:gi.string(),hosts:gi.array(),uses:gi.array()}));if(t)throw new Xa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Ko(n),c=!1,l=!1,u;for(let[p,h]of Za)!s&&!c&&a.checkPrivateKey(Jq(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Xa("A suitable private key was not found for this certificate");let d;if(!r){try{d=YN(a)}catch(p){Qe.error?.(p)}if(d==null)throw new Xa("Error extracting certificate host name, please provide a name parameter")}let f=Hce(r??d);s&&!c&&!l&&(await Gn.writeFile(Er.join(ms.getHdbBasePath(),Fs.LICENSE_KEY_DIR_NAME,f+".pem"),s),Za.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await wd(m),"Successfully added certificate: "+f}o(kce,"addCertificate");function Hce(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Hce,"sanitizeName");async function Gce(e){let t=HN(e,gi.object({name:gi.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;ec();let n=await nn.get(r);if(!n)throw new Xa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await nn.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Qe.info?.("Removing private key named",s),await Gn.remove(Er.join(ms.getHdbBasePath(),Fs.LICENSE_KEY_DIR_NAME,s)))}return await nn.delete(r),"Successfully removed "+r}o(Gce,"removeCertificate");function YN(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||WN(e)[0]}o(YN,"getPrimaryHostName");function WN(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(WN,"hostnamesFromCert");async function qce(e){if(e.bypass_auth!==!0)throw new Xa("Unauthorized","401");let t=HN(e,gi.object({name:gi.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await Yq()).privateKey;if(r===".jwtPublic")return(await Yq()).publicKey;if(Za.get(r))return Za.get(e.name);throw new Xa("Key not found")}o(qce,"getKey");function $ce(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o($ce,"getHostnamesFromCertificate")});var x$={};Re(x$,{BACK_PRESSURE_RATIO_POSITION:()=>M$,CONFIRMATION_STATUS_POSITION:()=>D$,LATENCY_POSITION:()=>wS,NodeReplicationConnection:()=>Cd,OPERATION_REQUEST:()=>XN,RECEIVED_TIME_POSITION:()=>eC,RECEIVED_VERSION_POSITION:()=>ZN,RECEIVING_STATUS_POSITION:()=>tC,RECEIVING_STATUS_RECEIVING:()=>U$,RECEIVING_STATUS_WAITING:()=>v$,SENDING_TIME_POSITION:()=>qp,createWebSocket:()=>NS,databaseSubscriptions:()=>rc,replicateOverWS:()=>$p,tableUpdateListeners:()=>nC});async function NS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!QN){let l=(0,N$.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),QN=u.secureContexts}if(i=QN.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,O$.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(AS?.caCount!==Wo.size&&(AS=C$.createSecureContext({...i.options,ca:[...Wo,...i.options.availableCAs.values()]}),AS.caCount=Wo.size),c.secureContext=AS),new A$.WebSocket(e,"harperdb-replication-v1",c)}function $p(e,t,r){let n=t.port||t.securePort,s=Cl.pid%1e3+"-"+I$.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||rc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,R=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,C,I,k,J,G,H,X=6e4,W,ue=0,ce=0,te=0,ye=b$.default.get(F.REPLICATION_BLOBTIMEOUT)??12e4,Ae=new Map,Ye=[],qe=0,Ar;if(t.url){let A=o(()=>{J&&ce===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(J=performance.now(),e.ping(),ce=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,y$).unref(),A()}else tr();e._socket?.setMaxListeners(200);function tr(){clearTimeout(k),ce=e._socket?.bytesRead,te=e._socket?.bytesWritten,k=setTimeout(()=>{ce===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},y$*2).unref()}o(tr,"resetPingTimer");let Wr=0,vr=0,_u=!1,Fc=3e4;function xt(){if(dn?.length>0){let A=performance.now(),U=A-vr;Wr=(Wr*Fc+(_u?U:0))/(Fc+U),m[M$]=Wr,vr=A}}o(xt,"updateBackPressureRatio"),setInterval(xt,Fc).unref();function ri(){if(!(!g||!u))return m||(m=Td(f,u,g)),m}o(ri,"getSharedStatus"),u&&kc(u);let Na,GE,jf=[],qE=[],Qf,Pe=[],$E=[],ob=[],gu=150,Ui=25,Os=0,Jf=0,Xf=!1,Io,On,dn,Ur;e.on("message",Su);async function Su(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),xr(1008,"Unauthorized");return}Zf(A),e.off("message",Su),e.on("message",Zf)}o(Su,"onWSMessageWhenAuthorized");function Zf(A){ue=performance.now();try{let U=A.dataView=new Ll(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let Y=(0,ot.decode)(A),[j,B,Ee]=Y;switch(j){case m$:{if(B){if(g){if(g!==B){le.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${B}, disconnecting`),e.send((0,ot.encode)([Nd])),xr(1008,"Node name mismatch");return}}else if(g=B,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Vo(g,de)}if(t.connection&&(t.connection.nodeName=g),le.debug?.(s,"received node name:",g,"db:",u??Y[2]),!u)try{kc(u=Y[2]),u==="system"&&(Na=Qa(t,(de,oe)=>{Pa(oe)&&K(oe)}),e.on("close",()=>{Na?.remove()}))}catch(de){le.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([Nd])),xr(1008,de.message);return}em()}break}case S$:{le.debug?.(s,"Received table definitions for",B.map(de=>de.table));for(let de of B){let oe=Y[2];de.database=oe;let ke;if(Pa(oe)){if(u==="system")De[oe]?.[de.table]||(ke=L(de,De[oe]?.[de.table]));else{if(oe!=="data"&&!De[oe]){le.warn?.("Database not found",oe);return}ke=L(de,De[oe]?.[de.table])}f||(f=ke?.auditStore),E||(E=at()?.[oe])}}break}case Nd:xr();break;case XN:try{let de=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!de).then(oe=>{le.debug?.("Requested request from finished",g,oe),Array.isArray(oe)&&(oe={results:oe}),oe.requestId=B.requestId,e.send((0,ot.encode)([TS,oe]))},oe=>{le.debug?.("Failed requested operation from",g,oe),e.send((0,ot.encode)([TS,{requestId:B.requestId,error:zN(oe)}]))})}catch(de){e.send((0,ot.encode)([TS,{requestId:B.requestId,error:zN(de)}]))}break;case TS:let{resolve:fe,reject:pe}=R.get(B.requestId);le.debug?.("Received completed operation request",g,B),B.error?pe(new Error(B.error)):fe(B),R.delete(B.requestId);break;case jN:let ne=Y[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),xr();return}let ie=E[ne];ie=L({table:ne,database:u,attributes:B.attributes,schemaDefined:B.schemaDefined},ie),jf[Ee]={name:ne,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:B.typedStructs,structures:B.structures}),getEntry(de){return ie.primaryStore.getEntry(de)},rootStore:ie.primaryStore.rootStore};break;case p$:Ur=f?Cq(B,f):new Map,Qf=Y[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Qf}`);break;case h$:let xe=Ee;ob[xe]=B;break;case g$:ri()[D$]=B,le.trace?.(s,"received and broadcasting committed update",B),ri().buffer.notify();break;case _$:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case yS:{let de=Y[1],{fileId:oe,size:ke,finished:Be,error:Le}=de,Me=Ae.get(oe);le.debug?.("Received blob",oe,"has stream",!!Me,"connectedToBlob",!!Me?.connectedToBlob,"length",Y[2].length,"finished",Be),Me||(Me=new JN.PassThrough,Me.expectedSize=ke,Ae.set(oe,Me)),Me.lastChunk=Date.now();let pt=Y[2];Ke(pt.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Be?(Le?(Me.on("error",()=>{}),Me.destroy(new Error("Blob error: "+Le+" for record "+(Me.recordId??"unknown")+" from "+remote_node_name))):Me.end(pt),Me.connectedToBlob&&Ae.delete(oe)):Me.write(pt)}catch(wt){le.error?.(`Error receiving blob for ${Me.recordId} from ${g} and streaming to storage`,wt),Ae.delete(oe)}break}case E$:{let de=B,oe;try{let ke=Y[3],Be=qE[Ee]||(qE[Ee]=E[Y[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",Ee);let Le=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Me=Le?.length??0;if(Me>0&&Me!==Jf){Jf=Me;let wt=(0,ot.decode)(Le);e.send((0,ot.encode)([jN,{typedStructs:wt.typed,structures:wt.named},Ee,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(ke);if(pt){let wt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Et=lt||{};Et.version=(0,P$.getLastVersion)(),lt&&lt[Od]&Jr&&(wt=Buffer.from(wt),bm(()=>Be.primaryStore.decoder.decode(pt),KE=>Ca(KE,ke),Be.primaryStore.rootStore)),oe=(0,ot.encode)([SS,de,{value:wt,expiresAt:Et.expiresAt,version:Et.version,residencyId:Et.residencyId,nodeId:Et.nodeId,user:Et.user}])}else oe=(0,ot.encode)([SS,de])}catch(ke){oe=(0,ot.encode)([SS,de,{error:ke.message}])}e.send(oe);break}case SS:{let{resolve:de,reject:oe,tableId:ke,key:Be}=R.get(Y[1]),Le=Y[2];if(Le?.error)oe(new Error(Le.error));else if(Le){let Me;S_(()=>{let pt=jf[ke].decoder.decode(Le.value);Le.value=pt,Le.key=Be,de(Le)||Me&&setTimeout(()=>Me.forEach(E_),6e4).unref()},f?.rootStore,pt=>{let wt=Oa(pt,Be);return Me||(Me=[]),Me.push(wt),wt})}else de();R.delete(Y[1]);break}case f$:{dn=B;let de,oe,ke=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",dn),!h){let Ce;h=new Promise(Kt=>{le.debug?.("Waiting for subscription to database "+u),Ce=Kt}),h.ready=Ce,rc.set(u,h)}if(r.name)oe=Wt().subscribe(r.name),oe.then(async Ce=>{de=Ce;for await(let Kt of de){let Bt=Kt.value;if(!(Bt?.replicates===!0||Bt?.replicates?.receives||Bt?.subscriptions?.some(Br=>(Br.database||Br.schema)===u&&Br.publish!==!1))){ke=!0,e.send((0,ot.encode)([Nd])),xr(1008,`Unauthorized database subscription to ${u}`);return}}},Ce=>{le.error?.(s,"Error subscribing to HDB nodes",Ce)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([Nd])),xr(1008,`Unauthorized database subscription to ${u}`);return}if(On&&(le.debug?.(s,"stopping previous subscription",u),On.emit("close")),dn.length===0)return;let Be=dn[0],Le=o(Ce=>{if(Ce&&(Be.replicateByDefault?!Be.tables.includes(Ce.tableName):Be.tables.includes(Ce.tableName)))return{table:Ce}},"tableToTableEntry"),Me={txnTime:0},pt,wt,Et=1/0,KE,YE=o((Ce,Kt)=>{if(Ce.type==="end_txn"){Me.txnTime&&(a[i]!==66&&le.error?.("Invalid encoding of message"),N(9),N(IS),O(KE=Kt),$M()),i=c,Me.txnTime=0;return}let Bt=Ce.nodeId,Br=Ce.tableId,Nt=wt[Br];if(!Nt&&(Nt=wt[Br]=Le(h.tableById[Br]),!Nt))return le.debug?.("Not subscribed to table",Br);let Ps=Nt.table,Ft=Ps.primaryStore,ni=Ft.encoder;(Ce.extendedType&OS||!ni.typedStructs)&&(ni._mergeStructures(ni.getStructures()),ni.typedStructs&&(ni.lastTypedStructuresLength=ni.typedStructs.length));let Ru=pt[Bt];if(!(Ru&&Ru.startTime<Kt&&(!Ru.endTime||Ru.endTime>Kt)))return bS&&le.trace?.(s,"skipping replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt),VM();bS&&le.trace?.(s,"sending replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt);let ab=Ce.version;Me.txnTime!==ab&&(Me.txnTime&&(bS&&le.trace?.(s,"new txn time, sending queued txn",Me.txnTime),a[i]!==66&&le.error?.("Invalid encoding of message"),$M()),Me.txnTime=ab,i=c,O(ab));let Hc=Ce.residencyId,cb=VE(Hc,Ps),WE;if(cb&&!cb.includes(g)){let xi=VE(Ce.previousResidencyId,Ps);if(xi&&!xi.includes(g)&&(Ce.type==="put"||Ce.type==="patch")||Ps.getResidencyById)return VM();let Gc=Ce.recordId;le.trace?.(s,"sending invalidation",Gc,g,"from",Bt);let tm=0;Hc&&(tm|=Ol),Ce.previousResidencyId&&(tm|=Pl);let db,zE=null;for(let KM in Ps.indices){if(!zE){if(db=Ce.getValue(Ft,!0),!db)break;zE={}}zE[KM]=db[KM]}WE=Nl(Ce.version,Br,Gc,null,Bt,Ce.user,Ce.type==="put"||Ce.type==="patch"?"invalidate":Ce.type,ni.encode(zE),tm,Hc,Ce.previousResidencyId,Ce.expiresAt)}function VM(){return le.trace?.(s,"skipping audit record",Ce.recordId),G||(G=setTimeout(()=>{G=null,(KE||0)+T$/2<Et&&(bS&&le.trace?.(s,"sending skipped sequence update",Et),e.send((0,ot.encode)([_$,Et])))},T$).unref()),new Promise(setImmediate)}o(VM,"skipAuditRecord");let lb=ni.typedStructs,ub=ni.structures;if((lb?.length!=Nt.typed_length||ub?.length!=Nt.structure_length)&&(Nt.typed_length=lb?.length,Nt.structure_length=ub.length,le.debug?.(s,"send table struct",Nt.typed_length,Nt.structure_length),Nt.sentName||(Nt.sentName=!0),e.send((0,ot.encode)([jN,{typedStructs:lb,structures:ub,attributes:Ps.attributes,schemaDefined:Ps.schemaDefined},Br,Nt.table.tableName]))),Hc&&!$E[Hc]&&(e.send((0,ot.encode)([h$,cb,Hc])),$E[Hc]=!0),WE)N(WE.length),P(WE);else{let xi=Ce.encoded;Ce.extendedType&Jr&&bm(()=>Ce.getValue(Ft),tm=>Ca(tm,Ce.recordId),Ft.rootStore);let Gc=xi[0]===66?8:0;N(xi.length-Gc),P(xi,Gc),le.trace?.("wrote record",Ce.recordId,"length:",xi.length)}if(e._socket.writableNeedDrain){let xi=performance.now();return _u=!0,xt(),new Promise(Gc=>{le.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{Gc(),_u=!1,xt()})})}else return qe>Ui?new Promise(xi=>{Ar=xi}):new Promise(setImmediate)},"sendAuditRecord"),$M=o(()=>{c-i>8?(e.send(a.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ke(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");On=new rC.EventEmitter,On.once("close",()=>{ke=!0,de?.end()});for(let{startTime:Ce}of dn)Ce<Et&&(Et=Ce);(oe||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,wt=h.tableById.map(Le),pt=[];for(let{name:Kt,startTime:Bt,endTime:Br}of dn){let Nt=uS(Kt,f);le.debug?.("subscription to",Kt,"using local id",Nt,"starting",Bt),pt[Nt]={startTime:Bt,endTime:Br}}K(u),Na||(Na=Dl(Kt=>{Kt.databaseName===u&&K(u)}),GE=Vp(Kt=>{Kt===u&&(e.send((0,ot.encode)([Nd])),xr())}),e.on("close",()=>{Na?.remove(),GE?.remove()})),e.send((0,ot.encode)([p$,Mp(h.auditStore),dn.map(({name:Kt})=>Kt)]));let Ce=!0;do{isFinite(Et)||(le.warn?.("Invalid sequence id "+Et),xr(1008,"Invalid sequence id"+Et));let Kt;if(Ce&&!ke&&(Ce=!1,Et===0)){le.info?.("Replicating all tables to",g);let Bt=Et,Br=CS(f);for(let Nt in E){if(!Le(Nt))continue;let Ps=E[Nt];for(let Ft of Ps.primaryStore.getRange({snapshot:!1,versions:!0})){if(ke)return;if(Ft.localTime>=Et){le.trace?.(s,"Copying record from",u,Nt,Ft.key,Ft.localTime),Bt=Math.max(Ft.localTime,Bt),Kt=!0,ri()[qp]=1;let ni=Nl(Ft.version,Ps.tableId,Ft.key,null,Br,null,"put",bm(()=>Ps.primaryStore.encoder.encode(Ft.value),Ru=>Ca(Ru,Ft.key)),Ft.metadataFlags&-256,Ft.residencyId,null,Ft.expiresAt);await YE({recordId:Ft.key,tableId:Ps.tableId,type:"put",getValue(){return Ft.value},encoded:ni,version:Ft.version,residencyId:Ft.residencyId,nodeId:Br,extendedType:Ft.metadataFlags},Ft.localTime)}}}Kt&&YE({type:"end_txn"},Et),ri()[qp]=0,Et=Bt}for(let{key:Bt,value:Br}of f.getRange({start:Et||1,exclusiveStart:!0,snapshot:!1})){if(ke)return;let Nt=At(Br);le.debug?.("sending audit record",Bt,Nt.recordId),ri()[qp]=Bt,Et=Bt,await YE(Nt,Bt),On.startTime=Bt,Kt=!0}Kt&&YE({type:"end_txn"},Et),ri()[qp]=0,await Mq(f)}while(!ke)}).catch(Ce=>{le.error?.(s,"Error handling subscription to node",Ce),xr(1008,"Error handling subscription to node")});break}}return}U.position=8;let w=!0,D,$;do{ri();let Y=U.readInt();if(Y===9&&U.getUint8(U.position)==IS){U.position++,y=$=U.readFloat64(),m[ZN]=y,m[eC]=Date.now(),m[tC]=v$,le.trace?.("received remote sequence update",y,u);break}let j=U.position,B=At(A,j,j+Y),Ee=jf[B.tableId];Ee||le.error?.(`No table found with an id of ${B.tableId}`);let fe;B.residencyId&&(fe=ob[B.residencyId],le.trace?.(s,"received residency list",fe,B.type,B.recordId));try{let pe=B.recordId;S_(()=>{D={table:Ee.name,id:B.recordId,type:B.type,nodeId:Ur.get(B.nodeId),residencyList:fe,timestamp:B.version,value:B.getValue(Ee),user:B.user,beginTxn:w,expiresAt:B.expiresAt}},f?.rootStore,ne=>Oa(ne,pe))}catch(pe){throw pe.message+="typed structures for current decoder"+JSON.stringify(Ee.decoder.typedStructs),pe}w=!1,le.debug?.(s,"received replication message",B.type,"id",D.id,"version",new Date(B.version),"nodeId",D.nodeId),m[ZN]=B.version,m[eC]=Date.now(),m[tC]=U$,h.send(D),U.position=j+Y}while(U.position<A.byteLength);Os++,u!=="system"&&Ke(A.byteLength,"bytes-received",`${g}.${u}.${D?.table||"unknown_table"}`,"replication","ingest"),Os>gu&&!Xf&&(Xf=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(D){let Y=Date.now()-D.timestamp;u!=="system"&&Ke(Y,"replication-latency",g+"."+u+"."+D.table,D.type,"ingest")}Os--,Xf&&(Xf=!1,e.resume(),le.debug?.(`Replication resuming ${g}`)),Ye.length>0&&await Promise.all(Ye),le.trace?.("All blobs finished"),!C&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,ot.encode)([g$,C])),le.trace?.(s,"sent confirmation of a commit at",C),C=null},Yce)),C=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}o(Zf,"onWSMessage"),e.on("ping",tr),e.on("pong",()=>{if(t.connection){let A=performance.now()-J;t.connection.latency=A,ri()&&(m[wS]=A),t.isSubscriptionConnection&&Al({name:g,database:u,url:t.url,latency:A})}J=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(k),clearInterval(H),On&&On.emit("close"),Io&&Io.end();for(let[w,{reject:D}]of R)D(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function xr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",g,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(w){le.error?.(s,"Error closing connection",w)}}o(xr,"close");let Tu=new Set;async function Ca(A,U){let w=__(A);if(Tu.has(w)){le.debug?.("Blob already being sent",w);return}Tu.add(w);try{let D;qe++;for await(let $ of A.stream())D&&(le.debug?.("Sending blob chunk",w,"length",D.length),e.send((0,ot.encode)([yS,{fileId:w,size:A.size},D]))),D=$,e._socket.writableNeedDrain&&(le.debug?.("draining",w),await new Promise(Y=>e._socket.once("drain",Y)),le.debug?.("drained",w)),Ke($.length,"bytes-sent",`${g}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",w,"length",D.length),e.send((0,ot.encode)([yS,{fileId:w,size:A.size,finished:!0},D]))}catch(D){le.warn?.("Error sending blob",D,"blob id",w,"for record",U),e.send((0,ot.encode)([yS,{fileId:w,finished:!0,error:zN(D)},Buffer.alloc(0)]))}finally{Tu.delete(w),qe--,qe<Ui&&Ar?.()}}o(Ca,"sendBlobs");function Oa(A,U){let w=__(A),D=Ae.get(w);le.debug?.("Received transaction with blob",w,"has stream",!!D,"ended",!!D?.writableEnded),D?D.writableEnded&&Ae.delete(w):(D=new JN.PassThrough,Ae.set(w,D)),D.connectedToBlob=!0,D.lastChunk=Date.now(),D.recordId=U,A.size===void 0&&D.expectedSize&&(A.size=D.expectedSize);let $=D.blob??createBlob(D,A);D.blob=$;let Y=Oo(()=>Rm($).saving,h.auditStore?.rootStore);return Y&&(Y.blobId=w,Ye.push(Y),Y.finally(()=>{le.debug?.(`Finished receiving blob stream ${w}`),Ye.splice(Ye.indexOf(Y),1)})),$}o(Oa,"receiveBlobs");function em(){if(p||(p=!0,t.connection?.on("subscriptions-updated",em)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let D of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let $ of D.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(D){if(!D.message.includes("Can not re"))throw D}let U=t.connection?.nodeSubscriptions?.[0];S=[];let w=t.connection?.nodeSubscriptions.map((D,$)=>{let Y=[],{replicateByDefault:j}=D;if(D.subscriptions){for(let pe of D.subscriptions)if(pe.subscribe&&(pe.schema||pe.database)===u){let ne=pe.table;E?.[ne]?.replicate!==!1&&Y.push(ne)}j=!1}else for(let pe in E)(j?E[pe].replicate===!1:E[pe].replicate)&&Y.push(pe);let B=f&&uS(D.name,f),Ee=h?.dbisDB?.get([Symbol.for("seq"),B])??1,fe=Math.max(Ee?.seqId??1,(typeof D.startTime=="string"?new Date(D.startTime).getTime():D.startTime)??1);if(le.debug?.("Starting time recorded in db",D.name,B,u,Ee?.seqId,"start time:",fe,new Date(fe)),U!==D){let pe=f&&uS(U.name,f),ne=h?.dbisDB?.get([Symbol.for("seq"),pe])??1;for(let ie of ne?.nodes||[])ie.name===D.name&&(fe=ie.seqId,le.debug?.("Using sequence id from proxy node",U.name,fe))}if(B===void 0?le.warn("Starting subscription request from node",D,"but no node id found"):S.push(B),A.get(B)>fe&&(fe=A.get(B),le.debug?.("Updating start time from more recent txn recorded",U.name,fe)),fe===1&&RS)try{new URL(RS).hostname===D.name?(le.warn?.(`Requesting full copy of database ${u} from ${RS}`),fe=0):fe=Date.now()-6e4}catch(pe){le.error?.("Error parsing leader URL",RS,pe)}return le.trace?.(s,"defining subscription request",D.name,u,new Date(fe)),{name:D.name,replicateByDefault:j,tables:Y,startTime:fe,endTime:D.endTime}});if(w)if(le.debug?.(s,"sending subscription request",w,h?.dbisDB?.path),clearTimeout(W),w.length>0)e.send((0,ot.encode)([f$,w]));else{let D=o(()=>{let $=performance.now();W=setTimeout(()=>{ue<=$?xr(1008,"Connection has no subscriptions and is no longer used"):D()},X).unref()},"scheduleClose");D()}}o(em,"sendSubscriptionRequestUpdate");function VE(A,U){if(!A)return;let w=Pe[A];return w||(w=U.getResidencyRecord(A),Pe[A]=w),w}o(VE,"getResidence");function Pa(A){return!(tc&&tc!="*"&&!tc[A]&&!tc.includes?.(A)&&!tc.some?.(U=>U.name===A))}o(Pa,"checkDatabaseAccess");function kc(A){if(h=h||d.get(A),!Pa(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[A]);let U=it();if(U===g)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return yu(U,A),!0}o(kc,"setDatabase");function yu(A,U){let w=at()?.[U],D=[];for(let $ in w){let Y=w[$];D.push({table:$,schemaDefined:Y.schemaDefined,attributes:Y.attributes.map(j=>({name:j.name,type:j.type,isPrimaryKey:j.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,ot.encode)([m$,A,U,D]))}o(yu,"sendNodeDBName");function K(A){let U=at()?.[A],w=[];for(let D in U){if(dn&&!dn.some(Y=>Y.replicateByDefault?!Y.tables.includes(D):Y.tables.includes(D)))continue;let $=U[D];w.push({table:D,schemaDefined:$.schemaDefined,attributes:$.attributes.map(Y=>({name:Y.name,type:Y.type,isPrimaryKey:Y.isPrimaryKey}))})}e.send((0,ot.encode)([S$,w,A]))}o(K,"sendDBSchema"),H=setInterval(()=>{for(let[A,U]of Ae)U.lastChunk+ye<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${g}`),Ae.delete(A),U.end())},ye).unref();let _=1,T=[];return{end(){Io&&Io.end(),On&&On.emit("close")},getRecord(A){let U=_++;return new Promise((w,D)=>{let $=[E$,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,ot.encode)($)),ue=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(Y){let{table:j,entry:B}=A;if(w(Y),Y)return j._recordRelocate(B,Y)},reject:D})})},sendOperation(A){let U=_++;return A.requestId=U,e.send((0,ot.encode)([XN,A])),new Promise((w,D)=>{R.set(U,{resolve:w,reject:D})})}};function N(A){x(5),A<128?a[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,w=A.length){let D=w-U;x(D),A.copy(a,c,U,w),c+=D}function O(A){x(8),l.setFloat64(c,A),c+=8}function x(A){if(A+16>a.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);a.copy(U,0,i,c),c=c-i,i=0,a=U,l=new DataView(a.buffer,0,a.length)}}function L(A,U){let w=A.database??"data";U||(U={});let D=U.schemaDefined,$=!1,Y=A.schemaDefined,j=U.attributes||[];for(let B=0;B<A.attributes?.length;B++){let Ee=A.attributes[B],fe=j.find(pe=>pe.name===Ee.name);(!fe||fe.type!==Ee.type)&&(D?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Ee.name}: ${Ee.type}' from '${g}' does not match local attribute ${fe?"'"+fe.name+": "+fe.type+"'":"which does not exist"}`):($=!0,Y||(Ee.indexed=!0),fe?j[j.indexOf(fe)]=Ee:j.push(Ee)))}return $?(le.debug?.("(Re)creating",A),Ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:j,...U})):U}}var b$,ot,A$,I$,w$,rC,N$,C$,Cl,O$,JN,P$,L$,Vce,zN,le,f$,m$,p$,Nd,h$,jN,E$,SS,XN,TS,_$,g$,S$,yS,D$,ZN,eC,qp,wS,tC,M$,v$,U$,Kce,RS,nC,rc,bS,T$,Yce,y$,QN,AS,R$,Cd,sC=se(()=>{we();ki();PN();vN();fs();b$=b(me());q();Qc();ot=require("msgpackr"),A$=require("ws"),I$=require("worker_threads"),w$=b(Q());kp();rC=require("events"),N$=b(ps()),C$=b(require("node:tls"));Rd();Cl=b(require("node:process")),O$=require("node:net");ds();Zn();JN=require("node:stream"),P$=require("lmdb"),L$=b(require("minimist")),{forComponent:Vce,errorToString:zN}=w$.default,le=Vce("replication").conditional,f$=129,m$=140,p$=141,Nd=142,h$=130,jN=132,E$=133,SS=134,XN=136,TS=137,_$=143,g$=144,S$=145,yS=146,D$=0,ZN=1,eC=2,qp=3,wS=4,tC=5,M$=6,v$=0,U$=1,Kce=(0,L$.default)(Cl.argv),RS=Kce.HDB_LEADER_URL??Cl.env.HDB_LEADER_URL,nC=new Map,rc=new Map,bS=!0,T$=300,Yce=2,y$=3e4;o(NS,"createWebSocket");R$=500,Cd=class extends rC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=R$;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??_i(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await NS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Cl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=R$,this.nodeSubscriptions&&Al({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=$p(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Ad({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o($p,"replicateOverWS")});function Kp(e){return e===F$||e===Wce}function zce(e){return e===k$||e===H$}function iC(e){return e===F$?k$:H$}function jce(){if(B$)return;B$=!0;let e=Ml.CryptoEngine.prototype,t=Ml.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return Kp(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Kp(s)?{name:iC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return zce(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Ml.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Kp(i)){let a=iC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Kp(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new Yp.X509Certificate(Buffer.from(i)),l=new Yp.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(Kp(c)){let l=iC(c);try{let u=this.crypto?.subtle||this.subtle||Ml.getCrypto(!0)?.subtle||Yp.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Ml,Yp,F$,Wce,k$,H$,B$,G$=se(()=>{Ml=b(require("pkijs")),Yp=require("node:crypto"),F$="1.3.101.112",Wce="1.3.101.113",k$="Ed25519",H$="Ed448",B$=!1;o(Kp,"isEd25519OrEd448");o(zce,"isEdDSAAlgorithmName");o(iC,"getEdDSAAlgorithmName");o(jce,"applyEd25519Patch");jce()});function Qce(){return PS||(PS=Ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),PS.sourcedFrom(oC)),PS}function Jce(e){if(ht.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return ht.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return ht.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Pd(e,t){ht.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Jce(t);if(r===!1)return ht.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=ele(e);return ht.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(ht.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(ht.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):Xce(n[0].cert,n[0].issuer,r)}async function Xce(e,t,r){ht.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=q$(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=q$(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,$$.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;ht.trace?.("OCSP cache key:",i);let c=await Qce().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??zo.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(ht.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();if(ht.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),l.status==="unknown"&&u&&(l.reason==="ocsp-error"||l.reason==="timeout"||l.reason==="OCSP timeout")){let m=(r?.failureMode??zo.failureMode)==="fail-closed";return m||ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!m,status:m?l.status:"error-allowed",cached:!u,method:l.method||"ocsp"}}return{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return ht.error?.("OCSP verification error:",n),(r?.failureMode??zo.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Zce(e,t,r){ht.trace?.("Performing OCSP check with timeout:",r);try{(0,LS.getCertURLs)(e)}catch(n){return ht.debug?.("Certificate does not contain OCSP URL:",n.message),{status:"unknown",reason:"no-ocsp-url"}}try{let n=await(0,LS.getCertStatus)(e,{ca:t,timeout:r});switch(ht.debug?.("OCSP response:",n.status),n.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(n){let s=n;return ht.debug?.("OCSP check failed:",s.message),{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}function q$(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
20
- `)}function ele(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var LS,$$,V$,ht,oC,zo,PS,DS=se(()=>{G$();LS=require("easy-ocsp"),$$=require("node:crypto"),V$=b(Xn());we();Wa();ht=(0,V$.loggerWithTag)("cert-verification"),oC=class extends qr{static{o(this,"CertificateVerificationSource")}async get(t){ht.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;ht.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??zo.timeout,l=await Promise.race([Zce(s,i,c),new Promise((m,p)=>setTimeout(()=>p(new Error("OCSP timeout")),c))]);if(ht.debug?.("OCSP check result:",l),l.status==="unknown"&&(l.reason==="ocsp-error"||l.reason==="timeout"||l.reason==="no-ocsp-url")){let m=a?.failureMode??zo.failureMode;if(ht.error?.("OCSP check failed:",l.reason),m==="fail-closed"){let p=a?.errorCacheTtl??zo.errorCacheTtl,h=Date.now()+p;return r&&(r.expiresAt=h),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:h,method:"ocsp"}}else return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}let d=a?.cacheTtl??zo.cacheTtl,f=Date.now()+d;return r&&(r.expiresAt=f),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:f,method:"ocsp"}}catch(c){if(ht.error?.("OCSP verification error:",c),(a?.failureMode??zo.failureMode)==="fail-closed"){let u=a?.errorCacheTtl??zo.errorCacheTtl,d=Date.now()+u;return r&&(r.expiresAt=d),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:d,method:"ocsp"}}return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}}},zo={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-open"};o(Qce,"getCertificateCacheTable");o(Jce,"getCertificateVerificationConfig");o(Pd,"verifyCertificate");o(Xce,"verifyOCSP");o(Zce,"performOCSPCheck");o(q$,"bufferToPem");o(ele,"extractCertificateChain")});var Yo={};Re(Yo,{clearThisNodeName:()=>lle,disableReplication:()=>sle,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>Qa,getThisNodeId:()=>CS,getThisNodeName:()=>it,getThisNodeUrl:()=>Ja,hostnameToUrl:()=>xS,lastTimeInAuditStore:()=>vp,monitorNodeCAs:()=>Z$,replicateOperation:()=>dle,replicationCertificateAuthorities:()=>Wo,sendOperationToNode:()=>Wp,servers:()=>rle,setReplicator:()=>tV,start:()=>nle,startOnMainThread:()=>UN,subscribeToNode:()=>Fp,unsubscribeFromNode:()=>mS,urlToNodeName:()=>_i});function nle(e){if(!e.port&&!e.securePort&&(e.port=ks.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=ks.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of xp(e))t.set(_i(s.url),s);ile(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=ve.ws(async(s,i,a,c)=>{if(It.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),$p(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,ve.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Wt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,J$.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Pd(s.peerCertificate,e);if(!u.valid){It.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else It.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:It.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Wo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=US.createSecureContext(u)}catch(l){It.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),ks.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&i()}Z$(()=>{for(let s of n)s()})}function Z$(e){let t=0;yd(r=>{r?.ca&&(Wo.add(r.ca),Wo.size!==t&&(t=Wo.size,e?.()))})}function sle(e=!0){X$=e}function ile(e){X$||(at(),tc=e.databases,Qa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of vS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];tV(r,s,e),nC.get(s)?.forEach(i=>i(s))}}))}function tV(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class eV extends qr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(It.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Jn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===ve.hostname)continue;let E=ale(h,eV.subscription,e);if(E?.isConnected){let g=Td(t.auditStore,e,h)[wS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new j$.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:tle++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",vl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function ole(e,t,r,n,s){let i=vS.get(e);i||vS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Cd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function ale(e,t,r){let n=K$.get(vl);n||(n=new Map,K$.set(vl,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new Cd(i.url,t,r,vl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Wp(e,t,r){r||(r={}),r.serverName=e.name;let n=await NS(e.url,r),s=$p(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Fp(e){try{Q$.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=ole(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Up(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function mS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=vS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function cle(){if(aC!==void 0)return aC;let e=ks.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||ks.default.get(F.TLS_CERTIFICATE);if(e)return aC=new W$.X509Certificate((0,z$.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return vl||(vl=ks.default.get("replication_hostname")??_i(ks.default.get("replication_url"))??cle()??Y$("operationsapi_network_secureport")??Y$("operationsapi_network_port")??"127.0.0.1")}function lle(){vl=void 0}function Y$(e){let t=ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function MS(e){let t=ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function CS(e){return Mp(e)?.[it()]}function Ja(){let e=ks.default.get("replication_url");return e||xS(it())}function xS(e){let t=MS("replication_port");if(t)return`ws://${e}:${t}`;if(t=MS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=MS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=MS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function _i(e){if(e)return new URL(e).hostname}function Qa(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return Vp(n=>{r(n)}),Dl((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):ule(n)&&t(s,n,!1)}o(r,"forDatabase")}function ule(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function vp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function dle(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",ve.nodes.map(n=>n.name));let r=await Promise.allSettled(ve.nodes.map(n=>Wp(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=ve.nodes[s]?.name,i})}return t}var ks,It,W$,z$,US,j$,Q$,J$,X$,tle,rle,Wo,tc,vS,K$,aC,vl,fs=se(()=>{we();Wa();wu();sC();Fr();ks=b(me()),It=b(Q()),W$=require("crypto");DS();z$=require("fs");kp();Rd();q();PN();US=b(require("node:tls")),j$=b(_e()),Q$=require("worker_threads"),J$=b(ps()),tle=1,rle=[],Wo=ks.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(US.rootCertificates):new Set;o(nle,"start");o(Z$,"monitorNodeCAs");o(sle,"disableReplication");o(ile,"assignReplicationSource");o(tV,"setReplicator");vS=new Map;o(ole,"getSubscriptionConnection");K$=new Map;o(ale,"getRetrievalConnectionByName");o(Wp,"sendOperationToNode");o(Fp,"subscribeToNode");o(mS,"unsubscribeFromNode");o(cle,"getCommonNameFromCert");o(it,"getThisNodeName");o(lle,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(Y$,"getHostFromListeningPort");o(MS,"getPortFromListeningPort");o(CS,"getThisNodeId");ve.replication={getThisNodeId:CS,exportIdMapping:Mp};o(Ja,"getThisNodeUrl");o(xS,"hostnameToUrl");o(_i,"urlToNodeName");o(Qa,"forEachReplicatedDatabase");o(ule,"hasExplicitlyReplicatedTable");o(vp,"lastTimeInAuditStore");o(dle,"replicateOperation")});var GS=v((iUe,oV)=>{"use strict";var Ld=QG(),{validateBySchema:zp}=ft(),{commonValidators:Dd,schemaRegex:cC}=$i(),_r=require("joi"),fle=Q(),mle=require("uuid").v4,kS=ko(),Md=(q(),M(z)),ple=require("util"),nc=rs(),{handleHDBError:jo,hdbErrors:hle,ClientError:Ul}=_e(),{HDB_ERROR_MSGS:BS,HTTP_STATUS_CODES:Qo}=hle,{SchemaEventMsg:HS}=as(),rV=hr(),{getDatabases:Ele}=(we(),M(mt)),{transformReq:vd}=ae(),{replicateOperation:nV}=(fs(),M(Yo)),{cleanupOrphans:_le}=(Zn(),M(T_)),FS=_r.string().min(1).max(Dd.schema_length.maximum).pattern(cC).messages({"string.pattern.base":"{:#label} "+Dd.schema_format.message}),gle=_r.string().min(1).max(Dd.schema_length.maximum).pattern(cC).messages({"string.pattern.base":"{:#label} "+Dd.schema_format.message}).required(),Sle=_r.string().min(1).max(Dd.schema_length.maximum).pattern(cC).messages({"string.pattern.base":"{:#label} "+Dd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();oV.exports={createSchema:Tle,createSchemaStructure:sV,createTable:yle,createTableStructure:iV,createAttribute:wle,dropSchema:Rle,dropTable:ble,dropAttribute:Ale,getBackup:Nle,cleanupOrphanBlobs:Cle};async function Tle(e){let t=await sV(e);return kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema)),t}o(Tle,"createSchema");async function sV(e){let t=zp(e,_r.object({database:FS,schema:FS}));if(t)throw new Ul(t.message);if(vd(e),!await Ld.checkSchemaExists(e.schema))throw jo(new Error,BS.SCHEMA_EXISTS_ERR(e.schema),Qo.BAD_REQUEST,Md.LOG_LEVELS.ERROR,BS.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(sV,"createSchemaStructure");async function yle(e){return vd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await iV(e)}o(yle,"createTable");async function iV(e){let t=zp(e,_r.object({database:FS,schema:FS,table:gle,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:Sle}));if(t)throw new Ul(t.message);if(!await Ld.checkSchemaTableExists(e.schema,e.table))throw jo(new Error,BS.TABLE_EXISTS_ERR(e.schema,e.table),Qo.BAD_REQUEST,Md.LOG_LEVELS.ERROR,BS.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:mle(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw jo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qo.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(iV,"createTableStructure");async function Rle(e){let t=zp(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Ul(t.message);vd(e);let r=await Ld.checkSchemaExists(e.schema);if(r)throw jo(new Error,r,Qo.NOT_FOUND,Md.LOG_LEVELS.ERROR,r,!0);let n=await Ld.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema)),await rV.purgeSchemaTableStreams(e.schema,s);let i=await nV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Rle,"dropSchema");async function ble(e){let t=zp(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Ul(t.message);vd(e);let r=await Ld.checkSchemaTableExists(e.schema,e.table);if(r)throw jo(new Error,r,Qo.NOT_FOUND,Md.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await rV.purgeTableStream(e.schema,e.table);let n=await nV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(ble,"dropTable");async function Ale(e){let t=zp(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new Ul(t.message);vd(e);let r=await Ld.checkSchemaTableExists(e.schema,e.table);if(r)throw jo(new Error,r,Qo.NOT_FOUND,Md.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jo(new Error,"You cannot drop a hash attribute",Qo.BAD_REQUEST,void 0,void 0,!0);if(Md.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qo.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),Ile(e),kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw fle.error(`Got an error deleting attribute ${ple.inspect(e)}.`),n}}o(Ale,"dropAttribute");function Ile(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Ile,"dropAttributeFromGlobal");async function wle(e){vd(e);let t=Ele()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Qo.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(wle,"createAttribute");function Nle(e){return nc.getBackup(e)}o(Nle,"getBackup");function Cle(e){if(!e.database)throw new Ul('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Ul(`Unknown database '${e.database}'`);return _le(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Cle,"cleanupOrphanBlobs")});var cV=v((aUe,aV)=>{"use strict";var{OPERATIONS_ENUM:Ole}=(q(),M(z)),lC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ole.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};aV.exports=lC});var uC=v((uUe,mV)=>{"use strict";var Ple=rs(),lUe=cV(),qS=ae(),$S=(q(),M(z)),Lle=me(),{handleHDBError:lV,hdbErrors:Dle}=_e(),{HDB_ERROR_MSGS:uV,HTTP_STATUS_CODES:dV}=Dle,Mle=Object.values($S.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),fV="To use this operation audit log must be enabled in harperdb-config.yaml";mV.exports=vle;async function vle(e){if(qS.isEmpty(e.schema))throw new Error(uV.SCHEMA_REQUIRED_ERR);if(qS.isEmpty(e.table))throw new Error(uV.TABLE_REQUIRED_ERR);if(!Lle.get($S.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lV(new Error,fV,dV.BAD_REQUEST,$S.LOG_LEVELS.ERROR,fV,!0);let t=qS.checkSchemaTableExist(e.schema,e.table);if(t)throw lV(new Error,t,dV.NOT_FOUND,$S.LOG_LEVELS.ERROR,t,!0);if(!qS.isEmpty(e.search_type)&&Mle.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Ple.readAuditLog(e)}o(vle,"readAuditLog")});var hV=v((fUe,pV)=>{"use strict";var{OPERATIONS_ENUM:Ule}=(q(),M(z)),dC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ule.GET_BACKUP,this.schema=t,this.table=r}};pV.exports=dC});var gV=v((EUe,_V)=>{"use strict";var xle=rs(),pUe=hV(),fC=ae(),Ble=(q(),M(z)),hUe=me(),{handleHDBError:Fle,hdbErrors:kle}=_e(),{HDB_ERROR_MSGS:EV,HTTP_STATUS_CODES:Hle}=kle;_V.exports=Gle;async function Gle(e){if(fC.isEmpty(e.schema))throw new Error(EV.SCHEMA_REQUIRED_ERR);if(fC.isEmpty(e.table))throw new Error(EV.TABLE_REQUIRED_ERR);let t=fC.checkSchemaTableExist(e.schema,e.table);if(t)throw Fle(new Error,t,Hle.NOT_FOUND,Ble.LOG_LEVELS.ERROR,t,!0);return await xle.getBackup(readAuditLogObject)}o(Gle,"getBackup")});var RV=v((gUe,yV)=>{"use strict";var qle=me(),sc=require("joi"),$le=ft(),SV=require("moment"),Vle=require("fs-extra"),mC=require("path"),Kle=require("lodash"),jp=(q(),M(z)),{LOG_LEVELS:xl}=(q(),M(z)),Yle="YYYY-MM-DD hh:mm:ss",Wle=mC.resolve(__dirname,"../logs");yV.exports=function(e){return $le.validateBySchema(e,zle)};var zle=sc.object({from:sc.custom(TV),until:sc.custom(TV),level:sc.valid(xl.NOTIFY,xl.FATAL,xl.ERROR,xl.WARN,xl.INFO,xl.DEBUG,xl.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(jle)});function TV(e,t){if(SV(e,SV.ISO_8601).format(Yle)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(TV,"validateDatetime");function jle(e,t){if(Kle.invert(jp.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=qle.get(jp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?jp.LOG_NAMES.HDB:e,i=s===jp.LOG_NAMES.INSTALL?mC.join(Wle,jp.LOG_NAMES.INSTALL):mC.join(n,s);return Vle.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(jle,"validateReadLogPath")});var hC=v((TUe,AV)=>{"use strict";var VS=(q(),M(z)),Qle=Q(),Jle=me(),Xle=RV(),pC=require("path"),bV=require("fs-extra"),{once:Zle}=require("events"),{handleHDBError:eue,hdbErrors:tue}=_e(),{PACKAGE_ROOT:rue}=Ct(),{replicateOperation:nue}=(fs(),M(Yo)),sue=pC.join(rue,"logs"),iue=1e3,oue=200;AV.exports=aue;async function aue(e){let t=Xle(e);if(t)throw eue(t,t.message,tue.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nue(e),n=Jle.get(VS.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?VS.LOG_NAMES.HDB:e.log_name,i=s===VS.LOG_NAMES.INSTALL?pC.join(sue,VS.LOG_NAMES.INSTALL):pC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?iue:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(bV.statSync(i).size-(E+5)*oue,0));let R=bV.createReadStream(i,{start:g});R.on("error",G=>{Qle.error(G)});let S=0,y=[],C="",I;R.on("data",G=>{let H=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=C+G;let X=0,W;for(;(W=H.exec(G))&&!R.destroyed;){I&&(I.message=G.slice(X,W.index),k(I));let[ue,ce,te]=W,ye=te.split("] ["),Ae=ye[0],Ye=ye[1];ye.splice(0,2),I={timestamp:ce,thread:Ae,level:Ye,tags:ye,message:""},X=W.index+ue.length}C=G.slice(X)}),R.on("end",G=>{R.destroyed||I&&(I.message=C.trim(),k(I))}),R.resume();function k(G){let H,X,W;switch(!0){case(a&&l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),G.level===c&&H>=X&&H<=W&&S<h?S++:G.level===c&&H>=X&&H<=W&&(io(G,p,y),S++,S===E&&R.destroy());break;case(a&&l):H=new Date(G.timestamp),X=new Date(u),G.level===c&&H>=X&&S<h?S++:G.level===c&&H>=X&&(io(G,p,y),S++,S===E&&R.destroy());break;case(a&&d):H=new Date(G.timestamp),W=new Date(f),G.level===c&&H<=W&&S<h?S++:G.level===c&&H<=W&&(io(G,p,y),S++,S===E&&R.destroy());break;case(l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),H>=X&&H<=W&&S<h?S++:H>=X&&H<=W&&(io(G,p,y),S++,S===E&&R.destroy());break;case a:G.level===c&&S<h?S++:G.level===c&&(io(G,p,y),S++,S===E&&R.destroy());break;case l:H=new Date(G.timestamp),X=new Date(u),H>=X&&S<h?S++:H>=X&&S>=h&&(io(G,p,y),S++,S===E&&R.destroy());break;case d:H=new Date(G.timestamp),W=new Date(f),H<=W&&S<h?S++:H<=W&&S>=h&&(io(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(io(G,p,y),S++,S===E&&R.destroy())}}o(k,"onLogMessage"),await Zle(R,"close");let J=await r;if(J.replicated){for(let G of y)G.node=server.hostname;for(let G of J.replicated){let H=G.node;if(G.status==="failed")io({timestamp:new Date().toISOString(),level:"error",node:H,message:`Error retrieving logs: ${G.reason}`},p,y);else for(let X of G.results)X.node=H,io(X,p,y)}}return y}o(aue,"readLog");function io(e,t,r){t==="desc"?cue(e,r):t==="asc"?lue(e,r):r.push(e)}o(io,"pushLineToResult");function cue(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(cue,"insertDescending");function lue(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(lue,"insertAscending")});var KS=v((wUe,CV)=>{"use strict";var EC=require("joi"),{string:Ud,boolean:IV,date:uue}=EC.types(),due=ft(),{validateSchemaExists:RUe,validateTableExists:bUe,validateSchemaName:AUe}=$i(),fue=(q(),M(z)),mue=Ot(),wV=me();wV.initSync();var IUe=Ud.invalid(wV.get(fue.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(mue.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),NV={operation:Ud.valid("add_node","update_node","set_node_replication"),node_name:Ud.optional(),subscriptions:EC.array().items({table:Ud.optional(),schema:Ud.optional(),database:Ud.optional(),subscribe:IV.required(),publish:IV.required().custom(hue),start_time:uue.iso()})};function pue(e){return due.validateBySchema(e,EC.object(NV))}o(pue,"addUpdateNodeValidator");function hue(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(hue,"checkForFalsy");CV.exports={addUpdateNodeValidator:pue,validationSchema:NV}});var xd=v((CUe,OV)=>{"use strict";var _C=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},gC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};OV.exports={Node:_C,NodeSubscription:gC}});var LV=v((PUe,PV)=>{"use strict";var Eue=(q(),M(z)).OPERATIONS_ENUM,SC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Eue.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PV.exports=SC});var Qp=v((DUe,DV)=>{"use strict";var TC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},yC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};DV.exports={RemotePayloadObject:TC,RemotePayloadSubscription:yC}});var vV=v((vUe,MV)=>{"use strict";var RC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};MV.exports=RC});var xV=v((HUe,UV)=>{"use strict";var _ue=vV(),xUe=Yt(),BUe=_t(),gue=Q(),{getSchemaPath:FUe,getTransactionAuditStorePath:kUe}=Rt(),{getDatabases:Sue}=(we(),M(mt));UV.exports=Tue;async function Tue(e){let t=new _ue;try{let r=Sue()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){gue.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tue,"lmdbGetTableSize")});var FV=v((qUe,BV)=>{"use strict";var bC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};BV.exports=bC});var Xp=v((zUe,qV)=>{"use strict";var yue=require("fs-extra"),Rue=require("path"),Rn=require("systeminformation"),ic=Q(),kV=hr(),VUe=Ot(),Bd=(q(),M(z)),bue=xV(),Aue=Sl(),{getThreadInfo:HV}=nt(),Jp=me();Jp.initSync();var Iue=FV(),{openEnvironment:KUe}=_t(),{getSchemaPath:YUe}=Rt(),{database:WUe,databases:AC}=(we(),M(mt)),YS;qV.exports={getHDBProcessInfo:CC,getNetworkInfo:PC,getDiskInfo:OC,getMemoryInfo:NC,getCPUInfo:wC,getTimeInfo:IC,getSystemInformation:LC,systemInformation:wue,getTableSize:DC,getMetrics:MC};function IC(){return Rn.time()}o(IC,"getTimeInfo");async function wC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await Rn.cpu();d.cpu_speed=await Rn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await Rn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:C,rawLoadIdle:I,rawLoadIrq:k,rawLoadNice:J,rawLoadSystem:G,rawLoadUser:H,...X}=y;S.cpus.push(X)}),d.current_load=S,d}catch(e){return ic.error(`error in getCPUInfo: ${e}`),{}}}o(wC,"getCPUInfo");async function NC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ic.error(`error in getMemoryInfo: ${e}`),{}}}o(NC,"getMemoryInfo");async function CC(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await yue.readFile(Rue.join(Jp.get(Bd.CONFIG_PARAMS.ROOTPATH),Bd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Bd.NODE_ERROR_CODES.ENOENT)ic.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ic.error(`error in getHDBProcessInfo: ${t}`),e}}o(CC,"getHDBProcessInfo");async function OC(){let e={};try{if(!Jp.get(Bd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Rn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await Rn.fsStats();return e.read_write=u,e.size=await Rn.fsSize(),e}catch(t){return ic.error(`error in getDiskInfo: ${t}`),e}}o(OC,"getDiskInfo");async function PC(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Jp.get(Bd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Rn.networkInterfaceDefault(),e.latency=await Rn.inetChecksite("google.com"),(await Rn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Rn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return ic.error(`error in getNetworkInfo: ${t}`),e}}o(PC,"getNetworkInfo");async function LC(){if(YS!==void 0)return YS;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await Rn.osInfo();e=c;let l=await Rn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,YS=e,YS}catch(t){return ic.error(`error in getSystemInformation: ${t}`),e}}o(LC,"getSystemInformation");async function DC(){let e=[],t=await Aue.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await bue(n));return e}o(DC,"getTableSize");async function MC(){let e={};for(let t in AC){let r=e[t]={},n=r.tables={};for(let s in AC[t])try{let i=AC[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){ic.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(MC,"getMetrics");async function GV(){if(Jp.get(Bd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await kV.getNATSReferences(),t=await kV.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(GV,"getNatsStreamInfo");async function wue(e){let t=new Iue;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LC(),t.time=IC(),t.cpu=await wC(),t.memory=await NC(),t.disk=await OC(),t.network=await PC(),t.harperdb_processes=await CC(),t.table_size=await DC(),t.metrics=await MC(),t.threads=await HV(),t.replication=await GV(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LC();break;case"time":t.time=IC();break;case"cpu":t.cpu=await wC();break;case"memory":t.memory=await NC();break;case"disk":t.disk=await OC();break;case"network":t.network=await PC();break;case"harperdb_processes":t.harperdb_processes=await CC();break;case"table_size":t.table_size=await DC();break;case"database_metrics":case"metrics":t.metrics=await MC();break;case"threads":t.threads=await HV();break;case"replication":t.replication=await GV();break;default:break}return t}o(wue,"systemInformation")});var Jo=v((ZUe,YV)=>{"use strict";var Nue=Fn(),vC=ae(),Cue=require("util"),Bl=(q(),M(z)),$V=me();$V.initSync();var Oue=Jw(),VV=pn(),{Node:QUe,NodeSubscription:JUe}=xd(),Pue=Ju(),Lue=LV(),{RemotePayloadObject:Due,RemotePayloadSubscription:Mue}=Qp(),{handleHDBError:vue,hdbErrors:Uue}=_e(),{HTTP_STATUS_CODES:xue,HDB_ERROR_MSGS:Bue}=Uue,Fue=di(),kue=Xp(),{packageJson:Hue}=Ct(),{getDatabases:Gue}=(we(),M(mt)),XUe=Cue.promisify(Oue.authorize),que=VV.searchByHash,$ue=VV.searchByValue;YV.exports={isEmpty:Vue,getNodeRecord:Kue,upsertNodeRecord:Yue,buildNodePayloads:Wue,checkClusteringEnabled:zue,getAllNodeRecords:jue,getSystemInfo:Que,reverseSubscription:KV};function Vue(e){return e==null}o(Vue,"isEmpty");async function Kue(e){let t=new Pue(Bl.SYSTEM_SCHEMA_NAME,Bl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return que(t)}o(Kue,"getNodeRecord");async function Yue(e){let t=new Lue(Bl.SYSTEM_SCHEMA_NAME,Bl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Nue.upsert(t)}o(Yue,"upsertNodeRecord");function KV(e){if(vC.isEmpty(e.subscribe)||vC.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(KV,"reverseSubscription");function Wue(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=vC.getTableHashAttribute(l,u),{subscribe:f,publish:m}=KV(c),p=Gue()[l]?.[u],h=new Mue(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Due(r,t,s,n)}o(Wue,"buildNodePayloads");function zue(){if(!$V.get(Bl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vue(new Error,Bue.CLUSTERING_NOT_ENABLED,xue.BAD_REQUEST,void 0,void 0,!0)}o(zue,"checkClusteringEnabled");async function jue(){let e=new Fue(Bl.SYSTEM_SCHEMA_NAME,Bl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $ue(e))}o(jue,"getAllNodeRecords");async function Que(){let e=await kue.getSystemInformation();return{hdb_version:Hue.version,node_version:e.node_version,platform:e.platform}}o(Que,"getSystemInfo")});var UC=v((txe,e1)=>{"use strict";var WS=hr(),WV=ae(),zV=Ot(),jV=(q(),M(z)),zS=Q(),QV=GS(),Jue=ip(),{RemotePayloadObject:Xue}=Qp(),{handleHDBError:JV,hdbErrors:Zue}=_e(),{HTTP_STATUS_CODES:XV}=Zue,{NodeSubscription:ZV}=xd();e1.exports=ede;async function ede(e,t){let r;try{r=await WS.request(`${t}.${zV.REQUEST_SUFFIX}`,new Xue(jV.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),zS.trace("Response from remote describe all request:",r)}catch(a){zS.error(`addNode received error from describe all request to remote node: ${a}`);let c=WS.requestErrorHandler(a,"add_node",t);throw JV(new Error,c,XV.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===zV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw JV(new Error,a,XV.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===jV.SYSTEM_SCHEMA_NAME){await WS.createLocalTableStream(l,c);let h=new ZV(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=WV.doesSchemaExist(l),d=n[l]!==void 0,f=c?WV.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(zS.trace(`addNode creating schema: ${l}`),await QV.createSchema({operation:"create_schema",schema:l})),!f&&m){zS.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Jue(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await QV.createTable(h)}await WS.createLocalTableStream(l,c);let p=new ZV(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(ede,"reviewSubscriptions")});var Fd={};Re(Fd,{addNodeBack:()=>xC,removeNodeBack:()=>BC,setNode:()=>sde});async function sde(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=_i(t)):t=xS(r);let n=(0,r1.validateBySchema)(e,nde);if(n)throw(0,Xo.handleHDBError)(n,n.message,rde.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Xo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Wt(),E=await h.get(p);if(!E)throw new Xo.ClientError(p+" does not exist");try{await Wp({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){hs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Xo.ClientError("url required for this operation");let s=Ja();if(s==null)throw new Xo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Hs.getReplicationCert)();let p=await(0,Hs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Hs.createCsr)(),hs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,hs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ac.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ac.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ac.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(t1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=t1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Wp({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,hs.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(hs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Hs.setCertTable)({name:tde.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Hs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ac.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ac.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Vo(it(),p)}await Vo(u?u.nodeName:f.name??_i(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function xC(e){hs.trace("addNodeBack received request:",e);let t=await(0,Hs.signCertificate)(e),r;e.csr?(r=t.signingCA,hs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,hs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Hs.getReplicationCertAuth)();if(n.replicates){let i={url:Ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ac.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ac.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Vo(it(),i)}return await Vo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,hs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function BC(e){hs.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function t1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Hs,r1,oc,ac,hs,Xo,tde,rde,nde,kd=se(()=>{Hs=b(ps()),r1=b(ft()),oc=b(require("joi")),ac=b(me());q();kp();Rd();fs();hs=b(Q()),Xo=b(_e()),{pki:tde}=require("node-forge"),{HTTP_STATUS_CODES:rde}=Xo.hdbErrors,nde=oc.default.object({hostname:oc.default.string(),verify_tls:oc.default.boolean(),replicates:oc.default.boolean(),subscriptions:oc.default.array(),revoked_certificates:oc.default.array(),shard:oc.default.number()});o(sde,"setNode");o(xC,"addNodeBack");o(BC,"removeNodeBack");o(t1,"reverseSubscription")});var ZS=v((uxe,s1)=>{"use strict";var{handleHDBError:jS,hdbErrors:ide}=_e(),{HTTP_STATUS_CODES:QS}=ide,{addUpdateNodeValidator:ode}=KS(),JS=Q(),XS=(q(),M(z)),n1=Ot(),ade=ae(),Zp=hr(),eh=Jo(),FC=me(),cde=UC(),{Node:lde,NodeSubscription:ude}=xd(),{broadcast:dde}=nt(),{setNode:fde}=(kd(),M(Fd)),cxe=me(),lxe=(q(),M(z)),mde="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",pde="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hde=FC.get(XS.CONFIG_PARAMS.CLUSTERING_NODENAME);s1.exports=Ede;async function Ede(e,t=!1){if(JS.trace("addNode called with:",e),FC.get(XS.CONFIG_PARAMS.REPLICATION_URL)||FC.get(XS.CONFIG_PARAMS.REPLICATION_HOSTNAME))return fde(e);eh.checkClusteringEnabled();let r=ode(e);if(r)throw jS(r,r.message,QS.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await eh.getNodeRecord(n);if(!ade.isEmptyOrZeroLength(f))throw jS(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,QS.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await cde(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=mde,a;let c=eh.buildNodePayloads(s,hde,XS.OPERATIONS_ENUM.ADD_NODE,await eh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new ude(p.schema,p.table,p.publish,p.subscribe))}JS.trace("addNode sending remote payload:",c);let u;try{u=await Zp.request(`${n}.${n1.REQUEST_SUFFIX}`,c)}catch(f){JS.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Zp.updateRemoteConsumer(E,n)}let m=Zp.requestErrorHandler(f,"add_node",n);throw jS(new Error,m,QS.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===n1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw jS(new Error,f,QS.INTERNAL_SERVER_ERROR,"error",f)}JS.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Zp.updateRemoteConsumer(p,n),p.subscribe===!0&&await Zp.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new lde(n,l,u.system_info);return await eh.upsertNodeRecord(d),dde({type:"nats_update"}),i.length>0?a.message=pde:a.message=`Successfully added '${n}' to manifest`,a}o(Ede,"addNode")});var qC=v((mxe,o1)=>{"use strict";var{handleHDBError:kC,hdbErrors:_de}=_e(),{HTTP_STATUS_CODES:HC}=_de,{addUpdateNodeValidator:gde}=KS(),th=Q(),eT=(q(),M(z)),i1=Ot(),fxe=ae(),rh=hr(),nh=Jo(),GC=me(),{cloneDeep:Sde}=require("lodash"),Tde=UC(),{Node:yde,NodeSubscription:Rde}=xd(),{broadcast:bde}=nt(),{setNode:Ade}=(kd(),M(Fd)),Ide="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",wde="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nde=GC.get(eT.CONFIG_PARAMS.CLUSTERING_NODENAME);o1.exports=Cde;async function Cde(e){if(th.trace("updateNode called with:",e),GC.get(eT.CONFIG_PARAMS.REPLICATION_URL)??GC.get(eT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ade(e);nh.checkClusteringEnabled();let t=gde(e);if(t)throw kC(t,t.message,HC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await nh.getNodeRecord(r);s.length>0&&(n=Sde(s));let{added:i,skipped:a}=await Tde(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Ide,c;let l=nh.buildNodePayloads(i,Nde,eT.OPERATIONS_ENUM.UPDATE_NODE,await nh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];th.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}th.trace("updateNode sending remote payload:",l);let u;try{u=await rh.request(`${r}.${i1.REQUEST_SUFFIX}`,l)}catch(d){th.error(`updateNode received error from request: ${d}`);let f=rh.requestErrorHandler(d,"update_node",r);throw kC(new Error,f,HC.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===i1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw kC(new Error,d,HC.INTERNAL_SERVER_ERROR,"error",d)}th.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await rh.updateRemoteConsumer(m,r),m.subscribe===!0?await rh.updateConsumerIterator(m.schema,m.table,r,"start"):await rh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new yde(r,[],u.system_info)]),await Ode(n[0],i,u.system_info),a.length>0?c.message=wde:c.message=`Successfully updated '${r}'`,c}o(Cde,"updateNode");async function Ode(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Rde(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await nh.upsertNodeRecord(n),bde({type:"nats_update"})}o(Ode,"updateNodeTable")});var d1=v((hxe,u1)=>{"use strict";var l1=require("joi"),{string:a1}=l1.types(),Pde=ft(),c1=(q(),M(z)),Lde=me(),Dde=Ot();u1.exports=Mde;function Mde(e){let t=a1.invalid(Lde.get(c1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Dde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=l1.object({operation:a1.valid(c1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Pde.validateBySchema(e,r)}o(Mde,"removeNodeValidator")});var tT=v((_xe,E1)=>{"use strict";var{handleHDBError:f1,hdbErrors:vde}=_e(),{HTTP_STATUS_CODES:m1}=vde,Ude=d1(),sh=Q(),p1=Jo(),xde=ae(),Hd=(q(),M(z)),h1=Ot(),$C=hr(),VC=me(),{RemotePayloadObject:Bde}=Qp(),{NodeSubscription:Fde}=xd(),kde=sp(),Hde=rl(),{broadcast:Gde}=nt(),{setNode:qde}=(kd(),M(Fd)),$de=VC.get(Hd.CONFIG_PARAMS.CLUSTERING_NODENAME);E1.exports=Vde;async function Vde(e){if(sh.trace("removeNode called with:",e),VC.get(Hd.CONFIG_PARAMS.REPLICATION_URL)??VC.get(Hd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qde(e);p1.checkClusteringEnabled();let t=Ude(e);if(t)throw f1(t,t.message,m1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await p1.getNodeRecord(r);if(xde.isEmptyOrZeroLength(n))throw f1(new Error,`Node '${r}' was not found.`,m1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Bde(Hd.OPERATIONS_ENUM.REMOVE_NODE,$de,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await $C.updateConsumerIterator(d.schema,d.table,r,"stop");try{await $C.updateRemoteConsumer(new Fde(d.schema,d.table,!1,!1),r)}catch(f){sh.error(f)}}try{i=await $C.request(`${r}.${h1.REQUEST_SUFFIX}`,s),sh.trace("Remove node reply from remote node:",r,i)}catch(l){sh.error("removeNode received error from request:",l),a=!0}let c=new kde(Hd.SYSTEM_SCHEMA_NAME,Hd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Hde.deleteRecord(c),Gde({type:"nats_update"}),i?.status===h1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(sh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Vde,"removeNode")});var S1=v((Sxe,g1)=>{"use strict";var _1=require("joi"),{string:Kde,array:Yde}=_1.types(),Wde=ft(),zde=KS();g1.exports=jde;function jde(e){let t=_1.object({operation:Kde.valid("configure_cluster").required(),connections:Yde.items(zde.validationSchema).required()});return Wde.validateBySchema(e,t)}o(jde,"configureClusterValidator")});var KC=v((yxe,A1)=>{"use strict";var T1=(q(),M(z)),rT=Q(),Qde=ae(),Jde=me(),Xde=tT(),Zde=ZS(),efe=Jo(),tfe=S1(),{handleHDBError:y1,hdbErrors:rfe}=_e(),{HTTP_STATUS_CODES:R1}=rfe,nfe="Configure cluster complete.",sfe="Failed to configure the cluster. Check the logs for more details.",ife="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";A1.exports=ofe;async function ofe(e){rT.trace("configure cluster called with:",e);let t=tfe(e);if(t)throw y1(t,t.message,R1.BAD_REQUEST,void 0,void 0,!0);let r=await efe.getAllNodeRecords(),n=[];if(Jde.get(T1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await b1(Xde,{operation:T1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}rT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await b1(Zde,f,f.node_name);s.push(m)}rT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(rT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Qde.isEmptyOrZeroLength(a))return{message:nfe,connections:c};if(l)return{message:ife,failed_nodes:a,connections:c};throw y1(new Error,sfe,R1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(ofe,"configureCluster");async function b1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(b1,"functionWrapper")});var C1=v((bxe,N1)=>{"use strict";var ih=require("joi"),afe=ft(),{validateSchemaExists:I1,validateTableExists:cfe,validateSchemaName:w1}=$i(),lfe=ih.object({operation:ih.string().valid("purge_stream"),schema:ih.string().custom(I1).custom(w1).optional(),database:ih.string().custom(I1).custom(w1).optional(),table:ih.string().custom(cfe).required()});function ufe(e){return afe.validateBySchema(e,lfe)}o(ufe,"purgeStreamValidator");N1.exports=ufe});var YC=v((Ixe,O1)=>{"use strict";var{handleHDBError:dfe,hdbErrors:ffe}=_e(),{HTTP_STATUS_CODES:mfe}=ffe,pfe=C1(),hfe=hr(),Efe=Jo();O1.exports=_fe;async function _fe(e){e.schema=e.schema??e.database;let t=pfe(e);if(t)throw dfe(t,t.message,mfe.BAD_REQUEST,void 0,void 0,!0);Efe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await hfe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(_fe,"purgeStream")});var jC=v((Nxe,B1)=>{"use strict";var zC=Jo(),gfe=hr(),sT=me(),Gd=(q(),M(z)),Fl=Ot(),Sfe=ae(),WC=Q(),{RemotePayloadObject:Tfe}=Qp(),{ErrorCode:P1}=require("nats"),{parentPort:L1}=require("worker_threads"),{onMessageByType:yfe}=nt(),{getThisNodeName:Rfe}=(fs(),M(Yo)),{requestClusterStatus:bfe}=(kp(),M(Vq)),{getReplicationSharedStatus:Afe,getHDBNodeTable:Ife}=(Rd(),M(kq)),{CONFIRMATION_STATUS_POSITION:wfe,RECEIVED_VERSION_POSITION:D1,RECEIVED_TIME_POSITION:Nfe,SENDING_TIME_POSITION:Cfe,RECEIVING_STATUS_POSITION:Ofe,RECEIVING_STATUS_RECEIVING:Pfe,BACK_PRESSURE_RATIO_POSITION:Lfe}=(sC(),M(x$)),M1=sT.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED),v1=sT.get(Gd.CONFIG_PARAMS.CLUSTERING_NODENAME);B1.exports={clusterStatus:Dfe,buildNodeStatus:x1};var U1;yfe("cluster-status",async e=>{U1(e)});async function Dfe(){if(sT.get(Gd.CONFIG_PARAMS.REPLICATION_URL)||sT.get(Gd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(L1){L1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{U1=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Afe(u,l,a);c.lastCommitConfirmed=nT(d[wfe]),c.lastReceivedRemoteTime=nT(d[D1]),c.lastReceivedLocalTime=nT(d[Nfe]),c.lastReceivedVersion=d[D1],c.sendingMessage=nT(d[Cfe]),c.backPressurePercent=d[Lfe]*100,c.lastReceivedStatus=d[Ofe]===Pfe?"Receiving":"Waiting"}}}else n=bfe();n.node_name=Rfe();let s=Ife().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:v1,is_enabled:M1,connections:[]};if(!M1)return e;let t=await zC.getAllNodeRecords();if(Sfe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(x1(t[n],e.connections));return await Promise.allSettled(r),e}o(Dfe,"clusterStatus");function nT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(nT,"asDate");async function x1(e,t){let r=e.name,n=new Tfe(Gd.OPERATIONS_ENUM.CLUSTER_STATUS,v1,void 0,await zC.getSystemInfo()),s,i,a=Fl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await gfe.request(Fl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Fl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Fl.CLUSTER_STATUS_STATUSES.CLOSED,WC.error(`Error getting node status from ${r} `,s))}catch(l){WC.warn(`Error getting node status from ${r}`,l),l.code===P1.NoResponders?a=Fl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===P1.Timeout?a=Fl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Fl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mfe(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Gd.PRE_4_0_0_VERSION&&await zC.upsertNodeRecord(l)}catch(l){WC.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(x1,"buildNodeStatus");function Mfe(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Mfe,"NodeStatusObject")});var JC=v((Oxe,F1)=>{"use strict";var{handleHDBError:vfe,hdbErrors:Ufe}=_e(),{HTTP_STATUS_CODES:xfe}=Ufe,Bfe=hr(),Ffe=Jo(),QC=ae(),iT=require("joi"),kfe=ft(),Hfe=2e3,Gfe=iT.object({timeout:iT.number().min(1),connected_nodes:iT.boolean(),routes:iT.boolean()});F1.exports=qfe;async function qfe(e){Ffe.checkClusteringEnabled();let t=kfe.validateBySchema(e,Gfe);if(t)throw vfe(t,t.message,xfe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||QC.autoCastBoolean(n),a=s===void 0||QC.autoCastBoolean(s),c={nodes:[]},l=await Bfe.getServerList(r??Hfe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:QC.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(qfe,"clusterNetwork")});var q1=v((Lxe,G1)=>{"use strict";var XC=require("joi"),k1=ft(),{routeConstraints:H1}=ZA();G1.exports={setRoutesValidator:$fe,deleteRoutesValidator:Vfe};function $fe(e){let t=XC.object({server:XC.valid("hub","leaf"),routes:H1.required()});return k1.validateBySchema(e,t)}o($fe,"setRoutesValidator");function Vfe(e){let t=XC.object({routes:H1.required()});return k1.validateBySchema(e,t)}o(Vfe,"deleteRoutesValidator")});var oT=v((Mxe,j1)=>{"use strict";var Zo=St(),ZC=ae(),Gs=(q(),M(z)),qd=me(),$1=q1(),{handleHDBError:V1,hdbErrors:Kfe}=_e(),{HTTP_STATUS_CODES:K1}=Kfe,Y1="cluster routes successfully set",W1="cluster routes successfully deleted";j1.exports={setRoutes:Wfe,getRoutes:zfe,deleteRoutes:jfe};function Yfe(e){let t=Zo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=ZC.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:Y1,set:i,skipped:s}}o(Yfe,"setRoutesNats");function Wfe(e){let t=$1.setRoutesValidator(e);if(t)throw V1(t,t.message,K1.BAD_REQUEST,void 0,void 0,!0);if(qd.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Yfe(e);let r=[],n=[],s=qd.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{z1(s,i)?n.push(i):(s.push(i),r.push(i))}),Zo.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:Y1,set:r,skipped:n}}o(Wfe,"setRoutes");function z1(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(z1,"existsInArray");function zfe(){if(qd.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Zo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return qd.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(zfe,"getRoutes");function jfe(e){let t=$1.deleteRoutesValidator(e);if(t)throw V1(t,t.message,K1.BAD_REQUEST,void 0,void 0,!0);if(qd.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Qfe(e);let r=[],n=[],s=qd.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{z1(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Zo.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:W1,deleted:r,skipped:n}}o(jfe,"deleteRoutes");function Qfe(e){let t=Zo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=ZC.isEmptyOrZeroLength(r)?null:r,Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ZC.isEmptyOrZeroLength(n)?null:n,Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:W1,deleted:s,skipped:i}}o(Qfe,"deleteRoutesNats")});var J1=v((Uxe,Q1)=>{"use strict";var Jfe=Ot(),eO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Jfe.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:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};Q1.exports=eO});var eK=v((Bxe,Z1)=>{"use strict";var X1=Ot(),tO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+X1.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+X1.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};Z1.exports=tO});var rK=v((kxe,tK)=>{"use strict";var rO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};tK.exports=rO});var sK=v((Gxe,nK)=>{"use strict";var Xfe=Ot(),nO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Xfe.SERVER_SUFFIX.ADMIN,this.password=r}};nK.exports=nO});var uT=v(($xe,aK)=>{"use strict";var kl=require("path"),Hl=require("fs-extra"),Zfe=J1(),eme=eK(),tme=rK(),rme=sK(),sO=os(),Vd=ae(),qn=St(),cT=(q(),M(z)),oh=Ot(),{CONFIG_PARAMS:ir}=cT,Kd=Q(),ah=me(),iK=zi(),iO=hr(),nme=ps(),$d="clustering",sme=1e4,oK=50;aK.exports={generateNatsConfig:ome,removeNatsConfig:ame,getHubConfigPath:ime};function ime(){let e=ah.get(ir.ROOTPATH);return kl.join(e,$d,oh.NATS_CONFIG_FILES.HUB_SERVER)}o(ime,"getHubConfigPath");async function ome(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=ah.get(ir.ROOTPATH);Hl.ensureDirSync(kl.join(r,"clustering","leaf")),ah.initSync();let n=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=qn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Hl.exists(i)&&!await Hl.exists(!n)&&await nme.createNatsCerts();let a=kl.join(r,$d,oh.PID_FILES.HUB),c=kl.join(r,$d,oh.PID_FILES.LEAF),l=qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=kl.join(r,$d,oh.NATS_CONFIG_FILES.HUB_SERVER),d=kl.join(r,$d,oh.NATS_CONFIG_FILES.LEAF_SERVER),f=qn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=qn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=qn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await iO.checkNATSServerInstalled()||lT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await sO.listUsers(),g=qn.getConfigFromFile(ir.CLUSTERING_USER),R=await sO.getClusterUser();(Vd.isEmpty(R)||R.active!==!0)&&lT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await aT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await aT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await aT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await aT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===cT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new rme(W.username,iK.decrypt(W.hash))),y.push(new tme(W.username,iK.decrypt(W.hash))));let C=[],{hub_routes:I}=qn.getClusteringRoutes();if(!Vd.isEmptyOrZeroLength(I))for(let X of I)C.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${X.host}:${X.port}`);let k=new Zfe(qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=Vd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===cT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hl.writeJson(u,k),Kd.trace(`Hub server config written to ${u}`));let J=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=new eme(qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[J],[G],S,y,i,s,n,f);n==null&&delete H.tls.ca_file,(t===void 0||t===cT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hl.writeJson(d,H),Kd.trace(`Leaf server config written to ${d}`))}o(ome,"generateNatsConfig");async function aT(e){let t=ah.get(e);return Vd.isEmpty(t)&&lT(`port undefined for '${e}'`),await Vd.isPortTaken(t)&&lT(`'${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}o(aT,"isPortAvailable");function lT(e){let t=`Error generating clustering config: ${e}`;Kd.error(t),console.error(t),process.exit(1)}o(lT,"generateNatsConfigError");async function ame(e){let{port:t,config_file:r}=iO.getServerConfig(e),{username:n,decrypt_hash:s}=await sO.getClusterUser(),i=0,a=2e3;for(;i<oK;){try{let d=await iO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Kd.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=oK)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=a*(i*2);u>3e4&&Kd.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Vd.asyncSetTimeout(u)}let c="0".repeat(sme),l=kl.join(ah.get(ir.ROOTPATH),$d,r);await Hl.writeFile(l,c),await Hl.remove(l),Kd.notify(e,"started.")}o(ame,"removeNatsConfig")});var mK=v((Kxe,fK)=>{"use strict";var Es=me(),Xe=(q(),M(z)),ch=Ot(),ea=require("path"),{PACKAGE_ROOT:fT}=Ct(),cK=me(),dT=ae(),Yd="/dev/null",cme=ea.join(fT,"launchServiceScripts"),lK=ea.join(fT,"utility/scripts"),lme=ea.join(lK,Xe.HDB_RESTART_SCRIPT),uK=ea.resolve(fT,"dependencies",`${process.platform}-${process.arch}`,ch.NATS_BINARY_NAME);function dK(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return dT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=dT.getEnvCliRootPath()),{name:Xe.PROCESS_DESCRIPTORS.HDB,script:Xe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:fT}}o(dK,"generateMainServerConfig");var ume=9930;function dme(){Es.initSync(!0);let e=Es.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",ch.NATS_CONFIG_FILES.HUB_SERVER),r=ea.join(Es.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=cK.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=ch.LOG_LEVEL_FLAGS[Es.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==ume?"-"+n:""),binFile:uK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Es.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yd,i.error_file=Yd),i}o(dme,"generateNatsHubServerConfig");var fme=9940;function mme(){Es.initSync(!0);let e=Es.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",ch.NATS_CONFIG_FILES.LEAF_SERVER),r=ea.join(Es.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=cK.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=ch.LOG_LEVEL_FLAGS[Es.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==fme?"-"+n:""),binFile:uK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Es.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yd,i.error_file=Yd),i}o(mme,"generateNatsLeafServerConfig");function pme(){Es.initSync();let e=ea.join(Es.get(Xe.CONFIG_PARAMS.LOGGING_ROOT),Xe.LOG_NAMES.HDB),t={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Xe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:cme,autorestart:!1};return Es.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Yd,t.error_file=Yd),t}o(pme,"generateClusteringUpgradeV4ServiceConfig");function hme(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.RESTART_HDB};return dT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=dT.getEnvCliRootPath()),{...{name:Xe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:lK},script:lme}}o(hme,"generateRestart");function Eme(){return{apps:[dK()]}}o(Eme,"generateAllServiceConfigs");fK.exports={generateAllServiceConfigs:Eme,generateMainServerConfig:dK,generateRestart:hme,generateNatsHubServerConfig:dme,generateNatsLeafServerConfig:mme,generateClusteringUpgradeV4ServiceConfig:pme}});var Wd=v((zxe,TK)=>{"use strict";var Nr=(q(),M(z)),Wxe=ae(),ra=uT(),mT=hr(),ta=Ot(),cc=mK(),aO=me(),lc=Q(),_me=Jo(),{startWorker:pK,onMessageFromWorkers:gme}=nt(),hK=require("fs"),Sme=require("node:path"),Tme=(q(),M(z)),{setTimeout:yme}=require("node:timers/promises"),{execFile:Rme,fork:bme}=require("node:child_process");TK.exports={start:uc,restart:Ime,kill:Ome,startAllServices:Pme,startService:_K,restartHdb:wme,startClusteringProcesses:gK,startClusteringThreads:SK,isHdbRestartRunning:Nme,getHdbPid:Cme,cleanupChildrenProcesses:lh,reloadClustering:Dme,expectedRestartOfChildren:EK};gme(e=>{e.type==="restart"&&aO.initSync(!0)});var oo=[],Ame=10,oO;function uc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?bme(e.script,r,e):Rme(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=oo.indexOf(n);c>-1&&oo.splice(c,1),!oO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Ame&&(hK.existsSync(ra.getHubConfigPath())?uc(e):(await ra.generateNatsConfig(!0),uc(e),await new Promise(l=>setTimeout(l,3e3)),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=aO.get(Nr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&ta.LOG_LEVEL_HIERARCHY[c]>=ta.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ta.LOG_LEVELS.ERR||f===ta.LOG_LEVELS.WRN?lc.OUTPUTS.STDERR:lc.OUTPUTS.STDOUT;lc.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ta.LOG_LEVELS[p]}if(ta.LOG_LEVEL_HIERARCHY[c]>=ta.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ta.LOG_LEVELS.ERR||f===ta.LOG_LEVELS.WRN?lc.OUTPUTS.STDERR:lc.OUTPUTS.STDOUT;lc.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),oo.length===0&&(t||(process.on("exit",lh),process.on("SIGINT",lh),process.on("SIGQUIT",lh),process.on("SIGTERM",lh))),oo.push(n)}o(uc,"start");function lh(e=!0){if(!oO&&(oO=!0,oo.length!==0))if(lc.info("Killing child processes..."),oo.map(t=>t.kill()),e)process.exit(0);else return yme(2e3)}o(lh,"cleanupChildrenProcesses");function Ime(e){EK();for(let t of oo)t.name===e&&t.kill()}o(Ime,"restart");function EK(){for(let e of oo)e.config&&(e.config.restarts=0)}o(EK,"expectedRestartOfChildren");async function wme(){await uc(cc.generateRestart())}o(wme,"restartHdb");async function Nme(){let e=await list();for(let t in e)if(e[t].name===Nr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Nme,"isHdbRestartRunning");function Cme(){let e=aO.getHdbBasePath();if(!e)return;let t=Sme.join(e,Tme.HDB_PID_FILE),r=Mme(t);if(!(!r||r===process.pid)&&vme(r))return r}o(Cme,"getHdbPid");function Ome(){for(let e of oo)e.kill();oo=[]}o(Ome,"kill");async function Pme(){await gK(),await SK(),await uc(cc.generateAllServiceConfigs())}o(Pme,"startAllServices");async function _K(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Nr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=cc.generateMainServerConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=cc.generateNatsIngestServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=cc.generateNatsReplyServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=cc.generateNatsHubServerConfig(),await uc(r,t),await ra.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=cc.generateNatsLeafServerConfig(),await uc(r,t),await ra.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=cc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}uc(r,t)}o(_K,"startService");var Lme;async function gK(e=!1){for(let t in Nr.CLUSTERING_PROCESSES){let r=Nr.CLUSTERING_PROCESSES[t];await _K(r,e)}}o(gK,"startClusteringProcesses");async function SK(){Lme=pK(Nr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Nr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await mT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await mT.updateLocalStreams();let e=await _me.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Nr.PRE_4_0_0_VERSION){lc.info("Starting clustering upgrade 4.0.0 process"),pK(Nr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(SK,"startClusteringThreads");async function Dme(){await ra.generateNatsConfig(!0),await mT.reloadNATSHub(),await mT.reloadNATSLeaf(),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Dme,"reloadClustering");function Mme(e){try{return Number.parseInt(hK.readFileSync(e,"utf8"),10)}catch{return null}}o(Mme,"readPidFile");function vme(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(vme,"isProcessRunning")});var uO={};Re(uO,{compactOnStart:()=>Ume,copyDb:()=>wK});async function Ume(){dc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cO.get)(F.ROOTPATH),t=new Map,r=at();(0,lO.updateConfigValue)(F.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,pT.join)(e,"backup",n+".mdb"),a=(0,pT.join)(e,qc,n+"-copy.mdb"),c=0;try{c=await yK(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){dc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await wK(n,a),console.log("Backing up",n,"to",i);try{await(0,Gl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{jd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Gl.move)(i,s,{overwrite:!0}),await(0,Gl.remove)((0,pT.join)(e,qc,`${n}-copy.mdb-lock`));try{jd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){dc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,lO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Gl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw jd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await yK(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
20
+ `)}function ele(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var LS,$$,V$,ht,oC,zo,PS,DS=se(()=>{G$();LS=require("easy-ocsp"),$$=require("node:crypto"),V$=b(Xn());we();Wa();ht=(0,V$.loggerWithTag)("cert-verification"),oC=class extends qr{static{o(this,"CertificateVerificationSource")}async get(t){ht.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;ht.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??zo.timeout,l=await Promise.race([Zce(s,i,c),new Promise((m,p)=>setTimeout(()=>p(new Error("OCSP timeout")),c))]);if(ht.debug?.("OCSP check result:",l),l.status==="unknown"&&(l.reason==="ocsp-error"||l.reason==="timeout"||l.reason==="no-ocsp-url")){let m=a?.failureMode??zo.failureMode;if(ht.error?.("OCSP check failed:",l.reason),m==="fail-closed"){let p=a?.errorCacheTtl??zo.errorCacheTtl,h=Date.now()+p;return r&&(r.expiresAt=h),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:h,method:"ocsp"}}else return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}let d=a?.cacheTtl??zo.cacheTtl,f=Date.now()+d;return r&&(r.expiresAt=f),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:f,method:"ocsp"}}catch(c){if(ht.error?.("OCSP verification error:",c),(a?.failureMode??zo.failureMode)==="fail-closed"){let u=a?.errorCacheTtl??zo.errorCacheTtl,d=Date.now()+u;return r&&(r.expiresAt=d),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:d,method:"ocsp"}}return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}}},zo={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-open"};o(Qce,"getCertificateCacheTable");o(Jce,"getCertificateVerificationConfig");o(Pd,"verifyCertificate");o(Xce,"verifyOCSP");o(Zce,"performOCSPCheck");o(q$,"bufferToPem");o(ele,"extractCertificateChain")});var Yo={};Re(Yo,{clearThisNodeName:()=>lle,disableReplication:()=>sle,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>Qa,getThisNodeId:()=>CS,getThisNodeName:()=>it,getThisNodeUrl:()=>Ja,hostnameToUrl:()=>xS,lastTimeInAuditStore:()=>vp,monitorNodeCAs:()=>Z$,replicateOperation:()=>dle,replicationCertificateAuthorities:()=>Wo,sendOperationToNode:()=>Wp,servers:()=>rle,setReplicator:()=>tV,start:()=>nle,startOnMainThread:()=>UN,subscribeToNode:()=>Fp,unsubscribeFromNode:()=>mS,urlToNodeName:()=>_i});function nle(e){if(!e.port&&!e.securePort&&(e.port=ks.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=ks.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of xp(e))t.set(_i(s.url),s);ile(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=ve.ws(async(s,i,a,c)=>{if(It.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),$p(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,ve.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Wt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,J$.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Pd(s.peerCertificate,e);if(!u.valid){It.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else It.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:It.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Wo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=US.createSecureContext(u)}catch(l){It.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),ks.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&i()}Z$(()=>{for(let s of n)s()})}function Z$(e){let t=0;yd(r=>{r?.ca&&(Wo.add(r.ca),Wo.size!==t&&(t=Wo.size,e?.()))})}function sle(e=!0){X$=e}function ile(e){X$||(at(),tc=e.databases,Qa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of vS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];tV(r,s,e),nC.get(s)?.forEach(i=>i(s))}}))}function tV(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class eV extends qr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(It.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Jn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===ve.hostname)continue;let E=ale(h,eV.subscription,e);if(E?.isConnected){let g=Td(t.auditStore,e,h)[wS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new j$.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:tle++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",vl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function ole(e,t,r,n,s){let i=vS.get(e);i||vS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Cd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function ale(e,t,r){let n=K$.get(vl);n||(n=new Map,K$.set(vl,n));let s=n.get(r);if(s)return s;let i=Wt().primaryStore.get(e);return i?.url&&(s=new Cd(i.url,t,r,vl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Wp(e,t,r){r||(r={}),r.serverName=e.name;let n=await NS(e.url,r),s=$p(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Fp(e){try{Q$.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=ole(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Up(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function mS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Wt().primaryStore.getRange({})));let n=vS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function cle(){if(aC!==void 0)return aC;let e=ks.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||ks.default.get(F.TLS_CERTIFICATE);if(e)return aC=new W$.X509Certificate((0,z$.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return vl||(vl=ks.default.get("replication_hostname")??_i(ks.default.get("replication_url"))??cle()??Y$("operationsapi_network_secureport")??Y$("operationsapi_network_port")??"127.0.0.1")}function lle(){vl=void 0}function Y$(e){let t=ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function MS(e){let t=ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function CS(e){return Mp(e)?.[it()]}function Ja(){let e=ks.default.get("replication_url");return e||xS(it())}function xS(e){let t=MS("replication_port");if(t)return`ws://${e}:${t}`;if(t=MS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=MS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=MS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function _i(e){if(e)return new URL(e).hostname}function Qa(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return Vp(n=>{r(n)}),Dl((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):ule(n)&&t(s,n,!1)}o(r,"forDatabase")}function ule(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function vp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function dle(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",ve.nodes.map(n=>n.name));let r=await Promise.allSettled(ve.nodes.map(n=>Wp(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=ve.nodes[s]?.name,i})}return t}var ks,It,W$,z$,US,j$,Q$,J$,X$,tle,rle,Wo,tc,vS,K$,aC,vl,fs=se(()=>{we();Wa();wu();sC();Fr();ks=b(me()),It=b(Q()),W$=require("crypto");DS();z$=require("fs");kp();Rd();q();PN();US=b(require("node:tls")),j$=b(_e()),Q$=require("worker_threads"),J$=b(ps()),tle=1,rle=[],Wo=ks.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(US.rootCertificates):new Set;o(nle,"start");o(Z$,"monitorNodeCAs");o(sle,"disableReplication");o(ile,"assignReplicationSource");o(tV,"setReplicator");vS=new Map;o(ole,"getSubscriptionConnection");K$=new Map;o(ale,"getRetrievalConnectionByName");o(Wp,"sendOperationToNode");o(Fp,"subscribeToNode");o(mS,"unsubscribeFromNode");o(cle,"getCommonNameFromCert");o(it,"getThisNodeName");o(lle,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(Y$,"getHostFromListeningPort");o(MS,"getPortFromListeningPort");o(CS,"getThisNodeId");ve.replication={getThisNodeId:CS,exportIdMapping:Mp};o(Ja,"getThisNodeUrl");o(xS,"hostnameToUrl");o(_i,"urlToNodeName");o(Qa,"forEachReplicatedDatabase");o(ule,"hasExplicitlyReplicatedTable");o(vp,"lastTimeInAuditStore");o(dle,"replicateOperation")});var GS=v((iUe,oV)=>{"use strict";var Ld=QG(),{validateBySchema:zp}=ft(),{commonValidators:Dd,schemaRegex:cC}=$i(),_r=require("joi"),fle=Q(),mle=require("uuid").v4,kS=ko(),Md=(q(),M(z)),ple=require("util"),nc=rs(),{handleHDBError:jo,hdbErrors:hle,ClientError:Ul}=_e(),{HDB_ERROR_MSGS:BS,HTTP_STATUS_CODES:Qo}=hle,{SchemaEventMsg:HS}=as(),rV=hr(),{getDatabases:Ele}=(we(),M(mt)),{transformReq:vd}=ae(),{replicateOperation:nV}=(fs(),M(Yo)),{cleanupOrphans:_le}=(Zn(),M(T_)),FS=_r.string().min(1).max(Dd.schema_length.maximum).pattern(cC).messages({"string.pattern.base":"{:#label} "+Dd.schema_format.message}),gle=_r.string().min(1).max(Dd.schema_length.maximum).pattern(cC).messages({"string.pattern.base":"{:#label} "+Dd.schema_format.message}).required(),Sle=_r.string().min(1).max(Dd.schema_length.maximum).pattern(cC).messages({"string.pattern.base":"{:#label} "+Dd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();oV.exports={createSchema:Tle,createSchemaStructure:sV,createTable:yle,createTableStructure:iV,createAttribute:wle,dropSchema:Rle,dropTable:ble,dropAttribute:Ale,getBackup:Nle,cleanupOrphanBlobs:Cle};async function Tle(e){let t=await sV(e);return kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema)),t}o(Tle,"createSchema");async function sV(e){let t=zp(e,_r.object({database:FS,schema:FS}));if(t)throw new Ul(t.message);if(vd(e),!await Ld.checkSchemaExists(e.schema))throw jo(new Error,BS.SCHEMA_EXISTS_ERR(e.schema),Qo.BAD_REQUEST,Md.LOG_LEVELS.ERROR,BS.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(sV,"createSchemaStructure");async function yle(e){return vd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await iV(e)}o(yle,"createTable");async function iV(e){let t=zp(e,_r.object({database:FS,schema:FS,table:gle,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:Sle}));if(t)throw new Ul(t.message);if(!await Ld.checkSchemaTableExists(e.schema,e.table))throw jo(new Error,BS.TABLE_EXISTS_ERR(e.schema,e.table),Qo.BAD_REQUEST,Md.LOG_LEVELS.ERROR,BS.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:mle(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw jo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qo.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(iV,"createTableStructure");async function Rle(e){let t=zp(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Ul(t.message);vd(e);let r=await Ld.checkSchemaExists(e.schema);if(r)throw jo(new Error,r,Qo.NOT_FOUND,Md.LOG_LEVELS.ERROR,r,!0);let n=await Ld.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema)),await rV.purgeSchemaTableStreams(e.schema,s);let i=await nV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Rle,"dropSchema");async function ble(e){let t=zp(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Ul(t.message);vd(e);let r=await Ld.checkSchemaTableExists(e.schema,e.table);if(r)throw jo(new Error,r,Qo.NOT_FOUND,Md.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await rV.purgeTableStream(e.schema,e.table);let n=await nV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(ble,"dropTable");async function Ale(e){let t=zp(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new Ul(t.message);vd(e);let r=await Ld.checkSchemaTableExists(e.schema,e.table);if(r)throw jo(new Error,r,Qo.NOT_FOUND,Md.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jo(new Error,"You cannot drop a hash attribute",Qo.BAD_REQUEST,void 0,void 0,!0);if(Md.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qo.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),Ile(e),kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw fle.error(`Got an error deleting attribute ${ple.inspect(e)}.`),n}}o(Ale,"dropAttribute");function Ile(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Ile,"dropAttributeFromGlobal");async function wle(e){vd(e);let t=Ele()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Qo.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),kS.signalSchemaChange(new HS(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(wle,"createAttribute");function Nle(e){return nc.getBackup(e)}o(Nle,"getBackup");function Cle(e){if(!e.database)throw new Ul('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Ul(`Unknown database '${e.database}'`);return _le(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Cle,"cleanupOrphanBlobs")});var cV=v((aUe,aV)=>{"use strict";var{OPERATIONS_ENUM:Ole}=(q(),M(z)),lC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ole.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};aV.exports=lC});var uC=v((uUe,mV)=>{"use strict";var Ple=rs(),lUe=cV(),qS=ae(),$S=(q(),M(z)),Lle=me(),{handleHDBError:lV,hdbErrors:Dle}=_e(),{HDB_ERROR_MSGS:uV,HTTP_STATUS_CODES:dV}=Dle,Mle=Object.values($S.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),fV="To use this operation audit log must be enabled in harperdb-config.yaml";mV.exports=vle;async function vle(e){if(qS.isEmpty(e.schema))throw new Error(uV.SCHEMA_REQUIRED_ERR);if(qS.isEmpty(e.table))throw new Error(uV.TABLE_REQUIRED_ERR);if(!Lle.get($S.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lV(new Error,fV,dV.BAD_REQUEST,$S.LOG_LEVELS.ERROR,fV,!0);let t=qS.checkSchemaTableExist(e.schema,e.table);if(t)throw lV(new Error,t,dV.NOT_FOUND,$S.LOG_LEVELS.ERROR,t,!0);if(!qS.isEmpty(e.search_type)&&Mle.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Ple.readAuditLog(e)}o(vle,"readAuditLog")});var hV=v((fUe,pV)=>{"use strict";var{OPERATIONS_ENUM:Ule}=(q(),M(z)),dC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ule.GET_BACKUP,this.schema=t,this.table=r}};pV.exports=dC});var gV=v((EUe,_V)=>{"use strict";var xle=rs(),pUe=hV(),fC=ae(),Ble=(q(),M(z)),hUe=me(),{handleHDBError:Fle,hdbErrors:kle}=_e(),{HDB_ERROR_MSGS:EV,HTTP_STATUS_CODES:Hle}=kle;_V.exports=Gle;async function Gle(e){if(fC.isEmpty(e.schema))throw new Error(EV.SCHEMA_REQUIRED_ERR);if(fC.isEmpty(e.table))throw new Error(EV.TABLE_REQUIRED_ERR);let t=fC.checkSchemaTableExist(e.schema,e.table);if(t)throw Fle(new Error,t,Hle.NOT_FOUND,Ble.LOG_LEVELS.ERROR,t,!0);return await xle.getBackup(readAuditLogObject)}o(Gle,"getBackup")});var RV=v((gUe,yV)=>{"use strict";var qle=me(),sc=require("joi"),$le=ft(),SV=require("moment"),Vle=require("fs-extra"),mC=require("path"),Kle=require("lodash"),jp=(q(),M(z)),{LOG_LEVELS:xl}=(q(),M(z)),Yle="YYYY-MM-DD hh:mm:ss",Wle=mC.resolve(__dirname,"../logs");yV.exports=function(e){return $le.validateBySchema(e,zle)};var zle=sc.object({from:sc.custom(TV),until:sc.custom(TV),level:sc.valid(xl.NOTIFY,xl.FATAL,xl.ERROR,xl.WARN,xl.INFO,xl.DEBUG,xl.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(jle)});function TV(e,t){if(SV(e,SV.ISO_8601).format(Yle)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(TV,"validateDatetime");function jle(e,t){if(Kle.invert(jp.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=qle.get(jp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?jp.LOG_NAMES.HDB:e,i=s===jp.LOG_NAMES.INSTALL?mC.join(Wle,jp.LOG_NAMES.INSTALL):mC.join(n,s);return Vle.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(jle,"validateReadLogPath")});var hC=v((TUe,AV)=>{"use strict";var VS=(q(),M(z)),Qle=Q(),Jle=me(),Xle=RV(),pC=require("path"),bV=require("fs-extra"),{once:Zle}=require("events"),{handleHDBError:eue,hdbErrors:tue}=_e(),{PACKAGE_ROOT:rue}=Ct(),{replicateOperation:nue}=(fs(),M(Yo)),sue=pC.join(rue,"logs"),iue=1e3,oue=200;AV.exports=aue;async function aue(e){let t=Xle(e);if(t)throw eue(t,t.message,tue.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nue(e),n=Jle.get(VS.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?VS.LOG_NAMES.HDB:e.log_name,i=s===VS.LOG_NAMES.INSTALL?pC.join(sue,VS.LOG_NAMES.INSTALL):pC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?iue:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(bV.statSync(i).size-(E+5)*oue,0));let R=bV.createReadStream(i,{start:g});R.on("error",G=>{Qle.error(G)});let S=0,y=[],C="",I;R.on("data",G=>{let H=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=C+G;let X=0,W;for(;(W=H.exec(G))&&!R.destroyed;){I&&(I.message=G.slice(X,W.index),k(I));let[ue,ce,te]=W,ye=te.split("] ["),Ae=ye[0],Ye=ye[1];ye.splice(0,2),I={timestamp:ce,thread:Ae,level:Ye,tags:ye,message:""},X=W.index+ue.length}C=G.slice(X)}),R.on("end",G=>{R.destroyed||I&&(I.message=C.trim(),k(I))}),R.resume();function k(G){let H,X,W;switch(!0){case(a&&l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),G.level===c&&H>=X&&H<=W&&S<h?S++:G.level===c&&H>=X&&H<=W&&(io(G,p,y),S++,S===E&&R.destroy());break;case(a&&l):H=new Date(G.timestamp),X=new Date(u),G.level===c&&H>=X&&S<h?S++:G.level===c&&H>=X&&(io(G,p,y),S++,S===E&&R.destroy());break;case(a&&d):H=new Date(G.timestamp),W=new Date(f),G.level===c&&H<=W&&S<h?S++:G.level===c&&H<=W&&(io(G,p,y),S++,S===E&&R.destroy());break;case(l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),H>=X&&H<=W&&S<h?S++:H>=X&&H<=W&&(io(G,p,y),S++,S===E&&R.destroy());break;case a:G.level===c&&S<h?S++:G.level===c&&(io(G,p,y),S++,S===E&&R.destroy());break;case l:H=new Date(G.timestamp),X=new Date(u),H>=X&&S<h?S++:H>=X&&S>=h&&(io(G,p,y),S++,S===E&&R.destroy());break;case d:H=new Date(G.timestamp),W=new Date(f),H<=W&&S<h?S++:H<=W&&S>=h&&(io(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(io(G,p,y),S++,S===E&&R.destroy())}}o(k,"onLogMessage"),await Zle(R,"close");let J=await r;if(J.replicated){for(let G of y)G.node=server.hostname;for(let G of J.replicated){let H=G.node;if(G.status==="failed")io({timestamp:new Date().toISOString(),level:"error",node:H,message:`Error retrieving logs: ${G.reason}`},p,y);else for(let X of G.results)X.node=H,io(X,p,y)}}return y}o(aue,"readLog");function io(e,t,r){t==="desc"?cue(e,r):t==="asc"?lue(e,r):r.push(e)}o(io,"pushLineToResult");function cue(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(cue,"insertDescending");function lue(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(lue,"insertAscending")});var KS=v((wUe,CV)=>{"use strict";var EC=require("joi"),{string:Ud,boolean:IV,date:uue}=EC.types(),due=ft(),{validateSchemaExists:RUe,validateTableExists:bUe,validateSchemaName:AUe}=$i(),fue=(q(),M(z)),mue=Ot(),wV=me();wV.initSync();var IUe=Ud.invalid(wV.get(fue.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(mue.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),NV={operation:Ud.valid("add_node","update_node","set_node_replication"),node_name:Ud.optional(),subscriptions:EC.array().items({table:Ud.optional(),schema:Ud.optional(),database:Ud.optional(),subscribe:IV.required(),publish:IV.required().custom(hue),start_time:uue.iso()})};function pue(e){return due.validateBySchema(e,EC.object(NV))}o(pue,"addUpdateNodeValidator");function hue(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(hue,"checkForFalsy");CV.exports={addUpdateNodeValidator:pue,validationSchema:NV}});var xd=v((CUe,OV)=>{"use strict";var _C=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},gC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};OV.exports={Node:_C,NodeSubscription:gC}});var LV=v((PUe,PV)=>{"use strict";var Eue=(q(),M(z)).OPERATIONS_ENUM,SC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Eue.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PV.exports=SC});var Qp=v((DUe,DV)=>{"use strict";var TC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},yC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};DV.exports={RemotePayloadObject:TC,RemotePayloadSubscription:yC}});var vV=v((vUe,MV)=>{"use strict";var RC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};MV.exports=RC});var xV=v((HUe,UV)=>{"use strict";var _ue=vV(),xUe=Yt(),BUe=_t(),gue=Q(),{getSchemaPath:FUe,getTransactionAuditStorePath:kUe}=Rt(),{getDatabases:Sue}=(we(),M(mt));UV.exports=Tue;async function Tue(e){let t=new _ue;try{let r=Sue()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){gue.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tue,"lmdbGetTableSize")});var FV=v((qUe,BV)=>{"use strict";var bC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};BV.exports=bC});var Xp=v((zUe,qV)=>{"use strict";var yue=require("fs-extra"),Rue=require("path"),Rn=require("systeminformation"),ic=Q(),kV=hr(),VUe=Ot(),Bd=(q(),M(z)),bue=xV(),Aue=Sl(),{getThreadInfo:HV}=nt(),Jp=me();Jp.initSync();var Iue=FV(),{openEnvironment:KUe}=_t(),{getSchemaPath:YUe}=Rt(),{database:WUe,databases:AC}=(we(),M(mt)),YS;qV.exports={getHDBProcessInfo:CC,getNetworkInfo:PC,getDiskInfo:OC,getMemoryInfo:NC,getCPUInfo:wC,getTimeInfo:IC,getSystemInformation:LC,systemInformation:wue,getTableSize:DC,getMetrics:MC};function IC(){return Rn.time()}o(IC,"getTimeInfo");async function wC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await Rn.cpu();d.cpu_speed=await Rn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await Rn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:C,rawLoadIdle:I,rawLoadIrq:k,rawLoadNice:J,rawLoadSystem:G,rawLoadUser:H,...X}=y;S.cpus.push(X)}),d.current_load=S,d}catch(e){return ic.error(`error in getCPUInfo: ${e}`),{}}}o(wC,"getCPUInfo");async function NC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ic.error(`error in getMemoryInfo: ${e}`),{}}}o(NC,"getMemoryInfo");async function CC(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await yue.readFile(Rue.join(Jp.get(Bd.CONFIG_PARAMS.ROOTPATH),Bd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Bd.NODE_ERROR_CODES.ENOENT)ic.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ic.error(`error in getHDBProcessInfo: ${t}`),e}}o(CC,"getHDBProcessInfo");async function OC(){let e={};try{if(!Jp.get(Bd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Rn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await Rn.fsStats();return e.read_write=u,e.size=await Rn.fsSize(),e}catch(t){return ic.error(`error in getDiskInfo: ${t}`),e}}o(OC,"getDiskInfo");async function PC(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Jp.get(Bd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Rn.networkInterfaceDefault(),e.latency=await Rn.inetChecksite("google.com"),(await Rn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Rn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return ic.error(`error in getNetworkInfo: ${t}`),e}}o(PC,"getNetworkInfo");async function LC(){if(YS!==void 0)return YS;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await Rn.osInfo();e=c;let l=await Rn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,YS=e,YS}catch(t){return ic.error(`error in getSystemInformation: ${t}`),e}}o(LC,"getSystemInformation");async function DC(){let e=[],t=await Aue.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await bue(n));return e}o(DC,"getTableSize");async function MC(){let e={};for(let t in AC){let r=e[t]={},n=r.tables={};for(let s in AC[t])try{let i=AC[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){ic.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(MC,"getMetrics");async function GV(){if(Jp.get(Bd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await kV.getNATSReferences(),t=await kV.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(GV,"getNatsStreamInfo");async function wue(e){let t=new Iue;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LC(),t.time=IC(),t.cpu=await wC(),t.memory=await NC(),t.disk=await OC(),t.network=await PC(),t.harperdb_processes=await CC(),t.table_size=await DC(),t.metrics=await MC(),t.threads=await HV(),t.replication=await GV(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LC();break;case"time":t.time=IC();break;case"cpu":t.cpu=await wC();break;case"memory":t.memory=await NC();break;case"disk":t.disk=await OC();break;case"network":t.network=await PC();break;case"harperdb_processes":t.harperdb_processes=await CC();break;case"table_size":t.table_size=await DC();break;case"database_metrics":case"metrics":t.metrics=await MC();break;case"threads":t.threads=await HV();break;case"replication":t.replication=await GV();break;default:break}return t}o(wue,"systemInformation")});var Jo=v((ZUe,YV)=>{"use strict";var Nue=Fn(),vC=ae(),Cue=require("util"),Bl=(q(),M(z)),$V=me();$V.initSync();var Oue=Jw(),VV=pn(),{Node:QUe,NodeSubscription:JUe}=xd(),Pue=Ju(),Lue=LV(),{RemotePayloadObject:Due,RemotePayloadSubscription:Mue}=Qp(),{handleHDBError:vue,hdbErrors:Uue}=_e(),{HTTP_STATUS_CODES:xue,HDB_ERROR_MSGS:Bue}=Uue,Fue=di(),kue=Xp(),{packageJson:Hue}=Ct(),{getDatabases:Gue}=(we(),M(mt)),XUe=Cue.promisify(Oue.authorize),que=VV.searchByHash,$ue=VV.searchByValue;YV.exports={isEmpty:Vue,getNodeRecord:Kue,upsertNodeRecord:Yue,buildNodePayloads:Wue,checkClusteringEnabled:zue,getAllNodeRecords:jue,getSystemInfo:Que,reverseSubscription:KV};function Vue(e){return e==null}o(Vue,"isEmpty");async function Kue(e){let t=new Pue(Bl.SYSTEM_SCHEMA_NAME,Bl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return que(t)}o(Kue,"getNodeRecord");async function Yue(e){let t=new Lue(Bl.SYSTEM_SCHEMA_NAME,Bl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Nue.upsert(t)}o(Yue,"upsertNodeRecord");function KV(e){if(vC.isEmpty(e.subscribe)||vC.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(KV,"reverseSubscription");function Wue(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=vC.getTableHashAttribute(l,u),{subscribe:f,publish:m}=KV(c),p=Gue()[l]?.[u],h=new Mue(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Due(r,t,s,n)}o(Wue,"buildNodePayloads");function zue(){if(!$V.get(Bl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vue(new Error,Bue.CLUSTERING_NOT_ENABLED,xue.BAD_REQUEST,void 0,void 0,!0)}o(zue,"checkClusteringEnabled");async function jue(){let e=new Fue(Bl.SYSTEM_SCHEMA_NAME,Bl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $ue(e))}o(jue,"getAllNodeRecords");async function Que(){let e=await kue.getSystemInformation();return{hdb_version:Hue.version,node_version:e.node_version,platform:e.platform}}o(Que,"getSystemInfo")});var UC=v((txe,e1)=>{"use strict";var WS=hr(),WV=ae(),zV=Ot(),jV=(q(),M(z)),zS=Q(),QV=GS(),Jue=ip(),{RemotePayloadObject:Xue}=Qp(),{handleHDBError:JV,hdbErrors:Zue}=_e(),{HTTP_STATUS_CODES:XV}=Zue,{NodeSubscription:ZV}=xd();e1.exports=ede;async function ede(e,t){let r;try{r=await WS.request(`${t}.${zV.REQUEST_SUFFIX}`,new Xue(jV.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),zS.trace("Response from remote describe all request:",r)}catch(a){zS.error(`addNode received error from describe all request to remote node: ${a}`);let c=WS.requestErrorHandler(a,"add_node",t);throw JV(new Error,c,XV.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===zV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw JV(new Error,a,XV.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===jV.SYSTEM_SCHEMA_NAME){await WS.createLocalTableStream(l,c);let h=new ZV(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=WV.doesSchemaExist(l),d=n[l]!==void 0,f=c?WV.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(zS.trace(`addNode creating schema: ${l}`),await QV.createSchema({operation:"create_schema",schema:l})),!f&&m){zS.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Jue(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await QV.createTable(h)}await WS.createLocalTableStream(l,c);let p=new ZV(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(ede,"reviewSubscriptions")});var Fd={};Re(Fd,{addNodeBack:()=>xC,removeNodeBack:()=>BC,setNode:()=>sde});async function sde(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=_i(t)):t=xS(r);let n=(0,r1.validateBySchema)(e,nde);if(n)throw(0,Xo.handleHDBError)(n,n.message,rde.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Xo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Wt(),E=await h.get(p);if(!E)throw new Xo.ClientError(p+" does not exist");try{await Wp({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){hs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Xo.ClientError("url required for this operation");let s=Ja();if(s==null)throw new Xo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Hs.getReplicationCert)();let p=await(0,Hs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Hs.createCsr)(),hs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,hs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ac.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ac.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ac.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(t1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=t1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Wp({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,hs.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(hs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Hs.setCertTable)({name:tde.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Hs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ac.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ac.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Vo(it(),p)}await Vo(u?u.nodeName:f.name??_i(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function xC(e){hs.trace("addNodeBack received request:",e);let t=await(0,Hs.signCertificate)(e),r;e.csr?(r=t.signingCA,hs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,hs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Hs.getReplicationCertAuth)();if(n.replicates){let i={url:Ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ac.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ac.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Vo(it(),i)}return await Vo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,hs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function BC(e){hs.trace("removeNodeBack received request:",e),await Wt().delete(e.name)}function t1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Hs,r1,oc,ac,hs,Xo,tde,rde,nde,kd=se(()=>{Hs=b(ps()),r1=b(ft()),oc=b(require("joi")),ac=b(me());q();kp();Rd();fs();hs=b(Q()),Xo=b(_e()),{pki:tde}=require("node-forge"),{HTTP_STATUS_CODES:rde}=Xo.hdbErrors,nde=oc.default.object({hostname:oc.default.string(),verify_tls:oc.default.boolean(),replicates:oc.default.boolean(),subscriptions:oc.default.array(),revoked_certificates:oc.default.array(),shard:oc.default.number()});o(sde,"setNode");o(xC,"addNodeBack");o(BC,"removeNodeBack");o(t1,"reverseSubscription")});var ZS=v((uxe,s1)=>{"use strict";var{handleHDBError:jS,hdbErrors:ide}=_e(),{HTTP_STATUS_CODES:QS}=ide,{addUpdateNodeValidator:ode}=KS(),JS=Q(),XS=(q(),M(z)),n1=Ot(),ade=ae(),Zp=hr(),eh=Jo(),FC=me(),cde=UC(),{Node:lde,NodeSubscription:ude}=xd(),{broadcast:dde}=nt(),{setNode:fde}=(kd(),M(Fd)),cxe=me(),lxe=(q(),M(z)),mde="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",pde="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hde=FC.get(XS.CONFIG_PARAMS.CLUSTERING_NODENAME);s1.exports=Ede;async function Ede(e,t=!1){if(JS.trace("addNode called with:",e),FC.get(XS.CONFIG_PARAMS.REPLICATION_URL)||FC.get(XS.CONFIG_PARAMS.REPLICATION_HOSTNAME))return fde(e);eh.checkClusteringEnabled();let r=ode(e);if(r)throw jS(r,r.message,QS.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await eh.getNodeRecord(n);if(!ade.isEmptyOrZeroLength(f))throw jS(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,QS.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await cde(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=mde,a;let c=eh.buildNodePayloads(s,hde,XS.OPERATIONS_ENUM.ADD_NODE,await eh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new ude(p.schema,p.table,p.publish,p.subscribe))}JS.trace("addNode sending remote payload:",c);let u;try{u=await Zp.request(`${n}.${n1.REQUEST_SUFFIX}`,c)}catch(f){JS.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Zp.updateRemoteConsumer(E,n)}let m=Zp.requestErrorHandler(f,"add_node",n);throw jS(new Error,m,QS.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===n1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw jS(new Error,f,QS.INTERNAL_SERVER_ERROR,"error",f)}JS.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Zp.updateRemoteConsumer(p,n),p.subscribe===!0&&await Zp.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new lde(n,l,u.system_info);return await eh.upsertNodeRecord(d),dde({type:"nats_update"}),i.length>0?a.message=pde:a.message=`Successfully added '${n}' to manifest`,a}o(Ede,"addNode")});var qC=v((mxe,o1)=>{"use strict";var{handleHDBError:kC,hdbErrors:_de}=_e(),{HTTP_STATUS_CODES:HC}=_de,{addUpdateNodeValidator:gde}=KS(),th=Q(),eT=(q(),M(z)),i1=Ot(),fxe=ae(),rh=hr(),nh=Jo(),GC=me(),{cloneDeep:Sde}=require("lodash"),Tde=UC(),{Node:yde,NodeSubscription:Rde}=xd(),{broadcast:bde}=nt(),{setNode:Ade}=(kd(),M(Fd)),Ide="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",wde="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nde=GC.get(eT.CONFIG_PARAMS.CLUSTERING_NODENAME);o1.exports=Cde;async function Cde(e){if(th.trace("updateNode called with:",e),GC.get(eT.CONFIG_PARAMS.REPLICATION_URL)??GC.get(eT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ade(e);nh.checkClusteringEnabled();let t=gde(e);if(t)throw kC(t,t.message,HC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await nh.getNodeRecord(r);s.length>0&&(n=Sde(s));let{added:i,skipped:a}=await Tde(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Ide,c;let l=nh.buildNodePayloads(i,Nde,eT.OPERATIONS_ENUM.UPDATE_NODE,await nh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];th.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}th.trace("updateNode sending remote payload:",l);let u;try{u=await rh.request(`${r}.${i1.REQUEST_SUFFIX}`,l)}catch(d){th.error(`updateNode received error from request: ${d}`);let f=rh.requestErrorHandler(d,"update_node",r);throw kC(new Error,f,HC.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===i1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw kC(new Error,d,HC.INTERNAL_SERVER_ERROR,"error",d)}th.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await rh.updateRemoteConsumer(m,r),m.subscribe===!0?await rh.updateConsumerIterator(m.schema,m.table,r,"start"):await rh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new yde(r,[],u.system_info)]),await Ode(n[0],i,u.system_info),a.length>0?c.message=wde:c.message=`Successfully updated '${r}'`,c}o(Cde,"updateNode");async function Ode(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Rde(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await nh.upsertNodeRecord(n),bde({type:"nats_update"})}o(Ode,"updateNodeTable")});var d1=v((hxe,u1)=>{"use strict";var l1=require("joi"),{string:a1}=l1.types(),Pde=ft(),c1=(q(),M(z)),Lde=me(),Dde=Ot();u1.exports=Mde;function Mde(e){let t=a1.invalid(Lde.get(c1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Dde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=l1.object({operation:a1.valid(c1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Pde.validateBySchema(e,r)}o(Mde,"removeNodeValidator")});var tT=v((_xe,E1)=>{"use strict";var{handleHDBError:f1,hdbErrors:vde}=_e(),{HTTP_STATUS_CODES:m1}=vde,Ude=d1(),sh=Q(),p1=Jo(),xde=ae(),Hd=(q(),M(z)),h1=Ot(),$C=hr(),VC=me(),{RemotePayloadObject:Bde}=Qp(),{NodeSubscription:Fde}=xd(),kde=sp(),Hde=rl(),{broadcast:Gde}=nt(),{setNode:qde}=(kd(),M(Fd)),$de=VC.get(Hd.CONFIG_PARAMS.CLUSTERING_NODENAME);E1.exports=Vde;async function Vde(e){if(sh.trace("removeNode called with:",e),VC.get(Hd.CONFIG_PARAMS.REPLICATION_URL)??VC.get(Hd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qde(e);p1.checkClusteringEnabled();let t=Ude(e);if(t)throw f1(t,t.message,m1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await p1.getNodeRecord(r);if(xde.isEmptyOrZeroLength(n))throw f1(new Error,`Node '${r}' was not found.`,m1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Bde(Hd.OPERATIONS_ENUM.REMOVE_NODE,$de,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await $C.updateConsumerIterator(d.schema,d.table,r,"stop");try{await $C.updateRemoteConsumer(new Fde(d.schema,d.table,!1,!1),r)}catch(f){sh.error(f)}}try{i=await $C.request(`${r}.${h1.REQUEST_SUFFIX}`,s),sh.trace("Remove node reply from remote node:",r,i)}catch(l){sh.error("removeNode received error from request:",l),a=!0}let c=new kde(Hd.SYSTEM_SCHEMA_NAME,Hd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Hde.deleteRecord(c),Gde({type:"nats_update"}),i?.status===h1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(sh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Vde,"removeNode")});var S1=v((Sxe,g1)=>{"use strict";var _1=require("joi"),{string:Kde,array:Yde}=_1.types(),Wde=ft(),zde=KS();g1.exports=jde;function jde(e){let t=_1.object({operation:Kde.valid("configure_cluster").required(),connections:Yde.items(zde.validationSchema).required()});return Wde.validateBySchema(e,t)}o(jde,"configureClusterValidator")});var KC=v((yxe,A1)=>{"use strict";var T1=(q(),M(z)),rT=Q(),Qde=ae(),Jde=me(),Xde=tT(),Zde=ZS(),efe=Jo(),tfe=S1(),{handleHDBError:y1,hdbErrors:rfe}=_e(),{HTTP_STATUS_CODES:R1}=rfe,nfe="Configure cluster complete.",sfe="Failed to configure the cluster. Check the logs for more details.",ife="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";A1.exports=ofe;async function ofe(e){rT.trace("configure cluster called with:",e);let t=tfe(e);if(t)throw y1(t,t.message,R1.BAD_REQUEST,void 0,void 0,!0);let r=await efe.getAllNodeRecords(),n=[];if(Jde.get(T1.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await b1(Xde,{operation:T1.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}rT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await b1(Zde,f,f.node_name);s.push(m)}rT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(rT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Qde.isEmptyOrZeroLength(a))return{message:nfe,connections:c};if(l)return{message:ife,failed_nodes:a,connections:c};throw y1(new Error,sfe,R1.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(ofe,"configureCluster");async function b1(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(b1,"functionWrapper")});var C1=v((bxe,N1)=>{"use strict";var ih=require("joi"),afe=ft(),{validateSchemaExists:I1,validateTableExists:cfe,validateSchemaName:w1}=$i(),lfe=ih.object({operation:ih.string().valid("purge_stream"),schema:ih.string().custom(I1).custom(w1).optional(),database:ih.string().custom(I1).custom(w1).optional(),table:ih.string().custom(cfe).required()});function ufe(e){return afe.validateBySchema(e,lfe)}o(ufe,"purgeStreamValidator");N1.exports=ufe});var YC=v((Ixe,O1)=>{"use strict";var{handleHDBError:dfe,hdbErrors:ffe}=_e(),{HTTP_STATUS_CODES:mfe}=ffe,pfe=C1(),hfe=hr(),Efe=Jo();O1.exports=_fe;async function _fe(e){e.schema=e.schema??e.database;let t=pfe(e);if(t)throw dfe(t,t.message,mfe.BAD_REQUEST,void 0,void 0,!0);Efe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await hfe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(_fe,"purgeStream")});var jC=v((Nxe,B1)=>{"use strict";var zC=Jo(),gfe=hr(),sT=me(),Gd=(q(),M(z)),Fl=Ot(),Sfe=ae(),WC=Q(),{RemotePayloadObject:Tfe}=Qp(),{ErrorCode:P1}=require("nats"),{parentPort:L1}=require("worker_threads"),{onMessageByType:yfe}=nt(),{getThisNodeName:Rfe}=(fs(),M(Yo)),{requestClusterStatus:bfe}=(kp(),M(Vq)),{getReplicationSharedStatus:Afe,getHDBNodeTable:Ife}=(Rd(),M(kq)),{CONFIRMATION_STATUS_POSITION:wfe,RECEIVED_VERSION_POSITION:D1,RECEIVED_TIME_POSITION:Nfe,SENDING_TIME_POSITION:Cfe,RECEIVING_STATUS_POSITION:Ofe,RECEIVING_STATUS_RECEIVING:Pfe,BACK_PRESSURE_RATIO_POSITION:Lfe}=(sC(),M(x$)),M1=sT.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED),v1=sT.get(Gd.CONFIG_PARAMS.CLUSTERING_NODENAME);B1.exports={clusterStatus:Dfe,buildNodeStatus:x1};var U1;yfe("cluster-status",async e=>{U1(e)});async function Dfe(){if(sT.get(Gd.CONFIG_PARAMS.REPLICATION_URL)||sT.get(Gd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;L1?(L1.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{U1=i})):n=bfe();for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Afe(u,l,a);c.lastCommitConfirmed=nT(d[wfe]),c.lastReceivedRemoteTime=nT(d[D1]),c.lastReceivedLocalTime=nT(d[Nfe]),c.lastReceivedVersion=d[D1],c.sendingMessage=nT(d[Cfe]),c.backPressurePercent=d[Lfe]*100,c.lastReceivedStatus=d[Ofe]===Pfe?"Receiving":"Waiting"}}n.node_name=Rfe();let s=Ife().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:v1,is_enabled:M1,connections:[]};if(!M1)return e;let t=await zC.getAllNodeRecords();if(Sfe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(x1(t[n],e.connections));return await Promise.allSettled(r),e}o(Dfe,"clusterStatus");function nT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(nT,"asDate");async function x1(e,t){let r=e.name,n=new Tfe(Gd.OPERATIONS_ENUM.CLUSTER_STATUS,v1,void 0,await zC.getSystemInfo()),s,i,a=Fl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await gfe.request(Fl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Fl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Fl.CLUSTER_STATUS_STATUSES.CLOSED,WC.error(`Error getting node status from ${r} `,s))}catch(l){WC.warn(`Error getting node status from ${r}`,l),l.code===P1.NoResponders?a=Fl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===P1.Timeout?a=Fl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Fl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mfe(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Gd.PRE_4_0_0_VERSION&&await zC.upsertNodeRecord(l)}catch(l){WC.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(x1,"buildNodeStatus");function Mfe(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Mfe,"NodeStatusObject")});var JC=v((Oxe,F1)=>{"use strict";var{handleHDBError:vfe,hdbErrors:Ufe}=_e(),{HTTP_STATUS_CODES:xfe}=Ufe,Bfe=hr(),Ffe=Jo(),QC=ae(),iT=require("joi"),kfe=ft(),Hfe=2e3,Gfe=iT.object({timeout:iT.number().min(1),connected_nodes:iT.boolean(),routes:iT.boolean()});F1.exports=qfe;async function qfe(e){Ffe.checkClusteringEnabled();let t=kfe.validateBySchema(e,Gfe);if(t)throw vfe(t,t.message,xfe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||QC.autoCastBoolean(n),a=s===void 0||QC.autoCastBoolean(s),c={nodes:[]},l=await Bfe.getServerList(r??Hfe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:QC.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(qfe,"clusterNetwork")});var q1=v((Lxe,G1)=>{"use strict";var XC=require("joi"),k1=ft(),{routeConstraints:H1}=ZA();G1.exports={setRoutesValidator:$fe,deleteRoutesValidator:Vfe};function $fe(e){let t=XC.object({server:XC.valid("hub","leaf"),routes:H1.required()});return k1.validateBySchema(e,t)}o($fe,"setRoutesValidator");function Vfe(e){let t=XC.object({routes:H1.required()});return k1.validateBySchema(e,t)}o(Vfe,"deleteRoutesValidator")});var oT=v((Mxe,j1)=>{"use strict";var Zo=St(),ZC=ae(),Gs=(q(),M(z)),qd=me(),$1=q1(),{handleHDBError:V1,hdbErrors:Kfe}=_e(),{HTTP_STATUS_CODES:K1}=Kfe,Y1="cluster routes successfully set",W1="cluster routes successfully deleted";j1.exports={setRoutes:Wfe,getRoutes:zfe,deleteRoutes:jfe};function Yfe(e){let t=Zo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=ZC.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:Y1,set:i,skipped:s}}o(Yfe,"setRoutesNats");function Wfe(e){let t=$1.setRoutesValidator(e);if(t)throw V1(t,t.message,K1.BAD_REQUEST,void 0,void 0,!0);if(qd.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Yfe(e);let r=[],n=[],s=qd.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{z1(s,i)?n.push(i):(s.push(i),r.push(i))}),Zo.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:Y1,set:r,skipped:n}}o(Wfe,"setRoutes");function z1(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(z1,"existsInArray");function zfe(){if(qd.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Zo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return qd.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(zfe,"getRoutes");function jfe(e){let t=$1.deleteRoutesValidator(e);if(t)throw V1(t,t.message,K1.BAD_REQUEST,void 0,void 0,!0);if(qd.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Qfe(e);let r=[],n=[],s=qd.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{z1(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Zo.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:W1,deleted:r,skipped:n}}o(jfe,"deleteRoutes");function Qfe(e){let t=Zo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=ZC.isEmptyOrZeroLength(r)?null:r,Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=ZC.isEmptyOrZeroLength(n)?null:n,Zo.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:W1,deleted:s,skipped:i}}o(Qfe,"deleteRoutesNats")});var J1=v((Uxe,Q1)=>{"use strict";var Jfe=Ot(),eO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Jfe.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:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};Q1.exports=eO});var eK=v((Bxe,Z1)=>{"use strict";var X1=Ot(),tO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+X1.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+X1.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};Z1.exports=tO});var rK=v((kxe,tK)=>{"use strict";var rO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};tK.exports=rO});var sK=v((Gxe,nK)=>{"use strict";var Xfe=Ot(),nO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Xfe.SERVER_SUFFIX.ADMIN,this.password=r}};nK.exports=nO});var uT=v(($xe,aK)=>{"use strict";var kl=require("path"),Hl=require("fs-extra"),Zfe=J1(),eme=eK(),tme=rK(),rme=sK(),sO=os(),Vd=ae(),qn=St(),cT=(q(),M(z)),oh=Ot(),{CONFIG_PARAMS:ir}=cT,Kd=Q(),ah=me(),iK=zi(),iO=hr(),nme=ps(),$d="clustering",sme=1e4,oK=50;aK.exports={generateNatsConfig:ome,removeNatsConfig:ame,getHubConfigPath:ime};function ime(){let e=ah.get(ir.ROOTPATH);return kl.join(e,$d,oh.NATS_CONFIG_FILES.HUB_SERVER)}o(ime,"getHubConfigPath");async function ome(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=ah.get(ir.ROOTPATH);Hl.ensureDirSync(kl.join(r,"clustering","leaf")),ah.initSync();let n=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=qn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Hl.exists(i)&&!await Hl.exists(!n)&&await nme.createNatsCerts();let a=kl.join(r,$d,oh.PID_FILES.HUB),c=kl.join(r,$d,oh.PID_FILES.LEAF),l=qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=kl.join(r,$d,oh.NATS_CONFIG_FILES.HUB_SERVER),d=kl.join(r,$d,oh.NATS_CONFIG_FILES.LEAF_SERVER),f=qn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=qn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=qn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await iO.checkNATSServerInstalled()||lT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await sO.listUsers(),g=qn.getConfigFromFile(ir.CLUSTERING_USER),R=await sO.getClusterUser();(Vd.isEmpty(R)||R.active!==!0)&&lT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await aT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await aT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await aT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await aT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===cT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new rme(W.username,iK.decrypt(W.hash))),y.push(new tme(W.username,iK.decrypt(W.hash))));let C=[],{hub_routes:I}=qn.getClusteringRoutes();if(!Vd.isEmptyOrZeroLength(I))for(let X of I)C.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${X.host}:${X.port}`);let k=new Zfe(qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=Vd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===cT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hl.writeJson(u,k),Kd.trace(`Hub server config written to ${u}`));let J=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=new eme(qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[J],[G],S,y,i,s,n,f);n==null&&delete H.tls.ca_file,(t===void 0||t===cT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hl.writeJson(d,H),Kd.trace(`Leaf server config written to ${d}`))}o(ome,"generateNatsConfig");async function aT(e){let t=ah.get(e);return Vd.isEmpty(t)&&lT(`port undefined for '${e}'`),await Vd.isPortTaken(t)&&lT(`'${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}o(aT,"isPortAvailable");function lT(e){let t=`Error generating clustering config: ${e}`;Kd.error(t),console.error(t),process.exit(1)}o(lT,"generateNatsConfigError");async function ame(e){let{port:t,config_file:r}=iO.getServerConfig(e),{username:n,decrypt_hash:s}=await sO.getClusterUser(),i=0,a=2e3;for(;i<oK;){try{let d=await iO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Kd.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=oK)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=a*(i*2);u>3e4&&Kd.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Vd.asyncSetTimeout(u)}let c="0".repeat(sme),l=kl.join(ah.get(ir.ROOTPATH),$d,r);await Hl.writeFile(l,c),await Hl.remove(l),Kd.notify(e,"started.")}o(ame,"removeNatsConfig")});var mK=v((Kxe,fK)=>{"use strict";var Es=me(),Xe=(q(),M(z)),ch=Ot(),ea=require("path"),{PACKAGE_ROOT:fT}=Ct(),cK=me(),dT=ae(),Yd="/dev/null",cme=ea.join(fT,"launchServiceScripts"),lK=ea.join(fT,"utility/scripts"),lme=ea.join(lK,Xe.HDB_RESTART_SCRIPT),uK=ea.resolve(fT,"dependencies",`${process.platform}-${process.arch}`,ch.NATS_BINARY_NAME);function dK(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return dT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=dT.getEnvCliRootPath()),{name:Xe.PROCESS_DESCRIPTORS.HDB,script:Xe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:fT}}o(dK,"generateMainServerConfig");var ume=9930;function dme(){Es.initSync(!0);let e=Es.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",ch.NATS_CONFIG_FILES.HUB_SERVER),r=ea.join(Es.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=cK.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=ch.LOG_LEVEL_FLAGS[Es.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==ume?"-"+n:""),binFile:uK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Es.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yd,i.error_file=Yd),i}o(dme,"generateNatsHubServerConfig");var fme=9940;function mme(){Es.initSync(!0);let e=Es.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ea.join(e,"clustering",ch.NATS_CONFIG_FILES.LEAF_SERVER),r=ea.join(Es.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=cK.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=ch.LOG_LEVEL_FLAGS[Es.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==fme?"-"+n:""),binFile:uK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Es.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Yd,i.error_file=Yd),i}o(mme,"generateNatsLeafServerConfig");function pme(){Es.initSync();let e=ea.join(Es.get(Xe.CONFIG_PARAMS.LOGGING_ROOT),Xe.LOG_NAMES.HDB),t={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Xe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:cme,autorestart:!1};return Es.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Yd,t.error_file=Yd),t}o(pme,"generateClusteringUpgradeV4ServiceConfig");function hme(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.RESTART_HDB};return dT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=dT.getEnvCliRootPath()),{...{name:Xe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:lK},script:lme}}o(hme,"generateRestart");function Eme(){return{apps:[dK()]}}o(Eme,"generateAllServiceConfigs");fK.exports={generateAllServiceConfigs:Eme,generateMainServerConfig:dK,generateRestart:hme,generateNatsHubServerConfig:dme,generateNatsLeafServerConfig:mme,generateClusteringUpgradeV4ServiceConfig:pme}});var Wd=v((zxe,TK)=>{"use strict";var Nr=(q(),M(z)),Wxe=ae(),ra=uT(),mT=hr(),ta=Ot(),cc=mK(),aO=me(),lc=Q(),_me=Jo(),{startWorker:pK,onMessageFromWorkers:gme}=nt(),hK=require("fs"),Sme=require("node:path"),Tme=(q(),M(z)),{setTimeout:yme}=require("node:timers/promises"),{execFile:Rme,fork:bme}=require("node:child_process");TK.exports={start:uc,restart:Ime,kill:Ome,startAllServices:Pme,startService:_K,restartHdb:wme,startClusteringProcesses:gK,startClusteringThreads:SK,isHdbRestartRunning:Nme,getHdbPid:Cme,cleanupChildrenProcesses:lh,reloadClustering:Dme,expectedRestartOfChildren:EK};gme(e=>{e.type==="restart"&&aO.initSync(!0)});var oo=[],Ame=10,oO;function uc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?bme(e.script,r,e):Rme(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=oo.indexOf(n);c>-1&&oo.splice(c,1),!oO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Ame&&(hK.existsSync(ra.getHubConfigPath())?uc(e):(await ra.generateNatsConfig(!0),uc(e),await new Promise(l=>setTimeout(l,3e3)),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=aO.get(Nr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&ta.LOG_LEVEL_HIERARCHY[c]>=ta.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ta.LOG_LEVELS.ERR||f===ta.LOG_LEVELS.WRN?lc.OUTPUTS.STDERR:lc.OUTPUTS.STDOUT;lc.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ta.LOG_LEVELS[p]}if(ta.LOG_LEVEL_HIERARCHY[c]>=ta.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ta.LOG_LEVELS.ERR||f===ta.LOG_LEVELS.WRN?lc.OUTPUTS.STDERR:lc.OUTPUTS.STDOUT;lc.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),oo.length===0&&(t||(process.on("exit",lh),process.on("SIGINT",lh),process.on("SIGQUIT",lh),process.on("SIGTERM",lh))),oo.push(n)}o(uc,"start");function lh(e=!0){if(!oO&&(oO=!0,oo.length!==0))if(lc.info("Killing child processes..."),oo.map(t=>t.kill()),e)process.exit(0);else return yme(2e3)}o(lh,"cleanupChildrenProcesses");function Ime(e){EK();for(let t of oo)t.name===e&&t.kill()}o(Ime,"restart");function EK(){for(let e of oo)e.config&&(e.config.restarts=0)}o(EK,"expectedRestartOfChildren");async function wme(){await uc(cc.generateRestart())}o(wme,"restartHdb");async function Nme(){let e=await list();for(let t in e)if(e[t].name===Nr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Nme,"isHdbRestartRunning");function Cme(){let e=aO.getHdbBasePath();if(!e)return;let t=Sme.join(e,Tme.HDB_PID_FILE),r=Mme(t);if(!(!r||r===process.pid)&&vme(r))return r}o(Cme,"getHdbPid");function Ome(){for(let e of oo)e.kill();oo=[]}o(Ome,"kill");async function Pme(){await gK(),await SK(),await uc(cc.generateAllServiceConfigs())}o(Pme,"startAllServices");async function _K(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Nr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=cc.generateMainServerConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=cc.generateNatsIngestServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=cc.generateNatsReplyServiceConfig();break;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=cc.generateNatsHubServerConfig(),await uc(r,t),await ra.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=cc.generateNatsLeafServerConfig(),await uc(r,t),await ra.removeNatsConfig(e);return;case Nr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=cc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}uc(r,t)}o(_K,"startService");var Lme;async function gK(e=!1){for(let t in Nr.CLUSTERING_PROCESSES){let r=Nr.CLUSTERING_PROCESSES[t];await _K(r,e)}}o(gK,"startClusteringProcesses");async function SK(){Lme=pK(Nr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Nr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await mT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await mT.updateLocalStreams();let e=await _me.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Nr.PRE_4_0_0_VERSION){lc.info("Starting clustering upgrade 4.0.0 process"),pK(Nr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(SK,"startClusteringThreads");async function Dme(){await ra.generateNatsConfig(!0),await mT.reloadNATSHub(),await mT.reloadNATSLeaf(),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Nr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Dme,"reloadClustering");function Mme(e){try{return Number.parseInt(hK.readFileSync(e,"utf8"),10)}catch{return null}}o(Mme,"readPidFile");function vme(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(vme,"isProcessRunning")});var uO={};Re(uO,{compactOnStart:()=>Ume,copyDb:()=>wK});async function Ume(){dc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cO.get)(F.ROOTPATH),t=new Map,r=at();(0,lO.updateConfigValue)(F.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,pT.join)(e,"backup",n+".mdb"),a=(0,pT.join)(e,qc,n+"-copy.mdb"),c=0;try{c=await yK(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){dc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await wK(n,a),console.log("Backing up",n,"to",i);try{await(0,Gl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{jd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Gl.move)(i,s,{overwrite:!0}),await(0,Gl.remove)((0,pT.join)(e,qc,`${n}-copy.mdb-lock`));try{jd()}catch(n){dc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){dc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,lO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Gl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw jd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await yK(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
21
21
  Total record count before compaction: ${i}, total after: ${c}.
22
22
  Database backup has not been removed and can be found here: ${s}`;dc.error(l),console.error(l)}(0,cO.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Gl.remove)(s))}}async function yK(e){let t=await(0,IK.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function zd(){}async function wK(e,t){console.log(`Copying database ${e} to ${t}`);let r=at()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=zd,m.primaryStore.remove=zd;for(let p in m.indices){let h=m.indices[p];h.put=zd,h.remove=zd}m.auditStore&&(m.auditStore.put=zd,m.auditStore.remove=zd),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,RK.open)(new bK.default(t)),c=a.openDB(hT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=ET(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let R=new AK.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=g;let y=a.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(hT.AUDIT_STORE_NAME,uh);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,R=0,S=1e7,y=null;for(;S-- >0;)try{for(let C of m.getKeys({start:y,transaction:E}))try{y=C;let{value:I,version:k}=m.getEntry(C,{transaction:E});l=p.put(C,I,h?k:void 0),g++,E.openTimer&&(E.openTimer=0),R+=(C?.length||10)+I.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(I){console.error("Error copying record",typeof C=="symbol"?"symbol":C,"from",e,"to",t,I)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var RK,pT,Gl,cO,bK,AK,hT,IK,lO,dc,dO=se(()=>{we();RK=require("lmdb"),pT=require("path"),Gl=require("fs-extra"),cO=b(me()),bK=b(Om()),AK=b(Cm()),hT=b(Yt());q();ki();IK=b(Sl()),lO=b(St()),dc=b(Q());o(Ume,"compactOnStart");o(yK,"getTotalDBRecordCount");o(zd,"noop");o(wK,"copyDb")});var mO=v((e0e,NK)=>{"use strict";var dh=me();dh.initSync();var Qd=require("fs-extra"),fO=require("path"),Jd=(q(),M(z)),xme=require("crypto"),Bme=require("uuid").v4;NK.exports=Fme;function Fme(){if(dh.getHdbBasePath()!==void 0){let e=fO.join(dh.getHdbBasePath(),Jd.LICENSE_KEY_DIR_NAME,Jd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=fO.join(dh.getHdbBasePath(),Jd.LICENSE_KEY_DIR_NAME,Jd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=fO.join(dh.getHdbBasePath(),Jd.LICENSE_KEY_DIR_NAME,Jd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Qd.accessSync(r),Qd.accessSync(e),Qd.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Bme(),i=xme.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Qd.writeFileSync(r,s),Qd.writeFileSync(e,i.privateKey),Qd.writeFileSync(t,i.publicKey)}else throw n}}}o(Fme,"checkJWTTokenExist")});var OK=v((r0e,CK)=>{"use strict";var pO=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};CK.exports={HdbInfoInsertObject:pO}});var DK=v((s0e,LK)=>{"use strict";var PK=(q(),M(z)),hO=class{static{o(this,"UpgradeObject")}constructor(t,r){this[PK.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[PK.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};LK.exports={UpgradeObject:hO}});var _T=v((o0e,vK)=>{"use strict";var qs=require("prompt"),Xd=require("chalk"),MK=Q(),Ti=require("os"),EO=$c(),_O=["yes","y"];async function kme(e){let t=`${Ti.EOL}`+Xd.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ti.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ti.EOL}${Ti.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ti.EOL}`;qs.override=EO(["CONFIRM_UPGRADE"]),qs.start(),qs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Xd.magenta(`${Ti.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await qs.get([r])}catch(s){return MK.error("There was an error when prompting user about an upgrade."),MK.error(s),!1}return _O.includes(n.CONFIRM_UPGRADE)}o(kme,"forceUpdatePrompt");async function Hme(e){let t=`${Ti.EOL}`+Xd.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ti.EOL}`);qs.override=EO(["CONFIRM_DOWNGRADE"]),qs.start(),qs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Xd.magenta(`${Ti.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await qs.get([r]);return _O.includes(n.CONFIRM_DOWNGRADE)}o(Hme,"forceDowngradePrompt");async function Gme(){let e=`${Ti.EOL}`+Xd.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");qs.override=EO(["GENERATE_CERTS"]),qs.start(),qs.message=e;let t={properties:{GENERATE_CERTS:{description:Xd.magenta(`${Ti.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await qs.get([t]);return _O.includes(r.GENERATE_CERTS)}o(Gme,"upgradeCertsPrompt");vK.exports={forceUpdatePrompt:kme,forceDowngradePrompt:Hme,upgradeCertsPrompt:Gme}});var gT=v((c0e,UK)=>{"use strict";var gO=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};UK.exports=gO});var BK=v((p0e,xK)=>{"use strict";var qme=ae(),$me=St(),u0e=Q(),d0e=require("path"),f0e=require("fs"),m0e=(q(),M(z));xK.exports={getOldPropsValue:Vme};function Vme(e,t,r=!1){let n=t.getRaw(e);return qme.isNotEmptyAndHasValue(n)?n:r?$me.getDefaultConfig(e):""}o(Vme,"getOldPropsValue")});var GK=v((E0e,HK)=>{"use strict";var fc=require("path"),mc=require("fs-extra"),Kme=require("properties-reader"),Yme=gT(),gr=Q(),{getOldPropsValue:Tt}=BK(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:ql}=(q(),M(z)),$l=St(),ST=me(),FK=ae(),ao=(q(),M(z)),SO=new Yme("3.1.0"),kK=[];function Wme(){let e=Kme(ST.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),gr.info(t);let r=` ;Settings for the HarperDB process.
23
23
 
@@ -120,7 +120,7 @@ Host ${s}
120
120
  `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Oe.appendFile(ua,a);let f=await Ai(e);return f.message=`Added ssh key: ${r}${d}`,f}o(ige,"addSSHKey");async function oge(e){let t=Vn.updateSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n}=e;zt.trace("updating ssh key",r);let s=$e.join(Ac,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await Ai(e);return i.message=`Updated ssh key: ${r}`,i}o(oge,"updateSSHKey");async function age(e){let t=Vn.deleteSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r}=e;zt.trace("deleting ssh key",r);let n=$e.join(Ac,r+".key"),s=$e.join(Ac,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await Ai(e);return c.message=`Deleted ssh key: ${r}`,c}o(age,"deleteSSHKey");async function cge(e){let t=[];return await Oe.pathExists(Ac)&&(await Oe.readdir(Ac)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(cge,"listSSHKeys");async function lge(e){let t=Vn.setSSHKnownHostsValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(ua,r);let n=await Ai(e);return n.message="Known hosts successfully set",n}o(lge,"setSSHKnownHosts");async function uge(e){return await Oe.pathExists(ua)?{known_hosts:await Oe.readFile(ua,"utf8")}:{known_hosts:null}}o(uge,"getSSHKnownHosts");ar.customFunctionsStatus=K_e;ar.getCustomFunctions=Y_e;ar.getCustomFunction=W_e;ar.setCustomFunction=z_e;ar.dropCustomFunction=j_e;ar.addComponent=Q_e;ar.dropCustomFunctionProject=J_e;ar.packageComponent=X_e;ar.deployComponent=Z_e;ar.getComponents=tge;ar.getComponentFile=rge;ar.setComponentFile=nge;ar.dropComponent=sge;ar.addSSHKey=ige;ar.updateSSHKey=oge;ar.deleteSSHKey=age;ar.listSSHKeys=cge;ar.setSSHKnownHosts=lge;ar.getSSHKnownHosts=uge});var mP=v((bBe,jW)=>{"use strict";var Ks=require("joi"),zW=ft();jW.exports={readTransactionLogValidator:dge,deleteTransactionLogsBeforeValidator:fge};function dge(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return zW.validateBySchema(e,t)}o(dge,"readTransactionLogValidator");function fge(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return zW.validateBySchema(e,t)}o(fge,"deleteTransactionLogsBeforeValidator")});var JT=v((IBe,tz)=>{"use strict";var pP=(q(),M(z)),Oh=hr(),QW=ae(),JW=me(),XW=zi(),ZW=Q(),{handleHDBError:jT,hdbErrors:mge}=_e(),{HTTP_STATUS_CODES:QT}=mge,{readTransactionLogValidator:pge,deleteTransactionLogsBeforeValidator:hge}=mP(),ez=rs(),Ege="Logs successfully deleted from transaction log.",_ge="All logs successfully deleted from transaction log.";tz.exports={readTransactionLog:gge,deleteTransactionLogsBefore:Tge};async function gge(e){let t=pge(e);if(t)throw jT(t,t.message,QT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=QW.checkSchemaTableExist(e.database,e.table);if(r)throw jT(new Error,r,QT.NOT_FOUND,void 0,void 0,!0);return JW.get(pP.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Sge(e):(ZW.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),ez.readAuditLog(e))}o(gge,"readTransactionLog");async function*Sge(e){let t=XW.createNatsTableStreamName(e.database,e.table),r=await Oh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===pP.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(Sge,"readTransactionLogNats");async function Tge(e){let t=hge(e);if(t)throw jT(t,t.message,QT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!JW.get(pP.CONFIG_PARAMS.CLUSTERING_ENABLED))return ZW.info("Delete transaction logs called for Plexus"),ez.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=QW.checkSchemaTableExist(r,n);if(i)throw jT(new Error,i,QT.NOT_FOUND,void 0,void 0,!0);let a=XW.createNatsTableStreamName(r,n),{jsm:c}=await Oh.getNATSReferences(),l=await Oh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Ege,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=_ge):f=(await Oh.viewStream(a,parseInt(s),1))[0].nats_sequence,await Oh.purgeTableStream(r,n,{seq:f}),d}o(Tge,"deleteTransactionLogsBefore")});var hP=v((NBe,nz)=>{"use strict";var XT=require("joi"),yge=require("path"),{handleHDBError:Rge,hdbErrors:bge}=_e(),{HTTP_STATUS_CODES:Age}=bge,Ige=ft(),rz=Q();nz.exports={installModules:Oge};var{CONFIG_PARAMS:wge}=(q(),M(z)),{getConfigValue:Nge}=St(),{nonInteractiveSpawn:Cge}=(YT(),M(KT));async function Oge(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";rz.warn(t,e.projects);let r=Lge(e);if(r)throw Rge(r,r.message,Age.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=Nge(wge.COMPONENTSROOT),a={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){a[l]={npm_output:null,npm_error:null};let u=yge.join(i,l);try{let{stdout:d,stderr:f}=Cge(l,"npm",c,u);d=d?d.replace(`
121
121
  `,""):null,f=f?f.replace(`
122
122
  `,""):null;try{a[l].npm_output=JSON.parse(d)}catch{a[l].npm_output=d}try{a[l].npm_error=JSON.parse(f)}catch{a[l].npm_error=f}}catch(d){d.stderr?a[l].npm_error=Pge(d.stderr):a[l].npm_error=d.message;continue}}return rz.info(`finished installModules with response ${a}`),a.warning=t,a}o(Oge,"installModules");function Pge(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
123
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(Pge,"parseNPMStdErr");function Lge(e){let t=XT.object({projects:XT.array().min(1).items(XT.string()).required(),dry_run:XT.boolean().default(!1)});return Ige.validateBySchema(e,t)}o(Lge,"modulesValidator")});var SP={};Re(SP,{describeMetric:()=>lz,describeMetricOp:()=>gP,get:()=>az,getOp:()=>EP,listMetrics:()=>cz,listMetricsOp:()=>_P});async function Mge(e){return(await Tg().get(e)).hostname}function sz(e,t){return e.length===0||e.includes(t)}function EP(e){return Ph.trace?.("get_analytics request:",e),az(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function oz(e){return"conditions"in e?{...e,conditions:e.conditions.map(oz)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function az(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(oz));let a=t??[];sz(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),Ph.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],sz(a,"node")&&(Ph.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Mge(d)),Ph.trace?.("get_analytics result:",JSON.stringify(u)),u})}function _P(e){return cz(e.metric_types)}async function cz(e=["builtin"]){let t=[],r=Object.values(qo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function gP(e){return lz(e.metric)}async function lz(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Ph.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var iz,Dge,Ph,TP=se(()=>{iz=b(Q());Cw();Ow();({forComponent:Dge}=iz.default),Ph=Dge("analytics").conditional;o(Mge,"lookupHostname");o(sz,"isSelected");o(EP,"getOp");o(oz,"conformCondition");o(az,"get");o(_P,"listMetricsOp");o(cz,"listMetrics");o(gP,"describeMetricOp");o(lz,"describeMetric")});var ZT,ey,Lh,ty=se(()=>{ZT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},ey=Object.keys(ZT),Lh="primary"});function dz(e){return uz.validateBySchema(e,Bge)}var Dh,uz,vge,Uge,xge,Bge,fz=se(()=>{Dh=b(require("joi")),uz=b(ft());ty();vge=ey,Uge=Object.entries(ZT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),xge=o(()=>{let e=Dh.default.string().min(1).max(512);return Object.entries(ZT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Dh.default.string().valid(...r.allowedValues).messages({"any.only":Uge[t]})}))}),e.required()},"createStatusValidationSchema"),Bge=Dh.default.object({id:Dh.default.string().valid(...vge).required(),status:xge()});o(dz,"validateStatus")});function mz(){yP||(yP=da.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),RP=new Uint8Array(yP))}function pz(){mz(),RP[0]=1}function hz(){return mz(),RP[0]===1}var yP,RP,bP=se(()=>{Mh();o(mz,"ensureInitialized");o(pz,"requestRestart");o(hz,"restartNeeded")});var CP={};Re(CP,{DEFAULT_STATUS_ID:()=>Lh,STATUS_IDS:()=>ey,Status:()=>da,clear:()=>IP,get:()=>wP,set:()=>NP});function Uh(){return AP||(AP=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),AP}function IP({id:e}){return vh.debug?.("clearStatus",e),Uh().delete(e)}async function kge(){vh.debug?.("getAllStatus");let e=Uh().get({}),t=await Ym.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=hz();return{systemStatus:e,componentStatus:r,restartRequired:n}}function wP({id:e}){return e?(vh.debug?.("getStatus",e),Uh().get(e)):(vh.debug?.("getStatus","all"),kge())}function NP({status:e,id:t=Lh}){let r=dz({status:e,id:t});if(r)throw(0,ry.handleHDBError)(r,r.message,Fge.BAD_REQUEST);return vh.debug?.("setStatus",t,e),Uh().put(t,{status:e})}var ry,Ez,Fge,AP,da,vh,Mh=se(()=>{we();ry=b(_e()),Ez=b(Xn());fz();ty();Wm();bP();ty();({HTTP_STATUS_CODES:Fge}=ry.hdbErrors);o(Uh,"getStatusTable");da={get primaryStore(){return Uh().primaryStore}},vh=(0,Ez.loggerWithTag)("status");o(IP,"clearStatus");o(kge,"getAllStatus");o(wP,"getStatus");o(NP,"setStatus")});function Gge(e){if(typeof e!="string")throw new ny(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new ny(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new ff(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=Hge.getKey();if(!(0,iy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new PP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function qge(e){if(e?.typ!=="Harper-License")throw new xh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new xh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function $ge(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function Vge(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!$ge(t[r],e[r]))throw new sy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function gz(e){let{header:t,payload:r}=Gge(e),n;try{n=JSON.parse(t)}catch(i){let a=new xh;throw a.cause=i,a}qge(n);let s;try{s=JSON.parse(r)}catch(i){let a=new sy;throw a.cause=i,a}return Vge(s),s}var iy,_z,OP,ny,ff,PP,xh,sy,Hge,Sz=se(()=>{iy=require("node:crypto"),_z=b(me());q();OP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
123
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(Pge,"parseNPMStdErr");function Lge(e){let t=XT.object({projects:XT.array().min(1).items(XT.string()).required(),dry_run:XT.boolean().default(!1)});return Ige.validateBySchema(e,t)}o(Lge,"modulesValidator")});var SP={};Re(SP,{describeMetric:()=>lz,describeMetricOp:()=>gP,get:()=>az,getOp:()=>EP,listMetrics:()=>cz,listMetricsOp:()=>_P});async function Mge(e){return(await Tg().get(e)).hostname}function sz(e,t){return e.length===0||e.includes(t)}function EP(e){return Ph.trace?.("get_analytics request:",e),az(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function oz(e){return"conditions"in e?{...e,conditions:e.conditions.map(oz)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function az(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(oz));let a=t??[];sz(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),Ph.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],sz(a,"node")&&(Ph.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Mge(d)),Ph.trace?.("get_analytics result:",JSON.stringify(u)),u})}function _P(e){return cz(e.metric_types)}async function cz(e=["builtin"]){let t=[],r=Object.values(qo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function gP(e){return lz(e.metric)}async function lz(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Ph.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var iz,Dge,Ph,TP=se(()=>{iz=b(Q());Cw();Ow();({forComponent:Dge}=iz.default),Ph=Dge("analytics").conditional;o(Mge,"lookupHostname");o(sz,"isSelected");o(EP,"getOp");o(oz,"conformCondition");o(az,"get");o(_P,"listMetricsOp");o(cz,"listMetrics");o(gP,"describeMetricOp");o(lz,"describeMetric")});var ZT,ey,Lh,ty=se(()=>{ZT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},ey=Object.keys(ZT),Lh="primary"});function dz(e){return uz.validateBySchema(e,Bge)}var Dh,uz,vge,Uge,xge,Bge,fz=se(()=>{Dh=b(require("joi")),uz=b(ft());ty();vge=ey,Uge=Object.entries(ZT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),xge=o(()=>{let e=Dh.default.string().min(1).max(512);return Object.entries(ZT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Dh.default.string().valid(...r.allowedValues).messages({"any.only":Uge[t]})}))}),e.required()},"createStatusValidationSchema"),Bge=Dh.default.object({id:Dh.default.string().valid(...vge).required(),status:xge()});o(dz,"validateStatus")});function mz(){yP||(yP=da.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),RP=new Uint8Array(yP))}function pz(){mz(),RP[0]=1}function hz(){return mz(),RP[0]===1}var yP,RP,bP=se(()=>{Mh();o(mz,"ensureInitialized");o(pz,"requestRestart");o(hz,"restartNeeded")});var CP={};Re(CP,{DEFAULT_STATUS_ID:()=>Lh,STATUS_IDS:()=>ey,Status:()=>da,clear:()=>IP,get:()=>wP,set:()=>NP});function Uh(){return AP||(AP=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),AP}function IP({id:e}){return vh.debug?.("clearStatus",e),Uh().delete(e)}async function kge(){vh.debug?.("getAllStatus");let e=Uh().get({}),t=await Ym.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=hz();return{systemStatus:e,componentStatus:r,restartRequired:n}}function wP({id:e}){return e?(vh.debug?.("getStatus",e),Uh().get(e)):(vh.debug?.("getStatus","all"),kge())}function NP({status:e,id:t=Lh}){let r=dz({status:e,id:t});if(r)throw(0,ry.handleHDBError)(r,r.message,Fge.BAD_REQUEST);return vh.debug?.("setStatus",t,e),Uh().put(t,{status:e})}var ry,Ez,Fge,AP,da,vh,Mh=se(()=>{we();ry=b(_e()),Ez=b(Xn());fz();ty();Wm();bP();ty();({HTTP_STATUS_CODES:Fge}=ry.hdbErrors);o(Uh,"getStatusTable");da={get primaryStore(){return Uh().primaryStore}},vh=(0,Ez.loggerWithTag)("status");o(IP,"clearStatus");o(kge,"getAllStatus");o(wP,"getStatus");o(NP,"setStatus")});function Gge(e){if(typeof e!="string")throw new ny(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new ny(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new ff(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=Hge.getKey();if(!(0,iy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new PP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function qge(e){if(e?.typ!=="Harper-License")throw new xh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new xh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function $ge(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function Vge(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!$ge(t[r],e[r]))throw new sy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function gz(e){let{header:t,payload:r}=Gge(e),n;try{n=JSON.parse(t)}catch(i){let a=new xh;throw a.cause=i,a}qge(n);let s;try{s=JSON.parse(r)}catch(i){let a=new sy;throw a.cause=i,a}return Vge(s),s}var iy,_z,OP,ny,ff,PP,xh,sy,Hge,Sz=se(()=>{iy=require("node:crypto"),_z=b(me());q();OP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
124
124
  MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
125
125
  -----END PUBLIC KEY-----
126
126
  `:this.pem=`-----BEGIN PUBLIC KEY-----
@@ -128,7 +128,7 @@ MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
128
128
  -----END PUBLIC KEY-----
129
129
  `}getKey(){return(0,iy.createPublicKey)(this.pem)}toString(){return this.pem}},ny=class extends TypeError{static{o(this,"LicenseEncodingError")}},ff=class extends TypeError{static{o(this,"InvalidLicenseError")}},PP=class extends ff{static{o(this,"InvalidLicenseSignatureError")}},xh=class extends ff{static{o(this,"InvalidHeaderError")}},sy=class extends ff{static{o(this,"InvalidPayloadError")}},Hge=new OP(_z.get(F.LICENSE_MODE));o(Gge,"validateLicenseSignature");o(qge,"validateLicenseHeader");o($ge,"valid");o(Vge,"validateLicensePayload");o(gz,"validateLicense")});var oy={};Re(oy,{getActiveLicense:()=>UP,getUsageLicenses:()=>Oz,getUsageLicensesOp:()=>BP,installUsageLicense:()=>vP,installUsageLicenseOp:()=>MP,isActiveLicense:()=>Nz,isLicensed:()=>xP,loadAndWatchLicensesDir:()=>Wge,recordUsage:()=>Cz});async function MP(e){let t=e.license;try{await vP(t)}catch(r){let n=new Rz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function vP(e){let t=gz(e),{id:r}=t;if(await De.system.hdb_license.get(r))throw new DP(`A usage license with ${r} already exists`);return mo.info?.("Installing usage license:",t),De.system.hdb_license.put(r,t)}function Nz(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function UP(){let e=bz.get(F.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=De.system.hdb_license?.search(t);for await(let n of r??[])if(Nz(n))return n}async function xP(){return await UP()!==void 0}async function Cz(e){fa=mo.forComponent("license"),fa.trace?.("Recording usage into license from analytics");let t,r=(await UP())?.id;if(r){fa.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=De.system.hdb_license.update(r,n);for(let s of e)switch(fa.trace?.("Processing analytics record:",s),s.metric){case"db-read":fa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":fa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":fa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(fa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:fa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Tz||(console.error(n),Tz=!0),yz===void 0&&(yz=setInterval(()=>{mo.notify(n)},Kge).unref())}}function BP(e){let t={};return e.region&&(t.region=e.region),Oz(t)}function Oz(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),De.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function Yge(e){mo.trace?.("Loading usage license from file:",e);let t=await Iz.readFile(e,{encoding:"utf-8"});try{await vP(t)}catch(r){mo.error?.("Failed to install usage license from file:",e,r)}}function Wge(){let e=LP.default.join(LP.default.dirname(Az.getConfigFilePath()),"licenses");(0,wz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",Yge)}var Rz,mo,bz,LP,Az,Iz,wz,DP,Tz,yz,Kge,fa,Bh=se(()=>{Sz();Rz=b(_e()),mo=b(Q());ds();Ma();bz=b(me());q();we();LP=b(require("node:path")),Az=b(St()),Iz=b(require("node:fs/promises")),wz=require("chokidar"),DP=class extends Error{static{o(this,"ExistingLicenseError")}};o(MP,"installUsageLicenseOp");o(vP,"installUsageLicense");Tz=!1,Kge=6e5;o(Nz,"isActiveLicense");o(UP,"getActiveLicense");o(xP,"isLicensed");o(Cz,"recordUsage");xw(Cz);o(BP,"getUsageLicensesOp");o(Oz,"getUsageLicenses");o(Yge,"loadLicenseFile");o(Wge,"loadAndWatchLicensesDir")});var GP={};Re(GP,{getFingerprint:()=>kP,getRegistrationInfo:()=>FP,setLicense:()=>HP});function FP(){return{version:Pz.packageJson.version,deprecated:!0}}function kP(){return{message:"this-is-deprecated",deprecated:!0}}function HP(){return{deprecated:!0}}var Pz,qP=se(()=>{Pz=b(Ct());o(FP,"getRegistrationInfo");o(kP,"getFingerprint");o(HP,"setLicense")});var Dz=v((eFe,Lz)=>{"use strict";var Fh=require("alasql"),Zl=require("recursive-iterator"),Ii=Q(),zge=ae(),kh=(q(),M(z)),$P=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Qge(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>kh.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!kh.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][kh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=jge(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!kh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Fh.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function jge(e){return e.filter(t=>t[kh.PERMS_CRUD_ENUM.READ])}o(jge,"filterReadRestrictedAttrs");function Qge(e,t,r,n,s){Jge(e,t,r,n,s)}o(Qge,"interpretAST");function Hh(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(Hh,"addSchemaTableToMap");function Jge(e,t,r,n,s){if(!e){Ii.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Fh.yy.Insert?tSe(e,t,r):e instanceof Fh.yy.Select?Xge(e,t,r,n,s):e instanceof Fh.yy.Update?Zge(e,t,r):e instanceof Fh.yy.Delete?eSe(e,t,r):Ii.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Jge,"getRecordAttributesAST");function Xge(e,t,r,n,s){if(!e){Ii.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(zge.isEmptyOrZeroLength(i)){Ii.error("No schema specified");return}e.from.forEach(c=>{Hh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Hh(c.table,t,r,n,s)});let a=new Zl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Ii.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Zl(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Ii.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Zl(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Ii.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Zl(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Ii.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Xge,"getSelectAttributes");function Zge(e,t,r){if(!e){Ii.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Zl(e.columns),s=e.table.databaseid;Hh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&VP(e.table.tableid,s,i.columnid,t,r)}o(Zge,"getUpdateAttributes");function eSe(e,t,r){if(!e){Ii.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Zl(e.where),s=e.table.databaseid;Hh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&VP(e.table.tableid,s,i.columnid,t,r)}o(eSe,"getDeleteAttributes");function tSe(e,t,r){if(!e){Ii.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Zl(e.columns),s=e.into.databaseid;Hh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&VP(e.into.tableid,s,i.columnid,t,r)}o(tSe,"getInsertAttributes");function VP(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(VP,"pushAttribute");Lz.exports=$P});var uy=v((rFe,jz)=>{"use strict";var KP=Fn(),ay=pn(),ys=GS(),$h=Sl(),YP=rl(),rSe=uC(),nSe=gV(),Vh=os(),cy=fp(),Cr=Q(),sSe=hC(),iSe=ZS(),oSe=qC(),aSe=tT(),cSe=KC(),lSe=YC(),uSe=jC(),dSe=JC(),WP=oT(),ma=ae(),Uz=uf(),wn=(q(),M(z)),xz=EW(),fSe=Xp(),Bz=(dd(),M(Ap)),Fz=(qT(),M(bh)),kz=St(),yr=uP(),Hz=JT(),mSe=hP(),mf=ps(),Gz=(kd(),M(Fd)),zP=(TP(),M(SP)),jP=(Mh(),M(CP)),qz=(Bh(),M(oy)),QP=(qP(),M(GP)),$z=dN(),{handleHDBError:Kn,hdbErrors:Vz}=_e(),{HDB_ERROR_MSGS:cn,HTTP_STATUS_CODES:Gh}=Vz,ee=new Map,Kz="delete",Ic="insert",Ys="read",eu="update",qh="describe",Mz=$h.describeSchema.name,vz=$h.describeTable.name,Yz={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},pSe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},hSe="catchup",ESe="handleGetJob",_Se="handleGetJobsByStartDate",ly={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},gSe=[ys.createTable.name,ys.createAttribute.name,ys.dropTable.name,ys.dropAttribute.name],Wz={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(KP.insert.name,new re(!1,[Ic]));ee.set(KP.update.name,new re(!1,[eu]));ee.set(KP.upsert.name,new re(!1,[Ic,eu]));ee.set(ay.searchByConditions.name,new re(!1,[Ys]));ee.set(ay.searchByHash.name,new re(!1,[Ys]));ee.set(ay.searchByValue.name,new re(!1,[Ys]));ee.set(ay.search.name,new re(!1,[Ys]));ee.set(ys.createSchema.name,new re(!0,[]));ee.set(ys.createTable.name,new re(!0,[]));ee.set(ys.createAttribute.name,new re(!1,[Ic]));ee.set(ys.dropSchema.name,new re(!0,[]));ee.set(ys.dropTable.name,new re(!0,[]));ee.set(ys.dropAttribute.name,new re(!0,[]));ee.set($h.describeSchema.name,new re(!1,[Ys]));ee.set($h.describeTable.name,new re(!1,[Ys]));ee.set(YP.deleteRecord.name,new re(!1,[Kz]));ee.set(Vh.addUser.name,new re(!0,[]));ee.set(Vh.alterUser.name,new re(!0,[]));ee.set(Vh.dropUser.name,new re(!0,[]));ee.set(Vh.listUsersExternal.name,new re(!0,[]));ee.set(cy.listRoles.name,new re(!0,[]));ee.set(cy.addRole.name,new re(!0,[]));ee.set(cy.alterRole.name,new re(!0,[]));ee.set(cy.dropRole.name,new re(!0,[]));ee.set(sSe.name,new re(!0,[]));ee.set(iSe.name,new re(!0,[]));ee.set(oSe.name,new re(!0,[]));ee.set(aSe.name,new re(!0,[]));ee.set(cSe.name,new re(!0,[]));ee.set(lSe.name,new re(!0,[]));ee.set(WP.setRoutes.name,new re(!0,[]));ee.set(WP.getRoutes.name,new re(!0,[]));ee.set(WP.deleteRoutes.name,new re(!0,[]));ee.set(kz.setConfiguration.name,new re(!0,[]));ee.set(uSe.clusterStatus.name,new re(!0,[]));ee.set(dSe.name,new re(!0,[]));ee.set(YP.deleteFilesBefore.name,new re(!0,[]));ee.set(YP.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(Uz.restart.name,new re(!0,[]));ee.set(Uz.restartService.name,new re(!0,[]));ee.set(rSe.name,new re(!0,[]));ee.set(nSe.name,new re(!0,[Ys]));ee.set(ys.cleanupOrphanBlobs.name,new re(!0,[]));ee.set(fSe.systemInformation.name,new re(!0,[]));ee.set(kz.getConfiguration.name,new re(!0,[]));ee.set(Hz.readTransactionLog.name,new re(!0,[]));ee.set(Hz.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set(mSe.installModules.name,new re(!0,[]));ee.set(mf.createCsr.name,new re(!0,[]));ee.set(mf.signCertificate.name,new re(!0,[]));ee.set(mf.listCertificates.name,new re(!0,[]));ee.set(mf.addCertificate.name,new re(!0,[]));ee.set(mf.removeCertificate.name,new re(!0,[]));ee.set(mf.getKey.name,new re(!0,[]));ee.set(Gz.addNodeBack.name,new re(!0,[]));ee.set(Gz.removeNodeBack.name,new re(!0,[]));ee.set(zP.getOp.name,new re(!1,[Ys]));ee.set(zP.listMetricsOp.name,new re(!1,[Ys]));ee.set(zP.describeMetricOp.name,new re(!1,[Ys]));ee.set(jP.clear.name,new re(!0,[]));ee.set(jP.get.name,new re(!0,[]));ee.set(jP.set.name,new re(!0,[]));ee.set(qz.installUsageLicenseOp.name,new re(!0,[]));ee.set(qz.getUsageLicensesOp.name,new re(!0,[]));ee.set(QP.getFingerprint.name,new re(!0,[]));ee.set(QP.setLicense.name,new re(!0,[]));ee.set(Bz.createTokens.name,new re(!1,[]));ee.set(Bz.refreshOperationToken.name,new re(!1,[]));ee.set(Fz.login.name,new re(!1,[]));ee.set(Fz.logout.name,new re(!1,[]));ee.set(yr.customFunctionsStatus.name,new re(!0,[]));ee.set(yr.getCustomFunctions.name,new re(!0,[]));ee.set(yr.getComponents.name,new re(!0,[]));ee.set(yr.getComponentFile.name,new re(!0,[]));ee.set(yr.setComponentFile.name,new re(!0,[]));ee.set(yr.dropComponent.name,new re(!0,[]));ee.set(yr.getCustomFunction.name,new re(!0,[]));ee.set(yr.setCustomFunction.name,new re(!0,[]));ee.set(yr.dropCustomFunction.name,new re(!0,[]));ee.set(yr.addComponent.name,new re(!0,[]));ee.set(yr.dropCustomFunctionProject.name,new re(!0,[]));ee.set(yr.packageComponent.name,new re(!0,[]));ee.set(yr.deployComponent.name,new re(!0,[]));ee.set(yr.addSSHKey.name,new re(!0,[]));ee.set(yr.updateSSHKey.name,new re(!0,[]));ee.set(yr.deleteSSHKey.name,new re(!0,[]));ee.set(yr.listSSHKeys.name,new re(!0,[]));ee.set(yr.setSSHKnownHosts.name,new re(!0,[]));ee.set(yr.getSSHKnownHosts.name,new re(!0,[]));ee.set(QP.getRegistrationInfo.name,new re(!1,[]));ee.set(Vh.userInfo.name,new re(!1,[]));ee.set($h.describeAll.name,new re(!1,[]));ee.set(ESe,new re(!1,[]));ee.set(_Se,new re(!0,[]));ee.set(hSe,new re(!0,[]));ee.set(ly.CSV_DATA_LOAD,new re(!1,[Ic,eu]));ee.set(ly.CSV_URL_LOAD,new re(!1,[Ic,eu]));ee.set(ly.CSV_FILE_LOAD,new re(!1,[Ic,eu]));ee.set(ly.IMPORT_FROM_S3,new re(!1,[Ic,eu]));ee.set(Wz.EXPORT_TO_S3,new re(!0,[]));ee.set(Wz.EXPORT_LOCAL,new re(!0,[]));ee.set(wn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[Kz]));ee.set(wn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Ys]));ee.set(wn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Ic]));ee.set(wn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[eu]));jz.exports={verifyPerms:TSe,verifyPermsAst:SSe,verifyBulkLoadAttributePerms:RSe};function SSe(e,t,r){if(ma.isEmptyOrZeroLength(e))throw Cr.info("verify_perms_ast has an empty user parameter"),Kn(new Error);if(ma.isEmptyOrZeroLength(t))throw Cr.info("verify_perms_ast has an empty user parameter"),Kn(new Error);if(ma.isEmptyOrZeroLength(r))throw Cr.info("verify_perms_ast has a null operation parameter"),Kn(new Error);try{let n=Dz(),s=require("alasql"),i=new $z,a=new n(e),c=a.getSchemas(),l=new Map;if((!c||c.length===0)&&a.affected_attributes&&a.affected_attributes.size>0)throw Cr.info("No schemas defined in verifyPermsAst(), will not continue."),Kn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&Yz[r])throw Kn(new Error,cn.DROP_SYSTEM,Gh.FORBIDDEN);if(u&&!d)return null;let f=xz.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=a.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=a.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=zz(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let g=a.getAttributesBySchemaTableName(h,p[E]),R=XP(t.role.permission,h,p[E]);JP(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Kn(n)}}o(SSe,"verifyPermsAst");function TSe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Cr.info("null required parameter in verifyPerms"),Kn(new Error,cn.DEFAULT_INVALID_REQUEST,Gh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new $z;if(ma.isEmptyOrZeroLength(e.hdb_user?.role)||ma.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Cr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(cn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(wn.SYSTEM_SCHEMA_NAME)||s===wn.SYSTEM_SCHEMA_NAME;if(l&&d&&pSe[e.operation]&&(i===wn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===wn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===wn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&Yz[r])throw Kn(new Error,cn.DROP_SYSTEM,Gh.FORBIDDEN);if(l&&!d||u===!0&&(r===ys.createSchema.name||r===ys.dropSchema.name))return null;if(gSe.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=xz.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===Mz||r===vz)&&!f.super_user){if(s===wn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(cn.SCHEMA_PERM_ERROR(s));if(r===Mz&&(!f[s]||!f[s][qh]))return c.handleInvalidItem(cn.SCHEMA_NOT_FOUND(s));if(r===vz&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][qh]))return c.handleInvalidItem(cn.TABLE_NOT_FOUND(s,i))}let m=zz(e.hdb_user,r,a,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&wn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[wn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[wn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=ySe(e),h=XP(e.hdb_user?.role?.permission,s,i);return JP(p,h,r,i,s,c,n),c.getPermsResponse()}o(TSe,"verifyPerms");function zz(e,t,r,n,s){if(ma.arrayHasEmptyValues([e,t,r]))throw Cr.info("hasPermissions has an invalid parameter"),Kn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Cr.info(`operation ${t} not found.`),Kn(new Error,cn.OP_NOT_FOUND(t),Gh.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Cr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(cn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][qh]===!1){n.addInvalidItem(cn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(cn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[qh]===!1)n.addInvalidItem(cn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!ma.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Cr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=cn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Cr.error(p),Cr.error(m),Kn(Vz.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(zz,"hasPermissions");function JP(e,t,r,n,s,i,a){if(!e||!t)throw Cr.info("no attributes specified in checkAttributePerms."),Kn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Cr.info(`no permissions found for ${r} in checkAttributePerms().`),Kn(new Error);if(ma.isEmptyOrZeroLength(t))return Cr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[qh]===!1){i.addInvalidItem(cn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(wn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ys)throw Kn(new Error,cn.SYSTEM_TIMESTAMP_PERMS_ERR,Gh.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(cn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(JP,"checkAttributePerms");function ySe(e){let t=new Set;try{if(e.action)return t;if(e.operation===wn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Cr.info(r)}return t}o(ySe,"getRecordAttributes");function XP(e,t,r){let n=new Map;if(ma.isEmpty(e))return Cr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Cr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(XP,"getAttributePermissions");function RSe(e,t,r,n,s,i,a){let c=new Set(i),l=XP(e,n,s);JP(c,l,t,s,n,a,r)}o(RSe,"verifyBulkLoadAttributePerms")});var eL=v((sFe,Qz)=>{"use strict";var ZP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Qz.exports=ZP});var oL=v((uFe,mj)=>{"use strict";var dy=Fn(),my=nN(),bSe=require("needle"),wi=(q(),M(z)),oFe=Ot(),pf=ae(),{handleHDBError:Jt,hdbErrors:ij}=_e(),{HTTP_STATUS_CODES:ln,HDB_ERROR_MSGS:Or,CHECK_LOGS_WRAPPER:ru}=ij,hf=Q(),tL=require("papaparse");pf.promisifyPapaParse();var Ni=require("fs-extra"),ASe=require("path"),{chain:Jz}=require("stream-chain"),Xz=require("stream-json/streamers/StreamArray"),Zz=require("stream-json/utils/Batch"),ej=require("stream-chain/utils/comp"),{finished:tj}=require("stream"),ISe=me(),oj=sN(),wSe=iN(),{BulkLoadFileObject:nL,BulkLoadDataObject:NSe}=UG(),sL=dN(),{verifyBulkLoadAttributePerms:aj}=uy(),aFe=eL(),cFe=hr(),lFe=zi(),{databases:CSe}=(we(),M(mt)),{coerceType:OSe}=(py(),M(pj)),rj="No records parsed from csv file.",tu=`${ISe.get("HDB_ROOT")}/tmp`,{schemaRegex:PSe}=$i(),nj=1024*1024*2,sj=5e3,LSe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};mj.exports={csvDataLoad:DSe,csvURLLoad:MSe,csvFileLoad:vSe,importFromS3:USe};async function DSe(e,t){let r=my.dataObject(e);if(r)throw Jt(r,r.message,ln.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=uj(e.schema,e.table),i=tL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:rL.bind(null,s),dynamicTyping:!1}),a=new sL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&aj(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Jt(new Error,c,ln.BAD_REQUEST,void 0,void 0,!0);let l=new NSe(e.action,e.schema,e.table,i.data);return n=await oj.callOperationFunctionAsAwait(dj,l,null),n.message===rj?rj:fj(n.records,n.number_written)}catch(s){throw nu(s)}}o(DSe,"csvDataLoad");async function MSe(e){let t=my.urlObject(e);if(t)throw Jt(t,t.message,ln.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${tu}/${r}`;try{await xSe(e,r)}catch(s){throw hf.error(Or.DOWNLOAD_FILE_ERR(r)+" - "+s),Jt(s,ru(Or.DOWNLOAD_FILE_ERR(r)))}try{let s=new nL(this.job_operation_function.name,e.action,e.schema,e.table,n,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await iL(s);return await fy(n),i}catch(s){throw await fy(n),nu(s)}}o(MSe,"csvURLLoad");async function vSe(e){let t=my.fileObject(e);if(t)throw Jt(t,t.message,ln.BAD_REQUEST,void 0,void 0,!0);let r=new nL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await iL(r)}catch(n){throw nu(n)}}o(vSe,"csvFileLoad");async function USe(e){let t=my.s3FileObject(e);if(t)throw Jt(t,t.message,ln.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=ASe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${tu}/${s}`;let i=new nL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await BSe(s,e);let a=await iL(i);return await fy(r),a}catch(n){throw await fy(r),nu(n)}}o(USe,"importFromS3");async function xSe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await bSe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Jt(n,s,n.statusCode,wi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}kSe(r,e.csv_url),await FSe(t,r.raw)}o(xSe,"downloadCSVFile");async function BSe(e,t){try{let r=`${tu}/${e}`;await Ni.mkdirp(tu),await Ni.writeFile(`${tu}/${e}`,"",{flag:"a+"});let n=await Ni.createWriteStream(r),s=await wSe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){hf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw hf.error(Or.S3_DOWNLOAD_ERR+" - "+r),Jt(r,ru(Or.S3_DOWNLOAD_ERR))}}o(BSe,"downloadFileFromS3");async function FSe(e,t){try{await Ni.mkdirp(tu),await Ni.writeFile(`${tu}/${e}`,t)}catch(r){throw hf.error(Or.WRITE_TEMP_FILE_ERR),Jt(r,ru(Or.DEFAULT_BULK_LOAD_ERR))}}o(FSe,"writeFileToTempFolder");async function fy(e){if(e)try{await Ni.access(e),await Ni.unlink(e)}catch{hf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(fy,"deleteTempFile");function kSe(e,t){if(e.statusCode!==ij.HTTP_STATUS_CODES.OK)throw Jt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,ln.BAD_REQUEST);if(!LSe[e.headers["content-type"]])throw Jt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,ln.BAD_REQUEST);if(!e.raw)throw Jt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,ln.BAD_REQUEST)}o(kSe,"validateURLResponse");async function iL(e){try{let t;switch(e.file_type){case wi.VALID_S3_FILE_TYPES.CSV:t=await HSe(e);break;case wi.VALID_S3_FILE_TYPES.JSON:t=await GSe(e);break;default:throw Jt(new Error,Or.DEFAULT_BULK_LOAD_ERR,ln.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Or.INVALID_FILE_EXT_ERR(e))}return fj(t.records,t.number_written)}catch(t){throw nu(t)}}o(iL,"fileLoad");async function cj(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await dy.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&aj(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Jt(c);r(l)}}o(cj,"validateChunk");async function lj(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;pf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!pf.isEmpty(c)&&!pf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await oj.callOperationFunctionAsAwait(dj,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Jt(c,ru(Or.INSERT_CSV_ERR),ln.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Or.INSERT_CSV_ERR+" - "+c);r(l)}}o(lj,"insertChunk");async function HSe(e){let t={records:0,number_written:0},r=uj(e.schema,e.table);try{let n=new sL,s=Ni.createReadStream(e.file_path,{highWaterMark:nj});s.setEncoding("utf8"),await tL.parsePromise(s,cj.bind(null,e,n),rL.bind(null,r));let i=n.getPermsResponse();if(i)throw Jt(new Error,i,ln.BAD_REQUEST);return s=Ni.createReadStream(e.file_path,{highWaterMark:nj}),s.setEncoding("utf8"),await tL.parsePromise(s,lj.bind(null,e,t),rL.bind(null,r)),s.destroy(),t}catch(n){throw Jt(n,ru(Or.PAPA_PARSE_ERR),ln.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Or.PAPA_PARSE_ERR+n)}}o(HSe,"callPapaParse");function uj(e,t){let r=CSe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>OSe(i,s));return n}o(uj,"createTransformMap");function rL(e,t,r){let n=e.get(r);return n?n(t):pf.autoCast(t)}o(rL,"typeFunction");async function GSe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new sL,s=Jz([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),Xz.withParser(),c=>c.value,new Zz({batchSize:sj}),ej(async c=>{await cj(e,n,r,c)})]);await new Promise((c,l)=>{tj(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Jt(new Error,i,ln.BAD_REQUEST);let a=Jz([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),Xz.withParser(),c=>c.value,new Zz({batchSize:sj}),ej(async c=>{await lj(e,t,r,c)})]);return await new Promise((c,l)=>{tj(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Jt(n,ru(Or.INSERT_JSON_ERR),ln.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Or.INSERT_JSON_ERR+n)}}o(GSe,"insertJson");async function dj(e){let t={};try{e.data&&e.data.length>0&&qSe(e.data[0])?t=await $Se(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",hf.info(t.message))}catch(r){throw nu(r)}return t}o(dj,"callBulkFileLoad");function qSe(e){let t=Object.keys(e);for(let r of t)if(!PSe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(qSe,"validateColumnNames");async function $Se(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=dy.insert;break;case"update":i=dy.update;break;case"upsert":i=dy.upsert;break;default:throw Jt(new Error,Or.INVALID_ACTION_PARAM_ERR(n),ln.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Or.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=pf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw nu(a)}}o($Se,"bulkFileLoad");function fj(e,t){return`successfully loaded ${t} of ${e} records`}o(fj,"buildResponseMsg");function nu(e){return Jt(e,ru(Or.DEFAULT_BULK_LOAD_ERR),ln.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Or.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(nu,"buildTopLevelErrMsg")});var gj=v((mFe,_j)=>{"use strict";var VSe=pn(),KSe=Yi(),hj=Q(),YSe=Fn(),fFe=Zg(),WSe=require("clone"),cL=require("alasql"),zSe=U_(),Ej=require("util"),jSe=Ej.promisify(KSe.getTableSchema),QSe=Ej.promisify(VSe.search),JSe=(q(),M(z)),aL=ae();zSe(cL);_j.exports={update:ZSe};var XSe="There was a problem performing this update. Please check the logs and try again.";async function ZSe({statement:e,hdb_user:t}){let r=await jSe(e.table.databaseid,e.table.tableid),n=eTe(e.columns);aL.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=WSe(s),c=aL.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=cL.parse(l).statements[0],d=await QSe(u),f=tTe(n,d);return rTe(a,f,t)}o(ZSe,"update");function eTe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=cL.compile(`SELECT ${r.expression.toString()} AS [${JSe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw hj.error(t),new Error(XSe)}}o(eTe,"createUpdateRecord");function tTe(e,t){return aL.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(tTe,"buildUpdateRecords");async function rTe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await YSe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){hj.error(`Error delete new_attributes from update response: ${i}`)}return s}o(rTe,"updateRecords")});var Tj=v((_Fe,Sj)=>{var nTe=require("alasql"),sTe=pn(),iTe=Q(),oTe=rs(),uL=require("util"),lL=ae(),aTe=(q(),M(z)),cTe=Yi(),hFe=Zg(),EFe=Fn(),lTe="record",uTe="successfully deleted",dTe=uL.callbackify(hTe),fTe=uL.promisify(sTe.search),mTe=uL.promisify(cTe.getTableSchema);Sj.exports={convertDelete:dTe};function pTe(e){return`${e.deleted_hashes.length} ${lTe}${e.deleted_hashes.length===1?"":"s"} ${uTe}`}o(pTe,"generateReturnMessage");async function hTe({statement:e,hdb_user:t}){let r=await mTe(e.table.databaseid,e.table.tableid);lL.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=lL.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=nTe.parse(a).statements[0],l={operation:aTe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await fTe(c);let u=await oTe.deleteRecords(l);return lL.isEmptyOrZeroLength(u.message)&&(u.message=pTe(u)),delete u.txn_time,u}catch(u){throw iTe.error(u),u.hdb_code?u.message:u}}o(hTe,"convertDelete")});var Yh=v((SFe,Ij)=>{"use strict";Ij.exports={evaluateSQL:CTe,processAST:Aj,convertSQLToAST:bj,checkASTPermissions:Rj};var ETe=Fn(),yj=require("util"),_Te=yj.callbackify(ETe.insert),gTe=pn().search,STe=gj().update,TTe=yj.callbackify(STe),yTe=Tj().convertDelete,wc=require("alasql"),RTe=uy(),hy=Q(),bTe=U_(),ATe=ae(),Kh=(q(),M(z)),{hdbErrors:ITe,handleHDBError:dL}=_e(),{HTTP_STATUS_CODES:fL}=ITe;bTe(wc);var wTe=403,NTe="There was a problem performing this insert. Please check the logs and try again.",mL=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function CTe(e,t){let r=e.parsed_sql_object;if(!r){r=bj(e.sql);let n,s=r.ast.statements[0];if(s instanceof wc.yy.Insert?n=s.into.databaseid:s instanceof wc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wc.yy.Update||s instanceof wc.yy.Delete?n=s.table.databaseid:hy.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wc.yy.Select)&&ATe.isEmptyOrZeroLength(n))return t("No schema specified",null)}Aj(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(CTe,"evaluateSQL");function Rj(e,t){let r;try{r=RTe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Rj,"checkASTPermissions");function bj(e){let t=new mL;if(!e)throw dL(new Error,"The 'sql' parameter is missing from the request body",fL.BAD_REQUEST);try{let r=e.trim(),n=wc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
130
130
  `);throw n[1]?dL(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,fL.BAD_REQUEST):dL(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",fL.BAD_REQUEST)}return t}o(bj,"convertSQLToAST");function Aj(e,t,r){try{let n=OTe;if(!e.bypass_auth&&!t.permissions_checked){let i=Rj(e,t);if(i&&i.length>0)return r(wTe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Kh.VALID_SQL_OPS_ENUM.SELECT:n=gTe,s=t.ast.statements[0];break;case Kh.VALID_SQL_OPS_ENUM.INSERT:n=PTe;break;case Kh.VALID_SQL_OPS_ENUM.UPDATE:n=TTe;break;case Kh.VALID_SQL_OPS_ENUM.DELETE:n=yTe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(Aj,"processAST");function OTe(e,t){hy.info(e),t("unknown sql statement")}o(OTe,"nullFunction");function PTe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=LTe(i,e.values)}catch(a){return r(a)}_Te(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){hy.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(PTe,"convertInsert");function LTe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=wc.compile(`SELECT ${s.toString()} AS [${Kh.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw hy.error(r),new Error(NTe)}}o(LTe,"createDataObjects")});var EL=v((yFe,Mj)=>{"use strict";var hL=pn(),DTe=iN(),{AsyncParser:MTe}=require("json2csv"),Ey=require("stream"),Rs=ae(),pL=require("fs-extra"),vTe=require("path"),Ws=Q(),{promisify:Cj}=require("util"),Wh=ae(),{handleHDBError:Rr,hdbErrors:UTe}=_e(),{HDB_ERROR_MSGS:Yn,HTTP_STATUS_CODES:br}=UTe,{streamAsJSON:xTe}=(Hb(),M(iU)),{Upload:BTe}=require("@aws-sdk/lib-storage"),{toCsvStream:FTe}=(Po(),M(wU)),wj=["search_by_value","search_by_hash","sql","search_by_conditions"],Nj=["json","csv"],Oj="json",Pj="csv",kTe="Successfully exported JSON locally.",HTe="Successfully exported CSV locally.",GTe=1e3,qTe=hL.searchByHash,$Te=hL.searchByValue,VTe=Cj(Ey.finished);Mj.exports={export_to_s3:zTe,export_local:KTe};async function KTe(e){Ws.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Lj(e);if(!Rs.isEmpty(t))throw Ws.error(t),Rr(new Error,t,br.BAD_REQUEST,void 0,void 0,!0);if(Rs.isEmpty(e.path))throw Ws.error(Yn.MISSING_VALUE("path")),Rr(new Error,Yn.MISSING_VALUE("path"),br.BAD_REQUEST,void 0,void 0,!0);let r=(Rs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(vTe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Rs.buildFolderPath(e.path,r);await YTe(e.path);let s=await Dj(e);return await WTe(n,e.format,s)}o(KTe,"export_local");async function YTe(e){if(Ws.trace("in confirmPath"),Rs.isEmptyOrZeroLength(e))throw Rr(new Error,`Invalid path: ${e}`,br.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await pL.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Ws.error(n),Rr(new Error,n,br.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Ws.error(r),Rr(new Error,r,br.BAD_REQUEST,void 0,void 0,!0)}return!0}o(YTe,"confirmPath");async function WTe(e,t,r){if(Ws.trace("in saveToLocal"),Wh.isEmptyOrZeroLength(e))throw Rr(new Error,Yn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(Wh.isEmptyOrZeroLength(t))throw Rr(new Error,Yn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(Wh.isEmpty(r))throw Rr(new Error,Yn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===Oj){let n=pL.createWriteStream(e);return xTe(r).pipe(n),await VTe(n),{message:kTe,path:e}}else if(t===Pj){let n=pL.createWriteStream(e),s=Ey.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new MTe(i,c).fromInput(s).toOutput(n).promise(!1),{message:HTe,path:e}}throw Rr(new Error,Yn.INVALID_VALUE("format"),br.BAD_REQUEST)}o(WTe,"saveToLocal");async function zTe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,Yn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(Rs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,Yn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(Rs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,Yn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(Rs.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,Yn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(Rs.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,Yn.MISSING_VALUE("key"),br.BAD_REQUEST);if(Rs.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,Yn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=Lj(e);if(!Rs.isEmpty(t))throw Rr(new Error,t,br.BAD_REQUEST);Ws.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Dj(e)}catch(l){throw Ws.error(l),l}let n,s=await DTe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Ey.PassThrough;if(e.format===Pj){i=e.s3.key+".csv";let l=FTe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Oj){i=e.s3.key+".json";let l=new Ey.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%GTe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,Yn.INVALID_VALUE("format"),br.BAD_REQUEST);return new BTe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(zTe,"export_to_s3");function Lj(e){if(Ws.trace("in exportCoreValidation"),Rs.isEmpty(e.format))return"format missing";if(Nj.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Nj.join(", ")}`;let t=e.search_operation.operation;if(Rs.isEmpty(t))return"search_operation.operation missing";if(wj.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${wj.join(", ")}`}o(Lj,"exportCoreValidation");async function Dj(e){Ws.trace("in getRecords");let t,r;if(Wh.isEmpty(e.search_operation)||Wh.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,Yn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=$Te;break;case"search_by_hash":t=qTe;break;case"search_by_conditions":t=hL.searchByConditions;break;case"sql":{let n=Yh();t=Cj(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ws.error(r),Rr(new Error,r,br.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Dj,"getRecords")});var Uj=v((bFe,vj)=>{"use strict";var _L=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};vj.exports=_L});var Fj=v((IFe,Bj)=>{"use strict";var jTe=(q(),M(z)),xj=require("moment"),QTe=require("uuid").v4,gL=class{static{o(this,"JobObject")}constructor(){this.id=QTe(),this.type=void 0,this.start_datetime=xj().valueOf(),this.created_datetime=xj().valueOf(),this.end_datetime=void 0,this.status=jTe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Bj.exports=gL});var TL=v((NFe,Yj)=>{"use strict";var JTe=require("uuid").v4,$j=Fn(),Vj=pn(),XTe=di(),ZTe=Ju(),eye=Uj(),Mt=(q(),M(z)),tye=Fj(),rye=Ug(),Ci=Q(),nye=mm(),Ef=ae(),{promisify:sye}=require("util"),su=require("moment"),_y=nN(),kj=IA(),{deleteTransactionLogsBeforeValidator:iye}=mP(),{handleHDBError:Hj,hdbErrors:oye,ClientError:aye}=_e(),{HTTP_STATUS_CODES:Gj}=oye,qj=Vj.searchByValue,cye=Vj.searchByHash,lye=$j.insert,uye=$j.update,SL;Yj.exports={addJob:mye,updateJob:hye,handleGetJob:dye,handleGetJobsByStartDate:fye,getJobById:Kj};async function dye(e){if(e.id===void 0)throw new aye("'id' is required");let t=await Kj(e.id);return Ef.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(dye,"handleGetJob");async function fye(e){try{let t=await pye(e);if(Ci.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=su(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=su(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ci.error(r),new Error(r)}}o(fye,"handleGetJobsByStartDate");async function mye(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ef.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ci.info(d),t.error=d,t}if(!Mt.JOB_TYPE_ENUM[e.operation])return Ci.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Mt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=_y.fileObject(e);break;case Mt.OPERATIONS_ENUM.CSV_URL_LOAD:n=_y.urlObject(e);break;case Mt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=_y.dataObject(e);break;case Mt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=_y.s3FileObject(e);break;case Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=kj(e,"date");break;case Mt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=kj(e,"timestamp");break;case Mt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=iye(e);break;case Mt.OPERATIONS_ENUM.RESTART_SERVICE:if(Mt.HDB_PROCESS_SERVICES[e.service]===void 0)throw Hj(new Error,"Invalid service",Gj.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Hj(n,n.message,Gj.BAD_REQUEST,void 0,void 0,!0);let s=new tye;s.type=e.operation===Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new XTe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await qj(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=JTe();try{a=await qj(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ci.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new nye(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await lye(l)}catch(d){return Ci.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ci.trace(d)}return t}o(mye,"addJob");async function pye(e){let t=su(e.from_date,su.ISO_8601),r=su(e.to_date,su.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new eye(n,e.hdb_user);try{if(!SL){let i=Yh();SL=sye(i.evaluateSQL)}return await SL(s)}catch(i){throw Ci.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(pye,"getJobsInDateRange");async function Kj(e){if(Ef.isEmptyOrZeroLength(e))return Ef.errorizeMessage("Invalid job ID specified.");let t=new ZTe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await cye(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ci.error(n),Ef.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Kj,"getJobById");async function hye(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ef.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Mt.JOB_STATUS_ENUM.COMPLETE||e.status===Mt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=su().valueOf());let t=new rye(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await uye(t),r}o(hye,"updateJob")});var e4=v((OFe,Zj)=>{"use strict";var Wj=ae(),Pr=(q(),M(z)),Eye=require("moment"),gy=oL(),zh=Q(),zj=TL(),jj=EL(),Qj=rl(),Jj=nt(),_ye=JT(),gye=uf(),{parentPort:Sye,isMainThread:Xj}=require("worker_threads"),{onMessageByType:Tye}=nt(),yL=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function yye(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(Wj.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Wj.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Pr.JOB_TYPE_ENUM.csv_file_load:await po(e,gy.csvFileLoad);break;case Pr.JOB_TYPE_ENUM.csv_url_load:await po(e,gy.csvURLLoad);break;case Pr.JOB_TYPE_ENUM.csv_data_load:await po(e,gy.csvDataLoad);break;case Pr.JOB_TYPE_ENUM.import_from_s3:await po(e,gy.importFromS3);break;case Pr.JOB_TYPE_ENUM.empty_trash:break;case Pr.JOB_TYPE_ENUM.export_local:await po(e,jj.export_local);break;case Pr.JOB_TYPE_ENUM.export_to_s3:await po(e,jj.export_to_s3);break;case Pr.JOB_TYPE_ENUM.delete_files_before:case Pr.JOB_TYPE_ENUM.delete_records_before:await po(e,Qj.deleteFilesBefore);break;case Pr.JOB_TYPE_ENUM.delete_audit_logs_before:await po(e,Qj.deleteAuditLogsBefore);break;case Pr.JOB_TYPE_ENUM.delete_transaction_logs_before:await po(e,_ye.deleteTransactionLogsBefore);break;case Pr.JOB_TYPE_ENUM.restart_service:return await po(e,gye.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(yye,"parseMessage");async function po(e,t){try{e.job.status=Pr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Eye().valueOf(),await zj.updateJob(e.job),await Rye(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):zh.error(`There was an error running ${t.name} job with id ${e.job.id}`),zh.error(n),e.job.message=n,e.job.status=Pr.JOB_STATUS_ENUM.ERROR;try{await zj.updateJob(e.job)}catch(s){throw zh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(po,"runJob");async function Rye(e){zh.trace("launching job thread:",e),Xj?Jj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Sye.postMessage({type:Pr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(Rye,"launchJobThread");Xj&&Tye(Pr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Jj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){zh.error(r)}});Zj.exports={parseMessage:yye,RunnerMessage:yL}});var r4=v((LFe,t4)=>{"use strict";var bye=ae(),RL=me(),Nc=(q(),M(z)),Aye=Ot(),Iye=hr(),ho=Q(),wye=eL(),Nye=zi();RL.initSync();t4.exports={postOperationHandler:Oye,sendOperationTransaction:jh};async function jh(e,t,r,n){if(e.schema===Nc.SYSTEM_SCHEMA_NAME)return;let s=Cye(e,t,r);s&&(ho.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await Iye.publishToStream(`${Aye.SUBJECT_PREFIXES.TXN}.${e.schema}`,Nye.createNatsTableStreamName(e.schema,e.table),n,s))}o(jh,"sendOperationTransaction");function Cye(e,t,r){if(bye.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Nc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(Cye,"convertCRUDOperationToTransaction");async function Oye(e,t,r){if(!RL.get(Nc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;ho.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=RL.get(Nc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new wye(t.txn_time,n,s);switch(e.operation){case Nc.OPERATIONS_ENUM.INSERT:try{await jh(e,t.inserted_hashes,i,r)}catch(a){ho.error("There was an error calling clustering postOperationHandler for insert."),ho.error(a)}break;case Nc.OPERATIONS_ENUM.DELETE:try{await jh(e,t.deleted_hashes,i,r)}catch(a){ho.error("There was an error calling clustering postOperationHandler for delete."),ho.error(a)}break;case Nc.OPERATIONS_ENUM.UPDATE:try{await jh(e,t.update_hashes,i,r)}catch(a){ho.error("There was an error calling clustering postOperationHandler for update."),ho.error(a)}break;case Nc.OPERATIONS_ENUM.UPSERT:try{await jh(e,t.upserted_hashes,i,r)}catch(a){ho.error("There was an error calling clustering postOperationHandler for upsert."),ho.error(a)}break;default:break}return t}o(Oye,"postOperationHandler")});var Z,n4=se(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var dP={};Re(dP,{chooseOperation:()=>b4,executeJob:()=>zs,getOperationFunction:()=>A4,operation:()=>LL,processLocalTransaction:()=>R4});function Dye(e){if(!bL){let t=Yh();bL=PL.promisify(t.evaluateSQL)}return bL(e)}async function R4(e,t){try{if(e.body.operation!=="read_log"&&(Zh.default.log_level===nm.INFO||Zh.default.log_level===nm.DEBUG||Zh.default.log_level===nm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Nn.info(c)}}catch(n){Nn.error(n)}let r=await T4.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Mye[e.body.operation]&&h4.default.setSchemaDataToGlobal(n=>{n&&Nn.error(n)}),r}function b4(e){let t;try{t=A4(e)}catch(s){throw Nn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=Yh(),i=e.operation==="sql"?e.sql:e.search_operation.sql,a=s.convertSQLToAST(i);if(e.parsed_sql_object=a,!e.bypass_auth){let c=s.checkASTPermissions(e,a);if(c)throw Nn.error(`${s4.FORBIDDEN} from operation ${e.operation}`),Nn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,js.handleHDBError)(new Error,c,js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=p4.default.verifyPerms(i,s);if(a)throw Nn.error(`${s4.FORBIDDEN} from operation ${e.operation}`),Nn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,js.handleHDBError)(new Error,a,js.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,js.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function A4(e){if(Nn.trace(`getOperationFunction with operation: ${e.operation}`),i4.has(e.operation))return i4.get(e.operation);throw(0,js.handleHDBError)(new Error,js.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),js.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function LL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=b4(e);return R4({body:e},n)}async function vye(e){Nn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[Sb]=!0;let a;switch(i.operation){case V.INSERT:a=await ou.default.insert(i);break;case V.UPDATE:a=await ou.default.update(i);break;case V.UPSERT:a=await ou.default.upsert(i);break;case V.DELETE:a=await Sf.default.deleteRecord(i);break;default:Nn.warn("invalid operation in catchup");break}await Pye.postOperationHandler(i,a,e)}catch(a){Nn.info("Invalid operation in transaction"),Nn.error(a)}}async function zs(e){(0,S4.transformReq)(e);let t,r;try{if(r=await Ty.default.addJob(e),r){t=r.createdJob,Nn.info("addJob result",r);let n=new NL.default.RunnerMessage(t,e);return{message:await NL.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Nn.error(i),(0,js.handleHDBError)(n,i)}}function Uye(){let e=new Map;return e.set(V.INSERT,new Z(ou.default.insert)),e.set(V.UPDATE,new Z(ou.default.update)),e.set(V.UPSERT,new Z(ou.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(gf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(gf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(gf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(gf.default.searchByValue)),e.set(V.SEARCH,new Z(Lye)),e.set(V.SQL,new Z(Dye)),e.set(V.CSV_DATA_LOAD,new Z(zs,Qh.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(zs,Qh.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(zs,Qh.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(zs,Qh.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(Oi.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(Oi.default.createSchema)),e.set(V.CREATE_TABLE,new Z(Oi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(Oi.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(Oi.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(Oi.default.dropSchema)),e.set(V.DROP_TABLE,new Z(Oi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(Oi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(Jh.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(Jh.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(Jh.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(Jh.default.describeAll)),e.set(V.DELETE,new Z(Sf.default.deleteRecord)),e.set(V.ADD_USER,new Z(_f.default.addUser)),e.set(V.ALTER_USER,new Z(_f.default.alterUser)),e.set(V.DROP_USER,new Z(_f.default.dropUser)),e.set(V.LIST_USERS,new Z(_f.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(Xh.default.listRoles)),e.set(V.ADD_ROLE,new Z(Xh.default.addRole)),e.set(V.ALTER_ROLE,new Z(Xh.default.alterRole)),e.set(V.DROP_ROLE,new Z(Xh.default.dropRole)),e.set(V.USER_INFO,new Z(_f.default.userInfo)),e.set(V.READ_LOG,new Z(a4.default)),e.set(V.ADD_NODE,new Z(c4.default)),e.set(V.UPDATE_NODE,new Z(AL.default)),e.set(V.SET_NODE_REPLICATION,new Z(AL.default)),e.set(V.REMOVE_NODE,new Z(l4.default)),e.set(V.CONFIGURE_CLUSTER,new Z(u4.default)),e.set(V.PURGE_STREAM,new Z(d4.default)),e.set(V.SET_CONFIGURATION,new Z(CL.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(f4.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(m4.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(Sy.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(Sy.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(Sy.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(zs,IL.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(iu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(iu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(iu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(iu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(iu.default.removeCertificate)),e.set(V.GET_KEY,new Z(iu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(xC)),e.set(V.REMOVE_NODE_BACK,new Z(BC)),e.set(V.DELETE_FILES_BEFORE,new Z(zs,Sf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(zs,Sf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(zs,IL.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(Ty.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(Ty.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(FP)),e.set(V.GET_FINGERPRINT,new Z(kP)),e.set(V.SET_LICENSE,new Z(HP)),e.set(V.RESTART,new Z(wL.default.restart)),e.set(V.RESTART_SERVICE,new Z(zs,wL.default.restartService)),e.set(V.CATCHUP,new Z(vye)),e.set(V.SYSTEM_INFORMATION,new Z(E4.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(zs,Sf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(o4.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(zw)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(jw)),e.set(V.LOGIN,new Z(oP)),e.set(V.LOGOUT,new Z(aP)),e.set(V.GET_CONFIGURATION,new Z(CL.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(vt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(vt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(vt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(vt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(vt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(vt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(vt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(vt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(vt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(vt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(vt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(vt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(OL.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(zs,OL.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(_4.default.installModules)),e.set(V.GET_BACKUP,new Z(Oi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(Oi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(vt.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(vt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(vt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(vt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(vt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(vt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(EP)),e.set(V.LIST_METRICS,new Z(_P)),e.set(V.DESCRIBE_METRIC,new Z(gP)),e.set(V.GET_STATUS,new Z(wP)),e.set(V.SET_STATUS,new Z(NP)),e.set(V.CLEAR_STATUS,new Z(IP)),e.set(V.INSTALL_USAGE_LICENSE,new Z(MP)),e.set(V.GET_USAGE_LICENSES,new Z(BP)),e}var gf,Qh,Oi,Jh,Sf,o4,_f,Xh,vt,Zh,a4,c4,AL,l4,u4,d4,f4,m4,Sy,IL,p4,Ty,js,wL,PL,ou,h4,E4,NL,CL,OL,_4,g4,S4,iu,T4,y4,s4,Nn,Pye,Lye,bL,Mye,i4,fP=se(()=>{gf=b(pn()),Qh=b(oL()),Oi=b(GS()),Jh=b(Sl()),Sf=b(rl()),o4=b(uC()),_f=b(os()),Xh=b(fp()),vt=b(uP()),Zh=b(Q()),a4=b(hC()),c4=b(ZS()),AL=b(qC()),l4=b(tT()),u4=b(KC()),d4=b(YC()),f4=b(jC()),m4=b(JC()),Sy=b(oT()),IL=b(EL()),p4=b(uy()),Ty=b(TL());q();js=b(_e()),wL=b(uf()),PL=b(require("util")),ou=b(Fn()),h4=b(Yi()),E4=b(Xp()),NL=b(e4());dd();qT();CL=b(St()),OL=b(JT()),_4=b(hP()),g4=b(ii()),S4=b(ae());Fr();iu=b(ps());kd();TP();T4=b(sN()),y4=b(r4());Mh();Bh();qP();n4();({HTTP_STATUS_CODES:s4}=js.hdbErrors),Nn=Zh.default.loggerWithTag("operation"),{transactToClusteringUtils:Pye}=y4.default,Lye=PL.promisify(gf.default.search);o(Dye,"evaluateSQL");Mye={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(R4,"processLocalTransaction");i4=Uye();ve.operation=LL;o(b4,"chooseOperation");o(A4,"getOperationFunction");(0,g4._assignPackageExport)("operation",LL);o(LL,"operation");o(vye,"catchup");o(zs,"executeJob");o(Uye,"initializeOperationFunctionMap")});var by=v((FFe,N4)=>{"use strict";var yy=(q(),M(z)),xye=ae(),eE=Q(),{handleHDBError:DL,hdbErrors:Ry}=_e(),{isMainThread:Bye}=require("worker_threads"),{Readable:Fye}=require("stream"),I4=require("os"),kye=require("util"),Hye=Jw(),Gye=kye.promisify(Hye.authorize),w4=(fP(),M(dP)),{createGzip:qye,constants:$ye}=require("zlib"),Vye=[yy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,yy.OPERATIONS_ENUM.LOGIN,yy.OPERATIONS_ENUM.LOGOUT];function Kye(e){let t=`Found an uncaught exception with message: ${e.message}. ${I4.EOL}Stack: ${e.stack} ${I4.EOL}Terminating ${Bye?"HDB":"thread"}.`;console.error(t),eE.fatal(t),process.exit(1)}o(Kye,"handleServerUncaughtException");function Yye(e,t,r){if(eE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:Ry.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(Yye,"serverErrorHandler");function Wye(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=DL(new Error,"Invalid JSON.",Ry.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(xye.isEmpty(e.body.operation)){let n=DL(new Error,"Request body must include an 'operation' property.",Ry.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(Wye,"reqBodyValidationHandler");function zye(e,t,r){let n;!Vye.includes(e.body.operation)||e.body.operation===yy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?Gye(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{eE.warn(i),eE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(DL(i,a,Ry.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(zye,"authHandler");async function jye(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=w4.chooseOperation(e.body);let s=await w4.processLocalTransaction(e,n);if(s instanceof Fye&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(qye({level:$ye.Z_BEST_SPEED})))}return s}catch(s){throw eE.error(s),s}}o(jye,"handlePostRequest");N4.exports={authHandler:zye,handlePostRequest:jye,handleServerUncaughtException:Kye,serverErrorHandler:Yye,reqBodyValidationHandler:Wye}});var L4=v((HFe,P4)=>{"use strict";var Qye=require("fastify-plugin"),{handlePostRequest:C4,authHandler:Jye,reqBodyValidationHandler:Xye}=by();async function Zye(e){e.decorate("hdbCore",{preValidation:[Xye,Jye],request:o(t=>O4(C4(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>O4(C4(t,r,!0)),"requestWithoutAuthentication")})}o(Zye,"hdbCore");async function O4(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(O4,"convertAsyncIterators");P4.exports=Qye(Zye)});var M4=v(($Fe,D4)=>{"use strict";var qFe=require("fs"),Ay=me();Ay.initSync();var{CONFIG_PARAMS:ML}=(q(),M(z)),eRe=1024*1024*1024;function tRe(e){let t=Ay.get(ML.HTTP_TIMEOUT),r=Ay.get(ML.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:eRe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Ay.get(ML.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(tRe,"getServerOptions");D4.exports=tRe});var x4=v((KFe,U4)=>{"use strict";var vL=me();vL.initSync();var{CONFIG_PARAMS:v4}=(q(),M(z));function rRe(){let e=vL.get(v4.HTTP_CORSACCESSLIST),t=vL.get(v4.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(rRe,"getCORSOptions");U4.exports=rRe});var k4=v((WFe,F4)=>{"use strict";var B4=me();B4.initSync();var nRe=(q(),M(z));function sRe(){return B4.get(nRe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(sRe,"getHeaderTimeoutConfig");F4.exports=sRe});var xL={};Re(xL,{customFunctionsServer:()=>aRe,ready:()=>Z4,start:()=>oRe});function oRe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){pa||(pa=X4(t),ve.http((await pa).server));let a=await pa,c=(0,UL.dirname)(s),l=(0,UL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!H4.has(c)){H4.add(c);try{a.register(lRe(c,l))}catch(u){if(u.message==="Root plugin has already booted")yt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Z4}}async function aRe(){try{yt.info("In Custom Functions Fastify server"+process.cwd()),yt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yt.debug(`Custom Functions server process ${process.pid} starting up.`),await cRe();let e=Y4.get(F.HTTP_SECUREPORT)>0,t;try{t=pa=await X4(e)}catch(r){throw yt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw yt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){yt.error(`Custom Functions ${process.pid} Error: ${e}`),yt.error(e),process.exit(1)}}async function cRe(){try{yt.info("Custom Functions starting configuration."),await W4.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function lRe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,G4.existsSync)(e)&&r.register(K4.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:yt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?yt.error(s.message):s&&yt.error(s),a()})}catch(n){yt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function X4(e){yt.info("Custom Functions starting buildServer.");let t=(0,z4.default)(e),r=(0,q4.default)(t);r.server.headersTimeout=(0,Q4.default)(),r.setErrorHandler(J4.serverErrorHandler);let n=(0,j4.default)();return n&&r.register($4.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(V4.default),await r.register(iRe),await r.after(),wm(r),yt.info("Custom Functions completed buildServer."),r}function Z4(){if(pa)return pa.then?pa.then(e=>e.ready()):pa.ready()}var UL,G4,q4,$4,V4,K4,Y4,yt,iRe,W4,z4,j4,Q4,J4,pa,H4,eQ=se(()=>{UL=require("path"),G4=require("fs"),q4=b(require("fastify")),$4=b(require("@fastify/cors")),V4=b(Vw()),K4=b(require("@fastify/autoload")),Y4=b(me());q();yt=b(Q()),iRe=b(L4()),W4=b(os()),z4=b(M4()),j4=b(x4()),Q4=b(k4()),J4=b(by());Po();Fr();H4=new Set;o(oRe,"start");o(aRe,"customFunctionsServer");o(cRe,"setUp");o(lRe,"buildRouteFolder");o(X4,"buildServer");o(Z4,"ready")});var FL={};Re(FL,{handleApplication:()=>uRe,suppressHandleApplicationWarning:()=>dRe});function uRe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,yf.join)(n.absolutePath,"index.html");(0,Tf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,yf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,yf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,BL.default)(n,(0,Tf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(fRe(c),!c)return{status:404,body:"File not found"};let l=(0,yf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Tf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,BL.default)(n,(0,Tf.realpathSync)(l))}},{runFirst:!0})}function fRe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Tf,yf,BL,dRe,tQ=se(()=>{Tf=require("node:fs"),yf=require("node:path"),BL=b(require("send"));o(uRe,"handleApplication");dRe=!0;o(fRe,"validateNotFoundOption")});var kL={};Re(kL,{start:()=>mRe});function mRe({override:e}){return{handleFile:o((t,r,n)=>{Iy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,rQ.parse)(t))){if(process.env[s]!==void 0)if(Iy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)Iy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var rQ,Iy,nQ=se(()=>{rQ=require("dotenv"),Iy=b(Q());o(mRe,"start")});var HL={};Re(HL,{DataLoaderError:()=>bs,DataLoaderResult:()=>Rf,EmptyFileError:()=>Cy,FileParseError:()=>Ny,InvalidPropertyTypeError:()=>Oy,MissingRequiredPropertyError:()=>tE,RecordProcessingError:()=>rE,SystemDatabaseError:()=>Py,UnsupportedFileExtensionError:()=>wy,handleApplication:()=>hRe,loadDataFile:()=>cQ,suppressHandleApplicationWarning:()=>pRe});function hRe(e){if((0,iQ.getWorkerIndex)()!==0){Eo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||cQ(t,Sn,De).then(r=>{Eo.debug?.("Data loader processed file: %s: %s",(0,ha.basename)(t.absolutePath),r.message)})})}async function cQ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ha.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,sQ.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new wy(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof bs?f:new Ny(t,f)}if(!a)throw new Cy(t);let{database:c,table:l,records:u}=a;if(!l)throw new tE(t,"table");if(!u)throw new tE(t,"records");if(!Array.isArray(u))throw new Oy(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new Py(c,l);try{let f;if(c&&s[c]&&s[c][l])Eo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])Eo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{Eo.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let S=u[0];Object.keys(S).map(y=>{let C={name:y,type:typeof S[y]};return y==="id"&&(C.isPrimaryKey=!0),C}).forEach(y=>{R.push(y)})}f=await Ze({database:c,table:l,attributes:R})}let m=u.length,p=0,h=0,E=0,g=100;for(let R=0;R<u.length;R+=g){let S=u.slice(R,R+g),y=[];for(let C of S)y.push(async()=>{try{let I=null,k=C.id;if(k!==void 0&&(I=await f.get(k)),!I)return p++,f.put(C);let J=I.getUpdatedTime();return a.mtime>J?(h++,f.put(C)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof bs)Eo.error?.(`Record processing error: ${I.message}`);else{let k=new rE(d,I);Eo.error?.(`Record processing error: ${k.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(y.map(C=>C()))}if(p>0||h>0){let R=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(R+=` (${E} records skipped)`),Eo.info?.(R),new Rf(t,c,l,"success",p+h,R)}else if(E>0){let R=`All ${E} records in ${d} already up-to-date`;return Eo.info?.(R),new Rf(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return Eo.info?.(R),new Rf(t,c,l,"success",0,R)}}catch(f){throw f instanceof bs?f:new rE(d,f)}}var ha,sQ,iQ,Ea,oQ,aQ,Eo,pRe,bs,wy,Ny,Cy,tE,Oy,Py,rE,Rf,lQ=se(()=>{ha=require("node:path"),sQ=require("yaml");we();iQ=b(nt()),Ea=b(zr()),oQ=b(_e()),aQ=b(Q()),Eo=aQ.default.forComponent("dataLoader"),pRe=!0;o(hRe,"handleApplication");o(cQ,"loadDataFile");bs=class extends oQ.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=Ea.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},wy=class extends bs{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ha.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Ny=class extends bs{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ha.basename)(t)}: ${r.message}`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},Cy=class extends bs{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ha.basename)(t)} is empty or invalid`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},tE=class extends bs{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ha.basename)(t)} is missing required "${r}" property`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Oy=class extends bs{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ha.basename)(t)} has invalid "${r}" property, expected ${n}`,Ea.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},Py=class extends bs{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ea.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},rE=class extends bs{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ea.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Rf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var GL={};Re(GL,{hdbServer:()=>SRe,start:()=>SRe});async function SRe(e){try{_o.default.debug("In Fastify server"+process.cwd()),_o.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),_o.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=uQ.default.isMaster,await TRe();let t=e.securePort>0;bf=yRe(t),await bf.ready(),e||(e={}),e.isOperationsServer=!0;try{ve.http(bf.server,e),bf.server.closeIdleConnections||await bf.listen({port:0,host:"::"})}catch(r){throw bf.close(),_o.default.error(r),_o.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),_o.default.fatal(t),process.exit(1)}}async function TRe(){return _o.default.trace("Configuring HarperDB process."),gQ.default.setSchemaDataToGlobal(),TQ.default.setUsersWithRolesCache()}function yRe(e){_o.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=RRe(e),r=(0,dQ.default)(t);r.server.headersTimeout=ARe(),r.setErrorHandler(Cc.serverErrorHandler);let n=bRe();n&&r.register(fQ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(hQ.default),r.register(mQ.default),r.register(pQ.default,{root:EQ.default.join(_Q.PACKAGE_ROOT,"studio/web")}),wm(r);let s=_a.default.get(im.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!SQ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Cc.reqBodyValidationHandler,Cc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Cc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),_o.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function RRe(e){let t=_a.default.get(Af.OPERATIONSAPI_NETWORK_TIMEOUT),r=_a.default.get(Af.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:_Re,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:_a.default.get(Af.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function bRe(){let e=_a.default.get(Af.OPERATIONSAPI_NETWORK_CORS),t=_a.default.get(Af.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===gRe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function ARe(){return _a.default.get(Af.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ERe}var uQ,_a,_o,dQ,fQ,mQ,pQ,hQ,EQ,_Q,gQ,SQ,TQ,Cc,ERe,_Re,gRe,Af,bf,yQ=se(()=>{uQ=b(require("cluster")),_a=b(me());q();_o=b(Q()),dQ=b(require("fastify")),fQ=b(require("@fastify/cors")),mQ=b(require("@fastify/compress")),pQ=b(require("@fastify/static")),hQ=b(Vw()),EQ=b(require("path")),_Q=b(Ct()),gQ=b(Yi()),SQ=b(ae()),TQ=b(os());Fr();Cc=b(by());Po();_a.default.initSync();ERe=6e4,_Re=1024*1024*1024,gRe="TRUE",{CONFIG_PARAMS:Af}=z;o(SRe,"operationsServer");o(TRe,"setUp");o(yRe,"buildServer");o(RRe,"getServerOptions");o(bRe,"getCORSOpts");o(ARe,"getHeaderTimeoutConfig")});var WL={};Re(WL,{disableNATS:()=>wRe,publishToStream:()=>My,setNATSReplicator:()=>qL,setPublishToStream:()=>NRe,setSubscription:()=>YL,start:()=>IRe});function IRe(){nE.default.get(F.CLUSTERING_ENABLED)&&ORe()}function wRe(e=!0){wQ=e}function NRe(e,t){My=e,YL=t}function ORe(){if(wQ||process.env._DISABLE_NATS)return;let e=at(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];qL(s,r,i)}}Dl((r,n)=>{qL(r.tableName,r.databaseName,r),n&&CQ(r)}),!RQ&&(RQ=!0)}function qL(e,t,r){if(t==="system"&&PRe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends qr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){CQ(i)}static subscribe(){let i=new Jn;return YL(t,e,i),i}static subscribeOnThisThread(i){return i<(nE.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??CRe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Ly(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=NQ;return i}o(n,"getNATSTransaction")}function CQ(e){let t=nE.default.get(F.CLUSTERING_NODENAME);My(`${VL.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,KL.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var bQ,VL,KL,AQ,IQ,nE,Dy,wQ,My,YL,CRe,NQ,RQ,PRe,Ly,$L,OQ=se(()=>{we();Wa();bQ=b(hr()),VL=b(Ot()),KL=b(zi());wu();AQ=b(gN()),IQ=b(Ln()),nE=b(me());q();Dy=b(Q());o(IRe,"start");o(wRe,"disableNATS");My=bQ.publishToStream,YL=AQ.setSubscription;o(NRe,"setPublishToStream");CRe=2;o(ORe,"assignReplicationSource");PRe=["hdb_job","hdb_raw_analytics","hdb_info"];o(qL,"setNATSReplicator");o(CQ,"publishSchema");Ly=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=nE.default.get(F.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(Dy.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(My(`${VL.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,KL.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw Dy.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},$L=class extends Ly{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,IQ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};NQ=new $L});async function vQ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await zL.get(e,{returnNonexistent:!0});i=new JL(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await zL.get(e);a&&a.delete()}i=new Uy(e,t)}return n&&(n.id=e,n.user={username:t?.username},sE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function jL(){return vy++,vy>65500&&(vy=1),vy}function QL(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ls.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new mi(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var LQ,Oc,DQ,MQ,PQ,zL,sE,vy,Uy,JL,UQ=se(()=>{we();va();LQ=b(Ln()),Oc=b(Q());Ma();DQ=b(nt()),MQ=b(WO());Fr();Og();PQ=100,zL=Ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),sE=Ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,DQ.getWorkerIndex)()===0&&(async()=>{await MQ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of sE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await ve.getUser(r.user.username));try{await QL(r,t,r)}catch{(0,Oc.warn)("Failed to publish will",t)}sE.delete(e.id)}})();o(vQ,"getSession");vy=1;o(jL,"getNextMessageId");Uy=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Oc.trace)("Resuming subscription from",s,"from",a);let p=Ls.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),C;for(let J=0;J<y.length;J++)if(y[J].indexOf("+")>-1)if(y[J]==="+")C=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&C)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),C&&(n=o(J=>{let G=J.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(I&&G.length!==y.length)return!1;for(let H=0;H<y.length;H++)if(y[H]!=="+"&&y[H]!==G[H])return!1;return!0},"filter"));let k=y.indexOf("+");m.url="/"+(k>-1?y.slice(0,k):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await g.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let C=(async()=>{for await(let I of y)try{let k;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,k=this.needsAcknowledge(I)):(I.acknowledge?.(),k=jL());let J=I.id;if(Array.isArray(J)&&(J=Cu(J)),J==null&&(J=""),await this.listener(E+"/"+J,I.value,k,t)===!1)break;this.awaitingAcks?.size>PQ?await new Promise(H=>setTimeout(H,this.awaitingAcks.size-PQ)):await new Promise(setImmediate)}catch(k){(0,Oc.warn)(k)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=jL();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return QL(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await sE.get(this.sessionId);n?.doesExist()&&await QL(n,n.data,r)}}finally{await sE.delete(this.sessionId)}}).catch(n=>{(0,Oc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(QL,"publish");JL=class extends Uy{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=jL(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Oc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,LQ.getNextMonotonicTime)()),(0,Oc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),zL.put(this.sessionRecord)}}});var XL={};Re(XL,{bypassAuth:()=>LRe,start:()=>MRe});function LRe(){qQ=!0}function MRe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new GQ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),Xt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=BQ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Xt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Xt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Pd(p,l);if(!E.valid)throw Xt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,If.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&By.notify?.({username:d?.username,status:si.SUCCESS,type:La.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,If.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&By.error?.({username:h,status:si.FAILURE,type:La.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Xt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Xt.error?.(p)}else if(l.required)return Xt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&DRe(u.remoteAddress)&&(d=await(0,FQ.getSuperUser)(),Xt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=BQ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Xt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function BQ(e,t,r,n,s){xQ||(xQ=!0,_p(f=>{xy>0&&f.push({metric:"mqtt-connections",connections:xy,byThread:!0})}));let i;xy++;let a,c={protocolVersion:4},l=(0,Fy.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){xy--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),en(!1,"connection","mqtt","disconnect"),Xt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),Xt.info?.(y);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Xt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ke(f.length,"bytes-received",E,R(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await ve.getUser(f.username,f.password.toString(),r),(0,If.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&By.notify?.({username:n?.username,status:si.SUCCESS,type:La.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(X){return(0,If.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&By.error?.({username:f.username,status:si.FAILURE,type:La.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,X),en(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),en(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let X=e.deserialize||(e.deserialize=vo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?X(f.will.payload):void 0,delete f.will.payload}a=vQ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(X){return Xt.error?.(X),s.events.emit("auth-failed",f,e,X),en(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:X.code||5,returnCode:X.code||128})}s.events.emit("connected",a,e),en(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let y=o(async(X,W,ue,ce)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",X);let te=X.indexOf("/",1),ye=te>0?X.slice(0,te):X;g({cmd:"publish",topic:X,payload:await S(W),messageId:ue||Math.floor(Math.random()*1e8),qos:ce.qos},ye);let Ae=e._socket??e;return Ae.writableNeedDrain?new Promise(Ye=>Ae.once("drain",Ye)):!Ae.closed}catch(te){return Xt.error?.(te),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(y),a.sessionWasPresent&&await a.resume();break;case"subscribe":let C=[];for(let X of f.subscriptions){let W;try{let ue=await a.addSubscription(X,X.qos>=1);W=ue?ue.qos||0:c.protocolVersion<5?128:143}catch(ue){s.events.emit("error",ue,e,X,a),ue.statusCode?ue.statusCode===500?Xt.warn?.(ue):Xt.info?.(ue):Xt.error?.(ue),W=c.protocolVersion<5?128:ue.statusCode===403?135:ue.statusCode===404?143:128}C.push(W)}await a.committed,g({cmd:"suback",granted:C,messageId:f.messageId});break;case"unsubscribe":{let X=[];for(let W of f.unsubscriptions)X.push(a.removeSubscription(W)?0:17);g({cmd:"unsuback",granted:X,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",k=e.deserialize||(e.deserialize=vo(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?k(f.payload):void 0,H;try{H=await a.publish(f,G)}catch(X){s.events.emit("error",X,e,f,a),Xt.warn?.(X),f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:H===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),en(!0,"connection","mqtt","disconnect"),Xt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,a),Xt.error?.(y),g({cmd:"disconnect"})}function g(y,C){let I=(0,Fy.generate)(y,c);t(I),Ke(I.length,"bytes-sent",C,R(y),"mqtt")}o(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}o(R,"packetMethodName");function S(y){return Mo(y,r)}o(S,"serialize")}),l.on("error",f=>{Xt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var Fy,FQ,If,kQ,HQ,GQ,By,Xt,qQ,DRe,xQ,xy,$Q=se(()=>{Fy=require("mqtt-packet");UQ();FQ=b(os());Po();ds();Fr();If=b(me());q();kQ=b(Xn()),HQ=b(Q()),GQ=require("events");DS();By=(0,kQ.loggerWithTag)("auth-event"),Xt=(0,HQ.forComponent)("mqtt"),qQ=(0,If.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(LRe,"bypassAuth");DRe=o(e=>qQ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(MRe,"start");xy=0;o(BQ,"onSocket")});function ky(e,t){if(t?.includes(".."))throw new ZL(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var ZL,eD=se(()=>{ZL=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(ky,"resolveBaseURLPath")});function VQ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var KQ=se(()=>{o(VQ,"deriveCommonPatternBase")});function Hy(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var tD=se(()=>{o(Hy,"deriveGlobOptions")});var YQ,rD,iE,WQ=se(()=>{eD();KQ();tD();YQ=require("micromatch"),rD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},iE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=ky(this.name,this.config.urlPath),this.globOptions=Hy(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new rD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,YQ.scan)(s).base),this.commonPatternBase=VQ(this.patternBases)}}});function zQ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function au(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(zQ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(zQ(n,t)){t=t.slice(n.length+1);break}}}return(0,jQ.join)(e.baseURLPath,t)}var jQ,nD=se(()=>{jQ=require("node:path");o(zQ,"pathStartsWithBase");o(au,"deriveURLPath")});function QQ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var qy,JQ,XQ,sD,ZQ,e2,Gy,t2=se(()=>{qy=require("node:events");WQ();JQ=b(Q()),XQ=b(require("chokidar")),sD=require("node:path"),ZQ=require("node:fs/promises");nD();e2=require("micromatch"),Gy=class extends qy.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new iE(t,r,QQ(n)),this.#r=s||JQ.default.loggerWithTag(t),this.ready=(0,qy.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,e2.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,sD.join)(this.directory,r);switch(t){case"add":case"change":{let i=au(this.#e,r,"file");(0,ZQ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=au(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=au(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,sD.join)(this.#e.directory,r));return this.#t=XQ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new iE(this.name,this.directory,QQ(t)),this.#a()}};o(QQ,"castConfig")});var $y,iD=se(()=>{$y={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Ky,r2,n2,s2,i2,o2,oD,aD,cD,lD,uD,Vy,a2=se(()=>{Ky=require("events"),r2=b(require("yaml")),n2=b(require("chokidar")),s2=require("node:fs/promises"),i2=require("util"),o2=b(Q());iD();oD=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},aD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},cD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},lD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},uD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},Vy=class extends Ky.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||o2.default.loggerWithTag(t),this.ready=(0,Ky.once)(this,"ready"),this.#t=n2.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,s2.readFile)(this.#e,"utf-8").then(t=>{this.#n=r2.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new oD(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=$y,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,i2.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new aD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new cD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new lD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new uD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var zy,c2,Yy,Wy,l2=se(()=>{zy=require("node:events");t2();a2();c2=b(Q());bP();Yy=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},Wy=class extends zy.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,c2.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,zy.once)(this,"ready"),this.options=new Vy(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new Gy(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new Yy);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new Yy);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),pz()}}});function cu(e){return typeof e=="string"&&e.trim()!==""}function dD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>cu(t))}function m2(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function vRe(e){e.config.root&&oE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new gD(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(m2(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,aE.join)(e.directory,i);jy.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function p2(e){let t=!1;if(t=await vRe(e),t)return t;let r=await(0,u2.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,aE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=au(e,n.path,"directory");jy.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=au(e,n.path,"file"),a=await(0,d2.readFile)(s);jy.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else oE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var jy,u2,oE,aE,d2,f2,Qy,Pi,fD,mD,pD,hD,ED,_D,gD,SD,TD,h2=se(()=>{jy=require("node:worker_threads"),u2=b(require("fast-glob")),oE=b(Q());eD();tD();aE=require("node:path"),d2=require("node:fs/promises");nD();f2=require("micromatch"),Qy=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!cu(this.config.files)&&!dD(this.config.files)&&!m2(this.config.files))throw new fD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!dD(this.config.files.source)&&!cu(this.config.files.source))throw new mD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new pD(this);if(this.config.files.ignore!==void 0&&!dD(this.config.files.ignore)&&!cu(this.config.files.ignore))throw new hD(this)}if(this.config.root!==void 0&&!cu(this.config.root))throw new _D(this);if(this.config.path!==void 0&&!cu(this.config.path))throw new SD(this);if(this.config.path&&(oE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!cu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new TD(this);this.globOptions=Hy(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new ED(this,r);return r.startsWith("/")&&(oE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,f2.scan)(r).base),this.baseURLPath=ky(this.name,this.config.urlPath)}},Pi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,aE.basename)(r.directory)}) ${t}`)}},fD=class extends Pi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},mD=class extends Pi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},pD=class extends Pi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},hD=class extends Pi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},ED=class extends Pi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},_D=class extends Pi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},gD=class extends Pi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},SD=class extends Pi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},TD=class extends Pi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(cu,"isNonEmptyString");o(dD,"isArrayOfNonEmptyStrings");o(m2,"isObject");o(vRe,"handleRoots");o(p2,"processResourceExtensionComponent")});var E2={};Re(E2,{SERVERS:()=>wf,portServer:()=>yD,setPortServerMap:()=>Jy});function Jy(e,t){let r=yD.get(e)??[];yD.set(e,[...r,t])}var wf,yD,RD=se(()=>{wf={},yD=new Map;o(Jy,"setPortServerMap")});function Xy(e,t,r=xRe){let n;return function(...i){return n?n.length*bD>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();bD=(bD*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var S2,URe,xRe,_2,BRe,AD,g2,bD,ID=se(()=>{S2=b(Xn()),URe=3e3,xRe=2e4,_2=0,BRe=3e4,AD=3e3,g2=performance.now()+AD,bD=0;o(Xy,"throttle");setInterval(()=>{let e=performance.now();e-g2-AD>URe&&_2+BRe<e&&(S2.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),_2=e),g2=e},AD).unref()});var sR={};Re(sR,{deliverSocket:()=>L2,getHttpOptions:()=>GRe,getRequestId:()=>U2,handleApplication:()=>HRe,httpServer:()=>MD,logRequest:()=>uE,proxyRequest:()=>qRe,registerServer:()=>LD,suppressHandleApplicationWarning:()=>kRe});function HRe(e){dE=e.options.getAll(),e.options.on("change",t=>{dE=e.options.getAll()})}function GRe(){return dE}function L2(e,t,r){let n=e?.read?e:new A2.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=wf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=wf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ga.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function qRe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=T2.get(s),r){case"connection":i=L2(void 0,t),T2.set(s,i),i.write=(c,l,u)=>(eR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(eR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),eR.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function LD(e,t,r=!0){t||(t=Lr.default.get(F.HTTP_PORT));let n=wf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",b2),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else wf[t]=e;e.on("unhandled",b2)}function DD(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Lr.default.get(F.HTTP_PORT)!=null&&t.push({port:Lr.default.get(F.HTTP_PORT),secure:Lr.default.get(F.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(F.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(F.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,I2.resolvePath)(Lr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function MD(e,t){let r=[];for(let{port:n,secure:s}of DD(t))r.push(D2(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?OD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,LD(e,n,!1)),tR[n]=rR(OD,n);return r}function D2(e,t,r,n){if(Jy(e,{protocol_name:t?"HTTPS":"HTTP",name:iR()}),!Zy[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),a=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(F.HTTP_MAXHEADERSIZE)},u=Lr.default.get(s+"_mtls"),d=Lr.default.get(s+"_mtls_required"),f;if(t){let E=Lr.default.get("tls");f=Lr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,w2.getTicketKeys)(),SNICallback:(0,N2.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let R=performance.now(),S=0;try{let C=new ja(E,g);r&&(C.isOperationsServer=!0),dE.logging?.id&&(C.requestId=S=U2());let I=await tR[e](C);if(!I){if(C._nodeResponse.statusCode){uE(E,C._nodeResponse.statusCode,S,performance.now()-R);return}I=M2(C)}if(I.headers?.set||(I.headers=new xs(I.headers)),await xP()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])g.setHeader(te[0],te[1]);return E.baseRequest=C,g.baseResponse=I,Zy[e].emit("unhandled",E,g)}let k=I.status||200;g.statusCode=k;let J=performance.now(),G=J-R,H=I.body,X,W=!1;if(!I.handlesHeaders){let te=I.headers||new xs;H?H.length>=0?(typeof H=="string"?te.set("Content-Length",Buffer.byteLength(H)):te.set("Content-Length",H.length),X=!0):H instanceof Ds&&(H.size?te.set("Content-Length",H.size):H.on&&(W=!0,H.on("size",Ae=>{g.headersSent||g.setHeader("Content-Length",Ae)})),H=H.stream()):(te.set("Content-Length","0"),X=!0);let ye=`hdb;dur=${G.toFixed(2)}`;if(I.wasCacheMiss&&(ye+=", miss"),gp(te,"Server-Timing",ye,!0),!g.headersSent)if(W){if(te)if(te[Symbol.iterator])for(let[Ae,Ye]of te)g.setHeader(Ae,Ye);else for(let Ae in te)g.setHeader(Ae,te[Ae])}else g.writeHead(k,te&&(te[Symbol.iterator]?Array.from(te):te));X&&g.end(H)}let ue=C.handlerPath,ce=C.method;if(Ke(G,"duration",ue,ce,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),en(k<400,"success",ue,ce),en(1,"response_"+k,ue,ce),uE(E,k,S,G),!X)if(H instanceof ReadableStream&&(H=CD.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=CD.Readable.from(H)),H?.pipe){H.pipe(g),H.destroy&&g.on("close",()=>{H.destroy()});let te=0;H.on("data",ye=>{te+=ye.length}),H.on("end",()=>{Ke(performance.now()-J,"transfer",ue,ce),Ke(te,"bytes-sent",ue,ce)})}else H?.then?H.then(te=>{g.end(te)},y):g.end(H)}catch(C){y(C)}function y(C){let I=C.headers,k=C.statusCode||500;g.writeHead(k,I&&(I[Symbol.iterator]?Array.from(I):I)),g.end(FRe(C)),uE(E,k,S,performance.now()-R),C.statusCode?C.statusCode===500?ga.default.warn(C):ga.default.info(C):ga.default.error(C)}o(y,"onError")},"requestHandler"),p=Xy(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Ke(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=Zy[e]=(t?f?C2.createSecureServer:O2.createServer:nR.createServer)(l,(E,g)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ke(performance.now()-E._parent.startTime,"tls-handshake",e),Ke(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),LD(h,e)}return Zy[e]}function rR(e,t){let r=M2;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function M2(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new xs}}function $Re(e,t){MD(e,{requestOnly:!0,...t})}function v2(e,t){for(let{port:r}of DD(t))y2[t?.runFirst?"unshift":"push"]({listener:e,port:r}),PD[r]=rR(y2,r)}function VRe(e,t){let r=[];for(let{port:n,secure:s}of DD(t)){Jy(n,{protocol_name:s?"WSS":"WS",name:iR()});let i=D2(n,s,t?.isOperationsServer,t?.mtls);cE[n]||(cE[n]=new P2.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),cE[n].on("connection",(a,c)=>{try{let l=new ja(c);l.isWebSocket=!0;let u=tR[n](l);ga.default.debug("Received WS connection, calling listeners",wD),R2[n](a,l,u)}catch(l){ga.default.warn("Error in handling WS connection",l)}}),v2((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):cE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),cE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{PD[n]&&PD[n](a,c,l)})),r.push(i),wD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),R2[n]=rR(wD,n),tR[n]=rR(OD,n)}return r}function b2(e,t){t.writeHead(404),t.end(`Not found
131
- `),uE(e,404,0,e.requestId)}function uE(e,t,r,n){let s=dE.logging;if(s){ND||(ND=ga.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";ND[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+KRe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function KRe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function U2(){return lE||(lE=new BigInt64Array([1n]),lE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",lE.buffer))),Number(Atomics.add(lE,0,1n))}var A2,ga,eR,Lr,I2,w2,N2,C2,O2,nR,CD,P2,FRe,cE,Zy,tR,OD,dE,kRe,T2,y2,PD,wD,R2,ND,lE,vD=se(()=>{A2=require("node:net"),ga=b(Q()),eR=require("node:worker_threads"),Lr=b(me());q();I2=b(St()),w2=b(nt()),N2=b(ps()),C2=require("node:http2"),O2=require("node:https"),nR=require("node:http");Tp();Sp();Zn();ds();CD=require("node:stream");Fr();RD();Ch();ID();P2=require("ws");Bh();({errorToString:FRe}=ga.default);ve.http=MD;ve.request=$Re;ve.ws=VRe;ve.upgrade=v2;cE={},Zy={},tR={},OD=[],dE={},kRe=!0;o(HRe,"handleApplication");o(GRe,"getHttpOptions");o(L2,"deliverSocket");T2=new Map;o(qRe,"proxyRequest");o(LD,"registerServer");o(DD,"getPorts");o(MD,"httpServer");o(D2,"getHTTPServer");o(rR,"makeCallbackChain");o(M2,"unhandled");o($Re,"onRequest");Object.defineProperty(nR.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});y2=[],PD={};o(v2,"onUpgrade");wD=[],R2={};o(VRe,"onWebSocket");o(b2,"defaultNotFound");o(uE,"logRequest");o(KRe,"headersToString");o(U2,"getRequestId")});var zT={};Re(zT,{getComponentName:()=>iR,loadComponent:()=>lR,loadComponentDirectories:()=>k2,setErrorReporter:()=>WRe});function k2(e,t){t&&(xD=t),e&&(HD=e);let r=[];if((0,$t.existsSync)(UD)){let s=(0,$t.readdirSync)(UD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Vr.join)(UD,a);r.push(lR(c,xD,pb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(lR(n,xD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{F2=!0})}function WRe(e){aR=e}function zRe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{da.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(da.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Vr.join)(e,"node_modules");(0,$t.existsSync)(s)||(0,$t.mkdirSync)(s);let i=(0,Vr.join)(s,"harperdb");if((0,$t.existsSync)(i)){if((0,$t.realpathSync)(i)===(0,$t.realpathSync)(kD.PACKAGE_ROOT))return t();(0,$t.rmSync)(i,{recursive:!0,force:!0})}(0,$t.symlinkSync)(kD.PACKAGE_ROOT,i,"dir"),t()}finally{da.primaryStore.unlock(e,0)}})}function H2(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return da.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(H2(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{da.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function lR(e,t,r,n,s,i){let a=(0,$t.realpathSync)(e);if(oR.has(a))return oR.get(a);oR.set(a,!0),s&&(HD=s);try{let c,l=(0,Vr.join)(e,"harperdb-config.yaml");if((0,$t.existsSync)(l)?c=n?(0,uR.getConfigObj)():(0,FD.parseDocument)((0,$t.readFileSync)(l,"utf8")).toJSON():!n&&(0,$t.existsSync)(l=(0,Vr.join)(e,"config.yaml"))?c=(0,FD.parseDocument)((0,$t.readFileSync)(l,"utf8")).toJSON():c=$y,!n)try{await zRe(e)}catch(m){Sa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Sa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=cR,d={};for(let m in c){let p=n?m:`${(0,Vr.basename)(e)}.${m}`;cR=m;let h=c[m];if(!h)continue;Xi.loading(p);let E,g=h.package;try{if(g){let I=null;if(n)I=(0,Vr.join)(e,"components",m);else{let k=e;for(I=(0,Vr.join)(k,"node_modules",m);!(0,$t.existsSync)(I);){if(k=(0,Vr.dirname)(k),k.length<(0,B2.getHdbBasePath)().length){I=null;break}I=(0,Vr.join)(k,"node_modules",m)}}if(I)E=await lR(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=YRe[m];if(!E){Xi.loaded(p,`Application component '${p}' processed`);continue}let R=o(I=>(I.origin=r,Ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,C=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Xi.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Sa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new Wy(m,e,l,t,ve);await H2(I,E),Xi.loaded(p,`Component '${p}' loaded successfully`);continue}if(BD.isMainThread&&(E=await E.startOnMainThread?.({server:ve,ensureTable:R,port:C,securePort:y,resources:t,...h})||E,n&&S))for(let I of[C,y])try{if(+I&&!x2.includes(I)){let k=GD.get(F.HTTP_SESSIONAFFINITY);k&&Sa.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!Cg)&&(x2.push(I),VO(I,k))}}catch(k){console.error("Error listening on socket",I,k,m)}if(t.isWorker&&(E=await E.start?.({server:ve,ensureTable:R,port:C,securePort:y,resources:t,...h})||E),HD.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new Qy({config:h,name:m,directory:e,module:E,resources:t});d[m]=await p2(I)}Xi.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Vr.basename)(e)}' due to: ${R.message}`,aR?.(R),((0,fE.getWorkerIndex)()===0?console:Sa.default).error(R),t.set(h.path||"/",new Vc(R),null,!0),Xi.failed(p,R,`Could not load component '${p}'`)}}if(cR=u,BD.isMainThread&&!F2&&i&&(0,fE.watchDir)(e,async()=>k2()),c.extensionModule||c.pluginModule){let m=await gg((0,Vr.join)(e,c.extensionModule||c.pluginModule));return oR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;aR?.(new Error(m)),((0,fE.getWorkerIndex)()===0?console:Sa.default).error(m),Xi.failed((0,Vr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Sa.default.warn(`Component ${m} from (${(0,Vr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,aR?.(c),t.set("",new Vc(c))}}var $t,Vr,BD,FD,GD,kD,Sa,fE,B2,uR,UD,HD,F2,xD,YRe,x2,oR,aR,cR,iR,Ch=se(()=>{$t=require("node:fs"),Vr=require("node:path"),BD=require("node:worker_threads"),FD=require("yaml"),GD=b(me()),kD=b(Ct());q();Xv();xU();cH();pH();hH();fG();eQ();tQ();nQ();Sa=b(Q());lQ();fE=b(nt());yw();Fr();we();YO();B2=b(me());yQ();qT();OQ();fs();$Q();uR=b(St());Tp();Db();l2();h2();vD();Mh();Wm();iD();UD=(0,uR.resolvePath)(GD.get(F.COMPONENTSROOT)),HD=new Map;o(k2,"loadComponentDirectories");YRe={REST:Lg,rest:Lg,graphql:eA,graphqlSchema:xb,roles:Tw,jsResource:Rw,fastifyRoutes:xL,login:Aw,static:FL,operationsApi:GL,customFunctions:{},http:sR,clustering:WL,replication:Yo,authentication:bh,mqtt:XL,loadEnv:kL,logging:Sa.default,dataLoader:HL},x2=[],oR=new Map;o(WRe,"setErrorReporter");iR=o(()=>cR,"getComponentName");o(zRe,"symlinkHarperModule");o(H2,"sequentiallyHandleApplication");o(lR,"loadComponent")});var UT=v((HHe,G2)=>{var{isMainThread:qD}=require("worker_threads"),{getTables:jRe}=(we(),M(mt)),{loadComponentDirectories:QRe,loadComponent:JRe}=(Ch(),M(zT)),{resetResources:XRe}=(va(),M(Mb)),ZRe=St(),{dirname:ebe}=require("path"),{getConnection:tbe}=hr(),rbe=me(),{CONFIG_PARAMS:nbe}=(q(),M(z)),{loadCertificates:sbe}=ps(),{installApplications:ibe}=(YT(),M(KT)),{loadAndWatchLicensesDir:obe}=(Bh(),M(oy)),$D=new Map;async function abe(e=!1){!qD&&rbe.get(nbe.CLUSTERING_ENABLED)&&tbe();try{qD&&await ibe()}catch(n){console.error(n)}let t=XRe();jRe(),t.isWorker=e,qD&&obe(),await sbe(),await JRe(ebe(ZRe.getConfigFilePath()),t,"hdb",!0,$D),await QRe($D,t);let r=[];for(let[n]of $D)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(abe,"loadRootComponents");G2.exports.loadRootComponents=abe});var nt=v((qHe,Di)=>{"use strict";fb();var{Worker:cbe,MessageChannel:lbe,parentPort:go,isMainThread:zD,threadId:ube,workerData:So}=require("worker_threads"),{PACKAGE_ROOT:dbe}=Ct(),{join:K2,isAbsolute:fbe,extname:mbe}=require("path"),{server:Y2}=(Fr(),M(_m)),{watch:pbe,readdir:hbe}=require("fs/promises"),{totalmem:q2}=require("os"),Nf=(q(),M(z)),W2=me(),Li=Q(),{randomBytes:Ebe}=require("crypto"),{_assignPackageExport:_be}=ii(),$2=1024*1024,Ta=[],Qs=[],gbe=50,jD=1e4,Sbe="restart",z2="request_thread_info",j2="resource_report",Q2="thread_info",J2="added-port",Tbe="ack",VD;_be("threads",Qs);Di.exports={startWorker:KD,restartWorkers:JD,shutdownWorkers:nJ,shutdownWorkersNow:Ibe,workers:Ta,setMonitorListener:Mbe,onMessageFromWorkers:wbe,onMessageByType:iJ,broadcast:Cbe,broadcastWithAcknowledgement:Pbe,setChildListenerByType:Abe,getWorkerIndex:X2,getWorkerCount:Z2,getTicketKeys:tJ,setMainIsWorker:Rbe,setTerminateTimeout:ybe,restartNumber:So?.restartNumber||1};Qs.onMessageByType=iJ;Qs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Qs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Di.exports.whenThreadsStarted=new Promise(e=>{Di.exports.threadsHaveStarted=e});var QD;function ybe(e){jD=e}o(ybe,"setTerminateTimeout");function X2(){return So?So.workerIndex:QD?0:void 0}o(X2,"getWorkerIndex");function Z2(){return So?So.workerCount:QD?1:void 0}o(Z2,"getWorkerCount");function Rbe(e){QD=e,Di.exports.threadsHaveStarted()}o(Rbe,"setMainIsWorker");var eJ=1,dR;function tJ(){return dR||(dR=zD?Ebe(48):So.ticketKeys,dR)}o(tJ,"getTicketKeys");Object.defineProperty(Y2,"workerIndex",{get(){return X2()}});Object.defineProperty(Y2,"workerCount",{get(){return Z2()}});var rJ={[z2](e,t){Lbe(t)},[j2](e,t){Dbe(t,e)}};function KD(e,t={}){let r=process.constrainedMemory?.()||q2();r=Math.min(r,q2(),2e4*$2);let n=W2.get(Nf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/$2/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Qs){let u=new lbe;u.existingPort=l,i.push(u),a.push(u.port2)}mbe(e)||(e+=".js");let c=new cbe(fbe(e)?e:K2(dbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:eJ=t.threadCount,name:t.name,restartNumber:Di.exports.restartNumber,ticketKeys:tJ()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:J2,port:l,threadId:c.threadId},[l]);return mR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>KD(e,t),c.on("error",l=>{Li.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Ta.splice(Ta.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<gbe?(t.unexpectedRestarts=c.unexpectedRestarts+1,KD(e,t)):Li.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{rJ[l.type]?.(l,c)}),Ta.push(c),Ube(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(KD,"startWorker");var bbe=[Nf.THREAD_TYPES.HTTP];async function JD(e=null,t=Math.max(eJ>3,1),r=!0){if(zD){try{process.chdir(process.cwd())}catch(a){Li.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=UT();await a()}Di.exports.restartNumber++,t<1&&(t=t*Ta.length);let n=[],s=[];for(let a of Ta.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Li.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Di.exports.restartNumber,type:Nf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=bbe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Li.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},jD*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===Nf.ITC_EVENT_TYPES.CHILD_STARTED&&(Li.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Li.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=uf();r&&(e==="http"||!e)&&W2.get(Nf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else go.postMessage({type:Sbe,workerType:e})}o(JD,"restartWorkers");function Abe(e,t){rJ[e]=t}o(Abe,"setChildListenerByType");function nJ(e){return JD(e,1/0,!1)}o(nJ,"shutdownWorkers");function Ibe(e){return nJ(e),Promise.all(Ta.map(t=>t.terminate()))}o(Ibe,"shutdownWorkersNow");var sJ=[];function wbe(e){sJ.push(e)}o(wbe,"onMessageFromWorkers");var YD=new Map;function iJ(e,t){let r=YD.get(e);r||YD.set(e,r=[]),r.push(t)}o(iJ,"onMessageByType");var Nbe=10;async function Cbe(e,t){let r=0;for(let n of Qs)try{n.postMessage(e),r++>Nbe&&(r=0,await new Promise(setImmediate))}catch(s){Li.error("Unable to send message to worker",s)}t&&aJ(e,null)}o(Cbe,"broadcast");var fR=new Map,Obe=1;function Pbe(e){return new Promise(t=>{let r=0;for(let n of Qs)try{let s=Obe++,i=o(()=>{fR.delete(s),--r===0&&t(),n!==go&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,fR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of fR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Li.error("Unable to send message to worker",s)}r===0&&t()})}o(Pbe,"broadcastWithAcknowledgement");function Lbe(e){e.postMessage({type:Q2,workers:oJ()})}o(Lbe,"sendThreadInfo");function oJ(){let e=Date.now();return Ta.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(oJ,"getChildWorkerInfo");function Dbe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Dbe,"recordResourceReport");var WD;function Mbe(e){WD=e}o(Mbe,"setMonitorListener");var vbe=1e3,V2=!1;function Ube(){V2||(V2=!0,setInterval(()=>{for(let e of Ta){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}WD&&WD()},vbe).unref())}o(Ube,"startMonitoring");var xbe=1e3;if(go&&So?.addPorts){mR(go);for(let e=0,t=So.addPorts.length;e<t;e++){let r=So.addPorts[e];r.threadId=So.addThreadIds[e],mR(r)}setInterval(()=>{let e=process.memoryUsage();go.postMessage({type:j2,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},xbe).unref(),VD=o(()=>new Promise((e,t)=>{go.on("message",r),go.postMessage({type:z2});function r(n){n.type===Q2&&(go.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else VD=oJ;Di.exports.getThreadInfo=VD;function mR(e,t){Qs.push(e),e.on("message",r=>{if(r.type===J2)r.port.threadId=r.threadId,mR(r.port);else if(r.type===Tbe){let n=fR.get(r.id);n&&n()}else aJ(r,e)}).on("close",()=>{Qs.splice(Qs.indexOf(e),1)}).on("exit",()=>{Qs.splice(Qs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(mR,"addPort");function aJ(e,t){for(let n of sJ)n(e,t);let r=YD.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Li.error(s)}}o(aJ,"notifyMessageListeners");if(zD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await hbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(K2(s,a.name));try{for await(let{filename:a}of pbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await JD(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Di.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else go.on("message",async e=>{let{type:t}=e;t===Nf.ITC_EVENT_TYPES.SHUTDOWN&&(Di.exports.restartNumber=e.restartNumber,go.unref(),setTimeout(()=>{Li.warn("Thread did not voluntarily terminate",ube),process.exit(0)},jD).unref())})});var fJ={};Re(fJ,{onStorageReclamation:()=>mE,runReclamationHandlers:()=>tM,setAvailableSpaceRatioGetter:()=>Fbe});function mE(e,t,r){(r||(0,hR.getWorkerIndex)()===(0,hR.getWorkerCount)()-1)&&(pR.has(e)||pR.set(e,[]),pR.get(e).push({priority:0,handler:t}),eM||(eM=setTimeout(tM,lJ).unref()))}async function tM(){for(let[e,t]of pR)try{let r=await dJ(e),n=Bbe/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(ZD.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ZD.default.error?.("Error running storage reclamation handlers",r)}eM=setTimeout(tM,lJ).unref()}function Fbe(e){dJ=e??uJ}var XD,hR,ZD,ER,cJ,pR,Bbe,lJ,eM,uJ,dJ,_R=se(()=>{XD=require("node:fs/promises"),hR=b(nt()),ZD=b(Xn());q();ER=b(me()),cJ=b(ae());ER.default.initSync();pR=new Map,Bbe=ER.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,lJ=(0,cJ.convertToMS)(ER.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;o(mE,"onStorageReclamation");uJ=o(async e=>{if(XD.statfs){let t=await(0,XD.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),dJ=uJ;o(tM,"runReclamationHandlers");o(Fbe,"setAvailableSpaceRatioGetter")});var Ik={};Re(Ik,{ACTION_32_BIT:()=>RR,ACTION_64_BIT:()=>qbe,AUDIT_STORE_OPTIONS:()=>uh,Decoder:()=>Ll,HAS_BLOBS:()=>Jr,HAS_CURRENT_RESIDENCY_ID:()=>Ol,HAS_EXPIRATION_EXTENDED_TYPE:()=>gE,HAS_ORIGINATING_OPERATION:()=>_E,HAS_PREVIOUS_RESIDENCY_ID:()=>Pl,REMOTE_SEQUENCE_UPDATE:()=>IS,createAuditEntry:()=>Nl,getLastRemoved:()=>Hbe,openAuditStore:()=>TR,readAuditEntry:()=>At,removeAuditEntry:()=>yR,setAuditRetention:()=>Gbe,transactionKeyEncoder:()=>yJ});function TR(e){let t=e.auditStore=e.openDB(rM.AUDIT_STORE_NAME,{create:!1,...uh});t||(t=e.auditStore=e.openDB(rM.AUDIT_STORE_NAME,uh),pJ(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=sM;mE(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-nM/(1+i*i)})){try{m=yR(t,h,E)}catch(g){Cf.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=kbe){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,nM/10):(pJ(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,hE.getWorkerIndex)()===(0,hE.getWorkerCount)()-1&&c(),(0,hE.getWorkerIndex)()===0&&!mJ)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(mJ=!0,Cf.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function yR(e,t,r){let n=$be(r),s;if(n&Jr){s=At(r);let i=e.tableStores[s.tableId];if(i){let a=i.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Oo(()=>Ua(s.getValue(i)),i.rootStore)}}if((n&15)===iM){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function pJ(e,t){oM[0]=t,e.put(Symbol.for("last-removed"),RJ)}function Hbe(e){let t=e.get(Symbol.for("last-removed"));if(t)return RJ.set(t),oM[0]}function Gbe(e,t=sM){nM=e,sM=t}function Nl(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=bJ[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Pc.setFloat64(0,n):Js.set(aM),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Pc.setFloat64(h,e),h+=8,l&Ol&&R(u),l&Pl&&R(d),l&gE&&(Pc.setFloat64(h,f),h+=8),l&_E&&R(AJ[m]),i?g(i):Js[h++]=0,l?Pc.setUint32(n?8:0,p|l|3221225472):Js[n?8:0]=p;let E=Js.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let y=h;h+=1,h=(0,lu.writeKey)(S,Js,h);let C=h-y-1;C>127?C>16383?(Cf.error("Key or username was too large for audit entry",S),h=y+1,Js[y]=0):(Js.copyWithin(y+2,y+1,h),Pc.setUint16(y,C|32768),h++):Js[y]=C}function R(S){S<128?Js[h++]=S:S<16384?(Pc.setUint16(h,S|32768),h+=2):S<1056964608?(Pc.setUint32(h,S|3221225472),h+=4):(Js[h]=255,Pc.setUint32(h+1,S),h+=5)}}function $be(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Ll(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Ll(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Ol&&(m=n.readInt()),i&Pl&&(p=n.readInt()),i&gE&&(h=n.readFloat64()),i&_E){let y=n.readInt();E=AJ[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:bJ[i&7],tableId:c,nodeId:a,get recordId(){return(0,lu.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,lu.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,C,I){if(i&gR||i&pE&&!C)return S||(S=Oo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&pE&&I)return iw(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(gR|pE)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Cf.error("Reading audit entry error",n,e),{}}}var lu,SR,rM,hE,TJ,Cf,Js,Pc,yJ,uh,nM,kbe,oM,RJ,sM,mJ,gR,pE,hJ,iM,EJ,_J,gJ,SJ,RR,qbe,IS,Ol,Pl,_E,gE,Jr,bJ,AJ,Ll,ki=se(()=>{lu=require("ordered-binary"),SR=b(me()),rM=b(Yt());q();hE=b(nt()),TJ=b(ae());Qc();Cf=b(Q());ag();Zn();_R();(0,SR.initSync)();Js=Buffer.alloc(2816),Pc=new DataView(Js.buffer,Js.byteOffset,2816),yJ={writeKey(e,t,r){return e===EE?(t.set(EE,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,lu.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,lu.readKey)(e,t,r)}},uh={encoding:"binary",keyEncoder:yJ},nM=(0,TJ.convertToMS)((0,SR.get)(F.LOGGING_AUDITRETENTION))||86400*3,kbe=1e3,oM=new Float64Array(1),RJ=new Uint8Array(oM.buffer),sM=1e4,mJ=!1;o(TR,"openAuditStore");o(yR,"removeAuditEntry");o(pJ,"updateLastRemoved");o(Hbe,"getLastRemoved");o(Gbe,"setAuditRetention");gR=16,pE=32,hJ=1,iM=2,EJ=3,_J=4,gJ=5,SJ=6,RR=14,qbe=15,IS=11,Ol=512,Pl=1024,_E=2048,gE=4096,Jr=8192,bJ={put:hJ|gR,[hJ]:"put",delete:iM,[iM]:"delete",message:EJ|gR,[EJ]:"message",invalidate:_J|pE,[_J]:"invalidate",patch:gJ|pE,[gJ]:"patch",relocate:SJ,[SJ]:"relocate"},AJ={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Nl,"createAuditEntry");o($be,"readAction");o(At,"readAuditEntry");Ll=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var zU={};Re(zU,{ENTRY:()=>Kbe,HAS_EXPIRATION:()=>IR,HAS_RESIDENCY_ID:()=>mM,HAS_STRUCTURE_UPDATE:()=>OS,LAST_TIMESTAMP_PLACEHOLDER:()=>EE,LOCAL_TIMESTAMP:()=>Vbe,METADATA:()=>Od,NEW_TIMESTAMP_PLACEHOLDER:()=>wJ,NO_TIMESTAMP:()=>cM,PENDING_LOCAL_TIME:()=>pM,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>aM,RecordEncoder:()=>fM,TIMESTAMP_ASSIGN_LAST:()=>Wbe,TIMESTAMP_ASSIGN_NEW:()=>NJ,TIMESTAMP_ASSIGN_PREVIOUS:()=>CJ,TIMESTAMP_PLACEHOLDER:()=>bR,TIMESTAMP_RECORD_PREVIOUS:()=>lM,entryMap:()=>Lc,handleLocalTimeForGets:()=>wR,lastMetadata:()=>lt,recordUpdater:()=>hM,removeEntry:()=>du});function Qbe(){return TE[0]=TE[0]^64,Ybe.getFloat64(0)}function wR(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,lt=null;let l=r.call(this,a,c);return l&&(lt&&(l.metadataFlags=lt[Od],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Lc.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){lt=null;let l=n.call(this,a,c);return lt&&l&&(Lc.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[Od],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,uu.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<uu.length;u++){let d=uu[u].deref();(!d||d.isDone||d.isCommitted)&&uu.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function hM(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Pf=i?.localTime?lM|CJ:cM:Pf=l?i?.localTime?lM|16384:NJ|16384:cM;let p=u?.expiresAt;if(p>=0&&(c|=IR),SE=c,uM=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Pf>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(dM=S,SE|=mM,g|=Ol),R!==S&&(g|=Pl,R||(R=0)),c&IR&&(g|=gE),u?.originatingOperation&&(g|=_E),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Jr&&(r.getBinaryFast(i.localTime)||Ua(i.value));let y;if(s!==void 0&&(y=g_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Jr)),l){let C=u?.user?.username;if(m&&(g_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Jr)),e.encoder.hasStructureUpdate&&(g|=OS,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,k=r.get(I);if(k){let J=At(k).previousLocalTime;return y=r.put(I,Nl(a,t,n,J,u?.nodeId??server.replication.getThisNodeId(r)??0,C,d,Of,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?wJ:EE,Nl(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,C,d,Of,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&zbe.has(d)&&Ke(Of?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function du(e,t,r){if(t)return t.value&&t.metadataFlags&Jr&&!e.auditStore.getBinaryFast(t.localTime)&&Ua(t.value),e.remove(t.key,r)}var IJ,AR,bR,EE,aM,wJ,Vbe,Od,Kbe,TE,Ybe,cM,NJ,Wbe,CJ,lM,IR,mM,pM,OS,zbe,Lc,jbe,Of,Pf,SE,uM,dM,lt,fM,uu,Qc=se(()=>{IJ=require("msgpackr");ki();AR=b(Q());Zn();Zn();ds();bR=new Uint8Array([1,1,1,1,4,64,0,0]),EE=new Uint8Array([1,1,1,1,1,0,0,0]),aM=new Uint8Array([1,1,1,1,3,64,0,0]),wJ=new Uint8Array([1,1,1,1,0,64,0,0]),Vbe=Symbol("local-timestamp"),Od=Symbol("metadata"),Kbe=Symbol("entry"),TE=new Uint8Array(8),Ybe=new DataView(TE.buffer,0,8),cM=0,NJ=0,Wbe=1,CJ=3,lM=4,IR=16,mM=32,pM=1,OS=256,zbe=new Set(["put","patch","delete","message","publish"]),Lc=new WeakMap,Pf=0,SE=-1,uM=-1,dM=0,lt=null,fM=class extends IJ.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Lc.get(this)?.version}getExpiresAt(){return Lc.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Pf||SE>=0){let c=0,l=Pf;l&&(c+=8,Pf=0);let u=SE,d=uM,f=dM;u>=0&&(c+=4,SE=-1,d>=0&&(c+=8,uM=-1),f&&(c+=4,dM=0));let m=jbe=n.call(this,i,a|2048|c);Of=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(bR[4]=l,bR[5]=l>>8,m.set(bR,p),p+=8),Wc&&(u|=Jr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|RR<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Of=n.call(this,i,a),Of};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(TE,0,c),c+=8;else for(let m=0;m<8;m++)TE[m]=t[c++];l=Qbe(),i=t[c]}let u,d;i<32&&(i===RR?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&IR&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&mM&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Oo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[Od]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Oo(()=>super.decode(t,r),this.rootStore)}catch(c){return AR.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(Qbe,"getTimestamp");o(wR,"handleLocalTimeForGets");uu=[];setInterval(()=>{for(let e=0;e<uu.length;e++){let t=uu[e].deref();!t||t.isDone||t.isCommitted?uu.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(AR.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):AR.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(hM,"recordUpdater");o(du,"removeEntry")});function gM(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?gM(f.conditions,f.operator,r,n,s,i,a,c):vf(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(C,I)=>y.some(k=>k(C,I)):(C,I)=>y.every(k=>k(C,I))}let g=(h.attribute||h[0])===r.primaryKey,R=RE(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=iAe(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}o(d,"mapConditionsToFilters")}function vf(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new un.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],C=yo(n.attributes,y);if(C.relationship){if(c.length<2)throw new un.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=C.definition?.tableClass||C.elements?.definition?.tableClass,k=new Map,J=vf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,k);if(C.relationship.to){i[c[0]]=k;let G=!!yo(I.attributes,C.relationship.to)?.elements;J=tAe(J,C,I.primaryStore,G,k)}if(C.relationship.from){let G=o(H=>(H?.key!==void 0&&(H=H.key),vf({attribute:C.relationship.from,value:H},t,r,n,s,k)),"searchEntry");C.elements?(i[c[0]]=k,J=rAe(J,C,I.primaryStore,k,G)):J=J.flatMap(G)}return J}else if(c.length===1)c=c[0];else throw new un.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(SM[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=To.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new un.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Xs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Xs.MAX_SEARCH_KEY_LENGTH)+Xs.OVERFLOW_MARKER,E=!1,R=RE(e,n,null,i,d)),typeof p=="string"&&p.length>Xs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Xs.MAX_SEARCH_KEY_LENGTH)+Xs.OVERFLOW_MARKER,h=!0,R=R??RE(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new un.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new un.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new un.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new un.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??RE(e,n,null,i,d),!R)throw new un.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:C,value:I}){return this?.isSync?I&&R(I)?C:Dc.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(I&&R(I)?C:Dc.SKIP)}catch(G){J(G)}}))}:C=>C.value==null&&!(C.metadataFlags&(Wn|Mc))?Dc.SKIP:(a?._freezeRecords&&Object.freeze(C.value),C));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,a).map(y=>{if(typeof y=="object"&&y){let{key:C,...I}=y,k=n.primaryStore.getEntry(C);return a?._freezeRecords&&Object.freeze(k?.value),{...I,...k}}return y}):f.getRange(S).map(R?function({key:y,value:C}){let I;return typeof y=="string"&&y.length>Xs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(C):I={[c]:y},this.isSync?R(I)?C:Dc.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(R(I)?C:Dc.SKIP)}catch(G){J(G)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:C}){return this.isSync?C&&R(C)?y:Dc.SKIP:new Promise((I,k)=>setImmediate(()=>{try{I(C&&R(C)?y:Dc.SKIP)}catch(J){k(J)}}))})}function yo(e,t){if(Array.isArray(t))if(t.length>1){let r=yo(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?yo(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function tAe(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function rAe(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function RE(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=yo(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=RE({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,R=o((y,C)=>{let I,k;return E?E.returnDirect?(I=E(y,r,C),k=lt):(k=E(y,r,C,!0),Array.isArray(k)?(I=k.map(J=>J.value),k=null):I=k?.value):I=y[d],{subObject:I,subEntry:k}},"getSubObject"),S=o((y,C)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let H of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:H};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let G=g(y);return g.idFilter&&(S.idFilter=g.idFilter),G}let{subObject:I,subEntry:k}=R(y,C);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let H=R(G).subObject;return Array.isArray(H)?H.filter(h).map(X=>X[m.primaryKey]):H}}),I.some(h)):h(I,k):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),SM[a]||a){case Xs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,To.compareKeys)(d,l[0])>=0&&(0,To.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,To.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,To.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,To.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,To.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,To.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new un.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&CR(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function R(S){let y=S[d],C;if(typeof y!="object"||!y||p?C=f(y):Array.isArray(y)?C=y.some(f):y instanceof Date&&(C=f(y.getTime())),m&&(g++,!C&&!R.idFilter&&++E/g*i>h)){let I=vf(e,r.transaction.getReadTxn(),!1,t),k;R.to?k=I.flatMap(G=>t.primaryStore.get(G)[R.to]):k=I.map(Uf);let J=new Set(k);R.idFilter=G=>J.has(Uf(G)),R.idFilter.idSet=J}return C}return o(R,"recordFilter"),s&&(R.idFilter=f),R}o(u,"attributeComparator")}function CR(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/ya(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=SM[n]||n,n===Xs.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=yo(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=CR(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*ya(e.indices[i.relationship.from])/(ya(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=ya(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=Zbe*ya(e.primaryStore)+1;else if(n==="between")r.estimated_count=Xbe*ya(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=ya(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=Jbe*ya(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function Dg(e,t){if(e)if(Ra=e,Lf.lastIndex=0,nAe.test(e))try{if(t&&(t.conditions=[]),Mi=t??new Mf,yE(Mi,""),Kr!==Ra.length&&Zt("Unable to parse query, unexpected end of query"),Mi.parseErrorMessage&&(Mi.parseError=new EM(t.parseErrorMessage),!t))throw Mi.parseError;return Mi}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Kr} in '${Ra}'`,Mi.parseErrorMessage&&(r.message+=", "+Mi.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Zt(e){let t=`${e} at position ${Kr}`;Mi.parseErrorMessage=Mi.parseErrorMessage?Mi.parseErrorMessage+", "+t:t}function yE(e,t){let r=Lf,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Ra);){Kr=r.lastIndex;let[,d,f]=n;a?(d&&Zt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Zt(`invalid FIQL operator ${d}`),l=OJ):(l=decodeURIComponent,i="equals",d||Zt("attribute must be specified before equality comparator"),s=Df(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=eAe[f],l=_M[i]?OJ:decodeURIComponent,d||Zt(`attribute must be specified before comparator ${f}`),s=Df(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Zt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Zt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Zt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&PJ(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else NR(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Zt("conditions/comparisons are not allowed in a property list"):e.push(Df(d)),s=void 0;break;case"(":Lf.lastIndex=Kr;let p=yE(d?[]:new Mf,")");switch(d){case"":NR(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Zt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Zt("group by is not implemented yet");case"sort":e.sort=LJ(p);break;default:Zt(`unknown query function call ${d}`)}Ra[Kr]===","?r.lastIndex=++Kr:a=!0,s=null;break;case"{":e.conditions&&Zt("property sets are not allowed in a queries"),d||Zt("property sets must have a defined parent property name"),Lf.lastIndex=Kr,m=yE([],"}"),m.name=d,e.push(m),Ra[Kr]===","?r.lastIndex=++Kr:a=!0;break;case"[":if(Lf.lastIndex=Kr,d?(m=yE(new Mf,"]"),m.name=d):m=yE(e.conditions?new Mf:[],"]"),e.conditions)if(NR(e,u),Ra[Kr]==="="){l=decodeURIComponent,i="equals",s=Df(d),r.lastIndex=++Kr;break}else e.conditions.push(m),s=null;else e.push(m);Ra[Kr]===","?r.lastIndex=++Kr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&PJ(h,d),NR(e,u),e.conditions.push(h)}else d&&Zt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Df(d));return e}else Zt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Zt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?sAe:Lf,r.lastIndex=Kr),Kr===Ra.length)return e}t&&Zt(`expected '${t}', but encountered end of string`)}function NR(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Zt("Can not mix operators within a condition grouping"):e.operator=t)}function Df(e){return e.indexOf(".")>-1?e.split(".").map(Df):decodeURIComponent(e)}function OJ(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new un.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function PJ(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new un.ClientError("wildcard can only be used at the end of a string")}function LJ(e){let t=DJ(e[0]);return e.length>1&&(t.next=LJ(e.slice(1))),t}function DJ(e){if(Array.isArray(e)){let t=DJ(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Zt(`Unknown sort type ${e}`)}function Uf(e){return Array.isArray(e)?e.join("\0"):e}function ya(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function iAe(e,t,r){return t*r/ya(e)}var un,Xs,To,Dc,Jbe,Xbe,Zbe,eAe,_M,SM,EM,nAe,Lf,sAe,Kr,Mi,Ra,Mf,Mg=se(()=>{un=b(_e()),Xs=b(Yt()),To=require("ordered-binary"),Dc=require("lmdb");py();Qc();Jbe=.3,Xbe=.1,Zbe=.05,eAe={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},_M={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(gM,"executeConditions");o(vf,"searchByIndex");o(yo,"findAttribute");o(tAe,"joinTo");o(rAe,"joinFrom");SM={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(RE,"filterByType");o(CR,"estimateCondition");EM=class extends un.Violation{static{o(this,"SyntaxViolation")}},nAe=/[()[\]|!<>.]|(=\w*=)/,Lf=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,sAe=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(Dg,"parseQuery");o(Zt,"recordError");o(yE,"parseBlock");o(NR,"assignOperator");o(Df,"decodeProperty");o(OJ,"typedDecoding");o(PJ,"wildcardDecoding");o(LJ,"toSortObject");o(DJ,"toSortEntry");Mf=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Uf,"flattenKey");o(ya,"estimatedEntryCount");o(iAe,"intersectionEstimate")});var OF={};Re(OF,{MultiPartId:()=>OR,Resource:()=>qr,contextStorage:()=>Bf,snakeCase:()=>aAe,transformForSelect:()=>Ff});function aAe(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MJ(e,t){if(fu=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(fu=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new OR;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){fu=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return fu=!0,null;e[e.length-1]==="/"&&(fu=!0)}return t.coerceId(decodeURIComponent(e))}function zn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof No?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new xf.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new mi,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new mi,l.id=c,c==null&&(u=!0);l||(l=new mi,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Bf.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>Bf.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return bt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(R=>{if(!R)throw new xf.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new xf.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function As(e,t){let r=new xf.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function TM(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Ff(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):TM(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(TM(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(TM(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Ff(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var vJ,UJ,xf,xJ,Bf,oAe,qr,fu,OR,Wa=se(()=>{vJ=require("crypto");Em();wu();UJ=b(ii()),xf=b(_e());Ma();Mg();xJ=require("async_hooks");Og();Bf=new xJ.AsyncLocalStorage,oAe={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=zn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Ff(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=zn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):As(t,"put")},{hasContent:!0,type:"update"});static patch=zn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):As(t,"patch")},{hasContent:!0,type:"update"});static delete=zn(function(t,r,n,s){return t.delete?t.delete(r):As(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,vJ.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Bf.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),bt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):As(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=zn(function(t,r,n,s){return t.invalidate?t.invalidate(r):As(t,"delete")},{hasContent:!1,type:"update"});static post=zn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=zn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=zn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):As(t,"connect")},{hasContent:!0,type:"read"});static subscribe=zn(function(t,r,n,s){return t.subscribe?t.subscribe(r):As(t,"subscribe")},{type:"read"});static publish=zn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):As(t,"publish")},{hasContent:!0,type:"create"});static search=zn(function(t,r,n){let s=t.search?t.search(r):As(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Ff(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=zn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):As(t,"search")},{hasContent:!0,type:"read"});static copy=zn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):As(t,"copy")},{hasContent:!0,type:"create"});static move=zn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):As(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;As(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return Dg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&oAe[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:MJ(t,this),isCollection:fu}}let i=MJ(t,this);return fu?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Jn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Jn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,UJ._assignPackageExport)("Resource",qr);o(aAe,"snakeCase");o(MJ,"pathToId");OR=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(zn,"transactional");o(As,"missingMethod");o(TM,"selectFromObject");o(Ff,"transformForSelect")});var pj={};Re(pj,{EVICTED:()=>Mc,INVALIDATED:()=>Wn,coerceType:()=>LR,makeTable:()=>MR});function MR(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=hM(i,n,l),C,I,k={},J=Promise.resolve(),G,H,X;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(G=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(H=K),K.expiresAt&&(X=K),K.isPrimaryKey&&(k=K);let W,ue=[],ce=[],te=1,ye=2,Ae={},Ye={},qe=864e5,Ar=0,tr,Wr,vr,_u=!1,Fc,xt,ri,Na=pu.get(F.REPLICATION_DATABASES);if(Array.isArray(Na)){for(let K of Na)if(K.name===c&&K.replicateTo>=0){ri=K.replicateTo;break}}let GE=i.getRange({start:!1,end:!1}).constructor,jf=10,qE=6;g&&em(),mE(i.env.path,K=>{if(I)return Oa(K)});class Qf extends ml{static{o(this,"Updatable")}getUpdatedTime(){return Lc.get(this.getRecord())?.version}getExpiresAt(){return Lc.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new lp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Pe extends qr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=H;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),C=C||_.load;let N=o(L=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[L]&&(!U[L].reliesOnPrototype||U.prototype[L])),A.length>0)if(A.length===1){let U=A[0];return(w,D,$)=>{if(w?.source!==U)return U[L](D,$,w)}}else return(U,w,D)=>{let $=[];for(let Y of A){if(U?.source===Y)break;$.push(Y[L](w,D,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=o(L=>{if(P[L]&&(!P[L].reliesOnPrototype||P.prototype[L]))return(A,U,w)=>{if(!A?.source)return P[L](U,w,A)}},"getApplyToCanonicalSource");Ae={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let L=!1,A,U=o(async(w,D)=>{let $=w.value,Y=w.table?De[c][w.table]:Pe;if(c===sm&&(w.table===bu.ROLE_TABLE_NAME||w.table===bu.USER_TABLE_NAME)&&(L=!0),w.id===void 0&&(w.id=$[Y.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let j={residencyId:kc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await Y.getResource(B,D,j);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!0,j);case"patch":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!1,j);case"delete":return Ee._writeDelete(B,j);case"publish":case"message":return Ee._writePublish(B,$,j);case"invalidate":return Ee._writeInvalidate(B,$,j);case"relocate":return Ee._writeRelocate(B,j);default:Fe.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let D={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=_.subscribeOnThisThread?_.subscribeOnThisThread((0,mu.getWorkerIndex)(),D):(0,mu.getWorkerIndex)()===0,Y=w&&$&&await _.subscribe?.(D);if(Y){let j;for await(let B of Y)try{if(!(B.type==="transaction"?B.writes[0]:B)){Fe.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){if(j?.resolve(),B.localTime&&A!==B.localTime){if(B.remoteNodeIds?.length>0){let pe=[Symbol.for("seq"),B.remoteNodeIds[0]],ne=d.get(pe),ie=ne?.nodes;ie||(ie=[]);for(let de of B.remoteNodeIds.slice(1)){let oe=ie.find(ke=>ke.id===de);ie=ie.filter(ke=>ke.id!==de||ke===oe),oe||(oe={id:de,seqId:0},ie.push(oe)),oe.seqId=Math.max(ne?.seqId??1,B.localTime),de===j?.nodeId&&(oe.lastTxnTime=B.timestamp)}let xe=Math.max(ne?.seqId??1,B.localTime);Fe.default.trace?.("Received txn",c,xe,new Date(xe),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(pe,{seqId:xe,nodes:ie})}A=B.localTime}B.onCommit&&j?.committed.then(B.onCommit);continue}if(j)if(B.beginTxn)j.resolve();else{j.write_promises.push(U(B,j));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let fe=bt(B,()=>{if(B.type==="transaction"){let pe=[];for(let ne of B.writes)try{pe.push(U(ne,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(ne)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),ne=!1;for(let ie of B.attributes)pe.find(xe=>xe.name===ie.name)||(pe.push(ie),ne=!0);ne&&(Ze({table:s,database:c,attributes:pe,origin:"cluster"}),AE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(j=B,j.write_promises=[U(B,B)],new Promise(pe=>{j.resolve=()=>pe(Promise.all(j.write_promises))})):U(B,B)});j&&(j.committed=fe),L&&fe&&!fe?.waitingForUserChange&&(fe.then(()=>AE.signalUserChange(new IE.UserEventMsg(process.pid))),fe.waitingForUserChange=!0),B.onCommit&&(fe?fe.then(B.onCommit):B.onCommit())}catch(Ee){Fe.default.error?.("error in subscription handler",Ee)}}}catch(w){Fe.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(_,T,N){let P=super.getResource(_,T,N);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Ui(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!N?.async||i.cache?.get?.(_),x=Ur(T),L=x.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Io(_,T,{transaction:L,ensureLoaded:N?.ensureLoaded},O,A=>{if(A?Pe._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let U=dn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Zs(U,w=>(Pe._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=dn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Zs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=k?.type;if(_==="String"||_==="ID")return super.getNewId();if(!xt){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,L;if(x&&x.nodeName===server.hostname&&(!SAe(i)||x.pid===process.pid)){let A=x.start,U=x.end;L=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))L=w}else x=P(O?.version??null),L=x.start;xt=new BigInt64Array([BigInt(L)+1n]),xt=new BigInt64Array(i.getUserSharedBuffer("id",xt.buffer)),xt.maxSafeId=x.end}let T=Number(Atomics.add(xt,0,1n)),N=_==="Int"?512:1048576;if(T+N>=xt.maxSafeId){let O=o(x=>{xt.maxSafeId=T+(_==="Int"?1023:4194303);let L=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(xt[0]);for(let $ of i.getKeys({start:U+1,end:L,limit:1,transaction:A}))L=$;A?.done();let{value:w,version:D}=i.getEntry(Symbol.for("id_allocation"));if(xt.maxSafeId<L){if(w.end>xt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,xt.maxSafeId,D),i.put(Symbol.for("id_allocation"),{start:w.start,end:xt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),D)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${xt.maxSafeId}, but id of ${L} detected`);let $=P(D);$.alreadyUpdated||Atomics.store(xt,0,BigInt($.start+1)),xt.maxSafeId=$.end}},"updateEnd");T+N===xt.maxSafeId?setImmediate(O):T+100>=xt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=x/4,A,U,w=!1,D,$;do{D=Math.floor(Math.random()*x),$={start:D,end:D+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let Y of i.getKeys({start:D,limit:1,reverse:!0}))A=Y;U=x;for(let Y of i.getKeys({start:D+1,end:x,limit:1}))U=Y;L*=.875,L<1e3&&!w&&(w=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,D,A,U,L))}while(!(L<U-D&&(L<D-A||A===0)));return i.transactionSync(()=>{let Y=i.getEntry(Symbol.for("id_allocation"));return(Y?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Y.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,Oa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Pe.getResidency=_&&((T,N)=>{try{return _(T,N)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){Pe.getResidencyById=_&&(T=>{try{return _(T)}catch(N){throw N.message+=` in residency function for table ${s}`,N}})}static getResidency(_,T){if(Pe.getResidencyById)return Pe.getResidencyById(_[t]);let N=ri;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(N=T.replicateTo)}if(N>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,N));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+N));let L=x+N-O.length;L>0&&P.push(...O.slice(0,L))}return P}}static enableAuditing(){g||(g=!0,em(),Pe.audit=!0)}static coerceId(_){return _===""?null:LR(_,k)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Jr&&_.value&&Ua(_.value);if(c===a){for(let _ of S)d.remove(Pe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Pe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),RM.default.unlinkSync(i.env.path);AE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Jf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let N={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Pe.getRecordCount().then(P=>(N.recordCount=P.recordCount,N.estimatedRecordRange=P.estimatedRange,N)):N}if(_!==void 0&&T.loadAsInstance===!1){let N=this.getContext(),P=Ur(N),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Os(_);Ui(x);let L=!0;return _.checkPermission&&(L=this.allowRead(N.user,_)),Zs(Zs(L,A=>{if(!A)throw new dt.AccessViolation(N.user);let U=!0;return Io(x,N,{transaction:O,ensureLoaded:U},!1,w=>{if(N.onlyIfCached){if(!w?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let D=dn(x,w,N);if(D)return P?.disregardReadTxn(),N.loadedFromSource=!0,D.then($=>$?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?Ff(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let N=On(_,T);if(N?.read){if(N.isSuperUser)return!0;let P=N.attribute_permissions,O=T?.select;if(P?.length>0||_u&&O){if(T||(T={}),O){let x=P?.length>0&&yM(P,"read");T.select=O.map(L=>{let A=L.name||L;if(!x||x[A]){let U=vr[A]?.definition?.tableClass;if(U){if(L.name||(L={name:L}),!L.checkPermission&&T.checkPermission&&(L.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,L))return!1;if(!L.select)return L.name}return L}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!vr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,N){let P=On(_,N);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=yM(O,"update");for(let L in T)if(!x[L])return!1;for(let L of O){let A=L.attribute_name;!L.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return Ca(this.getContext())}}allowCreate(_,T,N){if(this.isCollection){let P=On(_,N);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=yM(O,"insert");for(let L in T)if(!x[L])return!1;return Ca(this.getContext())}else return Ca(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return On(_,T)?.delete&&Ca(this.getContext())}update(_,T){let N,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,N=this.getId()):N=Os(_);let x=this.getContext();if(!Ur(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),Zs(A,U=>{if(!U)throw new dt.AccessViolation(x.user);return Zs(i.get(Os(_)),w=>{let D=new Qf(w);return D._setChanges(T),this._writeUpdate(N,D.getChanges(),!1),D})})}return this._writeUpdate(N,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===FJ?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new lp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,N=this.getContext();return _?.checkPermission&&(T=this.allowDelete(N.user,_,N)),Zs(T,P=>{if(!P)throw new dt.AccessViolation(N.user);this._writeInvalidate(_?Os(_):this.getId())})}_writeInvalidate(_,T,N){let P=this.getContext();Ui(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,P,_),beforeIntermediate:yu(T,Ye.invalidate?.bind(this,P,_)),commit:o((x,L)=>{if(!(xr(x,L,N?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,L,x,Wn,g,{user:P?.user,residencyId:N?.residencyId,nodeId:N?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let N=this.getContext();Ui(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.relocate?.bind(this,N,_),beforeIntermediate:Ye.relocate?.bind(this,N,_),commit:o((O,x)=>{if(xr(O,x,T?.nodeId)<=0)return;let L=Pe.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(L&&!L.includes(server.hostname)){for(let D in r)U||(U={}),U[D]=w[D];A=Wn}else U=w;Fe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:N.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let N={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=Pa(this.getResidency(T.value,N)),O;if(P){if(!P.includes(server.hostname))return!1;O=kc(P)}let x=0;Fe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,P);let L=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,N){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==N))){if(I){if(i.hasLock(_,O.version))return;let x;for(let L in r)x||(x={}),x[L]=T[L];if(x)return y(_,x,O,N,Mc,null,null,null,!0)}if(i.ifVersion(_,N,()=>{gu(_,T,null)}),g)return y(_,null,O,N,Mc,null,null,null,!0);du(i,O??i.getEntry(_),N)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let N=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(N=this.allowUpdate(P.user,T,_)),Zs(N,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let L=x[t];this._writeUpdate(L,x,!0)}else{let x=Os(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let N=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(N=this.allowCreate(P.user,T,_)),Zs(N,O=>{if(!O)throw new dt.AccessViolation(P.user);let x=Os(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let N=this.update(_,T);if(N?.then)return N.then(()=>{})}}_writeUpdate(_,T,N,P){let O=this.getContext(),x=Ur(O);Ui(_);let L=this.#n??i.getEntry(_);this.#s=N?FJ:hAe;let A=o(w=>N?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,pl(this)):null,"writeToSources"),U={key:_,store:i,entry:L,nodeName:O?.nodeName,validate:o(w=>{T||(T=this.#t),N||T&&cg(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!N),H&&(T[H.name]=H.type==="Date"?new Date(w):H.type==="String"?new Date(w).toISOString():w),N&&(t&&T[t]!==_&&(T[t]=_),G&&(L?.value?T[G.name]=L?.value[G.name]:T[G.name]=G.type==="Date"?new Date(w):G.type==="String"?new Date(w).toISOString():w),T=pl(T))):x.removeWrite(U)},"validate"),before:A(Ae),beforeIntermediate:yu(T,A(Ye)),commit:o((w,D,$)=>{if($){if(O&&D?.version>(O.lastModified||0)&&(O.lastModified=D.version),this.#n=D,D?.value&&D.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");N||(this.#e=D?.value??null)}this.#t=void 0,this.#r=w;let Y=D?.value,j;this.#s=0;let B=!1,Ee=xr(w,D,P?.nodeId),fe;if(Ee<=0){if(g){let de=D.localTime,oe=D.version;Fe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(oe),"local recorded time",new Date(de));let ke=[];for(;de>w||oe>=w&&de>0;){let Be=l.get(de);if(!Be)break;let Le=At(Be);if(oe=Le.version,oe>=w){if(oe===w){if(Ee=xr(w,{version:oe,localTime:de},P?.nodeId),Ee===0)return;if(Ee>0)continue}if(Le.type==="patch")ke.push(Le),fe=T;else if(Le.type==="put"||Le.type==="delete")return}de=Le.previousLocalTime}de||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",D),ke.sort((Be,Le)=>Be.version-Le.version);for(let Be of ke){let Le=Be.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(Be.version),Le,Be),j=og(j??T,Le,N),!j)return}}else{if(N)return;j=og(j??T,Y,N),Fe.default.debug?.("Rebuilding update without audit:",j)}Fe.default.trace?.("Rebuilt record to save:",j," is full update:",N)}let pe;if(N&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=pl(Y,j??T):(this.#e=Y,pe=pl(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ne;if(P?.residencyId!=null)ne=P.residencyId;else{L?.residencyId&&(O.previousResidency=Pe.getResidencyRecord(L.residencyId));let de=Pa(Pe.getResidency(pe,O));if(de&&!de.includes(server.hostname))if(fe??=pe,B=!0,Pe.getResidencyById)pe=void 0;else{pe=null;for(let oe in r)pe||(pe={}),pe[oe]=fe[oe]}ne=kc(de)}N||(fe=T);let ie=O?.expiresAt??(h?h+Date.now():-1);Fe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${D?", replaces entry from: "+new Date(D.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),gu(_,Y,pe);let xe=N?"put":"patch";y(_,pe,D,w,B?Wn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:ne,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},xe,!1,fe),O.expiresAt&&Oa()},"commit")};x.addWrite(U)}async delete(_){if(Jf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,N=this.getContext();return _.checkPermission&&(T=this.allowDelete(N.user,_,N)),Zs(T,P=>{if(!P)throw new dt.AccessViolation(N.user);let O=Os(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let N=Ur(this.getContext());Ui(_);let P=this.getContext();return N.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:Ae.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:o((O,x,L)=>{let A=x?.value;L&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),Pe._updateResource(this,x)),!(xr(O,x,T?.nodeId)<=0)&&(gu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Oa()):du(i,x))},"commit")}),!0}search(_){let T=this.getContext(),N=Ur(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new dt.AccessViolation(T.user);T&&(T.lastModified=dAe);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,L={};function A(ie,xe){let de;switch(xe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');de=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+xe)}for(let oe of ie){if(oe.conditions){oe.conditions=A(oe.conditions,oe.operator);continue}let ke=oe[0]??oe.attribute,Be=ke==null?k:yo(S,ke);if(Be)(Be.type||_M[oe.comparator])&&(oe[1]===void 0?oe.value=w(oe.value,Be):oe[1]=w(oe[1],Be));else if(ke!=null)throw(0,dt.handleHDBError)(new Error,`${ke} is not a defined attribute`,404);if(oe.chainedConditions)if(oe.chainedConditions.length===1&&(!oe.operator||oe.operator=="and")){let Le=oe.chainedConditions[0],Me,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(Me=oe,pt=Le):(Me=Le,pt=oe),Me.comparator!=="lt"&&Me.comparator!=="less_than"&&Me.comparator!=="le"&&Me.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let wt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Et=Me.comparator==="le"||Me.comparator==="less_than_equal";oe.comparator=(wt?"ge":"gt")+(Et?"le":"lt"),oe.value=[pt.value,Me.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}o(A,"prepareConditions");function U(ie,xe){if(_.enforceExecutionOrder)return ie;for(let de of ie)de.conditions&&(de.conditions=U(de.conditions,de.operator));return ie.length>1&&xe!=="or"?cAe(ie,CR(Pe)):ie}o(U,"orderConditions");function w(ie,xe){return Array.isArray(ie)?ie.map(de=>LR(de,xe)):LR(ie,xe)}o(w,"coerceTypedValues");let D=_.operator;(P.length>0||D)&&(P=A(P,D));let $=typeof _.sort=="object"&&_.sort,Y;if($&&D!=="or"){let ie=$.attribute;if(ie==null)throw new dt.ClientError("Sort requires an attribute");if(x=P.find(xe=>Uf(xe.attribute)===Uf(ie)),!x){let xe=yo(S,ie);if(!xe)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(xe.indexed)x={...$,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!$.descending)}P=U(P,D),$&&(x&&P[0]===x?$.next&&(Y={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(x&&P.splice(P.indexOf(x),1),Y=$));let j=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:D,postOrdering:Y,selectApplied:!!j};let B=N.useReadTxn(),Ee=gM(P,D,Pe,B,_,T,(ie,xe)=>Zf(ie,j,T,B,xe),L),fe=_.ensureLoaded!==!1,pe=Pe.transformEntryForSelect(j,T,B,L,fe,!0),ne=Pe.transformToOrderedSelect(Ee,j,Y,T,B,pe);return(_.offset||_.limit!==void 0)&&(ne=ne.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),ne.onDone=()=>{ne.onDone=null,N.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(j){let ie=[];for(let xe of j)xe==="*"?ie.push(...S.map(de=>de.name)):ie.push(xe.name||xe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},ne}static transformToOrderedSelect(_,T,N,P,O,x){let L=new GE;if(N){_=Zf(_,T,P,O,null);let A;L.iterate=function(){let w,D=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),$,Y=N.dbOrderedAttribute,j,B,Ee=!0;function fe(ne){let ie=ne.next&&fe(ne.next),xe=ne.descending;return P.sort=ne,(de,oe)=>{let ke=Su(de,ne.attribute,P),Be=Su(oe,ne.attribute,P),Le=xe?(0,hu.compareKeys)(Be,ke):(0,hu.compareKeys)(ke,Be);return Le===0?ie?.(de,oe)||0:Le}}o(fe,"createComparator");let pe=fe(N);return{async next(){let ne;if(w)if(ne=w.next(),ne.done){if($)return L.onDone&&L.onDone(),ne}else return{value:await x.call(this,ne.value)};A=[],j&&A.push(j);do if(ne=await D.next(),ne.done){if($=!0,A.length)break;return L.onDone&&L.onDone(),ne}else{let ie=ne.value;if(ie?.then&&(ie=await ie),Y){let xe=Su(ie,Y,P);if(Ee)Ee=!1,B=xe;else if(xe!==B){B=xe,j=ie;break}}A.push(ie)}while(!0);return N.isGrouped,A.sort(pe),w=A[Symbol.iterator](),ne=w.next(),ne.done?(L.onDone&&L.onDone(),ne):{value:await x.call(this,ne.value)}},return(){return L.onDone&&L.onDone(),D.return()},throw(){return L.onDone&&L.onDone(),D.throw()}}};let U=o(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let D=0;D<T.length;D++){let $=T[D],Y;if($.name===w.attribute[0]){for(Y=$.sort||($.sort={});Y.next;)Y=Y.next;Y.attribute=w.attribute.slice(1),Y.descending=w.descending}else $===w.attribute[0]&&(T[D]=Y={name:$,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(N)}else L.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),L=L.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return L}static transformEntryForSelect(_,T,N,P,O,x){let L;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let D;return typeof w=="object"?D=w.name:D=w,r[D]||D===t})&&(L=!0);let A,U=o(function(w){let D;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(D=w.deref?w.deref():w.value,!D&&(w.key===void 0||w.deref)||w.metadataFlags&Wn){if(w.metadataFlags&Wn&&T.replicateFrom===!1&&x&&w.residencyId)return Uc.SKIP;if(w=Io(w.key??w,T,{transaction:N,lazy:_?.length<4,ensureLoaded:O},this?.isSync,$=>$),w?.then)return w.then(U.bind(this));D=w?.value}if(L&&w?.metadataFlags&(Wn|Mc)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let $=dn(w.key??w,w,T);if($?.then)return $.then(U)}}if(D==null)return x?Uc.SKIP:D;if(_&&!(_[0]==="*"&&_.length===1)){let $,Y=o((B,Ee)=>{let fe;typeof B=="object"?fe=B.name:fe=B;let pe=vr?.[fe],ne;if(pe){let ie=P?.[fe];if(ie)if(ie.hasMappings){let de=pe.from?D[pe.from]:Uf(w.key);ne=ie.get(de),ne||(ne=[])}else ne=ie.fromRecord?.(D);else ne=pe(D,T,w,!0);let xe=o(de=>{if(pe.directReturn)return Ee(de,fe);if(de&&typeof de=="object"){let oe=pe.definition?.tableClass||Pe;A||(A={});let ke=A[fe]||(A[fe]=oe.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,N,ie,O));if(Array.isArray(de)){let Be=[],Le=oe.transformToOrderedSelect(de,B.select,typeof B.sort=="object"&&B.sort,T,N,ke)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Me=o(wt=>{for(;!wt.done;){if(wt?.then)return wt.then(Me);Be.push(wt.value),wt=Le.next()}Ee(Be,fe)},"nextValue"),pt=Me(Le.next());pt&&($||($=[]),$.push(pt));return}else if(de=ke.call(this,de),de?.then){$||($=[]),$.push(de.then(Be=>Ee(Be,fe)));return}}Ee(de,fe)},"handleResolvedValue");ne?.then?($||($=[]),$.push(ne.then(xe))):xe(ne);return}else ne=D[fe],ne&&typeof ne=="object"&&fe!==B&&(ne=Pe.transformEntryForSelect(B.select||B,T,N,null)({value:ne}));Ee(ne,fe)},"selectAttribute"),j;if(typeof _=="string")Y(_,B=>{j=B});else if(Array.isArray(_))if(_.asArray)j=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=D:Y(B,fe=>j[Ee]=fe)});else{j={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let fe in D)j[fe]=D[fe];else Y(Ee,(fe,pe)=>{fe===void 0&&B&&(fe=null),j[pe]=fe})}else throw new dt.ClientError("Invalid select"+_);return $?Promise.all($).then(()=>j):j}return D},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,N=[],P=MN(Pe,this.getId()??null,function(L,A,U,w){try{let D=A.getValue?.(i,T),$=A.type;if(!D&&$==="patch"&&T){let j=i.getEntry(L);j?.version===A.version?D=j.value:D=A.getValue?.(i,!0,U),$="put"}let Y={id:L,localTime:U,value:D,version:A.version,type:$,beginTxn:w};N?N.push(Y):(c!=="system"&&Ke(A.size??1,"db-message",s,null),this.send(Y))}catch(D){Fe.default.error?.(D)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let L=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:D}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(D);if($.tableId!==n)continue;let Y=$.recordId;if(L==null||qJ(L,Y)){let j=$.getValue(i,T,w);if(x({id:Y,localTime:w,value:j,version:$.version,type:$.type,size:$.size}),P.queue?.length>HJ&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:D,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Y=At($);if(Y.tableId!==n)continue;let j=Y.recordId;if(L==null||qJ(L,j)){let B=Y.getValue(i,T,D);if(w.push({id:j,localTime:D,value:B,version:Y.version,type:Y.type}),--A<=0)break}}catch(Y){Fe.default.error("Error getting history entry",D,Y)}for(let D=w.length;D>0;)x(w[--D]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:D,version:$,localTime:Y,size:j}of i.getRange({start:L??!1,end:L==null?void 0:[L,hu.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(D&&(x({id:w,localTime:Y,value:D,version:$,type:"put",size:j}),P.queue?.length>HJ&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===pM&&(i.cache?.delete(L),this.#n=i.getEntry(L),Fe.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),Fe.default.trace?.("Subscription from",U,"from",L,w),U<w){let D=[],$=w;do{let Y=l.get($);if(Y){_.omitCurrent=!0;let j=At(Y),B=j.getValue(i,T,$);T&&(j.type="put"),D.push({id:L,value:B,localTime:$,...j}),$=j.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let Y=D.length;Y>0;)x(D[--Y]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:L,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of N)x(w);N=null})();function x(L){c!=="system"&&Ke(L.size??1,"db-message",s,null),P.send(L)}return o(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,N){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),Zs(P,x=>{if(!x)throw new dt.AccessViolation(O.user);let L=Os(_);this._writePublish(L,T,N)})}}_writePublish(_,T,N){let P=Ur(this.getContext());_??=null,_!==null&&Ui(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:o(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ae.publish?.bind(this,O,_,T),beforeIntermediate:yu(T,Ye.publish?.bind(this,O,_,T)),commit:o((x,L,A)=>{L===void 0&&R&&!g&&Oa(),Fe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,L?.value??null,L,L?.version||x,0,!0,{user:O?.user,residencyId:N?.residencyId,expiresAt:O?.expiresAt,nodeId:N?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let N,P=o((O,x,L)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let D=A[U];if(D.relationship||D.computed){_.hasOwnProperty(D.name)&&(N||(N=[])).push(`Computed property ${L}.${D.name} may not be directly assigned a value`);continue}let $=P(O[D.name],D,L+"."+D.name);$&&(O[D.name]=$)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(N||(N=[])).push(`Property ${U} is not allowed within object in property ${L}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ds)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],D=P(w,x.elements,L+"[*]");D&&(O[A]=D)}}else(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an Array`);break}x.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let L=S[O];if(L.relationship||L.computed){Object.hasOwn(_,L.name)&&(N||(N=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!T||L.name in _){let A=P(_[L.name],L,L.name);A!==void 0&&(_[L.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(N||(N=[])).push(`Property ${O} is not allowed`);if(N)throw new dt.ClientError(N.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let N of _){if(!N.name)throw new dt.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");lAe(N.name),T.push(N)}return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static async removeAttributes(_){let T=S.filter(N=>!_.includes(N.name));return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=RM.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,N=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,L=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&L++,A++,await vc(),!x&&A<O&&performance.now()-P>N){U=A;break}if(U){let w=L;L=0;for(let{value:ne}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))ne!=null&&L++,await vc();let D=U*2,$=(L+w)/D,Y=Math.pow((L-w+1)/U/2,2)+$*(1-$)/D,j=Math.max(Math.sqrt(Y)*T,1),B=Math.round($*T),Ee=Math.max(B-1.96*j,L+w),fe=Math.min(B+1.96*j,T),pe=Math.pow(10,Math.round(Math.log10(j)));return pe>B&&(pe=pe/10),L=Math.round(B/pe)*pe,{recordCount:L,estimatedRange:[Math.round(Ee),Math.round(fe)]}}return{recordCount:L}}static updatedAttributes(){vr=this.propertyResolvers={$id:o((_,T,N)=>({value:N.key}),"$id"),$updatedtime:o((_,T,N)=>N.version,"$updatedtime"),$updatedTime:o((_,T,N)=>N.version,"$updatedTime"),$expiresAt:o((_,T,N)=>N.expiresAt,"$expiresAt"),$record:o((_,T,N)=>N?{value:_}:_,"$record"),$distance:o((_,T,N)=>N&&(N.distance??T?.vectorDistances?.get(N)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(k=_),_.resolve=null;let T=_.relationship,N=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),N&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),_u=!0,T.to)_.elements?.definition?(vr[_.name]=_.resolve=(P,O,x,L)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return L?vf({attribute:T.to,value:A},Ur(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Ur(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(vr[_.name]=_.resolve=(O,x,L,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let D,$=U?.map(Y=>{let j=P.tableClass.primaryStore[A?"getEntry":"get"](Y,{transaction:Ur(x).getReadTxn()});return j?.then&&(D=!0),Pe.loadAsInstance===!1&&Object.freeze(A?j?.value:j),j});return T.filterMissing?D?Promise.all($).then(Y=>Y.filter($J)):$.filter($J):D?Promise.all($):$}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Ur(x).getReadTxn()});return Pe.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let L=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=L}else{let L=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=L}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(N)typeof N.from=="function"&&this.setComputedAttribute(_.name,N.from),vr[_.name]=_.resolve=(P,O,x)=>{let L=typeof N.from=="string"?P[N.from]:P,A=this.userResolvers[_.name];if(A)return A(L,O,x);Fe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;vr[_.name]=(O,x,L)=>{let A=O[_.name];return P.propertyResolver(A,x,L)},vr[_.name].directReturn=!0}}up(this,this),up(Qf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Bf.getStore())},set(N){return _.set(this,N)},configurable:!0})}}static setComputedAttribute(_,T){let N=yo(S,_);if(!N){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!N.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let N;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await vc(),At(O).tableId===n&&(N=yR(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:L}=P;await vc(),x===null&&L<_&&(N=du(i,P))}await N}static async*getHistory(_=0,T=1/0){for(let{key:N,value:P}of l.getRange({start:_||1,end:T})){await vc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let N=i.getEntry(_);if(!N)return T;let P=N.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await vc();let x=l.get(P);if(x){let L=At(x);T.push({id:L.recordId,localTime:P,version:L.version,type:L.type,value:L.getValue(i,!0,P),user:L.user}),P=L.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){W?.remove()}}let $E=Xy(async(K,_,T)=>{for(let N of Pe.sources)if(N.get&&(!N.get.reliesOnPrototype||N.prototype.get)){if(N.available?.(T)===!1)continue;_.source=N;let P=await N.get(K,_);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Pe.updatedAttributes();let ob=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&VE(),Pe;function gu(K,_,T){let N;for(let P in r){let O=r[P],x=O.isIndexing,L=vr[P],A=T&&(L?L(T):T[P]),U=_&&(L?L(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}N=!0;let w=O.indexNulls,D=(0,bE.getIndexedValues)(A,w),$=(0,bE.getIndexedValues)(U,w);if($?.length>0){let Y=new Set($);if(D=D?D.filter(j=>{if(Y.has(j))Y.delete(j);else return!0}):[],$=Array.from(Y),($.length>0||D.length>0)&&BJ){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,GJ)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&BJ&&O.prefetch(D.map(Y=>({key:Y,value:K})),GJ);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(gu,"updateIndices");function Ui(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>kJ)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,hu.writeKey)(K,EAe,0)>kJ)throw new Error("Primary key size is too large: "+K.length);return!0}o(Ui,"checkValidId");function Os(K){return typeof K=="object"&&K?K.id:K}o(Os,"requestTargetToId");function Jf(K){return typeof K=="object"&&K&&K.isCollection}o(Jf,"isSearchTarget");function Xf(K){}o(Xf,"isRequestTarget");function Io(K,_,T,N,P){if(Pe.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Pa(Pe.getResidencyById(K));if(x&&!x.includes(server.hostname)&&C)return C({key:K,residency:x}).then(P)}let O=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(YJ.default.trace?.("Recording db-read action for",`${c}.${s}`),Ke(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&Wn&&C&&T.ensureLoaded&&_?.replicateFrom!==!1?C(x).then(L=>P(L,K),L=>(Fe.default.error?.("Error loading remote record",K,x,T,L),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return N?O():te>0?(te--,O()):new Promise((x,L)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ue.push(K),ce.push(U),ue.length>qE&&(te--,A()));function A(){if(ue.length>0){let w=ce;i.prefetch(ue,()=>{te===-1?A():te++;for(let D of w)D()}),ue=[],ce=[],ye>2&&ye--}else te=ye,ye<jf&&ye++}o(A,"prefetch");function U(){try{x(O())}catch(w){L(w)}}o(U,"load")})}o(Io,"loadLocalRecord");function On(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return _Ae;let N=T[c],P,O=N?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}o(On,"getTablePermissions");function dn(K,_,T,N){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(Wn|Mc)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,en(!P,"cache-hit",s)),P){let O=Tu(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&N?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>Fe.default.warn?.(x)),T?.onlyIfCached&&!N.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Pe.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}o(dn,"ensureLoadedFromSource");function Ur(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new No,_.lmdbDb=i,_;_=T}while(!0)}else return new l_}o(Ur,"txnForContext");function Su(K,_,T){if(!K)return;let N=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=vr,x=N;for(let L=0,A=_.length;L<A;L++){let U=_[L],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=vr[_];return P?P(N,T,K):N[_]}o(Su,"getAttributeValue");function Zf(K,_,T,N,P){let O=P?.length,x={transaction:N,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},L;function A(U,w){let D=U?.value;if(!D)return Uc.SKIP;for(let $=0;$<O;$++)if(!L?.includes($)&&!P[$](D,U))return Uc.SKIP;return w!==void 0&&(U.key=w),U}if(o(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(L=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return Uc.SKIP;for(let D=0;D<O;D++){let Y=P[D].idFilter;if(Y){if(!Y(w))return Uc.SKIP;L||(L=[]),L.push(D)}}return Io(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==Uc.SKIP)),U.hasEntries=!0,U}return K}o(Zf,"transformToEntries");function xr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let N=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,L,A=At(O);for(let U in N)N[U]===T&&(x=U),N[U]===A.nodeId&&(L=U);if(x>L)return 1;if(x===L)return 0}}return-1}return 1}o(xr,"precedesExistingVersion");async function Tu(K,_,T){let N=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(Wn|Mc)?O(Tu(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},pAe)});let L=_?.value,A={requestContext:T,replacingRecord:L,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,D)=>{let $;Zs(bt(A,async Y=>{let j=performance.now(),B,Ee,fe;try{B=await $E(K,A,_),fe=N&Wn;let ne=A.lastModified||fe&&P;Ee=fe||ne>P||!L,ne||(ne=(0,bE.getNextMonotonicTime)());let ie=performance.now()-j;if(Ke(ie,"cache-resolution",s,null,"success"),U&&gp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),Y.timestamp=ne,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ne=P;else throw new dt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}$=!0,w({key:K,version:ne,value:B})}catch(ne){ne.message+=` while resolving record ${K} for ${s}`,L&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(w({key:K,version:P,value:L}),Fe.default.trace?.(ne.message,"(returned stale record)")):D(ne);let ie=performance.now()-j;Ke(ie,"cache-resolution",s,null,"fail"),U&&gp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Ur(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:yu(B),commit:o((ne,ie)=>{if(ie?.version!==P)return;let xe=gu(K,L,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Pe.getResidencyRecord(ie.residencyId));let de,oe=!1,ke,Be=Pa(Pe.getResidency(B,T));if(Be){if(!Be.includes(server.hostname))if(de=B,oe=!0,Pe.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=de[Le]}ke=kc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),y(K,B,ie,ne,oe?Wn:0,g&&(Ee||oe)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:ke,tableToTrack:s},"put",!!fe,de)}else ie&&(Ye.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),g||R?y(K,null,ie,ne,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!fe):du(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},Y=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",Y)})})}o(Tu,"getFromSource");function Ca(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Ca,"checkContextPermissions");function Oa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(qe===tr&&!_)&&(tr=qe,(0,mu.getWorkerIndex)()===(0,mu.getWorkerCount)()-1))return Wr&&clearTimeout(Wr),qe?new Promise(T=>{let N=new Date;N.setMonth(0),N.setDate(1),N.setHours(0),N.setMinutes(0),N.setSeconds(0);let P=qe/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-N.getTime())/P)*P+N.getTime(),x=o(L=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),Wr=setTimeout(()=>J=J.then(async()=>{if(x(Math.max(L+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Wr);return}let A=50,U=new Array(A),w=0,D=Math.pow(Ar,8)*(pu.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ar,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${D}, adjusted eviction ${$}ms`);function Y(j,B,Ee,fe){let pe=j+$-Date.now();if(pe<0)return!0;if(Ar){let ne=i.lastSize;return Ee&Jr&&Yc(fe,ie=>{ie.size&&(ne+=ie.size)}),Fe.default.trace?.(`shouldEvict adjusted ${pe} ${ne}, ${pe*(j-B)/ne} < ${D}`),pe*(j-B)/ne<D}return!1}o(Y,"shouldEvict");try{let j=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:ne,metadataFlags:ie}=B,xe;fe===null&&!g&&pe+mAe<Date.now()?xe=du(i,B,pe):ne!=null&&Y(ne,pe,ie,fe)&&(xe=Pe.evict(Ee,fe,pe),j++),xe&&(await U[w],U[w]=xe.catch(de=>{Fe.default.error?.("Cleanup error",de)}),++w>=A&&(w=0)),await vc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,j)}T(void 0),Ar=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}o(Oa,"scheduleCleanup");function em(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(em,"addDeleteRemoval");function VE(){(0,mu.getWorkerIndex)()===0&&setInterval(async()=>{if(!Fc){Fc=!0;try{let K=X.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let N of _.getValues(T)){let P=i.getEntry(N);P?.value?P.value[K]<Date.now()&&Pe.evict(N,P.value,P.version):i.ifVersion(N,P?.version,()=>_.remove(T,N))}await vc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Fc=!1}}},fAe).unref()}o(VE,"runRecordExpirationEviction");function Pa(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return Fe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Pa,"residencyFromFunction");function kc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(kc,"getResidencyId");function yu(K,_){let T=Yb(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(yu,"preCommitBlobsForRecordBefore")}function yM(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function GJ(){}function LR(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return PR(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return PR(+e);case"Float":return e==="null"?null:PR(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;gAe.test(e)||(e+="Z");let n=new Date(e);return PR(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,DR.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function PR(e){if(isNaN(e))throw new SyntaxError;return e}function qJ(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Zs(e,t,r){return e?.then?e.then(t,r):t(e)}function $J(e){return e!=null}function ei(e){try{return JSON.stringify(e)}catch{return e}}function SAe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Uc,bE,VJ,KJ,pu,dt,AE,IE,Fe,hu,mu,DR,RM,YJ,cAe,lAe,uAe,dAe,fAe,mAe,BJ,pAe,FJ,hAe,Wn,Mc,EAe,kJ,HJ,_Ae,OGe,gAe,vc,py=se(()=>{q();Uc=require("lmdb"),bE=b(Ln()),VJ=b(require("lodash")),KJ=b(pm());Wa();Em();pu=b(me());vN();dt=b(_e()),AE=b(ko()),IE=b(as());we();Mg();Fe=b(Xn());cw();Ma();hu=require("ordered-binary"),mu=b(nt());ki();DR=b(ae());Qc();ds();ag();Sp();RM=b(require("node:fs"));Zn();_R();YJ=b(Q());ID();({sortBy:cAe}=VJ.default),{validateAttribute:lAe}=KJ.default,uAe=new Uint8Array(9);uAe[8]=192;dAe=1/0,fAe=6e4,mAe=864e5;pu.initSync();BJ=pu.get(F.STORAGE_PREFETCHWRITES),pAe=1e4,FJ=1,hAe=2,Wn=1,Mc=8,EAe=Buffer.allocUnsafeSlow(8192),kJ=1978,HJ=100,_Ae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},OGe=(0,DR.convertToMS)(pu.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(MR,"makeTable");o(yM,"attributesAsObject");o(GJ,"noop");gAe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(LR,"coerceType");o(PR,"rejectNaN");o(qJ,"isDescendantId");vc=o(()=>new Promise(setImmediate),"rest");o(Zs,"when");o($J,"exists");o(ei,"stringify");o(SAe,"hasOtherProcesses")});function vR(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function UR(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var WJ=se(()=>{o(vR,"euclideanDistance");o(UR,"cosineDistance")});var zJ,jJ,Hf,Ro,kf,TAe,yAe,xR,QJ=se(()=>{WJ();zJ=require("msgpackr"),jJ=b(Xn()),Hf=b(_e()),Ro=(0,jJ.loggerWithTag)("HNSW"),kf=Symbol.for("entryPoint"),TAe=Symbol.for("key"),yAe=10,xR=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=zJ.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?vR:UR,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[TAe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(kf);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Ro.debug?.("setting entry point to",i),this.indexStore.put(kf,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),yAe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Ro.debug?.("setting entry point to",i),this.indexStore.put(kf,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Ro.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:C,node:I}=g[S];if(y===i)continue;let k=[];if(this.optimizeRouting){let H=!1,X=I[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let ue=0;ue<X.length;ue++){let{id:ce,distance:te}=X[ue],ye=1+this.optimizeRouting*(1+.5*ue/this.M);for(let Ae=0;Ae<R.length;Ae++){let{id:Ye,distance:qe}=R[Ae];if(Ye===ce){C*W>qe+te?H=!0:te*ye>C+qe&&(k.push({fromId:Ye,toId:y}),k.push({fromId:y,toId:Ye}));break}}if(H)break}if(H)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:C});for(let{fromId:H,toId:X}of k){let W=d(H);W||(W=d(H,this.indexStore.get(H)));for(let ue=0;ue<W[E].length;ue++)if(W[E][ue].id===X){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(ue,1);break}}let J=c[E],G=J?.find(({id:H})=>H===y);if(G){let H=J?.indexOf(G);J.copied||(J=[...J],J.copied=!0,c[E]=J),J.splice(H,1)}else this.addConnection(y,d(y,I),i,E,C,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(kf);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Ro.debug?.("setting entry point to",l),this.indexStore.put(kf,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Ro.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(kf);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new Hf.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Hf.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=UR;else if(s==="euclidean")c=vR;else{if(s)throw new Hf.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Hf.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Hf.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){Ro.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Ro.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Ro.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Ro.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Ro.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?vR:UR);let c=a(s.target,t);return i.set(n,c),c}return t}}});var bM,JJ=se(()=>{QJ();bM={HNSW:xR}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>BR,database:()=>Zu,databaseEnvs:()=>ba,databases:()=>De,dropDatabase:()=>mw,dropTableMeta:()=>NAe,getDatabases:()=>at,getDefaultCompression:()=>ET,getTables:()=>bAe,onRemovedDB:()=>Vp,onUpdatedTable:()=>Dl,readMetaDb:()=>wE,resetDatabases:()=>jd,table:()=>Ze,tables:()=>Sn});function LE(e,t){let r=qR.OpenDBIObject??qR.default.OpenDBIObject;return new r(e,t)}function bAe(){return GR||at(),Sn||{}}function at(){if(GR)return De;GR=!0,$f=new Map;let e=(0,er.getHdbBasePath)()&&(0,Vt.join)((0,er.getHdbBasePath)(),qc),t=(0,er.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(F.STORAGE_PATH)||e&&((0,Is.existsSync)(e)?e:(0,Vt.join)((0,er.getHdbBasePath)(),JE)),!!e){if((0,Is.existsSync)(e))for(let r of(0,Is.readdirSync)(e,{withFileTypes:!0})){let n=(0,Vt.basename)(r.name,".mdb");r.isFile()&&(0,Vt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&wE((0,Vt.join)(e,r.name),null,n)}if((0,Is.existsSync)((0,qf.getBaseSchemaPath)())){for(let r of(0,Is.readdirSync)((0,qf.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Vt.join)((0,qf.getBaseSchemaPath)(),r.name),s=(0,Vt.join)((0,qf.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Is.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Vt.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Vt.join)(s,i.name);wE((0,Vt.join)(n,i.name),(0,Vt.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Is.existsSync)(s))for(let a of(0,Is.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Vt.extname)(a.name).toLowerCase()===".mdb"&&wE((0,Vt.join)(s,a.name),(0,Vt.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Vt.join)(c.path,(0,Vt.basename)(a+".mdb"));(0,Is.existsSync)(l)&&wE(l,a,r,null,!0)}}for(let r in De){let n=$f.get(r);if(n){let s=De[r];r.includes("delete")&&Dr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Dr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in Sn)delete Sn[s];delete Sn[$R]}}if((0,er.get)(F.ANALYTICS_REPLICATE)===!1?BR.includes("hdb_analytics")||BR.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of BR)De.system[r]&&(De.system[r].replicate=!1);return $f=null,De}}function jd(){GR=!1;for(let[,e]of ba)e.needsDeletion=!0;at();for(let[e,t]of ba)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),ba.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],CE.forEach(i=>i(t.databaseName));break}}return De}function wE(e,t,r=wM,n,s){let i=new AM.default(e,!1);try{let a=ba.get(e);a?a.needsDeletion=!1:(a=(0,Vf.open)(i),ba.set(e,a));let c=new LE(!1),l=a.dbisDb||(a.dbisDb=a.openDB(FR.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,Is.existsSync)(n)&&(i.path=n,u=(0,Vf.open)(i),u.isLegacy=!0):u=TR(a));let d=r3(r),f=d[$R],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Dr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],C,I,k=typeof g.audit=="boolean"?g.audit:(0,er.get)(F.LOGGING_AUDITLOG),J=g.trackDeletes,G=g.expiration,H=g.eviction,X=g.sealed,W=g.splitSegments,ue=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{C=g.tableId,C?C>=(l.get(Gf)||0)&&(l.putSync(Gf,C+1),Dr.info(`Updating next table id (it was out of sync) to ${C+1} for ${p}`)):(g.tableId=C=l.get(Gf),C||(C=1),Dr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Gf,C+1),l.putSync(g.key,g));let te=new LE(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ye=(0,er.get)(F.STORAGE_COMPRESSION_THRESHOLD)||t3;te.compression.threshold=ye}I=wR(a.openDB(g.key,te),a),a.databaseName=r,I.tableId=C}let ce;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ae=s3(te.key,a,te);S[te.name]=Ae,S[te.name].indexNulls=te.indexNulls}let ye=y.find(Ae=>Ae.name===te.name);ye?y.splice(y.indexOf(ye),1,te):y.push(te),ce=!0}}catch(ye){Dr.error("Error trying to update attribute",te,y,S,ye)}}for(let te of y)if(!E.find(Ae=>Ae.name===te.name)){if(te.is_hash_attribute){Dr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),ce=!0)}if(R)ce&&(R.schemaVersion++,R.updatedAttributes());else{R=n3(d,p,MR({primaryStore:I,auditStore:u,audit:k,sealed:X,splitSegments:W,replicate:ue,expirationMS:G&&G*1e3,evictionMS:H&&H*1e3,trackDeletes:J,tableName:p,tableId:C,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of NE)te(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function r3(e){let t=De[e];if(t||(e==="data"?t=De[e]=Sn:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),$f&&!$f.has(e)){let r=new Set;t[$R]=r,$f.set(e,r)}return t}function n3(e,t,r){return e[t]=r,r}function Zu({database:e,table:t}){e||(e=wM),at();let r=r3(e),n=(0,Vt.join)((0,er.getHdbBasePath)(),qc),s=(0,er.get)(F.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,er.get)(F.STORAGE_PATH)||((0,Is.existsSync)(n)?n:(0,Vt.join)((0,er.getHdbBasePath)(),JE));let a=(0,Vt.join)(n,(i?t:e)+".mdb"),c=ba.get(a);if(!c||c.status==="closed"){let l=new AM.default(a,!1);c=(0,Vf.open)(l),ba.set(a,c)}return c.auditStore||(c.auditStore=TR(c)),c}async function mw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,ba.delete(r.path),r.status==="open"&&(await r.close(),await OE.remove(r.path));if(r||(r=Zu({database:e,table:null}),r.status==="open"&&(await r.close(),await OE.remove(r.path))),e==="data"){for(let n in Sn)delete Sn[n];delete Sn[$R]}delete De[e],CE.forEach(n=>n(e)),await Kb(r)}function s3(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&bM[r.indexed.type]?.useObjectStore,s=new LE(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=bM[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Dr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=wM);let h=Zu({database:r,table:t}),E=De[r];Dr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let C=new LE(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let I,k;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let W=h.auditStore;S=a.find(ye=>ye.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=ET(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,er.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Dr.trace(`${t} table loading, opening primary store`);let ue=new LE(!1,!0);ue.compression=S.compression;let ce=t+"/";if(y=h.dbisDb=h.openDB(FR.INTERNAL_DBIS_NAME,C),X(),y.get(ce))return k&&k(),jd(),Ze(e);let te=wR(h.openDB(ce,ue),h);h.databaseName=r,te.tableId=y.get(Gf),Dr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Gf,te.tableId+1),S.tableId=te.tableId,g=n3(E,t,MR({primaryStore:te,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(ce,S)}let J=g.indices;y=y||(h.dbisDb=h.openDB(FR.INTERNAL_DBIS_NAME,C)),g.dbisDB=y;let G=[];for(let{key:W,value:ue}of y.getRange({start:!0})){let[ce,te]=W.toString().split("/");if(te===""&&(te=ue.name),te){if(ce!==t)continue}else continue;let ye=a.find(Ye=>Ye.name===te),Ae=!ye?.indexed&&ue.indexed&&!ue.isPrimaryKey;if((!ye||Ae)&&(X(),I=!0,ye||y.remove(W),Ae)){let Ye=g.indices[ce];Ye&&G.push(Ye)}}let H=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(I=!0,W.relationship))continue;let ue=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:ue,configurable:!0});let ce=y.get(ue);if(W.isPrimaryKey){if(ce=ce||y.get(ue=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ce.expiration||void 0)||(+s||void 0)!==(+ce.eviction||void 0)||W.type!==ce.type){let ye={...ce};typeof c=="boolean"&&(c&&g.enableAuditing(c),ye.audit=c),n&&(ye.expiration=+n),s&&(ye.eviction=+s),l!==void 0&&(ye.sealed=l),d!==void 0&&(ye.replicate=d),W.type&&(ye.type=W.type),I=!0,X(),y.put(ue,ye)}continue}ce?.attribute&&!ce.name&&(ce.indexed=!0);let te=!ce||ce.type!==W.type||JSON.stringify(ce.indexed)!==JSON.stringify(W.indexed)||ce.nullable!==W.nullable||ce.version!==W.version||JSON.stringify(ce.properties)!==JSON.stringify(W.properties)||JSON.stringify(ce.elements)!==JSON.stringify(W.elements);if(W.indexed){let ye=s3(ue,h,W);(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<PE.workerData?.restartNumber)&&(I=!0,X(),ce=y.get(ue),(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<PE.workerData?.restartNumber)&&(I=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ce?.lastIndexedKey??void 0,W.indexingPID=process.pid,ye.isIndexing=!0,Object.defineProperty(W,"dbi",{value:ye}),H.push(W))),y.put(ue,W)),ce?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),ye.indexNulls=W.indexNulls,J[W.name]=ye}else te&&(I=!0,X(),y.put(ue,W))}}finally{k&&k()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Dr.trace(`${t} table loading, running index`),H.length>0||G.length>0?g.indexingOperation=wAe(g,H,G):I&&kR.signalSchemaChange(new HR.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let W of NE)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Dr.trace(`${t} table loaded`),g;function X(){k||h.transactionSync(()=>({then(W){k=W}}))}o(X,"startTxn")}async function wAe(e,t,r){try{Dr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await kR.signalSchemaChange(new HR.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Vf.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let C=(0,XJ.getIndexedValues)(y);if(C)for(let I=0,k=C.length;I<k;I++)R.put(C[I],f)}catch(S){a[g]||(a[g]=!0,Dr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Dr.error(h)}),PE.workerData&&PE.workerData.restartNumber!==e3.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>AAe?await s:d>IAe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await kR.signalSchemaChange(new HR.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Dr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Dr.error("Error in indexing",n)}}function NAe({table:e,database:t}){let r=Zu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Dl(e){return NE.push(e),{remove(){let t=NE.indexOf(e);t>-1&&NE.splice(t,1)}}}function Vp(e){return CE.push(e),{remove(){let t=CE.indexOf(e);t>-1&&CE.splice(t,1)}}}function ET(){let e=(0,er.get)(F.STORAGE_COMPRESSION),t=(0,er.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,er.get)(F.STORAGE_COMPRESSION_THRESHOLD)||t3,n={startingOffset:32};return t&&(n.dictionary=OE.readFileSync(t)),r&&(n.threshold=r),e&&n}var er,FR,Vf,Vt,Is,qf,AM,OE,IM,XJ,kR,HR,PE,ZJ,e3,qR,RAe,Dr,wM,$R,t3,BR,Sn,De,Gf,NE,CE,GR,ba,$f,AAe,IAe,we=se(()=>{er=b(me()),FR=b(Yt()),Vf=require("lmdb"),Vt=require("path"),Is=require("fs"),qf=b(Rt());py();AM=b(Om());q();OE=b(require("fs-extra")),IM=b(ii()),XJ=b(Ln()),kR=b(ko()),HR=b(as()),PE=require("worker_threads"),ZJ=b(Q()),e3=b(nt());ki();Qc();Zn();JJ();qR=b(Cm()),{forComponent:RAe}=ZJ.default;o(LE,"OpenDBIObject");Dr=RAe("storage"),wM="data",$R=Symbol("defined-tables"),t3=((0,er.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,er.initSync)();BR=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Sn=Object.create(null),De=Object.create(null);(0,IM._assignPackageExport)("databases",De);(0,IM._assignPackageExport)("tables",Sn);Gf=Symbol.for("next-table-id"),NE=[],CE=[],ba=new Map;o(bAe,"getTables");o(at,"getDatabases");o(jd,"resetDatabases");o(wE,"readMetaDb");o(r3,"ensureDB");o(n3,"setTable");o(Zu,"database");o(mw,"dropDatabase");o(s3,"openIndex");o(Ze,"table");AAe=1e3,IAe=10;o(wAe,"runIndexing");o(NAe,"dropTableMeta");o(Dl,"onUpdatedTable");o(Vp,"onRemovedDB");o(ET,"getDefaultCompression")});var ae=v(be=>{"use strict";var xc=require("path"),l3=require("fs-extra"),jn=Q(),i3=require("fs-extra"),VR=require("os"),CAe=require("net"),OAe=require("recursive-iterator"),Mr=(q(),M(z)),{PACKAGE_ROOT:PAe}=Ct(),LAe=Rb(),o3=require("papaparse"),KR=require("moment"),{inspect:DAe}=require("util"),a3=require("is-number"),MAe=require("minimist"),vAe=require("https"),UAe=require("http"),xAe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,u3=require("util").promisify(setTimeout),BAe=100,FAe=5,kAe="",HAe=4,c3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=ws;be.isEmptyOrZeroLength=bo;be.arrayHasEmptyValues=$Ae;be.arrayHasEmptyOrZeroLengthValues=VAe;be.buildFolderPath=KAe;be.isBoolean=d3;be.errorizeMessage=GAe;be.stripFileExtension=WAe;be.autoCast=zAe;be.autoCastJSON=f3;be.autoCastJSONDeep=CM;be.removeDir=jAe;be.compareVersions=QAe;be.isCompatibleDataVersion=JAe;be.escapeRawValue=XAe;be.unescapeValue=ZAe;be.stringifyProps=eIe;be.timeoutPromise=rIe;be.isClusterOperation=sIe;be.getClusterUser=oIe;be.checkGlobalSchemaTable=iIe;be.getHomeDir=p3;be.getPropsFilePath=tIe;be.promisifyPapaParse=aIe;be.removeBOM=h3;be.createEventPromise=cIe;be.checkProcessRunning=lIe;be.checkSchemaTableExist=uIe;be.checkSchemaExists=E3;be.checkTableExists=_3;be.getStartOfTomorrowInSeconds=dIe;be.getLimitKey=fIe;be.isObject=YAe;be.isNotEmptyAndHasValue=qAe;be.autoCasterIsNumberCheck=m3;be.backtickASTSchemaItems=mIe;be.isPortTaken=nIe;be.createForkArgs=pIe;be.autoCastBoolean=hIe;be.asyncSetTimeout=u3;be.getTableHashAttribute=EIe;be.doesSchemaExist=_Ie;be.doesTableExist=gIe;be.stringifyObj=SIe;be.ms_to_time=TIe;be.changeExtension=yIe;be.getEnvCliRootPath=OM;be.noBootFile=RIe;be.httpRequest=bIe;be.transformReq=AIe;be.convertToMS=IIe;be.PACKAGE_ROOT=PAe;function GAe(e){return e instanceof Error?e:new Error(e)}o(GAe,"errorizeMessage");function ws(e){return e==null}o(ws,"isEmpty");function qAe(e){return!ws(e)&&(e||e===0||e===""||d3(e))}o(qAe,"isNotEmptyAndHasValue");function bo(e){return ws(e)||e.length===0||e.size===0}o(bo,"isEmptyOrZeroLength");function $Ae(e){if(ws(e))return!0;for(let t=0;t<e.length;t++)if(ws(e[t]))return!0;return!1}o($Ae,"arrayHasEmptyValues");function VAe(e){if(bo(e))return!0;for(let t=0;t<e.length;t++)if(bo(e[t]))return!0;return!1}o(VAe,"arrayHasEmptyOrZeroLengthValues");function KAe(...e){try{return e.join(xc.sep)}catch{console.error(e)}}o(KAe,"buildFolderPath");function d3(e){return ws(e)?!1:e===!0||e===!1}o(d3,"isBoolean");function YAe(e){return ws(e)?!1:typeof e=="object"}o(YAe,"isObject");function WAe(e){return bo(e)?kAe:e.slice(0,-HAe)}o(WAe,"stripFileExtension");function zAe(e){return ws(e)||e===""||typeof e!="string"?e:c3[e]!==void 0?c3[e]:m3(e)===!0?Number(e):xAe.test(e)?new Date(e):e}o(zAe,"autoCast");function f3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(f3,"autoCastJSON");function CM(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=CM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=CM(r);n!==r&&(e[t]=n)}return e}else return f3(e)}o(CM,"autoCastJSONDeep");function m3(e){if(e.startsWith("0.")&&a3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&a3(e))}o(m3,"autoCasterIsNumberCheck");async function jAe(e){if(bo(e))throw new Error(`Directory path: ${e} does not exist`);try{await i3.emptyDir(e),await i3.remove(e)}catch(t){throw jn.error(`Error removing files in ${e} -- ${t}`),t}}o(jAe,"removeDir");function QAe(e,t){if(bo(e)){jn.info("Invalid current version sent as parameter.");return}if(bo(t)){jn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(QAe,"compareVersions");function JAe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(JAe,"isCompatibleDataVersion");function XAe(e){if(ws(e))return e;let t=String(e);return t==="."?Mr.UNICODE_PERIOD:t===".."?Mr.UNICODE_PERIOD+Mr.UNICODE_PERIOD:t.replace(Mr.FORWARD_SLASH_REGEX,Mr.UNICODE_FORWARD_SLASH)}o(XAe,"escapeRawValue");function ZAe(e){if(ws(e))return e;let t=String(e);return t===Mr.UNICODE_PERIOD?".":t===Mr.UNICODE_PERIOD+Mr.UNICODE_PERIOD?"..":String(e).replace(Mr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(ZAe,"unescapeValue");function eIe(e,t){if(ws(e))return jn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+VR.EOL}!bo(n)&&n[0]===";"?r+=" "+n+s+VR.EOL:bo(n)||(r+=n+"="+s+VR.EOL)}catch{jn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(eIe,"stringifyProps");function p3(){let e;try{e=VR.homedir()}catch{e=process.env.HOME}return e}o(p3,"getHomeDir");function tIe(){let e=xc.join(p3(),Mr.HDB_HOME_DIR_NAME,Mr.BOOT_PROPS_FILE_NAME);return l3.existsSync(e)||(e=xc.join(__dirname,"../","hdb_boot_properties.file")),e}o(tIe,"getPropsFilePath");function rIe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(rIe,"timeoutPromise");async function nIe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=CAe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(nIe,"isPortTaken");function sIe(e){try{return Mr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(sIe,"isClusterOperation");function iIe(e,t){let r=(we(),M(mt)).getDatabases();if(!r[e])return YR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return YR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(iIe,"checkGlobalSchemaTable");function oIe(e,t){if(ws(t)){jn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ws(e)||bo(e)){jn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){jn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){jn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(oIe,"getClusterUser");function aIe(){o3.parsePromise=function(e,t,r){return new Promise(function(n,s){o3.parse(e,{header:!0,transformHeader:h3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(aIe,"promisifyPapaParse");function h3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(h3,"removeBOM");function cIe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;jn.info(`Got cluster status event response: ${DAe(s)}`);try{i.cancel()}catch{jn.error("Error trying to cancel timeout.")}n(s)})})}o(cIe,"createEventPromise");async function lIe(e){let t=!0,r=0;do await u3(BAe*r++),(await LAe.findPs(e)).length>0&&(t=!1);while(t&&r<FAe);if(t)throw new Error(`process ${e} was not started`)}o(lIe,"checkProcessRunning");function uIe(e,t){let r=E3(e);if(r)return r;let n=_3(e,t);if(n)return n}o(uIe,"checkSchemaTableExist");function E3(e){let{getDatabases:t}=(we(),M(mt));if(!t()[e])return YR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(E3,"checkSchemaExists");function _3(e,t){let{getDatabases:r}=(we(),M(mt));if(!r()[e][t])return YR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(_3,"checkTableExists");function dIe(){let e=KR().utc().add(1,"d").startOf("d").unix(),t=KR().utc().unix();return e-t}o(dIe,"getStartOfTomorrowInSeconds");function fIe(){return KR().utc().format("DD-MM-YYYY")}o(fIe,"getLimitKey");function mIe(e){try{let t=new OAe(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){jn.error("Got an error back ticking items."),jn.error(t)}}o(mIe,"backtickASTSchemaItems");function pIe(e){return[e]}o(pIe,"createForkArgs");function hIe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(hIe,"autoCastBoolean");function EIe(e,t){let{getDatabases:r}=(we(),M(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(EIe,"getTableHashAttribute");function _Ie(e){let{getDatabases:t}=(we(),M(mt));return t()[e]!==void 0}o(_Ie,"doesSchemaExist");function gIe(e,t){let{getDatabases:r}=(we(),M(mt));return r()[e]?.[t]!==void 0}o(gIe,"doesTableExist");function SIe(e){try{return JSON.stringify(e)}catch{return e}}o(SIe,"stringifyObj");function TIe(e){let t=KR.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(TIe,"ms_to_time");function yIe(e,t){let r=xc.basename(e,xc.extname(e));return xc.join(xc.dirname(e),r+t)}o(yIe,"changeExtension");function OM(){if(process.env[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=MAe(process.argv);if(e[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(OM,"getEnvCliRootPath");var NM;function RIe(){if(NM)return NM;let e=OM();if(OM()&&l3.pathExistsSync(xc.join(e,Mr.HDB_CONFIG_FILE)))return NM=!0,!0}o(RIe,"noBootFile");function bIe(e,t){let r;return e.protocol==="http:"?r=UAe:r=vAe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(bIe,"httpRequest");function AIe(e){if(!e.schema&&!e.database){e.schema=Mr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(AIe,"transformReq");function IIe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(IIe,"convertToMS");var YR=zr()});var me=v((y3,R3)=>{"use strict";var PM=require("fs-extra"),Eu=require("path"),g3=require("os"),wIe=require("properties-reader"),ME=Q(),DE=ae(),Ge=(q(),M(z)),WR=St(),NIe="Error initializing environment manager",zR="BOOT_PROPS_FILE_PATH",S3=!1,CIe={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Aa={};Object.assign(y3,R3.exports={BOOT_PROPS_FILE_PATH:zR,getHdbBasePath:OIe,setHdbBasePath:PIe,get:T3,initSync:DIe,setProperty:rt,initTestEnvironment:MIe});function OIe(){return Aa[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(OIe,"getHdbBasePath");function PIe(e){Aa[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(PIe,"setHdbBasePath");function T3(e){let t=WR.getConfigValue(e);return t===void 0?Aa[e]:t}o(T3,"get");function rt(e,t){CIe[e]&&(Aa[e]=t),WR.updateConfigObject(e,t)}o(rt,"setProperty");function LIe(){let e;try{e=DE.getPropsFilePath(),PM.accessSync(e,PM.constants.F_OK|PM.constants.R_OK),S3=!0;let t=wIe(e);return Aa[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),Aa[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Aa[zR]=e,!0}catch{return ME.trace(`Environment manager found no properties file at ${e}`),!1}}o(LIe,"doesPropFileExist");function DIe(e=!1){try{(S3||LIe()||DE.noBootFile()||e)&&(WR.initConfig(e),Aa[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=WR.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ME.error(NIe),ME.error(t),console.error(t),process.exit(1)}}o(DIe,"initSync");function MIe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Eu.join(__dirname,"../../","unitTests");Aa[zR]=Eu.join(l,"hdb_boot_properties.file"),rt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Eu.join(l,"settings.test")),rt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,g3.userInfo()?g3.userInfo().username:void 0),rt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),rt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Eu.join(l,"envDir","log")),rt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),rt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),rt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),rt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Eu.join(l,"envDir")),rt(Ge.CONFIG_PARAMS.STORAGE_PATH,Eu.join(l,"envDir")),s&&(rt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,T3(Ge.CONFIG_PARAMS.HTTP_PORT)),rt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),rt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),rt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),rt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),rt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),rt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,DE.isEmpty(i)?!1:i),rt(Ge.CONFIG_PARAMS.HTTP_CORS,DE.isEmpty(i)?!1:i),rt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),rt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Eu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),rt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,DE.isEmpty(c)?!1:c),a&&(rt("CORS_ACCESSLIST",a),rt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),rt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),rt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),rt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${zR}. Please check your boot props and settings files`;ME.fatal(r),ME.error(t)}}o(MIe,"initTestEnvironment")});var C3=v((QGe,N3)=>{"use strict";var{promises:Kf,createReadStream:vIe,createWriteStream:UIe}=require("fs"),{createGzip:xIe}=require("zlib"),{promisify:BIe}=require("util"),{pipeline:FIe}=require("stream"),kIe=BIe(FIe),DM=require("path"),w3=me();w3.initSync();var jR=Q(),{CONFIG_PARAMS:HIe,ITC_EVENT_TYPES:zGe}=(q(),M(z)),{onMessageFromWorkers:jGe}=nt(),{convertToMS:b3}=ae(),{onStorageReclamation:GIe}=(_R(),M(fJ)),qIe=6e4,$Ie="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",VIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",LM,A3;N3.exports=KIe;function KIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(GIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error($Ie);if(!i)throw new Error(VIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=b3(r));let d;return LM=Date.now(),jR.trace("Log rotate enabled, maxSize:",t,"interval:",r),A3=setInterval(async()=>{if(l){let f;f=await Kf.stat(e.path),f.size>=l&&(d=await I3(e.path,i))}if(u&&Date.now()-LM>=u&&(d=await I3(e.path,i),LM=Date.now()),n||c){let f=b3(n??"1M")/(1+c);c=0;let m=await Kf.readdir(i);for(let p of m)try{let h=await Kf.stat(DM.join(i,p));Date.now()-h.mtimeMs>f&&await Kf.unlink(DM.join(i,p))}catch(h){jR.error("Error trying to remove log",p,h)}}},a??qIe).unref(),{end(){clearInterval(A3)},getLastRotatedLogPath(){return d}}}o(KIe,"logRotator");async function I3(e,t){let r=w3.get(HIe.LOGGING_ROTATION_COMPRESS),n=DM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Kf.rename(e,n),r&&(e=n,n+=".gz",await kIe(vIe(e),xIe(),UIe(n)),await Kf.unlink(e)),jR.closeLogFile(),jR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(I3,"moveLogFile")});var M3={};Re(M3,{RootConfigWatcher:()=>MM});var O3,P3,L3,QR,D3,MM,v3=se(()=>{O3=b(require("chokidar")),P3=require("node:fs/promises"),L3=b(St()),QR=require("node:stream"),D3=require("yaml"),MM=class extends QR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,L3.getConfigFilePath)(),this.ready=(0,QR.once)(this,"ready"),this.#t=O3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,P3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,D3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=v((tqe,sb)=>{"use strict";var Ia=require("fs-extra"),{workerData:YIe,threadId:WIe,isMainThread:H3}=require("worker_threads"),xE=require("path"),G3=require("yaml"),q3=require("properties-reader"),Yr=(q(),M(z)),U3=$c(),zIe=require("os"),{PACKAGE_ROOT:GM}=Ct(),{_assignPackageExport:jIe}=ii(),{Console:QIe}=require("console"),UM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),x3=new Map,{join:wa}=xE,B3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},JIe={STDOUT:"stdOut",STDERR:"stdErr"},eqe=wa(GM,"logs"),XIe=wa(GM,"config/yaml/",Yr.HDB_DEFAULT_CONFIG_FILE),ZIe=1e4,BE,FE,JR,Ao,xM,vM,ZR,Ut,Ns,eb,tb,Yf,UE,vE;function XR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=xE.dirname(n)):t.root?n=wa(t.root,xM):(n=Ut.path,t.root||(t.root=xE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Ut?.level??cr.info,$3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ut.path===e.path&&r)}o(XR,"updateLogger");function $3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o($3,"updateConditional");async function BM(){vE||(vE=new Swe,await vE.ready,vE.on("change",BM));let e=vE.config,t=e.logging??{};XR(Ut,t),ZR=Ut.path,BE=t.console??!1,t.external&&XR(Ns,t.external);for(let r in e){let n=e[r];n.logging?XR(Ut.forComponent(r),n.logging,r):Ut.hasComponent(r)&&XR(Ut.forComponent(r),t,r)}}o(BM,"updateLogSettings");var FM=class extends QIe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Cn="trace",this.level<=cr.trace&&super.info(...t),Cn="info"}debug(...t){Cn="debug",this.level<=cr.debug&&super.info(...t),Cn="info"}info(...t){Cn="info",this.level<=cr.info&&super.info(...t),Cn="info"}warn(...t){Cn="warn",this.level<=cr.warn&&super.warn(...t),Cn="info"}error(...t){Cn="error",this.level<=cr.error&&super.error(...t),Cn="info"}fatal(...t){Yf=!0;try{Cn="fatal",this.level<=cr.fatal&&super.error(...t),Cn="info"}finally{Yf=!1}}notify(...t){Yf=!0;try{Cn="notify",this.level<=cr.notify&&super.info(...t),Cn="info"}finally{Yf=!1}}withTag(t){return K3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};UE===void 0&&V3();sb.exports={notify:cwe,fatal:lwe,error:HM,warn:uwe,info:iwe,debug:awe,trace:owe,logLevel:Ao,loggerWithTag:K3,suppressLogging:nwe,initLogSettings:V3,logCustomLevel:dwe,closeLogFile:Y3,createLogger:nb,logsAtLevel:twe,getLogFilePath:o(()=>ZR,"getLogFilePath"),forComponent:o(e=>Ut.forComponent(e),"forComponent"),setMainLogger:_we,setLogLevel:mwe,OUTPUTS:JIe,AuthAuditLog:gwe,start:BM,startOnMainThread:BM,errorToString:Ewe,disableStdio:ewe};function ewe(){UM=o(function(){},"nativeStdWrite")}o(ewe,"disableStdio");sb.exports.externalLogger={notify(...e){Ns.notify(...e)},fatal(...e){Ns.fatal(...e)},error(...e){Ns.error(...e)},warn(...e){Ns.warn(...e)},info(...e){Ns.info(...e)},debug(...e){Ns.debug(...e)},trace(...e){Ns.trace(...e)},withTag(e){return Ns.withTag(e)}};jIe("logger",sb.exports.externalLogger);function twe(e){return cr[Ao]<=cr[e]}o(twe,"logsAtLevel");function V3(e=!1){try{if(UE===void 0||e){Y3();let t=fwe(),r=U3(["ROOTPATH"]);try{UE=q3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ia.pathExistsSync(wa(r.ROOTPATH,Yr.HDB_CONFIG_FILE)))throw s}let n;if({level:Ao,configLogPath:vM,toFile:FE,logConsole:BE,rotation:n,toStream:JR}=pwe(r.ROOTPATH?wa(r.ROOTPATH,Yr.HDB_CONFIG_FILE):UE.get("settings_path")),xM=Yr.LOG_NAMES.HDB,ZR=wa(vM,xM),Ut=nb({path:ZR,level:Ao,stdStreams:JR,rotation:n}),Ns=Ut.forComponent("external"),Ns.tag=null,H3)try{require("segfault-handler").registerHandler(wa(vM,"crash.log"))}catch{}}}catch(t){if(UE=void 0,t.code===Yr.NODE_ERROR_CODES.ENOENT||t.code===Yr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=U3(Object.keys(Yr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Yr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Yr.CONFIG_PARAMS.LOGGING_LEVEL){Ao=a;continue}i===Yr.CONFIG_PARAMS.LOGGING_CONSOLE&&(BE=i)}let{defaultLevel:n}=hwe();FE=!1,JR=!0,Ao=Ao===void 0?n:Ao,Ut=nb({level:Ao}),Ns=Ut.forComponent("external"),Ns.tag=null;return}throw HM("Error initializing log settings"),HM(t),t}process.env.DEV_MODE&&(JR=!0),rwe()}o(V3,"initLogSettings");var Bc=!0;function rwe(){FE&&(process.stdout.write=function(e){return typeof e=="string"&&Bc&&BE&&(e=e.toString(),e[e.length-1]===`
131
+ `),uE(e,404,0,e.requestId)}function uE(e,t,r,n){let s=dE.logging;if(s){ND||(ND=ga.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";ND[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+KRe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function KRe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function U2(){return lE||(lE=new BigInt64Array([1n]),lE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",lE.buffer))),Number(Atomics.add(lE,0,1n))}var A2,ga,eR,Lr,I2,w2,N2,C2,O2,nR,CD,P2,FRe,cE,Zy,tR,OD,dE,kRe,T2,y2,PD,wD,R2,ND,lE,vD=se(()=>{A2=require("node:net"),ga=b(Q()),eR=require("node:worker_threads"),Lr=b(me());q();I2=b(St()),w2=b(nt()),N2=b(ps()),C2=require("node:http2"),O2=require("node:https"),nR=require("node:http");Tp();Sp();Zn();ds();CD=require("node:stream");Fr();RD();Ch();ID();P2=require("ws");Bh();({errorToString:FRe}=ga.default);ve.http=MD;ve.request=$Re;ve.ws=VRe;ve.upgrade=v2;cE={},Zy={},tR={},OD=[],dE={},kRe=!0;o(HRe,"handleApplication");o(GRe,"getHttpOptions");o(L2,"deliverSocket");T2=new Map;o(qRe,"proxyRequest");o(LD,"registerServer");o(DD,"getPorts");o(MD,"httpServer");o(D2,"getHTTPServer");o(rR,"makeCallbackChain");o(M2,"unhandled");o($Re,"onRequest");Object.defineProperty(nR.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});y2=[],PD={};o(v2,"onUpgrade");wD=[],R2={};o(VRe,"onWebSocket");o(b2,"defaultNotFound");o(uE,"logRequest");o(KRe,"headersToString");o(U2,"getRequestId")});var zT={};Re(zT,{getComponentName:()=>iR,loadComponent:()=>lR,loadComponentDirectories:()=>k2,setErrorReporter:()=>WRe});function k2(e,t){t&&(xD=t),e&&(HD=e);let r=[];if((0,$t.existsSync)(UD)){let s=(0,$t.readdirSync)(UD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Vr.join)(UD,a);r.push(lR(c,xD,pb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(lR(n,xD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{F2=!0})}function WRe(e){aR=e}function zRe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{da.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(da.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Vr.join)(e,"node_modules");(0,$t.existsSync)(s)||(0,$t.mkdirSync)(s);let i=(0,Vr.join)(s,"harperdb");if((0,$t.existsSync)(i)){if((0,$t.realpathSync)(i)===(0,$t.realpathSync)(kD.PACKAGE_ROOT))return t();(0,$t.rmSync)(i,{recursive:!0,force:!0})}(0,$t.symlinkSync)(kD.PACKAGE_ROOT,i,"dir"),t()}finally{da.primaryStore.unlock(e,0)}})}function H2(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return da.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(H2(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{da.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function lR(e,t,r,n,s,i){let a=(0,$t.realpathSync)(e);if(oR.has(a))return oR.get(a);oR.set(a,!0),s&&(HD=s);try{let c,l=(0,Vr.join)(e,"harperdb-config.yaml");if((0,$t.existsSync)(l)?c=n?(0,uR.getConfigObj)():(0,FD.parseDocument)((0,$t.readFileSync)(l,"utf8")).toJSON():!n&&(0,$t.existsSync)(l=(0,Vr.join)(e,"config.yaml"))?c=(0,FD.parseDocument)((0,$t.readFileSync)(l,"utf8")).toJSON():c=$y,!n)try{await zRe(e)}catch(m){Sa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Sa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=cR,d={};for(let m in c){let p=n?m:`${(0,Vr.basename)(e)}.${m}`;cR=m;let h=c[m];if(!h)continue;Xi.loading(p);let E,g=h.package;try{if(g){let I=null;if(n)I=(0,Vr.join)(e,"components",m);else{let k=e;for(I=(0,Vr.join)(k,"node_modules",m);!(0,$t.existsSync)(I);){if(k=(0,Vr.dirname)(k),k.length<(0,B2.getHdbBasePath)().length){I=null;break}I=(0,Vr.join)(k,"node_modules",m)}}if(I)E=await lR(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=YRe[m];if(!E){Xi.loaded(p,`Application component '${p}' processed`);continue}let R=o(I=>(I.origin=r,Ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,C=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Xi.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Sa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new Wy(m,e,l,t,ve);await H2(I,E),Xi.loaded(p,`Component '${p}' loaded successfully`);continue}if(BD.isMainThread&&(E=await E.startOnMainThread?.({server:ve,ensureTable:R,port:C,securePort:y,resources:t,...h})||E,n&&S))for(let I of[C,y])try{if(+I&&!x2.includes(I)){let k=GD.get(F.HTTP_SESSIONAFFINITY);k&&Sa.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!Cg)&&(x2.push(I),VO(I,k))}}catch(k){console.error("Error listening on socket",I,k,m)}if(t.isWorker&&(E=await E.start?.({server:ve,ensureTable:R,port:C,securePort:y,resources:t,...h})||E),HD.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new Qy({config:h,name:m,directory:e,module:E,resources:t});d[m]=await p2(I)}Xi.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Vr.basename)(e)}' due to: ${R.message}`,aR?.(R),((0,fE.getWorkerIndex)()===0?console:Sa.default).error(R),t.set(h.path||"/",new Vc(R),null,!0),Xi.failed(p,R,`Could not load component '${p}'`)}}if(cR=u,BD.isMainThread&&!F2&&i&&(0,fE.watchDir)(e,async()=>k2()),c.extensionModule||c.pluginModule){let m=await gg((0,Vr.join)(e,c.extensionModule||c.pluginModule));return oR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;aR?.(new Error(m)),((0,fE.getWorkerIndex)()===0?console:Sa.default).error(m),Xi.failed((0,Vr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Sa.default.warn(`Component ${m} from (${(0,Vr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,aR?.(c),t.set("",new Vc(c))}}var $t,Vr,BD,FD,GD,kD,Sa,fE,B2,uR,UD,HD,F2,xD,YRe,x2,oR,aR,cR,iR,Ch=se(()=>{$t=require("node:fs"),Vr=require("node:path"),BD=require("node:worker_threads"),FD=require("yaml"),GD=b(me()),kD=b(Ct());q();Xv();xU();cH();pH();hH();fG();eQ();tQ();nQ();Sa=b(Q());lQ();fE=b(nt());yw();Fr();we();YO();B2=b(me());yQ();qT();OQ();fs();$Q();uR=b(St());Tp();Db();l2();h2();vD();Mh();Wm();iD();UD=(0,uR.resolvePath)(GD.get(F.COMPONENTSROOT)),HD=new Map;o(k2,"loadComponentDirectories");YRe={REST:Lg,rest:Lg,graphql:eA,graphqlSchema:xb,roles:Tw,jsResource:Rw,fastifyRoutes:xL,login:Aw,static:FL,operationsApi:GL,customFunctions:{},http:sR,clustering:WL,replication:Yo,authentication:bh,mqtt:XL,loadEnv:kL,logging:Sa.default,dataLoader:HL},x2=[],oR=new Map;o(WRe,"setErrorReporter");iR=o(()=>cR,"getComponentName");o(zRe,"symlinkHarperModule");o(H2,"sequentiallyHandleApplication");o(lR,"loadComponent")});var UT=v((HHe,G2)=>{var{isMainThread:qD}=require("worker_threads"),{getTables:jRe}=(we(),M(mt)),{loadComponentDirectories:QRe,loadComponent:JRe}=(Ch(),M(zT)),{resetResources:XRe}=(va(),M(Mb)),ZRe=St(),{dirname:ebe}=require("path"),{getConnection:tbe}=hr(),rbe=me(),{CONFIG_PARAMS:nbe}=(q(),M(z)),{loadCertificates:sbe}=ps(),{installApplications:ibe}=(YT(),M(KT)),{loadAndWatchLicensesDir:obe}=(Bh(),M(oy)),$D=new Map;async function abe(e=!1){!qD&&rbe.get(nbe.CLUSTERING_ENABLED)&&tbe();try{qD&&await ibe()}catch(n){console.error(n)}let t=XRe();jRe(),t.isWorker=e,qD&&obe(),await sbe(),await JRe(ebe(ZRe.getConfigFilePath()),t,"hdb",!0,$D),await QRe($D,t);let r=[];for(let[n]of $D)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(abe,"loadRootComponents");G2.exports.loadRootComponents=abe});var nt=v((qHe,Di)=>{"use strict";fb();var{Worker:cbe,MessageChannel:lbe,parentPort:go,isMainThread:zD,threadId:ube,workerData:So}=require("worker_threads"),{PACKAGE_ROOT:dbe}=Ct(),{join:K2,isAbsolute:fbe,extname:mbe}=require("path"),{server:Y2}=(Fr(),M(_m)),{watch:pbe,readdir:hbe}=require("fs/promises"),{totalmem:q2}=require("os"),Nf=(q(),M(z)),W2=me(),Li=Q(),{randomBytes:Ebe}=require("crypto"),{_assignPackageExport:_be}=ii(),$2=1024*1024,Ta=[],Qs=[],gbe=50,jD=1e4,Sbe="restart",z2="request_thread_info",j2="resource_report",Q2="thread_info",J2="added-port",Tbe="ack",VD;_be("threads",Qs);Di.exports={startWorker:KD,restartWorkers:JD,shutdownWorkers:nJ,shutdownWorkersNow:Ibe,workers:Ta,setMonitorListener:Mbe,onMessageFromWorkers:wbe,onMessageByType:iJ,broadcast:Cbe,broadcastWithAcknowledgement:Pbe,setChildListenerByType:Abe,getWorkerIndex:X2,getWorkerCount:Z2,getTicketKeys:tJ,setMainIsWorker:Rbe,setTerminateTimeout:ybe,restartNumber:So?.restartNumber||1};Qs.onMessageByType=iJ;Qs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Qs.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Di.exports.whenThreadsStarted=new Promise(e=>{Di.exports.threadsHaveStarted=e});var QD;function ybe(e){jD=e}o(ybe,"setTerminateTimeout");function X2(){return So?So.workerIndex:QD?0:void 0}o(X2,"getWorkerIndex");function Z2(){return So?So.workerCount:QD?1:void 0}o(Z2,"getWorkerCount");function Rbe(e){QD=e,Di.exports.threadsHaveStarted()}o(Rbe,"setMainIsWorker");var eJ=1,dR;function tJ(){return dR||(dR=zD?Ebe(48):So.ticketKeys,dR)}o(tJ,"getTicketKeys");Object.defineProperty(Y2,"workerIndex",{get(){return X2()}});Object.defineProperty(Y2,"workerCount",{get(){return Z2()}});var rJ={[z2](e,t){Lbe(t)},[j2](e,t){Dbe(t,e)}};function KD(e,t={}){let r=process.constrainedMemory?.()||q2();r=Math.min(r,q2(),2e4*$2);let n=W2.get(Nf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/$2/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Qs){let u=new lbe;u.existingPort=l,i.push(u),a.push(u.port2)}mbe(e)||(e+=".js");let c=new cbe(fbe(e)?e:K2(dbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:eJ=t.threadCount,name:t.name,restartNumber:Di.exports.restartNumber,ticketKeys:tJ()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:J2,port:l,threadId:c.threadId},[l]);return mR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>KD(e,t),c.on("error",l=>{Li.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Ta.splice(Ta.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<gbe?(t.unexpectedRestarts=c.unexpectedRestarts+1,KD(e,t)):Li.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{rJ[l.type]?.(l,c)}),Ta.push(c),Ube(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(KD,"startWorker");var bbe=[Nf.THREAD_TYPES.HTTP];async function JD(e=null,t=Math.max(eJ>3,1),r=!0){if(zD){try{process.chdir(process.cwd())}catch(a){Li.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=UT();await a()}Di.exports.restartNumber++,t<1&&(t=t*Ta.length);let n=[],s=[];for(let a of Ta.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Li.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Di.exports.restartNumber,type:Nf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=bbe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Li.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},jD*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===Nf.ITC_EVENT_TYPES.CHILD_STARTED&&(Li.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Li.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=uf();r&&(e==="http"||!e)&&W2.get(Nf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else go.postMessage({type:Sbe,workerType:e})}o(JD,"restartWorkers");function Abe(e,t){rJ[e]=t}o(Abe,"setChildListenerByType");function nJ(e){return JD(e,1/0,!1)}o(nJ,"shutdownWorkers");function Ibe(e){return nJ(e),Promise.all(Ta.map(t=>t.terminate()))}o(Ibe,"shutdownWorkersNow");var sJ=[];function wbe(e){sJ.push(e)}o(wbe,"onMessageFromWorkers");var YD=new Map;function iJ(e,t){let r=YD.get(e);r||YD.set(e,r=[]),r.push(t)}o(iJ,"onMessageByType");var Nbe=10;async function Cbe(e,t){let r=0;for(let n of Qs)try{n.postMessage(e),r++>Nbe&&(r=0,await new Promise(setImmediate))}catch(s){Li.error("Unable to send message to worker",s)}t&&aJ(e,null)}o(Cbe,"broadcast");var fR=new Map,Obe=1;function Pbe(e){return new Promise(t=>{let r=0;for(let n of Qs)try{let s=Obe++,i=o(()=>{fR.delete(s),--r===0&&t(),n!==go&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,fR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of fR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Li.error("Unable to send message to worker",s)}r===0&&t()})}o(Pbe,"broadcastWithAcknowledgement");function Lbe(e){e.postMessage({type:Q2,workers:oJ()})}o(Lbe,"sendThreadInfo");function oJ(){let e=Date.now();return Ta.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(oJ,"getChildWorkerInfo");function Dbe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Dbe,"recordResourceReport");var WD;function Mbe(e){WD=e}o(Mbe,"setMonitorListener");var vbe=1e3,V2=!1;function Ube(){V2||(V2=!0,setInterval(()=>{for(let e of Ta){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}WD&&WD()},vbe).unref())}o(Ube,"startMonitoring");var xbe=1e3;if(go&&So?.addPorts){mR(go);for(let e=0,t=So.addPorts.length;e<t;e++){let r=So.addPorts[e];r.threadId=So.addThreadIds[e],mR(r)}setInterval(()=>{let e=process.memoryUsage();go.postMessage({type:j2,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},xbe).unref(),VD=o(()=>new Promise((e,t)=>{go.on("message",r),go.postMessage({type:z2});function r(n){n.type===Q2&&(go.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else VD=oJ;Di.exports.getThreadInfo=VD;function mR(e,t){Qs.push(e),e.on("message",r=>{if(r.type===J2)r.port.threadId=r.threadId,mR(r.port);else if(r.type===Tbe){let n=fR.get(r.id);n&&n()}else aJ(r,e)}).on("close",()=>{Qs.splice(Qs.indexOf(e),1)}).on("exit",()=>{Qs.splice(Qs.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(mR,"addPort");function aJ(e,t){for(let n of sJ)n(e,t);let r=YD.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Li.error(s)}}o(aJ,"notifyMessageListeners");if(zD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await hbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(K2(s,a.name));try{for await(let{filename:a}of pbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await JD(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Di.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else go.on("message",async e=>{let{type:t}=e;t===Nf.ITC_EVENT_TYPES.SHUTDOWN&&(Di.exports.restartNumber=e.restartNumber,go.unref(),setTimeout(()=>{Li.warn("Thread did not voluntarily terminate",ube),process.exit(0)},jD).unref())})});var fJ={};Re(fJ,{onStorageReclamation:()=>mE,runReclamationHandlers:()=>tM,setAvailableSpaceRatioGetter:()=>Fbe});function mE(e,t,r){(r||(0,hR.getWorkerIndex)()===(0,hR.getWorkerCount)()-1)&&(pR.has(e)||pR.set(e,[]),pR.get(e).push({priority:0,handler:t}),eM||(eM=setTimeout(tM,lJ).unref()))}async function tM(){for(let[e,t]of pR)try{let r=await dJ(e),n=Bbe/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(ZD.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ZD.default.error?.("Error running storage reclamation handlers",r)}eM=setTimeout(tM,lJ).unref()}function Fbe(e){dJ=e??uJ}var XD,hR,ZD,ER,cJ,pR,Bbe,lJ,eM,uJ,dJ,_R=se(()=>{XD=require("node:fs/promises"),hR=b(nt()),ZD=b(Xn());q();ER=b(me()),cJ=b(ae());ER.default.initSync();pR=new Map,Bbe=ER.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,lJ=(0,cJ.convertToMS)(ER.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;o(mE,"onStorageReclamation");uJ=o(async e=>{if(XD.statfs){let t=await(0,XD.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),dJ=uJ;o(tM,"runReclamationHandlers");o(Fbe,"setAvailableSpaceRatioGetter")});var Ik={};Re(Ik,{ACTION_32_BIT:()=>RR,ACTION_64_BIT:()=>qbe,AUDIT_STORE_OPTIONS:()=>uh,Decoder:()=>Ll,HAS_BLOBS:()=>Jr,HAS_CURRENT_RESIDENCY_ID:()=>Ol,HAS_EXPIRATION_EXTENDED_TYPE:()=>gE,HAS_ORIGINATING_OPERATION:()=>_E,HAS_PREVIOUS_RESIDENCY_ID:()=>Pl,REMOTE_SEQUENCE_UPDATE:()=>IS,createAuditEntry:()=>Nl,getLastRemoved:()=>Hbe,openAuditStore:()=>TR,readAuditEntry:()=>At,removeAuditEntry:()=>yR,setAuditRetention:()=>Gbe,transactionKeyEncoder:()=>yJ});function TR(e){let t=e.auditStore=e.openDB(rM.AUDIT_STORE_NAME,{create:!1,...uh});t||(t=e.auditStore=e.openDB(rM.AUDIT_STORE_NAME,uh),pJ(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=sM;mE(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-nM/(1+i*i)})){try{m=yR(t,h,E)}catch(g){Cf.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=kbe){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,nM/10):(pJ(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,hE.getWorkerIndex)()===(0,hE.getWorkerCount)()-1&&c(),(0,hE.getWorkerIndex)()===0&&!mJ)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(mJ=!0,Cf.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function yR(e,t,r){let n=$be(r),s;if(n&Jr){s=At(r);let i=e.tableStores[s.tableId];if(i){let a=i.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Oo(()=>Ua(s.getValue(i)),i.rootStore)}}if((n&15)===iM){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function pJ(e,t){oM[0]=t,e.put(Symbol.for("last-removed"),RJ)}function Hbe(e){let t=e.get(Symbol.for("last-removed"));if(t)return RJ.set(t),oM[0]}function Gbe(e,t=sM){nM=e,sM=t}function Nl(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=bJ[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Pc.setFloat64(0,n):Js.set(aM),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Pc.setFloat64(h,e),h+=8,l&Ol&&R(u),l&Pl&&R(d),l&gE&&(Pc.setFloat64(h,f),h+=8),l&_E&&R(AJ[m]),i?g(i):Js[h++]=0,l?Pc.setUint32(n?8:0,p|l|3221225472):Js[n?8:0]=p;let E=Js.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let y=h;h+=1,h=(0,lu.writeKey)(S,Js,h);let C=h-y-1;C>127?C>16383?(Cf.error("Key or username was too large for audit entry",S),h=y+1,Js[y]=0):(Js.copyWithin(y+2,y+1,h),Pc.setUint16(y,C|32768),h++):Js[y]=C}function R(S){S<128?Js[h++]=S:S<16384?(Pc.setUint16(h,S|32768),h+=2):S<1056964608?(Pc.setUint32(h,S|3221225472),h+=4):(Js[h]=255,Pc.setUint32(h+1,S),h+=5)}}function $be(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Ll(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Ll(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Ol&&(m=n.readInt()),i&Pl&&(p=n.readInt()),i&gE&&(h=n.readFloat64()),i&_E){let y=n.readInt();E=AJ[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:bJ[i&7],tableId:c,nodeId:a,get recordId(){return(0,lu.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,lu.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,C,I){if(i&gR||i&pE&&!C)return S||(S=Oo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&pE&&I)return iw(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(gR|pE)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Cf.error("Reading audit entry error",n,e),{}}}var lu,SR,rM,hE,TJ,Cf,Js,Pc,yJ,uh,nM,kbe,oM,RJ,sM,mJ,gR,pE,hJ,iM,EJ,_J,gJ,SJ,RR,qbe,IS,Ol,Pl,_E,gE,Jr,bJ,AJ,Ll,ki=se(()=>{lu=require("ordered-binary"),SR=b(me()),rM=b(Yt());q();hE=b(nt()),TJ=b(ae());Qc();Cf=b(Q());ag();Zn();_R();(0,SR.initSync)();Js=Buffer.alloc(2816),Pc=new DataView(Js.buffer,Js.byteOffset,2816),yJ={writeKey(e,t,r){return e===EE?(t.set(EE,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,lu.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,lu.readKey)(e,t,r)}},uh={encoding:"binary",keyEncoder:yJ},nM=(0,TJ.convertToMS)((0,SR.get)(F.LOGGING_AUDITRETENTION))||86400*3,kbe=1e3,oM=new Float64Array(1),RJ=new Uint8Array(oM.buffer),sM=1e4,mJ=!1;o(TR,"openAuditStore");o(yR,"removeAuditEntry");o(pJ,"updateLastRemoved");o(Hbe,"getLastRemoved");o(Gbe,"setAuditRetention");gR=16,pE=32,hJ=1,iM=2,EJ=3,_J=4,gJ=5,SJ=6,RR=14,qbe=15,IS=11,Ol=512,Pl=1024,_E=2048,gE=4096,Jr=8192,bJ={put:hJ|gR,[hJ]:"put",delete:iM,[iM]:"delete",message:EJ|gR,[EJ]:"message",invalidate:_J|pE,[_J]:"invalidate",patch:gJ|pE,[gJ]:"patch",relocate:SJ,[SJ]:"relocate"},AJ={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Nl,"createAuditEntry");o($be,"readAction");o(At,"readAuditEntry");Ll=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var zU={};Re(zU,{ENTRY:()=>Kbe,HAS_EXPIRATION:()=>IR,HAS_RESIDENCY_ID:()=>mM,HAS_STRUCTURE_UPDATE:()=>OS,LAST_TIMESTAMP_PLACEHOLDER:()=>EE,LOCAL_TIMESTAMP:()=>Vbe,METADATA:()=>Od,NEW_TIMESTAMP_PLACEHOLDER:()=>wJ,NO_TIMESTAMP:()=>cM,PENDING_LOCAL_TIME:()=>pM,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>aM,RecordEncoder:()=>fM,TIMESTAMP_ASSIGN_LAST:()=>Wbe,TIMESTAMP_ASSIGN_NEW:()=>NJ,TIMESTAMP_ASSIGN_PREVIOUS:()=>CJ,TIMESTAMP_PLACEHOLDER:()=>bR,TIMESTAMP_RECORD_PREVIOUS:()=>lM,entryMap:()=>Lc,handleLocalTimeForGets:()=>wR,lastMetadata:()=>lt,recordUpdater:()=>hM,removeEntry:()=>du});function Qbe(){return TE[0]=TE[0]^64,Ybe.getFloat64(0)}function wR(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,lt=null;let l=r.call(this,a,c);return l&&(lt&&(l.metadataFlags=lt[Od],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Lc.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){lt=null;let l=n.call(this,a,c);return lt&&l&&(Lc.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[Od],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,uu.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<uu.length;u++){let d=uu[u].deref();(!d||d.isDone||d.isCommitted)&&uu.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function hM(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Pf=i?.localTime?lM|CJ:cM:Pf=l?i?.localTime?lM|16384:NJ|16384:cM;let p=u?.expiresAt;if(p>=0&&(c|=IR),SE=c,uM=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Pf>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(dM=S,SE|=mM,g|=Ol),R!==S&&(g|=Pl,R||(R=0)),c&IR&&(g|=gE),u?.originatingOperation&&(g|=_E),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Jr&&(r.getBinaryFast(i.localTime)||Ua(i.value));let y;if(s!==void 0&&(y=g_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Jr)),l){let C=u?.user?.username;if(m&&(g_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Jr)),e.encoder.hasStructureUpdate&&(g|=OS,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,k=r.get(I);if(k){let J=At(k).previousLocalTime;return y=r.put(I,Nl(a,t,n,J,u?.nodeId??server.replication.getThisNodeId(r)??0,C,d,Of,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?wJ:EE,Nl(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,C,d,Of,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&zbe.has(d)&&Ke(Of?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function du(e,t,r){if(t)return t.value&&t.metadataFlags&Jr&&!e.auditStore.getBinaryFast(t.localTime)&&Ua(t.value),e.remove(t.key,r)}var IJ,AR,bR,EE,aM,wJ,Vbe,Od,Kbe,TE,Ybe,cM,NJ,Wbe,CJ,lM,IR,mM,pM,OS,zbe,Lc,jbe,Of,Pf,SE,uM,dM,lt,fM,uu,Qc=se(()=>{IJ=require("msgpackr");ki();AR=b(Q());Zn();Zn();ds();bR=new Uint8Array([1,1,1,1,4,64,0,0]),EE=new Uint8Array([1,1,1,1,1,0,0,0]),aM=new Uint8Array([1,1,1,1,3,64,0,0]),wJ=new Uint8Array([1,1,1,1,0,64,0,0]),Vbe=Symbol("local-timestamp"),Od=Symbol("metadata"),Kbe=Symbol("entry"),TE=new Uint8Array(8),Ybe=new DataView(TE.buffer,0,8),cM=0,NJ=0,Wbe=1,CJ=3,lM=4,IR=16,mM=32,pM=1,OS=256,zbe=new Set(["put","patch","delete","message","publish"]),Lc=new WeakMap,Pf=0,SE=-1,uM=-1,dM=0,lt=null,fM=class extends IJ.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Lc.get(this)?.version}getExpiresAt(){return Lc.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Pf||SE>=0){let c=0,l=Pf;l&&(c+=8,Pf=0);let u=SE,d=uM,f=dM;u>=0&&(c+=4,SE=-1,d>=0&&(c+=8,uM=-1),f&&(c+=4,dM=0));let m=jbe=n.call(this,i,a|2048|c);Of=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(bR[4]=l,bR[5]=l>>8,m.set(bR,p),p+=8),Wc&&(u|=Jr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|RR<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Of=n.call(this,i,a),Of};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(TE,0,c),c+=8;else for(let m=0;m<8;m++)TE[m]=t[c++];l=Qbe(),i=t[c]}let u,d;i<32&&(i===RR?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&IR&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&mM&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Oo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[Od]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Oo(()=>super.decode(t,r),this.rootStore)}catch(c){return AR.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(Qbe,"getTimestamp");o(wR,"handleLocalTimeForGets");uu=[];setInterval(()=>{for(let e=0;e<uu.length;e++){let t=uu[e].deref();!t||t.isDone||t.isCommitted?uu.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(AR.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):AR.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(hM,"recordUpdater");o(du,"removeEntry")});function gM(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?gM(f.conditions,f.operator,r,n,s,i,a,c):vf(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(C,I)=>y.some(k=>k(C,I)):(C,I)=>y.every(k=>k(C,I))}let g=(h.attribute||h[0])===r.primaryKey,R=RE(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=iAe(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}o(d,"mapConditionsToFilters")}function vf(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new un.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],C=yo(n.attributes,y);if(C.relationship){if(c.length<2)throw new un.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=C.definition?.tableClass||C.elements?.definition?.tableClass,k=new Map,J=vf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,k);if(C.relationship.to){i[c[0]]=k;let G=!!yo(I.attributes,C.relationship.to)?.elements;J=tAe(J,C,I.primaryStore,G,k)}if(C.relationship.from){let G=o(H=>(H?.key!==void 0&&(H=H.key),vf({attribute:C.relationship.from,value:H},t,r,n,s,k)),"searchEntry");C.elements?(i[c[0]]=k,J=rAe(J,C,I.primaryStore,k,G)):J=J.flatMap(G)}return J}else if(c.length===1)c=c[0];else throw new un.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(SM[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=To.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new un.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Xs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Xs.MAX_SEARCH_KEY_LENGTH)+Xs.OVERFLOW_MARKER,E=!1,R=RE(e,n,null,i,d)),typeof p=="string"&&p.length>Xs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Xs.MAX_SEARCH_KEY_LENGTH)+Xs.OVERFLOW_MARKER,h=!0,R=R??RE(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new un.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new un.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new un.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new un.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??RE(e,n,null,i,d),!R)throw new un.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:C,value:I}){return this?.isSync?I&&R(I)?C:Dc.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(I&&R(I)?C:Dc.SKIP)}catch(G){J(G)}}))}:C=>C.value==null&&!(C.metadataFlags&(Wn|Mc))?Dc.SKIP:(a?._freezeRecords&&Object.freeze(C.value),C));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,a).map(y=>{if(typeof y=="object"&&y){let{key:C,...I}=y,k=n.primaryStore.getEntry(C);return a?._freezeRecords&&Object.freeze(k?.value),{...I,...k}}return y}):f.getRange(S).map(R?function({key:y,value:C}){let I;return typeof y=="string"&&y.length>Xs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(C):I={[c]:y},this.isSync?R(I)?C:Dc.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(R(I)?C:Dc.SKIP)}catch(G){J(G)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:C}){return this.isSync?C&&R(C)?y:Dc.SKIP:new Promise((I,k)=>setImmediate(()=>{try{I(C&&R(C)?y:Dc.SKIP)}catch(J){k(J)}}))})}function yo(e,t){if(Array.isArray(t))if(t.length>1){let r=yo(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?yo(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function tAe(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function rAe(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function RE(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=yo(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=RE({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,R=o((y,C)=>{let I,k;return E?E.returnDirect?(I=E(y,r,C),k=lt):(k=E(y,r,C,!0),Array.isArray(k)?(I=k.map(J=>J.value),k=null):I=k?.value):I=y[d],{subObject:I,subEntry:k}},"getSubObject"),S=o((y,C)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let H of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:H};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let G=g(y);return g.idFilter&&(S.idFilter=g.idFilter),G}let{subObject:I,subEntry:k}=R(y,C);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let H=R(G).subObject;return Array.isArray(H)?H.filter(h).map(X=>X[m.primaryKey]):H}}),I.some(h)):h(I,k):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),SM[a]||a){case Xs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,To.compareKeys)(d,l[0])>=0&&(0,To.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,To.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,To.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,To.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,To.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,To.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new un.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&CR(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function R(S){let y=S[d],C;if(typeof y!="object"||!y||p?C=f(y):Array.isArray(y)?C=y.some(f):y instanceof Date&&(C=f(y.getTime())),m&&(g++,!C&&!R.idFilter&&++E/g*i>h)){let I=vf(e,r.transaction.getReadTxn(),!1,t),k;R.to?k=I.flatMap(G=>t.primaryStore.get(G)[R.to]):k=I.map(Uf);let J=new Set(k);R.idFilter=G=>J.has(Uf(G)),R.idFilter.idSet=J}return C}return o(R,"recordFilter"),s&&(R.idFilter=f),R}o(u,"attributeComparator")}function CR(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/ya(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=SM[n]||n,n===Xs.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=yo(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=CR(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*ya(e.indices[i.relationship.from])/(ya(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=ya(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=Zbe*ya(e.primaryStore)+1;else if(n==="between")r.estimated_count=Xbe*ya(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=ya(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=Jbe*ya(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function Dg(e,t){if(e)if(Ra=e,Lf.lastIndex=0,nAe.test(e))try{if(t&&(t.conditions=[]),Mi=t??new Mf,yE(Mi,""),Kr!==Ra.length&&Zt("Unable to parse query, unexpected end of query"),Mi.parseErrorMessage&&(Mi.parseError=new EM(t.parseErrorMessage),!t))throw Mi.parseError;return Mi}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Kr} in '${Ra}'`,Mi.parseErrorMessage&&(r.message+=", "+Mi.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Zt(e){let t=`${e} at position ${Kr}`;Mi.parseErrorMessage=Mi.parseErrorMessage?Mi.parseErrorMessage+", "+t:t}function yE(e,t){let r=Lf,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Ra);){Kr=r.lastIndex;let[,d,f]=n;a?(d&&Zt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Zt(`invalid FIQL operator ${d}`),l=OJ):(l=decodeURIComponent,i="equals",d||Zt("attribute must be specified before equality comparator"),s=Df(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=eAe[f],l=_M[i]?OJ:decodeURIComponent,d||Zt(`attribute must be specified before comparator ${f}`),s=Df(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Zt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Zt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Zt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&PJ(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else NR(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Zt("conditions/comparisons are not allowed in a property list"):e.push(Df(d)),s=void 0;break;case"(":Lf.lastIndex=Kr;let p=yE(d?[]:new Mf,")");switch(d){case"":NR(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Zt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Zt("group by is not implemented yet");case"sort":e.sort=LJ(p);break;default:Zt(`unknown query function call ${d}`)}Ra[Kr]===","?r.lastIndex=++Kr:a=!0,s=null;break;case"{":e.conditions&&Zt("property sets are not allowed in a queries"),d||Zt("property sets must have a defined parent property name"),Lf.lastIndex=Kr,m=yE([],"}"),m.name=d,e.push(m),Ra[Kr]===","?r.lastIndex=++Kr:a=!0;break;case"[":if(Lf.lastIndex=Kr,d?(m=yE(new Mf,"]"),m.name=d):m=yE(e.conditions?new Mf:[],"]"),e.conditions)if(NR(e,u),Ra[Kr]==="="){l=decodeURIComponent,i="equals",s=Df(d),r.lastIndex=++Kr;break}else e.conditions.push(m),s=null;else e.push(m);Ra[Kr]===","?r.lastIndex=++Kr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&PJ(h,d),NR(e,u),e.conditions.push(h)}else d&&Zt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Df(d));return e}else Zt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Zt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?sAe:Lf,r.lastIndex=Kr),Kr===Ra.length)return e}t&&Zt(`expected '${t}', but encountered end of string`)}function NR(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Zt("Can not mix operators within a condition grouping"):e.operator=t)}function Df(e){return e.indexOf(".")>-1?e.split(".").map(Df):decodeURIComponent(e)}function OJ(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new un.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function PJ(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new un.ClientError("wildcard can only be used at the end of a string")}function LJ(e){let t=DJ(e[0]);return e.length>1&&(t.next=LJ(e.slice(1))),t}function DJ(e){if(Array.isArray(e)){let t=DJ(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Zt(`Unknown sort type ${e}`)}function Uf(e){return Array.isArray(e)?e.join("\0"):e}function ya(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function iAe(e,t,r){return t*r/ya(e)}var un,Xs,To,Dc,Jbe,Xbe,Zbe,eAe,_M,SM,EM,nAe,Lf,sAe,Kr,Mi,Ra,Mf,Mg=se(()=>{un=b(_e()),Xs=b(Yt()),To=require("ordered-binary"),Dc=require("lmdb");py();Qc();Jbe=.3,Xbe=.1,Zbe=.05,eAe={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},_M={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(gM,"executeConditions");o(vf,"searchByIndex");o(yo,"findAttribute");o(tAe,"joinTo");o(rAe,"joinFrom");SM={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(RE,"filterByType");o(CR,"estimateCondition");EM=class extends un.Violation{static{o(this,"SyntaxViolation")}},nAe=/[()[\]|!<>.]|(=\w*=)/,Lf=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,sAe=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(Dg,"parseQuery");o(Zt,"recordError");o(yE,"parseBlock");o(NR,"assignOperator");o(Df,"decodeProperty");o(OJ,"typedDecoding");o(PJ,"wildcardDecoding");o(LJ,"toSortObject");o(DJ,"toSortEntry");Mf=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Uf,"flattenKey");o(ya,"estimatedEntryCount");o(iAe,"intersectionEstimate")});var OF={};Re(OF,{MultiPartId:()=>OR,Resource:()=>qr,contextStorage:()=>Bf,snakeCase:()=>aAe,transformForSelect:()=>Ff});function aAe(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MJ(e,t){if(fu=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(fu=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new OR;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){fu=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return fu=!0,null;e[e.length-1]==="/"&&(fu=!0)}return t.coerceId(decodeURIComponent(e))}function zn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof No?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new xf.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new mi,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new mi,l.id=c,c==null&&(u=!0);l||(l=new mi,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Bf.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>Bf.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return bt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(R=>{if(!R)throw new xf.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new xf.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function As(e,t){let r=new xf.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function TM(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Ff(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):TM(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(TM(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(TM(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Ff(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var vJ,UJ,xf,xJ,Bf,oAe,qr,fu,OR,Wa=se(()=>{vJ=require("crypto");Em();wu();UJ=b(ii()),xf=b(_e());Ma();Mg();xJ=require("async_hooks");Og();Bf=new xJ.AsyncLocalStorage,oAe={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=zn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Ff(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=zn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):As(t,"put")},{hasContent:!0,type:"update"});static patch=zn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):As(t,"patch")},{hasContent:!0,type:"update"});static delete=zn(function(t,r,n,s){return t.delete?t.delete(r):As(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,vJ.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Bf.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),bt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):As(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=zn(function(t,r,n,s){return t.invalidate?t.invalidate(r):As(t,"delete")},{hasContent:!1,type:"update"});static post=zn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=zn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=zn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):As(t,"connect")},{hasContent:!0,type:"read"});static subscribe=zn(function(t,r,n,s){return t.subscribe?t.subscribe(r):As(t,"subscribe")},{type:"read"});static publish=zn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):As(t,"publish")},{hasContent:!0,type:"create"});static search=zn(function(t,r,n){let s=t.search?t.search(r):As(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Ff(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=zn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):As(t,"search")},{hasContent:!0,type:"read"});static copy=zn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):As(t,"copy")},{hasContent:!0,type:"create"});static move=zn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):As(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;As(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return Dg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&oAe[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:MJ(t,this),isCollection:fu}}let i=MJ(t,this);return fu?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Jn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Jn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,UJ._assignPackageExport)("Resource",qr);o(aAe,"snakeCase");o(MJ,"pathToId");OR=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(zn,"transactional");o(As,"missingMethod");o(TM,"selectFromObject");o(Ff,"transformForSelect")});var pj={};Re(pj,{EVICTED:()=>Mc,INVALIDATED:()=>Wn,coerceType:()=>LR,makeTable:()=>MR});function MR(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=hM(i,n,l),C,I,k={},J=Promise.resolve(),G,H,X;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(G=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(H=K),K.expiresAt&&(X=K),K.isPrimaryKey&&(k=K);let W,ue=[],ce=[],te=1,ye=2,Ae={},Ye={},qe=864e5,Ar=0,tr,Wr,vr,_u=!1,Fc,xt,ri,Na=pu.get(F.REPLICATION_DATABASES);if(Array.isArray(Na)){for(let K of Na)if(K.name===c&&K.replicateTo>=0){ri=K.replicateTo;break}}let GE=i.getRange({start:!1,end:!1}).constructor,jf=10,qE=6;g&&em(),mE(i.env.path,K=>{if(I)return Oa(K)});class Qf extends ml{static{o(this,"Updatable")}getUpdatedTime(){return Lc.get(this.getRecord())?.version}getExpiresAt(){return Lc.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new lp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Pe extends qr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=H;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),C=C||_.load;let N=o(L=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[L]&&(!U[L].reliesOnPrototype||U.prototype[L])),A.length>0)if(A.length===1){let U=A[0];return(w,D,$)=>{if(w?.source!==U)return U[L](D,$,w)}}else return(U,w,D)=>{let $=[];for(let Y of A){if(U?.source===Y)break;$.push(Y[L](w,D,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=o(L=>{if(P[L]&&(!P[L].reliesOnPrototype||P.prototype[L]))return(A,U,w)=>{if(!A?.source)return P[L](U,w,A)}},"getApplyToCanonicalSource");Ae={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let L=!1,A,U=o(async(w,D)=>{let $=w.value,Y=w.table?De[c][w.table]:Pe;if(c===sm&&(w.table===bu.ROLE_TABLE_NAME||w.table===bu.USER_TABLE_NAME)&&(L=!0),w.id===void 0&&(w.id=$[Y.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let j={residencyId:kc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await Y.getResource(B,D,j);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!0,j);case"patch":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!1,j);case"delete":return Ee._writeDelete(B,j);case"publish":case"message":return Ee._writePublish(B,$,j);case"invalidate":return Ee._writeInvalidate(B,$,j);case"relocate":return Ee._writeRelocate(B,j);default:Fe.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let D={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=_.subscribeOnThisThread?_.subscribeOnThisThread((0,mu.getWorkerIndex)(),D):(0,mu.getWorkerIndex)()===0,Y=w&&$&&await _.subscribe?.(D);if(Y){let j;for await(let B of Y)try{if(!(B.type==="transaction"?B.writes[0]:B)){Fe.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){if(j?.resolve(),B.localTime&&A!==B.localTime){if(B.remoteNodeIds?.length>0){let pe=[Symbol.for("seq"),B.remoteNodeIds[0]],ne=d.get(pe),ie=ne?.nodes;ie||(ie=[]);for(let de of B.remoteNodeIds.slice(1)){let oe=ie.find(ke=>ke.id===de);ie=ie.filter(ke=>ke.id!==de||ke===oe),oe||(oe={id:de,seqId:0},ie.push(oe)),oe.seqId=Math.max(ne?.seqId??1,B.localTime),de===j?.nodeId&&(oe.lastTxnTime=B.timestamp)}let xe=Math.max(ne?.seqId??1,B.localTime);Fe.default.trace?.("Received txn",c,xe,new Date(xe),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(pe,{seqId:xe,nodes:ie})}A=B.localTime}B.onCommit&&j?.committed.then(B.onCommit);continue}if(j)if(B.beginTxn)j.resolve();else{j.write_promises.push(U(B,j));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let fe=bt(B,()=>{if(B.type==="transaction"){let pe=[];for(let ne of B.writes)try{pe.push(U(ne,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(ne)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),ne=!1;for(let ie of B.attributes)pe.find(xe=>xe.name===ie.name)||(pe.push(ie),ne=!0);ne&&(Ze({table:s,database:c,attributes:pe,origin:"cluster"}),AE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(j=B,j.write_promises=[U(B,B)],new Promise(pe=>{j.resolve=()=>pe(Promise.all(j.write_promises))})):U(B,B)});j&&(j.committed=fe),L&&fe&&!fe?.waitingForUserChange&&(fe.then(()=>AE.signalUserChange(new IE.UserEventMsg(process.pid))),fe.waitingForUserChange=!0),B.onCommit&&(fe?fe.then(B.onCommit):B.onCommit())}catch(Ee){Fe.default.error?.("error in subscription handler",Ee)}}}catch(w){Fe.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(_,T,N){let P=super.getResource(_,T,N);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Ui(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!N?.async||i.cache?.get?.(_),x=Ur(T),L=x.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Io(_,T,{transaction:L,ensureLoaded:N?.ensureLoaded},O,A=>{if(A?Pe._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let U=dn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Zs(U,w=>(Pe._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=dn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Zs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=k?.type;if(_==="String"||_==="ID")return super.getNewId();if(!xt){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,L;if(x&&x.nodeName===server.hostname&&(!SAe(i)||x.pid===process.pid)){let A=x.start,U=x.end;L=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))L=w}else x=P(O?.version??null),L=x.start;xt=new BigInt64Array([BigInt(L)+1n]),xt=new BigInt64Array(i.getUserSharedBuffer("id",xt.buffer)),xt.maxSafeId=x.end}let T=Number(Atomics.add(xt,0,1n)),N=_==="Int"?512:1048576;if(T+N>=xt.maxSafeId){let O=o(x=>{xt.maxSafeId=T+(_==="Int"?1023:4194303);let L=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(xt[0]);for(let $ of i.getKeys({start:U+1,end:L,limit:1,transaction:A}))L=$;A?.done();let{value:w,version:D}=i.getEntry(Symbol.for("id_allocation"));if(xt.maxSafeId<L){if(w.end>xt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,xt.maxSafeId,D),i.put(Symbol.for("id_allocation"),{start:w.start,end:xt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),D)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${xt.maxSafeId}, but id of ${L} detected`);let $=P(D);$.alreadyUpdated||Atomics.store(xt,0,BigInt($.start+1)),xt.maxSafeId=$.end}},"updateEnd");T+N===xt.maxSafeId?setImmediate(O):T+100>=xt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=x/4,A,U,w=!1,D,$;do{D=Math.floor(Math.random()*x),$={start:D,end:D+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let Y of i.getKeys({start:D,limit:1,reverse:!0}))A=Y;U=x;for(let Y of i.getKeys({start:D+1,end:x,limit:1}))U=Y;L*=.875,L<1e3&&!w&&(w=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,D,A,U,L))}while(!(L<U-D&&(L<D-A||A===0)));return i.transactionSync(()=>{let Y=i.getEntry(Symbol.for("id_allocation"));return(Y?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Y.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,Oa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Pe.getResidency=_&&((T,N)=>{try{return _(T,N)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){Pe.getResidencyById=_&&(T=>{try{return _(T)}catch(N){throw N.message+=` in residency function for table ${s}`,N}})}static getResidency(_,T){if(Pe.getResidencyById)return Pe.getResidencyById(_[t]);let N=ri;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(N=T.replicateTo)}if(N>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,N));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+N));let L=x+N-O.length;L>0&&P.push(...O.slice(0,L))}return P}}static enableAuditing(){g||(g=!0,em(),Pe.audit=!0)}static coerceId(_){return _===""?null:LR(_,k)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Jr&&_.value&&Ua(_.value);if(c===a){for(let _ of S)d.remove(Pe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Pe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),RM.default.unlinkSync(i.env.path);AE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Jf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let N={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Pe.getRecordCount().then(P=>(N.recordCount=P.recordCount,N.estimatedRecordRange=P.estimatedRange,N)):N}if(_!==void 0&&T.loadAsInstance===!1){let N=this.getContext(),P=Ur(N),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Os(_);Ui(x);let L=!0;return _.checkPermission&&(L=this.allowRead(N.user,_)),Zs(Zs(L,A=>{if(!A)throw new dt.AccessViolation(N.user);let U=!0;return Io(x,N,{transaction:O,ensureLoaded:U},!1,w=>{if(N.onlyIfCached){if(!w?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let D=dn(x,w,N);if(D)return P?.disregardReadTxn(),N.loadedFromSource=!0,D.then($=>$?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?Ff(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let N=On(_,T);if(N?.read){if(N.isSuperUser)return!0;let P=N.attribute_permissions,O=T?.select;if(P?.length>0||_u&&O){if(T||(T={}),O){let x=P?.length>0&&yM(P,"read");T.select=O.map(L=>{let A=L.name||L;if(!x||x[A]){let U=vr[A]?.definition?.tableClass;if(U){if(L.name||(L={name:L}),!L.checkPermission&&T.checkPermission&&(L.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,L))return!1;if(!L.select)return L.name}return L}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!vr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,N){let P=On(_,N);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=yM(O,"update");for(let L in T)if(!x[L])return!1;for(let L of O){let A=L.attribute_name;!L.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return Ca(this.getContext())}}allowCreate(_,T,N){if(this.isCollection){let P=On(_,N);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=yM(O,"insert");for(let L in T)if(!x[L])return!1;return Ca(this.getContext())}else return Ca(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return On(_,T)?.delete&&Ca(this.getContext())}update(_,T){let N,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,N=this.getId()):N=Os(_);let x=this.getContext();if(!Ur(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),Zs(A,U=>{if(!U)throw new dt.AccessViolation(x.user);return Zs(i.get(Os(_)),w=>{let D=new Qf(w);return D._setChanges(T),this._writeUpdate(N,D.getChanges(),!1),D})})}return this._writeUpdate(N,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===FJ?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new lp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,N=this.getContext();return _?.checkPermission&&(T=this.allowDelete(N.user,_,N)),Zs(T,P=>{if(!P)throw new dt.AccessViolation(N.user);this._writeInvalidate(_?Os(_):this.getId())})}_writeInvalidate(_,T,N){let P=this.getContext();Ui(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,P,_),beforeIntermediate:yu(T,Ye.invalidate?.bind(this,P,_)),commit:o((x,L)=>{if(!(xr(x,L,N?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,L,x,Wn,g,{user:P?.user,residencyId:N?.residencyId,nodeId:N?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let N=this.getContext();Ui(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.relocate?.bind(this,N,_),beforeIntermediate:Ye.relocate?.bind(this,N,_),commit:o((O,x)=>{if(xr(O,x,T?.nodeId)<=0)return;let L=Pe.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(L&&!L.includes(server.hostname)){for(let D in r)U||(U={}),U[D]=w[D];A=Wn}else U=w;Fe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:N.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let N={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=Pa(this.getResidency(T.value,N)),O;if(P){if(!P.includes(server.hostname))return!1;O=kc(P)}let x=0;Fe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,P);let L=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,N){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==N))){if(I){if(i.hasLock(_,O.version))return;let x;for(let L in r)x||(x={}),x[L]=T[L];if(x)return y(_,x,O,N,Mc,null,null,null,!0)}if(i.ifVersion(_,N,()=>{gu(_,T,null)}),g)return y(_,null,O,N,Mc,null,null,null,!0);du(i,O??i.getEntry(_),N)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let N=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(N=this.allowUpdate(P.user,T,_)),Zs(N,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let L=x[t];this._writeUpdate(L,x,!0)}else{let x=Os(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let N=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(N=this.allowCreate(P.user,T,_)),Zs(N,O=>{if(!O)throw new dt.AccessViolation(P.user);let x=Os(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let N=this.update(_,T);if(N?.then)return N.then(()=>{})}}_writeUpdate(_,T,N,P){let O=this.getContext(),x=Ur(O);Ui(_);let L=this.#n??i.getEntry(_);this.#s=N?FJ:hAe;let A=o(w=>N?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,pl(this)):null,"writeToSources"),U={key:_,store:i,entry:L,nodeName:O?.nodeName,validate:o(w=>{T||(T=this.#t),N||T&&cg(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!N),H&&(T[H.name]=H.type==="Date"?new Date(w):H.type==="String"?new Date(w).toISOString():w),N&&(t&&T[t]!==_&&(T[t]=_),G&&(L?.value?T[G.name]=L?.value[G.name]:T[G.name]=G.type==="Date"?new Date(w):G.type==="String"?new Date(w).toISOString():w),T=pl(T))):x.removeWrite(U)},"validate"),before:A(Ae),beforeIntermediate:yu(T,A(Ye)),commit:o((w,D,$)=>{if($){if(O&&D?.version>(O.lastModified||0)&&(O.lastModified=D.version),this.#n=D,D?.value&&D.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");N||(this.#e=D?.value??null)}this.#t=void 0,this.#r=w;let Y=D?.value,j;this.#s=0;let B=!1,Ee=xr(w,D,P?.nodeId),fe;if(Ee<=0){if(g){let de=D.localTime,oe=D.version;Fe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(oe),"local recorded time",new Date(de));let ke=[];for(;de>w||oe>=w&&de>0;){let Be=l.get(de);if(!Be)break;let Le=At(Be);if(oe=Le.version,oe>=w){if(oe===w){if(Ee=xr(w,{version:oe,localTime:de},P?.nodeId),Ee===0)return;if(Ee>0)continue}if(Le.type==="patch")ke.push(Le),fe=T;else if(Le.type==="put"||Le.type==="delete")return}de=Le.previousLocalTime}de||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",D),ke.sort((Be,Le)=>Be.version-Le.version);for(let Be of ke){let Le=Be.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(Be.version),Le,Be),j=og(j??T,Le,N),!j)return}}else{if(N)return;j=og(j??T,Y,N),Fe.default.debug?.("Rebuilding update without audit:",j)}Fe.default.trace?.("Rebuilt record to save:",j," is full update:",N)}let pe;if(N&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=pl(Y,j??T):(this.#e=Y,pe=pl(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ne;if(P?.residencyId!=null)ne=P.residencyId;else{L?.residencyId&&(O.previousResidency=Pe.getResidencyRecord(L.residencyId));let de=Pa(Pe.getResidency(pe,O));if(de&&!de.includes(server.hostname))if(fe??=pe,B=!0,Pe.getResidencyById)pe=void 0;else{pe=null;for(let oe in r)pe||(pe={}),pe[oe]=fe[oe]}ne=kc(de)}N||(fe=T);let ie=O?.expiresAt??(h?h+Date.now():-1);Fe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${D?", replaces entry from: "+new Date(D.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),gu(_,Y,pe);let xe=N?"put":"patch";y(_,pe,D,w,B?Wn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:ne,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},xe,!1,fe),O.expiresAt&&Oa()},"commit")};x.addWrite(U)}async delete(_){if(Jf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,N=this.getContext();return _.checkPermission&&(T=this.allowDelete(N.user,_,N)),Zs(T,P=>{if(!P)throw new dt.AccessViolation(N.user);let O=Os(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let N=Ur(this.getContext());Ui(_);let P=this.getContext();return N.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:Ae.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:o((O,x,L)=>{let A=x?.value;L&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),Pe._updateResource(this,x)),!(xr(O,x,T?.nodeId)<=0)&&(gu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Oa()):du(i,x))},"commit")}),!0}search(_){let T=this.getContext(),N=Ur(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new dt.AccessViolation(T.user);T&&(T.lastModified=dAe);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,L={};function A(ie,xe){let de;switch(xe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');de=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+xe)}for(let oe of ie){if(oe.conditions){oe.conditions=A(oe.conditions,oe.operator);continue}let ke=oe[0]??oe.attribute,Be=ke==null?k:yo(S,ke);if(Be)(Be.type||_M[oe.comparator])&&(oe[1]===void 0?oe.value=w(oe.value,Be):oe[1]=w(oe[1],Be));else if(ke!=null&&!_.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${ke} is not a defined attribute`,404);if(oe.chainedConditions)if(oe.chainedConditions.length===1&&(!oe.operator||oe.operator=="and")){let Le=oe.chainedConditions[0],Me,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(Me=oe,pt=Le):(Me=Le,pt=oe),Me.comparator!=="lt"&&Me.comparator!=="less_than"&&Me.comparator!=="le"&&Me.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let wt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Et=Me.comparator==="le"||Me.comparator==="less_than_equal";oe.comparator=(wt?"ge":"gt")+(Et?"le":"lt"),oe.value=[pt.value,Me.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}o(A,"prepareConditions");function U(ie,xe){if(_.enforceExecutionOrder)return ie;for(let de of ie)de.conditions&&(de.conditions=U(de.conditions,de.operator));return ie.length>1&&xe!=="or"?cAe(ie,CR(Pe)):ie}o(U,"orderConditions");function w(ie,xe){return Array.isArray(ie)?ie.map(de=>LR(de,xe)):LR(ie,xe)}o(w,"coerceTypedValues");let D=_.operator;(P.length>0||D)&&(P=A(P,D));let $=typeof _.sort=="object"&&_.sort,Y;if($&&D!=="or"){let ie=$.attribute;if(ie==null)throw new dt.ClientError("Sort requires an attribute");if(x=P.find(xe=>Uf(xe.attribute)===Uf(ie)),!x){let xe=yo(S,ie);if(!xe)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(xe.indexed)x={...$,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!$.descending)}P=U(P,D),$&&(x&&P[0]===x?$.next&&(Y={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(x&&P.splice(P.indexOf(x),1),Y=$));let j=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:D,postOrdering:Y,selectApplied:!!j};let B=N.useReadTxn(),Ee=gM(P,D,Pe,B,_,T,(ie,xe)=>Zf(ie,j,T,B,xe),L),fe=_.ensureLoaded!==!1,pe=Pe.transformEntryForSelect(j,T,B,L,fe,!0),ne=Pe.transformToOrderedSelect(Ee,j,Y,T,B,pe);return(_.offset||_.limit!==void 0)&&(ne=ne.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),ne.onDone=()=>{ne.onDone=null,N.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(j){let ie=[];for(let xe of j)xe==="*"?ie.push(...S.map(de=>de.name)):ie.push(xe.name||xe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},ne}static transformToOrderedSelect(_,T,N,P,O,x){let L=new GE;if(N){_=Zf(_,T,P,O,null);let A;L.iterate=function(){let w,D=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),$,Y=N.dbOrderedAttribute,j,B,Ee=!0;function fe(ne){let ie=ne.next&&fe(ne.next),xe=ne.descending;return P.sort=ne,(de,oe)=>{let ke=Su(de,ne.attribute,P),Be=Su(oe,ne.attribute,P),Le=xe?(0,hu.compareKeys)(Be,ke):(0,hu.compareKeys)(ke,Be);return Le===0?ie?.(de,oe)||0:Le}}o(fe,"createComparator");let pe=fe(N);return{async next(){let ne;if(w)if(ne=w.next(),ne.done){if($)return L.onDone&&L.onDone(),ne}else return{value:await x.call(this,ne.value)};A=[],j&&A.push(j);do if(ne=await D.next(),ne.done){if($=!0,A.length)break;return L.onDone&&L.onDone(),ne}else{let ie=ne.value;if(ie?.then&&(ie=await ie),Y){let xe=Su(ie,Y,P);if(Ee)Ee=!1,B=xe;else if(xe!==B){B=xe,j=ie;break}}A.push(ie)}while(!0);return N.isGrouped,A.sort(pe),w=A[Symbol.iterator](),ne=w.next(),ne.done?(L.onDone&&L.onDone(),ne):{value:await x.call(this,ne.value)}},return(){return L.onDone&&L.onDone(),D.return()},throw(){return L.onDone&&L.onDone(),D.throw()}}};let U=o(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let D=0;D<T.length;D++){let $=T[D],Y;if($.name===w.attribute[0]){for(Y=$.sort||($.sort={});Y.next;)Y=Y.next;Y.attribute=w.attribute.slice(1),Y.descending=w.descending}else $===w.attribute[0]&&(T[D]=Y={name:$,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(N)}else L.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),L=L.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return L}static transformEntryForSelect(_,T,N,P,O,x){let L;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let D;return typeof w=="object"?D=w.name:D=w,r[D]||D===t})&&(L=!0);let A,U=o(function(w){let D;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(D=w.deref?w.deref():w.value,!D&&(w.key===void 0||w.deref)||w.metadataFlags&Wn){if(w.metadataFlags&Wn&&T.replicateFrom===!1&&x&&w.residencyId)return Uc.SKIP;if(w=Io(w.key??w,T,{transaction:N,lazy:_?.length<4,ensureLoaded:O},this?.isSync,$=>$),w?.then)return w.then(U.bind(this));D=w?.value}if(L&&w?.metadataFlags&(Wn|Mc)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let $=dn(w.key??w,w,T);if($?.then)return $.then(U)}}if(D==null)return x?Uc.SKIP:D;if(_&&!(_[0]==="*"&&_.length===1)){let $,Y=o((B,Ee)=>{let fe;typeof B=="object"?fe=B.name:fe=B;let pe=vr?.[fe],ne;if(pe){let ie=P?.[fe];if(ie)if(ie.hasMappings){let de=pe.from?D[pe.from]:Uf(w.key);ne=ie.get(de),ne||(ne=[])}else ne=ie.fromRecord?.(D);else ne=pe(D,T,w,!0);let xe=o(de=>{if(pe.directReturn)return Ee(de,fe);if(de&&typeof de=="object"){let oe=pe.definition?.tableClass||Pe;A||(A={});let ke=A[fe]||(A[fe]=oe.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,N,ie,O));if(Array.isArray(de)){let Be=[],Le=oe.transformToOrderedSelect(de,B.select,typeof B.sort=="object"&&B.sort,T,N,ke)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Me=o(wt=>{for(;!wt.done;){if(wt?.then)return wt.then(Me);Be.push(wt.value),wt=Le.next()}Ee(Be,fe)},"nextValue"),pt=Me(Le.next());pt&&($||($=[]),$.push(pt));return}else if(de=ke.call(this,de),de?.then){$||($=[]),$.push(de.then(Be=>Ee(Be,fe)));return}}Ee(de,fe)},"handleResolvedValue");ne?.then?($||($=[]),$.push(ne.then(xe))):xe(ne);return}else ne=D[fe],ne&&typeof ne=="object"&&fe!==B&&(ne=Pe.transformEntryForSelect(B.select||B,T,N,null)({value:ne}));Ee(ne,fe)},"selectAttribute"),j;if(typeof _=="string")Y(_,B=>{j=B});else if(Array.isArray(_))if(_.asArray)j=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=D:Y(B,fe=>j[Ee]=fe)});else{j={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let fe in D)j[fe]=D[fe];else Y(Ee,(fe,pe)=>{fe===void 0&&B&&(fe=null),j[pe]=fe})}else throw new dt.ClientError("Invalid select"+_);return $?Promise.all($).then(()=>j):j}return D},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,N=[],P=MN(Pe,this.getId()??null,function(L,A,U,w){try{let D=A.getValue?.(i,T),$=A.type;if(!D&&$==="patch"&&T){let j=i.getEntry(L);j?.version===A.version?D=j.value:D=A.getValue?.(i,!0,U),$="put"}let Y={id:L,localTime:U,value:D,version:A.version,type:$,beginTxn:w};N?N.push(Y):(c!=="system"&&Ke(A.size??1,"db-message",s,null),this.send(Y))}catch(D){Fe.default.error?.(D)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let L=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:D}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(D);if($.tableId!==n)continue;let Y=$.recordId;if(L==null||qJ(L,Y)){let j=$.getValue(i,T,w);if(x({id:Y,localTime:w,value:j,version:$.version,type:$.type,size:$.size}),P.queue?.length>HJ&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:D,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Y=At($);if(Y.tableId!==n)continue;let j=Y.recordId;if(L==null||qJ(L,j)){let B=Y.getValue(i,T,D);if(w.push({id:j,localTime:D,value:B,version:Y.version,type:Y.type}),--A<=0)break}}catch(Y){Fe.default.error("Error getting history entry",D,Y)}for(let D=w.length;D>0;)x(w[--D]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:D,version:$,localTime:Y,size:j}of i.getRange({start:L??!1,end:L==null?void 0:[L,hu.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(D&&(x({id:w,localTime:Y,value:D,version:$,type:"put",size:j}),P.queue?.length>HJ&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===pM&&(i.cache?.delete(L),this.#n=i.getEntry(L),Fe.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),Fe.default.trace?.("Subscription from",U,"from",L,w),U<w){let D=[],$=w;do{let Y=l.get($);if(Y){_.omitCurrent=!0;let j=At(Y),B=j.getValue(i,T,$);T&&(j.type="put"),D.push({id:L,value:B,localTime:$,...j}),$=j.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let Y=D.length;Y>0;)x(D[--Y]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:L,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of N)x(w);N=null})();function x(L){c!=="system"&&Ke(L.size??1,"db-message",s,null),P.send(L)}return o(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,N){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),Zs(P,x=>{if(!x)throw new dt.AccessViolation(O.user);let L=Os(_);this._writePublish(L,T,N)})}}_writePublish(_,T,N){let P=Ur(this.getContext());_??=null,_!==null&&Ui(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:o(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ae.publish?.bind(this,O,_,T),beforeIntermediate:yu(T,Ye.publish?.bind(this,O,_,T)),commit:o((x,L,A)=>{L===void 0&&R&&!g&&Oa(),Fe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,L?.value??null,L,L?.version||x,0,!0,{user:O?.user,residencyId:N?.residencyId,expiresAt:O?.expiresAt,nodeId:N?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let N,P=o((O,x,L)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let D=A[U];if(D.relationship||D.computed){_.hasOwnProperty(D.name)&&(N||(N=[])).push(`Computed property ${L}.${D.name} may not be directly assigned a value`);continue}let $=P(O[D.name],D,L+"."+D.name);$&&(O[D.name]=$)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(N||(N=[])).push(`Property ${U} is not allowed within object in property ${L}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ds)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],D=P(w,x.elements,L+"[*]");D&&(O[A]=D)}}else(N||(N=[])).push(`Value ${ei(O)} in property ${L} must be an Array`);break}x.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let L=S[O];if(L.relationship||L.computed){Object.hasOwn(_,L.name)&&(N||(N=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!T||L.name in _){let A=P(_[L.name],L,L.name);A!==void 0&&(_[L.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(N||(N=[])).push(`Property ${O} is not allowed`);if(N)throw new dt.ClientError(N.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let N of _){if(!N.name)throw new dt.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");lAe(N.name),T.push(N)}return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static async removeAttributes(_){let T=S.filter(N=>!_.includes(N.name));return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=RM.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,N=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,L=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&L++,A++,await vc(),!x&&A<O&&performance.now()-P>N){U=A;break}if(U){let w=L;L=0;for(let{value:ne}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))ne!=null&&L++,await vc();let D=U*2,$=(L+w)/D,Y=Math.pow((L-w+1)/U/2,2)+$*(1-$)/D,j=Math.max(Math.sqrt(Y)*T,1),B=Math.round($*T),Ee=Math.max(B-1.96*j,L+w),fe=Math.min(B+1.96*j,T),pe=Math.pow(10,Math.round(Math.log10(j)));return pe>B&&(pe=pe/10),L=Math.round(B/pe)*pe,{recordCount:L,estimatedRange:[Math.round(Ee),Math.round(fe)]}}return{recordCount:L}}static updatedAttributes(){vr=this.propertyResolvers={$id:o((_,T,N)=>({value:N.key}),"$id"),$updatedtime:o((_,T,N)=>N.version,"$updatedtime"),$updatedTime:o((_,T,N)=>N.version,"$updatedTime"),$expiresAt:o((_,T,N)=>N.expiresAt,"$expiresAt"),$record:o((_,T,N)=>N?{value:_}:_,"$record"),$distance:o((_,T,N)=>N&&(N.distance??T?.vectorDistances?.get(N)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(k=_),_.resolve=null;let T=_.relationship,N=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),N&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),_u=!0,T.to)_.elements?.definition?(vr[_.name]=_.resolve=(P,O,x,L)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return L?vf({attribute:T.to,value:A},Ur(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Ur(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(vr[_.name]=_.resolve=(O,x,L,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let D,$=U?.map(Y=>{let j=P.tableClass.primaryStore[A?"getEntry":"get"](Y,{transaction:Ur(x).getReadTxn()});return j?.then&&(D=!0),Pe.loadAsInstance===!1&&Object.freeze(A?j?.value:j),j});return T.filterMissing?D?Promise.all($).then(Y=>Y.filter($J)):$.filter($J):D?Promise.all($):$}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Ur(x).getReadTxn()});return Pe.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let L=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=L}else{let L=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=L}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(N)typeof N.from=="function"&&this.setComputedAttribute(_.name,N.from),vr[_.name]=_.resolve=(P,O,x)=>{let L=typeof N.from=="string"?P[N.from]:P,A=this.userResolvers[_.name];if(A)return A(L,O,x);Fe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;vr[_.name]=(O,x,L)=>{let A=O[_.name];return P.propertyResolver(A,x,L)},vr[_.name].directReturn=!0}}up(this,this),up(Qf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Bf.getStore())},set(N){return _.set(this,N)},configurable:!0})}}static setComputedAttribute(_,T){let N=yo(S,_);if(!N){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!N.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let N;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await vc(),At(O).tableId===n&&(N=yR(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:L}=P;await vc(),x===null&&L<_&&(N=du(i,P))}await N}static async*getHistory(_=0,T=1/0){for(let{key:N,value:P}of l.getRange({start:_||1,end:T})){await vc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let N=i.getEntry(_);if(!N)return T;let P=N.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await vc();let x=l.get(P);if(x){let L=At(x);T.push({id:L.recordId,localTime:P,version:L.version,type:L.type,value:L.getValue(i,!0,P),user:L.user}),P=L.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){W?.remove()}}let $E=Xy(async(K,_,T)=>{for(let N of Pe.sources)if(N.get&&(!N.get.reliesOnPrototype||N.prototype.get)){if(N.available?.(T)===!1)continue;_.source=N;let P=await N.get(K,_);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Pe.updatedAttributes();let ob=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&VE(),Pe;function gu(K,_,T){let N;for(let P in r){let O=r[P],x=O.isIndexing,L=vr[P],A=T&&(L?L(T):T[P]),U=_&&(L?L(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}N=!0;let w=O.indexNulls,D=(0,bE.getIndexedValues)(A,w),$=(0,bE.getIndexedValues)(U,w);if($?.length>0){let Y=new Set($);if(D=D?D.filter(j=>{if(Y.has(j))Y.delete(j);else return!0}):[],$=Array.from(Y),($.length>0||D.length>0)&&BJ){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,GJ)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&BJ&&O.prefetch(D.map(Y=>({key:Y,value:K})),GJ);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(gu,"updateIndices");function Ui(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>kJ)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,hu.writeKey)(K,EAe,0)>kJ)throw new Error("Primary key size is too large: "+K.length);return!0}o(Ui,"checkValidId");function Os(K){return typeof K=="object"&&K?K.id:K}o(Os,"requestTargetToId");function Jf(K){return typeof K=="object"&&K&&K.isCollection}o(Jf,"isSearchTarget");function Xf(K){}o(Xf,"isRequestTarget");function Io(K,_,T,N,P){if(Pe.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Pa(Pe.getResidencyById(K));if(x&&!x.includes(server.hostname)&&C)return C({key:K,residency:x}).then(P)}let O=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(YJ.default.trace?.("Recording db-read action for",`${c}.${s}`),Ke(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&Wn&&C&&T.ensureLoaded&&_?.replicateFrom!==!1?C(x).then(L=>P(L,K),L=>(Fe.default.error?.("Error loading remote record",K,x,T,L),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return N?O():te>0?(te--,O()):new Promise((x,L)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ue.push(K),ce.push(U),ue.length>qE&&(te--,A()));function A(){if(ue.length>0){let w=ce;i.prefetch(ue,()=>{te===-1?A():te++;for(let D of w)D()}),ue=[],ce=[],ye>2&&ye--}else te=ye,ye<jf&&ye++}o(A,"prefetch");function U(){try{x(O())}catch(w){L(w)}}o(U,"load")})}o(Io,"loadLocalRecord");function On(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return _Ae;let N=T[c],P,O=N?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}o(On,"getTablePermissions");function dn(K,_,T,N){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(Wn|Mc)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,en(!P,"cache-hit",s)),P){let O=Tu(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&N?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>Fe.default.warn?.(x)),T?.onlyIfCached&&!N.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Pe.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}o(dn,"ensureLoadedFromSource");function Ur(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new No,_.lmdbDb=i,_;_=T}while(!0)}else return new l_}o(Ur,"txnForContext");function Su(K,_,T){if(!K)return;let N=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=vr,x=N;for(let L=0,A=_.length;L<A;L++){let U=_[L],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=vr[_];return P?P(N,T,K):N[_]}o(Su,"getAttributeValue");function Zf(K,_,T,N,P){let O=P?.length,x={transaction:N,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},L;function A(U,w){let D=U?.value;if(!D)return Uc.SKIP;for(let $=0;$<O;$++)if(!L?.includes($)&&!P[$](D,U))return Uc.SKIP;return w!==void 0&&(U.key=w),U}if(o(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(L=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return Uc.SKIP;for(let D=0;D<O;D++){let Y=P[D].idFilter;if(Y){if(!Y(w))return Uc.SKIP;L||(L=[]),L.push(D)}}return Io(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==Uc.SKIP)),U.hasEntries=!0,U}return K}o(Zf,"transformToEntries");function xr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let N=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,L,A=At(O);for(let U in N)N[U]===T&&(x=U),N[U]===A.nodeId&&(L=U);if(x>L)return 1;if(x===L)return 0}}return-1}return 1}o(xr,"precedesExistingVersion");async function Tu(K,_,T){let N=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(Wn|Mc)?O(Tu(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},pAe)});let L=_?.value,A={requestContext:T,replacingRecord:L,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,D)=>{let $;Zs(bt(A,async Y=>{let j=performance.now(),B,Ee,fe;try{B=await $E(K,A,_),fe=N&Wn;let ne=A.lastModified||fe&&P;Ee=fe||ne>P||!L,ne||(ne=(0,bE.getNextMonotonicTime)());let ie=performance.now()-j;if(Ke(ie,"cache-resolution",s,null,"success"),U&&gp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),Y.timestamp=ne,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ne=P;else throw new dt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}$=!0,w({key:K,version:ne,value:B})}catch(ne){ne.message+=` while resolving record ${K} for ${s}`,L&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(w({key:K,version:P,value:L}),Fe.default.trace?.(ne.message,"(returned stale record)")):D(ne);let ie=performance.now()-j;Ke(ie,"cache-resolution",s,null,"fail"),U&&gp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Ur(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:yu(B),commit:o((ne,ie)=>{if(ie?.version!==P)return;let xe=gu(K,L,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Pe.getResidencyRecord(ie.residencyId));let de,oe=!1,ke,Be=Pa(Pe.getResidency(B,T));if(Be){if(!Be.includes(server.hostname))if(de=B,oe=!0,Pe.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=de[Le]}ke=kc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),y(K,B,ie,ne,oe?Wn:0,g&&(Ee||oe)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:ke,tableToTrack:s},"put",!!fe,de)}else ie&&(Ye.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),g||R?y(K,null,ie,ne,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!fe):du(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},Y=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",Y)})})}o(Tu,"getFromSource");function Ca(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Ca,"checkContextPermissions");function Oa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(qe===tr&&!_)&&(tr=qe,(0,mu.getWorkerIndex)()===(0,mu.getWorkerCount)()-1))return Wr&&clearTimeout(Wr),qe?new Promise(T=>{let N=new Date;N.setMonth(0),N.setDate(1),N.setHours(0),N.setMinutes(0),N.setSeconds(0);let P=qe/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-N.getTime())/P)*P+N.getTime(),x=o(L=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),Wr=setTimeout(()=>J=J.then(async()=>{if(x(Math.max(L+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Wr);return}let A=50,U=new Array(A),w=0,D=Math.pow(Ar,8)*(pu.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ar,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${D}, adjusted eviction ${$}ms`);function Y(j,B,Ee,fe){let pe=j+$-Date.now();if(pe<0)return!0;if(Ar){let ne=i.lastSize;return Ee&Jr&&Yc(fe,ie=>{ie.size&&(ne+=ie.size)}),Fe.default.trace?.(`shouldEvict adjusted ${pe} ${ne}, ${pe*(j-B)/ne} < ${D}`),pe*(j-B)/ne<D}return!1}o(Y,"shouldEvict");try{let j=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:ne,metadataFlags:ie}=B,xe;fe===null&&!g&&pe+mAe<Date.now()?xe=du(i,B,pe):ne!=null&&Y(ne,pe,ie,fe)&&(xe=Pe.evict(Ee,fe,pe),j++),xe&&(await U[w],U[w]=xe.catch(de=>{Fe.default.error?.("Cleanup error",de)}),++w>=A&&(w=0)),await vc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,j)}T(void 0),Ar=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}o(Oa,"scheduleCleanup");function em(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(em,"addDeleteRemoval");function VE(){(0,mu.getWorkerIndex)()===0&&setInterval(async()=>{if(!Fc){Fc=!0;try{let K=X.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let N of _.getValues(T)){let P=i.getEntry(N);P?.value?P.value[K]<Date.now()&&Pe.evict(N,P.value,P.version):i.ifVersion(N,P?.version,()=>_.remove(T,N))}await vc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Fc=!1}}},fAe).unref()}o(VE,"runRecordExpirationEviction");function Pa(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return Fe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Pa,"residencyFromFunction");function kc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(kc,"getResidencyId");function yu(K,_){let T=Yb(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(yu,"preCommitBlobsForRecordBefore")}function yM(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function GJ(){}function LR(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return PR(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return PR(+e);case"Float":return e==="null"?null:PR(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;gAe.test(e)||(e+="Z");let n=new Date(e);return PR(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,DR.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function PR(e){if(isNaN(e))throw new SyntaxError;return e}function qJ(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Zs(e,t,r){return e?.then?e.then(t,r):t(e)}function $J(e){return e!=null}function ei(e){try{return JSON.stringify(e)}catch{return e}}function SAe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Uc,bE,VJ,KJ,pu,dt,AE,IE,Fe,hu,mu,DR,RM,YJ,cAe,lAe,uAe,dAe,fAe,mAe,BJ,pAe,FJ,hAe,Wn,Mc,EAe,kJ,HJ,_Ae,OGe,gAe,vc,py=se(()=>{q();Uc=require("lmdb"),bE=b(Ln()),VJ=b(require("lodash")),KJ=b(pm());Wa();Em();pu=b(me());vN();dt=b(_e()),AE=b(ko()),IE=b(as());we();Mg();Fe=b(Xn());cw();Ma();hu=require("ordered-binary"),mu=b(nt());ki();DR=b(ae());Qc();ds();ag();Sp();RM=b(require("node:fs"));Zn();_R();YJ=b(Q());ID();({sortBy:cAe}=VJ.default),{validateAttribute:lAe}=KJ.default,uAe=new Uint8Array(9);uAe[8]=192;dAe=1/0,fAe=6e4,mAe=864e5;pu.initSync();BJ=pu.get(F.STORAGE_PREFETCHWRITES),pAe=1e4,FJ=1,hAe=2,Wn=1,Mc=8,EAe=Buffer.allocUnsafeSlow(8192),kJ=1978,HJ=100,_Ae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},OGe=(0,DR.convertToMS)(pu.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(MR,"makeTable");o(yM,"attributesAsObject");o(GJ,"noop");gAe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(LR,"coerceType");o(PR,"rejectNaN");o(qJ,"isDescendantId");vc=o(()=>new Promise(setImmediate),"rest");o(Zs,"when");o($J,"exists");o(ei,"stringify");o(SAe,"hasOtherProcesses")});function vR(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function UR(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var WJ=se(()=>{o(vR,"euclideanDistance");o(UR,"cosineDistance")});var zJ,jJ,Hf,Ro,kf,TAe,yAe,xR,QJ=se(()=>{WJ();zJ=require("msgpackr"),jJ=b(Xn()),Hf=b(_e()),Ro=(0,jJ.loggerWithTag)("HNSW"),kf=Symbol.for("entryPoint"),TAe=Symbol.for("key"),yAe=10,xR=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=zJ.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?vR:UR,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[TAe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(kf);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Ro.debug?.("setting entry point to",i),this.indexStore.put(kf,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),yAe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Ro.debug?.("setting entry point to",i),this.indexStore.put(kf,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Ro.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:C,node:I}=g[S];if(y===i)continue;let k=[];if(this.optimizeRouting){let H=!1,X=I[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let ue=0;ue<X.length;ue++){let{id:ce,distance:te}=X[ue],ye=1+this.optimizeRouting*(1+.5*ue/this.M);for(let Ae=0;Ae<R.length;Ae++){let{id:Ye,distance:qe}=R[Ae];if(Ye===ce){C*W>qe+te?H=!0:te*ye>C+qe&&(k.push({fromId:Ye,toId:y}),k.push({fromId:y,toId:Ye}));break}}if(H)break}if(H)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:C});for(let{fromId:H,toId:X}of k){let W=d(H);W||(W=d(H,this.indexStore.get(H)));for(let ue=0;ue<W[E].length;ue++)if(W[E][ue].id===X){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(ue,1);break}}let J=c[E],G=J?.find(({id:H})=>H===y);if(G){let H=J?.indexOf(G);J.copied||(J=[...J],J.copied=!0,c[E]=J),J.splice(H,1)}else this.addConnection(y,d(y,I),i,E,C,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(kf);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Ro.debug?.("setting entry point to",l),this.indexStore.put(kf,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Ro.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(kf);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new Hf.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Hf.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=UR;else if(s==="euclidean")c=vR;else{if(s)throw new Hf.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Hf.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Hf.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){Ro.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Ro.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Ro.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Ro.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Ro.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?vR:UR);let c=a(s.target,t);return i.set(n,c),c}return t}}});var bM,JJ=se(()=>{QJ();bM={HNSW:xR}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>BR,database:()=>Zu,databaseEnvs:()=>ba,databases:()=>De,dropDatabase:()=>mw,dropTableMeta:()=>NAe,getDatabases:()=>at,getDefaultCompression:()=>ET,getTables:()=>bAe,onRemovedDB:()=>Vp,onUpdatedTable:()=>Dl,readMetaDb:()=>wE,resetDatabases:()=>jd,table:()=>Ze,tables:()=>Sn});function LE(e,t){let r=qR.OpenDBIObject??qR.default.OpenDBIObject;return new r(e,t)}function bAe(){return GR||at(),Sn||{}}function at(){if(GR)return De;GR=!0,$f=new Map;let e=(0,er.getHdbBasePath)()&&(0,Vt.join)((0,er.getHdbBasePath)(),qc),t=(0,er.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(F.STORAGE_PATH)||e&&((0,Is.existsSync)(e)?e:(0,Vt.join)((0,er.getHdbBasePath)(),JE)),!!e){if((0,Is.existsSync)(e))for(let r of(0,Is.readdirSync)(e,{withFileTypes:!0})){let n=(0,Vt.basename)(r.name,".mdb");r.isFile()&&(0,Vt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&wE((0,Vt.join)(e,r.name),null,n)}if((0,Is.existsSync)((0,qf.getBaseSchemaPath)())){for(let r of(0,Is.readdirSync)((0,qf.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Vt.join)((0,qf.getBaseSchemaPath)(),r.name),s=(0,Vt.join)((0,qf.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Is.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Vt.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Vt.join)(s,i.name);wE((0,Vt.join)(n,i.name),(0,Vt.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Is.existsSync)(s))for(let a of(0,Is.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Vt.extname)(a.name).toLowerCase()===".mdb"&&wE((0,Vt.join)(s,a.name),(0,Vt.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Vt.join)(c.path,(0,Vt.basename)(a+".mdb"));(0,Is.existsSync)(l)&&wE(l,a,r,null,!0)}}for(let r in De){let n=$f.get(r);if(n){let s=De[r];r.includes("delete")&&Dr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Dr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in Sn)delete Sn[s];delete Sn[$R]}}if((0,er.get)(F.ANALYTICS_REPLICATE)===!1?BR.includes("hdb_analytics")||BR.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of BR)De.system[r]&&(De.system[r].replicate=!1);return $f=null,De}}function jd(){GR=!1;for(let[,e]of ba)e.needsDeletion=!0;at();for(let[e,t]of ba)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),ba.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],CE.forEach(i=>i(t.databaseName));break}}return De}function wE(e,t,r=wM,n,s){let i=new AM.default(e,!1);try{let a=ba.get(e);a?a.needsDeletion=!1:(a=(0,Vf.open)(i),ba.set(e,a));let c=new LE(!1),l=a.dbisDb||(a.dbisDb=a.openDB(FR.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,Is.existsSync)(n)&&(i.path=n,u=(0,Vf.open)(i),u.isLegacy=!0):u=TR(a));let d=r3(r),f=d[$R],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Dr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],C,I,k=typeof g.audit=="boolean"?g.audit:(0,er.get)(F.LOGGING_AUDITLOG),J=g.trackDeletes,G=g.expiration,H=g.eviction,X=g.sealed,W=g.splitSegments,ue=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{C=g.tableId,C?C>=(l.get(Gf)||0)&&(l.putSync(Gf,C+1),Dr.info(`Updating next table id (it was out of sync) to ${C+1} for ${p}`)):(g.tableId=C=l.get(Gf),C||(C=1),Dr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Gf,C+1),l.putSync(g.key,g));let te=new LE(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ye=(0,er.get)(F.STORAGE_COMPRESSION_THRESHOLD)||t3;te.compression.threshold=ye}I=wR(a.openDB(g.key,te),a),a.databaseName=r,I.tableId=C}let ce;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ae=s3(te.key,a,te);S[te.name]=Ae,S[te.name].indexNulls=te.indexNulls}let ye=y.find(Ae=>Ae.name===te.name);ye?y.splice(y.indexOf(ye),1,te):y.push(te),ce=!0}}catch(ye){Dr.error("Error trying to update attribute",te,y,S,ye)}}for(let te of y)if(!E.find(Ae=>Ae.name===te.name)){if(te.is_hash_attribute){Dr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),ce=!0)}if(R)ce&&(R.schemaVersion++,R.updatedAttributes());else{R=n3(d,p,MR({primaryStore:I,auditStore:u,audit:k,sealed:X,splitSegments:W,replicate:ue,expirationMS:G&&G*1e3,evictionMS:H&&H*1e3,trackDeletes:J,tableName:p,tableId:C,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of NE)te(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function r3(e){let t=De[e];if(t||(e==="data"?t=De[e]=Sn:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),$f&&!$f.has(e)){let r=new Set;t[$R]=r,$f.set(e,r)}return t}function n3(e,t,r){return e[t]=r,r}function Zu({database:e,table:t}){e||(e=wM),at();let r=r3(e),n=(0,Vt.join)((0,er.getHdbBasePath)(),qc),s=(0,er.get)(F.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,er.get)(F.STORAGE_PATH)||((0,Is.existsSync)(n)?n:(0,Vt.join)((0,er.getHdbBasePath)(),JE));let a=(0,Vt.join)(n,(i?t:e)+".mdb"),c=ba.get(a);if(!c||c.status==="closed"){let l=new AM.default(a,!1);c=(0,Vf.open)(l),ba.set(a,c)}return c.auditStore||(c.auditStore=TR(c)),c}async function mw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,ba.delete(r.path),r.status==="open"&&(await r.close(),await OE.remove(r.path));if(r||(r=Zu({database:e,table:null}),r.status==="open"&&(await r.close(),await OE.remove(r.path))),e==="data"){for(let n in Sn)delete Sn[n];delete Sn[$R]}delete De[e],CE.forEach(n=>n(e)),await Kb(r)}function s3(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&bM[r.indexed.type]?.useObjectStore,s=new LE(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=bM[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Dr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=wM);let h=Zu({database:r,table:t}),E=De[r];Dr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let C=new LE(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let I,k;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let W=h.auditStore;S=a.find(ye=>ye.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=ET(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,er.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Dr.trace(`${t} table loading, opening primary store`);let ue=new LE(!1,!0);ue.compression=S.compression;let ce=t+"/";if(y=h.dbisDb=h.openDB(FR.INTERNAL_DBIS_NAME,C),X(),y.get(ce))return k&&k(),jd(),Ze(e);let te=wR(h.openDB(ce,ue),h);h.databaseName=r,te.tableId=y.get(Gf),Dr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Gf,te.tableId+1),S.tableId=te.tableId,g=n3(E,t,MR({primaryStore:te,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(ce,S)}let J=g.indices;y=y||(h.dbisDb=h.openDB(FR.INTERNAL_DBIS_NAME,C)),g.dbisDB=y;let G=[];for(let{key:W,value:ue}of y.getRange({start:!0})){let[ce,te]=W.toString().split("/");if(te===""&&(te=ue.name),te){if(ce!==t)continue}else continue;let ye=a.find(Ye=>Ye.name===te),Ae=!ye?.indexed&&ue.indexed&&!ue.isPrimaryKey;if((!ye||Ae)&&(X(),I=!0,ye||y.remove(W),Ae)){let Ye=g.indices[ce];Ye&&G.push(Ye)}}let H=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(I=!0,W.relationship))continue;let ue=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:ue,configurable:!0});let ce=y.get(ue);if(W.isPrimaryKey){if(ce=ce||y.get(ue=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ce.expiration||void 0)||(+s||void 0)!==(+ce.eviction||void 0)||W.type!==ce.type){let ye={...ce};typeof c=="boolean"&&(c&&g.enableAuditing(c),ye.audit=c),n&&(ye.expiration=+n),s&&(ye.eviction=+s),l!==void 0&&(ye.sealed=l),d!==void 0&&(ye.replicate=d),W.type&&(ye.type=W.type),I=!0,X(),y.put(ue,ye)}continue}ce?.attribute&&!ce.name&&(ce.indexed=!0);let te=!ce||ce.type!==W.type||JSON.stringify(ce.indexed)!==JSON.stringify(W.indexed)||ce.nullable!==W.nullable||ce.version!==W.version||JSON.stringify(ce.properties)!==JSON.stringify(W.properties)||JSON.stringify(ce.elements)!==JSON.stringify(W.elements);if(W.indexed){let ye=s3(ue,h,W);(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<PE.workerData?.restartNumber)&&(I=!0,X(),ce=y.get(ue),(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<PE.workerData?.restartNumber)&&(I=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ce?.lastIndexedKey??void 0,W.indexingPID=process.pid,ye.isIndexing=!0,Object.defineProperty(W,"dbi",{value:ye}),H.push(W))),y.put(ue,W)),ce?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),ye.indexNulls=W.indexNulls,J[W.name]=ye}else te&&(I=!0,X(),y.put(ue,W))}}finally{k&&k()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Dr.trace(`${t} table loading, running index`),H.length>0||G.length>0?g.indexingOperation=wAe(g,H,G):I&&kR.signalSchemaChange(new HR.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let W of NE)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Dr.trace(`${t} table loaded`),g;function X(){k||h.transactionSync(()=>({then(W){k=W}}))}o(X,"startTxn")}async function wAe(e,t,r){try{Dr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await kR.signalSchemaChange(new HR.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Vf.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let C=(0,XJ.getIndexedValues)(y);if(C)for(let I=0,k=C.length;I<k;I++)R.put(C[I],f)}catch(S){a[g]||(a[g]=!0,Dr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Dr.error(h)}),PE.workerData&&PE.workerData.restartNumber!==e3.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>AAe?await s:d>IAe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await kR.signalSchemaChange(new HR.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Dr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Dr.error("Error in indexing",n)}}function NAe({table:e,database:t}){let r=Zu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Dl(e){return NE.push(e),{remove(){let t=NE.indexOf(e);t>-1&&NE.splice(t,1)}}}function Vp(e){return CE.push(e),{remove(){let t=CE.indexOf(e);t>-1&&CE.splice(t,1)}}}function ET(){let e=(0,er.get)(F.STORAGE_COMPRESSION),t=(0,er.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,er.get)(F.STORAGE_COMPRESSION_THRESHOLD)||t3,n={startingOffset:32};return t&&(n.dictionary=OE.readFileSync(t)),r&&(n.threshold=r),e&&n}var er,FR,Vf,Vt,Is,qf,AM,OE,IM,XJ,kR,HR,PE,ZJ,e3,qR,RAe,Dr,wM,$R,t3,BR,Sn,De,Gf,NE,CE,GR,ba,$f,AAe,IAe,we=se(()=>{er=b(me()),FR=b(Yt()),Vf=require("lmdb"),Vt=require("path"),Is=require("fs"),qf=b(Rt());py();AM=b(Om());q();OE=b(require("fs-extra")),IM=b(ii()),XJ=b(Ln()),kR=b(ko()),HR=b(as()),PE=require("worker_threads"),ZJ=b(Q()),e3=b(nt());ki();Qc();Zn();JJ();qR=b(Cm()),{forComponent:RAe}=ZJ.default;o(LE,"OpenDBIObject");Dr=RAe("storage"),wM="data",$R=Symbol("defined-tables"),t3=((0,er.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,er.initSync)();BR=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Sn=Object.create(null),De=Object.create(null);(0,IM._assignPackageExport)("databases",De);(0,IM._assignPackageExport)("tables",Sn);Gf=Symbol.for("next-table-id"),NE=[],CE=[],ba=new Map;o(bAe,"getTables");o(at,"getDatabases");o(jd,"resetDatabases");o(wE,"readMetaDb");o(r3,"ensureDB");o(n3,"setTable");o(Zu,"database");o(mw,"dropDatabase");o(s3,"openIndex");o(Ze,"table");AAe=1e3,IAe=10;o(wAe,"runIndexing");o(NAe,"dropTableMeta");o(Dl,"onUpdatedTable");o(Vp,"onRemovedDB");o(ET,"getDefaultCompression")});var ae=v(be=>{"use strict";var xc=require("path"),l3=require("fs-extra"),jn=Q(),i3=require("fs-extra"),VR=require("os"),CAe=require("net"),OAe=require("recursive-iterator"),Mr=(q(),M(z)),{PACKAGE_ROOT:PAe}=Ct(),LAe=Rb(),o3=require("papaparse"),KR=require("moment"),{inspect:DAe}=require("util"),a3=require("is-number"),MAe=require("minimist"),vAe=require("https"),UAe=require("http"),xAe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,u3=require("util").promisify(setTimeout),BAe=100,FAe=5,kAe="",HAe=4,c3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=ws;be.isEmptyOrZeroLength=bo;be.arrayHasEmptyValues=$Ae;be.arrayHasEmptyOrZeroLengthValues=VAe;be.buildFolderPath=KAe;be.isBoolean=d3;be.errorizeMessage=GAe;be.stripFileExtension=WAe;be.autoCast=zAe;be.autoCastJSON=f3;be.autoCastJSONDeep=CM;be.removeDir=jAe;be.compareVersions=QAe;be.isCompatibleDataVersion=JAe;be.escapeRawValue=XAe;be.unescapeValue=ZAe;be.stringifyProps=eIe;be.timeoutPromise=rIe;be.isClusterOperation=sIe;be.getClusterUser=oIe;be.checkGlobalSchemaTable=iIe;be.getHomeDir=p3;be.getPropsFilePath=tIe;be.promisifyPapaParse=aIe;be.removeBOM=h3;be.createEventPromise=cIe;be.checkProcessRunning=lIe;be.checkSchemaTableExist=uIe;be.checkSchemaExists=E3;be.checkTableExists=_3;be.getStartOfTomorrowInSeconds=dIe;be.getLimitKey=fIe;be.isObject=YAe;be.isNotEmptyAndHasValue=qAe;be.autoCasterIsNumberCheck=m3;be.backtickASTSchemaItems=mIe;be.isPortTaken=nIe;be.createForkArgs=pIe;be.autoCastBoolean=hIe;be.asyncSetTimeout=u3;be.getTableHashAttribute=EIe;be.doesSchemaExist=_Ie;be.doesTableExist=gIe;be.stringifyObj=SIe;be.ms_to_time=TIe;be.changeExtension=yIe;be.getEnvCliRootPath=OM;be.noBootFile=RIe;be.httpRequest=bIe;be.transformReq=AIe;be.convertToMS=IIe;be.PACKAGE_ROOT=PAe;function GAe(e){return e instanceof Error?e:new Error(e)}o(GAe,"errorizeMessage");function ws(e){return e==null}o(ws,"isEmpty");function qAe(e){return!ws(e)&&(e||e===0||e===""||d3(e))}o(qAe,"isNotEmptyAndHasValue");function bo(e){return ws(e)||e.length===0||e.size===0}o(bo,"isEmptyOrZeroLength");function $Ae(e){if(ws(e))return!0;for(let t=0;t<e.length;t++)if(ws(e[t]))return!0;return!1}o($Ae,"arrayHasEmptyValues");function VAe(e){if(bo(e))return!0;for(let t=0;t<e.length;t++)if(bo(e[t]))return!0;return!1}o(VAe,"arrayHasEmptyOrZeroLengthValues");function KAe(...e){try{return e.join(xc.sep)}catch{console.error(e)}}o(KAe,"buildFolderPath");function d3(e){return ws(e)?!1:e===!0||e===!1}o(d3,"isBoolean");function YAe(e){return ws(e)?!1:typeof e=="object"}o(YAe,"isObject");function WAe(e){return bo(e)?kAe:e.slice(0,-HAe)}o(WAe,"stripFileExtension");function zAe(e){return ws(e)||e===""||typeof e!="string"?e:c3[e]!==void 0?c3[e]:m3(e)===!0?Number(e):xAe.test(e)?new Date(e):e}o(zAe,"autoCast");function f3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(f3,"autoCastJSON");function CM(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=CM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=CM(r);n!==r&&(e[t]=n)}return e}else return f3(e)}o(CM,"autoCastJSONDeep");function m3(e){if(e.startsWith("0.")&&a3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&a3(e))}o(m3,"autoCasterIsNumberCheck");async function jAe(e){if(bo(e))throw new Error(`Directory path: ${e} does not exist`);try{await i3.emptyDir(e),await i3.remove(e)}catch(t){throw jn.error(`Error removing files in ${e} -- ${t}`),t}}o(jAe,"removeDir");function QAe(e,t){if(bo(e)){jn.info("Invalid current version sent as parameter.");return}if(bo(t)){jn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(QAe,"compareVersions");function JAe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(JAe,"isCompatibleDataVersion");function XAe(e){if(ws(e))return e;let t=String(e);return t==="."?Mr.UNICODE_PERIOD:t===".."?Mr.UNICODE_PERIOD+Mr.UNICODE_PERIOD:t.replace(Mr.FORWARD_SLASH_REGEX,Mr.UNICODE_FORWARD_SLASH)}o(XAe,"escapeRawValue");function ZAe(e){if(ws(e))return e;let t=String(e);return t===Mr.UNICODE_PERIOD?".":t===Mr.UNICODE_PERIOD+Mr.UNICODE_PERIOD?"..":String(e).replace(Mr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(ZAe,"unescapeValue");function eIe(e,t){if(ws(e))return jn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+VR.EOL}!bo(n)&&n[0]===";"?r+=" "+n+s+VR.EOL:bo(n)||(r+=n+"="+s+VR.EOL)}catch{jn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(eIe,"stringifyProps");function p3(){let e;try{e=VR.homedir()}catch{e=process.env.HOME}return e}o(p3,"getHomeDir");function tIe(){let e=xc.join(p3(),Mr.HDB_HOME_DIR_NAME,Mr.BOOT_PROPS_FILE_NAME);return l3.existsSync(e)||(e=xc.join(__dirname,"../","hdb_boot_properties.file")),e}o(tIe,"getPropsFilePath");function rIe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(rIe,"timeoutPromise");async function nIe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=CAe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(nIe,"isPortTaken");function sIe(e){try{return Mr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(sIe,"isClusterOperation");function iIe(e,t){let r=(we(),M(mt)).getDatabases();if(!r[e])return YR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return YR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(iIe,"checkGlobalSchemaTable");function oIe(e,t){if(ws(t)){jn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ws(e)||bo(e)){jn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){jn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){jn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(oIe,"getClusterUser");function aIe(){o3.parsePromise=function(e,t,r){return new Promise(function(n,s){o3.parse(e,{header:!0,transformHeader:h3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(aIe,"promisifyPapaParse");function h3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(h3,"removeBOM");function cIe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;jn.info(`Got cluster status event response: ${DAe(s)}`);try{i.cancel()}catch{jn.error("Error trying to cancel timeout.")}n(s)})})}o(cIe,"createEventPromise");async function lIe(e){let t=!0,r=0;do await u3(BAe*r++),(await LAe.findPs(e)).length>0&&(t=!1);while(t&&r<FAe);if(t)throw new Error(`process ${e} was not started`)}o(lIe,"checkProcessRunning");function uIe(e,t){let r=E3(e);if(r)return r;let n=_3(e,t);if(n)return n}o(uIe,"checkSchemaTableExist");function E3(e){let{getDatabases:t}=(we(),M(mt));if(!t()[e])return YR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(E3,"checkSchemaExists");function _3(e,t){let{getDatabases:r}=(we(),M(mt));if(!r()[e][t])return YR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(_3,"checkTableExists");function dIe(){let e=KR().utc().add(1,"d").startOf("d").unix(),t=KR().utc().unix();return e-t}o(dIe,"getStartOfTomorrowInSeconds");function fIe(){return KR().utc().format("DD-MM-YYYY")}o(fIe,"getLimitKey");function mIe(e){try{let t=new OAe(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){jn.error("Got an error back ticking items."),jn.error(t)}}o(mIe,"backtickASTSchemaItems");function pIe(e){return[e]}o(pIe,"createForkArgs");function hIe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(hIe,"autoCastBoolean");function EIe(e,t){let{getDatabases:r}=(we(),M(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(EIe,"getTableHashAttribute");function _Ie(e){let{getDatabases:t}=(we(),M(mt));return t()[e]!==void 0}o(_Ie,"doesSchemaExist");function gIe(e,t){let{getDatabases:r}=(we(),M(mt));return r()[e]?.[t]!==void 0}o(gIe,"doesTableExist");function SIe(e){try{return JSON.stringify(e)}catch{return e}}o(SIe,"stringifyObj");function TIe(e){let t=KR.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(TIe,"ms_to_time");function yIe(e,t){let r=xc.basename(e,xc.extname(e));return xc.join(xc.dirname(e),r+t)}o(yIe,"changeExtension");function OM(){if(process.env[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=MAe(process.argv);if(e[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Mr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(OM,"getEnvCliRootPath");var NM;function RIe(){if(NM)return NM;let e=OM();if(OM()&&l3.pathExistsSync(xc.join(e,Mr.HDB_CONFIG_FILE)))return NM=!0,!0}o(RIe,"noBootFile");function bIe(e,t){let r;return e.protocol==="http:"?r=UAe:r=vAe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(bIe,"httpRequest");function AIe(e){if(!e.schema&&!e.database){e.schema=Mr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(AIe,"transformReq");function IIe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(IIe,"convertToMS");var YR=zr()});var me=v((y3,R3)=>{"use strict";var PM=require("fs-extra"),Eu=require("path"),g3=require("os"),wIe=require("properties-reader"),ME=Q(),DE=ae(),Ge=(q(),M(z)),WR=St(),NIe="Error initializing environment manager",zR="BOOT_PROPS_FILE_PATH",S3=!1,CIe={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Aa={};Object.assign(y3,R3.exports={BOOT_PROPS_FILE_PATH:zR,getHdbBasePath:OIe,setHdbBasePath:PIe,get:T3,initSync:DIe,setProperty:rt,initTestEnvironment:MIe});function OIe(){return Aa[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(OIe,"getHdbBasePath");function PIe(e){Aa[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(PIe,"setHdbBasePath");function T3(e){let t=WR.getConfigValue(e);return t===void 0?Aa[e]:t}o(T3,"get");function rt(e,t){CIe[e]&&(Aa[e]=t),WR.updateConfigObject(e,t)}o(rt,"setProperty");function LIe(){let e;try{e=DE.getPropsFilePath(),PM.accessSync(e,PM.constants.F_OK|PM.constants.R_OK),S3=!0;let t=wIe(e);return Aa[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),Aa[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Aa[zR]=e,!0}catch{return ME.trace(`Environment manager found no properties file at ${e}`),!1}}o(LIe,"doesPropFileExist");function DIe(e=!1){try{(S3||LIe()||DE.noBootFile()||e)&&(WR.initConfig(e),Aa[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=WR.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ME.error(NIe),ME.error(t),console.error(t),process.exit(1)}}o(DIe,"initSync");function MIe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Eu.join(__dirname,"../../","unitTests");Aa[zR]=Eu.join(l,"hdb_boot_properties.file"),rt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Eu.join(l,"settings.test")),rt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,g3.userInfo()?g3.userInfo().username:void 0),rt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),rt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Eu.join(l,"envDir","log")),rt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),rt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),rt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),rt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Eu.join(l,"envDir")),rt(Ge.CONFIG_PARAMS.STORAGE_PATH,Eu.join(l,"envDir")),s&&(rt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,T3(Ge.CONFIG_PARAMS.HTTP_PORT)),rt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),rt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),rt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),rt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),rt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),rt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,DE.isEmpty(i)?!1:i),rt(Ge.CONFIG_PARAMS.HTTP_CORS,DE.isEmpty(i)?!1:i),rt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),rt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Eu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),rt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,DE.isEmpty(c)?!1:c),a&&(rt("CORS_ACCESSLIST",a),rt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),rt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),rt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),rt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${zR}. Please check your boot props and settings files`;ME.fatal(r),ME.error(t)}}o(MIe,"initTestEnvironment")});var C3=v((QGe,N3)=>{"use strict";var{promises:Kf,createReadStream:vIe,createWriteStream:UIe}=require("fs"),{createGzip:xIe}=require("zlib"),{promisify:BIe}=require("util"),{pipeline:FIe}=require("stream"),kIe=BIe(FIe),DM=require("path"),w3=me();w3.initSync();var jR=Q(),{CONFIG_PARAMS:HIe,ITC_EVENT_TYPES:zGe}=(q(),M(z)),{onMessageFromWorkers:jGe}=nt(),{convertToMS:b3}=ae(),{onStorageReclamation:GIe}=(_R(),M(fJ)),qIe=6e4,$Ie="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",VIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",LM,A3;N3.exports=KIe;function KIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(GIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error($Ie);if(!i)throw new Error(VIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=b3(r));let d;return LM=Date.now(),jR.trace("Log rotate enabled, maxSize:",t,"interval:",r),A3=setInterval(async()=>{if(l){let f;f=await Kf.stat(e.path),f.size>=l&&(d=await I3(e.path,i))}if(u&&Date.now()-LM>=u&&(d=await I3(e.path,i),LM=Date.now()),n||c){let f=b3(n??"1M")/(1+c);c=0;let m=await Kf.readdir(i);for(let p of m)try{let h=await Kf.stat(DM.join(i,p));Date.now()-h.mtimeMs>f&&await Kf.unlink(DM.join(i,p))}catch(h){jR.error("Error trying to remove log",p,h)}}},a??qIe).unref(),{end(){clearInterval(A3)},getLastRotatedLogPath(){return d}}}o(KIe,"logRotator");async function I3(e,t){let r=w3.get(HIe.LOGGING_ROTATION_COMPRESS),n=DM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Kf.rename(e,n),r&&(e=n,n+=".gz",await kIe(vIe(e),xIe(),UIe(n)),await Kf.unlink(e)),jR.closeLogFile(),jR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(I3,"moveLogFile")});var M3={};Re(M3,{RootConfigWatcher:()=>MM});var O3,P3,L3,QR,D3,MM,v3=se(()=>{O3=b(require("chokidar")),P3=require("node:fs/promises"),L3=b(St()),QR=require("node:stream"),D3=require("yaml"),MM=class extends QR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,L3.getConfigFilePath)(),this.ready=(0,QR.once)(this,"ready"),this.#t=O3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,P3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,D3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=v((tqe,sb)=>{"use strict";var Ia=require("fs-extra"),{workerData:YIe,threadId:WIe,isMainThread:H3}=require("worker_threads"),xE=require("path"),G3=require("yaml"),q3=require("properties-reader"),Yr=(q(),M(z)),U3=$c(),zIe=require("os"),{PACKAGE_ROOT:GM}=Ct(),{_assignPackageExport:jIe}=ii(),{Console:QIe}=require("console"),UM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),x3=new Map,{join:wa}=xE,B3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},JIe={STDOUT:"stdOut",STDERR:"stdErr"},eqe=wa(GM,"logs"),XIe=wa(GM,"config/yaml/",Yr.HDB_DEFAULT_CONFIG_FILE),ZIe=1e4,BE,FE,JR,Ao,xM,vM,ZR,Ut,Ns,eb,tb,Yf,UE,vE;function XR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=xE.dirname(n)):t.root?n=wa(t.root,xM):(n=Ut.path,t.root||(t.root=xE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Ut?.level??cr.info,$3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ut.path===e.path&&r)}o(XR,"updateLogger");function $3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o($3,"updateConditional");async function BM(){vE||(vE=new Swe,await vE.ready,vE.on("change",BM));let e=vE.config,t=e.logging??{};XR(Ut,t),ZR=Ut.path,BE=t.console??!1,t.external&&XR(Ns,t.external);for(let r in e){let n=e[r];n.logging?XR(Ut.forComponent(r),n.logging,r):Ut.hasComponent(r)&&XR(Ut.forComponent(r),t,r)}}o(BM,"updateLogSettings");var FM=class extends QIe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Cn="trace",this.level<=cr.trace&&super.info(...t),Cn="info"}debug(...t){Cn="debug",this.level<=cr.debug&&super.info(...t),Cn="info"}info(...t){Cn="info",this.level<=cr.info&&super.info(...t),Cn="info"}warn(...t){Cn="warn",this.level<=cr.warn&&super.warn(...t),Cn="info"}error(...t){Cn="error",this.level<=cr.error&&super.error(...t),Cn="info"}fatal(...t){Yf=!0;try{Cn="fatal",this.level<=cr.fatal&&super.error(...t),Cn="info"}finally{Yf=!1}}notify(...t){Yf=!0;try{Cn="notify",this.level<=cr.notify&&super.info(...t),Cn="info"}finally{Yf=!1}}withTag(t){return K3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};UE===void 0&&V3();sb.exports={notify:cwe,fatal:lwe,error:HM,warn:uwe,info:iwe,debug:awe,trace:owe,logLevel:Ao,loggerWithTag:K3,suppressLogging:nwe,initLogSettings:V3,logCustomLevel:dwe,closeLogFile:Y3,createLogger:nb,logsAtLevel:twe,getLogFilePath:o(()=>ZR,"getLogFilePath"),forComponent:o(e=>Ut.forComponent(e),"forComponent"),setMainLogger:_we,setLogLevel:mwe,OUTPUTS:JIe,AuthAuditLog:gwe,start:BM,startOnMainThread:BM,errorToString:Ewe,disableStdio:ewe};function ewe(){UM=o(function(){},"nativeStdWrite")}o(ewe,"disableStdio");sb.exports.externalLogger={notify(...e){Ns.notify(...e)},fatal(...e){Ns.fatal(...e)},error(...e){Ns.error(...e)},warn(...e){Ns.warn(...e)},info(...e){Ns.info(...e)},debug(...e){Ns.debug(...e)},trace(...e){Ns.trace(...e)},withTag(e){return Ns.withTag(e)}};jIe("logger",sb.exports.externalLogger);function twe(e){return cr[Ao]<=cr[e]}o(twe,"logsAtLevel");function V3(e=!1){try{if(UE===void 0||e){Y3();let t=fwe(),r=U3(["ROOTPATH"]);try{UE=q3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ia.pathExistsSync(wa(r.ROOTPATH,Yr.HDB_CONFIG_FILE)))throw s}let n;if({level:Ao,configLogPath:vM,toFile:FE,logConsole:BE,rotation:n,toStream:JR}=pwe(r.ROOTPATH?wa(r.ROOTPATH,Yr.HDB_CONFIG_FILE):UE.get("settings_path")),xM=Yr.LOG_NAMES.HDB,ZR=wa(vM,xM),Ut=nb({path:ZR,level:Ao,stdStreams:JR,rotation:n}),Ns=Ut.forComponent("external"),Ns.tag=null,H3)try{require("segfault-handler").registerHandler(wa(vM,"crash.log"))}catch{}}}catch(t){if(UE=void 0,t.code===Yr.NODE_ERROR_CODES.ENOENT||t.code===Yr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=U3(Object.keys(Yr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Yr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Yr.CONFIG_PARAMS.LOGGING_LEVEL){Ao=a;continue}i===Yr.CONFIG_PARAMS.LOGGING_CONSOLE&&(BE=i)}let{defaultLevel:n}=hwe();FE=!1,JR=!0,Ao=Ao===void 0?n:Ao,Ut=nb({level:Ao}),Ns=Ut.forComponent("external"),Ns.tag=null;return}throw HM("Error initializing log settings"),HM(t),t}process.env.DEV_MODE&&(JR=!0),rwe()}o(V3,"initLogSettings");var Bc=!0;function rwe(){FE&&(process.stdout.write=function(e){return typeof e=="string"&&Bc&&BE&&(e=e.toString(),e[e.length-1]===`
132
132
  `&&(e=e.slice(0,-1)),tb(e)),UM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Bc&&BE&&(e[e.length-1]===`
133
133
  `&&(e=e.slice(0,-1)),tb(e)),UM.apply(process.stderr,arguments)})}o(rwe,"stdioLogging");function K3(e,t,r=Ut){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){rb=e;try{return s.call(r,...a)}finally{rb=void 0}}:null}o(n,"logWithTag")}o(K3,"loggerWithTag");function nwe(e){try{Bc=!1,e()}finally{Bc=!0}}o(nwe,"suppressLogging");var swe=YIe?.name?.replace(/ /g,"-")||"main",Cn="info",kM,rb;function nb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=cr[t],l;function u(p){if(FE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Bc=!1;try{process.stdout.write(p)}finally{Bc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(FE){if(f(p),r){Bc=!1;try{process.stderr.write(p)}finally{Bc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&k3(e,n,s);function m(p){return{write(h){let E=[Cn];E.unshift(kM||swe+"/"+WIe),rb&&E.push(rb),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(tb=f),l=new FM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),$3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=k3(e,l.rotation,s),s&&(tb=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=nb({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(nb,"createLogger");var F3=100;function k3(e,t,r){let n=x3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,x3.set(e,n)),H3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=C3();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
134
134
  `)?"":`