harperdb 4.5.39 → 4.5.40

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.
@@ -16,7 +16,7 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
16
16
 
17
17
  `:`data: ${e}
18
18
 
19
- `},"serialize"),compressible:!1,q:.8});Wr.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});KL={type:"application/json",serializeStream:Df,serialize:xf,deserialize:E3,q:.5};Wr.set("*/*",KL);Wr.set("",KL);a(E3,"tryJSONParse");a(Hf,"registerContentHandlers");g3=require("fastify-plugin"),S3=g3(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=yp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(yp,"findBestSerializer");FL=pR.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(kf,"serialize");a(la,"serializeMessage");a(hR,"asyncSerialization");a(mR,"hasAsyncSerialization");a(T3,"streamToBuffer");A3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(R3,"isBufferEncoding");a(y3,"parseContentType");a(ao,"getDeserializer");a(b3,"deserializerUnknownType");a(O3,"transformIterable");a(Rp,"toCsvStream")});var AR={};Ue(AR,{start:()=>v3});function N3(e){if(e.kind!==Me.Kind.OPERATION_DEFINITION&&e.kind!==Me.Kind.FRAGMENT_DEFINITION)throw new Or(`Unexpected non-executable definition type ${e.kind}.`)}function WL(e){if(typeof e!="object"||e===null)throw new yi("Request body must be an object.");if(!("query"in e))throw new yi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new yi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new yi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new yi("Request body `operationName` field must be a string.")}function TR(e){return parseInt(e.value,10)}function jL(e){return parseFloat(e.value)}function QL(e,t,r){let n=r.get(e.name.value);return JL(n)?XL(n,t):{attribute:t,value:n}}function JL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function XL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],JL(n)?XL(n,t):{attribute:t,value:n}))}function w3(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Me.Kind.NULL:return{attribute:t,value:null};case Me.Kind.INT:return{attribute:t,value:TR(e.value)};case Me.Kind.FLOAT:return{attribute:t,value:jL(e.value)};case Me.Kind.BOOLEAN:case Me.Kind.STRING:return{attribute:t,value:e.value.value};case Me.Kind.VARIABLE:return QL(e.value,t,r);case Me.Kind.OBJECT:return ZL(e.value,t,r);case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Or(`Value type, ${e.value.kind}, is not supported.`)}}function ZL(e,t,r){return e.fields.flatMap(n=>w3(n,t,r))}function I3(e,t){switch(e.value.kind){case Me.Kind.NULL:return{attribute:e.name.value,value:null};case Me.Kind.INT:return{attribute:e.name.value,value:TR(e.value)};case Me.Kind.FLOAT:return{attribute:e.name.value,value:jL(e.value)};case Me.Kind.BOOLEAN:case Me.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Me.Kind.VARIABLE:return QL(e.value,e.name.value,t);case Me.Kind.OBJECT:return ZL(e.value,[e.name.value],t);case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Or(`Argument type, ${e.value.kind}, is not supported.`)}}function C3(e,t){return e.flatMap(r=>I3(r,t))}function bp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Me.Kind.FIELD:return r;case Me.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Or(`Fragment \`${n}\` not found.`);return bp(s.selectionSet,t)}case Me.Kind.INLINE_FRAGMENT:return bp(r.selectionSet,t)}})}function eM(e,t){return bp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:eM(r.selectionSet,t)}:r.name.value)}async function P3(e,t,r,n){let s=_s.getMatch(e.name.value,"graphql");if(s===void 0)throw new Or(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:eM(e.selectionSet,r),conditions:C3(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function tM(e){switch(e.kind){case Me.Kind.NULL:return null;case Me.Kind.INT:return TR(e);case Me.Kind.FLOAT:return parseFloat(e.value);case Me.Kind.STRING:case Me.Kind.BOOLEAN:return e.value;case Me.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:tM(r.value),...t}),{});case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Or(`Value type, ${e.kind}, is not supported.`)}}function D3(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=tM(n.defaultValue)),n.type.kind===Me.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Or(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function L3(e,t,r,n){if(e.operation===Me.OperationTypeNode.SUBSCRIPTION)throw new Or("Subscriptions are not supported.");if(e.operation===Me.OperationTypeNode.MUTATION)throw new Or("Mutations are not supported yet.");let s=D3(e.variableDefinitions,t),i=await Promise.all(bp(e.selectionSet,r).map(c=>P3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function zL({query:e,variables:t={},operationName:r},n){let s=Me.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(N3(u),u.kind===Me.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Or("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Or(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Or("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Or(`Operation \`${r}\` not found.`);let l=await L3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function M3(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return WL(r),zL(r,e)}case"POST":{let r=await ao(e.headers.get("content-type"),!0)(e._nodeRequest);return WL(r),zL(r,e)}default:throw new yi("Method Not Allowed",405,{Allow:"GET, POST"})}}function v3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await M3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Me.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Or)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Me.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Or)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Me,Or,yi,rM=Re(()=>{Me=v(require("graphql"));so();su();a(N3,"assertExecutableDefinitionNode");a(WL,"assertRequestParams");a(TR,"processIntValueNode");a(jL,"processFloatValueNode");a(QL,"processVariableNode");a(JL,"isObject");a(XL,"transformObjectIntoQueryCondition");a(w3,"processObjectFieldNode");a(ZL,"processObjectValueNode");a(I3,"processArgumentNode");a(C3,"buildConditionsQuery");a(bp,"fillInFragments");a(eM,"buildSelectQuery");a(P3,"processFieldNode");a(tM,"processConstValueNode");a(D3,"resolveVariables");a(L3,"executeOperation");a(zL,"resolver");Or=class extends Error{static{a(this,"GraphQLQueryingError")}},yi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(M3,"graphqlQueryingHandler");a(v3,"start")});var Oi=C((WRe,iM)=>{"use strict";var sM=ie(),nM=(k(),P(q)),du=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bi=require("joi"),ua={schema_format:{pattern:du,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},U3=bi.alternatives(bi.string().min(1).max(ua.schema_length.maximum).pattern(du).messages({"string.pattern.base":"{:#label} "+ua.schema_format.message}),bi.number(),bi.array()).required(),x3=bi.alternatives(bi.string().min(1).max(ua.schema_length.maximum).pattern(du).messages({"string.pattern.base":"{:#label} "+ua.schema_format.message}),bi.number()),B3=bi.alternatives(bi.string().min(1).max(ua.schema_length.maximum).pattern(du).messages({"string.pattern.base":"{:#label} "+ua.schema_format.message}),bi.number()).required();function H3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ua.schema_length.maximum?`'${e}' maximum of 250 characters`:du.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(H3,"checkValidTable");function k3(e,t){return sM.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(k3,"validateSchemaExists");function F3(e,t){let r=t.state.ancestors[0].schema;return sM.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(F3,"validateTableExists");function G3(e,t){return e.toLowerCase()===nM.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${nM.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(G3,"validateSchemaName");iM.exports={common_validators:ua,schema_regex:du,hdb_schema_table:U3,validateSchemaExists:k3,validateTableExists:F3,validateSchemaName:G3,checkValidTable:H3,hdb_database:x3,hdb_table:B3}});var yR=C((jRe,aM)=>{var{hdb_table:q3,hdb_database:oM}=Oi(),$3=it(),RR=require("joi"),V3={undefined:"undefined",null:"null"},K3=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||V3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),Y3=RR.object({database:oM,schema:oM,table:q3,records:RR.array().items(RR.object().custom(K3)).required()});aM.exports=function(e){return $3.validateBySchema(e,Y3)}});var lM=C((JRe,cM)=>{"use strict";var bR=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};cM.exports=bR});var dM=C((ZRe,uM)=>{"use strict";var OR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uM.exports=OR});var pM={};Ue(pM,{HAS_EXPIRATION:()=>Ip,HAS_RESIDENCY_ID:()=>DR,HAS_STRUCTURE_UPDATE:()=>Pp,LAST_TIMESTAMP_PLACEHOLDER:()=>$f,LOCAL_TIMESTAMP:()=>W3,METADATA:()=>Pc,NEW_TIMESTAMP_PLACEHOLDER:()=>_M,NO_TIMESTAMP:()=>Np,PENDING_LOCAL_TIME:()=>LR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>PR,RecordEncoder:()=>CR,TIMESTAMP_ASSIGN_LAST:()=>j3,TIMESTAMP_ASSIGN_NEW:()=>hM,TIMESTAMP_ASSIGN_PREVIOUS:()=>mM,TIMESTAMP_PLACEHOLDER:()=>Op,TIMESTAMP_RECORD_PREVIOUS:()=>NR,handleLocalTimeForGets:()=>Dp,recordUpdater:()=>MR,removeEntry:()=>Lc});function J3(){return qf[0]=qf[0]^64,z3.getFloat64(0)}function Dp(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[Pc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[Pc]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[Pc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Cc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Cc.length;u++){let f=Cc[u].deref();(!f||f.isDone||f.isCommitted)&&Cc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function MR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,_){l==null?Ic=Np:d?Ic=i?.localTime?NR|mM:Np:Ic=l?i?.localTime?NR|16384:hM|16384:Np;let h=u?.expiresAt;if(h>=0&&(c|=Ip),Gf=c,wR=h,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:Ic>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(IR=E,Gf|=DR,g|=Mc),R!==E&&(g|=vc,R||(R=0)),c&Ip&&(g|=Kf),u?.originatingOperation&&(g|=Vf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&f!=="message"&&i.metadataFlags&Ur&&(!i.localTime||!r.getBinaryFast(i.localTime))&&ca(i.value);let T;if(s!==void 0&&(T=Tp(()=>e.put(n,s,m),n,e.rootStore),Oc&&(g|=Ur)),l){let N=u?.user?.username;if(_&&(Tp(()=>e.encoder.encode(_),n,e.rootStore),Oc&&(g|=Ur)),e.encoder.hasStructureUpdate&&(g|=Pp,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let M=i?.localTime,H=r.get(M);if(H){let X=St(H).previousLocalTime;return T=r.put(M,Dc(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,Ff,g,E,R,h),{ifVersion:S}),T}}T=r.put(s===void 0?_M:$f,Dc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,Ff,g,E,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function Lc(e,t,r){if(t)return t.value&&t.metadataFlags&Ur&&!e.auditStore?.getBinaryFast(t.localTime)&&ca(t.value),e.remove(t.key,r)}var fM,wp,Op,$f,PR,_M,W3,Pc,qf,z3,Np,hM,j3,mM,NR,Ip,DR,LR,Pp,Q3,Ff,Ic,Gf,wR,IR,CR,Cc,fu=Re(()=>{fM=require("msgpackr");Ai();wp=v(ee());gn();gn();Op=new Uint8Array([1,1,1,1,4,64,0,0]),$f=new Uint8Array([1,1,1,1,1,0,0,0]),PR=new Uint8Array([1,1,1,1,3,64,0,0]),_M=new Uint8Array([1,1,1,1,0,64,0,0]),W3=Symbol("local-timestamp"),Pc=Symbol("metadata"),qf=new Uint8Array(8),z3=new DataView(qf.buffer,0,8),Np=0,hM=0,j3=1,mM=3,NR=4,Ip=16,DR=32,LR=1,Pp=256,Ic=0,Gf=-1,wR=-1,IR=0,CR=class extends fM.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ic||Gf>=0){let o=0,c=Ic;c&&(o+=8,Ic=0);let l=Gf,u=wR,f=IR;l>=0&&(o+=4,Gf=-1,u>=0&&(o+=8,wR=-1),f&&(o+=4,IR=0));let d=Q3=r.call(this,s,i|2048|o);Ff=d.subarray((d.start||0)+o,d.end);let _=d.start||0;return c&&(Op[4]=c,Op[5]=c>>8,d.set(Op,_),_+=8),Oc&&(l|=Ur),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,l|Cp<<24),_+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(_,u),_+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,f)),d}else return Ff=r.call(this,s,i),Ff};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(qf,0,c),c+=8;else for(let _=0;_<8;_++)qf[_]=t[c++];l=J3(),i=t[c]}let u,f;i<32&&(i===Cp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Ip&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&DR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=no(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[Pc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:no(()=>super.decode(t,r),this.rootStore)}catch(c){return wp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(J3,"getTimestamp");a(Dp,"handleLocalTimeForGets");Cc=[];setInterval(()=>{for(let e=0;e<Cc.length;e++){let t=Cc[e].deref();!t||t.isDone||t.isCommitted?Cc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(wp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):wp.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();a(MR,"recordUpdater");a(Lc,"removeEntry")});var Yf=C((iye,gM)=>{"use strict";var EM=le(),X3=(k(),P(q)),{RecordEncoder:Z3}=(fu(),P(pM));EM.initSync();var eX=EM.get(X3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,vR=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=eX&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Z3})}};gM.exports=vR});var Wf=C((aye,SM)=>{"use strict";var qn=le(),hs=(k(),P(q));qn.initSync();var Lp=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=qn.get(hs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qn.get(hs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qn.get(hs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",qn.get(hs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=qn.get(hs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),qn.get(hs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=qn.get(hs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=qn.get(hs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};SM.exports=Lp;Lp.MAX_DBS=1e4});var ht=C((lye,CM)=>{"use strict";var xR=require("lmdb"),qs=require("fs-extra"),$n=require("path"),Mp=fn(),RM=ee(),Sn=xn().LMDB_ERRORS_ENUM,vp=dM(),BR=Yf(),yM=Wf(),da=Ft(),TM=(k(),P(q)),{table:tX,resetDatabases:rX}=(xe(),P(ct)),AM=le(),$s=da.INTERNAL_DBIS_NAME,bM=da.DBI_DEFINITION_NAME,nX="data.mdb",sX="lock.mdb",zf=".mdb",iX="-lock",UR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ms(t,r),this.key_type=this.dbi[da.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[da.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new xR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Up(e,t){if(e===void 0)throw new Error(Sn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Sn.ENV_NAME_REQUIRED)}a(Up,"pathEnvNameValidation");async function HR(e,t,r=!0){try{await qs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Sn.INVALID_BASE_PATH):n}try{let n=$n.join(e,t+zf);return await qs.access(n,qs.constants.R_OK|qs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await qs.access($n.join(e,t,nX),qs.constants.R_OK|qs.constants.F_OK),$n.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Sn.INVALID_ENVIRONMENT)}else throw new Error(Sn.INVALID_ENVIRONMENT);throw n}}a(HR,"validateEnvironmentPath");function xp(e,t){if(Mp.validateEnv(e),t===void 0)throw new Error(Sn.DBI_NAME_REQUIRED)}a(xp,"validateEnvDBIName");async function oX(e,t,r=!1,n=!1){Up(e,t);let s=$n.basename(e);t=t.toString();let i=AM.get(TM.CONFIG_PARAMS.DATABASES);i||AM.setProperty(TM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await HR(e,t,n),OM(e,t,r)}catch(o){if(o.message===Sn.INVALID_ENVIRONMENT){let c=$n.join(e,t);await qs.mkdirp(n?c:e);let l=new yM(n?c:c+zf,!1),u=xR.open(l);u.dbis=Object.create(null);let f=new BR(!1);u.openDB($s,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=kR(e,t,r);return u[da.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(oX,"createEnvironment");async function aX(e,t,r,n=!0){Up(e,t),t=t.toString();let s=$n.join(e,t);return tX({table:t,database:$n.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(aX,"copyEnvironment");async function OM(e,t,r=!1){Up(e,t),t=t.toString();let n=kR(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await HR(e,t),i=$n.join(e,t+zf),o=s!=i,c=new yM(s,o),l=xR.open(c);l.dbis=Object.create(null);let u=wM(l);for(let f=0;f<u.length;f++)ms(l,u[f]);return l[da.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(OM,"openEnvironment");async function cX(e,t,r=!1){Up(e,t),t=t.toString();let n=$n.join(e,t+zf),s=await HR(e,t);if(global.lmdb_map!==void 0){let i=kR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await NM(o),delete global.lmdb_map[i]}}await qs.remove(s),await qs.remove(s===n?s+iX:$n.join($n.dirname(s),sX))}a(cX,"deleteEnvironment");async function NM(e){Mp.validateEnv(e);let t=e[da.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(NM,"closeEnvironment");function kR(e,t,r=!1){let s=`${$n.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(kR,"getCachedEnvironmentName");function lX(e){Mp.validateEnv(e);let t=Object.create(null),r=ms(e,$s);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==$s)try{t[n]=Object.assign(new vp,s)}catch{RM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(lX,"listDBIDefinitions");function wM(e){Mp.validateEnv(e);let t=[],r=ms(e,$s);for(let{key:n}of r.getRange({start:!1}))n!==$s&&t.push(n);return t}a(wM,"listDBIs");function uX(e,t){let n=ms(e,$s).getEntry(t),s=new vp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{RM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(uX,"getDBIDefinition");function IM(e,t,r,n=!r){if(xp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ms(e,t)}catch(s){if(s.message===Sn.DBI_DOES_NOT_EXIST){let i=new BR(r,n===!0),o=e.openDB(t,i),c=new vp(r===!0,n);return o[bM]=c,ms(e,$s).putSync(t,c),e.dbis[t]=o,o}throw s}}a(IM,"createDBI");function ms(e,t){if(xp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==$s?r=uX(e,t):r=new vp,r===void 0)throw new Error(Sn.DBI_DOES_NOT_EXIST);let n;try{let s=new BR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Sn.DBI_DOES_NOT_EXIST):s}return n[bM]=r,e.dbis[t]=n,n}a(ms,"openDBI");function dX(e,t){xp(e,t),t=t.toString();let r=ms(e,t),n=r.getStats();return r[da.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(dX,"statDBI");async function fX(e,t){try{let r=$n.join(e,t+zf);return(await qs.stat(r)).size}catch{throw new Error(Sn.INVALID_ENVIRONMENT)}}a(fX,"environmentDataSize");function _X(e,t){if(xp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_DROP_INTERNAL_DBIS_NAME);ms(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ms(e,$s).removeSync(t)}a(_X,"dropDBI");function hX(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ms(e,i)}catch(o){if(o.message===Sn.DBI_DOES_NOT_EXIST)IM(e,i,i!==t,i===t),n=!0;else throw o}}n&&rX()}a(hX,"initializeDBIs");CM.exports={openDBI:ms,openEnvironment:OM,createEnvironment:oX,listDBIs:wM,listDBIDefinitions:lX,createDBI:IM,dropDBI:_X,statDBI:dX,deleteEnvironment:cX,initializeDBIs:hX,TransactionCursor:UR,environmentDataSize:fX,copyEnvironment:aX,closeEnvironment:NM}});var DM=C((dye,PM)=>{"use strict";var FR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};PM.exports=FR});var MM=C((_ye,LM)=>{"use strict";var GR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};LM.exports=GR});var UM=C((mye,vM)=>{"use strict";var qR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};vM.exports=qR});var xc=C((Tye,HM)=>{"use strict";var mX=ht(),pX=DM(),EX=MM(),gX=UM(),Ni=fn(),jf=xn().LMDB_ERRORS_ENUM,SX=Ft(),co=(k(),P(q)),TX=ie(),AX=require("uuid"),Eye=require("lmdb"),{handleHDBError:RX,hdb_errors:yX}=he(),{OVERFLOW_MARKER:gye,MAX_SEARCH_KEY_LENGTH:Sye}=SX,xM=le();xM.initSync();var Bp=xM.get(co.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),$R=co.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Uc=co.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function bX(e,t,r,n,s=Ni.getNextMonotonicTime()){WR(e,t,r,n),VR(e,t,r);let i=new pX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];BM(u,!0,s);let f=OX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return KR(o,c,n,i,s)}a(bX,"insertRecords");function OX(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let f=c([[{}]]);Array.isArray(f)&&(c=f[0][co.FUNC_VAL],n[o]=c)}let l=Ni.getIndexedValues(c),u=e.dbis[o];if(l){Bp&&u.prefetch(l.map(f=>({key:f,value:s})),Hp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Bp&&e.dbis[t].prefetch([s],Hp),e.dbis[t].put(s,n,n[Uc])})}a(OX,"insertRecord");function NX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(NX,"removeSkippedRecords");function BM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Uc]))&&(e[Uc]=r||(r=Ni.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[$R]))&&(e[$R]=r||Ni.getNextMonotonicTime()):delete e[$R]}a(BM,"setTimestamps");function VR(e,t,r){r.indexOf(co.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(co.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(co.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(co.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),mX.initializeDBIs(e,t,r)}a(VR,"initializeTransaction");async function wX(e,t,r,n,s=Ni.getNextMonotonicTime()){WR(e,t,r,n),VR(e,t,r);let i=new EX,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],_;try{_=YR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(_),l.push(d)}return KR(c,l,n,i,s,o)}a(wX,"updateRecords");async function IX(e,t,r,n,s=Ni.getNextMonotonicTime()){try{WR(e,t,r,n)}catch(l){throw RX(l,l.message,yX.HTTP_STATUS_CODES.BAD_REQUEST)}VR(e,t,r);let i=new gX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;TX.isEmpty(u[t])?(f=AX.v4(),u[t]=f):f=u[t];let d=YR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return KR(o,c,n,i,s)}a(IX,"upsertRecords");async function KR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ni.getNextMonotonicTime(),NX(r,i),n}a(KR,"finalizeWrite");function YR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(BM(r,!f,o),Number.isInteger(r[Uc])&&u[Uc]>r[Uc])return!1;f&&s.original_records.push(u);let d,_=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let S=r[m],g=e.dbis[m];if(g===void 0)continue;let R=u[m];if(typeof S=="function"){let T=S([[u]]);Array.isArray(T)&&(S=T[0][co.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ni.getIndexedValues(R);if(E){Bp&&g.prefetch(E.map(T=>({key:T,value:n})),Hp);for(let T=0,N=E.length;T<N;T++)g.remove(E[T],n)}if(E=Ni.getIndexedValues(S),E){Bp&&g.prefetch(E.map(T=>({key:T,value:n})),Hp);for(let T=0,N=E.length;T<N;T++)g.put(E[T],n)}}let h={...u,...r};c.put(n,h,h[Uc])},"do_put");return l?d=c.ifVersion(n,l.version,_):d=c.ifNoExists(n,_),d.then(h=>h?!0:YR(e,t,r,n,s,i,o))}a(YR,"updateUpsertRecord");function CX(e,t,r){if(Ni.validateEnv(e),t===void 0)throw new Error(jf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(jf.WRITE_ATTRIBUTES_REQUIRED):new Error(jf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(CX,"validateBasic");function WR(e,t,r,n){if(CX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(jf.RECORDS_REQUIRED):new Error(jf.RECORDS_MUST_BE_ARRAY)}a(WR,"validateWrite");function Hp(){}a(Hp,"noop");HM.exports={insertRecords:bX,updateRecords:wX,upsertRecords:IX}});var lo=C((Rye,PX)=>{PX.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var FM=C((yye,kM)=>{"use strict";var DX=require("uuid"),zR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||DX.v4(),this.schema_table=`${this.schema}.${this.table}`}};kM.exports=zR});var kp=C((Oye,GM)=>{"use strict";var LX=FM(),jR=class extends LX{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};GM.exports=jR});var $M=C((wye,qM)=>{"use strict";qM.exports=vX;var MX="inserted";function vX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===MX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(vX,"returnObject")});var Fp=C((Pye,KM)=>{"use strict";var UX=(k(),P(q)),QR=ht(),xX=xc(),{getSystemSchemaPath:BX,getSchemaPath:HX}=gt(),Cye=lo(),{validateBySchema:kX}=it(),Qf=require("joi"),FX=kp(),GX=$M(),{handleHDBError:qX,hdb_errors:$X,ClientError:VX}=he(),VM=ie(),{HTTP_STATUS_CODES:KX}=$X,YX="inserted";KM.exports=WX;async function WX(e){let t=kX(e,Qf.object({database:Qf.string(),schema:Qf.string(),table:Qf.string().required(),attribute:Qf.string().required()}));if(t)throw new VX(t.message);let r=!e.skip_table_check&&VM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qX(new Error,r,KX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=VM.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new FX(e.schema,e.table,e.attribute,e.id);try{let i=await QR.openEnvironment(HX(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);QR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await QR.openEnvironment(BX(),UX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await xX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return GX(YX,c,{records:[s]},l)}catch(i){throw i}}a(WX,"lmdbCreateAttribute")});var Jf=C((Mye,WM)=>{"use strict";var uo=ie(),YM=ee(),Lye=yR(),{getDatabases:zX}=(xe(),P(ct)),{ClientError:Bc}=he();WM.exports=jX;function jX(e){if(uo.isEmpty(e))throw new Bc("invalid update parameters defined.");if(uo.isEmptyOrZeroLength(e.schema))throw new Bc("invalid schema specified.");if(uo.isEmptyOrZeroLength(e.table))throw new Bc("invalid table specified.");if(!Array.isArray(e.records))throw new Bc("records must be an array");let t=zX()[e.schema]?.[e.table];if(uo.isEmpty(t))throw new Bc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&uo.isEmptyOrZeroLength(o[r]))throw YM.error("a valid hash attribute must be provided with update record:",o),new Bc("a valid hash attribute must be provided with update record, check log for more info");if(!uo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw YM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Bc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!uo.isEmpty(o[r])&&o[r]!==""&&n.has(uo.autoCast(o[r]))&&(o.skip=!0),n.add(uo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(jX,"insertUpdateValidate")});var jM=C((Uye,zM)=>{"use strict";var JR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};zM.exports=JR});var XM=C((Bye,JM)=>{"use strict";var XR=ht(),QX=ee(),QM=xn().LMDB_ERRORS_ENUM;JM.exports=JX;async function JX(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await XR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==QM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await XR.closeEnvironment(global.lmdb_map[n]),await XR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==QM.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){QX.error(t)}}a(JX,"cleanLMDBMap")});var dv=C((Fye,uv)=>{"use strict";var ZR=require("recursive-iterator"),XX=require("alasql"),ey=require("clone"),ZM=ie(),{handleHDBError:ev,hdb_errors:ZX}=he(),{HDB_ERROR_MSGS:tv,HTTP_STATUS_CODES:rv}=ZX,{getDatabases:e6}=(xe(),P(ct)),t6=["DISTINCT_ARRAY"],nv=Symbol("validateTables"),ty=Symbol("validateTable"),kye=Symbol("getAllColumns"),sv=Symbol("validateAllColumns"),Gp=Symbol("findColumn"),iv=Symbol("validateOrderBy"),Xf=Symbol("validateSegment"),ry=Symbol("validateColumn"),ov=Symbol("setColumnsForTable"),av=Symbol("checkColumnsForAsterisk"),cv=Symbol("validateGroupBy"),lv=Symbol("hasColumns"),ny=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[nv](),this[av](),this[sv]()}[nv](){if(this[lv]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ty](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ty](t.table)})}}[lv](){let t=!1,r=new ZR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[ty](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=e6();if(!r[t.databaseid])throw ev(new Error,tv.SCHEMA_NOT_FOUND(t.databaseid),rv.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw ev(new Error,tv.TABLE_NOT_FOUND(t.databaseid,t.tableid),rv.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=ey(s);i.table=ey(t),this.attributes.push(i)})}[Gp](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[av](){let t=new ZR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[ov](r.tableid)}[ov](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new XX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[sv](){this[Xf](this.statement.columns,!1),this[Xf](this.statement.joins,!1),this[Xf](this.statement.where,!1),this[cv](this.statement.group,!1),this[Xf](this.statement.order,!0)}[Xf](t,r){if(!t)return;let n=new ZR(t),s=[];for(let{node:i,path:o}of n)!ZM.isEmpty(i)&&!ZM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[iv](i):s.push(this[ry](i)));return s}[cv](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&t6.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=ey(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Gp](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Gp](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[iv](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[ry](t)}[ry](t){let r=this[Gp](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};uv.exports=ny});var mv=C((qye,hv)=>{"use strict";var fv=require("lodash"),Zf=require("mathjs"),r6=require("jsonata"),_v=ie();hv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?fv.uniqWith(e,fv.isEqual):e,"distinct_array"),searchJSON:n6,mad:e_.bind(null,Zf.mad),mean:e_.bind(null,Zf.mean),mode:e_.bind(null,Zf.mode),prod:e_.bind(null,Zf.prod),median:e_.bind(null,Zf.median)};function e_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(e_,"aggregateFunction");function n6(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(_v.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),_v.isEmpty(this.__ala__.res[r])){let n=r6(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(n6,"searchJSON")});var Ev=C((Vye,pv)=>{"use strict";var rr=require("moment"),sy="YYYY-MM-DDTHH:mm:ss.SSSZZ";rr.suppressDeprecationWarnings=!0;pv.exports={current_date:a(()=>rr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>rr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return rr(e).utc().format("YYYY");case"month":return rr(e).utc().format("MM");case"day":return rr(e).utc().format("DD");case"hour":return rr(e).utc().format("HH");case"minute":return rr(e).utc().format("mm");case"second":return rr(e).utc().format("ss");case"millisecond":return rr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>rr(e).utc().format(sy),"date"),date_format:a((e,t)=>rr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>rr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>rr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=rr(e).utc(),s=rr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>rr().utc().valueOf(),"now"),get_server_time:a(()=>rr().format(sy),"get_server_time"),offset_utc:a((e,t)=>rr(e).utc().utcOffset(t).format(sy),"offset_utc")}});var Av=C((Yye,Tv)=>{"use strict";var s6=require("@turf/area"),i6=require("@turf/length"),o6=require("@turf/circle"),a6=require("@turf/difference"),c6=require("@turf/distance"),l6=require("@turf/boolean-contains"),u6=require("@turf/boolean-equal"),d6=require("@turf/boolean-disjoint"),f6=require("@turf/helpers"),gv=(k(),P(q)),Ke=ie(),fo=ee();Tv.exports={geoArea:_6,geoLength:h6,geoCircle:m6,geoDifference:p6,geoDistance:Sv,geoNear:E6,geoContains:g6,geoEqual:S6,geoCrosses:T6,geoConvert:A6};function _6(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return s6.default(e)}catch(t){return fo.trace(t,e),NaN}}a(_6,"geoArea");function h6(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return i6.default(e,{units:t||"kilometers"})}catch(r){return fo.trace(r,e),NaN}}a(h6,"geoLength");function m6(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return o6.default(e,t,{units:r||"kilometers"})}catch(n){return fo.trace(n,e,t),NaN}}a(m6,"geoCircle");function p6(e,t){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return a6(e,t)}catch(r){return fo.trace(r,e,t),NaN}}a(p6,"geoDifference");function Sv(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return c6.default(e,t,{units:r||"kilometers"})}catch(n){return fo.trace(n,e,t),NaN}}a(Sv,"geoDistance");function E6(e,t,r,n){if(Ke.isEmpty(e)||Ke.isEmpty(t))return!1;if(Ke.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Sv(e,t,n)<=r}catch(s){return fo.trace(s,e,t),!1}}a(E6,"geoNear");function g6(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return l6.default(e,t)}catch(r){return fo.trace(r,e,t),!1}}a(g6,"geoContains");function S6(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return u6.default(e,t)}catch(r){return fo.trace(r,e,t),!1}}a(S6,"geoEqual");function T6(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return!d6.default(e,t)}catch(r){return fo.trace(r,e,t),!1}}a(T6,"geoCrosses");function A6(e,t,r){if(Ke.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ke.isEmpty(t))throw new Error("geo_type is required");if(Ke.isEmpty(gv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(gv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),f6[t](e,r)}a(A6,"geoConvert")});var qp=C((zye,Rv)=>{var Hc=mv(),Vn=Ev(),wi=Av();Rv.exports=e=>{e.aggr.mad=e.aggr.MAD=Hc.mad,e.aggr.mean=e.aggr.MEAN=Hc.mean,e.aggr.mode=e.aggr.MODE=Hc.mode,e.aggr.prod=e.aggr.PROD=Hc.prod,e.aggr.median=e.aggr.MEDIAN=Hc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Hc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Hc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Vn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Vn.current_time,e.fn.extract=e.fn.EXTRACT=Vn.extract,e.fn.date=e.fn.DATE=Vn.date,e.fn.date_format=e.fn.DATE_FORMAT=Vn.date_format,e.fn.date_add=e.fn.DATE_ADD=Vn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Vn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Vn.date_diff,e.fn.now=e.fn.NOW=Vn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Vn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Vn.get_server_time,e.fn.getdate=e.fn.GETDATE=Vn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Vn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wi.geoNear}});var Nv=C((jye,Ov)=>{"use strict";var t_=require("lodash"),Tn=require("alasql");Tn.options.cache=!1;var R6=qp(),yv=require("clone"),$p=require("recursive-iterator"),ke=ee(),Je=ie(),_u=Kn(),y6=(k(),P(q)),{hdb_errors:b6}=he(),{getDatabases:bv}=(xe(),P(ct)),O6="IS NULL",Vs="There was a problem performing this search. Please check the logs and try again.";R6(Tn);var iy=class{static{a(this,"SQLSearch")}constructor(t,r){if(Je.isEmpty(t))throw ke.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Je.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Je.isEmptyOrZeroLength(n))return ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ke.error(n),new Error(Vs)}if(Object.keys(this.data).length===0)return ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ke.error("Error thrown from processJoins in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{return t=await this._finalSQL(),t}catch(n){throw ke.error("Error thrown from finalSQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}}_getColumns(){let t=new $p(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(yv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=t_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=bv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Je.isEmpty(this.statement.where)){ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new $p(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Je.isEmpty(r)&&r.right)if(Je.isNotEmptyAndHasValue(r.right.value)){let n=Je.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Tn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Je.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Tn.yy.LogicValue({value:i}):n instanceof Tn.yy.StringValue&&Je.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Tn.yy.NumValue({value:i}))});if(t){ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new $p(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Je.isEmpty(y6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Je.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Je.isEmptyOrZeroLength(r.left.columnid)||Je.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Je.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Je.isEmpty(r.right.value)||!Je.isEmpty(r.left.value)?n.add(Je.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from)&&Je.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&t_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Je.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Je.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&!Je.isEmptyOrZeroLength(this.columns.columns))return t;if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Tn.promise(r)}catch(r){throw ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ke.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(yv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Je.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(O6)>-1&&this.tables.forEach(s=>{let i={columnid:bv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=t_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Je.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await _u.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let _=await _u.getDataByValue(d);for(let[h,m]of _)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]):(this.data[i].__merged_data[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else if(!Je.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,_=f.length;d<_;d++){let h=f[d];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await _u.getDataByValue(c,h.operation);if(l)for(let[S]of m)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of m)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await _u.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,_]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ke.error(f),new Error(Vs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Tn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Tn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Tn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Tn.yy.FuncValue:new Tn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,S=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${S}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${S}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let _=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(h,s);_=await Tn.promise(m,t),t=null}catch(h){throw ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ke.error(h),new Error("There was a problem processing the data.")}if(_&&_.length>0){for(let h=0,m=_.length;h<m;h++){let S=_[h];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),S=t_.difference(m,[...h.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:_?_.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new $p(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=t_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ke.error(i),new Error(Vs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await _u.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let _=o[f],h=l.get(_);for(let m=0;m<u;m++){let S=s.columns[m],g=h[S]===void 0?null:h[S];this.data[n].__merged_data[_].push(g)}}}}catch(r){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ke.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ke.trace(`Final SQL: ${s}`),n=await Tn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ke.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return ke.error(b6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ke.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await _u.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw ke.error("There was an error when processing this SQL operation. Check your logs"),ke.error(o),new Error(Vs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ov.exports=iy});var zr=C((Jye,wv)=>{"use strict";var N6=dv();wv.exports={searchByConditions:I6,searchByHash:C6,searchByValue:P6,search:D6};var oy=Kn(),{transformReq:ay}=ie(),w6=Nv();async function I6(e){return ay(e),oy.searchByConditions(e)}a(I6,"searchByConditions");async function C6(e){ay(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oy.searchByHash(e))r&&t.push(r);return t}a(C6,"searchByHash");async function P6(e){ay(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oy.searchByValue(e))t.push(r);return t}a(P6,"searchByValue");function D6(e,t){try{let r=new N6(e);r.validate(),new w6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(D6,"search")});var _o=C((Zye,Dv)=>{"use strict";var r_=require("crypto"),L6=le(),{CONFIG_PARAMS:M6}=(k(),P(q)),Cv="aes-256-cbc",v6=32,U6=16,cy=64,Pv=32,x6=cy+Pv,Iv=new Map;Dv.exports={encrypt:B6,decrypt:H6,createNatsTableStreamName:k6};function B6(e){let t=r_.randomBytes(v6),r=r_.randomBytes(U6),n=r_.createCipheriv(Cv,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(B6,"encrypt");function H6(e){let t=e.substr(0,cy),r=e.substr(cy,Pv),n=e.substr(x6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=r_.createDecipheriv(Cv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(H6,"decrypt");function k6(e,t){let r=L6.get(M6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Iv.get(r);return n||(n=r_.createHash("md5").update(r).digest("hex"),Iv.set(r,n)),n}a(k6,"createNatsTableStreamName")});var ho=C((rbe,Uv)=>{"use strict";var tbe=zr(),n_=ee(),{validateBySchema:Lv}=it(),kc=require("joi"),F6=_o(),Vp=ie(),{handleHDBError:Kp,hdb_errors:G6,ClientError:Mv}=he(),{HDB_ERROR_MSGS:Yp,HTTP_STATUS_CODES:ly}=G6,vv=le();vv.initSync();var{getDatabases:uy}=(xe(),P(ct)),q6=require("fs-extra"),$6=(k(),P(q));Uv.exports={describeAll:V6,describeTable:Wp,describeSchema:K6};async function V6(e={}){try{let t=Vp.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=uy(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let _=i[d];for(let h in _)try{let m;if(t||s||r)m=await Wp({schema:d,table:h,exact_count:u});else if(n&&n[d].describe&&n[d].tables[h].describe){let S=n[d].tables[h].attribute_permissions;m=await Wp({schema:d,table:h,exact_count:u},S)}m&&l.push(m)}catch(m){n_.error(m)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return n_.error("Got an error in describeAll"),n_.error(t),Kp(new Error,Yp.DESCRIBE_ALL_ERR)}}a(V6,"describeAll");async function Wp(e,t){Vp.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=Lv(e,kc.object({database:kc.string(),table:kc.string().required(),exact_count:kc.boolean().strict()}));if(i)throw new Mv(i.message);let c=uy()[r];if(!c)throw Kp(new Error,Yp.SCHEMA_NOT_FOUND(e.schema),ly.NOT_FOUND);let l=c[n];if(!l)throw Kp(new Error,Yp.TABLE_NOT_FOUND(e.schema,e.table),ly.NOT_FOUND);function u(h){f.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(m=>({type:m.type,name:m.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let h={};s.forEach(m=>{m.describe&&(h[m.attribute_name]=!0)}),l.attributes.forEach(m=>{h[m.name]&&u(m)})}else l.attributes?.forEach(h=>u(h));let d;try{d=(await q6.stat(l.primaryStore.env.path)).size}catch(h){n_.warn("unable to get database size",h)}let _={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(_.replicate=l.replicate),l.expirationMS!==void 0&&(_.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(_.sealed=l.sealed),l.sources?.length>0&&(_.sources=l.sources.map(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),vv.get($6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(_.clustering_stream_name=F6.createNatsTableStreamName(_.schema,_.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});_.record_count=h.recordCount,_.table_size=l.getSize(),_.db_audit_size=l.getAuditSize(),_.estimated_record_range=h.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))_.last_updated_record=S[0];if(!_.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=S}catch(h){n_.warn(`unable to stat table dbi due to ${h}`)}return _}a(Wp,"descTable");async function K6(e){Vp.transformReq(e);let t=Lv(e,kc.object({database:kc.string(),exact_count:kc.boolean().strict()}));if(t)throw new Mv(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=uy()[n];if(!i)throw Kp(new Error,Yp.SCHEMA_NOT_FOUND(e.schema),ly.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Vp.isEmpty(l)||l.describe){let u=await Wp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(K6,"describeSchema")});var ps=C((obe,Fv)=>{var Y6=lo(),{callbackify:Bv,promisify:W6}=require("util"),{getDatabases:Hv}=(xe(),P(ct));Fv.exports={setSchemaDataToGlobal:xv,getTableSchema:z6,getSystemSchema:j6,setSchemaDataToGlobalAsync:W6(xv)};var kv=ho(),sbe=Bv(kv.describeAll),ibe=Bv(kv.describeTable);function xv(e){global.hdb_schema=Hv(),e&&e()}a(xv,"setSchemaDataToGlobal");function z6(e,t,r){let n=Hv()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(z6,"getTableSchema");function j6(){return Y6}a(j6,"getSystemSchema")});var fy=C((cbe,$v)=>{var Q6=it(),dy=require("joi"),{hdb_table:J6,hdb_database:Gv}=Oi(),qv={schema:Gv,database:Gv,table:J6},X6={date:dy.date().iso().required()},Z6={timestamp:dy.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};$v.exports=function(e,t){let r=t==="timestamp"?{...qv,...Z6}:{...qv,...X6},n=dy.object(r);return Q6.validateBySchema(e,n)}});var Yv=C((lbe,Kv)=>{var eZ=it(),_y=require("joi"),{hdb_table:tZ,hdb_database:Vv}=Oi(),rZ=_y.object({schema:Vv,database:Vv,table:tZ,hash_values:_y.array().required(),ids:_y.array()});Kv.exports=function(e){return eZ.validateBySchema(e,rZ)}});var Ey=C((ube,Wv)=>{"use strict";var hy=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},my=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},py=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Wv.exports={InsertObject:hy,NoSQLSeachObject:my,DeleteResponseObject:py}});var qc=C((fbe,Xv)=>{"use strict";var jv=fy(),nZ=Yv(),Fc=ie(),zv=require("moment"),Qv=ee(),{promisify:sZ,callbackify:iZ}=require("util"),Gc=(k(),P(q)),oZ=ps(),gy=sZ(oZ.getTableSchema),Sy=Kn(),{DeleteResponseObject:aZ}=Ey(),{handleHDBError:fa,hdb_errors:cZ}=he(),{HDB_ERROR_MSGS:zp,HTTP_STATUS_CODES:_a}=cZ,lZ="records successfully deleted",uZ=iZ(Jv);Xv.exports={delete:uZ,deleteRecord:Jv,deleteFilesBefore:dZ,deleteAuditLogsBefore:fZ};async function dZ(e){let t=jv(e,"date");if(t)throw fa(t,t.message,_a.BAD_REQUEST,void 0,void 0,!0);if(Fc.transformReq(e),!zv(e.date,zv.ISO_8601).isValid())throw fa(new Error,zp.INVALID_DATE,_a.BAD_REQUEST,Gc.LOG_LEVELS.ERROR,zp.INVALID_DATE,!0);let n=Fc.checkSchemaTableExist(e.schema,e.table);if(n)throw fa(new Error,n,_a.NOT_FOUND,Gc.LOG_LEVELS.ERROR,n,!0);let s=await Sy.deleteRecordsBefore(e);if(await gy(e.schema,e.table),Qv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(dZ,"deleteFilesBefore");async function fZ(e){let t=jv(e,"timestamp");if(t)throw fa(t,t.message,_a.BAD_REQUEST,void 0,void 0,!0);if(Fc.transformReq(e),isNaN(e.timestamp))throw fa(new Error,zp.INVALID_VALUE("Timestamp"),_a.BAD_REQUEST,Gc.LOG_LEVELS.ERROR,zp.INVALID_VALUE("Timestamp"),!0);let r=Fc.checkSchemaTableExist(e.schema,e.table);if(r)throw fa(new Error,r,_a.NOT_FOUND,Gc.LOG_LEVELS.ERROR,r,!0);let n=await Sy.deleteAuditLogsBefore(e);return await gy(e.schema,e.table),Qv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(fZ,"deleteAuditLogsBefore");async function Jv(e){e.ids&&(e.hash_values=e.ids);let t=nZ(e);if(t)throw fa(t,t.message,_a.BAD_REQUEST,void 0,void 0,!0);Fc.transformReq(e);let r=Fc.checkSchemaTableExist(e.schema,e.table);if(r)throw fa(new Error,r,_a.NOT_FOUND,Gc.LOG_LEVELS.ERROR,r,!0);try{await gy(e.schema,e.table);let n=await Sy.deleteRecords(e);return Fc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${lZ}`),n}catch(n){if(n.message===Gc.SEARCH_NOT_FOUND_MESSAGE){let s=new aZ;return s.message=Gc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Jv,"deleteRecord")});var jp={};Ue(jp,{HASH_FUNCTION:()=>o_,hash:()=>Ry,validate:()=>yy});function Ty(e=i_){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(s_.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ry(e,t=o_[eU?.toUpperCase()]??"sha256"){return Ay[t](e)}function yy(e,t,r=o_[eU?.toUpperCase()]??"sha256"){return e?_Z[r](e,t):!1}var s_,hu,Zv,eU,i_,tU,o_,Ay,_Z,Qp=Re(()=>{s_=v(require("node:crypto")),hu=v(require("argon2")),Zv=v(le());k();eU=(0,Zv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),i_=16,tU=9,o_=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(o_||{});a(Ty,"generateSalt");Ay={md5:a((e,t=void 0)=>{t=t??Ty(tU);let r=s_.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??Ty(i_);let r=s_.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=Ty(i_),r=await hu.hash(e,{type:hu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},_Z={md5:a((e,t)=>{let r=e.slice(0,tU);return e===Ay.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,i_);return e===Ay.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await hu.verify(e.slice(i_),t),"argon2id")};a(Ry,"hash");a(yy,"validate")});var nU=C((pbe,rU)=>{var by=it(),jr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function hZ(e){return jr.password.presence=!0,jr.username.presence=!0,jr.role.presence=!0,jr.active.presence=!0,by.validateObject(e,jr)}a(hZ,"addUserValidation");function mZ(e){return jr.password.presence=!1,jr.username.presence=!0,jr.role.presence=!1,jr.active.presence=!1,by.validateObject(e,jr)}a(mZ,"alterUserValidation");function pZ(e){return jr.password.presence=!1,jr.username.presence=!0,jr.role.presence=!1,jr.active.presence=!1,by.validateObject(e,jr)}a(pZ,"dropUserValidation");rU.exports={addUserValidation:hZ,alterUserValidation:mZ,dropUserValidation:pZ}});var Lt=C((Sbe,iU)=>{"use strict";var{platform:gbe}=require("os"),EZ="nats-server.zip",Oy="nats-server",gZ=process.platform==="win32"?`${Oy}.exe`:Oy,SZ=/^[^\s.,*>]+$/,sU="__request__",TZ=a(e=>`${e}.${sU}`,"REQUEST_SUBJECT"),AZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},RZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},yZ={HUB:"hub.pid",LEAF:"leaf.pid"},bZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},OZ={SUCCESS:"success",ERROR:"error"},NZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},wZ={TXN:"txn",MSGID:"msgid"},mu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},IZ={[mu.ERR]:1,[mu.WRN]:2,[mu.INF]:3,[mu.DBG]:4,[mu.TRC]:5},CZ={debug:"-D",trace:"-DVV"};iU.exports={NATS_SERVER_ZIP:EZ,NATS_SERVER_NAME:Oy,NATS_BINARY_NAME:gZ,PID_FILES:yZ,NATS_CONFIG_FILES:RZ,SERVER_SUFFIX:bZ,NATS_TERM_CONSTRAINTS_RX:SZ,REQUEST_SUFFIX:sU,UPDATE_REMOTE_RESPONSE_STATUSES:OZ,CLUSTER_STATUS_STATUSES:NZ,REQUEST_SUBJECT:TZ,SUBJECT_PREFIXES:wZ,MSG_HEADERS:AZ,LOG_LEVELS:mu,LOG_LEVEL_FLAGS:CZ,LOG_LEVEL_HIERARCHY:IZ}});var An=C((Abe,Nr)=>{"use strict";var cU="username is required",lU="nothing to update, must supply active, role or password to update",uU="password cannot be an empty string",dU="If role is specified, it cannot be empty.",fU="active must be true or false";Nr.exports.addUser=HZ;Nr.exports.alterUser=kZ;Nr.exports.dropUser=GZ;Nr.exports.getSuperUser=YZ;Nr.exports.userInfo=qZ;Nr.exports.listUsers=Xp;Nr.exports.listUsersExternal=$Z;Nr.exports.setUsersWithRolesCache=$c;Nr.exports.findAndValidateUser=vy;Nr.exports.getClusterUser=WZ;Nr.exports.getUsersWithRolesCache=KZ;Nr.exports.USERNAME_REQUIRED=cU;Nr.exports.ALTERUSER_NOTHING_TO_UPDATE=lU;Nr.exports.EMPTY_PASSWORD=uU;Nr.exports.EMPTY_ROLE=dU;Nr.exports.ACTIVE_BOOLEAN=fU;var _U=Rn(),PZ=qc(),a_=(Qp(),P(jp)),hU=nU(),c_=zr(),Py=po(),Ii=ie(),mU=require("validate.js"),Dy=ee(),{promisify:DZ}=require("util"),Ly=_o(),wy=(k(),P(q)),oU=Lt(),LZ=Ct(),MZ=le(),vZ=lo(),{hdb_errors:UZ,ClientError:Ks}=he(),{HTTP_STATUS_CODES:mo,AUTHENTICATION_ERROR_MSGS:Ny,HDB_ERROR_MSGS:pu}=UZ,{UserEventMsg:My}=Ys(),Iy=require("lodash"),{server:Jp}=(Mr(),P(jl)),xZ=ee();Jp.getUser=(e,t)=>vy(e,t,t!=null);Jp.authenticateUser=(e,t)=>vy(e,t);var pU={username:!0,active:!0,role:!0,password:!0},aU=new Map,BZ=DZ(PZ.delete),Cy=MZ.get(wy.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??a_.HASH_FUNCTION.SHA256,Ci;async function HZ(e){let t=mU.cleanAttributes(e,pU),r=hU.addUserValidation(t);if(r)throw new Ks(r.message);let n=await c_.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ks(pu.ROLE_NAME_NOT_FOUND(t.role),mo.NOT_FOUND);if(n.length>1)throw new Ks(pu.DUP_ROLES_FOUND(t.role),mo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Ly.encrypt(t.password)),t.password=await a_.hash(t.password,Cy),t.hash_function=Cy,t.role=n[0].id;let s=await _U.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Dy.debug(s),await $c(),s.skipped_hashes.length===1)throw new Ks(pu.USER_ALREADY_EXISTS(t.username),mo.CONFLICT);return Py.signalUserChange(new My(process.pid)),`${t.username} successfully added`}a(HZ,"addUser");async function kZ(e){let t=mU.cleanAttributes(e,pU);if(Ii.isEmptyOrZeroLength(t.username))throw new Error(cU);if(Ii.isEmptyOrZeroLength(t.password)&&Ii.isEmptyOrZeroLength(t.role)&&Ii.isEmptyOrZeroLength(t.active))throw new Error(lU);if(!Ii.isEmpty(t.password)&&Ii.isEmptyOrZeroLength(t.password.trim()))throw new Error(uU);if(!Ii.isEmpty(t.active)&&!Ii.isBoolean(t.active))throw new Error(fU);if(!Ii.isEmpty(t.password)&&!Ii.isEmptyOrZeroLength(t.password.trim())&&(FZ(t.username)&&(t.hash=Ly.encrypt(t.password)),t.password=await a_.hash(t.password,Cy)),t.role==="")throw new Error(dU);if(t.role){let n=await c_.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ks(pu.ALTER_USER_ROLE_NOT_FOUND(t.role),mo.NOT_FOUND);if(n.length>1)throw new Ks(pu.DUP_ROLES_FOUND(t.role),mo.CONFLICT);t.role=n[0].id}let r=await _U.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await $c(),Py.signalUserChange(new My(process.pid)),r}a(kZ,"alterUser");function FZ(e){let t=!1,r=Ci.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(FZ,"isClusterUser");async function GZ(e){let t=hU.dropUserValidation(e);if(t)throw new Ks(t.message);if(Ci.get(e.username)===void 0)throw new Ks(pu.USER_NOT_EXIST(e.username),mo.NOT_FOUND);let r=await BZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return Dy.debug(r),await $c(),Py.signalUserChange(new My(process.pid)),`${e.username} successfully deleted`}a(GZ,"dropUser");async function qZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Iy.cloneDeep(e.hdb_user);let r=await c_.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(qZ,"userInfo");async function $Z(){let e=await Xp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a($Z,"listUsersExternal");async function Xp(){let e=await c_.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Iy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await c_.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Iy.cloneDeep(s),s.role=t[s.role],VZ(s.role),n.set(s.username,s);return n}a(Xp,"listUsers");function VZ(e){if(!e){Dy.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(vZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(VZ,"appendSystemTablesToRole");async function $c(e=void 0){e?Ci=e:Ci=await Xp()}a($c,"setUsersWithRolesCache");async function KZ(){return Ci||await $c(),Ci}a(KZ,"getUsersWithRolesCache");async function vy(e,t,r=!0){Ci||await $c();let n=Ci.get(e);if(!n){if(!r)return{username:e};throw new Ks(Ny.GENERIC_AUTH_FAIL,mo.UNAUTHORIZED)}if(n&&!n.active)throw new Ks(Ny.USER_INACTIVE,mo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(aU.get(t)===n.password)return s;{let i=a_.validate(n.password,t,n.hash_function||a_.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)aU.set(t,n.password);else throw new Ks(Ny.GENERIC_AUTH_FAIL,mo.UNAUTHORIZED)}}return s}a(vy,"findAndValidateUser");async function YZ(){Ci||await $c();for(let[,e]of Ci)if(e.role.role==="super_user")return e}a(YZ,"getSuperUser");async function WZ(){let e=await Xp(),t=LZ.getConfigFromFile(wy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==wy.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Ly.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oU.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oU.SERVER_SUFFIX.ADMIN,r}a(WZ,"getClusterUser");var EU=[];Jp.invalidateUser=function(e){for(let t of EU)try{t(e)}catch(r){xZ.error("Error invalidating user",r)}};Jp.onInvalidatedUser=function(e){EU.push(e)}});var u_=C((Obe,AU)=>{"use strict";var Vc=ee(),Yn=(k(),P(q)),zZ=XM(),ybe=ps(),bbe=ho(),jZ=An(),{validateEvent:gU}=Ys(),l_=Kn(),QZ=require("process"),{resetDatabases:JZ}=(xe(),P(ct)),XZ={[Yn.ITC_EVENT_TYPES.SCHEMA]:ZZ,[Yn.ITC_EVENT_TYPES.USER]:TU};async function ZZ(e){let t=gU(e);if(t){Vc.error(t);return}Vc.trace("ITC schemaHandler received schema event:",e),await zZ(e.message),await e8(e.message)}a(ZZ,"schemaHandler");async function e8(e){try{l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=JZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Vc.error(t)}}a(e8,"syncSchemaMetadata");var SU=[];async function TU(e){try{try{l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Vc.warn(r)}let t=gU(e);if(t){Vc.error(t);return}Vc.trace(`ITC userHandler ${Yn.HDB_ITC_CLIENT_PREFIX}${QZ.pid} received user event:`,e),await jZ.setUsersWithRolesCache();for(let r of SU)r()}catch(t){Vc.error(t)}}a(TU,"userHandler");TU.addListener=function(e){SU.push(e)};AU.exports=XZ});var Ys=C((Dbe,yU)=>{"use strict";var wbe=ee(),Uy=ie(),t8=(k(),P(q)),{ITC_ERRORS:d_}=xn(),{parentPort:Ibe,threadId:r8,isMainThread:n8,workerData:Cbe}=require("worker_threads"),{onMessageFromWorkers:s8,broadcast:Pbe,broadcastWithAcknowledgement:i8}=ot();yU.exports={sendItcEvent:o8,validateEvent:RU,SchemaEventMsg:a8,UserEventMsg:c8};var Zp;s8(async(e,t)=>{Zp=Zp||u_(),RU(e),Zp[e.type]&&await Zp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function o8(e){return!n8&&e.message&&(e.message.originator=r8),i8(e)}a(o8,"sendItcEvent");function RU(e){if(typeof e!="object")return d_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Uy.isEmpty(e.type))return d_.MISSING_TYPE;if(!e.hasOwnProperty("message")||Uy.isEmpty(e.message))return d_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Uy.isEmpty(e.message.originator))return d_.MISSING_ORIGIN;if(t8.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return d_.INVALID_EVENT(e.type)}a(RU,"validateEvent");function a8(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(a8,"SchemaEventMsg");function c8(e){this.originator=e}a(c8,"UserEventMsg")});var po=C((vbe,wU)=>{"use strict";var bU=(k(),P(q)),Mbe=ie(),eE=ee(),OU=jM(),Eu,{sendItcEvent:NU}=Ys();function l8(e){try{eE.info("signalSchemaChange called with message:",e),Eu=Eu||u_();let t=new OU(bU.ITC_EVENT_TYPES.SCHEMA,e);return Eu.schema(t),NU(t)}catch(t){eE.error(t)}}a(l8,"signalSchemaChange");function u8(e){try{eE.trace("signalUserChange called with message:",e),Eu=Eu||u_();let t=new OU(bU.ITC_EVENT_TYPES.USER,e);return Eu.user(t),NU(t)}catch(t){eE.error(t)}}a(u8,"signalUserChange");wU.exports={signalSchemaChange:l8,signalUserChange:u8}});var tE=C((xbe,CU)=>{"use strict";var IU=ie(),d8=(k(),P(q)),f8=ee(),_8=Fp(),h8=kp(),m8=po(),{SchemaEventMsg:p8}=Ys(),E8="already exists in";CU.exports=g8;async function g8(e,t,r){if(IU.isEmptyOrZeroLength(r))return r;let n=[];IU.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await S8(e,t.schema,t.name,i)})),s}a(g8,"lmdbCheckForNewAttributes");async function S8(e,t,r,n){let s=new h8(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await T8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(E8))f8.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(S8,"createNewAttribute");async function T8(e){let t;return t=await _8(e),m8.signalSchemaChange(new p8(process.pid,d8.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(T8,"createAttribute")});var gu=C((Hbe,PU)=>{"use strict";var xy=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};PU.exports=xy});var LU=C((Fbe,DU)=>{"use strict";var A8=gu(),R8=(k(),P(q)).OPERATIONS_ENUM,By=class extends A8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(R8.INSERT,r,n,s,i),this.records=t}};DU.exports=By});var vU=C((qbe,MU)=>{"use strict";var y8=gu(),b8=(k(),P(q)).OPERATIONS_ENUM,Hy=class extends y8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(b8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};MU.exports=Hy});var xU=C((Vbe,UU)=>{"use strict";var O8=gu(),N8=(k(),P(q)).OPERATIONS_ENUM,ky=class extends O8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(N8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};UU.exports=ky});var HU=C((Ybe,BU)=>{"use strict";var w8=gu(),I8=(k(),P(q)).OPERATIONS_ENUM,Fy=class extends w8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(I8.DELETE,n,s,t,i),this.original_records=r}};BU.exports=Fy});var f_=C((jbe,qU)=>{"use strict";var zbe=require("path"),kU=ht(),C8=LU(),P8=vU(),D8=xU(),L8=HU(),Su=Ft(),FU=ie(),{CONFIG_PARAMS:M8}=(k(),P(q)),GU=le();GU.initSync();var rE=(k(),P(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:v8}=gt();qU.exports=U8;async function U8(e,t){if(GU.get(M8.LOGGING_AUDITLOG)===!1)return;let r=v8(e.schema,e.table),n=await kU.openEnvironment(r,e.table,!0),s=x8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kU.initializeDBIs(n,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Su.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FU.isEmpty(s.user_name)||n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(U8,"writeTransaction");function x8(e,t){let r=FU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===rE.INSERT)return new C8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.UPDATE)return new P8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.UPSERT)return new D8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.DELETE)return new L8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(x8,"createTransactionObject")});var Gy=C((Xbe,$U)=>{"use strict";var B8=Jf(),Jbe=yf(),__=(k(),P(q)),H8=bf(),k8=xc().insertRecords,F8=ht(),G8=ee(),q8=tE(),{getSchemaPath:$8}=gt(),V8=f_();$U.exports=K8;async function K8(e){try{let{schema_table:t,attributes:r}=B8(e);H8(e,r,t.hash_attribute),e.schema!==__.SYSTEM_SCHEMA_NAME&&(r.includes(__.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(__.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(__.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(__.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await q8(e.hdb_auth_header,t,r),s=$8(e.schema,e.table),i=await F8.openEnvironment(s,e.table),o=await k8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await V8(e,o)}catch(c){G8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(K8,"lmdbCreateRecords")});var YU=C((eOe,KU)=>{"use strict";var VU=(k(),P(q)),Y8=Gy(),W8=yf(),z8=require("fs-extra"),{getSchemaPath:j8}=gt();KU.exports=Q8;async function Q8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new W8(VU.SYSTEM_SCHEMA_NAME,VU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Y8(r),await z8.mkdirp(j8(e.schema))}a(Q8,"lmdbCreateSchema")});var zU=C((rOe,WU)=>{"use strict";var qy=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};WU.exports=qy});var XU=C((aOe,JU)=>{"use strict";var jU=ht(),$y=fn(),Vy=xn().LMDB_ERRORS_ENUM,J8=Ft(),QU=ee(),sOe=ie(),X8=require("lmdb"),Z8=zU(),e5=(k(),P(q)),{OVERFLOW_MARKER:iOe,MAX_SEARCH_KEY_LENGTH:oOe}=J8,t5=e5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function r5(e,t,r,n){if($y.validateEnv(e),t===void 0)throw new Error(Vy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Vy.IDS_REQUIRED):new Error(Vy.IDS_MUST_BE_ITERABLE);try{let s=jU.listDBIs(e);jU.initializeDBIs(e,t,s);let i=new Z8,o,c=[],l=[];for(let _=0,h=r.length;_<h;_++)try{o=r[_];let m=e.dbis[t].get(o);if(!m||n&&m[t5]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,X8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!m.hasOwnProperty(R)||R===t)continue;let E=e.dbis[R],T=m[R];if(T!=null)try{let N=$y.getIndexedValues(T);if(N)for(let M=0,H=N.length;M<H;M++)E.remove(N[M],o)}catch{QU.warn(`cannot delete from attribute: ${R}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){QU.warn(m),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let _=0,h=f.length;_<h;_++)f[_]===!0?i.deleted.push(l[_]):(i.skipped.push(l[_]),u.push(_));let d=0;for(let _=0;_<u.length;_++){let h=u[_];i.original_records.splice(h-d,1),d++}return i.txn_time=$y.getNextMonotonicTime(),i}catch(s){throw s}}a(r5,"deleteRecords");JU.exports={deleteRecords:r5}});var h_=C((lOe,e0)=>{"use strict";var Tu=ie(),n5=XU(),s5=ht(),{getSchemaPath:i5}=gt(),o5=f_(),a5=ee();e0.exports=c5;async function c5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Tu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Tu.isEmptyOrZeroLength(e.hash_values)&&!Tu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Tu.isEmpty(l)||e.hash_values.push(l)}}if(Tu.isEmptyOrZeroLength(e.hash_values))return ZU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Tu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=i5(e.schema,e.table),i=await s5.openEnvironment(s,e.table),o=await n5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await o5(e,o)}catch(c){a5.error(`unable to write transaction due to ${c.message}`)}return ZU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(c5,"lmdbDeleteRecords");function ZU(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(ZU,"createDeleteResponse")});var Yy=C((fOe,t0)=>{"use strict";var l5=(k(),P(q)),dOe=fn();function Ky(e,t){let r=Object.create(null);if(t.length===1&&l5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Ky,"parseRow");function u5(e,t,r,n){let s=Ky(r,e);n.push(s)}a(u5,"searchAll");function d5(e,t,r,n){let s=Ky(r,e);n[t]=s}a(d5,"searchAllToMap");function f5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(f5,"iterateDBI");function Kc(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Kc,"pushResults");function _5(e,t,r,n,s,i){t.toString().endsWith(e)&&Kc(t,r,n,s,i)}a(_5,"endsWith");function h5(e,t,r,n,s,i){t.toString().includes(e)&&Kc(t,r,n,s,i)}a(h5,"contains");function m5(e,t,r,n,s,i){t>e&&Kc(t,r,n,s,i)}a(m5,"greaterThanCompare");function p5(e,t,r,n,s,i){t>=e&&Kc(t,r,n,s,i)}a(p5,"greaterThanEqualCompare");function E5(e,t,r,n,s,i){t<e&&Kc(t,r,n,s,i)}a(E5,"lessThanCompare");function g5(e,t,r,n,s,i){t<=e&&Kc(t,r,n,s,i)}a(g5,"lessThanEqualCompare");t0.exports={parseRow:Ky,searchAll:u5,searchAllToMap:d5,iterateDBI:f5,endsWith:_5,contains:h5,greaterThanCompare:m5,greaterThanEqualCompare:p5,lessThanCompare:E5,lessThanEqualCompare:g5,pushResults:Kc}});var Au=C((EOe,c0)=>{"use strict";var ha=ht(),hOe=ee(),Wn=fn(),nE=Ft(),zt=xn().LMDB_ERRORS_ENUM,mOe=ie(),S5=(k(),P(q)),sE=Yy(),{parseRow:T5}=sE,pOe=require("lmdb"),{OVERFLOW_MARKER:r0,MAX_SEARCH_KEY_LENGTH:A5}=nE;function n0(e,t,r,n=!1,s=void 0,i=void 0){return Yc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(n0,"iterateFullIndex");function m_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Yc(e,t,r,(f,d,_,h)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(E.values=!1,d.getRange(E).map(T=>({value:T}))):d.getRange(E)})}a(m_,"iterateRangeBetween");function Yc(e,t,r,n){let s=e.database||e,i=ha.openDBI(s,r);i[nE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ha.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Yc,"setupTransaction");function s0(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(r0)){if(!s)if(r)s=ha.openDBI(e,r);else{let l=ha.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ha.openDBI(e,l[u]),!s[nE.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(s0,"getOverflowCheck");function R5(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Yc(e,t,t,(o,c,l)=>(iE(r),r=p_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>T5(u.value,r))))}a(R5,"searchAll");function y5(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);iE(r),r=p_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of n0(e,t,t,n,s,i))o.set(c,sE.parseRow(l,r));return o}a(y5,"searchAllToMap");function b5(e,t,r=!1,n=void 0,s=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=n0(e,void 0,t,r,n,s),c=o.transaction,l=s0(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(b5,"iterateDBI");function O5(e,t){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return ha.statDBI(e,t).entryCount}a(O5,"countAll");function N5(e,t,r,n,s=!1,i=void 0,o=void 0){return ma(e,r,n),Yc(e,t,r,(c,l,u,f)=>(n=Wn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(N5,"equals");function w5(e,t,r){return ma(e,t,r),ha.openDBI(e,t).getValuesCount(r)}a(w5,"count");function I5(e,t,r,n,s=!1,i=void 0,o=void 0){return ma(e,r,n),Yc(e,null,r,(c,l)=>{n=Wn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let _ of l.getKeys({transaction:c,start:n}))if(!_.startsWith(n)){d=_;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(_=>{let{key:h}=_;if(h!==d){if(h.toString().startsWith(n))return _;if(u===!0)return f.DONE}}),f.filter(_=>_)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(I5,"startsWith");function C5(e,t,r,n,s=!1,i=void 0,o=void 0){return i0(e,t,r,n,s,i,o,!0)}a(C5,"endsWith");function i0(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ma(e,r,n),Yc(e,null,r,(l,u,f,d)=>{let _=s0(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let m=h.toString();return m.endsWith(r0)?u.getValues(h,{transaction:l}).map(S=>{let g=_(h,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?m.endsWith(n):m.includes(n))?u[nE.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(S=>({key:h,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(i0,"contains");function P5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),m_(e,t,r,n,l,s,i,o,!0,!1)}a(P5,"greaterThan");function D5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),m_(e,t,r,n,l,s,i,o,!1,!1)}a(D5,"greaterThanEqual");function L5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),m_(e,t,r,l,n,s,i,o,!1,!0)}a(L5,"lessThan");function M5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),m_(e,t,r,l,n,s,i,o,!1,!1)}a(M5,"lessThanEqual");function v5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Wn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Wn.convertKeyValueToWrite(n),s=Wn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return m_(e,t,r,n,s,i,o,c)}a(v5,"between");function U5(e,t,r,n){Wn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(iE(r),r=p_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=sE.parseRow(c,r)),o}a(U5,"searchByHash");function x5(e,t,r){Wn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(x5,"checkHashExists");function B5(e,t,r,n,s=[]){return a0(e,t,r,n,s),o0(e,t,r,n,s).map(i=>i[1])}a(B5,"batchSearchByHash");function H5(e,t,r,n,s=[]){a0(e,t,r,n,s);let i=new Map;for(let[o,c]of o0(e,t,r,n,s))i.set(o,c);return i}a(H5,"batchSearchByHashToMap");function o0(e,t,r,n,s=[]){return Yc(e,t,t,(i,o,c)=>{r=p_(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,sE.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(o0,"batchHashSearch");function a0(e,t,r,n,s){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(iE(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(a0,"initializeBatchSearchByHash");function iE(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(iE,"validateFetchAttributes");function ma(e,t,r){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>A5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(ma,"validateComparisonFunctions");function p_(e,t){return t.length===1&&S5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ha.listDBIs(e)),t}a(p_,"setGetWholeRowAttributes");c0.exports={searchAll:R5,searchAllToMap:y5,count:w5,countAll:O5,equals:N5,startsWith:I5,endsWith:C5,contains:i0,searchByHash:U5,setGetWholeRowAttributes:p_,batchSearchByHash:B5,batchSearchByHashToMap:H5,checkHashExists:x5,iterateDBI:b5,greaterThan:P5,greaterThanEqual:D5,lessThan:L5,lessThanEqual:M5,between:v5}});var Ru=C((SOe,_0)=>{var l0=require("lodash"),u0=it(),qe=require("joi"),k5=ie(),{hdb_schema_table:E_,checkValidTable:d0,hdb_table:f0,hdb_database:oE}=Oi(),{handleHDBError:F5,hdb_errors:G5}=he(),{getDatabases:q5}=(xe(),P(ct)),{HTTP_STATUS_CODES:$5}=G5,V5=qe.object({database:oE,schema:oE,table:f0,search_attribute:E_,search_value:qe.any().required(),get_attributes:qe.array().min(1).items(qe.alternatives(E_,qe.object())).optional(),desc:qe.bool(),limit:qe.number().integer().min(1),offset:qe.number().integer().min(0)}),K5=qe.object({database:oE,schema:oE,table:f0,operator:qe.string().valid("and","or").default("and").lowercase(),offset:qe.number().integer().min(0),limit:qe.number().integer().min(1),get_attributes:qe.array().min(1).items(qe.alternatives(E_,qe.object())).optional(),sort:qe.object({attribute:qe.alternatives(E_,qe.array().min(1)),descending:qe.bool().optional()}).optional(),conditions:qe.array().min(1).items(qe.alternatives(qe.object({operator:qe.string().valid("and","or").default("and").lowercase(),conditions:qe.array()}),qe.object({search_attribute:qe.alternatives(E_,qe.array().min(1)),search_type:qe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:qe.when("search_type",{switch:[{is:"equals",then:qe.any()},{is:"between",then:qe.array().items(qe.alternatives([qe.string(),qe.number()])).length(2)}],otherwise:qe.alternatives(qe.string(),qe.number())}).required()}))).required()});_0.exports=function(e,t){let r=null;switch(t){case"value":r=u0.validateBySchema(e,V5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(d0("database",e.schema)),i(d0("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=u0.validateBySchema(e,K5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=k5.checkGlobalSchemaTable(e.schema,e.table);if(s)return F5(new Error,s,$5.NOT_FOUND);let o=q5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,_=f.conditions.length;d<_;d++){let h=f.conditions[d];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=l0.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!l0.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var Wy=C((AOe,h0)=>{"use strict";var Y5=ht(),W5=Ru(),{getSchemaPath:z5}=gt();h0.exports=j5;function j5(e){let t=W5(e,"hashes");if(t)throw t;let r=z5(e.schema,e.table);return Y5.openEnvironment(r,e.table)}a(j5,"initialize")});var zy=C((yOe,m0)=>{"use strict";var Q5=Au(),J5=Wy();m0.exports=X5;async function X5(e){let t=await J5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Q5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(X5,"lmdbGetDataByHash")});var yu=C((OOe,p0)=>{"use strict";var jy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};p0.exports=jy});var g0=C((IOe,E0)=>{"use strict";var wOe=yu(),Z5=Au(),e9=Wy();E0.exports=t9;async function t9(e){let t=await e9(e),r=global.hdb_schema[e.schema][e.table];return Z5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(t9,"lmdbSearchByHash")});var Ws=C((POe,S0)=>{"use strict";var Qy=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};S0.exports=Qy});var aE=C((LOe,O0)=>{"use strict";var Qr=Au(),r9=ht(),n9=ie(),$e=Ft(),Wc=(k(),P(q)),s9=lo(),T0=xn().LMDB_ERRORS_ENUM,{getSchemaPath:i9}=gt(),Eo=Wc.SEARCH_WILDCARDS;async function o9(e,t,r){let n;e.schema===Wc.SYSTEM_SCHEMA_NAME?n=s9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=b0(e,n.hash_attribute,r,t);return R0(e,s,n.hash_attribute,r)}a(o9,"prepSearch");async function R0(e,t,r,n){let s=i9(e.schema,e.table),i=await r9.openEnvironment(s,e.table),o=y0(i,e,t,r),c=o.transaction||i;if([$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,$e.SEARCH_TYPES.SEARCH_ALL,$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(a9(e,r)===!1){let f=e.search_attribute;if(f===r)return n?A0(o,()=>!0):o.map(_=>({[r]:_.key}));let d=a(_=>({[r]:_.value,[f]:_.key}),"toObject");return n?A0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Qr.batchSearchByHashToMap(c,r,e.get_attributes,u):Qr.batchSearchByHash(c,r,e.get_attributes,u)}a(R0,"executeSearch");function y0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case $e.SEARCH_TYPES.EQUALS:s=Qr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.CONTAINS:s=Qr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.ENDS_WITH:case $e.SEARCH_TYPES._ENDS_WITH:s=Qr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.STARTS_WITH:case $e.SEARCH_TYPES._STARTS_WITH:s=Qr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.SEARCH_ALL:return Qr.searchAll(e,n,t.get_attributes,o,c,l);case $e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qr.searchAllToMap(e,n,t.get_attributes,o,c,l);case $e.SEARCH_TYPES.BETWEEN:s=Qr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN:case $e.SEARCH_TYPES._GREATER_THAN:s=Qr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN_EQUAL:case $e.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Qr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.LESS_THAN:case $e.SEARCH_TYPES._LESS_THAN:s=Qr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.LESS_THAN_EQUAL:case $e.SEARCH_TYPES._LESS_THAN_EQUAL:s=Qr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(y0,"searchByType");function A0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(A0,"createMapFromIterable");function a9(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(a9,"checkToFetchMore");function b0(e,t,r,n){if(n9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Eo.indexOf(s)>-1)return r===!0?$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:$e.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Eo[0])<0&&s.indexOf(Eo[1])<0)return c===!0?r===!0?$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:$e.SEARCH_TYPES.EQUALS;if(Eo.indexOf(i)>=0&&Eo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),$e.SEARCH_TYPES.CONTAINS;if(Eo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),$e.SEARCH_TYPES.ENDS_WITH;if(Eo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),$e.SEARCH_TYPES.STARTS_WITH;if(s.includes(Eo[0])||s.includes(Eo[1]))return $e.SEARCH_TYPES.EQUALS;throw new Error(T0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Wc.VALUE_SEARCH_COMPARATORS.BETWEEN:return $e.SEARCH_TYPES.BETWEEN;case Wc.VALUE_SEARCH_COMPARATORS.GREATER:return $e.SEARCH_TYPES.GREATER_THAN;case Wc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return $e.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wc.VALUE_SEARCH_COMPARATORS.LESS:return $e.SEARCH_TYPES.LESS_THAN;case Wc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return $e.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(T0.UNKNOWN_SEARCH_TYPE)}}a(b0,"createSearchTypeFromSearchObject");O0.exports={executeSearch:R0,createSearchTypeFromSearchObject:b0,prepSearch:o9,searchByType:y0}});var w0=C((UOe,N0)=>{"use strict";var vOe=Ws(),c9=Ru(),l9=ie(),u9=(k(),P(q)),d9=aE();N0.exports=f9;function f9(e,t){if(!l9.isEmpty(t)&&u9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=c9(e,"value");if(n)throw n;return d9.prepSearch(e,t,!0)}a(f9,"lmdbGetDataByValue")});var g_=C((HOe,I0)=>{"use strict";var BOe=Ws(),_9=Ru(),h9=ie(),m9=(k(),P(q)),p9=aE();I0.exports=E9;async function E9(e,t){if(!h9.isEmpty(t)&&m9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=_9(e,"value");if(n)throw n;return p9.prepSearch(e,t,!1)}a(E9,"lmdbSearchByValue")});var P0=C((GOe,C0)=>{"use strict";var FOe=Ft(),Jy=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Xy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Zy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};C0.exports={SearchByConditionsObject:Jy,SearchCondition:Xy,SortAttribute:Zy}});var U0=C((KOe,v0)=>{"use strict";var $Oe=P0().SearchByConditionsObject,g9=Ws(),S9=Ru(),eb=Au(),cE=Ft(),{Resource:VOe}=(ia(),P(eR)),M0=aE(),T9=Yy(),A9=require("lodash"),{getSchemaPath:R9}=gt(),D0=ht(),{handleHDBError:y9,hdb_errors:b9}=he(),{HTTP_STATUS_CODES:O9}=b9,N9=1e8;v0.exports=w9;async function w9(e){let t=S9(e,"conditions");if(t)throw y9(t,t.message,O9.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=R9(e.schema,e.table),n=await D0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)D0.openDBI(n,u.search_attribute);let i=A9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===cE.SEARCH_TYPES.EQUALS?u.estimated_count=eb.count(n,u.search_attribute,u.search_value):f===cE.SEARCH_TYPES.CONTAINS||f===cE.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=N9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await L0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(M0.filterByType),d=f.length,_=eb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:o,lazy:!0})),d>0&&(l=l.filter(h=>{for(let m=0;m<d;m++)if(!f[m](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(h=>T9.parseRow(h,_))}else{for(let d=1;d<i.length;d++){let _=i[d],h=await L0(o,e,_,s.hash_attribute);c=c.concat(h)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=eb.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(w9,"lmdbSearchByConditions");async function L0(e,t,r,n){let s=new g9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===cE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,M0.searchByType(e,s,i,n).map(o=>o.value)}a(L0,"executeConditionSearch")});var S_=C((WOe,x0)=>{"use strict";var I9=(k(),P(q)).OPERATIONS_ENUM,tb=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=I9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};x0.exports=tb});var rb=C((jOe,V0)=>{"use strict";var F0=Ws(),G0=S_(),q0=g_(),$0=h_(),yn=(k(),P(q)),B0=ie(),H0=ht(),{getTransactionAuditStorePath:C9,getSchemaPath:P9}=gt(),k0=ee();V0.exports=D9;async function D9(e){try{if(B0.isEmpty(global.hdb_schema[e.schema])||B0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await L9(e),await M9(e);let t=P9(e.schema,e.table);try{await H0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")k0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=C9(e.schema,e.table);await H0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")k0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(D9,"lmdbDropTable");async function L9(e){let t=new F0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await q0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new G0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $0(s)}a(L9,"deleteAttributesFromSystem");async function M9(e){let t=new F0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await q0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new G0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $0(s)}catch(i){throw i}}a(M9,"dropTableFromSystem")});var Y0=C((JOe,K0)=>{"use strict";var v9=require("fs-extra"),U9=Ws(),x9=yu(),B9=S_(),H9=rb(),k9=h_(),F9=zy(),G9=g_(),go=(k(),P(q)),{getSchemaPath:q9}=gt(),{handleHDBError:$9,hdb_errors:V9}=he(),{HDB_ERROR_MSGS:K9,HTTP_STATUS_CODES:Y9}=V9;K0.exports=W9;async function W9(e){let t;try{t=await z9(e.schema);let r=new U9(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await G9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await H9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new B9(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await k9(s);let i=q9(t);await v9.remove(i)}catch(r){throw r}}a(W9,"lmdbDropSchema");async function z9(e){let t=new x9(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await F9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw $9(new Error,K9.SCHEMA_NOT_FOUND(e),Y9.NOT_FOUND,void 0,void 0,!0);return n}a(z9,"validateDropSchema")});var T_=C((ZOe,W0)=>{"use strict";var nb=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};W0.exports=nb});var ib=C((rNe,z0)=>{"use strict";var j9=require("fs-extra"),lE=ht(),{getTransactionAuditStorePath:Q9}=gt(),sb=Ft(),tNe=T_();z0.exports=J9;async function J9(e){let t;try{let r=Q9(e.schema,e.table);await j9.mkdirp(r),t=await lE.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{lE.createDBI(t,sb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),lE.createDBI(t,sb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),lE.createDBI(t,sb.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(J9,"createTransactionsAuditEnvironment")});var J0=C((iNe,Q0)=>{"use strict";var ob=(k(),P(q)),j0=ht(),X9=xc(),{getSystemSchemaPath:Z9,getSchemaPath:e7}=gt(),sNe=lo(),t7=Fp(),ab=kp(),r7=ee(),n7=ib();Q0.exports=s7;async function s7(e,t){let r=e7(t.schema,t.table),n=new ab(t.schema,t.table,ob.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new ab(t.schema,t.table,ob.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ab(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await j0.createEnvironment(r,t.table),e!==void 0){let o=await j0.openEnvironment(Z9(),ob.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await X9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await cb(n),await cb(s),await cb(i)}await n7(t)}catch(o){throw o}}a(s7,"lmdbCreateTable");async function cb(e){try{await t7(e)}catch(t){r7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(cb,"createAttribute")});var Z0=C((aNe,X0)=>{"use strict";var i7=Jf(),o7=bf(),a7=tE(),A_=(k(),P(q)),c7=xc().updateRecords,l7=ht(),{getSchemaPath:u7}=gt(),d7=f_(),f7=ee();X0.exports=_7;async function _7(e){try{let{schema_table:t,attributes:r}=i7(e);o7(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await a7(e.hdb_auth_header,t,r),s=u7(e.schema,e.table),i=await l7.openEnvironment(s,e.table),o=await c7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await d7(e,o)}catch(c){f7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(_7,"lmdbUpdateRecords")});var tx=C((lNe,ex)=>{"use strict";var h7=(k(),P(q)).OPERATIONS_ENUM,lb=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=h7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ex.exports=lb});var nx=C((fNe,rx)=>{"use strict";var dNe=tx(),m7=Jf(),p7=bf(),E7=tE(),R_=(k(),P(q)),g7=xc().upsertRecords,S7=ht(),{getSchemaPath:T7}=gt(),A7=f_(),R7=ee(),{handleHDBError:y7,hdb_errors:b7}=he();rx.exports=O7;async function O7(e){let t;try{t=m7(e)}catch(l){throw y7(l,l.message,b7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;p7(e,n,r.hash_attribute),e.schema!==R_.SYSTEM_SCHEMA_NAME&&(n.includes(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await E7(e.hdb_auth_header,r,n),i=T7(e.schema,e.table),o=await S7.openEnvironment(i,e.table),c=await g7(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await A7(e,c)}catch(l){R7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(O7,"lmdbUpsertRecords")});var ix=C((hNe,sx)=>{"use strict";var ub=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};sx.exports=ub});var ax=C((pNe,ox)=>{"use strict";var db=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};ox.exports=db});var ux=C((SNe,lx)=>{"use strict";var fb=ht(),{getTransactionAuditStorePath:N7}=gt(),gNe=ix(),y_=Ft(),w7=ie(),cx=ax(),I7=require("util").promisify,C7=I7(setTimeout),P7=1e4,D7=100;lx.exports=L7;async function L7(e){let t=N7(e.schema,e.table),r=await fb.openEnvironment(t,e.table,!0),n=fb.listDBIs(r);fb.initializeDBIs(r,y_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new cx;do s=await M7(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await C7(D7);while(s.transactions_deleted>0);return i}a(L7,"deleteAuditLogsBefore");async function M7(e,t){let r=new cx;try{let n=e.dbis[y_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[y_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];w7.isEmpty(c)||(s=e.dbis[y_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[y_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>P7)break}return await s,r}catch(n){throw n}}a(M7,"deleteTransactions")});var fx=C((ANe,dx)=>{"use strict";var _b=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};dx.exports=_b});var hx=C((bNe,_x)=>{"use strict";var v7=Ws(),U7=S_(),yNe=fx(),Pi=(k(),P(q)),x7=ie(),hb=ht(),B7=lo(),H7=g_(),k7=h_(),{getSchemaPath:F7}=gt();_x.exports=G7;async function G7(e,t=!0){let r;e.schema===Pi.SYSTEM_SCHEMA_NAME?r=B7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await $7(e),s=F7(e.schema,e.table),i=await hb.openEnvironment(s,e.table);return t===!0&&await q7(e,i,r.hash_attribute),hb.dropDBI(i,e.attribute),n}a(G7,"lmdbDropAttribute");async function q7(e,t,r){let n=hb.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(q7,"removeAttributeFromAllObjects");async function $7(e){let t=new v7(Pi.SYSTEM_SCHEMA_NAME,Pi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await H7(t)).filter(o=>o[Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(x7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new U7(Pi.SYSTEM_SCHEMA_NAME,Pi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return k7(i)}a($7,"dropAttributeFromSystem")});var Tx=C((wNe,Sx)=>{"use strict";var mb=ht(),bu=Ft(),NNe=fn(),pb=(k(),P(q)),mx=ie(),{getTransactionAuditStorePath:V7}=gt(),K7=Au(),uE=gu(),Y7=ee();Sx.exports=W7;async function W7(e){let t=V7(e.schema,e.table),r=await mb.openEnvironment(t,e.table,!0),n=mb.listDBIs(r);mb.initializeDBIs(r,bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case pb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return px(r,e.search_values);case pb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,j7(r,e.search_values,s);case pb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return z7(r,e.search_values);default:return px(r)}}a(W7,"readAuditLog");function px(e,t=[0,Date.now()]){mx.isEmpty(t[0])&&(t[0]=0),mx.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new uE,s))}a(px,"searchTransactionsByTimestamp");function z7(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[bu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,gx(e,i))}return Object.fromEntries(r)}a(z7,"searchTransactionsByUsername");function j7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=K7.equals(e,bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let _=Number(d);n.has(_)?n.get(_).push(u.toString()):n.set(_,[u.toString()])}}let s=Array.from(n.keys()),i=gx(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);Ex(l,"records",r,f,o),Ex(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(j7,"searchTransactionsByHashValues");function Ex(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new uE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new uE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Ex,"loopRecords");function gx(e,t){let r=[];try{let n=e.dbis[bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new uE,i);r.push(o)}}catch(i){Y7.warn(i)}return r}catch(n){throw n}}a(gx,"batchSearchTransactions")});var Rx=C((DNe,Ax)=>{"use strict";var{getSchemaPath:CNe}=gt(),PNe=ht(),{database:Q7}=(xe(),P(ct));Ax.exports={writeTransaction:J7};async function J7(e,t,r){return Q7({database:e,table:t}).transaction(r)}a(J7,"writeTransaction")});var Nx=C((MNe,Ox)=>{"use strict";var{getSchemaPath:yx}=gt(),bx=ht();Ox.exports={flush:X7,resetReadTxn:Z7};async function X7(e,t){return(await bx.openEnvironment(yx(e,t),t.toString())).flushed}a(X7,"flush");async function Z7(e,t){try{(await bx.openEnvironment(yx(e,t),t.toString())).resetReadTxn()}catch{}}a(Z7,"resetReadTxn")});var Px=C((UNe,Cx)=>{"use strict";var{Readable:eee}=require("stream"),{getDatabases:tee}=(xe(),P(ct)),{readSync:ree,openSync:nee,createReadStream:wx}=require("fs"),{open:see}=require("lmdb"),Ix=Yf(),iee=Wf(),{AUDIT_STORE_OPTIONS:oee}=(Ai(),P(Dx)),{INTERNAL_DBIS_NAME:aee,AUDIT_STORE_NAME:cee}=Ft();Cx.exports=uee;var Eb=32768,lee=100;async function uee(e){let t=e.database||e.schema||"data",r=tee()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=see({noSync:!0,maxDbs:iee.MAX_DBS}),_,h=d.openDB(aee,new Ix(!1)),m=f.useReadTransaction(),S=0,g=a(async function(E,T){T.encoding="binary",T.encoder=void 0;let N=d.openDB(E,T),M=f.openDB(E,T);for(let{key:H,version:X,value:W}of M.getRange({start:null,transaction:m,versions:M.useVersions}))_=N.put(H,W,X),S++%lee===0&&(await new Promise($=>setTimeout($,20)),m.openTimer&&(m.openTimer=0))},"copyDatabase");for(let{key:E,value:T}of f.getRange({transaction:m,start:!1}))if(s.some(N=>E.startsWith?.(N+"/"))){h.put(E,T);let[,N]=E.split("/"),M=!N,H=new Ix(!M,M);await g(E,H)}e.include_audit&&await g(cee,{...oee}),await _;let R=wx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=nee(o.path);return o.transaction(()=>{let u=Buffer.alloc(Eb);ree(c,u,0,Eb),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=wx(null,{fd:c,start:Eb}),_=new eee.from(async function*(){yield u;for await(let h of d)f.openTimer&&(f.openTimer=0),yield h;f.done()}());return _.headers=l(),_});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(uee,"getBackup")});var vx=C((BNe,Mx)=>{"use strict";var dee=ee(),{handleHDBError:fee}=he(),_ee=lM(),hee=Fp(),mee=Gy(),pee=YU(),Eee=h_(),gee=zy(),See=g0(),Tee=w0(),Aee=g_(),Ree=U0(),yee=Y0(),bee=J0(),Oee=Z0(),Nee=nx(),wee=ux(),Iee=rb(),Cee=hx(),Pee=Tx(),Dee=Rx(),Lx=Nx(),Lee=Px(),gb=class extends _ee{static{a(this,"LMDBBridge")}async searchByConditions(t){return Ree(t)}async getDataByHash(t){return await gee(t)}async searchByHash(t){return await See(t)}async getDataByValue(t,r){return await Tee(t,r)}async searchByValue(t){return await Aee(t)}async createSchema(t){return await pee(t)}async dropSchema(t){return await yee(t)}async createTable(t,r){return await bee(t,r)}async dropTable(t){return await Iee(t)}async createAttribute(t){return await hee(t)}async createRecords(t){return await mee(t)}async updateRecords(t){return await Oee(t)}async upsertRecords(t){try{return await Nee(t)}catch(r){throw fee(r,null,null,dee.ERR,r)}}async deleteRecords(t){return await Eee(t)}async dropAttribute(t){return await Cee(t)}async deleteAuditLogsBefore(t){return await wee(t)}async readAuditLog(t){return await Pee(t)}writeTransaction(t,r,n){return Dee.writeTransaction(t,r,n)}flush(t,r){return Lx.flush(t,r)}resetReadTxn(t,r){return Lx.resetReadTxn(t,r)}getBackup(t){return Lee(t)}};Mx.exports=gb});var Tb={};Ue(Tb,{add:()=>dE,applyReverse:()=>Ux,getRecordAtTime:()=>Sb,rebuildUpdateBefore:()=>fE});function dE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function fE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,dE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ux(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Mee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=xx}}function Sb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=St(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Ux(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===xx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=St(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Mee,xx,_E=Re(()=>{Ai();a(dE,"add");dE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};Mee={add:dE};a(fE,"rebuildUpdateBefore");a(Ux,"applyReverse");xx={};a(Sb,"getRecordAtTime")});function bn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function EE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a string, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(_=>typeof _=="string")||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a string, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="number"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a number, attempt to assign ${_}`);bn(this)[l]=d},"set");break;case"Int":u=a(function(d){let _=d?.__op__?d.value:d;if(!(_>>0===_||d==null&&c.nullable!==!1))if(typeof _=="number"&&Math.abs((_>>0)-_)<=1)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new zn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Long":u=a(function(d){let _=d?.__op__?d.value:d;if(!(Math.round(_)===d&&Math.abs(_)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof _=="number"&&Math.abs(_)<=9007199254740992)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new zn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="bigint"||d==null&&c.nullable!==!1))if(typeof _=="string"||typeof _=="number")_=BigInt(_),d?.__op__?d.value=_:d=_;else throw new zn.ClientError(`${l} must be a number, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new zn.ClientError(`${l} must be a Date, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof Ti||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){bn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be an object, attempt to assign ${d}`);bn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let h=d[l];if(h?.__op__){let m=this.getRecord()?.[l];return h.update(m)}return h}let _=this.getRecord()?.[l];if(_&&typeof _=="object"){let h=Ab(_,c);if(h)return d||this._setChanges(d=Object.create(null)),d[l]=h}return _},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new zn.ClientError("Can not add a property to a sealed table schema");bn(this)[c]=l}),i("deleteProperty",function(c){bn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let _=l[f];d=d.update(_)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,Hx);break}o=c}while(o&&o!==Hx)}function Ab(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends b_{static{a(this,"TrackedObject")}},EE(r,t)),new r(e)):new b_(e);case Array:let n=new mE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Ab(o,t?.elements)),n[s]=o}return n;default:return e}}function gE(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=gE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Ou(e,t=e.getChanges?.()){let r;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Ou(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Tb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ou(s);r[n]=s}if(!Array.isArray(e))for(let n in e)vee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function hE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[zc]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(hE(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(hE(s))return!0}else return!0}else return!0}}return!1}var zn,Bx,Hx,b_,vee,zc,mE,pE,Rb=Re(()=>{zn=v(he());_E();gn();a(bn,"getChanges");a(EE,"assignTrackedAccessors");Bx=Object.prototype,Hx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Bx[t])return Bx[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=Ab(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Ab,"trackObject");b_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};EE(b_,{});a(gE,"collapseData");vee=Object.prototype.hasOwnProperty;a(Ou,"updateAndFreeze");a(hE,"hasChanges");zc=Symbol.for("has-array-changes"),mE=class extends Array{static{a(this,"TrackedArray")}#e;[zc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[zc]=!0,super.splice(...t)}push(...t){return this[zc]=!0,super.push(...t)}pop(){return this[zc]=!0,super.pop()}unshift(...t){return this[zc]=!0,super.unshift(...t)}shift(){return this[zc]=!0,super.shift()}};mE.prototype.constructor=Array;pE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Yx={};Ue(Yx,{ResourceBridge:()=>Ob});function Nb({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Fx(e,t){let r=Di(e),n=Nb(e,r);if(!r)throw new zs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Pt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&gE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Di(e){let t=e.database||e.schema||xee,r=Xe()[t];if(!r)throw(0,zs.handleHDBError)(new Error,Uee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Gx(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*qx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var $x,SE,zs,Vx,yb,bb,Kx,Uee,xee,Bee,Hee,kx,Ob,Wx=Re(()=>{"use strict";$x=v(vx()),SE=v(Ru()),zs=v(he());xe();Vx=v(Jf());k();yb=v(po()),bb=v(Ys()),Kx=v(ie());Sc();Rb();({HDB_ERROR_MSGS:Uee}=zs.hdb_errors),xee="data",Bee=1e4,Hee=10,Ob=class extends $x.default{static{a(this,"ResourceBridge")}constructor(t){super(t),kx=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,SE.default)(t,"conditions");if(r)throw(0,zs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Di(t);if(!n)throw new zs.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Nb(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new zs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}_t({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Di(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Di(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Di(t).dropTable()}createSchema(t){return Nu({database:t.schema,table:null}),yb.signalSchemaChange(new bb.SchemaEventMsg(process.pid,Yt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await wb(t.schema),yb.signalSchemaChange(new bb.SchemaEventMsg(process.pid,Yt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,kx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Vx.default)(t),s,i=Xe()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(_=>_.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],_=d!=null&&await i.get(d,o);if(t.requires_existing&&!_||t.requires_no_existing&&_){u.push(f[i.primaryKey]);continue}_&&(_=gE(_));for(let h in f)if(Object.prototype.hasOwnProperty.call(f,h)){let m=f[h];if(typeof m=="function")try{let S=m([[_]]);Array.isArray(S)&&(m=S[0].func_val,f[h]=m)}catch(S){throw S.message+="Trying to set key "+h+" on object"+JSON.stringify(f),S}}if(_)for(let h in _)Object.prototype.hasOwnProperty.call(f,h)||(f[h]=_[h]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Xe()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Gx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Xe()[t.schema][t.table];if(!r.createdTimeProperty)throw new zs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Hm.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Kx.async_set_timeout)(Hee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%Bee===0&&await u();return l.length>0&&await u(),s?Gx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,SE.default)(t,"hashes");if(r)throw r;return Fx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Fx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&OA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,SE.default)(t,"value");if(n)throw n;let s=Di(t);if(!s)throw new zs.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Hm.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:Nb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Di(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Di({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Di(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Di(t),n={};switch(t.search_type){case km.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case km.USERNAME:let s=t.search_values;for await(let i of qx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return qx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Nb,"getSelect");a(Fx,"getRecords");a(Di,"getTable");a(Gx,"createDeleteResponse");a(qx,"groupRecordsInHistory")});var Kn=C((QNe,zx)=>{"use strict";var{ResourceBridge:kee}=(Wx(),P(Yx)),Fee=le();Fee.initSync();var TE;function Gee(){return TE||(TE=new kee,TE)}a(Gee,"getBridge");zx.exports=Gee()});var Rn=C((XNe,Xx)=>{"use strict";var RE=yR(),xr=ie(),qee=require("util"),yE=Kn(),$ee=ps(),jx=ee(),{handleHDBError:jc,hdb_errors:Vee}=he(),{HTTP_STATUS_CODES:Qc}=Vee,Kee=qee.promisify($ee.getTableSchema),Yee="updated",Qx="inserted",Jx="upserted";Xx.exports={insert:zee,update:jee,upsert:Qee,validation:Wee,flush:Jee};async function Wee(e){if(xr.isEmpty(e))throw new Error("invalid update parameters defined.");if(xr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(xr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Kee(e.schema,e.table),r=RE(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&xr.isEmptyOrZeroLength(c[n]))throw jx.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!xr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw jx.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!xr.isEmpty(c[n])&&c[n]!==""&&s.has(xr.autoCast(c[n]))&&(c.skip=!0),s.add(xr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Wee,"validation");async function zee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=RE(e);if(t)throw jc(new Error,t.message,Qc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw jc(new Error,r,Qc.BAD_REQUEST);let n=await yE.createRecords(e);return AE(Qx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(zee,"insertData");async function jee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=RE(e);if(t)throw jc(new Error,t.message,Qc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw jc(new Error,r,Qc.BAD_REQUEST);let n=await yE.updateRecords(e);return xr.isEmpty(n.existing_rows)?AE(Yee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):AE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(jee,"updateData");async function Qee(e){if(e.operation!=="upsert")throw jc(new Error,"invalid operation, must be upsert",Qc.INTERNAL_SERVER_ERROR);let t=RE(e);if(t)throw jc(new Error,t.message,Qc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw jc(new Error,r,Qc.BAD_REQUEST);let n=await yE.upsertRecords(e);return AE(Jx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Qee,"upsertData");function AE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Qx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Jx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(AE,"returnObject");function Jee(e){return xr.transformReq(e),yE.flush(e.schema,e.table)}a(Jee,"flush")});var sB=C((ewe,nB)=>{var wu=require("validate.js"),eB=it(),Iu=(k(),P(q)),{handleHDBError:Xee,hdb_errors:Zee}=he(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:ete}=Zee,Ib=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tte={STRUCTURE_USER:"structure_user"},Zx=Object.values(Iu.ROLE_TYPES_ENUM),rte="attribute_permissions",nte="attribute_name",{PERMS_CRUD_ENUM:Cu}=Iu,ste=[rte,...Object.values(Cu)],tB=[Cu.READ,Cu.INSERT,Cu.UPDATE],ite=[nte,...tB];function ote(e){let t=Ib();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,rB(e,t)}a(ote,"addRoleValidation");function ate(e){let t=Ib();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,rB(e,t)}a(ate,"alterRoleValidation");function cte(e){let t=Ib();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,eB.validateObject(e,t)}a(cte,"dropRoleValidation");var lte=["operation","role","id","permission","hdb_user","access"];function rB(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)lte.includes(n[o])||s.push(n[o]);s.length>0&&nr(jt.INVALID_ROLE_JSON_KEYS(s),r);let i=eB.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=ute(e);o&&nr(o,r),Zx.forEach(c=>{e.permission[c]&&!wu.isBoolean(e.permission[c])&&nr(jt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Zx.indexOf(o)<0){if(o===tte.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||nr(jt.SCHEMA_NOT_FOUND(d),r)}continue}nr(jt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(jt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){nr(jt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{ste.includes(f)||nr(jt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Cu).forEach(f=>{wu.isDefined(u[f])?wu.isBoolean(u[f])||nr(jt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(jt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(jt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(jt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:_})=>_),d={read:!1,insert:!1,update:!1};for(let _ in u.attribute_permissions){let h=u.attribute_permissions[_];if(Object.keys(h).forEach(S=>{!ite.includes(S)&&S!==Cu.DELETE&&nr(jt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!wu.isDefined(h.attribute_name)){nr(jt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=h.attribute_name;if(!f.includes(m)){nr(jt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}tB.forEach(S=>{wu.isDefined(h[S])?wu.isBoolean(h[S])||nr(jt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):nr(jt.ATTR_PERM_MISSING(S,m),r,o,l)}),!d.read&&h.read===!0&&(d.read=!0),!d.insert&&h.insert===!0&&(d.insert=!0),!d.update&&h.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let _=`${o}.${l}`;nr(jt.MISMATCHED_TABLE_ATTR_PERMS(_),r,o,l)}}}}return dte(r)}a(rB,"customValidate");nB.exports={addRoleValidation:ote,alterRoleValidation:ate,dropRoleValidation:cte};function ute(e){let{operation:t,permission:r}=e;if(t===Iu.OPERATIONS_ENUM.ADD_ROLE||t===Iu.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return jt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Iu.ROLE_TYPES_ENUM.SUPER_USER:Iu.ROLE_TYPES_ENUM.CLUSTER_USER;return jt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(ute,"validateNoSUPerms");function dte(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:jt.ROLE_PERMS_ERROR,...e};return Xee(new Error,n,ete.BAD_REQUEST)}else return null}a(dte,"generateRolePermResponse");function nr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(nr,"addPermError")});var N_=C((nwe,cB)=>{"use strict";var iB=Rn(),oB=zr(),fte=qc(),Pb=sB(),Db=po(),rwe=require("uuid").v4,_te=require("util"),bE=(k(),P(q)),hte=ie(),Lb=oB.searchByValue,mte=oB.searchByHash,pte=_te.promisify(fte.delete),Ete=Ws(),gte=yu(),{hdb_errors:Ste,handleHDBError:Jc}=he(),{HDB_ERROR_MSGS:aB,HTTP_STATUS_CODES:O_}=Ste,{UserEventMsg:Mb}=Ys();cB.exports={addRole:Tte,alterRole:Ate,dropRole:Rte,listRoles:yte};function Cb(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(Cb,"scrubRoleDetails");async function Tte(e){let t=Pb.addRoleValidation(e);if(t)throw t;e=Cb(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await Lb(r)||[])}catch(i){throw Jc(i)}if(n&&n.length>0)throw Jc(new Error,aB.ROLE_ALREADY_EXISTS(e.role),O_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await iB.insert(s),Db.signalUserChange(new Mb(process.pid)),e=Cb(e),e}a(Tte,"addRole");async function Ate(e){let t=Pb.alterRoleValidation(e);if(t)throw t;e=Cb(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await iB.update(r)}catch(s){throw Jc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Jc(new Error,"Invalid role id",O_.BAD_REQUEST,void 0,void 0,!0);return await Db.signalUserChange(new Mb(process.pid)),e}a(Ate,"alterRole");async function Rte(e){let t=Pb.dropRoleValidation(e);if(t)throw Jc(new Error,t,O_.BAD_REQUEST,void 0,void 0,!0);let r=new gte(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await mte(r));if(n.length===0)throw Jc(new Error,aB.ROLE_NOT_FOUND,O_.NOT_FOUND,void 0,void 0,!0);let s=new Ete(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Lb(s)),o=!1;if(hte.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Jc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,O_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await pte(c),Db.signalUserChange(new Mb(process.pid)),`${n[0].role} successfully deleted`}a(Rte,"dropRole");async function yte(){return Lb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(yte,"listRoles")});var vb={};Ue(vb,{start:()=>dB,startOnMainThread:()=>Nte});function dB({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,lB.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(bte.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let _=u.attributes[d];_.attribute_name=d,f.push(_)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await Ote(i)}}}async function Ote(e){let t=Xe().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,uB.isEqual)(i,e)?void 0:(e.id=r.id,(0,OE.alterRole)(e))}return(0,OE.addRole)(e)}var OE,lB,uB,bte,Nte,fB=Re(()=>{xe();OE=v(N_()),lB=require("yaml"),uB=require("lodash"),bte=["super_user","cluster_user","structure_user"];a(dB,"start");a(Ote,"ensureRole");Nte=dB});async function NE(e){let t=(0,mB.pathToFileURL)(e).toString();if(wte)return w_||(w_=Ite(Pte)),(await(await w_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Ite(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),w_=new Compartment({console,Math,Date,fetch:Cte,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,hB.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yr,tables:jn,databases:We})}};let n=await(0,_B.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),w_}function Cte(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Pte(){return{Resource:Yr,tables:jn}}var _B,hB,mB,wte,w_,Ub=Re(()=>{ia();xe();_B=require("fs/promises"),hB=require("path"),mB=require("url"),wte=!1;a(NE,"secureImport");a(Ite,"getCompartment");a(Cte,"secureOnlyFetch");a(Pte,"getGlobalVars")});var Bb={};Ue(Bb,{handleFile:()=>Dte});async function Dte(e,t,r,n){let s=new Map,i=await NE(r);c(i.default)&&n.set((0,xb.dirname)(t),i.default),o(i,(0,xb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var xb,pB=Re(()=>{Ub();xb=require("path");a(Dte,"handleFile")});var kb={};Ue(kb,{start:()=>Lte});function Lte({resources:e}){e.set("login",Hb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Hb,EB=Re(()=>{ia();a(Lte,"start");Hb=class extends Yr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var M_={};Ue(M_,{addAnalyticsListener:()=>L_,calculateCPUUtilization:()=>xB,diffResourceUsage:()=>BB,recordAction:()=>Mt,recordActionBinary:()=>Qn,setAnalyticsEnabled:()=>Mte});function Mte(e){DB=e}function vte(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function Ute(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},IE.set(e,o)}function Mt(e,t,r,n,s){if(!DB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=IE.get(i);o?vte(e,o):Ute(i,e,t,r,n,s),wE||xte()}function Qn(e,t,r,n,s){Mt(!!e,t,r,n,s)}function L_(e){vB.push(e)}function xte(){wE=performance.now(),setTimeout(async()=>{let e=performance.now()-wE;wE=0;let t=[],r={time:Date.now(),period:e,threadId:Xc.threadId,metrics:t};for(let[s,i]of IE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of UB){let _=Math.floor(c*d),h=o[_-1];if(_>l){let m=_-l;if(h===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+m}:S.count+=m}else u.push(m>1?{value:h,count:m}:h),f=h;l=_}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await HB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Xc.threadId,byThread:!0,...n});for(let s of vB)s(t);IE=new Map,Xc.parentPort?Xc.parentPort.postMessage({type:MB,report:r}):GB({report:r})},LB).unref()}function CE(e,t,r){let n={id:(0,P_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function xB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function BB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Bte(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};CE(e,"table-size",l),Zc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function gB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=PB.default.statSync(s.primaryStore.env.path).size,c=Bte(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};CE(e,"database-size",u),Zc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Zc.warn?.("Error getting DB size metrics",s)}}function SB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};CE(e,"storage-volume",o),Zc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Zc.warn?.("Error getting DB volume metrics",s)}}async function Hte(e,t=6e4){let r=Gb(),n=kB(),s=new Promise(E=>{let T=performance.now();setImmediate(()=>{let N=performance.now();N-T>5e3&&Zc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(N-T)+"ms"),T=performance.now()}),n.primaryStore.prefetch([1],()=>{let N=performance.now();N-T>5e3&&Zc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(N-T)+"ms"),E(N-T)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:T}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!T)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:N,threadId:M}=T;for(let H of N||[]){let{path:X,method:W,type:$,metric:se,count:z,total:fe,distribution:ue,threads:Z,...Ae}=H;z||(z=1);let me=se+(X?"-"+X:"");W!==void 0&&(me+="-"+W),$!==void 0&&(me+="-"+$);let ye=c.get(me);if(ye){if(ye.threads){let dt=ye.threads[M];if(dt)ye=dt;else{ye.threads[M]={...Ae};continue}}ye.count||(ye.count=1);let Ht=ye.count;for(let dt in Ae){let Mn=Ae[dt];typeof Mn=="number"&&(ye[dt]=(ye[dt]*Ht+Mn*z)/(Ht+z))}ye.count+=z,fe>=0&&(ye.total+=fe,ye.ratio=ye.total/ye.count)}else ye={period:t,...H},delete ye.distribution,c.set(me,ye),ye.byThread&&(ye.threads=[],ye.threads[M]={...Ae},u.push(ye));if(ue){ue=ue.map(dt=>typeof dt=="number"?{value:dt,count:1}:dt);let Ht=l.get(me);Ht?Ht.push(...ue):l.set(me,ue)}}await HB()}for(let E of u){let{path:T,method:N,type:M,metric:H,count:X,total:W,distribution:$,threads:se,...z}=E;se=se.filter(fe=>fe);for(let fe in z){if(typeof E[fe]!="number")continue;let ue=0;for(let Z of se){let Ae=Z[fe];typeof Ae=="number"&&(ue+=Ae)}E[fe]=ue}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,T]of l){let N=c.get(E);T.sort((dt,Mn)=>dt.value>Mn.value?1:-1);let M=N.count-1,H=[],X=0,W=0,$;for(let dt of UB){let Mn=M*dt;for(;X<Mn;)$=T[W++],X+=$.count,W===1&&X--;let Vr=T[W>1?W-2:0];$||($=T[0]),H.push($.value-($.value-Vr.value)*(X-Mn)/$.count)}let[se,z,fe,ue,Z,Ae,me,ye,Ht]=H;Object.assign(N,{p1:se,p10:z,p25:fe,median:ue,p75:Z,p90:Ae,p95:me,p99:ye,p999:Ht})}let d;for(let[E,T]of c)T.id=(0,P_.getNextMonotonicTime)(),T.time=f,n.primaryStore.put(T.id,T,{append:!0}).then(N=>{N||n.primaryStore.put(T.id,T)}),d=!0;let _=Date.now(),{idle:h,active:m}=performance.eventLoopUtilization();if(d||m*10>h){let E=(0,P_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:h-TB,active:m-AB,taskQueueLatency:await s,time:_,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(N=>{N||n.primaryStore.put(E,T)})}TB=h,AB=m;let S=process.resourceUsage(),g=BB(I_,S);g.time=_,g.period=I_.time?_-I_.time:t,g.cpuUtilization=xB(I_,g.period),CE(n,"resource-usage",g),I_=g;let R=Xe();gB(n,R),gB(n,{system:R.system}),SB(n,R),SB(n,{system:R.system})}async function RB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Gb(){return yB||(yB=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function kB(){return bB||(bB=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Gte(){FB=!0;let e=(0,D_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Hte(LB,e),await RB(Gb(),kte),await RB(kB(),Fte)},Math.min(e/2,2147483647)).unref()}function GB(e,t){let r=e.report;r.threadId=t?.threadId||Xc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(OB+=n.mean*n.count);r.totalBytesProcessed=OB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(NB.get(t))}),NB.set(t,t.performance.eventLoopUtilization())),r.id=(0,P_.getNextMonotonicTime)(),Gb().primaryStore.put(r.id,r),FB||Gte(),qte&&(qB=Vte(r))}async function Vte(e){if(await qB,!pa){let r=(0,C_.dirname)((0,IB.getLogFilePath)());try{pa=await(0,Fb.open)((0,C_.join)(r,"analytics.log"),"r+")}catch{pa=await(0,Fb.open)((0,C_.join)(r,"analytics.log"),"w+")}}let t=(await pa.stat()).size;if(t>$te){let r=Buffer.alloc(t);await pa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await pa.write(r,{position:0}),await pa.truncate(r.length),t=r.length}await pa.write(JSON.stringify(e)+`
19
+ `},"serialize"),compressible:!1,q:.8});Wr.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});KL={type:"application/json",serializeStream:Df,serialize:xf,deserialize:E3,q:.5};Wr.set("*/*",KL);Wr.set("",KL);a(E3,"tryJSONParse");a(Hf,"registerContentHandlers");g3=require("fastify-plugin"),S3=g3(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=yp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(yp,"findBestSerializer");FL=pR.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(kf,"serialize");a(la,"serializeMessage");a(hR,"asyncSerialization");a(mR,"hasAsyncSerialization");a(T3,"streamToBuffer");A3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(R3,"isBufferEncoding");a(y3,"parseContentType");a(ao,"getDeserializer");a(b3,"deserializerUnknownType");a(O3,"transformIterable");a(Rp,"toCsvStream")});var AR={};Ue(AR,{start:()=>v3});function N3(e){if(e.kind!==Me.Kind.OPERATION_DEFINITION&&e.kind!==Me.Kind.FRAGMENT_DEFINITION)throw new Or(`Unexpected non-executable definition type ${e.kind}.`)}function WL(e){if(typeof e!="object"||e===null)throw new yi("Request body must be an object.");if(!("query"in e))throw new yi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new yi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new yi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new yi("Request body `operationName` field must be a string.")}function TR(e){return parseInt(e.value,10)}function jL(e){return parseFloat(e.value)}function QL(e,t,r){let n=r.get(e.name.value);return JL(n)?XL(n,t):{attribute:t,value:n}}function JL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function XL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],JL(n)?XL(n,t):{attribute:t,value:n}))}function w3(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Me.Kind.NULL:return{attribute:t,value:null};case Me.Kind.INT:return{attribute:t,value:TR(e.value)};case Me.Kind.FLOAT:return{attribute:t,value:jL(e.value)};case Me.Kind.BOOLEAN:case Me.Kind.STRING:return{attribute:t,value:e.value.value};case Me.Kind.VARIABLE:return QL(e.value,t,r);case Me.Kind.OBJECT:return ZL(e.value,t,r);case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Or(`Value type, ${e.value.kind}, is not supported.`)}}function ZL(e,t,r){return e.fields.flatMap(n=>w3(n,t,r))}function I3(e,t){switch(e.value.kind){case Me.Kind.NULL:return{attribute:e.name.value,value:null};case Me.Kind.INT:return{attribute:e.name.value,value:TR(e.value)};case Me.Kind.FLOAT:return{attribute:e.name.value,value:jL(e.value)};case Me.Kind.BOOLEAN:case Me.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Me.Kind.VARIABLE:return QL(e.value,e.name.value,t);case Me.Kind.OBJECT:return ZL(e.value,[e.name.value],t);case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Or(`Argument type, ${e.value.kind}, is not supported.`)}}function C3(e,t){return e.flatMap(r=>I3(r,t))}function bp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Me.Kind.FIELD:return r;case Me.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Or(`Fragment \`${n}\` not found.`);return bp(s.selectionSet,t)}case Me.Kind.INLINE_FRAGMENT:return bp(r.selectionSet,t)}})}function eM(e,t){return bp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:eM(r.selectionSet,t)}:r.name.value)}async function P3(e,t,r,n){let s=_s.getMatch(e.name.value,"graphql");if(s===void 0)throw new Or(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:eM(e.selectionSet,r),conditions:C3(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function tM(e){switch(e.kind){case Me.Kind.NULL:return null;case Me.Kind.INT:return TR(e);case Me.Kind.FLOAT:return parseFloat(e.value);case Me.Kind.STRING:case Me.Kind.BOOLEAN:return e.value;case Me.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:tM(r.value),...t}),{});case Me.Kind.LIST:case Me.Kind.ENUM:default:throw new Or(`Value type, ${e.kind}, is not supported.`)}}function D3(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=tM(n.defaultValue)),n.type.kind===Me.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Or(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function L3(e,t,r,n){if(e.operation===Me.OperationTypeNode.SUBSCRIPTION)throw new Or("Subscriptions are not supported.");if(e.operation===Me.OperationTypeNode.MUTATION)throw new Or("Mutations are not supported yet.");let s=D3(e.variableDefinitions,t),i=await Promise.all(bp(e.selectionSet,r).map(c=>P3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function zL({query:e,variables:t={},operationName:r},n){let s=Me.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(N3(u),u.kind===Me.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Or("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Or(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Or("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Or(`Operation \`${r}\` not found.`);let l=await L3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function M3(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return WL(r),zL(r,e)}case"POST":{let r=await ao(e.headers.get("content-type"),!0)(e._nodeRequest);return WL(r),zL(r,e)}default:throw new yi("Method Not Allowed",405,{Allow:"GET, POST"})}}function v3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await M3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Me.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Or)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Me.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Or)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Me,Or,yi,rM=Re(()=>{Me=v(require("graphql"));so();su();a(N3,"assertExecutableDefinitionNode");a(WL,"assertRequestParams");a(TR,"processIntValueNode");a(jL,"processFloatValueNode");a(QL,"processVariableNode");a(JL,"isObject");a(XL,"transformObjectIntoQueryCondition");a(w3,"processObjectFieldNode");a(ZL,"processObjectValueNode");a(I3,"processArgumentNode");a(C3,"buildConditionsQuery");a(bp,"fillInFragments");a(eM,"buildSelectQuery");a(P3,"processFieldNode");a(tM,"processConstValueNode");a(D3,"resolveVariables");a(L3,"executeOperation");a(zL,"resolver");Or=class extends Error{static{a(this,"GraphQLQueryingError")}},yi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(M3,"graphqlQueryingHandler");a(v3,"start")});var Oi=C((WRe,iM)=>{"use strict";var sM=ie(),nM=(k(),P(q)),du=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bi=require("joi"),ua={schema_format:{pattern:du,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},U3=bi.alternatives(bi.string().min(1).max(ua.schema_length.maximum).pattern(du).messages({"string.pattern.base":"{:#label} "+ua.schema_format.message}),bi.number(),bi.array()).required(),x3=bi.alternatives(bi.string().min(1).max(ua.schema_length.maximum).pattern(du).messages({"string.pattern.base":"{:#label} "+ua.schema_format.message}),bi.number()),B3=bi.alternatives(bi.string().min(1).max(ua.schema_length.maximum).pattern(du).messages({"string.pattern.base":"{:#label} "+ua.schema_format.message}),bi.number()).required();function H3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ua.schema_length.maximum?`'${e}' maximum of 250 characters`:du.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(H3,"checkValidTable");function k3(e,t){return sM.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(k3,"validateSchemaExists");function F3(e,t){let r=t.state.ancestors[0].schema;return sM.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(F3,"validateTableExists");function G3(e,t){return e.toLowerCase()===nM.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${nM.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(G3,"validateSchemaName");iM.exports={common_validators:ua,schema_regex:du,hdb_schema_table:U3,validateSchemaExists:k3,validateTableExists:F3,validateSchemaName:G3,checkValidTable:H3,hdb_database:x3,hdb_table:B3}});var yR=C((jRe,aM)=>{var{hdb_table:q3,hdb_database:oM}=Oi(),$3=it(),RR=require("joi"),V3={undefined:"undefined",null:"null"},K3=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||V3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),Y3=RR.object({database:oM,schema:oM,table:q3,records:RR.array().items(RR.object().custom(K3)).required()});aM.exports=function(e){return $3.validateBySchema(e,Y3)}});var lM=C((JRe,cM)=>{"use strict";var bR=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};cM.exports=bR});var dM=C((ZRe,uM)=>{"use strict";var OR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uM.exports=OR});var pM={};Ue(pM,{HAS_EXPIRATION:()=>Ip,HAS_RESIDENCY_ID:()=>DR,HAS_STRUCTURE_UPDATE:()=>Pp,LAST_TIMESTAMP_PLACEHOLDER:()=>$f,LOCAL_TIMESTAMP:()=>W3,METADATA:()=>Pc,NEW_TIMESTAMP_PLACEHOLDER:()=>_M,NO_TIMESTAMP:()=>Np,PENDING_LOCAL_TIME:()=>LR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>PR,RecordEncoder:()=>CR,TIMESTAMP_ASSIGN_LAST:()=>j3,TIMESTAMP_ASSIGN_NEW:()=>hM,TIMESTAMP_ASSIGN_PREVIOUS:()=>mM,TIMESTAMP_PLACEHOLDER:()=>Op,TIMESTAMP_RECORD_PREVIOUS:()=>NR,handleLocalTimeForGets:()=>Dp,recordUpdater:()=>MR,removeEntry:()=>Lc});function J3(){return qf[0]=qf[0]^64,z3.getFloat64(0)}function Dp(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[Pc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[Pc]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u?.[Pc];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Cc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Cc.length;u++){let f=Cc[u].deref();(!f||f.isDone||f.isCommitted)&&Cc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function MR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,_){l==null?Ic=Np:d?Ic=i?.localTime?NR|mM:Np:Ic=l?i?.localTime?NR|16384:hM|16384:Np;let h=u?.expiresAt;if(h>=0&&(c|=Ip),Gf=c,wR=h,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:Ic>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(IR=E,Gf|=DR,g|=Mc),R!==E&&(g|=vc,R||(R=0)),c&Ip&&(g|=Kf),u?.originatingOperation&&(g|=Vf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&f!=="message"&&i.metadataFlags&Ur&&(!i.localTime||!r.getBinaryFast(i.localTime))&&ca(i.value);let T;if(s!==void 0&&(T=Tp(()=>e.put(n,s,m),n,e.rootStore),Oc&&(g|=Ur)),l){let N=u?.user?.username;if(_&&(Tp(()=>e.encoder.encode(_),n,e.rootStore),Oc&&(g|=Ur)),e.encoder.hasStructureUpdate&&(g|=Pp,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let M=i?.localTime,H=r.get(M);if(H){let X=St(H).previousLocalTime;return T=r.put(M,Dc(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,Ff,g,E,R,h),{ifVersion:S}),T}}T=r.put(s===void 0?_M:$f,Dc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,Ff,g,E,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function Lc(e,t,r){if(t)return t.value&&t.metadataFlags&Ur&&!e.auditStore?.getBinaryFast(t.localTime)&&ca(t.value),e.remove(t.key,r)}var fM,wp,Op,$f,PR,_M,W3,Pc,qf,z3,Np,hM,j3,mM,NR,Ip,DR,LR,Pp,Q3,Ff,Ic,Gf,wR,IR,CR,Cc,fu=Re(()=>{fM=require("msgpackr");Ai();wp=v(ee());gn();gn();Op=new Uint8Array([1,1,1,1,4,64,0,0]),$f=new Uint8Array([1,1,1,1,1,0,0,0]),PR=new Uint8Array([1,1,1,1,3,64,0,0]),_M=new Uint8Array([1,1,1,1,0,64,0,0]),W3=Symbol("local-timestamp"),Pc=Symbol("metadata"),qf=new Uint8Array(8),z3=new DataView(qf.buffer,0,8),Np=0,hM=0,j3=1,mM=3,NR=4,Ip=16,DR=32,LR=1,Pp=256,Ic=0,Gf=-1,wR=-1,IR=0,CR=class extends fM.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ic||Gf>=0){let o=0,c=Ic;c&&(o+=8,Ic=0);let l=Gf,u=wR,f=IR;l>=0&&(o+=4,Gf=-1,u>=0&&(o+=8,wR=-1),f&&(o+=4,IR=0));let d=Q3=r.call(this,s,i|2048|o);Ff=d.subarray((d.start||0)+o,d.end);let _=d.start||0;return c&&(Op[4]=c,Op[5]=c>>8,d.set(Op,_),_+=8),Oc&&(l|=Ur),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,l|Cp<<24),_+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(_,u),_+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,f)),d}else return Ff=r.call(this,s,i),Ff};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(qf,0,c),c+=8;else for(let _=0;_<8;_++)qf[_]=t[c++];l=J3(),i=t[c]}let u,f;i<32&&(i===Cp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Ip&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&DR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=no(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[Pc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:no(()=>super.decode(t,r),this.rootStore)}catch(c){return wp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(J3,"getTimestamp");a(Dp,"handleLocalTimeForGets");Cc=[];setInterval(()=>{for(let e=0;e<Cc.length;e++){let t=Cc[e].deref();!t||t.isDone||t.isCommitted?Cc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(wp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):wp.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();a(MR,"recordUpdater");a(Lc,"removeEntry")});var Yf=C((iye,gM)=>{"use strict";var EM=le(),X3=(k(),P(q)),{RecordEncoder:Z3}=(fu(),P(pM));EM.initSync();var eX=EM.get(X3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,vR=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=eX&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Z3})}};gM.exports=vR});var Wf=C((aye,SM)=>{"use strict";var qn=le(),hs=(k(),P(q));qn.initSync();var Lp=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=qn.get(hs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qn.get(hs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qn.get(hs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",qn.get(hs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=qn.get(hs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=qn.get(hs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),qn.get(hs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=qn.get(hs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=qn.get(hs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};SM.exports=Lp;Lp.MAX_DBS=1e4});var ht=C((lye,CM)=>{"use strict";var xR=require("lmdb"),qs=require("fs-extra"),$n=require("path"),Mp=fn(),RM=ee(),Sn=xn().LMDB_ERRORS_ENUM,vp=dM(),BR=Yf(),yM=Wf(),da=Ft(),TM=(k(),P(q)),{table:tX,resetDatabases:rX}=(xe(),P(ct)),AM=le(),$s=da.INTERNAL_DBIS_NAME,bM=da.DBI_DEFINITION_NAME,nX="data.mdb",sX="lock.mdb",zf=".mdb",iX="-lock",UR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ms(t,r),this.key_type=this.dbi[da.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[da.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new xR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Up(e,t){if(e===void 0)throw new Error(Sn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Sn.ENV_NAME_REQUIRED)}a(Up,"pathEnvNameValidation");async function HR(e,t,r=!0){try{await qs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Sn.INVALID_BASE_PATH):n}try{let n=$n.join(e,t+zf);return await qs.access(n,qs.constants.R_OK|qs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await qs.access($n.join(e,t,nX),qs.constants.R_OK|qs.constants.F_OK),$n.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Sn.INVALID_ENVIRONMENT)}else throw new Error(Sn.INVALID_ENVIRONMENT);throw n}}a(HR,"validateEnvironmentPath");function xp(e,t){if(Mp.validateEnv(e),t===void 0)throw new Error(Sn.DBI_NAME_REQUIRED)}a(xp,"validateEnvDBIName");async function oX(e,t,r=!1,n=!1){Up(e,t);let s=$n.basename(e);t=t.toString();let i=AM.get(TM.CONFIG_PARAMS.DATABASES);i||AM.setProperty(TM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await HR(e,t,n),OM(e,t,r)}catch(o){if(o.message===Sn.INVALID_ENVIRONMENT){let c=$n.join(e,t);await qs.mkdirp(n?c:e);let l=new yM(n?c:c+zf,!1),u=xR.open(l);u.dbis=Object.create(null);let f=new BR(!1);u.openDB($s,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=kR(e,t,r);return u[da.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(oX,"createEnvironment");async function aX(e,t,r,n=!0){Up(e,t),t=t.toString();let s=$n.join(e,t);return tX({table:t,database:$n.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(aX,"copyEnvironment");async function OM(e,t,r=!1){Up(e,t),t=t.toString();let n=kR(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await HR(e,t),i=$n.join(e,t+zf),o=s!=i,c=new yM(s,o),l=xR.open(c);l.dbis=Object.create(null);let u=wM(l);for(let f=0;f<u.length;f++)ms(l,u[f]);return l[da.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(OM,"openEnvironment");async function cX(e,t,r=!1){Up(e,t),t=t.toString();let n=$n.join(e,t+zf),s=await HR(e,t);if(global.lmdb_map!==void 0){let i=kR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await NM(o),delete global.lmdb_map[i]}}await qs.remove(s),await qs.remove(s===n?s+iX:$n.join($n.dirname(s),sX))}a(cX,"deleteEnvironment");async function NM(e){Mp.validateEnv(e);let t=e[da.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(NM,"closeEnvironment");function kR(e,t,r=!1){let s=`${$n.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(kR,"getCachedEnvironmentName");function lX(e){Mp.validateEnv(e);let t=Object.create(null),r=ms(e,$s);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==$s)try{t[n]=Object.assign(new vp,s)}catch{RM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(lX,"listDBIDefinitions");function wM(e){Mp.validateEnv(e);let t=[],r=ms(e,$s);for(let{key:n}of r.getRange({start:!1}))n!==$s&&t.push(n);return t}a(wM,"listDBIs");function uX(e,t){let n=ms(e,$s).getEntry(t),s=new vp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{RM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(uX,"getDBIDefinition");function IM(e,t,r,n=!r){if(xp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ms(e,t)}catch(s){if(s.message===Sn.DBI_DOES_NOT_EXIST){let i=new BR(r,n===!0),o=e.openDB(t,i),c=new vp(r===!0,n);return o[bM]=c,ms(e,$s).putSync(t,c),e.dbis[t]=o,o}throw s}}a(IM,"createDBI");function ms(e,t){if(xp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==$s?r=uX(e,t):r=new vp,r===void 0)throw new Error(Sn.DBI_DOES_NOT_EXIST);let n;try{let s=new BR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Sn.DBI_DOES_NOT_EXIST):s}return n[bM]=r,e.dbis[t]=n,n}a(ms,"openDBI");function dX(e,t){xp(e,t),t=t.toString();let r=ms(e,t),n=r.getStats();return r[da.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(dX,"statDBI");async function fX(e,t){try{let r=$n.join(e,t+zf);return(await qs.stat(r)).size}catch{throw new Error(Sn.INVALID_ENVIRONMENT)}}a(fX,"environmentDataSize");function _X(e,t){if(xp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_DROP_INTERNAL_DBIS_NAME);ms(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ms(e,$s).removeSync(t)}a(_X,"dropDBI");function hX(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ms(e,i)}catch(o){if(o.message===Sn.DBI_DOES_NOT_EXIST)IM(e,i,i!==t,i===t),n=!0;else throw o}}n&&rX()}a(hX,"initializeDBIs");CM.exports={openDBI:ms,openEnvironment:OM,createEnvironment:oX,listDBIs:wM,listDBIDefinitions:lX,createDBI:IM,dropDBI:_X,statDBI:dX,deleteEnvironment:cX,initializeDBIs:hX,TransactionCursor:UR,environmentDataSize:fX,copyEnvironment:aX,closeEnvironment:NM}});var DM=C((dye,PM)=>{"use strict";var FR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};PM.exports=FR});var MM=C((_ye,LM)=>{"use strict";var GR=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};LM.exports=GR});var UM=C((mye,vM)=>{"use strict";var qR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};vM.exports=qR});var xc=C((Tye,HM)=>{"use strict";var mX=ht(),pX=DM(),EX=MM(),gX=UM(),Ni=fn(),jf=xn().LMDB_ERRORS_ENUM,SX=Ft(),co=(k(),P(q)),TX=ie(),AX=require("uuid"),Eye=require("lmdb"),{handleHDBError:RX,hdb_errors:yX}=he(),{OVERFLOW_MARKER:gye,MAX_SEARCH_KEY_LENGTH:Sye}=SX,xM=le();xM.initSync();var Bp=xM.get(co.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),$R=co.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Uc=co.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function bX(e,t,r,n,s=Ni.getNextMonotonicTime()){WR(e,t,r,n),VR(e,t,r);let i=new pX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];BM(u,!0,s);let f=OX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return KR(o,c,n,i,s)}a(bX,"insertRecords");function OX(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let f=c([[{}]]);Array.isArray(f)&&(c=f[0][co.FUNC_VAL],n[o]=c)}let l=Ni.getIndexedValues(c),u=e.dbis[o];if(l){Bp&&u.prefetch(l.map(f=>({key:f,value:s})),Hp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Bp&&e.dbis[t].prefetch([s],Hp),e.dbis[t].put(s,n,n[Uc])})}a(OX,"insertRecord");function NX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(NX,"removeSkippedRecords");function BM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Uc]))&&(e[Uc]=r||(r=Ni.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[$R]))&&(e[$R]=r||Ni.getNextMonotonicTime()):delete e[$R]}a(BM,"setTimestamps");function VR(e,t,r){r.indexOf(co.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(co.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(co.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(co.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),mX.initializeDBIs(e,t,r)}a(VR,"initializeTransaction");async function wX(e,t,r,n,s=Ni.getNextMonotonicTime()){WR(e,t,r,n),VR(e,t,r);let i=new EX,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],_;try{_=YR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(_),l.push(d)}return KR(c,l,n,i,s,o)}a(wX,"updateRecords");async function IX(e,t,r,n,s=Ni.getNextMonotonicTime()){try{WR(e,t,r,n)}catch(l){throw RX(l,l.message,yX.HTTP_STATUS_CODES.BAD_REQUEST)}VR(e,t,r);let i=new gX,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;TX.isEmpty(u[t])?(f=AX.v4(),u[t]=f):f=u[t];let d=YR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return KR(o,c,n,i,s)}a(IX,"upsertRecords");async function KR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ni.getNextMonotonicTime(),NX(r,i),n}a(KR,"finalizeWrite");function YR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(BM(r,!f,o),Number.isInteger(r[Uc])&&u[Uc]>r[Uc])return!1;f&&s.original_records.push(u);let d,_=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let S=r[m],g=e.dbis[m];if(g===void 0)continue;let R=u[m];if(typeof S=="function"){let T=S([[u]]);Array.isArray(T)&&(S=T[0][co.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ni.getIndexedValues(R);if(E){Bp&&g.prefetch(E.map(T=>({key:T,value:n})),Hp);for(let T=0,N=E.length;T<N;T++)g.remove(E[T],n)}if(E=Ni.getIndexedValues(S),E){Bp&&g.prefetch(E.map(T=>({key:T,value:n})),Hp);for(let T=0,N=E.length;T<N;T++)g.put(E[T],n)}}let h={...u,...r};c.put(n,h,h[Uc])},"do_put");return l?d=c.ifVersion(n,l.version,_):d=c.ifNoExists(n,_),d.then(h=>h?!0:YR(e,t,r,n,s,i,o))}a(YR,"updateUpsertRecord");function CX(e,t,r){if(Ni.validateEnv(e),t===void 0)throw new Error(jf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(jf.WRITE_ATTRIBUTES_REQUIRED):new Error(jf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(CX,"validateBasic");function WR(e,t,r,n){if(CX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(jf.RECORDS_REQUIRED):new Error(jf.RECORDS_MUST_BE_ARRAY)}a(WR,"validateWrite");function Hp(){}a(Hp,"noop");HM.exports={insertRecords:bX,updateRecords:wX,upsertRecords:IX}});var lo=C((Rye,PX)=>{PX.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var FM=C((yye,kM)=>{"use strict";var DX=require("uuid"),zR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||DX.v4(),this.schema_table=`${this.schema}.${this.table}`}};kM.exports=zR});var kp=C((Oye,GM)=>{"use strict";var LX=FM(),jR=class extends LX{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};GM.exports=jR});var $M=C((wye,qM)=>{"use strict";qM.exports=vX;var MX="inserted";function vX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===MX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(vX,"returnObject")});var Fp=C((Pye,KM)=>{"use strict";var UX=(k(),P(q)),QR=ht(),xX=xc(),{getSystemSchemaPath:BX,getSchemaPath:HX}=gt(),Cye=lo(),{validateBySchema:kX}=it(),Qf=require("joi"),FX=kp(),GX=$M(),{handleHDBError:qX,hdb_errors:$X,ClientError:VX}=he(),VM=ie(),{HTTP_STATUS_CODES:KX}=$X,YX="inserted";KM.exports=WX;async function WX(e){let t=kX(e,Qf.object({database:Qf.string(),schema:Qf.string(),table:Qf.string().required(),attribute:Qf.string().required()}));if(t)throw new VX(t.message);let r=!e.skip_table_check&&VM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qX(new Error,r,KX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=VM.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new FX(e.schema,e.table,e.attribute,e.id);try{let i=await QR.openEnvironment(HX(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);QR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await QR.openEnvironment(BX(),UX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await xX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return GX(YX,c,{records:[s]},l)}catch(i){throw i}}a(WX,"lmdbCreateAttribute")});var Jf=C((Mye,WM)=>{"use strict";var uo=ie(),YM=ee(),Lye=yR(),{getDatabases:zX}=(xe(),P(ct)),{ClientError:Bc}=he();WM.exports=jX;function jX(e){if(uo.isEmpty(e))throw new Bc("invalid update parameters defined.");if(uo.isEmptyOrZeroLength(e.schema))throw new Bc("invalid schema specified.");if(uo.isEmptyOrZeroLength(e.table))throw new Bc("invalid table specified.");if(!Array.isArray(e.records))throw new Bc("records must be an array");let t=zX()[e.schema]?.[e.table];if(uo.isEmpty(t))throw new Bc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&uo.isEmptyOrZeroLength(o[r]))throw YM.error("a valid hash attribute must be provided with update record:",o),new Bc("a valid hash attribute must be provided with update record, check log for more info");if(!uo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw YM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Bc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!uo.isEmpty(o[r])&&o[r]!==""&&n.has(uo.autoCast(o[r]))&&(o.skip=!0),n.add(uo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(jX,"insertUpdateValidate")});var jM=C((Uye,zM)=>{"use strict";var JR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};zM.exports=JR});var XM=C((Bye,JM)=>{"use strict";var XR=ht(),QX=ee(),QM=xn().LMDB_ERRORS_ENUM;JM.exports=JX;async function JX(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await XR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==QM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await XR.closeEnvironment(global.lmdb_map[n]),await XR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==QM.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){QX.error(t)}}a(JX,"cleanLMDBMap")});var dv=C((Fye,uv)=>{"use strict";var ZR=require("recursive-iterator"),XX=require("alasql"),ey=require("clone"),ZM=ie(),{handleHDBError:ev,hdb_errors:ZX}=he(),{HDB_ERROR_MSGS:tv,HTTP_STATUS_CODES:rv}=ZX,{getDatabases:e6}=(xe(),P(ct)),t6=["DISTINCT_ARRAY"],nv=Symbol("validateTables"),ty=Symbol("validateTable"),kye=Symbol("getAllColumns"),sv=Symbol("validateAllColumns"),Gp=Symbol("findColumn"),iv=Symbol("validateOrderBy"),Xf=Symbol("validateSegment"),ry=Symbol("validateColumn"),ov=Symbol("setColumnsForTable"),av=Symbol("checkColumnsForAsterisk"),cv=Symbol("validateGroupBy"),lv=Symbol("hasColumns"),ny=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[nv](),this[av](),this[sv]()}[nv](){if(this[lv]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ty](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ty](t.table)})}}[lv](){let t=!1,r=new ZR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[ty](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=e6();if(!r[t.databaseid])throw ev(new Error,tv.SCHEMA_NOT_FOUND(t.databaseid),rv.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw ev(new Error,tv.TABLE_NOT_FOUND(t.databaseid,t.tableid),rv.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=ey(s);i.table=ey(t),this.attributes.push(i)})}[Gp](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[av](){let t=new ZR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[ov](r.tableid)}[ov](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new XX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[sv](){this[Xf](this.statement.columns,!1),this[Xf](this.statement.joins,!1),this[Xf](this.statement.where,!1),this[cv](this.statement.group,!1),this[Xf](this.statement.order,!0)}[Xf](t,r){if(!t)return;let n=new ZR(t),s=[];for(let{node:i,path:o}of n)!ZM.isEmpty(i)&&!ZM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[iv](i):s.push(this[ry](i)));return s}[cv](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&t6.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=ey(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Gp](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Gp](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[iv](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[ry](t)}[ry](t){let r=this[Gp](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};uv.exports=ny});var mv=C((qye,hv)=>{"use strict";var fv=require("lodash"),Zf=require("mathjs"),r6=require("jsonata"),_v=ie();hv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?fv.uniqWith(e,fv.isEqual):e,"distinct_array"),searchJSON:n6,mad:e_.bind(null,Zf.mad),mean:e_.bind(null,Zf.mean),mode:e_.bind(null,Zf.mode),prod:e_.bind(null,Zf.prod),median:e_.bind(null,Zf.median)};function e_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(e_,"aggregateFunction");function n6(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(_v.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),_v.isEmpty(this.__ala__.res[r])){let n=r6(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(n6,"searchJSON")});var Ev=C((Vye,pv)=>{"use strict";var rr=require("moment"),sy="YYYY-MM-DDTHH:mm:ss.SSSZZ";rr.suppressDeprecationWarnings=!0;pv.exports={current_date:a(()=>rr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>rr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return rr(e).utc().format("YYYY");case"month":return rr(e).utc().format("MM");case"day":return rr(e).utc().format("DD");case"hour":return rr(e).utc().format("HH");case"minute":return rr(e).utc().format("mm");case"second":return rr(e).utc().format("ss");case"millisecond":return rr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>rr(e).utc().format(sy),"date"),date_format:a((e,t)=>rr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>rr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>rr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=rr(e).utc(),s=rr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>rr().utc().valueOf(),"now"),get_server_time:a(()=>rr().format(sy),"get_server_time"),offset_utc:a((e,t)=>rr(e).utc().utcOffset(t).format(sy),"offset_utc")}});var Av=C((Yye,Tv)=>{"use strict";var s6=require("@turf/area"),i6=require("@turf/length"),o6=require("@turf/circle"),a6=require("@turf/difference"),c6=require("@turf/distance"),l6=require("@turf/boolean-contains"),u6=require("@turf/boolean-equal"),d6=require("@turf/boolean-disjoint"),f6=require("@turf/helpers"),gv=(k(),P(q)),Ke=ie(),fo=ee();Tv.exports={geoArea:_6,geoLength:h6,geoCircle:m6,geoDifference:p6,geoDistance:Sv,geoNear:E6,geoContains:g6,geoEqual:S6,geoCrosses:T6,geoConvert:A6};function _6(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return s6.default(e)}catch(t){return fo.trace(t,e),NaN}}a(_6,"geoArea");function h6(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return i6.default(e,{units:t||"kilometers"})}catch(r){return fo.trace(r,e),NaN}}a(h6,"geoLength");function m6(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return o6.default(e,t,{units:r||"kilometers"})}catch(n){return fo.trace(n,e,t),NaN}}a(m6,"geoCircle");function p6(e,t){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return a6(e,t)}catch(r){return fo.trace(r,e,t),NaN}}a(p6,"geoDifference");function Sv(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return c6.default(e,t,{units:r||"kilometers"})}catch(n){return fo.trace(n,e,t),NaN}}a(Sv,"geoDistance");function E6(e,t,r,n){if(Ke.isEmpty(e)||Ke.isEmpty(t))return!1;if(Ke.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Sv(e,t,n)<=r}catch(s){return fo.trace(s,e,t),!1}}a(E6,"geoNear");function g6(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return l6.default(e,t)}catch(r){return fo.trace(r,e,t),!1}}a(g6,"geoContains");function S6(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return u6.default(e,t)}catch(r){return fo.trace(r,e,t),!1}}a(S6,"geoEqual");function T6(e,t){if(Ke.isEmpty(e)||Ke.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ke.autoCastJSON(e)),typeof t=="string"&&(t=Ke.autoCastJSON(t));try{return!d6.default(e,t)}catch(r){return fo.trace(r,e,t),!1}}a(T6,"geoCrosses");function A6(e,t,r){if(Ke.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ke.isEmpty(t))throw new Error("geo_type is required");if(Ke.isEmpty(gv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(gv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),f6[t](e,r)}a(A6,"geoConvert")});var qp=C((zye,Rv)=>{var Hc=mv(),Vn=Ev(),wi=Av();Rv.exports=e=>{e.aggr.mad=e.aggr.MAD=Hc.mad,e.aggr.mean=e.aggr.MEAN=Hc.mean,e.aggr.mode=e.aggr.MODE=Hc.mode,e.aggr.prod=e.aggr.PROD=Hc.prod,e.aggr.median=e.aggr.MEDIAN=Hc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Hc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Hc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Vn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Vn.current_time,e.fn.extract=e.fn.EXTRACT=Vn.extract,e.fn.date=e.fn.DATE=Vn.date,e.fn.date_format=e.fn.DATE_FORMAT=Vn.date_format,e.fn.date_add=e.fn.DATE_ADD=Vn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Vn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Vn.date_diff,e.fn.now=e.fn.NOW=Vn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Vn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Vn.get_server_time,e.fn.getdate=e.fn.GETDATE=Vn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Vn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wi.geoNear}});var Nv=C((jye,Ov)=>{"use strict";var t_=require("lodash"),Tn=require("alasql");Tn.options.cache=!1;var R6=qp(),yv=require("clone"),$p=require("recursive-iterator"),ke=ee(),Je=ie(),_u=Kn(),y6=(k(),P(q)),{hdb_errors:b6}=he(),{getDatabases:bv}=(xe(),P(ct)),O6="IS NULL",Vs="There was a problem performing this search. Please check the logs and try again.";R6(Tn);var iy=class{static{a(this,"SQLSearch")}constructor(t,r){if(Je.isEmpty(t))throw ke.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Je.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Je.isEmptyOrZeroLength(n))return ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ke.error(n),new Error(Vs)}if(Object.keys(this.data).length===0)return ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ke.error("Error thrown from processJoins in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{return t=await this._finalSQL(),t}catch(n){throw ke.error("Error thrown from finalSQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}}_getColumns(){let t=new $p(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(yv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=t_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=bv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Je.isEmpty(this.statement.where)){ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new $p(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Je.isEmpty(r)&&r.right)if(Je.isNotEmptyAndHasValue(r.right.value)){let n=Je.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Tn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Je.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Tn.yy.LogicValue({value:i}):n instanceof Tn.yy.StringValue&&Je.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Tn.yy.NumValue({value:i}))});if(t){ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new $p(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Je.isEmpty(y6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Je.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Je.isEmptyOrZeroLength(r.left.columnid)||Je.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Je.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Je.isEmpty(r.right.value)||!Je.isEmpty(r.left.value)?n.add(Je.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from)&&Je.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&t_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Je.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Je.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&!Je.isEmptyOrZeroLength(this.columns.columns))return t;if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Tn.promise(r)}catch(r){throw ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ke.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(yv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Je.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(O6)>-1&&this.tables.forEach(s=>{let i={columnid:bv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=t_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Je.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await _u.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let _=await _u.getDataByValue(d);for(let[h,m]of _)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]):(this.data[i].__merged_data[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else if(!Je.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,_=f.length;d<_;d++){let h=f[d];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await _u.getDataByValue(c,h.operation);if(l)for(let[S]of m)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of m)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await _u.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,_]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ke.error(f),new Error(Vs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Tn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Tn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Tn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Tn.yy.FuncValue:new Tn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,S=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${S}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${S}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let _=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(h,s);_=await Tn.promise(m,t),t=null}catch(h){throw ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ke.error(h),new Error("There was a problem processing the data.")}if(_&&_.length>0){for(let h=0,m=_.length;h<m;h++){let S=_[h];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),S=t_.difference(m,[...h.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:_?_.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new $p(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=t_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ke.error(i),new Error(Vs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await _u.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let _=o[f],h=l.get(_);for(let m=0;m<u;m++){let S=s.columns[m],g=h[S]===void 0?null:h[S];this.data[n].__merged_data[_].push(g)}}}}catch(r){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ke.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ke.trace(`Final SQL: ${s}`),n=await Tn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ke.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return ke.error(b6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ke.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await _u.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw ke.error("There was an error when processing this SQL operation. Check your logs"),ke.error(o),new Error(Vs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ov.exports=iy});var zr=C((Jye,wv)=>{"use strict";var N6=dv();wv.exports={searchByConditions:I6,searchByHash:C6,searchByValue:P6,search:D6};var oy=Kn(),{transformReq:ay}=ie(),w6=Nv();async function I6(e){return ay(e),oy.searchByConditions(e)}a(I6,"searchByConditions");async function C6(e){ay(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oy.searchByHash(e))r&&t.push(r);return t}a(C6,"searchByHash");async function P6(e){ay(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oy.searchByValue(e))t.push(r);return t}a(P6,"searchByValue");function D6(e,t){try{let r=new N6(e);r.validate(),new w6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(D6,"search")});var _o=C((Zye,Dv)=>{"use strict";var r_=require("crypto"),L6=le(),{CONFIG_PARAMS:M6}=(k(),P(q)),Cv="aes-256-cbc",v6=32,U6=16,cy=64,Pv=32,x6=cy+Pv,Iv=new Map;Dv.exports={encrypt:B6,decrypt:H6,createNatsTableStreamName:k6};function B6(e){let t=r_.randomBytes(v6),r=r_.randomBytes(U6),n=r_.createCipheriv(Cv,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(B6,"encrypt");function H6(e){let t=e.substr(0,cy),r=e.substr(cy,Pv),n=e.substr(x6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=r_.createDecipheriv(Cv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(H6,"decrypt");function k6(e,t){let r=L6.get(M6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Iv.get(r);return n||(n=r_.createHash("md5").update(r).digest("hex"),Iv.set(r,n)),n}a(k6,"createNatsTableStreamName")});var ho=C((rbe,Uv)=>{"use strict";var tbe=zr(),n_=ee(),{validateBySchema:Lv}=it(),kc=require("joi"),F6=_o(),Vp=ie(),{handleHDBError:Kp,hdb_errors:G6,ClientError:Mv}=he(),{HDB_ERROR_MSGS:Yp,HTTP_STATUS_CODES:ly}=G6,vv=le();vv.initSync();var{getDatabases:uy}=(xe(),P(ct)),q6=require("fs-extra"),$6=(k(),P(q));Uv.exports={describeAll:V6,describeTable:Wp,describeSchema:K6};async function V6(e={}){try{let t=Vp.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=uy(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let _=i[d];for(let h in _)try{let m;if(t||s||r)m=await Wp({schema:d,table:h,exact_count:u});else if(n&&n[d].describe&&n[d].tables[h].describe){let S=n[d].tables[h].attribute_permissions;m=await Wp({schema:d,table:h,exact_count:u},S)}m&&l.push(m)}catch(m){n_.error(m)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return n_.error("Got an error in describeAll"),n_.error(t),Kp(new Error,Yp.DESCRIBE_ALL_ERR)}}a(V6,"describeAll");async function Wp(e,t){Vp.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=Lv(e,kc.object({database:kc.string(),table:kc.string().required(),exact_count:kc.boolean().strict()}));if(i)throw new Mv(i.message);let c=uy()[r];if(!c)throw Kp(new Error,Yp.SCHEMA_NOT_FOUND(e.schema),ly.NOT_FOUND);let l=c[n];if(!l)throw Kp(new Error,Yp.TABLE_NOT_FOUND(e.schema,e.table),ly.NOT_FOUND);function u(h){f.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(m=>({type:m.type,name:m.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let h={};s.forEach(m=>{m.describe&&(h[m.attribute_name]=!0)}),l.attributes.forEach(m=>{h[m.name]&&u(m)})}else l.attributes?.forEach(h=>u(h));let d;try{d=(await q6.stat(l.primaryStore.env.path)).size}catch(h){n_.warn("unable to get database size",h)}let _={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(_.replicate=l.replicate),l.expirationMS!==void 0&&(_.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(_.sealed=l.sealed),l.sources?.length>0&&(_.sources=l.sources.map(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),vv.get($6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(_.clustering_stream_name=F6.createNatsTableStreamName(_.schema,_.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});_.record_count=h.recordCount,_.table_size=l.getSize(),_.db_audit_size=l.getAuditSize(),_.estimated_record_range=h.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))_.last_updated_record=S[0];if(!_.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=S}catch(h){n_.warn(`unable to stat table dbi due to ${h}`)}return _}a(Wp,"descTable");async function K6(e){Vp.transformReq(e);let t=Lv(e,kc.object({database:kc.string(),exact_count:kc.boolean().strict()}));if(t)throw new Mv(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=uy()[n];if(!i)throw Kp(new Error,Yp.SCHEMA_NOT_FOUND(e.schema),ly.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Vp.isEmpty(l)||l.describe){let u=await Wp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(K6,"describeSchema")});var ps=C((obe,Fv)=>{var Y6=lo(),{callbackify:Bv,promisify:W6}=require("util"),{getDatabases:Hv}=(xe(),P(ct));Fv.exports={setSchemaDataToGlobal:xv,getTableSchema:z6,getSystemSchema:j6,setSchemaDataToGlobalAsync:W6(xv)};var kv=ho(),sbe=Bv(kv.describeAll),ibe=Bv(kv.describeTable);function xv(e){global.hdb_schema=Hv(),e&&e()}a(xv,"setSchemaDataToGlobal");function z6(e,t,r){let n=Hv()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(z6,"getTableSchema");function j6(){return Y6}a(j6,"getSystemSchema")});var fy=C((cbe,$v)=>{var Q6=it(),dy=require("joi"),{hdb_table:J6,hdb_database:Gv}=Oi(),qv={schema:Gv,database:Gv,table:J6},X6={date:dy.date().iso().required()},Z6={timestamp:dy.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};$v.exports=function(e,t){let r=t==="timestamp"?{...qv,...Z6}:{...qv,...X6},n=dy.object(r);return Q6.validateBySchema(e,n)}});var Yv=C((lbe,Kv)=>{var eZ=it(),_y=require("joi"),{hdb_table:tZ,hdb_database:Vv}=Oi(),rZ=_y.object({schema:Vv,database:Vv,table:tZ,hash_values:_y.array().required(),ids:_y.array()});Kv.exports=function(e){return eZ.validateBySchema(e,rZ)}});var Ey=C((ube,Wv)=>{"use strict";var hy=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},my=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},py=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Wv.exports={InsertObject:hy,NoSQLSeachObject:my,DeleteResponseObject:py}});var qc=C((fbe,Xv)=>{"use strict";var jv=fy(),nZ=Yv(),Fc=ie(),zv=require("moment"),Qv=ee(),{promisify:sZ,callbackify:iZ}=require("util"),Gc=(k(),P(q)),oZ=ps(),gy=sZ(oZ.getTableSchema),Sy=Kn(),{DeleteResponseObject:aZ}=Ey(),{handleHDBError:fa,hdb_errors:cZ}=he(),{HDB_ERROR_MSGS:zp,HTTP_STATUS_CODES:_a}=cZ,lZ="records successfully deleted",uZ=iZ(Jv);Xv.exports={delete:uZ,deleteRecord:Jv,deleteFilesBefore:dZ,deleteAuditLogsBefore:fZ};async function dZ(e){let t=jv(e,"date");if(t)throw fa(t,t.message,_a.BAD_REQUEST,void 0,void 0,!0);if(Fc.transformReq(e),!zv(e.date,zv.ISO_8601).isValid())throw fa(new Error,zp.INVALID_DATE,_a.BAD_REQUEST,Gc.LOG_LEVELS.ERROR,zp.INVALID_DATE,!0);let n=Fc.checkSchemaTableExist(e.schema,e.table);if(n)throw fa(new Error,n,_a.NOT_FOUND,Gc.LOG_LEVELS.ERROR,n,!0);let s=await Sy.deleteRecordsBefore(e);if(await gy(e.schema,e.table),Qv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(dZ,"deleteFilesBefore");async function fZ(e){let t=jv(e,"timestamp");if(t)throw fa(t,t.message,_a.BAD_REQUEST,void 0,void 0,!0);if(Fc.transformReq(e),isNaN(e.timestamp))throw fa(new Error,zp.INVALID_VALUE("Timestamp"),_a.BAD_REQUEST,Gc.LOG_LEVELS.ERROR,zp.INVALID_VALUE("Timestamp"),!0);let r=Fc.checkSchemaTableExist(e.schema,e.table);if(r)throw fa(new Error,r,_a.NOT_FOUND,Gc.LOG_LEVELS.ERROR,r,!0);let n=await Sy.deleteAuditLogsBefore(e);return await gy(e.schema,e.table),Qv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(fZ,"deleteAuditLogsBefore");async function Jv(e){e.ids&&(e.hash_values=e.ids);let t=nZ(e);if(t)throw fa(t,t.message,_a.BAD_REQUEST,void 0,void 0,!0);Fc.transformReq(e);let r=Fc.checkSchemaTableExist(e.schema,e.table);if(r)throw fa(new Error,r,_a.NOT_FOUND,Gc.LOG_LEVELS.ERROR,r,!0);try{await gy(e.schema,e.table);let n=await Sy.deleteRecords(e);return Fc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${lZ}`),n}catch(n){if(n.message===Gc.SEARCH_NOT_FOUND_MESSAGE){let s=new aZ;return s.message=Gc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Jv,"deleteRecord")});var jp={};Ue(jp,{HASH_FUNCTION:()=>o_,hash:()=>Ry,validate:()=>yy});function Ty(e=i_){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(s_.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ry(e,t=o_[eU?.toUpperCase()]??"sha256"){return Ay[t](e)}function yy(e,t,r=o_[eU?.toUpperCase()]??"sha256"){return e?_Z[r](e,t):!1}var s_,hu,Zv,eU,i_,tU,o_,Ay,_Z,Qp=Re(()=>{s_=v(require("node:crypto")),hu=v(require("argon2")),Zv=v(le());k();eU=(0,Zv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),i_=16,tU=9,o_=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(o_||{});a(Ty,"generateSalt");Ay={md5:a((e,t=void 0)=>{t=t??Ty(tU);let r=s_.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??Ty(i_);let r=s_.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=Ty(i_),r=await hu.hash(e,{type:hu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},_Z={md5:a((e,t)=>{let r=e.slice(0,tU);return e===Ay.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,i_);return e===Ay.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await hu.verify(e.slice(i_),t),"argon2id")};a(Ry,"hash");a(yy,"validate")});var nU=C((pbe,rU)=>{var by=it(),jr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function hZ(e){return jr.password.presence=!0,jr.username.presence=!0,jr.role.presence=!0,jr.active.presence=!0,by.validateObject(e,jr)}a(hZ,"addUserValidation");function mZ(e){return jr.password.presence=!1,jr.username.presence=!0,jr.role.presence=!1,jr.active.presence=!1,by.validateObject(e,jr)}a(mZ,"alterUserValidation");function pZ(e){return jr.password.presence=!1,jr.username.presence=!0,jr.role.presence=!1,jr.active.presence=!1,by.validateObject(e,jr)}a(pZ,"dropUserValidation");rU.exports={addUserValidation:hZ,alterUserValidation:mZ,dropUserValidation:pZ}});var Lt=C((Sbe,iU)=>{"use strict";var{platform:gbe}=require("os"),EZ="nats-server.zip",Oy="nats-server",gZ=process.platform==="win32"?`${Oy}.exe`:Oy,SZ=/^[^\s.,*>]+$/,sU="__request__",TZ=a(e=>`${e}.${sU}`,"REQUEST_SUBJECT"),AZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},RZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},yZ={HUB:"hub.pid",LEAF:"leaf.pid"},bZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},OZ={SUCCESS:"success",ERROR:"error"},NZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},wZ={TXN:"txn",MSGID:"msgid"},mu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},IZ={[mu.ERR]:1,[mu.WRN]:2,[mu.INF]:3,[mu.DBG]:4,[mu.TRC]:5},CZ={debug:"-D",trace:"-DVV"};iU.exports={NATS_SERVER_ZIP:EZ,NATS_SERVER_NAME:Oy,NATS_BINARY_NAME:gZ,PID_FILES:yZ,NATS_CONFIG_FILES:RZ,SERVER_SUFFIX:bZ,NATS_TERM_CONSTRAINTS_RX:SZ,REQUEST_SUFFIX:sU,UPDATE_REMOTE_RESPONSE_STATUSES:OZ,CLUSTER_STATUS_STATUSES:NZ,REQUEST_SUBJECT:TZ,SUBJECT_PREFIXES:wZ,MSG_HEADERS:AZ,LOG_LEVELS:mu,LOG_LEVEL_FLAGS:CZ,LOG_LEVEL_HIERARCHY:IZ}});var An=C((Abe,Nr)=>{"use strict";var cU="username is required",lU="nothing to update, must supply active, role or password to update",uU="password cannot be an empty string",dU="If role is specified, it cannot be empty.",fU="active must be true or false";Nr.exports.addUser=HZ;Nr.exports.alterUser=kZ;Nr.exports.dropUser=GZ;Nr.exports.getSuperUser=YZ;Nr.exports.userInfo=qZ;Nr.exports.listUsers=Xp;Nr.exports.listUsersExternal=$Z;Nr.exports.setUsersWithRolesCache=$c;Nr.exports.findAndValidateUser=vy;Nr.exports.getClusterUser=WZ;Nr.exports.getUsersWithRolesCache=KZ;Nr.exports.USERNAME_REQUIRED=cU;Nr.exports.ALTERUSER_NOTHING_TO_UPDATE=lU;Nr.exports.EMPTY_PASSWORD=uU;Nr.exports.EMPTY_ROLE=dU;Nr.exports.ACTIVE_BOOLEAN=fU;var _U=Rn(),PZ=qc(),a_=(Qp(),P(jp)),hU=nU(),c_=zr(),Py=po(),Ii=ie(),mU=require("validate.js"),Dy=ee(),{promisify:DZ}=require("util"),Ly=_o(),wy=(k(),P(q)),oU=Lt(),LZ=Ct(),MZ=le(),vZ=lo(),{hdb_errors:UZ,ClientError:Ks}=he(),{HTTP_STATUS_CODES:mo,AUTHENTICATION_ERROR_MSGS:Ny,HDB_ERROR_MSGS:pu}=UZ,{UserEventMsg:My}=Ys(),Iy=require("lodash"),{server:Jp}=(Mr(),P(jl)),xZ=ee();Jp.getUser=(e,t)=>vy(e,t,t!=null);Jp.authenticateUser=(e,t)=>vy(e,t);var pU={username:!0,active:!0,role:!0,password:!0},aU=new Map,BZ=DZ(PZ.delete),Cy=MZ.get(wy.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??a_.HASH_FUNCTION.SHA256,Ci;async function HZ(e){let t=mU.cleanAttributes(e,pU),r=hU.addUserValidation(t);if(r)throw new Ks(r.message);let n=await c_.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ks(pu.ROLE_NAME_NOT_FOUND(t.role),mo.NOT_FOUND);if(n.length>1)throw new Ks(pu.DUP_ROLES_FOUND(t.role),mo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Ly.encrypt(t.password)),t.password=await a_.hash(t.password,Cy),t.hash_function=Cy,t.role=n[0].id;let s=await _U.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Dy.debug(s),await $c(),s.skipped_hashes.length===1)throw new Ks(pu.USER_ALREADY_EXISTS(t.username),mo.CONFLICT);return Py.signalUserChange(new My(process.pid)),`${t.username} successfully added`}a(HZ,"addUser");async function kZ(e){let t=mU.cleanAttributes(e,pU);if(Ii.isEmptyOrZeroLength(t.username))throw new Error(cU);if(Ii.isEmptyOrZeroLength(t.password)&&Ii.isEmptyOrZeroLength(t.role)&&Ii.isEmptyOrZeroLength(t.active))throw new Error(lU);if(!Ii.isEmpty(t.password)&&Ii.isEmptyOrZeroLength(t.password.trim()))throw new Error(uU);if(!Ii.isEmpty(t.active)&&!Ii.isBoolean(t.active))throw new Error(fU);if(!Ii.isEmpty(t.password)&&!Ii.isEmptyOrZeroLength(t.password.trim())&&(FZ(t.username)&&(t.hash=Ly.encrypt(t.password)),t.password=await a_.hash(t.password,Cy)),t.role==="")throw new Error(dU);if(t.role){let n=await c_.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ks(pu.ALTER_USER_ROLE_NOT_FOUND(t.role),mo.NOT_FOUND);if(n.length>1)throw new Ks(pu.DUP_ROLES_FOUND(t.role),mo.CONFLICT);t.role=n[0].id}let r=await _U.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await $c(),Py.signalUserChange(new My(process.pid)),r}a(kZ,"alterUser");function FZ(e){let t=!1,r=Ci.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(FZ,"isClusterUser");async function GZ(e){let t=hU.dropUserValidation(e);if(t)throw new Ks(t.message);if(Ci.get(e.username)===void 0)throw new Ks(pu.USER_NOT_EXIST(e.username),mo.NOT_FOUND);let r=await BZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return Dy.debug(r),await $c(),Py.signalUserChange(new My(process.pid)),`${e.username} successfully deleted`}a(GZ,"dropUser");async function qZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Iy.cloneDeep(e.hdb_user);let r=await c_.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(qZ,"userInfo");async function $Z(){let e=await Xp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a($Z,"listUsersExternal");async function Xp(){let e=await c_.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Iy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await c_.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Iy.cloneDeep(s),s.role=t[s.role],VZ(s.role),n.set(s.username,s);return n}a(Xp,"listUsers");function VZ(e){if(!e){Dy.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(vZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(VZ,"appendSystemTablesToRole");async function $c(e=void 0){e?Ci=e:Ci=await Xp()}a($c,"setUsersWithRolesCache");async function KZ(){return Ci||await $c(),Ci}a(KZ,"getUsersWithRolesCache");async function vy(e,t,r=!0){Ci||await $c();let n=Ci.get(e);if(!n){if(!r)return{username:e};throw new Ks(Ny.GENERIC_AUTH_FAIL,mo.UNAUTHORIZED)}if(n&&!n.active)throw new Ks(Ny.USER_INACTIVE,mo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(aU.get(t)===n.password)return s;{let i=a_.validate(n.password,t,n.hash_function||a_.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)aU.set(t,n.password);else throw new Ks(Ny.GENERIC_AUTH_FAIL,mo.UNAUTHORIZED)}}return s}a(vy,"findAndValidateUser");async function YZ(){Ci||await $c();for(let[,e]of Ci)if(e.role.role==="super_user")return e}a(YZ,"getSuperUser");async function WZ(){let e=await Xp(),t=LZ.getConfigFromFile(wy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==wy.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Ly.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oU.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oU.SERVER_SUFFIX.ADMIN,r}a(WZ,"getClusterUser");var EU=[];Jp.invalidateUser=function(e){for(let t of EU)try{t(e)}catch(r){xZ.error("Error invalidating user",r)}};Jp.onInvalidatedUser=function(e){EU.push(e)}});var u_=C((Obe,AU)=>{"use strict";var Vc=ee(),Yn=(k(),P(q)),zZ=XM(),ybe=ps(),bbe=ho(),jZ=An(),{validateEvent:gU}=Ys(),l_=Kn(),QZ=require("process"),{resetDatabases:JZ}=(xe(),P(ct)),XZ={[Yn.ITC_EVENT_TYPES.SCHEMA]:ZZ,[Yn.ITC_EVENT_TYPES.USER]:TU};async function ZZ(e){let t=gU(e);if(t){Vc.error(t);return}Vc.trace("ITC schemaHandler received schema event:",e),await zZ(e.message),await e8(e.message)}a(ZZ,"schemaHandler");async function e8(e){try{l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=JZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Vc.error(t)}}a(e8,"syncSchemaMetadata");var SU=[];async function TU(e){try{try{l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),l_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Vc.warn(r)}let t=gU(e);if(t){Vc.error(t);return}Vc.trace(`ITC userHandler ${Yn.HDB_ITC_CLIENT_PREFIX}${QZ.pid} received user event:`,e),await jZ.setUsersWithRolesCache();for(let r of SU)r()}catch(t){Vc.error(t)}}a(TU,"userHandler");TU.addListener=function(e){SU.push(e)};AU.exports=XZ});var Ys=C((Dbe,yU)=>{"use strict";var wbe=ee(),Uy=ie(),t8=(k(),P(q)),{ITC_ERRORS:d_}=xn(),{parentPort:Ibe,threadId:r8,isMainThread:n8,workerData:Cbe}=require("worker_threads"),{onMessageFromWorkers:s8,broadcast:Pbe,broadcastWithAcknowledgement:i8}=ot();yU.exports={sendItcEvent:o8,validateEvent:RU,SchemaEventMsg:a8,UserEventMsg:c8};var Zp;s8(async(e,t)=>{Zp=Zp||u_(),RU(e),Zp[e.type]&&await Zp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function o8(e){return!n8&&e.message&&(e.message.originator=r8),i8(e)}a(o8,"sendItcEvent");function RU(e){if(typeof e!="object")return d_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Uy.isEmpty(e.type))return d_.MISSING_TYPE;if(!e.hasOwnProperty("message")||Uy.isEmpty(e.message))return d_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Uy.isEmpty(e.message.originator))return d_.MISSING_ORIGIN;if(t8.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return d_.INVALID_EVENT(e.type)}a(RU,"validateEvent");function a8(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(a8,"SchemaEventMsg");function c8(e){this.originator=e}a(c8,"UserEventMsg")});var po=C((vbe,wU)=>{"use strict";var bU=(k(),P(q)),Mbe=ie(),eE=ee(),OU=jM(),Eu,{sendItcEvent:NU}=Ys();function l8(e){try{eE.info("signalSchemaChange called with message:",e),Eu=Eu||u_();let t=new OU(bU.ITC_EVENT_TYPES.SCHEMA,e);return Eu.schema(t),NU(t)}catch(t){eE.error(t)}}a(l8,"signalSchemaChange");function u8(e){try{eE.trace("signalUserChange called with message:",e),Eu=Eu||u_();let t=new OU(bU.ITC_EVENT_TYPES.USER,e);return Eu.user(t),NU(t)}catch(t){eE.error(t)}}a(u8,"signalUserChange");wU.exports={signalSchemaChange:l8,signalUserChange:u8}});var tE=C((xbe,CU)=>{"use strict";var IU=ie(),d8=(k(),P(q)),f8=ee(),_8=Fp(),h8=kp(),m8=po(),{SchemaEventMsg:p8}=Ys(),E8="already exists in";CU.exports=g8;async function g8(e,t,r){if(IU.isEmptyOrZeroLength(r))return r;let n=[];IU.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await S8(e,t.schema,t.name,i)})),s}a(g8,"lmdbCheckForNewAttributes");async function S8(e,t,r,n){let s=new h8(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await T8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(E8))f8.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(S8,"createNewAttribute");async function T8(e){let t;return t=await _8(e),m8.signalSchemaChange(new p8(process.pid,d8.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(T8,"createAttribute")});var gu=C((Hbe,PU)=>{"use strict";var xy=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};PU.exports=xy});var LU=C((Fbe,DU)=>{"use strict";var A8=gu(),R8=(k(),P(q)).OPERATIONS_ENUM,By=class extends A8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(R8.INSERT,r,n,s,i),this.records=t}};DU.exports=By});var vU=C((qbe,MU)=>{"use strict";var y8=gu(),b8=(k(),P(q)).OPERATIONS_ENUM,Hy=class extends y8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(b8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};MU.exports=Hy});var xU=C((Vbe,UU)=>{"use strict";var O8=gu(),N8=(k(),P(q)).OPERATIONS_ENUM,ky=class extends O8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(N8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};UU.exports=ky});var HU=C((Ybe,BU)=>{"use strict";var w8=gu(),I8=(k(),P(q)).OPERATIONS_ENUM,Fy=class extends w8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(I8.DELETE,n,s,t,i),this.original_records=r}};BU.exports=Fy});var f_=C((jbe,qU)=>{"use strict";var zbe=require("path"),kU=ht(),C8=LU(),P8=vU(),D8=xU(),L8=HU(),Su=Ft(),FU=ie(),{CONFIG_PARAMS:M8}=(k(),P(q)),GU=le();GU.initSync();var rE=(k(),P(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:v8}=gt();qU.exports=U8;async function U8(e,t){if(GU.get(M8.LOGGING_AUDITLOG)===!1)return;let r=v8(e.schema,e.table),n=await kU.openEnvironment(r,e.table,!0),s=x8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kU.initializeDBIs(n,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Su.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FU.isEmpty(s.user_name)||n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(U8,"writeTransaction");function x8(e,t){let r=FU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===rE.INSERT)return new C8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.UPDATE)return new P8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.UPSERT)return new D8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.DELETE)return new L8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(x8,"createTransactionObject")});var Gy=C((Xbe,$U)=>{"use strict";var B8=Jf(),Jbe=yf(),__=(k(),P(q)),H8=bf(),k8=xc().insertRecords,F8=ht(),G8=ee(),q8=tE(),{getSchemaPath:$8}=gt(),V8=f_();$U.exports=K8;async function K8(e){try{let{schema_table:t,attributes:r}=B8(e);H8(e,r,t.hash_attribute),e.schema!==__.SYSTEM_SCHEMA_NAME&&(r.includes(__.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(__.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(__.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(__.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await q8(e.hdb_auth_header,t,r),s=$8(e.schema,e.table),i=await F8.openEnvironment(s,e.table),o=await k8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await V8(e,o)}catch(c){G8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(K8,"lmdbCreateRecords")});var YU=C((eOe,KU)=>{"use strict";var VU=(k(),P(q)),Y8=Gy(),W8=yf(),z8=require("fs-extra"),{getSchemaPath:j8}=gt();KU.exports=Q8;async function Q8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new W8(VU.SYSTEM_SCHEMA_NAME,VU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Y8(r),await z8.mkdirp(j8(e.schema))}a(Q8,"lmdbCreateSchema")});var zU=C((rOe,WU)=>{"use strict";var qy=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};WU.exports=qy});var XU=C((aOe,JU)=>{"use strict";var jU=ht(),$y=fn(),Vy=xn().LMDB_ERRORS_ENUM,J8=Ft(),QU=ee(),sOe=ie(),X8=require("lmdb"),Z8=zU(),e5=(k(),P(q)),{OVERFLOW_MARKER:iOe,MAX_SEARCH_KEY_LENGTH:oOe}=J8,t5=e5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function r5(e,t,r,n){if($y.validateEnv(e),t===void 0)throw new Error(Vy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Vy.IDS_REQUIRED):new Error(Vy.IDS_MUST_BE_ITERABLE);try{let s=jU.listDBIs(e);jU.initializeDBIs(e,t,s);let i=new Z8,o,c=[],l=[];for(let _=0,h=r.length;_<h;_++)try{o=r[_];let m=e.dbis[t].get(o);if(!m||n&&m[t5]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,X8.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!m.hasOwnProperty(R)||R===t)continue;let E=e.dbis[R],T=m[R];if(T!=null)try{let N=$y.getIndexedValues(T);if(N)for(let M=0,H=N.length;M<H;M++)E.remove(N[M],o)}catch{QU.warn(`cannot delete from attribute: ${R}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){QU.warn(m),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let _=0,h=f.length;_<h;_++)f[_]===!0?i.deleted.push(l[_]):(i.skipped.push(l[_]),u.push(_));let d=0;for(let _=0;_<u.length;_++){let h=u[_];i.original_records.splice(h-d,1),d++}return i.txn_time=$y.getNextMonotonicTime(),i}catch(s){throw s}}a(r5,"deleteRecords");JU.exports={deleteRecords:r5}});var h_=C((lOe,e0)=>{"use strict";var Tu=ie(),n5=XU(),s5=ht(),{getSchemaPath:i5}=gt(),o5=f_(),a5=ee();e0.exports=c5;async function c5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Tu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Tu.isEmptyOrZeroLength(e.hash_values)&&!Tu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Tu.isEmpty(l)||e.hash_values.push(l)}}if(Tu.isEmptyOrZeroLength(e.hash_values))return ZU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Tu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=i5(e.schema,e.table),i=await s5.openEnvironment(s,e.table),o=await n5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await o5(e,o)}catch(c){a5.error(`unable to write transaction due to ${c.message}`)}return ZU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(c5,"lmdbDeleteRecords");function ZU(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(ZU,"createDeleteResponse")});var Yy=C((fOe,t0)=>{"use strict";var l5=(k(),P(q)),dOe=fn();function Ky(e,t){let r=Object.create(null);if(t.length===1&&l5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Ky,"parseRow");function u5(e,t,r,n){let s=Ky(r,e);n.push(s)}a(u5,"searchAll");function d5(e,t,r,n){let s=Ky(r,e);n[t]=s}a(d5,"searchAllToMap");function f5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(f5,"iterateDBI");function Kc(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Kc,"pushResults");function _5(e,t,r,n,s,i){t.toString().endsWith(e)&&Kc(t,r,n,s,i)}a(_5,"endsWith");function h5(e,t,r,n,s,i){t.toString().includes(e)&&Kc(t,r,n,s,i)}a(h5,"contains");function m5(e,t,r,n,s,i){t>e&&Kc(t,r,n,s,i)}a(m5,"greaterThanCompare");function p5(e,t,r,n,s,i){t>=e&&Kc(t,r,n,s,i)}a(p5,"greaterThanEqualCompare");function E5(e,t,r,n,s,i){t<e&&Kc(t,r,n,s,i)}a(E5,"lessThanCompare");function g5(e,t,r,n,s,i){t<=e&&Kc(t,r,n,s,i)}a(g5,"lessThanEqualCompare");t0.exports={parseRow:Ky,searchAll:u5,searchAllToMap:d5,iterateDBI:f5,endsWith:_5,contains:h5,greaterThanCompare:m5,greaterThanEqualCompare:p5,lessThanCompare:E5,lessThanEqualCompare:g5,pushResults:Kc}});var Au=C((EOe,c0)=>{"use strict";var ha=ht(),hOe=ee(),Wn=fn(),nE=Ft(),zt=xn().LMDB_ERRORS_ENUM,mOe=ie(),S5=(k(),P(q)),sE=Yy(),{parseRow:T5}=sE,pOe=require("lmdb"),{OVERFLOW_MARKER:r0,MAX_SEARCH_KEY_LENGTH:A5}=nE;function n0(e,t,r,n=!1,s=void 0,i=void 0){return Yc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(n0,"iterateFullIndex");function m_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Yc(e,t,r,(f,d,_,h)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(E.values=!1,d.getRange(E).map(T=>({value:T}))):d.getRange(E)})}a(m_,"iterateRangeBetween");function Yc(e,t,r,n){let s=e.database||e,i=ha.openDBI(s,r);i[nE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ha.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Yc,"setupTransaction");function s0(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(r0)){if(!s)if(r)s=ha.openDBI(e,r);else{let l=ha.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ha.openDBI(e,l[u]),!s[nE.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(s0,"getOverflowCheck");function R5(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Yc(e,t,t,(o,c,l)=>(iE(r),r=p_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>T5(u.value,r))))}a(R5,"searchAll");function y5(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);iE(r),r=p_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of n0(e,t,t,n,s,i))o.set(c,sE.parseRow(l,r));return o}a(y5,"searchAllToMap");function b5(e,t,r=!1,n=void 0,s=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=n0(e,void 0,t,r,n,s),c=o.transaction,l=s0(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(b5,"iterateDBI");function O5(e,t){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return ha.statDBI(e,t).entryCount}a(O5,"countAll");function N5(e,t,r,n,s=!1,i=void 0,o=void 0){return ma(e,r,n),Yc(e,t,r,(c,l,u,f)=>(n=Wn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(N5,"equals");function w5(e,t,r){return ma(e,t,r),ha.openDBI(e,t).getValuesCount(r)}a(w5,"count");function I5(e,t,r,n,s=!1,i=void 0,o=void 0){return ma(e,r,n),Yc(e,null,r,(c,l)=>{n=Wn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let _ of l.getKeys({transaction:c,start:n}))if(!_.startsWith(n)){d=_;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(_=>{let{key:h}=_;if(h!==d){if(h.toString().startsWith(n))return _;if(u===!0)return f.DONE}}),f.filter(_=>_)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(I5,"startsWith");function C5(e,t,r,n,s=!1,i=void 0,o=void 0){return i0(e,t,r,n,s,i,o,!0)}a(C5,"endsWith");function i0(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ma(e,r,n),Yc(e,null,r,(l,u,f,d)=>{let _=s0(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let m=h.toString();return m.endsWith(r0)?u.getValues(h,{transaction:l}).map(S=>{let g=_(h,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?m.endsWith(n):m.includes(n))?u[nE.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(S=>({key:h,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(i0,"contains");function P5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),m_(e,t,r,n,l,s,i,o,!0,!1)}a(P5,"greaterThan");function D5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),m_(e,t,r,n,l,s,i,o,!1,!1)}a(D5,"greaterThanEqual");function L5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),m_(e,t,r,l,n,s,i,o,!1,!0)}a(L5,"lessThan");function M5(e,t,r,n,s=!1,i=void 0,o=void 0){ma(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),m_(e,t,r,l,n,s,i,o,!1,!1)}a(M5,"lessThanEqual");function v5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Wn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Wn.convertKeyValueToWrite(n),s=Wn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return m_(e,t,r,n,s,i,o,c)}a(v5,"between");function U5(e,t,r,n){Wn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(iE(r),r=p_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=sE.parseRow(c,r)),o}a(U5,"searchByHash");function x5(e,t,r){Wn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(x5,"checkHashExists");function B5(e,t,r,n,s=[]){return a0(e,t,r,n,s),o0(e,t,r,n,s).map(i=>i[1])}a(B5,"batchSearchByHash");function H5(e,t,r,n,s=[]){a0(e,t,r,n,s);let i=new Map;for(let[o,c]of o0(e,t,r,n,s))i.set(o,c);return i}a(H5,"batchSearchByHashToMap");function o0(e,t,r,n,s=[]){return Yc(e,t,t,(i,o,c)=>{r=p_(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,sE.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(o0,"batchHashSearch");function a0(e,t,r,n,s){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(iE(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(a0,"initializeBatchSearchByHash");function iE(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(iE,"validateFetchAttributes");function ma(e,t,r){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>A5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(ma,"validateComparisonFunctions");function p_(e,t){return t.length===1&&S5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ha.listDBIs(e)),t}a(p_,"setGetWholeRowAttributes");c0.exports={searchAll:R5,searchAllToMap:y5,count:w5,countAll:O5,equals:N5,startsWith:I5,endsWith:C5,contains:i0,searchByHash:U5,setGetWholeRowAttributes:p_,batchSearchByHash:B5,batchSearchByHashToMap:H5,checkHashExists:x5,iterateDBI:b5,greaterThan:P5,greaterThanEqual:D5,lessThan:L5,lessThanEqual:M5,between:v5}});var Ru=C((SOe,_0)=>{var l0=require("lodash"),u0=it(),qe=require("joi"),k5=ie(),{hdb_schema_table:E_,checkValidTable:d0,hdb_table:f0,hdb_database:oE}=Oi(),{handleHDBError:F5,hdb_errors:G5}=he(),{getDatabases:q5}=(xe(),P(ct)),{HTTP_STATUS_CODES:$5}=G5,V5=qe.object({database:oE,schema:oE,table:f0,search_attribute:E_,search_value:qe.any().required(),get_attributes:qe.array().min(1).items(qe.alternatives(E_,qe.object())).optional(),desc:qe.bool(),limit:qe.number().integer().min(1),offset:qe.number().integer().min(0)}),K5=qe.object({database:oE,schema:oE,table:f0,operator:qe.string().valid("and","or").default("and").lowercase(),offset:qe.number().integer().min(0),limit:qe.number().integer().min(1),get_attributes:qe.array().min(1).items(qe.alternatives(E_,qe.object())).optional(),sort:qe.object({attribute:qe.alternatives(E_,qe.array().min(1)),descending:qe.bool().optional()}).optional(),conditions:qe.array().min(1).items(qe.alternatives(qe.object({operator:qe.string().valid("and","or").default("and").lowercase(),conditions:qe.array()}),qe.object({search_attribute:qe.alternatives(E_,qe.array().min(1)),search_type:qe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:qe.when("search_type",{switch:[{is:"equals",then:qe.any()},{is:"between",then:qe.array().items(qe.alternatives([qe.string(),qe.number()])).length(2)}],otherwise:qe.alternatives(qe.string(),qe.number())}).required()}))).required()});_0.exports=function(e,t){let r=null;switch(t){case"value":r=u0.validateBySchema(e,V5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(d0("database",e.schema)),i(d0("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=u0.validateBySchema(e,K5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=k5.checkGlobalSchemaTable(e.schema,e.table);if(s)return F5(new Error,s,$5.NOT_FOUND);let o=q5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,_=f.conditions.length;d<_;d++){let h=f.conditions[d];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=l0.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!l0.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var Wy=C((AOe,h0)=>{"use strict";var Y5=ht(),W5=Ru(),{getSchemaPath:z5}=gt();h0.exports=j5;function j5(e){let t=W5(e,"hashes");if(t)throw t;let r=z5(e.schema,e.table);return Y5.openEnvironment(r,e.table)}a(j5,"initialize")});var zy=C((yOe,m0)=>{"use strict";var Q5=Au(),J5=Wy();m0.exports=X5;async function X5(e){let t=await J5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Q5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(X5,"lmdbGetDataByHash")});var yu=C((OOe,p0)=>{"use strict";var jy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};p0.exports=jy});var g0=C((IOe,E0)=>{"use strict";var wOe=yu(),Z5=Au(),e9=Wy();E0.exports=t9;async function t9(e){let t=await e9(e),r=global.hdb_schema[e.schema][e.table];return Z5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(t9,"lmdbSearchByHash")});var Ws=C((POe,S0)=>{"use strict";var Qy=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};S0.exports=Qy});var aE=C((LOe,O0)=>{"use strict";var Qr=Au(),r9=ht(),n9=ie(),$e=Ft(),Wc=(k(),P(q)),s9=lo(),T0=xn().LMDB_ERRORS_ENUM,{getSchemaPath:i9}=gt(),Eo=Wc.SEARCH_WILDCARDS;async function o9(e,t,r){let n;e.schema===Wc.SYSTEM_SCHEMA_NAME?n=s9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=b0(e,n.hash_attribute,r,t);return R0(e,s,n.hash_attribute,r)}a(o9,"prepSearch");async function R0(e,t,r,n){let s=i9(e.schema,e.table),i=await r9.openEnvironment(s,e.table),o=y0(i,e,t,r),c=o.transaction||i;if([$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,$e.SEARCH_TYPES.SEARCH_ALL,$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(a9(e,r)===!1){let f=e.search_attribute;if(f===r)return n?A0(o,()=>!0):o.map(_=>({[r]:_.key}));let d=a(_=>({[r]:_.value,[f]:_.key}),"toObject");return n?A0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Qr.batchSearchByHashToMap(c,r,e.get_attributes,u):Qr.batchSearchByHash(c,r,e.get_attributes,u)}a(R0,"executeSearch");function y0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case $e.SEARCH_TYPES.EQUALS:s=Qr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.CONTAINS:s=Qr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.ENDS_WITH:case $e.SEARCH_TYPES._ENDS_WITH:s=Qr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.STARTS_WITH:case $e.SEARCH_TYPES._STARTS_WITH:s=Qr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.SEARCH_ALL:return Qr.searchAll(e,n,t.get_attributes,o,c,l);case $e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qr.searchAllToMap(e,n,t.get_attributes,o,c,l);case $e.SEARCH_TYPES.BETWEEN:s=Qr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN:case $e.SEARCH_TYPES._GREATER_THAN:s=Qr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN_EQUAL:case $e.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Qr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.LESS_THAN:case $e.SEARCH_TYPES._LESS_THAN:s=Qr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.LESS_THAN_EQUAL:case $e.SEARCH_TYPES._LESS_THAN_EQUAL:s=Qr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(y0,"searchByType");function A0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(A0,"createMapFromIterable");function a9(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(a9,"checkToFetchMore");function b0(e,t,r,n){if(n9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Eo.indexOf(s)>-1)return r===!0?$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:$e.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Eo[0])<0&&s.indexOf(Eo[1])<0)return c===!0?r===!0?$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:$e.SEARCH_TYPES.EQUALS;if(Eo.indexOf(i)>=0&&Eo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),$e.SEARCH_TYPES.CONTAINS;if(Eo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),$e.SEARCH_TYPES.ENDS_WITH;if(Eo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),$e.SEARCH_TYPES.STARTS_WITH;if(s.includes(Eo[0])||s.includes(Eo[1]))return $e.SEARCH_TYPES.EQUALS;throw new Error(T0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Wc.VALUE_SEARCH_COMPARATORS.BETWEEN:return $e.SEARCH_TYPES.BETWEEN;case Wc.VALUE_SEARCH_COMPARATORS.GREATER:return $e.SEARCH_TYPES.GREATER_THAN;case Wc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return $e.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wc.VALUE_SEARCH_COMPARATORS.LESS:return $e.SEARCH_TYPES.LESS_THAN;case Wc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return $e.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(T0.UNKNOWN_SEARCH_TYPE)}}a(b0,"createSearchTypeFromSearchObject");O0.exports={executeSearch:R0,createSearchTypeFromSearchObject:b0,prepSearch:o9,searchByType:y0}});var w0=C((UOe,N0)=>{"use strict";var vOe=Ws(),c9=Ru(),l9=ie(),u9=(k(),P(q)),d9=aE();N0.exports=f9;function f9(e,t){if(!l9.isEmpty(t)&&u9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=c9(e,"value");if(n)throw n;return d9.prepSearch(e,t,!0)}a(f9,"lmdbGetDataByValue")});var g_=C((HOe,I0)=>{"use strict";var BOe=Ws(),_9=Ru(),h9=ie(),m9=(k(),P(q)),p9=aE();I0.exports=E9;async function E9(e,t){if(!h9.isEmpty(t)&&m9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=_9(e,"value");if(n)throw n;return p9.prepSearch(e,t,!1)}a(E9,"lmdbSearchByValue")});var P0=C((GOe,C0)=>{"use strict";var FOe=Ft(),Jy=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Xy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Zy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};C0.exports={SearchByConditionsObject:Jy,SearchCondition:Xy,SortAttribute:Zy}});var U0=C((KOe,v0)=>{"use strict";var $Oe=P0().SearchByConditionsObject,g9=Ws(),S9=Ru(),eb=Au(),cE=Ft(),{Resource:VOe}=(ia(),P(eR)),M0=aE(),T9=Yy(),A9=require("lodash"),{getSchemaPath:R9}=gt(),D0=ht(),{handleHDBError:y9,hdb_errors:b9}=he(),{HTTP_STATUS_CODES:O9}=b9,N9=1e8;v0.exports=w9;async function w9(e){let t=S9(e,"conditions");if(t)throw y9(t,t.message,O9.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=R9(e.schema,e.table),n=await D0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)D0.openDBI(n,u.search_attribute);let i=A9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===cE.SEARCH_TYPES.EQUALS?u.estimated_count=eb.count(n,u.search_attribute,u.search_value):f===cE.SEARCH_TYPES.CONTAINS||f===cE.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=N9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await L0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(M0.filterByType),d=f.length,_=eb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:o,lazy:!0})),d>0&&(l=l.filter(h=>{for(let m=0;m<d;m++)if(!f[m](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(h=>T9.parseRow(h,_))}else{for(let d=1;d<i.length;d++){let _=i[d],h=await L0(o,e,_,s.hash_attribute);c=c.concat(h)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=eb.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(w9,"lmdbSearchByConditions");async function L0(e,t,r,n){let s=new g9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===cE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,M0.searchByType(e,s,i,n).map(o=>o.value)}a(L0,"executeConditionSearch")});var S_=C((WOe,x0)=>{"use strict";var I9=(k(),P(q)).OPERATIONS_ENUM,tb=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=I9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};x0.exports=tb});var rb=C((jOe,V0)=>{"use strict";var F0=Ws(),G0=S_(),q0=g_(),$0=h_(),yn=(k(),P(q)),B0=ie(),H0=ht(),{getTransactionAuditStorePath:C9,getSchemaPath:P9}=gt(),k0=ee();V0.exports=D9;async function D9(e){try{if(B0.isEmpty(global.hdb_schema[e.schema])||B0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await L9(e),await M9(e);let t=P9(e.schema,e.table);try{await H0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")k0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=C9(e.schema,e.table);await H0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")k0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(D9,"lmdbDropTable");async function L9(e){let t=new F0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await q0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new G0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $0(s)}a(L9,"deleteAttributesFromSystem");async function M9(e){let t=new F0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await q0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new G0(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $0(s)}catch(i){throw i}}a(M9,"dropTableFromSystem")});var Y0=C((JOe,K0)=>{"use strict";var v9=require("fs-extra"),U9=Ws(),x9=yu(),B9=S_(),H9=rb(),k9=h_(),F9=zy(),G9=g_(),go=(k(),P(q)),{getSchemaPath:q9}=gt(),{handleHDBError:$9,hdb_errors:V9}=he(),{HDB_ERROR_MSGS:K9,HTTP_STATUS_CODES:Y9}=V9;K0.exports=W9;async function W9(e){let t;try{t=await z9(e.schema);let r=new U9(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await G9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await H9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new B9(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await k9(s);let i=q9(t);await v9.remove(i)}catch(r){throw r}}a(W9,"lmdbDropSchema");async function z9(e){let t=new x9(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await F9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw $9(new Error,K9.SCHEMA_NOT_FOUND(e),Y9.NOT_FOUND,void 0,void 0,!0);return n}a(z9,"validateDropSchema")});var T_=C((ZOe,W0)=>{"use strict";var nb=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};W0.exports=nb});var ib=C((rNe,z0)=>{"use strict";var j9=require("fs-extra"),lE=ht(),{getTransactionAuditStorePath:Q9}=gt(),sb=Ft(),tNe=T_();z0.exports=J9;async function J9(e){let t;try{let r=Q9(e.schema,e.table);await j9.mkdirp(r),t=await lE.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{lE.createDBI(t,sb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),lE.createDBI(t,sb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),lE.createDBI(t,sb.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(J9,"createTransactionsAuditEnvironment")});var J0=C((iNe,Q0)=>{"use strict";var ob=(k(),P(q)),j0=ht(),X9=xc(),{getSystemSchemaPath:Z9,getSchemaPath:e7}=gt(),sNe=lo(),t7=Fp(),ab=kp(),r7=ee(),n7=ib();Q0.exports=s7;async function s7(e,t){let r=e7(t.schema,t.table),n=new ab(t.schema,t.table,ob.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new ab(t.schema,t.table,ob.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ab(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await j0.createEnvironment(r,t.table),e!==void 0){let o=await j0.openEnvironment(Z9(),ob.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await X9.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await cb(n),await cb(s),await cb(i)}await n7(t)}catch(o){throw o}}a(s7,"lmdbCreateTable");async function cb(e){try{await t7(e)}catch(t){r7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(cb,"createAttribute")});var Z0=C((aNe,X0)=>{"use strict";var i7=Jf(),o7=bf(),a7=tE(),A_=(k(),P(q)),c7=xc().updateRecords,l7=ht(),{getSchemaPath:u7}=gt(),d7=f_(),f7=ee();X0.exports=_7;async function _7(e){try{let{schema_table:t,attributes:r}=i7(e);o7(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await a7(e.hdb_auth_header,t,r),s=u7(e.schema,e.table),i=await l7.openEnvironment(s,e.table),o=await c7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await d7(e,o)}catch(c){f7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(_7,"lmdbUpdateRecords")});var tx=C((lNe,ex)=>{"use strict";var h7=(k(),P(q)).OPERATIONS_ENUM,lb=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=h7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ex.exports=lb});var nx=C((fNe,rx)=>{"use strict";var dNe=tx(),m7=Jf(),p7=bf(),E7=tE(),R_=(k(),P(q)),g7=xc().upsertRecords,S7=ht(),{getSchemaPath:T7}=gt(),A7=f_(),R7=ee(),{handleHDBError:y7,hdb_errors:b7}=he();rx.exports=O7;async function O7(e){let t;try{t=m7(e)}catch(l){throw y7(l,l.message,b7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;p7(e,n,r.hash_attribute),e.schema!==R_.SYSTEM_SCHEMA_NAME&&(n.includes(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(R_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(R_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await E7(e.hdb_auth_header,r,n),i=T7(e.schema,e.table),o=await S7.openEnvironment(i,e.table),c=await g7(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await A7(e,c)}catch(l){R7.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(O7,"lmdbUpsertRecords")});var ix=C((hNe,sx)=>{"use strict";var ub=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};sx.exports=ub});var ax=C((pNe,ox)=>{"use strict";var db=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};ox.exports=db});var ux=C((SNe,lx)=>{"use strict";var fb=ht(),{getTransactionAuditStorePath:N7}=gt(),gNe=ix(),y_=Ft(),w7=ie(),cx=ax(),I7=require("util").promisify,C7=I7(setTimeout),P7=1e4,D7=100;lx.exports=L7;async function L7(e){let t=N7(e.schema,e.table),r=await fb.openEnvironment(t,e.table,!0),n=fb.listDBIs(r);fb.initializeDBIs(r,y_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new cx;do s=await M7(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await C7(D7);while(s.transactions_deleted>0);return i}a(L7,"deleteAuditLogsBefore");async function M7(e,t){let r=new cx;try{let n=e.dbis[y_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[y_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];w7.isEmpty(c)||(s=e.dbis[y_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[y_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>P7)break}return await s,r}catch(n){throw n}}a(M7,"deleteTransactions")});var fx=C((ANe,dx)=>{"use strict";var _b=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};dx.exports=_b});var hx=C((bNe,_x)=>{"use strict";var v7=Ws(),U7=S_(),yNe=fx(),Pi=(k(),P(q)),x7=ie(),hb=ht(),B7=lo(),H7=g_(),k7=h_(),{getSchemaPath:F7}=gt();_x.exports=G7;async function G7(e,t=!0){let r;e.schema===Pi.SYSTEM_SCHEMA_NAME?r=B7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await $7(e),s=F7(e.schema,e.table),i=await hb.openEnvironment(s,e.table);return t===!0&&await q7(e,i,r.hash_attribute),hb.dropDBI(i,e.attribute),n}a(G7,"lmdbDropAttribute");async function q7(e,t,r){let n=hb.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(q7,"removeAttributeFromAllObjects");async function $7(e){let t=new v7(Pi.SYSTEM_SCHEMA_NAME,Pi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await H7(t)).filter(o=>o[Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(x7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new U7(Pi.SYSTEM_SCHEMA_NAME,Pi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return k7(i)}a($7,"dropAttributeFromSystem")});var Tx=C((wNe,Sx)=>{"use strict";var mb=ht(),bu=Ft(),NNe=fn(),pb=(k(),P(q)),mx=ie(),{getTransactionAuditStorePath:V7}=gt(),K7=Au(),uE=gu(),Y7=ee();Sx.exports=W7;async function W7(e){let t=V7(e.schema,e.table),r=await mb.openEnvironment(t,e.table,!0),n=mb.listDBIs(r);mb.initializeDBIs(r,bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case pb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return px(r,e.search_values);case pb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,j7(r,e.search_values,s);case pb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return z7(r,e.search_values);default:return px(r)}}a(W7,"readAuditLog");function px(e,t=[0,Date.now()]){mx.isEmpty(t[0])&&(t[0]=0),mx.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new uE,s))}a(px,"searchTransactionsByTimestamp");function z7(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[bu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,gx(e,i))}return Object.fromEntries(r)}a(z7,"searchTransactionsByUsername");function j7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=K7.equals(e,bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let _=Number(d);n.has(_)?n.get(_).push(u.toString()):n.set(_,[u.toString()])}}let s=Array.from(n.keys()),i=gx(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);Ex(l,"records",r,f,o),Ex(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(j7,"searchTransactionsByHashValues");function Ex(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new uE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new uE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Ex,"loopRecords");function gx(e,t){let r=[];try{let n=e.dbis[bu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new uE,i);r.push(o)}}catch(i){Y7.warn(i)}return r}catch(n){throw n}}a(gx,"batchSearchTransactions")});var Rx=C((DNe,Ax)=>{"use strict";var{getSchemaPath:CNe}=gt(),PNe=ht(),{database:Q7}=(xe(),P(ct));Ax.exports={writeTransaction:J7};async function J7(e,t,r){return Q7({database:e,table:t}).transaction(r)}a(J7,"writeTransaction")});var Nx=C((MNe,Ox)=>{"use strict";var{getSchemaPath:yx}=gt(),bx=ht();Ox.exports={flush:X7,resetReadTxn:Z7};async function X7(e,t){return(await bx.openEnvironment(yx(e,t),t.toString())).flushed}a(X7,"flush");async function Z7(e,t){try{(await bx.openEnvironment(yx(e,t),t.toString())).resetReadTxn()}catch{}}a(Z7,"resetReadTxn")});var Px=C((UNe,Cx)=>{"use strict";var{Readable:eee}=require("stream"),{getDatabases:tee}=(xe(),P(ct)),{readSync:ree,openSync:nee,createReadStream:wx}=require("fs"),{open:see}=require("lmdb"),Ix=Yf(),iee=Wf(),{AUDIT_STORE_OPTIONS:oee}=(Ai(),P(Dx)),{INTERNAL_DBIS_NAME:aee,AUDIT_STORE_NAME:cee}=Ft();Cx.exports=uee;var Eb=32768,lee=100;async function uee(e){let t=e.database||e.schema||"data",r=tee()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=see({noSync:!0,maxDbs:iee.MAX_DBS}),_,h=d.openDB(aee,new Ix(!1)),m=f.useReadTransaction(),S=0,g=a(async function(E,T){T.encoding="binary",T.encoder=void 0;let N=d.openDB(E,T),M=f.openDB(E,T);for(let{key:H,version:X,value:W}of M.getRange({start:null,transaction:m,versions:M.useVersions}))_=N.put(H,W,X),S++%lee===0&&(await new Promise($=>setTimeout($,20)),m.openTimer&&(m.openTimer=0))},"copyDatabase");for(let{key:E,value:T}of f.getRange({transaction:m,start:!1}))if(s.some(N=>E.startsWith?.(N+"/"))){h.put(E,T);let[,N]=E.split("/"),M=!N,H=new Ix(!M,M);await g(E,H)}e.include_audit&&await g(cee,{...oee}),await _;let R=wx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=nee(o.path);return o.transaction(()=>{let u=Buffer.alloc(Eb);ree(c,u,0,Eb),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=wx(null,{fd:c,start:Eb}),_=new eee.from(async function*(){yield u;for await(let h of d)f.openTimer&&(f.openTimer=0),yield h;f.done()}());return _.headers=l(),_});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(uee,"getBackup")});var vx=C((BNe,Mx)=>{"use strict";var dee=ee(),{handleHDBError:fee}=he(),_ee=lM(),hee=Fp(),mee=Gy(),pee=YU(),Eee=h_(),gee=zy(),See=g0(),Tee=w0(),Aee=g_(),Ree=U0(),yee=Y0(),bee=J0(),Oee=Z0(),Nee=nx(),wee=ux(),Iee=rb(),Cee=hx(),Pee=Tx(),Dee=Rx(),Lx=Nx(),Lee=Px(),gb=class extends _ee{static{a(this,"LMDBBridge")}async searchByConditions(t){return Ree(t)}async getDataByHash(t){return await gee(t)}async searchByHash(t){return await See(t)}async getDataByValue(t,r){return await Tee(t,r)}async searchByValue(t){return await Aee(t)}async createSchema(t){return await pee(t)}async dropSchema(t){return await yee(t)}async createTable(t,r){return await bee(t,r)}async dropTable(t){return await Iee(t)}async createAttribute(t){return await hee(t)}async createRecords(t){return await mee(t)}async updateRecords(t){return await Oee(t)}async upsertRecords(t){try{return await Nee(t)}catch(r){throw fee(r,null,null,dee.ERR,r)}}async deleteRecords(t){return await Eee(t)}async dropAttribute(t){return await Cee(t)}async deleteAuditLogsBefore(t){return await wee(t)}async readAuditLog(t){return await Pee(t)}writeTransaction(t,r,n){return Dee.writeTransaction(t,r,n)}flush(t,r){return Lx.flush(t,r)}resetReadTxn(t,r){return Lx.resetReadTxn(t,r)}getBackup(t){return Lee(t)}};Mx.exports=gb});var Tb={};Ue(Tb,{add:()=>dE,applyReverse:()=>Ux,getRecordAtTime:()=>Sb,rebuildUpdateBefore:()=>fE});function dE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function fE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,dE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ux(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Mee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=xx}}function Sb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=St(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Ux(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===xx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=St(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Mee,xx,_E=Re(()=>{Ai();a(dE,"add");dE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};Mee={add:dE};a(fE,"rebuildUpdateBefore");a(Ux,"applyReverse");xx={};a(Sb,"getRecordAtTime")});function bn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function EE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a string, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(_=>typeof _=="string")||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a string, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="number"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a number, attempt to assign ${_}`);bn(this)[l]=d},"set");break;case"Int":u=a(function(d){let _=d?.__op__?d.value:d;if(!(_>>0===_||d==null&&c.nullable!==!1))if(typeof _=="number"&&Math.abs((_>>0)-_)<=1)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new zn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Long":u=a(function(d){let _=d?.__op__?d.value:d;if(!(Math.round(_)===d&&Math.abs(_)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof _=="number"&&Math.abs(_)<=9007199254740992)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new zn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="bigint"||d==null&&c.nullable!==!1))if(typeof _=="string"||typeof _=="number")_=BigInt(_),d?.__op__?d.value=_:d=_;else throw new zn.ClientError(`${l} must be a number, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new zn.ClientError(`${l} must be a Date, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof Ti||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);bn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){bn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be an object, attempt to assign ${d}`);bn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let h=d[l];if(h?.__op__){let m=this.getRecord()?.[l];return h.update(m)}return h}let _=this.getRecord()?.[l];if(_&&typeof _=="object"){let h=Ab(_,c);if(h)return d||this._setChanges(d=Object.create(null)),d[l]=h}return _},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new zn.ClientError("Can not add a property to a sealed table schema");bn(this)[c]=l}),i("deleteProperty",function(c){bn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let _=l[f];d=d.update(_)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,Hx);break}o=c}while(o&&o!==Hx)}function Ab(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends b_{static{a(this,"TrackedObject")}},EE(r,t)),new r(e)):new b_(e);case Array:let n=new mE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Ab(o,t?.elements)),n[s]=o}return n;default:return e}}function gE(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=gE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Ou(e,t=e.getChanges?.()){let r;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Ou(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Tb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ou(s);r[n]=s}if(!Array.isArray(e))for(let n in e)vee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function hE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[zc]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(hE(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(hE(s))return!0}else return!0}else return!0}}return!1}var zn,Bx,Hx,b_,vee,zc,mE,pE,Rb=Re(()=>{zn=v(he());_E();gn();a(bn,"getChanges");a(EE,"assignTrackedAccessors");Bx=Object.prototype,Hx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Bx[t])return Bx[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=Ab(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Ab,"trackObject");b_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};EE(b_,{});a(gE,"collapseData");vee=Object.prototype.hasOwnProperty;a(Ou,"updateAndFreeze");a(hE,"hasChanges");zc=Symbol.for("has-array-changes"),mE=class extends Array{static{a(this,"TrackedArray")}#e;[zc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[zc]=!0,super.splice(...t)}push(...t){return this[zc]=!0,super.push(...t)}pop(){return this[zc]=!0,super.pop()}unshift(...t){return this[zc]=!0,super.unshift(...t)}shift(){return this[zc]=!0,super.shift()}};mE.prototype.constructor=Array;pE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Yx={};Ue(Yx,{ResourceBridge:()=>Ob});function Nb({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Fx(e,t){let r=Di(e),n=Nb(e,r);if(!r)throw new zs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Pt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&gE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Di(e){let t=e.database||e.schema||xee,r=Xe()[t];if(!r)throw(0,zs.handleHDBError)(new Error,Uee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Gx(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*qx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var $x,SE,zs,Vx,yb,bb,Kx,Uee,xee,Bee,Hee,kx,Ob,Wx=Re(()=>{"use strict";$x=v(vx()),SE=v(Ru()),zs=v(he());xe();Vx=v(Jf());k();yb=v(po()),bb=v(Ys()),Kx=v(ie());Sc();Rb();({HDB_ERROR_MSGS:Uee}=zs.hdb_errors),xee="data",Bee=1e4,Hee=10,Ob=class extends $x.default{static{a(this,"ResourceBridge")}constructor(t){super(t),kx=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,SE.default)(t,"conditions");if(r)throw(0,zs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Di(t);if(!n)throw new zs.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Nb(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new zs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}_t({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Di(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Di(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Di(t).dropTable()}createSchema(t){return Nu({database:t.schema,table:null}),yb.signalSchemaChange(new bb.SchemaEventMsg(process.pid,Yt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await wb(t.schema),yb.signalSchemaChange(new bb.SchemaEventMsg(process.pid,Yt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,kx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Vx.default)(t),s,i=Xe()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Pt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(_=>_.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],_=d!=null&&await i.get(d,o);if(t.requires_existing&&!_||t.requires_no_existing&&_){u.push(f[i.primaryKey]);continue}_&&(_=gE(_));for(let h in f)if(Object.prototype.hasOwnProperty.call(f,h)){let m=f[h];if(typeof m=="function")try{let S=m([[_]]);Array.isArray(S)&&(m=S[0].func_val,f[h]=m)}catch(S){throw S.message+="Trying to set key "+h+" on object"+JSON.stringify(f),S}}if(_)for(let h in _)Object.prototype.hasOwnProperty.call(f,h)||(f[h]=_[h]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Xe()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Pt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Gx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Xe()[t.schema][t.table];if(!r.createdTimeProperty)throw new zs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Hm.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Kx.async_set_timeout)(Hee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%Bee===0&&await u();return l.length>0&&await u(),s?Gx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,SE.default)(t,"hashes");if(r)throw r;return Fx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Fx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&OA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,SE.default)(t,"value");if(n)throw n;let s=Di(t);if(!s)throw new zs.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Hm.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:Nb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Di(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Di({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Di(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Di(t),n={};switch(t.search_type){case km.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case km.USERNAME:let s=t.search_values;for await(let i of qx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return qx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Nb,"getSelect");a(Fx,"getRecords");a(Di,"getTable");a(Gx,"createDeleteResponse");a(qx,"groupRecordsInHistory")});var Kn=C((QNe,zx)=>{"use strict";var{ResourceBridge:kee}=(Wx(),P(Yx)),Fee=le();Fee.initSync();var TE;function Gee(){return TE||(TE=new kee,TE)}a(Gee,"getBridge");zx.exports=Gee()});var Rn=C((XNe,Xx)=>{"use strict";var RE=yR(),xr=ie(),qee=require("util"),yE=Kn(),$ee=ps(),jx=ee(),{handleHDBError:jc,hdb_errors:Vee}=he(),{HTTP_STATUS_CODES:Qc}=Vee,Kee=qee.promisify($ee.getTableSchema),Yee="updated",Qx="inserted",Jx="upserted";Xx.exports={insert:zee,update:jee,upsert:Qee,validation:Wee,flush:Jee};async function Wee(e){if(xr.isEmpty(e))throw new Error("invalid update parameters defined.");if(xr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(xr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Kee(e.schema,e.table),r=RE(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&xr.isEmptyOrZeroLength(c[n]))throw jx.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!xr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw jx.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!xr.isEmpty(c[n])&&c[n]!==""&&s.has(xr.autoCast(c[n]))&&(c.skip=!0),s.add(xr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Wee,"validation");async function zee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=RE(e);if(t)throw jc(new Error,t.message,Qc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw jc(new Error,r,Qc.BAD_REQUEST);let n=await yE.createRecords(e);return AE(Qx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(zee,"insertData");async function jee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=RE(e);if(t)throw jc(new Error,t.message,Qc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw jc(new Error,r,Qc.BAD_REQUEST);let n=await yE.updateRecords(e);return xr.isEmpty(n.existing_rows)?AE(Yee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):AE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(jee,"updateData");async function Qee(e){if(e.operation!=="upsert")throw jc(new Error,"invalid operation, must be upsert",Qc.INTERNAL_SERVER_ERROR);let t=RE(e);if(t)throw jc(new Error,t.message,Qc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw jc(new Error,r,Qc.BAD_REQUEST);let n=await yE.upsertRecords(e);return AE(Jx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Qee,"upsertData");function AE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Qx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Jx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(AE,"returnObject");function Jee(e){return xr.transformReq(e),yE.flush(e.schema,e.table)}a(Jee,"flush")});var sB=C((ewe,nB)=>{var wu=require("validate.js"),eB=it(),Iu=(k(),P(q)),{handleHDBError:Xee,hdb_errors:Zee}=he(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:ete}=Zee,Ib=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tte={STRUCTURE_USER:"structure_user"},Zx=Object.values(Iu.ROLE_TYPES_ENUM),rte="attribute_permissions",nte="attribute_name",{PERMS_CRUD_ENUM:Cu}=Iu,ste=[rte,...Object.values(Cu)],tB=[Cu.READ,Cu.INSERT,Cu.UPDATE],ite=[nte,...tB];function ote(e){let t=Ib();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,rB(e,t)}a(ote,"addRoleValidation");function ate(e){let t=Ib();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,rB(e,t)}a(ate,"alterRoleValidation");function cte(e){let t=Ib();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,eB.validateObject(e,t)}a(cte,"dropRoleValidation");var lte=["operation","role","id","permission","hdb_user","access"];function rB(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)lte.includes(n[o])||s.push(n[o]);s.length>0&&nr(jt.INVALID_ROLE_JSON_KEYS(s),r);let i=eB.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=ute(e);o&&nr(o,r),Zx.forEach(c=>{e.permission[c]&&!wu.isBoolean(e.permission[c])&&nr(jt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Zx.indexOf(o)<0){if(o===tte.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||nr(jt.SCHEMA_NOT_FOUND(d),r)}continue}nr(jt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(jt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){nr(jt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{ste.includes(f)||nr(jt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Cu).forEach(f=>{wu.isDefined(u[f])?wu.isBoolean(u[f])||nr(jt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(jt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(jt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(jt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:_})=>_),d={read:!1,insert:!1,update:!1};for(let _ in u.attribute_permissions){let h=u.attribute_permissions[_];if(Object.keys(h).forEach(S=>{!ite.includes(S)&&S!==Cu.DELETE&&nr(jt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!wu.isDefined(h.attribute_name)){nr(jt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=h.attribute_name;if(!f.includes(m)){nr(jt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}tB.forEach(S=>{wu.isDefined(h[S])?wu.isBoolean(h[S])||nr(jt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):nr(jt.ATTR_PERM_MISSING(S,m),r,o,l)}),!d.read&&h.read===!0&&(d.read=!0),!d.insert&&h.insert===!0&&(d.insert=!0),!d.update&&h.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let _=`${o}.${l}`;nr(jt.MISMATCHED_TABLE_ATTR_PERMS(_),r,o,l)}}}}return dte(r)}a(rB,"customValidate");nB.exports={addRoleValidation:ote,alterRoleValidation:ate,dropRoleValidation:cte};function ute(e){let{operation:t,permission:r}=e;if(t===Iu.OPERATIONS_ENUM.ADD_ROLE||t===Iu.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return jt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Iu.ROLE_TYPES_ENUM.SUPER_USER:Iu.ROLE_TYPES_ENUM.CLUSTER_USER;return jt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(ute,"validateNoSUPerms");function dte(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:jt.ROLE_PERMS_ERROR,...e};return Xee(new Error,n,ete.BAD_REQUEST)}else return null}a(dte,"generateRolePermResponse");function nr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(nr,"addPermError")});var N_=C((nwe,cB)=>{"use strict";var iB=Rn(),oB=zr(),fte=qc(),Pb=sB(),Db=po(),rwe=require("uuid").v4,_te=require("util"),bE=(k(),P(q)),hte=ie(),Lb=oB.searchByValue,mte=oB.searchByHash,pte=_te.promisify(fte.delete),Ete=Ws(),gte=yu(),{hdb_errors:Ste,handleHDBError:Jc}=he(),{HDB_ERROR_MSGS:aB,HTTP_STATUS_CODES:O_}=Ste,{UserEventMsg:Mb}=Ys();cB.exports={addRole:Tte,alterRole:Ate,dropRole:Rte,listRoles:yte};function Cb(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(Cb,"scrubRoleDetails");async function Tte(e){let t=Pb.addRoleValidation(e);if(t)throw t;e=Cb(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await Lb(r)||[])}catch(i){throw Jc(i)}if(n&&n.length>0)throw Jc(new Error,aB.ROLE_ALREADY_EXISTS(e.role),O_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await iB.insert(s),Db.signalUserChange(new Mb(process.pid)),e=Cb(e),e}a(Tte,"addRole");async function Ate(e){let t=Pb.alterRoleValidation(e);if(t)throw t;e=Cb(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await iB.update(r)}catch(s){throw Jc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Jc(new Error,"Invalid role id",O_.BAD_REQUEST,void 0,void 0,!0);return await Db.signalUserChange(new Mb(process.pid)),e}a(Ate,"alterRole");async function Rte(e){let t=Pb.dropRoleValidation(e);if(t)throw Jc(new Error,t,O_.BAD_REQUEST,void 0,void 0,!0);let r=new gte(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await mte(r));if(n.length===0)throw Jc(new Error,aB.ROLE_NOT_FOUND,O_.NOT_FOUND,void 0,void 0,!0);let s=new Ete(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Lb(s)),o=!1;if(hte.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Jc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,O_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await pte(c),Db.signalUserChange(new Mb(process.pid)),`${n[0].role} successfully deleted`}a(Rte,"dropRole");async function yte(){return Lb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(yte,"listRoles")});var vb={};Ue(vb,{start:()=>dB,startOnMainThread:()=>Nte});function dB({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,lB.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(bte.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let _=u.attributes[d];_.attribute_name=d,f.push(_)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await Ote(i)}}}async function Ote(e){let t=Xe().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,uB.isEqual)(i,e)?void 0:(e.id=r.id,(0,OE.alterRole)(e))}return(0,OE.addRole)(e)}var OE,lB,uB,bte,Nte,fB=Re(()=>{xe();OE=v(N_()),lB=require("yaml"),uB=require("lodash"),bte=["super_user","cluster_user","structure_user"];a(dB,"start");a(Ote,"ensureRole");Nte=dB});async function NE(e){let t=(0,mB.pathToFileURL)(e).toString();if(wte)return w_||(w_=Ite(Pte)),(await(await w_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Ite(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),w_=new Compartment({console,Math,Date,fetch:Cte,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,hB.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yr,tables:jn,databases:We})}};let n=await(0,_B.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),w_}function Cte(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Pte(){return{Resource:Yr,tables:jn}}var _B,hB,mB,wte,w_,Ub=Re(()=>{ia();xe();_B=require("fs/promises"),hB=require("path"),mB=require("url"),wte=!1;a(NE,"secureImport");a(Ite,"getCompartment");a(Cte,"secureOnlyFetch");a(Pte,"getGlobalVars")});var Bb={};Ue(Bb,{handleFile:()=>Dte});async function Dte(e,t,r,n){let s=new Map,i=await NE(r);c(i.default)&&n.set((0,xb.dirname)(t),i.default),o(i,(0,xb.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var xb,pB=Re(()=>{Ub();xb=require("path");a(Dte,"handleFile")});var kb={};Ue(kb,{start:()=>Lte});function Lte({resources:e}){e.set("login",Hb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Hb,EB=Re(()=>{ia();a(Lte,"start");Hb=class extends Yr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var M_={};Ue(M_,{addAnalyticsListener:()=>L_,calculateCPUUtilization:()=>xB,diffResourceUsage:()=>BB,recordAction:()=>Mt,recordActionBinary:()=>Qn,setAnalyticsEnabled:()=>Mte});function Mte(e){DB=e}function vte(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function Ute(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},IE.set(e,o)}function Mt(e,t,r,n,s){if(!DB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=IE.get(i);o?vte(e,o):Ute(i,e,t,r,n,s),wE||xte()}function Qn(e,t,r,n,s){Mt(!!e,t,r,n,s)}function L_(e){vB.push(e)}function xte(){wE=performance.now(),setTimeout(async()=>{let e=performance.now()-wE;wE=0;let t=[],r={time:Date.now(),period:e,threadId:Xc.threadId,metrics:t};for(let[s,i]of IE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of UB){let _=Math.floor(c*d),h=o[_-1];if(_>l){let m=_-l;if(h===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+m}:S.count+=m}else u.push(m>1?{value:h,count:m}:h),f=h;l=_}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await HB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Xc.threadId,byThread:!0,...n});for(let s of vB)s(t);IE=new Map,Xc.parentPort?Xc.parentPort.postMessage({type:MB,report:r}):GB({report:r})},LB).unref()}function CE(e,t,r){let n={id:(0,P_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function xB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function BB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Bte(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};CE(e,"table-size",l),Zc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function gB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=PB.default.statSync(s.primaryStore.env.path).size,c=Bte(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};CE(e,"database-size",u),Zc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Zc.warn?.("Error getting DB size metrics",s)}}function SB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};CE(e,"storage-volume",o),Zc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Zc.warn?.("Error getting DB volume metrics",s)}}async function Hte(e,t=6e4){let r=Gb(),n=kB(),s=new Promise(E=>{let T=performance.now();setImmediate(()=>{let N=performance.now();N-T>5e3&&Zc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(N-T)+"ms"),T=performance.now()}),n.primaryStore.prefetch([1],()=>{let N=performance.now();N-T>5e3&&Zc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(N-T)+"ms"),E(N-T)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:T}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!T)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:N,threadId:M}=T;for(let H of N||[]){let{path:X,method:W,type:$,metric:se,count:z,total:fe,distribution:ue,threads:Z,...Ae}=H;z||(z=1);let me=se+(X?"-"+X:"");W!==void 0&&(me+="-"+W),$!==void 0&&(me+="-"+$);let ye=c.get(me);if(ye){if(ye.threads){let dt=ye.threads[M];if(dt)ye=dt;else{ye.threads[M]={...Ae};continue}}ye.count||(ye.count=1);let Ht=ye.count;for(let dt in Ae){let Mn=Ae[dt];typeof Mn=="number"&&(ye[dt]=(ye[dt]*Ht+Mn*z)/(Ht+z))}ye.count+=z,fe>=0&&(ye.total+=fe,ye.ratio=ye.total/ye.count)}else ye={period:t,...H},delete ye.distribution,c.set(me,ye),ye.byThread&&(ye.threads=[],ye.threads[M]={...Ae},u.push(ye));if(ue){ue=ue.map(dt=>typeof dt=="number"?{value:dt,count:1}:dt);let Ht=l.get(me);Ht?Ht.push(...ue):l.set(me,ue)}}await HB()}for(let E of u){let{path:T,method:N,type:M,metric:H,count:X,total:W,distribution:$,threads:se,...z}=E;se=se.filter(fe=>fe);for(let fe in z){if(typeof E[fe]!="number")continue;let ue=0;for(let Z of se){let Ae=Z[fe];typeof Ae=="number"&&(ue+=Ae)}E[fe]=ue}E.count=se.length,delete E.threads,delete E.byThread}for(let[E,T]of l){let N=c.get(E);T.sort((dt,Mn)=>dt.value>Mn.value?1:-1);let M=N.count-1,H=[],X=0,W=0,$;for(let dt of UB){let Mn=M*dt;for(;X<Mn;)$=T[W++],X+=$.count,W===1&&X--;let Vr=T[W>1?W-2:0];$||($=T[0]),H.push($.value-($.value-Vr.value)*(X-Mn)/$.count)}let[se,z,fe,ue,Z,Ae,me,ye,Ht]=H;Object.assign(N,{p1:se,p10:z,p25:fe,median:ue,p75:Z,p90:Ae,p95:me,p99:ye,p999:Ht})}let d;for(let[E,T]of c)T.id=(0,P_.getNextMonotonicTime)(),T.time=f,n.primaryStore.put(T.id,T,{append:!0}).then(N=>{N||n.primaryStore.put(T.id,T)}),d=!0;let _=Date.now(),{idle:h,active:m}=performance.eventLoopUtilization();if(d||m*10>h){let E=(0,P_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:h-TB,active:m-AB,taskQueueLatency:await s,time:_,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(N=>{N||n.primaryStore.put(E,T)})}TB=h,AB=m;let S=process.resourceUsage(),g=BB(I_,S);g.time=_,g.period=I_.time?_-I_.time:t,g.cpuUtilization=xB(I_,g.period),CE(n,"resource-usage",g),I_=g;let R=Xe();gB(n,R),gB(n,{system:R.system}),SB(n,R),SB(n,{system:R.system})}async function RB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Gb(){return yB||(yB=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function kB(){return bB||(bB=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Gte(){FB=!0;let e=(0,D_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Hte(LB,e),await RB(Gb(),kte),await RB(kB(),Fte)},Math.min(e/2,2147483647)).unref()}function GB(e,t){let r=e.report;r.threadId=t?.threadId||Xc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(OB+=n.mean*n.count);r.totalBytesProcessed=OB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(NB.get(t))}),NB.set(t,t.performance.eventLoopUtilization())),r.id=(0,P_.getNextMonotonicTime)(),Gb().primaryStore.put(r.id,r),FB||Gte(),qte&&(qB=Vte(r))}async function Vte(e){if(await qB,!pa){let r=(0,C_.dirname)((0,IB.getLogFilePath)());try{pa=await(0,Fb.open)((0,C_.join)(r,"analytics.log"),"r+")}catch{pa=await(0,Fb.open)((0,C_.join)(r,"analytics.log"),"w+")}}let t=(await pa.stat()).size;if(t>$te){let r=Buffer.alloc(t);await pa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await pa.write(r,{position:0}),await pa.truncate(r.length),t=r.length}await pa.write(JSON.stringify(e)+`
20
20
  `,t)}var Xc,wB,IB,CB,C_,Fb,P_,D_,PB,Zc,IE,DB,wE,LB,MB,vB,UB,TB,AB,I_,HB,kte,Fte,yB,bB,FB,OB,NB,qte,qB,pa,$te,Li=Re(()=>{Xc=require("worker_threads"),wB=v(ot());xe();IB=v(ee()),CB=v(Gs()),C_=require("path"),Fb=require("fs/promises"),P_=v(fn()),D_=v(le());k();Mr();PB=v(require("node:fs")),Zc=(0,CB.loggerWithTag)("analytics");(0,D_.initSync)();IE=new Map,DB=(0,D_.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(Mte,"setAnalyticsEnabled");a(vte,"recordExistingAction");a(Ute,"recordNewAction");a(Mt,"recordAction");Ye.recordAnalytics=Mt;a(Qn,"recordActionBinary");wE=0,LB=1e3,MB="analytics-report",vB=[];a(L_,"addAnalyticsListener");UB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(xte,"sendAnalytics");a(CE,"storeMetric");a(xB,"calculateCPUUtilization");a(BB,"diffResourceUsage");a(Bte,"storeTableSizeMetrics");a(gB,"storeDBSizeMetrics");a(SB,"storeVolumeMetrics");a(Hte,"aggregation");TB=0,AB=0,I_={},HB=a(()=>new Promise(setImmediate),"rest");a(RB,"cleanup");kte=36e5,Fte=31536e6;a(Gb,"getRawAnalyticsTable");a(kB,"getAnalyticsTable");(0,wB.setChildListenerByType)(MB,GB);a(Gte,"startScheduledTasks");OB=0,NB=new Map,qte=!1;a(GB,"recordAnalytics");$te=1e6;a(Vte,"logAnalytics")});var $B={};Ue($B,{Headers:()=>So,appendHeader:()=>PE,mergeHeaders:()=>qb});function PE(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function qb(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new So(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var So,v_=Re(()=>{So=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(PE,"appendHeader");a(qb,"mergeHeaders")});function zB(e){let t={openapi:Kte,info:{title:"HarperDB HTTP REST interface",version:WB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:T,name:N,elements:M,relationship:H,definition:X}of o){if(H)T==="array"?u[N]={type:"array",items:{$ref:Ea+M.type}}:u[N]={$ref:Ea+T};else{let W=X??M?.definition;if(W){if(!t.components.schemas[W.type]){let $={};W.properties.forEach(se=>{$[se.name]=new Yb($b[se.type],se.type)}),t.components.schemas[W.type]=new YB($)}T==="array"?u[N]={type:"array",items:{$ref:Ea+W.type}}:u[N]={$ref:Ea+W.type}}else T==="array"?M.type==="Any"||M.type=="ID"?u[N]={type:"array",items:{format:M.type}}:u[N]={type:"array",items:new Yb($b[M.type],M.type)}:T==="Any"||T=="ID"?u[N]={format:T}:u[N]=new Yb($b[T],T)}f.push(new Wb(N,"query",u[N]))}let d=Object.keys(u),_=new Wb(c,"path",{format:"ID"});_.required=!0,_.description="primary key of record";let h=new Wb("property","path",{enum:d});h.required=!0,t.components.schemas[i]=new YB(u);let m=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",E="/"+s+"/";m&&(t.paths[E]={},t.paths[E].post=new Yte(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new Vb(f,r,{200:new Kb({$ref:Ea+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new KB(f,r,"delete all the records that match the provided query",{204:new VB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new Vb([_],r,{200:new Kb({$ref:Ea+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new Wte([_],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new KB([_],r,"delete a record with the given primary key",{204:new VB})),g&&h.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new Vb([_,h],r,{200:new Kb({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Yte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ea+e}}}},this.security=t,this.responses={200:{description:zb,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Vb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Kb(e){this.description=zb,this.content={"application/json":{schema:e}}}function VB(){this.description="successfully processed request, no content returned to client"}function Wte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ea+r}}}},this.responses={200:{description:zb}}}function KB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function YB(e){this.type="object",this.properties=e}function Yb(e,t){this.type=e,this.format=t}function Wb(e,t,r){this.name=e,this.in=t,this.schema=r}var WB,Kte,$b,Ea,zb,jB=Re(()=>{WB=v(Et()),Kte="3.0.3",$b={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ea="#/components/schemas/",zb="successful operation";a(zB,"generateJsonApi");a(Yte,"Post");a(Vb,"Get");a(Kb,"Response200");a(VB,"Response204");a(Wte,"Put");a(KB,"Delete");a(YB,"ResourceSchema");a(Yb,"Type");a(Wb,"Parameter")});var JB={};Ue(JB,{Request:()=>U_,createReuseportFd:()=>DE});var QB,U_,jb,Qb,DE,LE=Re(()=>{QB=require("os"),U_=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new Qb(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new jb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},jb=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},Qb=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,QB.platform)()!="win32"&&(DE=require("node-unix-socket").createReuseportFd)});var vE={};Ue(vE,{parseHeaderValue:()=>Xb,start:()=>Qte});async function jte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&cp(e);let i=new So;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==XB){let g=ME.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new Tc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=Xb(g);for(let E of R)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=Xb(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await Pt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=ao(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Pu.ClientError(g,400)}if(e.authorize=!0,o===XB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return zB(ME);throw new Pu.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Pu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Pu.ServerError(`Method ${s} is not recognized`,501)}}),_=200,h;if(d==null)_=s==="GET"||s==="HEAD"?404:204,Jb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=qb(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=kf(d.data,e,d)),d}else if(h=e.lastModified){zte[0]=h;let g=String.fromCharCode(34,(Br[0]&63)+62,(Br[0]>>6)+(Br[1]<<2&63)+62,(Br[1]>>4)+(Br[2]<<4&63)+62,(Br[2]>>2)+62,(Br[3]&63)+62,(Br[3]>>6)+(Br[4]<<2&63)+62,(Br[4]>>4)+(Br[5]<<4&63)+62,(Br[5]>>2)+62,(Br[6]&63)+62,(Br[6]>>6)+(Br[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(d?.onDone&&d.onDone(),_=304,d=void 0):i.setIfNone("ETag",g),Jb.lastModified&&i.setIfNone("Last-Modified",new Date(h).toUTCString())}e.createdResource&&(_=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let m={status:_,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(m.wasCacheMiss=S,!S&&h&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||h))/1e3))),d!==void 0&&(m.body=kf(d,e,m),s==="HEAD"&&(m.body=void 0)),m}catch(o){o.statusCode?o.statusCode===500?Mi.warn(o):Mi.info(o):Mi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=kf(o.contentType?o:o.toString(),e,c),c}}function Qte(e){Jb=e,e.includeExpensiveRecordCountEstimates&&(U_.prototype.includeExpensiveRecordCountEstimates=!0),!ZB&&(ZB=!0,ME=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return jte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{x_++;let s=new kn;eH||(eH=!0,L_(l=>{x_>0&&l.push({metric:"ws-connections",connections:x_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Mi.warn(l)});let o;t.on("message",a(function(u){o||(o=ao(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);Mt(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{x_--,Qn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=ME.getMatch(l,"ws");if(Qn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Mt(m=>({count:m.count,total:x_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new Tc(u.relativeURL),d=u.Resource;c=(await Pt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let m=await la(h.value,r);t.send(m),Mt(m.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(S=>t._socket.once("drain",S))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Mi.warn(l):Mi.info(l):Mi.error(l),t.close(Jte[l.statusCode]||1011,l.toString())}t.close()},e))}function Xb(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Mi,Pu,Br,zte,Jb,XB,ZB,ME,eH,x_,Jte,tH=Re(()=>{so();Li();Mi=v(ee()),Pu=v(he());Cf();Xl();Sc();v_();jB();Cf();LE();Br=new Uint8Array(8),zte=new Float64Array(Br.buffer,0,1),Jb={},XB="openapi";a(jte,"http");x_=0;a(Qte,"start");Jte={401:3e3,403:3003};a(Xb,"parseHeaderValue")});var Zb=C((vwe,nH)=>{var{recordAction:UE,recordActionBinary:rH}=(Li(),P(M_)),Xte=require("fastify-plugin"),Zte=200;nH.exports=Xte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),UE(o,"duration",u,d,f),rH(s.raw.statusCode<400,"success",u,d,f),rH(1,"response_"+s.raw.statusCode,u,d,f);let _=Zte;i?.pipe?(i.on("data",g=>{_+=g.length}),i.on("end",()=>{UE(performance.now()-c,"transfer",u,d,f),UE(_,"bytes-sent",u,d,f)})):(_+=i?.length||0,UE(_,"bytes-sent",u,d,f));let h=o.toFixed(3),m=s.getHeader("Server-Timing"),S=`db;dur=${h}`;s.header("Server-Timing",m?`${m}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var iH=C((Uwe,sH)=>{var ere=it(),tre={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sH.exports=function(e){return ere.validateObject(e,tre)}});var xE=C((xwe,oH)=>{"use strict";var rre=(k(),P(q)).OPERATIONS_ENUM,eO=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=rre.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};oH.exports=eO});var k_={};Ue(k_,{createTokens:()=>sre,getJWTRSAKeys:()=>GE,refreshOperationToken:()=>ire,validateOperationToken:()=>nO,validateRefreshToken:()=>qE});async function GE(){if(BE)return BE;try{let e=B_.default.join(H_.default.getHdbBasePath(),RA),t=await HE.default.readFile(B_.default.join(e,lf.JWT_PASSPHRASE_NAME),"utf8"),r=await HE.default.readFile(B_.default.join(e,lf.JWT_PRIVATE_KEY_NAME),"utf8");return BE={publicKey:await HE.default.readFile(B_.default.join(e,lf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},BE}catch(e){throw FE.default.error(e),new js.ClientError(Lu.NO_ENCRYPTION_KEYS,Du.INTERNAL_SERVER_ERROR)}}async function sre(e){let t=(0,tO.validateBySchema)(e,vi.default.object({username:vi.default.string().optional(),password:vi.default.string().optional(),role:vi.default.string().optional(),expires_in:vi.default.alternatives(vi.default.string(),vi.default.number()).optional()}));if(t)throw new js.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,rO.findAndValidateUser)(e.username,e.password,d)}catch(d){throw FE.default.error(d),new js.ClientError(Lu.INVALID_CREDENTIALS,Du.UNAUTHORIZED)}if(!r)throw new js.ClientError(Lu.INVALID_CREDENTIALS,Du.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await GE(),c=await Mu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??dH,algorithm:kE,subject:"operation"}),l=await Mu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:nre,algorithm:kE,subject:"refresh"}),u=Ry(l,"sha256");if((await(0,aH.update)(new cH.default(cf,Wl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new js.ClientError(Lu.REFRESH_TOKEN_SAVE_FAILED,Du.INTERNAL_SERVER_ERROR);return lH.default.signalUserChange(new uH.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function ire(e){let t=(0,tO.validateBySchema)(e,vi.default.object({refresh_token:vi.default.string().required()}).required());if(t)throw new js.ClientError(t.message);let{refresh_token:r}=e;await qE(r);let n=await GE(),s=await Mu.default.decode(r);return{operation_token:await Mu.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:dH,algorithm:kE,subject:"operation"})}}async function nO(e){return fH(e,"operation")}async function qE(e){return fH(e,"refresh")}async function fH(e,t){try{let r=await GE(),n=await Mu.default.verify(e,r.publicKey,{algorithms:kE,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,rO.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!yy(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw FE.default.warn(r),r?.name==="TokenExpiredError"?new js.ClientError(Lu.TOKEN_EXPIRED,Du.FORBIDDEN):new js.ClientError(Lu.INVALID_TOKEN,Du.UNAUTHORIZED)}}var Mu,HE,B_,vi,tO,js,FE,rO,aH,cH,lH,uH,H_,Du,Lu,dH,nre,kE,BE,vu=Re(()=>{Mu=v(require("jsonwebtoken")),HE=v(require("fs-extra")),B_=v(require("node:path")),vi=v(require("joi")),tO=v(it());k();js=v(he()),FE=v(ee());Qp();rO=v(An()),aH=v(Rn()),cH=v(xE()),lH=v(po()),uH=v(Ys()),H_=v(le()),{HTTP_STATUS_CODES:Du,AUTHENTICATION_ERROR_MSGS:Lu}=js.hdb_errors;H_.default.initSync();dH=H_.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",nre=H_.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",kE="RS256";a(GE,"getJWTRSAKeys");a(sre,"createTokens");a(ire,"refreshOperationToken");a(nO,"validateOperationToken");a(qE,"validateRefreshToken");a(fH,"validateToken")});var sO=C((Gwe,mH)=>{"use strict";var ore=iH(),Uu=require("passport"),are=require("passport-local").Strategy,cre=require("passport-http").BasicStrategy,lre=require("util"),ure=An(),hH=lre.callbackify(ure.findAndValidateUser),Fwe=xn(),dre=(k(),P(q)),_H=(vu(),P(k_));Uu.use(new are(function(e,t,r){hH(e,t,r)}));Uu.use(new cre(function(e,t,r){hH(e,t,r)}));Uu.serializeUser(function(e,t){t(null,e)});Uu.deserializeUser(function(e,t){t(null,e)});function fre(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Uu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===dre.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?_H.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):_H.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Uu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(fre,"authorize");function _re(e,t){let r=ore(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(_re,"checkPermissions");mH.exports={authorize:fre,checkPermissions:_re}});var $E=C(($we,pH)=>{"use strict";var hre=Kn();pH.exports={writeTransaction:mre};function mre(e,t,r){return hre.writeTransaction(e,t,r)}a(mre,"writeTransaction")});var TH=C((Ywe,SH)=>{"use strict";var pre=zr(),Ere=ps(),EH=ee(),gre=Rn(),Kwe=$E(),Sre=require("clone"),oO=require("alasql"),Tre=qp(),gH=require("util"),Are=gH.promisify(Ere.getTableSchema),Rre=gH.promisify(pre.search),yre=(k(),P(q)),iO=ie();Tre(oO);SH.exports={update:Ore};var bre="There was a problem performing this update. Please check the logs and try again.";async function Ore({statement:e,hdb_user:t}){let r=await Are(e.table.databaseid,e.table.tableid),n=Nre(e.columns);iO.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Sre(s),c=iO.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=oO.parse(l).statements[0],f=await Rre(u),d=wre(n,f);return Ire(o,d,t)}a(Ore,"update");function Nre(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=oO.compile(`SELECT ${r.expression.toString()} AS [${yre.FUNC_VAL}] FROM ?`)}),t}catch(t){throw EH.error(t),new Error(bre)}}a(Nre,"createUpdateRecord");function wre(e,t){return iO.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(wre,"buildUpdateRecords");async function Ire(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await gre.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){EH.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Ire,"updateRecords")});var RH=C((Qwe,AH)=>{var Cre=require("alasql"),Pre=zr(),Dre=ee(),Lre=Kn(),cO=require("util"),aO=ie(),Mre=(k(),P(q)),vre=ps(),zwe=$E(),jwe=Rn(),Ure="record",xre="successfully deleted",Bre=cO.callbackify(Gre),Hre=cO.promisify(Pre.search),kre=cO.promisify(vre.getTableSchema);AH.exports={convertDelete:Bre};function Fre(e){return`${e.deleted_hashes.length} ${Ure}${e.deleted_hashes.length===1?"":"s"} ${xre}`}a(Fre,"generateReturnMessage");async function Gre({statement:e,hdb_user:t}){let r=await kre(e.table.databaseid,e.table.tableid);aO.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=aO.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Cre.parse(o).statements[0],l={operation:Mre.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Hre(c);let u=await Lre.deleteRecords(l);return aO.isEmptyOrZeroLength(u.message)&&(u.message=Fre(u)),delete u.txn_time,u}catch(u){throw Dre.error(u),u.hdb_code?u.message:u}}a(Gre,"convertDelete")});var wH=C((Xwe,NH)=>{"use strict";var qre=ho(),{hdb_errors:yH}=he(),{getDatabases:bH}=(xe(),P(ct));NH.exports={checkSchemaExists:OH,checkSchemaTableExists:$re,schema_describe:qre};async function OH(e){if(!bH()[e])return yH.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OH,"checkSchemaExists");async function $re(e,t){let r=await OH(e);if(r)return r;if(!bH()[e][t])return yH.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($re,"checkSchemaTableExists")});var _O=C((nIe,kH)=>{"use strict";var{decode:Vre}=require("msgpackr"),{isMainThread:eIe,parentPort:tIe,threadId:rIe}=require("worker_threads"),YE=sr(),xu=Lt(),dO=(k(),P(q)),Jr=ee(),uO=le(),Kre=(k(),P(q)),{onMessageByType:Yre}=ot(),DH=_o(),{recordAction:IH,recordActionBinary:Wre}=(Li(),P(M_)),{publishToStream:zre}=YE,{ConsumerEvents:CH}=require("nats"),jre=zr(),{promisify:Qre}=require("util"),{decodeBlobsWithWrites:Jre}=(gn(),P(uu)),LH=Qre(setTimeout),WE=1e4,zE,KE,Xre,Zre,MH,F_=new Map,Bu=new Map;kH.exports={initialize:vH,ingestConsumer:fO,setSubscription:ene,setIgnoreOrigin:nne,getDatabaseSubscriptions:rne,updateConsumer:UH};async function vH(){Yre(dO.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await UH(n)}),MH=!0,Jr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await YE.getNATSReferences();zE=e,KE=e.info.server_name,Xre=t,Zre=r}a(vH,"initialize");async function UH(e){if(e.status==="start"){let{js:t,jsm:r}=await xH(e.node_domain_name);fO(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=F_.get(e.stream_name+e.node_domain_name);t&&(Jr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),F_.set(e.stream_name+e.node_domain_name,"close")),Bu.get(e.node_domain_name)==="failed"&&Bu.set(e.node_domain_name,"close")}}a(UH,"updateConsumer");var jE=new Map;function ene(e,t,r){let n=jE.get(e);n||jE.set(e,n=new Map),n.set(t,r),MH||vH().then(tne)}a(ene,"setSubscription");async function tne(){let e=await jre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+xu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await xH(r),!n))break;let{schema:o,table:c}=i,l=DH.createNatsTableStreamName(o,c);fO(l,n,s,r)}}}a(tne,"accessConsumers");async function xH(e){let t,r,n=1;for(;!r;)try{t=await zE.jetstream({domain:e}),r=await zE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Bu.get(e)==="close")break;Bu.set(e,"failed"),n%10===1&&Jr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<WE?n++*100:WE;await LH(i)}return{js:t,jsm:r}}a(xH,"connectToRemoteJS");function rne(){return jE}a(rne,"getDatabaseSubscriptions");var BH;function nne(e){BH=e}a(nne,"setIgnoreOrigin");var HH=100,PH=new Array(HH),VE=0;async function fO(e,t,r,n){let{connection:s}=await YE.getNATSReferences();zE=s,KE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,KE),Jr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Bu.get(n)==="close")break;o%10===1&&Jr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Jr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await YE.createConsumer(r,e,KE,new Date(Date.now()).toISOString()));let f=o++*100<WE?o++*100:WE;await LH(f)}let c=!1,l;for(;!c;){if(F_.get(e+n)==="close"||Bu.get(n)==="close"){F_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:uO.get(dO.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),F_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===CH.ConsumerDeleted&&(await l.close(),c=!0),f.type===CH.HeartbeatsMissed){let d=f.data;Jr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(Jr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await PH[VE],PH[VE]=sne(f).catch(d=>{Jr.error(d)}),++VE>=HH&&(VE=0)}catch(f){f.message==="consumer deleted"?(Jr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Jr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(fO,"ingestConsumer");async function sne(e){let t;await Jre(()=>{t=Vre(e.data)}),IH(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Jr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=uO.get(dO.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(xu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(xu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(xu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!BH),Wre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(xu.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:_,expiresAt:h}=t;Jr.trace("processing message:",o,c,u,(f?"records: "+f.map(M=>M?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Jr.trace(`messageProcessor nats msg id: ${e.headers.get(xu.MSG_HEADERS.NATS_MSG_ID)}`);let m;f||(f=d);let S=new Promise(M=>m=M),{timestamp:g,user:R,node_name:E}=_||{},T=jE.get(c)?.get(u);if(!T)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=m,T.send(t);else if(f.length===1&&!l)T.send({type:lO(o),value:f[0],id:d?.[0],expiresAt:h,timestamp:g,table:u,onCommit:m,user:R,nodeName:E});else{let M=f.map((H,X)=>({type:lO(o),value:H,expiresAt:h,id:d?.[X],table:u}));for(;l;)M.push({type:lO(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:M,table:u,timestamp:g,onCommit:m,user:R,nodeName:E})}uO.get(Kre.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&zre(e.subject.split(".").slice(0,-1).join("."),DH.createNatsTableStreamName(c,u),e.headers,e.data),await S;let N=Date.now()-g;g&&IH(N,"replication-latency",e.subject,o,"ingest")}catch(o){Jr.error(o)}e.ack()}a(sne,"messageProcessor");function lO(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(lO,"convertOperation")});var sr=C((uIe,rk)=>{"use strict";var wr=le();wr.initSync();var ine=require("fs-extra"),one=require("semver"),$_=require("path"),{monotonicFactory:ane}=require("ulidx"),GH=ane(),cne=require("util"),qH=require("child_process"),lne=cne.promisify(qH.exec),une=qH.spawn,Hr=Lt(),je=(k(),P(q)),{packageJson:dne,PACKAGE_ROOT:fne}=Et(),QE=ie(),Qs=ee(),JE=_o(),_ne=$E(),G_=Ct(),{broadcast:hne,onMessageByType:mne,getWorkerIndex:pne}=ot(),{isMainThread:$H}=require("worker_threads"),{Encoder:Ene,decode:EO}=require("msgpackr"),VH=new Ene,{isEmpty:nl}=QE,KH=An(),iIe=48*36e11;$H&&mne(je.ITC_EVENT_TYPES.RESTART,()=>{Xr=void 0,rl=void 0});var{connect:gne,StorageType:Sne,RetentionPolicy:Tne,AckPolicy:gO,DeliverPolicy:SO,DiscardPolicy:Ane,NatsConnection:oIe,JetStreamManager:aIe,JetStreamClient:cIe,StringCodec:lIe,JSONCodec:Rne,createInbox:TO,headers:yne,ErrorCode:FH}=require("nats"),{recordAction:bne}=(Li(),P(M_)),{encodeBlobsAsBuffers:One}=(gn(),P(uu)),YH=Rne(),Nne="clustering",wne=dne.engines[Hr.NATS_SERVER_NAME],Ine=$_.join(fne,"dependencies"),pO=$_.join(Ine,`${process.platform}-${process.arch}`,Hr.NATS_BINARY_NAME),hO,mO,q_,el,tl;rk.exports={runCommand:WH,checkNATSServerInstalled:Cne,createConnection:AO,getConnection:V_,getJetStreamManager:K_,getJetStream:jH,getNATSReferences:Ui,getServerList:Dne,createLocalStream:RO,listStreams:QH,deleteLocalStream:Lne,getServerConfig:Hu,listRemoteStreams:Mne,viewStream:vne,viewStreamIterator:Une,publishToStream:xne,request:kne,reloadNATS:yO,reloadNATSHub:Fne,reloadNATSLeaf:Gne,extractServerName:Hne,requestErrorHandler:qne,createLocalTableStream:ek,createTableStreams:Kne,purgeTableStream:tk,purgeSchemaTableStreams:Yne,getStreamInfo:Wne,updateLocalStreams:jne,closeConnection:Pne,getJsmServerName:XE,addNatsMsgHeader:JH,clearClientCache:zH,updateRemoteConsumer:$ne,createConsumer:XH,updateConsumerIterator:Vne};async function WH(e,t=void 0){let{stdout:r,stderr:n}=await lne(e,{cwd:t});if(n)throw new Error(n.replace(`
21
21
  `,""));return r.replace(`
22
22
  `,"")}a(WH,"runCommand");async function Cne(){try{await ine.access(pO)}catch{return!1}let e=await WH(`${pO} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return one.eq(t,wne)}a(Cne,"checkNATSServerInstalled");async function AO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await KH.getClusterUser();if(nl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Qs.trace("create nats connection called");let i=await gne({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:wr.get(je.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:wr.get(je.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:wr.get(je.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Qs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Qs.error("Error with Nats client connection, connection closed",o),i===Xr&&zH()}),i}a(AO,"createConnection");function zH(){Xr=void 0,el=void 0,tl=void 0,rl=void 0}a(zH,"clearClientCache");async function Pne(){Xr&&(await Xr.drain(),Xr=void 0,el=void 0,tl=void 0,rl=void 0)}a(Pne,"closeConnection");var Xr,rl;async function V_(){return rl||(rl=AO(wr.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Xr=await rl),Xr||rl}a(V_,"getConnection");async function K_(){if(el)return el;nl(Xr)&&await V_();let{domain:e}=Hu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(nl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return el=await Xr.jetstreamManager({domain:e,timeout:6e4}),el}a(K_,"getJetStreamManager");async function jH(){if(tl)return tl;nl(Xr)&&await V_();let{domain:e}=Hu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(nl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return tl=Xr.jetstream({domain:e,timeout:6e4}),tl}a(jH,"getJetStream");async function Ui(){let e=Xr||await V_(),t=el||await K_(),r=tl||await jH();return{connection:e,jsm:t,js:r}}a(Ui,"getNATSReferences");async function Dne(e){let t=wr.get(je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await KH.getClusterUser(),s=await AO(t,r,n),i=TO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=YH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();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 QE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(Dne,"getServerList");async function RO(e,t){let{jsm:r}=await Ui(),n=wr.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=wr.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=wr.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Sne.File,retention:Tne.Limits,subjects:t,discard:Ane.Old,max_msgs:s,max_bytes:i,max_age:n})}a(RO,"createLocalStream");async function QH(){let{jsm:e}=await Ui(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(QH,"listStreams");async function Lne(e){let{jsm:t}=await Ui();await t.streams.delete(e)}a(Lne,"deleteLocalStream");async function Mne(e){let{connection:t}=await Ui(),r=[],n=TO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(YH.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Mne,"listRemoteStreams");async function vne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ui(),i=GH(),o={durable_name:i,ack_policy:gO.Explicit};t&&(o.deliver_policy=SO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);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 f of l){let d=EO(f.data),_={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(_.origin=f.headers.get(Hr.MSG_HEADERS.ORIGIN)),u.push(_),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(vne,"viewStream");async function*Une(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ui(),i=GH(),o={durable_name:i,ack_policy:gO.Explicit};t&&(o.deliver_policy=SO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);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 f=EO(u.data);f[0]||(f=[f]);for(let d of f){let _={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(_.origin=u.headers.get(Hr.MSG_HEADERS.ORIGIN)),yield _}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Une,"viewStreamIterator");async function xne(e,t,r,n){Qs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=JH(n,r);let{js:s}=await Ui(),i=await XE(),o=`${e}.${i}`,c=await One(()=>n instanceof Uint8Array?n:VH.encode(n));try{Qs.trace(`publishToStream publishing to subject: ${o}`),bne(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return ZH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Qs.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await RO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(xne,"publishToStream");function JH(e,t){t===void 0&&(t=yne());let r=wr.get(je.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Hr.MSG_HEADERS.ORIGIN)&&r&&t.append(Hr.MSG_HEADERS.ORIGIN,r),t}a(JH,"addNatsMsgHeader");function Hu(e){e=e.toLowerCase();let t=$_.join(wr.get(je.CONFIG_PARAMS.ROOTPATH),Nne);if(e===je.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return nl(mO)&&(mO={port:G_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:G_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Hr.SERVER_SUFFIX.HUB,config_file:Hr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:$_.join(t,Hr.PID_FILES.HUB),hdb_nats_path:t}),mO;if(e===je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return nl(hO)&&(hO={port:G_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:G_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Hr.SERVER_SUFFIX.LEAF,config_file:Hr.NATS_CONFIG_FILES.LEAF_SERVER,domain:G_.getConfigFromFile(je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Hr.SERVER_SUFFIX.LEAF,pid_file_path:$_.join(t,Hr.PID_FILES.LEAF),hdb_nats_path:t}),hO;Qs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Hu,"getServerConfig");async function XH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:gO.Explicit,durable_name:r,deliver_policy:SO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(XH,"createConsumer");async function Bne(e,t,r){await e.consumers.delete(t,r)}a(Bne,"removeConsumer");function Hne(e){return e.split(".")[1]}a(Hne,"extractServerName");async function kne(e,t,r=6e4,n=TO()){if(!QE.isObject(t))throw new Error("data param must be an object");let s=VH.encode(t),{connection:i}=await Ui(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return EO(c.data)}a(kne,"request");function yO(e){return new Promise(async(t,r)=>{let n=une(pO,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(yO,"reloadNATS");async function Fne(){let{pid_file_path:e}=Hu(je.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await yO(e)}a(Fne,"reloadNATSHub");async function Gne(){let{pid_file_path:e}=Hu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await yO(e)}a(Gne,"reloadNATSLeaf");function qne(e,t,r){let n;switch(e.code){case FH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case FH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(qne,"requestErrorHandler");async function $ne(e,t){let r=t+Hr.SERVER_SUFFIX.LEAF,{connection:n}=await Ui(),{jsm:s}=await Jne(r),{schema:i,table:o}=e,c=JE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await ZH(async()=>{if(e.subscribe===!0)await XH(s,c,n.info.server_name,l);else try{await Bne(s,c,n.info.server_name)}catch(u){Qs.trace(u)}})}a($ne,"updateRemoteConsumer");async function Vne(e,t,r,n){let s=JE.createNatsTableStreamName(e,t),i=r+Hr.SERVER_SUFFIX.LEAF,o={type:je.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!$H&&pne()<wr.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=_O();await c(o)}await hne(o),n==="stop"&&await QE.async_set_timeout(1e3)}a(Vne,"updateConsumerIterator");function ZH(e){return _ne.writeTransaction(je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ZH,"exclusiveLock");async function ek(e,t){let r=JE.createNatsTableStreamName(e,t),n=await XE(),s=zne(e,t,n);await RO(r,[s])}a(ek,"createLocalTableStream");async function Kne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await ek(n,s)}}a(Kne,"createTableStreams");async function tk(e,t,r=void 0){if(wr.get(je.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=JE.createNatsTableStreamName(e,t),{domain:s}=Hu(je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await V_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Qs.warn(n);else throw n}}a(tk,"purgeTableStream");async function Yne(e,t){if(wr.get(je.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await tk(e,t[r])}a(Yne,"purgeSchemaTableStreams");async function Wne(e){return(await K_()).streams.info(e)}a(Wne,"getStreamInfo");function zne(e,t,r){return`${Hr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(zne,"createSubjectName");async function XE(){if(q_)return q_;if(q_=(await K_())?.nc?.info?.server_name,q_===void 0)throw new Error("Unable to get jetstream manager server name");return q_}a(XE,"getJsmServerName");async function jne(){let e=await K_(),t=await XE(),r=await QH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Qne(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");Qs.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(jne,"updateLocalStreams");function Qne(e){let{config:t}=e,r=!1,n=wr.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=wr.get(je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=wr.get(je.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}a(Qne,"updateStreamLimits");async function Jne(e){let t,r;try{t=await Xr.jetstream({domain:e}),r=await Xr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Qs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Jne,"connectToRemoteJS")});function bO(e){let t=e.get(ZE),r=t?(0,ku.unpack)(t):null;r||(r={remoteNameToId:{}});let n=et(),s=!1;r.nodeName=et();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:W_(e)??1,nodes:[]})})}i[n]=0,e.putSync(ZE,(0,ku.pack)(r))}return r}function Y_(e){return bO(e).remoteNameToId}function sk(e,t){let r=bO(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(ZE,(0,ku.pack)(r)),s}function eg(e,t){let r=bO(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(ZE,(0,ku.pack)(r))}return nk.trace?.("The remote node name map",e,n,s),s}var nk,ku,ZE,OO=Re(()=>{nk=v(Gs());Es();ku=require("msgpackr"),ZE=Symbol.for("remote-ids");a(bO,"getIdMappingRecord");a(Y_,"exportIdMapping");a(sk,"remoteToLocalNodeId");a(eg,"getIdOfRemoteNode")});var NO={};Ue(NO,{commits_awaiting_replication:()=>Fu,getHDBNodeTable:()=>ir,getReplicationSharedStatus:()=>tg,iterateRoutes:()=>j_,shouldReplicateToNode:()=>z_,subscribeToNodeUpdates:()=>Gu});function ir(){return ik||(ik=_t({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 tg(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Gu(e){ir().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;lk.debug?.("adding node",n,"on node",et()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==et()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of ir().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function z_(e,t){let r=ga.default.get(x.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===ga.default.get(x.REPLICATION_SHARD))))&&ir().primaryStore.get(et())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Xne(){Gu(e=>{Sa({},(t,r)=>{let n=e.name,s=ok.get(n);if(s||ok.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=tg(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Fu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*j_(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=ga.default.get(x.REPLICATION_SECUREPORT)??(!ga.default.get(x.REPLICATION_PORT)&&ga.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||ga.default.get(x.REPLICATION_PORT)||ga.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){ak.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,start_time:t.startTime,revoked_certificates:t.revokedCertificates}}}var ak,ck,ga,lk,ik,ok,Fu,sl=Re(()=>{xe();Es();ip();ak=require("worker_threads"),ck=v(he()),ga=v(le());k();lk=v(Gs());server.nodes=[];a(ir,"getHDBNodeTable");a(tg,"getReplicationSharedStatus");a(Gu,"subscribeToNodeUpdates");a(z_,"shouldReplicateToNode");ok=new Map;oL((e,t,r)=>{if(r>server.nodes.length)throw new ck.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Fu||(Fu=new Map,Xne());let n=Fu.get(e);return n||(n=[],Fu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Xne,"startSubscriptionToReplications");a(j_,"iterateRoutes")});var fk={};Ue(fk,{connectedToNode:()=>il,disconnectedFromNode:()=>$u,ensureNode:()=>To,requestClusterStatus:()=>dk,startOnMainThread:()=>IO});async function IO(e){let t=0,r=Xe();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){rg.set(i,W_(l.auditStore));break}}}Bi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of j_(e))try{let c=!o.subscriptions;if(c){let u=et(),f=ir().primaryStore.get(u);if(f!==null){let d=e.url??Ta();(f===void 0||f.url!==d||f.shard!==e.shard)&&await To(u,{name:u,url:d,shard:e.shard,replicates:!0})}}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Gu(s)});let n;function s(i,o=i?.name){let c=et()&&o===et()||Ta()&&i?.url===Ta();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let _ of ir().search([]))_.replicates&&_.name!==o&&s(_,_.name);n=d}if(nt.trace("Setting up node replication for",i),!i){for(let[d,_]of xi){let h;for(let[m,{worker:S,nodes:g}]of _){let R=g[0];if(R&&R.name==o){h=!0;for(let[E,{worker:T}]of _)_.delete(E),nt.warn("Node was deleted, unsubscribing from node",o,E,d),T?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(h){xi.get(d).iterator.remove(),xi.delete(d);return}}return}if(c)return;if(!i.url){nt.info(`Node ${i.name} is missing url`);return}let l=xi.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(nt.info(`Added node ${i.name} at ${i.url} for process ${et()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,_]of qu)if(i.url===_.url){qu.delete(d);break}qu.set(i.name,i)}let u=Xe();if(l||(l=new Map,xi.set(i.url,l)),l.iterator=Sa(e,(d,_,h)=>{h?f(_,!0):f(_,!1)}),i.subscriptions)for(let d of i.subscriptions){let _=d.database||d.schema;u[_]||(nt.warn(`Database ${_} not found for node ${i.name}, making a subscription anyway`),f(_,!1))}function f(d,_){nt.trace("Setting up replication for database",d,"on node",i.name);let h=l.get(d),m,S=[{replicateByDefault:_,...i}];rg.has(d)&&Q_.default.get(x.REPLICATION_FAILOVER)&&(S.push({replicateByDefault:_,name:et(),start_time:rg.get(d),end_time:Date.now(),replicates:!0}),rg.delete(d));let g=z_(i,d),R=Bi.workers.filter(E=>E.name==="http");if(h?(m=h.worker,h.nodes=S):g&&(t=t%R.length,m=R[t++],l.set(d,{worker:m,nodes:S,url:i.url}),m?.on("exit",()=>{l.get(d)?.worker===m&&(l.delete(d),f(d,_))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};m?m.postMessage(E):J_(E)},Zne);else{nt.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],ir().primaryStore.get(et())?.replicates),ir().primaryStore.get(et())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};m?m.postMessage(E):sg(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),$u=a(function(i){try{nt.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(qu.keys()),c=o.sort(),l=c.indexOf(i.name||Js(i.url));if(l===-1){nt.warn("Disconnected node not found in node map",i.name,o);return}let u=xi.get(i.url),f=u?.get(i.database);if(!f){nt.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished||!Q_.default.get(x.REPLICATION_FAILOVER))return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let _=d.shard,h=(l+1)%c.length;for(;l!==h;){let m=c[h],S=qu.get(m);u=xi.get(S.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==_){h=(h+1)%c.length;continue}let{worker:R,nodes:E}=g,T=!1;for(let N of f.nodes){if(E.some(M=>M.name===N.name)){nt.info(`Disconnected node is already failing over to ${m} for ${i.database}`);continue}N.end_time<Date.now()||(E.push(N),T=!0)}if(f.nodes=[f.nodes[0]],!T){nt.info(`Disconnected node ${i.name} has no nodes to fail over to ${m}`);return}nt.info(`Failing over ${i.database} from ${i.name} to ${m}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:E}):J_({database:i.database,nodes:E});return}nt.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){nt.error("Error failing over node",o)}},"disconnectedFromNode"),il=a(function(i){let o=xi.get(i.url),c=o?.get(i.database);if(!c){nt.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){nt.info("Connected node has no nodes",i.database,c);return}if(!l.name){nt.debug("Connected node is not named yet",i.database,c);return}if(!Q_.default.get(x.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let f of xi.values()){let d=f.get(i.database);if(!d||d==c)continue;let{worker:_,nodes:h,connected:m}=d;if(h)if(m===!1&&h[0].shard===l.shard)u=!0,c.nodes.push(h[0]);else{let S=h.filter(g=>g.name!==l.name);S.length<h.length&&(d.nodes=S,_.postMessage({type:"subscribe-to-node",database:i.database,nodes:h}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,Bi.onMessageByType)("disconnected-from-node",$u),(0,Bi.onMessageByType)("connected-to-node",il),(0,Bi.onMessageByType)("request-cluster-status",dk)}function dk(e,t){let r=[];for(let[n,s]of qu)try{let i=xi.get(s.url);nt.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:_}]of i)o.push({database:l,connected:f,latency:_,thread_id:u?.threadId,nodes:d.filter(h=>!(h.end_time<Date.now())).map(h=>h.name)});let c=(0,wO.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){nt.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function To(e,t){let r=ir();e=e??Js(t.url),t.name=e;try{if(t.ca){let s=new uk.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){nt.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(nt.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!Q_.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,wO.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)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=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}nt.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Bi,ng,nt,wO,Q_,uk,Zne,xi,$u,il,qu,rg,X_=Re(()=>{xe();Bi=v(ot());Es();ng=require("worker_threads");sl();nt=v(ee()),wO=require("lodash"),Q_=v(le());k();uk=require("crypto"),Zne=200,xi=new Map,qu=new Map,rg=new Map;a(IO,"startOnMainThread");a(dk,"requestClusterStatus");ng.parentPort&&($u=a(e=>{ng.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),il=a(e=>{ng.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Bi.onMessageByType)("subscribe-to-node",e=>{J_(e)}),(0,Bi.onMessageByType)("unsubscribe-from-node",e=>{sg(e)}));a(To,"ensureNode")});var ei=C(vk=>{"use strict";var or=require("path"),{watch:gk}=require("chokidar"),On=require("fs-extra"),Vu=require("node-forge"),Sk=require("net"),{generateKeyPair:PO,X509Certificate:Ao,createPrivateKey:Tk}=require("crypto"),ese=require("util");PO=ese.promisify(PO);var bt=Vu.pki,Xs=require("joi"),{v4:Ak}=require("uuid"),{validateBySchema:vO}=it(),yt=ee(),Jn=le(),gs=(k(),P(q)),{CONFIG_PARAMS:al}=gs,Zs=xA(),{ClientError:Ra}=he(),og=require("node:tls"),{relative:Rk,join:tse}=require("node:path"),{CERT_PREFERENCE_APP:wIe,CERTIFICATE_VALUES:_k}=Zs,rse=hc(),ig=Ct(),{table:nse,getDatabases:sse,databases:CO}=(xe(),P(ct)),{getJWTRSAKeys:hk}=(vu(),P(k_));Object.assign(vk,{generateKeys:HO,updateConfigCert:Ik,createCsr:fse,signCertificate:_se,setCertTable:Ku,loadCertificates:BO,reviewSelfSignedCert:FO,createTLSSelector:Pk,listCertificates:Lk,addCertificate:Sse,removeCertificate:Ase,createNatsCerts:pse,generateCertsKeys:mse,getReplicationCert:eh,getReplicationCertAuth:use,renewSelfSigned:Ese,hostnamesFromCert:GO,getKey:Rse});var{urlToNodeName:yk,getThisNodeUrl:ise,getThisNodeName:ug,clearThisNodeName:ose}=(Es(),P(Oa)),{readFileSync:ase,statSync:bk}=require("node:fs"),IIe=le(),{getTicketKeys:cse,onMessageFromWorkers:lse}=ot(),Aa=ee(),{isMainThread:DO}=require("worker_threads"),{TLSSocket:Ok,createSecureContext:CIe}=require("node:tls"),UO=3650,Z_=["127.0.0.1","localhost","::1"],xO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];lse(async e=>{e.type===gs.ITC_EVENT_TYPES.RESTART&&(Jn.initSync(!0),await FO())});var kr;function ba(){return kr||(kr=sse().system.hdb_certificate,kr||(kr=nse({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__"}]}))),kr}a(ba,"getCertTable");async function eh(){let e=Pk("replication"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(ug());if(!r)return;let n=new Ao(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(eh,"getReplicationCert");async function use(){ba();let e=(await eh()).options.cert,r=new Ao(e).issuer.match(/CN=(.*)/)?.[1];return kr.get(r)}a(use,"getReplicationCertAuth");var LO,ya=new Map,ag=[],mk;function BO(){if(LO)return;if(LO=!0,!mk&&DO){let n=ig.getConfigFilePath();mk=gk(n,{persistent:!1}).on("change",()=>{logger.warn?.("Config file changed, reloading certificates"),dse()})}let e=[{configKey:al.TLS},{configKey:al.OPERATIONSAPI_TLS}];ba();let t=or.dirname(ig.getConfigFilePath()),r;for(let{configKey:n}of e){let s=ig.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&Rk(tse(t,"keys"),o);if(c){let l=pk(o,u=>{ya.set(c,u)},"private key");l&&ag.push(l)}for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&DO){let f=pk(u,d=>{if(_k.cert===d)return;let _=i.hostname??i.hostnames??i.host??i.hosts;_&&!Array.isArray(_)&&(_=[_]);let h=Ck(u),m=new Ao(h),S;try{S=!l&&i.name||Mk(x509Cert)}catch(M){logger.error("error extracting host name from certificate",M);return}if(S==null){logger.error("No host name found on certificate");return}if(m.checkIssued(new Ao(_k.cert)))return;let g=kr.primaryStore.get(S),R=bk(u).mtimeMs,E=!g||g.is_self_signed?1:g.fileTimestamp??g.__updatedtime__,T=i.uses??["https",...n.includes("operations")?["operations"]:[]],N=g&&R===E&&(JSON.stringify(g.uses)!==JSON.stringify(T)||g.ciphers!==i.ciphers||JSON.stringify(g.hostnames)!==JSON.stringify(_));if(E&&R<=E&&!N){R<E&&logger.info?.(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}N&&logger.info?.(`Config values changed for certificate ${S}, updating record`),r=kr.put({name:S,uses:i.uses??["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:_,file_timestamp:R,details:{issuer:m.issuer.replace(/\n/g," "),subject:m.subject?.replace(/\n/g," "),subject_alt_name:m.subjectAltName,serial_number:m.serialNumber,valid_from:m.validFrom,valid_to:m.validTo}})},l?"certificate authority":"certificate");f&&ag.push(f)}}}}}return r}a(BO,"loadCertificates");function dse(){for(let e of ag)e.close();ag.length=0,LO=!1,BO()}a(dse,"reloadCertificates");function pk(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&DO&&yt.warn(`Reloading ${r}:`,i),n=c,t(Ck(i)))}catch(c){yt.error(`Error loading ${r}:`,i,c)}},"loadFile");return On.existsSync(e)?s(e,bk(e)):yt.error?.(`${r} file not found:`,e),gk(e,{persistent:!1}).on("change",s)}a(pk,"loadAndWatch");function cg(){let e=ise();if(e==null){let t=Z_[0];return yt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return yk(e)}a(cg,"getHost");function lg(){let e=ug();if(e==null){let t=Z_[0];return yt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(lg,"getCommonName");async function fse(){let e=await eh(),t=bt.certificateFromPem(e.options.cert),r=bt.privateKeyFromPem(e.options.key);yt.info("Creating CSR with cert named:",e.name);let n=bt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:lg()},...xO];yt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:Nk()}];return yt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Vu.pki.certificationRequestToPem(n)}a(fse,"createCsr");function Nk(){let e=Z_.includes(lg())?Z_:[...Z_,lg()];return e.includes(cg())||e.push(cg()),[{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=>Sk.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(Nk,"certExtensions");async function _se(e){let t={},r=or.join(Jn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ba();for await(let f of kr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(ya.has(f.private_key_name)){n=ya.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await On.exists(or.join(r,f.private_key_name))){n=On.readFile(or.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await MO();s=f.ca,n=f.private_key}n=bt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=bt.certificateFromPem(s.certificate);yt.info("Signing CSR with cert named",s.name);let o=bt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return yt.error(f),new Error("Error verifying CSR: "+f.message)}let c=Vu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+UO),yt.info("sign cert setting validity:",c.validity),yt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),yt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;yt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Vu.md.sha256.create()),t.certificate=bt.certificateToPem(c)}else yt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(_se,"signCertificate");async function hse(e,t){await Ku({name:ug(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Ku({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:bt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(hse,"createCertificateTable");async function Ku(e){let t=new Ao(e.certificate);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},ba(),await kr.patch(e)}a(Ku,"setCertTable");async function HO(){let e=await PO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:bt.publicKeyFromPem(e.publicKey),private_key:bt.privateKeyFromPem(e.privateKey)}}a(HO,"generateKeys");async function kO(e,t,r){let n=bt.createCertificate();if(!t){let o=await eh();t=bt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+UO);let i=[{name:"commonName",value:lg()},...xO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(Nk()),n.sign(e,Vu.md.sha256.create()),bt.certificateToPem(n)}a(kO,"generateCertificates");async function MO(){let e=await Lk(),t;for(let r of e){if(!r.is_authority)continue;let n=await Dk(r.private_key_name);if(r.private_key_name&&n&&new Ao(r.certificate).checkPrivateKey(Tk(n))){yt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;yt.trace("No CA found with matching private key")}a(MO,"getCertAuthority");async function wk(e,t,r=!0){let n=bt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+UO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Jn.get(al.REPLICATION_HOSTNAME)??yk(Jn.get(al.REPLICATION_URL))??Ak().split("-")[0]}`},...xO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Vu.md.sha256.create());let o=or.join(Jn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME),c=or.join(o,Zs.PRIVATEKEY_PEM_NAME);return r&&await On.writeFile(c,bt.privateKeyToPem(e)),n}a(wk,"generateCertAuthority");async function mse(){let{private_key:e,public_key:t}=await HO(),r=await wk(e,t),n=await kO(e,t,r);await hse(n,r),Ik()}a(mse,"generateCertsKeys");async function pse(){let e=await kO(bt.privateKeyFromPem(Zs.CERTIFICATE_VALUES.key),void 0,bt.certificateFromPem(Zs.CERTIFICATE_VALUES.cert)),t=or.join(Jn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME),r=or.join(t,Zs.NATS_CERTIFICATE_PEM_NAME);await On.exists(r)||await On.writeFile(r,e);let n=or.join(t,Zs.NATS_CA_PEM_NAME);await On.exists(n)||await On.writeFile(n,Zs.CERTIFICATE_VALUES.cert)}a(pse,"createNatsCerts");async function Ese(){ba();for await(let e of kr.search([{attribute:"is_self_signed",value:!0}]))await kr.delete(e.name);await FO()}a(Ese,"renewSelfSigned");async function FO(){ose(),await BO(),ba();let e=await MO();if(!e){yt.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=a(u=>{try{return{key:bt.privateKeyFromPem(On.readFileSync(u)),keyPath:u}}catch(f){return yt.warn(`Failed to parse private key from ${u}:`,f.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Jn.get(al.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let f=r(u.privateKey);if(s=f.key,i=f.keyPath,f.key)break}}else{let u=Jn.get(al.TLS_PRIVATEKEY),f=r(u);s=f.key,i=f.keyPath}let o=or.join(Jn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME),c=Rk(o,i);s||(yt.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{private_key:s}=await HO(),On.existsSync(or.join(o,Zs.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${Ak().split("-")[0]}.pem`),await On.writeFile(or.join(o,c),bt.privateKeyToPem(s)));let l=await wk(s,bt.setRsaPublicKey(s.n,s.e),!1);await Ku({name:l.subject.getField("CN").value,uses:["https"],certificate:bt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await eh()){let r=ug();yt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await MO();let n=bt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await kO(bt.privateKeyFromPem(e.private_key),s,n);await Ku({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(FO,"reviewSelfSignedCert");function Ik(){let e=rse(Object.keys(gs.CONFIG_PARAM_MAP),!0),t=or.join(Jn.getHdbBasePath(),gs.LICENSE_KEY_DIR_NAME),r=or.join(t,Zs.PRIVATEKEY_PEM_NAME),n=or.join(t,Zs.NATS_CERTIFICATE_PEM_NAME),s=or.join(t,Zs.NATS_CA_PEM_NAME),i=gs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),ig.updateConfigValue(void 0,void 0,o,!1,!0)}a(Ik,"updateConfigCert");function Ck(e){return e.startsWith("-----BEGIN")?e:ase(e,"utf8")}a(Ck,"readPEM");var Ek=og.createSecureContext;og.createSecureContext=function(e){if(!e.cert||!e.key)return Ek(e);let t={...e};delete t.key,delete t.cert;let r=Ek(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var gse=Ok.prototype._init;Ok.prototype._init=function(e,t){gse.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var ol=new Map;function Pk(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),ol.clear();let f=0;for await(let d of CO.system.hdb_certificate.search([])){let _=d.certificate,h=new Ao(_);d.is_authority&&(h.asString=_,ol.set(h.subject,_))}for await(let d of CO.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let _=e==="operations-api",h=d.is_self_signed?1:2;d.uses?.includes(e)&&(h+=1);let m=await Dk(d.private_key_name),S=d.certificate,g=new Ao(S);if(ol.has(g.issuer)&&(S+=`