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.
@@ -13,7 +13,7 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
13
13
 
14
14
  `:`data: ${e}
15
15
 
16
- `},"serialize"),compressible:!1,q:.8});Yr.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()}});aL={type:"application/json",serializeStream:Nf,serialize:wf,deserialize:kJ,q:.5};Yr.set("*/*",aL);Yr.set("",aL);a(kJ,"tryJSONParse");a(Cf,"registerContentHandlers");FJ=require("fastify-plugin"),GJ=FJ(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=ap(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(ap,"findBestSerializer");rL=QA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Pf,"serialize");a(ia,"serializeMessage");a(ZA,"asyncSerialization");a(eR,"hasAsyncSerialization");a(qJ,"streamToBuffer");$J=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(VJ,"isBufferEncoding");a(KJ,"parseContentType");a(no,"getDeserializer");a(YJ,"deserializerUnknownType");a(WJ,"transformIterable");a(op,"toCsvStream")});var rR={};Ue(rR,{start:()=>r4});function zJ(e){if(e.kind!==Le.Kind.OPERATION_DEFINITION&&e.kind!==Le.Kind.FRAGMENT_DEFINITION)throw new br(`Unexpected non-executable definition type ${e.kind}.`)}function lL(e){if(typeof e!="object"||e===null)throw new Si("Request body must be an object.");if(!("query"in e))throw new Si("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Si("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Si("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Si("Request body `operationName` field must be a string.")}function tR(e){return parseInt(e.value,10)}function dL(e){return parseFloat(e.value)}function fL(e,t,r){let n=r.get(e.name.value);return _L(n)?hL(n,t):{attribute:t,value:n}}function _L(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function hL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],_L(n)?hL(n,t):{attribute:t,value:n}))}function QJ(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Le.Kind.NULL:return{attribute:t,value:null};case Le.Kind.INT:return{attribute:t,value:tR(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:dL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return fL(e.value,t,r);case Le.Kind.OBJECT:return mL(e.value,t,r);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new br(`Value type, ${e.value.kind}, is not supported.`)}}function mL(e,t,r){return e.fields.flatMap(n=>QJ(n,t,r))}function jJ(e,t){switch(e.value.kind){case Le.Kind.NULL:return{attribute:e.name.value,value:null};case Le.Kind.INT:return{attribute:e.name.value,value:tR(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:dL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return fL(e.value,e.name.value,t);case Le.Kind.OBJECT:return mL(e.value,[e.name.value],t);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new br(`Argument type, ${e.value.kind}, is not supported.`)}}function JJ(e,t){return e.flatMap(r=>jJ(r,t))}function cp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Le.Kind.FIELD:return r;case Le.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new br(`Fragment \`${n}\` not found.`);return cp(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return cp(r.selectionSet,t)}})}function pL(e,t){return cp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:pL(r.selectionSet,t)}:r.name.value)}async function XJ(e,t,r,n){let s=fs.getMatch(e.name.value,"graphql");if(s===void 0)throw new br(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:pL(e.selectionSet,r),conditions:JJ(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 EL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return tR(e);case Le.Kind.FLOAT:return parseFloat(e.value);case Le.Kind.STRING:case Le.Kind.BOOLEAN:return e.value;case Le.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:EL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new br(`Value type, ${e.kind}, is not supported.`)}}function ZJ(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=EL(n.defaultValue)),n.type.kind===Le.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new br(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function e4(e,t,r,n){if(e.operation===Le.OperationTypeNode.SUBSCRIPTION)throw new br("Subscriptions are not supported.");if(e.operation===Le.OperationTypeNode.MUTATION)throw new br("Mutations are not supported yet.");let s=ZJ(e.variableDefinitions,t),i=await Promise.all(cp(e.selectionSet,r).map(c=>XJ(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function uL({query:e,variables:t={},operationName:r},n){let s=Le.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(zJ(u),u.kind===Le.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new br("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 br(`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 br("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new br(`Operation \`${r}\` not found.`);let l=await e4(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function t4(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 lL(r),uL(r,e)}case"POST":{let r=await no(e.headers.get("content-type"),!0)(e._nodeRequest);return lL(r),uL(r,e)}default:throw new Si("Method Not Allowed",405,{Allow:"GET, POST"})}}function r4(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await t4(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Si)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof br)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 Si)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof br)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 Le,br,Si,gL=Re(()=>{Le=v(require("graphql"));so();tu();a(zJ,"assertExecutableDefinitionNode");a(lL,"assertRequestParams");a(tR,"processIntValueNode");a(dL,"processFloatValueNode");a(fL,"processVariableNode");a(_L,"isObject");a(hL,"transformObjectIntoQueryCondition");a(QJ,"processObjectFieldNode");a(mL,"processObjectValueNode");a(jJ,"processArgumentNode");a(JJ,"buildConditionsQuery");a(cp,"fillInFragments");a(pL,"buildSelectQuery");a(XJ,"processFieldNode");a(EL,"processConstValueNode");a(ZJ,"resolveVariables");a(e4,"executeOperation");a(uL,"resolver");br=class extends Error{static{a(this,"GraphQLQueryingError")}},Si=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(t4,"graphqlQueryingHandler");a(r4,"start")});var Ai=C((TRe,AL)=>{"use strict";var TL=ie(),SL=(k(),P(q)),ru=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ti=require("joi"),oa={schema_format:{pattern:ru,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},n4=Ti.alternatives(Ti.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ti.number(),Ti.array()).required(),s4=Ti.alternatives(Ti.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ti.number()),i4=Ti.alternatives(Ti.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ti.number()).required();function o4(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oa.schema_length.maximum?`'${e}' maximum of 250 characters`:ru.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(o4,"checkValidTable");function a4(e,t){return TL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(a4,"validateSchemaExists");function c4(e,t){let r=t.state.ancestors[0].schema;return TL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(c4,"validateTableExists");function l4(e,t){return e.toLowerCase()===SL.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${SL.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(l4,"validateSchemaName");AL.exports={common_validators:oa,schema_regex:ru,hdb_schema_table:n4,validateSchemaExists:a4,validateTableExists:c4,validateSchemaName:l4,checkValidTable:o4,hdb_database:s4,hdb_table:i4}});var ot=C((RRe,RL)=>{"use strict";var mn=require("validate.js");mn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||mn.validators.type.checks[t](e)?null:` must be a '${t}' value`};mn.validators.type.checks={Object:a(function(e){return mn.isObject(e)&&!mn.isArray(e)},"Object"),Array:mn.isArray,Integer:mn.isInteger,Number:mn.isNumber,String:mn.isString,Date:mn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};mn.validators.hasValidFileExt=function(e,t){return mn.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};RL.exports={validateObject:u4,validateObjectAsync:d4,validateBySchema:f4};function u4(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=mn(e,t,{format:"flat"});return r?new Error(r):null}a(u4,"validateObject");async function d4(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await mn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(d4,"validateObjectAsync");function f4(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(f4,"validateBySchema")});var sR=C((bRe,bL)=>{var{hdb_table:_4,hdb_database:yL}=Ai(),h4=ot(),nR=require("joi"),m4={undefined:"undefined",null:"null"},p4=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||m4[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"),E4=nR.object({database:yL,schema:yL,table:_4,records:nR.array().items(nR.object().custom(p4)).required()});bL.exports=function(e){return h4.validateBySchema(e,E4)}});var NL=C((NRe,OL)=>{"use strict";var iR=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")}};OL.exports=iR});var IL=C((IRe,wL)=>{"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}};wL.exports=oR});var ML={};Ue(ML,{HAS_EXPIRATION:()=>fp,HAS_RESIDENCY_ID:()=>fR,HAS_STRUCTURE_UPDATE:()=>mp,LAST_TIMESTAMP_PLACEHOLDER:()=>vf,LOCAL_TIMESTAMP:()=>g4,METADATA:()=>bc,NEW_TIMESTAMP_PLACEHOLDER:()=>PL,NO_TIMESTAMP:()=>up,PENDING_LOCAL_TIME:()=>_R,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>dR,RecordEncoder:()=>uR,TIMESTAMP_ASSIGN_LAST:()=>T4,TIMESTAMP_ASSIGN_NEW:()=>DL,TIMESTAMP_ASSIGN_PREVIOUS:()=>LL,TIMESTAMP_PLACEHOLDER:()=>lp,TIMESTAMP_RECORD_PREVIOUS:()=>aR,handleLocalTimeForGets:()=>pp,recordUpdater:()=>hR,removeEntry:()=>wc});function R4(){return Mf[0]=Mf[0]^64,S4.getFloat64(0)}function pp(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?.[bc];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?.[bc]>=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[bc];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,yc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<yc.length;u++){let f=yc[u].deref();(!f||f.isDone||f.isCommitted)&&yc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function hR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,_){l==null?Rc=up:d?Rc=i?.localTime?aR|LL:up:Rc=l?i?.localTime?aR|16384:DL|16384:up;let h=u?.expiresAt;if(h>=0&&(c|=fp),Lf=c,cR=h,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:Rc>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(lR=E,Lf|=fR,g|=Ic),R!==E&&(g|=Cc,R||(R=0)),c&fp&&(g|=xf),u?.originatingOperation&&(g|=Uf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&f!=="message"&&i.metadataFlags&vr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&aa(i.value);let T;if(s!==void 0&&(T=hp(()=>e.put(n,s,m),n,e.rootStore),Nc&&(g|=vr)),l){let N=u?.user?.username;if(_&&(hp(()=>e.encoder.encode(_),n,e.rootStore),Nc&&(g|=vr)),e.encoder.hasStructureUpdate&&(g|=mp,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,Oc(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,Df,g,E,R,h),{ifVersion:S}),T}}T=r.put(s===void 0?PL:vf,Oc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,Df,g,E,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function wc(e,t,r){if(t)return t.value&&t.metadataFlags&vr&&!e.auditStore?.getBinaryFast(t.localTime)&&aa(t.value),e.remove(t.key,r)}var CL,dp,lp,vf,dR,PL,g4,bc,Mf,S4,up,DL,T4,LL,aR,fp,fR,_R,mp,A4,Df,Rc,Lf,cR,lR,uR,yc,nu=Re(()=>{CL=require("msgpackr");Ri();dp=v(ee());hn();hn();lp=new Uint8Array([1,1,1,1,4,64,0,0]),vf=new Uint8Array([1,1,1,1,1,0,0,0]),dR=new Uint8Array([1,1,1,1,3,64,0,0]),PL=new Uint8Array([1,1,1,1,0,64,0,0]),g4=Symbol("local-timestamp"),bc=Symbol("metadata"),Mf=new Uint8Array(8),S4=new DataView(Mf.buffer,0,8),up=0,DL=0,T4=1,LL=3,aR=4,fp=16,fR=32,_R=1,mp=256,Rc=0,Lf=-1,cR=-1,lR=0,uR=class extends CL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Rc||Lf>=0){let o=0,c=Rc;c&&(o+=8,Rc=0);let l=Lf,u=cR,f=lR;l>=0&&(o+=4,Lf=-1,u>=0&&(o+=8,cR=-1),f&&(o+=4,lR=0));let d=A4=r.call(this,s,i|2048|o);Df=d.subarray((d.start||0)+o,d.end);let _=d.start||0;return c&&(lp[4]=c,lp[5]=c>>8,d.set(lp,_),_+=8),Nc&&(l|=vr),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,l|_p<<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 Df=r.call(this,s,i),Df};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(Mf,0,c),c+=8;else for(let _=0;_<8;_++)Mf[_]=t[c++];l=R4(),i=t[c]}let u,f;i<32&&(i===_p?(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&fp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&fR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=io(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[bc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:io(()=>super.decode(t,r),this.rootStore)}catch(c){return dp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(R4,"getTimestamp");a(pp,"handleLocalTimeForGets");yc=[];setInterval(()=>{for(let e=0;e<yc.length;e++){let t=yc[e].deref();!t||t.isDone||t.isCommitted?yc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(dp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):dp.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(hR,"recordUpdater");a(wc,"removeEntry")});var Bf=C((vRe,UL)=>{"use strict";var vL=le(),y4=(k(),P(q)),{RecordEncoder:b4}=(nu(),P(ML));vL.initSync();var O4=vL.get(y4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mR=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=O4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:b4})}};UL.exports=mR});var Hf=C((xRe,xL)=>{"use strict";var kn=le(),_s=(k(),P(q));kn.initSync();var Ep=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=kn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||kn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||kn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=kn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),kn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=kn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=kn.get(_s.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};xL.exports=Ep;Ep.MAX_DBS=1e4});var _t=C((HRe,YL)=>{"use strict";var ER=require("lmdb"),Fs=require("fs-extra"),Fn=require("path"),gp=un(),kL=ee(),pn=Un().LMDB_ERRORS_ENUM,Sp=IL(),gR=Bf(),FL=Hf(),ca=Ft(),BL=(k(),P(q)),{table:N4,resetDatabases:w4}=(xe(),P(ct)),HL=le(),Gs=ca.INTERNAL_DBIS_NAME,GL=ca.DBI_DEFINITION_NAME,I4="data.mdb",C4="lock.mdb",kf=".mdb",P4="-lock",pR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[ca.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ca.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new ER.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Tp(e,t){if(e===void 0)throw new Error(pn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(pn.ENV_NAME_REQUIRED)}a(Tp,"pathEnvNameValidation");async function SR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(pn.INVALID_BASE_PATH):n}try{let n=Fn.join(e,t+kf);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Fn.join(e,t,I4),Fs.constants.R_OK|Fs.constants.F_OK),Fn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(pn.INVALID_ENVIRONMENT)}else throw new Error(pn.INVALID_ENVIRONMENT);throw n}}a(SR,"validateEnvironmentPath");function Ap(e,t){if(gp.validateEnv(e),t===void 0)throw new Error(pn.DBI_NAME_REQUIRED)}a(Ap,"validateEnvDBIName");async function D4(e,t,r=!1,n=!1){Tp(e,t);let s=Fn.basename(e);t=t.toString();let i=HL.get(BL.CONFIG_PARAMS.DATABASES);i||HL.setProperty(BL.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await SR(e,t,n),qL(e,t,r)}catch(o){if(o.message===pn.INVALID_ENVIRONMENT){let c=Fn.join(e,t);await Fs.mkdirp(n?c:e);let l=new FL(n?c:c+kf,!1),u=ER.open(l);u.dbis=Object.create(null);let f=new gR(!1);u.openDB(Gs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=TR(e,t,r);return u[ca.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(D4,"createEnvironment");async function L4(e,t,r,n=!0){Tp(e,t),t=t.toString();let s=Fn.join(e,t);return N4({table:t,database:Fn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(L4,"copyEnvironment");async function qL(e,t,r=!1){Tp(e,t),t=t.toString();let n=TR(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 SR(e,t),i=Fn.join(e,t+kf),o=s!=i,c=new FL(s,o),l=ER.open(c);l.dbis=Object.create(null);let u=VL(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[ca.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(qL,"openEnvironment");async function M4(e,t,r=!1){Tp(e,t),t=t.toString();let n=Fn.join(e,t+kf),s=await SR(e,t);if(global.lmdb_map!==void 0){let i=TR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await $L(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+P4:Fn.join(Fn.dirname(s),C4))}a(M4,"deleteEnvironment");async function $L(e){gp.validateEnv(e);let t=e[ca.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a($L,"closeEnvironment");function TR(e,t,r=!1){let s=`${Fn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(TR,"getCachedEnvironmentName");function v4(e){gp.validateEnv(e);let t=Object.create(null),r=hs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Sp,s)}catch{kL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(v4,"listDBIDefinitions");function VL(e){gp.validateEnv(e);let t=[],r=hs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(VL,"listDBIs");function U4(e,t){let n=hs(e,Gs).getEntry(t),s=new Sp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{kL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(U4,"getDBIDefinition");function KL(e,t,r,n=!r){if(Ap(e,t),t=t.toString(),t===Gs)throw new Error(pn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===pn.DBI_DOES_NOT_EXIST){let i=new gR(r,n===!0),o=e.openDB(t,i),c=new Sp(r===!0,n);return o[GL]=c,hs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(KL,"createDBI");function hs(e,t){if(Ap(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=U4(e,t):r=new Sp,r===void 0)throw new Error(pn.DBI_DOES_NOT_EXIST);let n;try{let s=new gR(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(pn.DBI_DOES_NOT_EXIST):s}return n[GL]=r,e.dbis[t]=n,n}a(hs,"openDBI");function x4(e,t){Ap(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[ca.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(x4,"statDBI");async function B4(e,t){try{let r=Fn.join(e,t+kf);return(await Fs.stat(r)).size}catch{throw new Error(pn.INVALID_ENVIRONMENT)}}a(B4,"environmentDataSize");function H4(e,t){if(Ap(e,t),t=t.toString(),t===Gs)throw new Error(pn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,Gs).removeSync(t)}a(H4,"dropDBI");function k4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{hs(e,i)}catch(o){if(o.message===pn.DBI_DOES_NOT_EXIST)KL(e,i,i!==t,i===t),n=!0;else throw o}}n&&w4()}a(k4,"initializeDBIs");YL.exports={openDBI:hs,openEnvironment:qL,createEnvironment:D4,listDBIs:VL,listDBIDefinitions:v4,createDBI:KL,dropDBI:H4,statDBI:x4,deleteEnvironment:M4,initializeDBIs:k4,TransactionCursor:pR,environmentDataSize:B4,copyEnvironment:L4,closeEnvironment:$L}});var zL=C((FRe,WL)=>{"use strict";var AR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};WL.exports=AR});var jL=C((qRe,QL)=>{"use strict";var RR=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}};QL.exports=RR});var XL=C((VRe,JL)=>{"use strict";var yR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};JL.exports=yR});var Dc=C((QRe,tM)=>{"use strict";var F4=_t(),G4=zL(),q4=jL(),$4=XL(),yi=un(),Ff=Un().LMDB_ERRORS_ENUM,V4=Ft(),oo=(k(),P(q)),K4=ie(),Y4=require("uuid"),YRe=require("lmdb"),{handleHDBError:W4,hdb_errors:z4}=he(),{OVERFLOW_MARKER:WRe,MAX_SEARCH_KEY_LENGTH:zRe}=V4,ZL=le();ZL.initSync();var Rp=ZL.get(oo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),bR=oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pc=oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Q4(e,t,r,n,s=yi.getNextMonotonicTime()){IR(e,t,r,n),OR(e,t,r);let i=new G4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];eM(u,!0,s);let f=j4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return NR(o,c,n,i,s)}a(Q4,"insertRecords");function j4(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][oo.FUNC_VAL],n[o]=c)}let l=yi.getIndexedValues(c),u=e.dbis[o];if(l){Rp&&u.prefetch(l.map(f=>({key:f,value:s})),yp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Rp&&e.dbis[t].prefetch([s],yp),e.dbis[t].put(s,n,n[Pc])})}a(j4,"insertRecord");function J4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(J4,"removeSkippedRecords");function eM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Pc]))&&(e[Pc]=r||(r=yi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[bR]))&&(e[bR]=r||yi.getNextMonotonicTime()):delete e[bR]}a(eM,"setTimestamps");function OR(e,t,r){r.indexOf(oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),F4.initializeDBIs(e,t,r)}a(OR,"initializeTransaction");async function X4(e,t,r,n,s=yi.getNextMonotonicTime()){IR(e,t,r,n),OR(e,t,r);let i=new q4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],_;try{_=wR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(_),l.push(d)}return NR(c,l,n,i,s,o)}a(X4,"updateRecords");async function Z4(e,t,r,n,s=yi.getNextMonotonicTime()){try{IR(e,t,r,n)}catch(l){throw W4(l,l.message,z4.HTTP_STATUS_CODES.BAD_REQUEST)}OR(e,t,r);let i=new $4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;K4.isEmpty(u[t])?(f=Y4.v4(),u[t]=f):f=u[t];let d=wR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return NR(o,c,n,i,s)}a(Z4,"upsertRecords");async function NR(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||yi.getNextMonotonicTime(),J4(r,i),n}a(NR,"finalizeWrite");function wR(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(eM(r,!f,o),Number.isInteger(r[Pc])&&u[Pc]>r[Pc])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][oo.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=yi.getIndexedValues(R);if(E){Rp&&g.prefetch(E.map(T=>({key:T,value:n})),yp);for(let T=0,N=E.length;T<N;T++)g.remove(E[T],n)}if(E=yi.getIndexedValues(S),E){Rp&&g.prefetch(E.map(T=>({key:T,value:n})),yp);for(let T=0,N=E.length;T<N;T++)g.put(E[T],n)}}let h={...u,...r};c.put(n,h,h[Pc])},"do_put");return l?d=c.ifVersion(n,l.version,_):d=c.ifNoExists(n,_),d.then(h=>h?!0:wR(e,t,r,n,s,i,o))}a(wR,"updateUpsertRecord");function e3(e,t,r){if(yi.validateEnv(e),t===void 0)throw new Error(Ff.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ff.WRITE_ATTRIBUTES_REQUIRED):new Error(Ff.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(e3,"validateBasic");function IR(e,t,r,n){if(e3(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ff.RECORDS_REQUIRED):new Error(Ff.RECORDS_MUST_BE_ARRAY)}a(IR,"validateWrite");function yp(){}a(yp,"noop");tM.exports={insertRecords:Q4,updateRecords:X4,upsertRecords:Z4}});var ao=C((JRe,t3)=>{t3.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 nM=C((XRe,rM)=>{"use strict";var r3=require("uuid"),CR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||r3.v4(),this.schema_table=`${this.schema}.${this.table}`}};rM.exports=CR});var bp=C((eye,sM)=>{"use strict";var n3=nM(),PR=class extends n3{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}};sM.exports=PR});var oM=C((rye,iM)=>{"use strict";iM.exports=i3;var s3="inserted";function i3(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===s3?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(i3,"returnObject")});var Op=C((iye,cM)=>{"use strict";var o3=(k(),P(q)),DR=_t(),a3=Dc(),{getSystemSchemaPath:c3,getSchemaPath:l3}=gt(),sye=ao(),{validateBySchema:u3}=ot(),Gf=require("joi"),d3=bp(),f3=oM(),{handleHDBError:_3,hdb_errors:h3,ClientError:m3}=he(),aM=ie(),{HTTP_STATUS_CODES:p3}=h3,E3="inserted";cM.exports=g3;async function g3(e){let t=u3(e,Gf.object({database:Gf.string(),schema:Gf.string(),table:Gf.string().required(),attribute:Gf.string().required()}));if(t)throw new m3(t.message);let r=!e.skip_table_check&&aM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw _3(new Error,r,p3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=aM.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 d3(e.schema,e.table,e.attribute,e.id);try{let i=await DR.openEnvironment(l3(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}`);DR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await DR.openEnvironment(c3(),o3.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await a3.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return f3(E3,c,{records:[s]},l)}catch(i){throw i}}a(g3,"lmdbCreateAttribute")});var qf=C((cye,uM)=>{"use strict";var co=ie(),lM=ee(),aye=sR(),{getDatabases:S3}=(xe(),P(ct)),{ClientError:Lc}=he();uM.exports=T3;function T3(e){if(co.isEmpty(e))throw new Lc("invalid update parameters defined.");if(co.isEmptyOrZeroLength(e.schema))throw new Lc("invalid schema specified.");if(co.isEmptyOrZeroLength(e.table))throw new Lc("invalid table specified.");if(!Array.isArray(e.records))throw new Lc("records must be an array");let t=S3()[e.schema]?.[e.table];if(co.isEmpty(t))throw new Lc(`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&&co.isEmptyOrZeroLength(o[r]))throw lM.error("a valid hash attribute must be provided with update record:",o),new Lc("a valid hash attribute must be provided with update record, check log for more info");if(!co.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw lM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Lc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!co.isEmpty(o[r])&&o[r]!==""&&n.has(co.autoCast(o[r]))&&(o.skip=!0),n.add(co.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(T3,"insertUpdateValidate")});var fM=C((uye,dM)=>{"use strict";var LR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};dM.exports=LR});var mM=C((fye,hM)=>{"use strict";var MR=_t(),A3=ee(),_M=Un().LMDB_ERRORS_ENUM;hM.exports=R3;async function R3(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 MR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==_M.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await MR.closeEnvironment(global.lmdb_map[n]),await MR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==_M.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){A3.error(t)}}a(R3,"cleanLMDBMap")});var IM=C((mye,wM)=>{"use strict";var vR=require("recursive-iterator"),y3=require("alasql"),UR=require("clone"),pM=ie(),{handleHDBError:EM,hdb_errors:b3}=he(),{HDB_ERROR_MSGS:gM,HTTP_STATUS_CODES:SM}=b3,{getDatabases:O3}=(xe(),P(ct)),N3=["DISTINCT_ARRAY"],TM=Symbol("validateTables"),xR=Symbol("validateTable"),hye=Symbol("getAllColumns"),AM=Symbol("validateAllColumns"),Np=Symbol("findColumn"),RM=Symbol("validateOrderBy"),$f=Symbol("validateSegment"),BR=Symbol("validateColumn"),yM=Symbol("setColumnsForTable"),bM=Symbol("checkColumnsForAsterisk"),OM=Symbol("validateGroupBy"),NM=Symbol("hasColumns"),HR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[TM](),this[bM](),this[AM]()}[TM](){if(this[NM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xR](t.table)})}}[NM](){let t=!1,r=new vR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=O3();if(!r[t.databaseid])throw EM(new Error,gM.SCHEMA_NOT_FOUND(t.databaseid),SM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw EM(new Error,gM.TABLE_NOT_FOUND(t.databaseid,t.tableid),SM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=UR(s);i.table=UR(t),this.attributes.push(i)})}[Np](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)}[bM](){let t=new vR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[yM](r.tableid)}[yM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new y3.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[AM](){this[$f](this.statement.columns,!1),this[$f](this.statement.joins,!1),this[$f](this.statement.where,!1),this[OM](this.statement.group,!1),this[$f](this.statement.order,!0)}[$f](t,r){if(!t)return;let n=new vR(t),s=[];for(let{node:i,path:o}of n)!pM.isEmpty(i)&&!pM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[RM](i):s.push(this[BR](i)));return s}[OM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&N3.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=UR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Np](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[Np](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`}[RM](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[BR](t)}[BR](t){let r=this[Np](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]}};wM.exports=HR});var LM=C((Eye,DM)=>{"use strict";var CM=require("lodash"),Vf=require("mathjs"),w3=require("jsonata"),PM=ie();DM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?CM.uniqWith(e,CM.isEqual):e,"distinct_array"),searchJSON:I3,mad:Kf.bind(null,Vf.mad),mean:Kf.bind(null,Vf.mean),mode:Kf.bind(null,Vf.mode),prod:Kf.bind(null,Vf.prod),median:Kf.bind(null,Vf.median)};function Kf(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(Kf,"aggregateFunction");function I3(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(PM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),PM.isEmpty(this.__ala__.res[r])){let n=w3(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(I3,"searchJSON")});var vM=C((Sye,MM)=>{"use strict";var er=require("moment"),kR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;MM.exports={current_date:a(()=>er().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>er().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return er(e).utc().format("YYYY");case"month":return er(e).utc().format("MM");case"day":return er(e).utc().format("DD");case"hour":return er(e).utc().format("HH");case"minute":return er(e).utc().format("mm");case"second":return er(e).utc().format("ss");case"millisecond":return er(e).utc().format("SSS");default:break}},"extract"),date:a(e=>er(e).utc().format(kR),"date"),date_format:a((e,t)=>er(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>er(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>er(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=er(e).utc(),s=er(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>er().utc().valueOf(),"now"),get_server_time:a(()=>er().format(kR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(kR),"offset_utc")}});var HM=C((Aye,BM)=>{"use strict";var C3=require("@turf/area"),P3=require("@turf/length"),D3=require("@turf/circle"),L3=require("@turf/difference"),M3=require("@turf/distance"),v3=require("@turf/boolean-contains"),U3=require("@turf/boolean-equal"),x3=require("@turf/boolean-disjoint"),B3=require("@turf/helpers"),UM=(k(),P(q)),Ke=ie(),lo=ee();BM.exports={geoArea:H3,geoLength:k3,geoCircle:F3,geoDifference:G3,geoDistance:xM,geoNear:q3,geoContains:$3,geoEqual:V3,geoCrosses:K3,geoConvert:Y3};function H3(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return C3.default(e)}catch(t){return lo.trace(t,e),NaN}}a(H3,"geoArea");function k3(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return P3.default(e,{units:t||"kilometers"})}catch(r){return lo.trace(r,e),NaN}}a(k3,"geoLength");function F3(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return D3.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(F3,"geoCircle");function G3(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 L3(e,t)}catch(r){return lo.trace(r,e,t),NaN}}a(G3,"geoDifference");function xM(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 M3.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(xM,"geoDistance");function q3(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 xM(e,t,n)<=r}catch(s){return lo.trace(s,e,t),!1}}a(q3,"geoNear");function $3(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 v3.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a($3,"geoContains");function V3(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 U3.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(V3,"geoEqual");function K3(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!x3.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(K3,"geoCrosses");function Y3(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(UM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(UM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),B3[t](e,r)}a(Y3,"geoConvert")});var wp=C((yye,kM)=>{var Mc=LM(),Gn=vM(),bi=HM();kM.exports=e=>{e.aggr.mad=e.aggr.MAD=Mc.mad,e.aggr.mean=e.aggr.MEAN=Mc.mean,e.aggr.mode=e.aggr.MODE=Mc.mode,e.aggr.prod=e.aggr.PROD=Mc.prod,e.aggr.median=e.aggr.MEDIAN=Mc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Mc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Mc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var $M=C((bye,qM)=>{"use strict";var Yf=require("lodash"),En=require("alasql");En.options.cache=!1;var W3=wp(),FM=require("clone"),Ip=require("recursive-iterator"),ke=ee(),Je=ie(),su=qn(),z3=(k(),P(q)),{hdb_errors:Q3}=he(),{getDatabases:GM}=(xe(),P(ct)),j3="IS NULL",qs="There was a problem performing this search. Please check the logs and try again.";W3(En);var FR=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(qs)}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(qs)}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(qs)}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(qs)}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(qs)}}_getColumns(){let t=new Ip(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(FM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Yf.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=GM()[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 Ip(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 En.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 En.yy.LogicValue({value:i}):n instanceof En.yy.StringValue&&Je.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new En.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 Ip(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(z3.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&&Yf.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 En.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(FM(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(j3)>-1&&this.tables.forEach(s=>{let i={columnid:GM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Yf.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 su.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(qs)}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 su.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(qs)}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 su.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(qs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await su.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(qs)}}}_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 En.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 En.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new En.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 En.yy.FuncValue:new En.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 En.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=Yf.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 Ip(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=Yf.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(qs)}}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 su.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 En.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(Q3.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 su.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(qs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};qM.exports=FR});var Wr=C((Nye,VM)=>{"use strict";var J3=IM();VM.exports={searchByConditions:Z3,searchByHash:eX,searchByValue:tX,search:rX};var GR=qn(),{transformReq:qR}=ie(),X3=$M();async function Z3(e){return qR(e),GR.searchByConditions(e)}a(Z3,"searchByConditions");async function eX(e){qR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of GR.searchByHash(e))r&&t.push(r);return t}a(eX,"searchByHash");async function tX(e){qR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of GR.searchByValue(e))t.push(r);return t}a(tX,"searchByValue");function rX(e,t){try{let r=new J3(e);r.validate(),new X3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(rX,"search")});var uo=C((Iye,zM)=>{"use strict";var Wf=require("crypto"),nX=le(),{CONFIG_PARAMS:sX}=(k(),P(q)),YM="aes-256-cbc",iX=32,oX=16,$R=64,WM=32,aX=$R+WM,KM=new Map;zM.exports={encrypt:cX,decrypt:lX,createNatsTableStreamName:uX};function cX(e){let t=Wf.randomBytes(iX),r=Wf.randomBytes(oX),n=Wf.createCipheriv(YM,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(cX,"encrypt");function lX(e){let t=e.substr(0,$R),r=e.substr($R,WM),n=e.substr(aX,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Wf.createDecipheriv(YM,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(lX,"decrypt");function uX(e,t){let r=nX.get(sX.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=KM.get(r);return n||(n=Wf.createHash("md5").update(r).digest("hex"),KM.set(r,n)),n}a(uX,"createNatsTableStreamName")});var fo=C((Dye,XM)=>{"use strict";var Pye=Wr(),zf=ee(),{validateBySchema:QM}=ot(),vc=require("joi"),dX=uo(),Cp=ie(),{handleHDBError:Pp,hdb_errors:fX,ClientError:jM}=he(),{HDB_ERROR_MSGS:Dp,HTTP_STATUS_CODES:VR}=fX,JM=le();JM.initSync();var{getDatabases:KR}=(xe(),P(ct)),_X=require("fs-extra"),hX=(k(),P(q));XM.exports={describeAll:mX,describeTable:Lp,describeSchema:pX};async function mX(e={}){try{let t=Cp.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=KR(),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 Lp({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 Lp({schema:d,table:h,exact_count:u},S)}m&&l.push(m)}catch(m){zf.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 zf.error("Got an error in describeAll"),zf.error(t),Pp(new Error,Dp.DESCRIBE_ALL_ERR)}}a(mX,"describeAll");async function Lp(e,t){Cp.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=QM(e,vc.object({database:vc.string(),table:vc.string().required(),exact_count:vc.boolean().strict()}));if(i)throw new jM(i.message);let c=KR()[r];if(!c)throw Pp(new Error,Dp.SCHEMA_NOT_FOUND(e.schema),VR.NOT_FOUND);let l=c[n];if(!l)throw Pp(new Error,Dp.TABLE_NOT_FOUND(e.schema,e.table),VR.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 _X.stat(l.primaryStore.env.path)).size}catch(h){zf.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")),JM.get(hX.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(_.clustering_stream_name=dX.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){zf.warn(`unable to stat table dbi due to ${h}`)}return _}a(Lp,"descTable");async function pX(e){Cp.transformReq(e);let t=QM(e,vc.object({database:vc.string(),exact_count:vc.boolean().strict()}));if(t)throw new jM(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=KR()[n];if(!i)throw Pp(new Error,Dp.SCHEMA_NOT_FOUND(e.schema),VR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Cp.isEmpty(l)||l.describe){let u=await Lp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(pX,"describeSchema")});var $s=C((Uye,nv)=>{var EX=ao(),{callbackify:ev,promisify:gX}=require("util"),{getDatabases:tv}=(xe(),P(ct));nv.exports={setSchemaDataToGlobal:ZM,getTableSchema:SX,getSystemSchema:TX,setSchemaDataToGlobalAsync:gX(ZM)};var rv=fo(),Mye=ev(rv.describeAll),vye=ev(rv.describeTable);function ZM(e){global.hdb_schema=tv(),e&&e()}a(ZM,"setSchemaDataToGlobal");function SX(e,t,r){let n=tv()[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(SX,"getTableSchema");function TX(){return EX}a(TX,"getSystemSchema")});var WR=C((Bye,ov)=>{var AX=ot(),YR=require("joi"),{hdb_table:RX,hdb_database:sv}=Ai(),iv={schema:sv,database:sv,table:RX},yX={date:YR.date().iso().required()},bX={timestamp:YR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ov.exports=function(e,t){let r=t==="timestamp"?{...iv,...bX}:{...iv,...yX},n=YR.object(r);return AX.validateBySchema(e,n)}});var lv=C((Hye,cv)=>{var OX=ot(),zR=require("joi"),{hdb_table:NX,hdb_database:av}=Ai(),wX=zR.object({schema:av,database:av,table:NX,hash_values:zR.array().required(),ids:zR.array()});cv.exports=function(e){return OX.validateBySchema(e,wX)}});var XR=C((kye,uv)=>{"use strict";var QR=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}},jR=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}},JR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};uv.exports={InsertObject:QR,NoSQLSeachObject:jR,DeleteResponseObject:JR}});var Bc=C((Gye,mv)=>{"use strict";var fv=WR(),IX=lv(),Uc=ie(),dv=require("moment"),_v=ee(),{promisify:CX,callbackify:PX}=require("util"),xc=(k(),P(q)),DX=$s(),ZR=CX(DX.getTableSchema),ey=qn(),{DeleteResponseObject:LX}=XR(),{handleHDBError:la,hdb_errors:MX}=he(),{HDB_ERROR_MSGS:Mp,HTTP_STATUS_CODES:ua}=MX,vX="records successfully deleted",UX=PX(hv);mv.exports={delete:UX,deleteRecord:hv,deleteFilesBefore:xX,deleteAuditLogsBefore:BX};async function xX(e){let t=fv(e,"date");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Uc.transformReq(e),!dv(e.date,dv.ISO_8601).isValid())throw la(new Error,Mp.INVALID_DATE,ua.BAD_REQUEST,xc.LOG_LEVELS.ERROR,Mp.INVALID_DATE,!0);let n=Uc.checkSchemaTableExist(e.schema,e.table);if(n)throw la(new Error,n,ua.NOT_FOUND,xc.LOG_LEVELS.ERROR,n,!0);let s=await ey.deleteRecordsBefore(e);if(await ZR(e.schema,e.table),_v.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(xX,"deleteFilesBefore");async function BX(e){let t=fv(e,"timestamp");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Uc.transformReq(e),isNaN(e.timestamp))throw la(new Error,Mp.INVALID_VALUE("Timestamp"),ua.BAD_REQUEST,xc.LOG_LEVELS.ERROR,Mp.INVALID_VALUE("Timestamp"),!0);let r=Uc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,xc.LOG_LEVELS.ERROR,r,!0);let n=await ey.deleteAuditLogsBefore(e);return await ZR(e.schema,e.table),_v.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(BX,"deleteAuditLogsBefore");async function hv(e){e.ids&&(e.hash_values=e.ids);let t=IX(e);if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);Uc.transformReq(e);let r=Uc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,xc.LOG_LEVELS.ERROR,r,!0);try{await ZR(e.schema,e.table);let n=await ey.deleteRecords(e);return Uc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${vX}`),n}catch(n){if(n.message===xc.SEARCH_NOT_FOUND_MESSAGE){let s=new LX;return s.message=xc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(hv,"deleteRecord")});var vp={};Ue(vp,{HASH_FUNCTION:()=>Jf,hash:()=>ny,validate:()=>sy});function ty(e=jf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Qf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function ny(e,t=Jf[Ev?.toUpperCase()]??"sha256"){return ry[t](e)}function sy(e,t,r=Jf[Ev?.toUpperCase()]??"sha256"){return e?HX[r](e,t):!1}var Qf,iu,pv,Ev,jf,gv,Jf,ry,HX,Up=Re(()=>{Qf=v(require("node:crypto")),iu=v(require("argon2")),pv=v(le());k();Ev=(0,pv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),jf=16,gv=9,Jf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(Jf||{});a(ty,"generateSalt");ry={md5:a((e,t=void 0)=>{t=t??ty(gv);let r=Qf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??ty(jf);let r=Qf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=ty(jf),r=await iu.hash(e,{type:iu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},HX={md5:a((e,t)=>{let r=e.slice(0,gv);return e===ry.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,jf);return e===ry.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await iu.verify(e.slice(jf),t),"argon2id")};a(ny,"hash");a(sy,"validate")});var Tv=C((Kye,Sv)=>{var iy=ot(),zr={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 kX(e){return zr.password.presence=!0,zr.username.presence=!0,zr.role.presence=!0,zr.active.presence=!0,iy.validateObject(e,zr)}a(kX,"addUserValidation");function FX(e){return zr.password.presence=!1,zr.username.presence=!0,zr.role.presence=!1,zr.active.presence=!1,iy.validateObject(e,zr)}a(FX,"alterUserValidation");function GX(e){return zr.password.presence=!1,zr.username.presence=!0,zr.role.presence=!1,zr.active.presence=!1,iy.validateObject(e,zr)}a(GX,"dropUserValidation");Sv.exports={addUserValidation:kX,alterUserValidation:FX,dropUserValidation:GX}});var Ct=C((zye,Rv)=>{"use strict";var{platform:Wye}=require("os"),qX="nats-server.zip",oy="nats-server",$X=process.platform==="win32"?`${oy}.exe`:oy,VX=/^[^\s.,*>]+$/,Av="__request__",KX=a(e=>`${e}.${Av}`,"REQUEST_SUBJECT"),YX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},WX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},zX={HUB:"hub.pid",LEAF:"leaf.pid"},QX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},jX={SUCCESS:"success",ERROR:"error"},JX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},XX={TXN:"txn",MSGID:"msgid"},ou={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},ZX={[ou.ERR]:1,[ou.WRN]:2,[ou.INF]:3,[ou.DBG]:4,[ou.TRC]:5},e6={debug:"-D",trace:"-DVV"};Rv.exports={NATS_SERVER_ZIP:qX,NATS_SERVER_NAME:oy,NATS_BINARY_NAME:$X,PID_FILES:zX,NATS_CONFIG_FILES:WX,SERVER_SUFFIX:QX,NATS_TERM_CONSTRAINTS_RX:VX,REQUEST_SUFFIX:Av,UPDATE_REMOTE_RESPONSE_STATUSES:jX,CLUSTER_STATUS_STATUSES:JX,REQUEST_SUBJECT:KX,SUBJECT_PREFIXES:XX,MSG_HEADERS:YX,LOG_LEVELS:ou,LOG_LEVEL_FLAGS:e6,LOG_LEVEL_HIERARCHY:ZX}});var ay=C(yv=>{"use strict";var t6={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
16
+ `},"serialize"),compressible:!1,q:.8});Yr.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()}});aL={type:"application/json",serializeStream:Nf,serialize:wf,deserialize:kJ,q:.5};Yr.set("*/*",aL);Yr.set("",aL);a(kJ,"tryJSONParse");a(Cf,"registerContentHandlers");FJ=require("fastify-plugin"),GJ=FJ(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=ap(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(ap,"findBestSerializer");rL=QA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Pf,"serialize");a(ia,"serializeMessage");a(ZA,"asyncSerialization");a(eR,"hasAsyncSerialization");a(qJ,"streamToBuffer");$J=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(VJ,"isBufferEncoding");a(KJ,"parseContentType");a(no,"getDeserializer");a(YJ,"deserializerUnknownType");a(WJ,"transformIterable");a(op,"toCsvStream")});var rR={};Ue(rR,{start:()=>r4});function zJ(e){if(e.kind!==Le.Kind.OPERATION_DEFINITION&&e.kind!==Le.Kind.FRAGMENT_DEFINITION)throw new br(`Unexpected non-executable definition type ${e.kind}.`)}function lL(e){if(typeof e!="object"||e===null)throw new Si("Request body must be an object.");if(!("query"in e))throw new Si("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Si("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Si("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Si("Request body `operationName` field must be a string.")}function tR(e){return parseInt(e.value,10)}function dL(e){return parseFloat(e.value)}function fL(e,t,r){let n=r.get(e.name.value);return _L(n)?hL(n,t):{attribute:t,value:n}}function _L(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function hL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],_L(n)?hL(n,t):{attribute:t,value:n}))}function QJ(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Le.Kind.NULL:return{attribute:t,value:null};case Le.Kind.INT:return{attribute:t,value:tR(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:dL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return fL(e.value,t,r);case Le.Kind.OBJECT:return mL(e.value,t,r);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new br(`Value type, ${e.value.kind}, is not supported.`)}}function mL(e,t,r){return e.fields.flatMap(n=>QJ(n,t,r))}function jJ(e,t){switch(e.value.kind){case Le.Kind.NULL:return{attribute:e.name.value,value:null};case Le.Kind.INT:return{attribute:e.name.value,value:tR(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:dL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return fL(e.value,e.name.value,t);case Le.Kind.OBJECT:return mL(e.value,[e.name.value],t);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new br(`Argument type, ${e.value.kind}, is not supported.`)}}function JJ(e,t){return e.flatMap(r=>jJ(r,t))}function cp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Le.Kind.FIELD:return r;case Le.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new br(`Fragment \`${n}\` not found.`);return cp(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return cp(r.selectionSet,t)}})}function pL(e,t){return cp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:pL(r.selectionSet,t)}:r.name.value)}async function XJ(e,t,r,n){let s=fs.getMatch(e.name.value,"graphql");if(s===void 0)throw new br(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:pL(e.selectionSet,r),conditions:JJ(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 EL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return tR(e);case Le.Kind.FLOAT:return parseFloat(e.value);case Le.Kind.STRING:case Le.Kind.BOOLEAN:return e.value;case Le.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:EL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new br(`Value type, ${e.kind}, is not supported.`)}}function ZJ(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=EL(n.defaultValue)),n.type.kind===Le.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new br(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function e4(e,t,r,n){if(e.operation===Le.OperationTypeNode.SUBSCRIPTION)throw new br("Subscriptions are not supported.");if(e.operation===Le.OperationTypeNode.MUTATION)throw new br("Mutations are not supported yet.");let s=ZJ(e.variableDefinitions,t),i=await Promise.all(cp(e.selectionSet,r).map(c=>XJ(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function uL({query:e,variables:t={},operationName:r},n){let s=Le.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(zJ(u),u.kind===Le.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new br("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 br(`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 br("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new br(`Operation \`${r}\` not found.`);let l=await e4(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function t4(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 lL(r),uL(r,e)}case"POST":{let r=await no(e.headers.get("content-type"),!0)(e._nodeRequest);return lL(r),uL(r,e)}default:throw new Si("Method Not Allowed",405,{Allow:"GET, POST"})}}function r4(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await t4(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Si)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof br)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 Si)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof br)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 Le,br,Si,gL=Re(()=>{Le=v(require("graphql"));so();tu();a(zJ,"assertExecutableDefinitionNode");a(lL,"assertRequestParams");a(tR,"processIntValueNode");a(dL,"processFloatValueNode");a(fL,"processVariableNode");a(_L,"isObject");a(hL,"transformObjectIntoQueryCondition");a(QJ,"processObjectFieldNode");a(mL,"processObjectValueNode");a(jJ,"processArgumentNode");a(JJ,"buildConditionsQuery");a(cp,"fillInFragments");a(pL,"buildSelectQuery");a(XJ,"processFieldNode");a(EL,"processConstValueNode");a(ZJ,"resolveVariables");a(e4,"executeOperation");a(uL,"resolver");br=class extends Error{static{a(this,"GraphQLQueryingError")}},Si=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(t4,"graphqlQueryingHandler");a(r4,"start")});var Ai=C((TRe,AL)=>{"use strict";var TL=ie(),SL=(k(),P(q)),ru=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ti=require("joi"),oa={schema_format:{pattern:ru,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},n4=Ti.alternatives(Ti.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ti.number(),Ti.array()).required(),s4=Ti.alternatives(Ti.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ti.number()),i4=Ti.alternatives(Ti.string().min(1).max(oa.schema_length.maximum).pattern(ru).messages({"string.pattern.base":"{:#label} "+oa.schema_format.message}),Ti.number()).required();function o4(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oa.schema_length.maximum?`'${e}' maximum of 250 characters`:ru.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(o4,"checkValidTable");function a4(e,t){return TL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(a4,"validateSchemaExists");function c4(e,t){let r=t.state.ancestors[0].schema;return TL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(c4,"validateTableExists");function l4(e,t){return e.toLowerCase()===SL.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${SL.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(l4,"validateSchemaName");AL.exports={common_validators:oa,schema_regex:ru,hdb_schema_table:n4,validateSchemaExists:a4,validateTableExists:c4,validateSchemaName:l4,checkValidTable:o4,hdb_database:s4,hdb_table:i4}});var ot=C((RRe,RL)=>{"use strict";var mn=require("validate.js");mn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||mn.validators.type.checks[t](e)?null:` must be a '${t}' value`};mn.validators.type.checks={Object:a(function(e){return mn.isObject(e)&&!mn.isArray(e)},"Object"),Array:mn.isArray,Integer:mn.isInteger,Number:mn.isNumber,String:mn.isString,Date:mn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};mn.validators.hasValidFileExt=function(e,t){return mn.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};RL.exports={validateObject:u4,validateObjectAsync:d4,validateBySchema:f4};function u4(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=mn(e,t,{format:"flat"});return r?new Error(r):null}a(u4,"validateObject");async function d4(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await mn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(d4,"validateObjectAsync");function f4(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(f4,"validateBySchema")});var sR=C((bRe,bL)=>{var{hdb_table:_4,hdb_database:yL}=Ai(),h4=ot(),nR=require("joi"),m4={undefined:"undefined",null:"null"},p4=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||m4[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"),E4=nR.object({database:yL,schema:yL,table:_4,records:nR.array().items(nR.object().custom(p4)).required()});bL.exports=function(e){return h4.validateBySchema(e,E4)}});var NL=C((NRe,OL)=>{"use strict";var iR=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")}};OL.exports=iR});var IL=C((IRe,wL)=>{"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}};wL.exports=oR});var ML={};Ue(ML,{HAS_EXPIRATION:()=>fp,HAS_RESIDENCY_ID:()=>fR,HAS_STRUCTURE_UPDATE:()=>mp,LAST_TIMESTAMP_PLACEHOLDER:()=>vf,LOCAL_TIMESTAMP:()=>g4,METADATA:()=>bc,NEW_TIMESTAMP_PLACEHOLDER:()=>PL,NO_TIMESTAMP:()=>up,PENDING_LOCAL_TIME:()=>_R,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>dR,RecordEncoder:()=>uR,TIMESTAMP_ASSIGN_LAST:()=>T4,TIMESTAMP_ASSIGN_NEW:()=>DL,TIMESTAMP_ASSIGN_PREVIOUS:()=>LL,TIMESTAMP_PLACEHOLDER:()=>lp,TIMESTAMP_RECORD_PREVIOUS:()=>aR,handleLocalTimeForGets:()=>pp,recordUpdater:()=>hR,removeEntry:()=>wc});function R4(){return Mf[0]=Mf[0]^64,S4.getFloat64(0)}function pp(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?.[bc];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?.[bc]>=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?.[bc];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,yc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<yc.length;u++){let f=yc[u].deref();(!f||f.isDone||f.isCommitted)&&yc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function hR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,_){l==null?Rc=up:d?Rc=i?.localTime?aR|LL:up:Rc=l?i?.localTime?aR|16384:DL|16384:up;let h=u?.expiresAt;if(h>=0&&(c|=fp),Lf=c,cR=h,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:Rc>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(lR=E,Lf|=fR,g|=Ic),R!==E&&(g|=Cc,R||(R=0)),c&fp&&(g|=xf),u?.originatingOperation&&(g|=Uf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&f!=="message"&&i.metadataFlags&vr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&aa(i.value);let T;if(s!==void 0&&(T=hp(()=>e.put(n,s,m),n,e.rootStore),Nc&&(g|=vr)),l){let N=u?.user?.username;if(_&&(hp(()=>e.encoder.encode(_),n,e.rootStore),Nc&&(g|=vr)),e.encoder.hasStructureUpdate&&(g|=mp,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,Oc(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,Df,g,E,R,h),{ifVersion:S}),T}}T=r.put(s===void 0?PL:vf,Oc(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,Df,g,E,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function wc(e,t,r){if(t)return t.value&&t.metadataFlags&vr&&!e.auditStore?.getBinaryFast(t.localTime)&&aa(t.value),e.remove(t.key,r)}var CL,dp,lp,vf,dR,PL,g4,bc,Mf,S4,up,DL,T4,LL,aR,fp,fR,_R,mp,A4,Df,Rc,Lf,cR,lR,uR,yc,nu=Re(()=>{CL=require("msgpackr");Ri();dp=v(ee());hn();hn();lp=new Uint8Array([1,1,1,1,4,64,0,0]),vf=new Uint8Array([1,1,1,1,1,0,0,0]),dR=new Uint8Array([1,1,1,1,3,64,0,0]),PL=new Uint8Array([1,1,1,1,0,64,0,0]),g4=Symbol("local-timestamp"),bc=Symbol("metadata"),Mf=new Uint8Array(8),S4=new DataView(Mf.buffer,0,8),up=0,DL=0,T4=1,LL=3,aR=4,fp=16,fR=32,_R=1,mp=256,Rc=0,Lf=-1,cR=-1,lR=0,uR=class extends CL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Rc||Lf>=0){let o=0,c=Rc;c&&(o+=8,Rc=0);let l=Lf,u=cR,f=lR;l>=0&&(o+=4,Lf=-1,u>=0&&(o+=8,cR=-1),f&&(o+=4,lR=0));let d=A4=r.call(this,s,i|2048|o);Df=d.subarray((d.start||0)+o,d.end);let _=d.start||0;return c&&(lp[4]=c,lp[5]=c>>8,d.set(lp,_),_+=8),Nc&&(l|=vr),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,l|_p<<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 Df=r.call(this,s,i),Df};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(Mf,0,c),c+=8;else for(let _=0;_<8;_++)Mf[_]=t[c++];l=R4(),i=t[c]}let u,f;i<32&&(i===_p?(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&fp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&fR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=io(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[bc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:io(()=>super.decode(t,r),this.rootStore)}catch(c){return dp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(R4,"getTimestamp");a(pp,"handleLocalTimeForGets");yc=[];setInterval(()=>{for(let e=0;e<yc.length;e++){let t=yc[e].deref();!t||t.isDone||t.isCommitted?yc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(dp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):dp.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(hR,"recordUpdater");a(wc,"removeEntry")});var Bf=C((vRe,UL)=>{"use strict";var vL=le(),y4=(k(),P(q)),{RecordEncoder:b4}=(nu(),P(ML));vL.initSync();var O4=vL.get(y4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mR=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=O4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:b4})}};UL.exports=mR});var Hf=C((xRe,xL)=>{"use strict";var kn=le(),_s=(k(),P(q));kn.initSync();var Ep=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=kn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||kn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||kn.get(_s.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=kn.get(_s.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=kn.get(_s.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),kn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=kn.get(_s.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=kn.get(_s.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};xL.exports=Ep;Ep.MAX_DBS=1e4});var _t=C((HRe,YL)=>{"use strict";var ER=require("lmdb"),Fs=require("fs-extra"),Fn=require("path"),gp=un(),kL=ee(),pn=Un().LMDB_ERRORS_ENUM,Sp=IL(),gR=Bf(),FL=Hf(),ca=Ft(),BL=(k(),P(q)),{table:N4,resetDatabases:w4}=(xe(),P(ct)),HL=le(),Gs=ca.INTERNAL_DBIS_NAME,GL=ca.DBI_DEFINITION_NAME,I4="data.mdb",C4="lock.mdb",kf=".mdb",P4="-lock",pR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[ca.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ca.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new ER.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Tp(e,t){if(e===void 0)throw new Error(pn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(pn.ENV_NAME_REQUIRED)}a(Tp,"pathEnvNameValidation");async function SR(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(pn.INVALID_BASE_PATH):n}try{let n=Fn.join(e,t+kf);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Fn.join(e,t,I4),Fs.constants.R_OK|Fs.constants.F_OK),Fn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(pn.INVALID_ENVIRONMENT)}else throw new Error(pn.INVALID_ENVIRONMENT);throw n}}a(SR,"validateEnvironmentPath");function Ap(e,t){if(gp.validateEnv(e),t===void 0)throw new Error(pn.DBI_NAME_REQUIRED)}a(Ap,"validateEnvDBIName");async function D4(e,t,r=!1,n=!1){Tp(e,t);let s=Fn.basename(e);t=t.toString();let i=HL.get(BL.CONFIG_PARAMS.DATABASES);i||HL.setProperty(BL.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await SR(e,t,n),qL(e,t,r)}catch(o){if(o.message===pn.INVALID_ENVIRONMENT){let c=Fn.join(e,t);await Fs.mkdirp(n?c:e);let l=new FL(n?c:c+kf,!1),u=ER.open(l);u.dbis=Object.create(null);let f=new gR(!1);u.openDB(Gs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=TR(e,t,r);return u[ca.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(D4,"createEnvironment");async function L4(e,t,r,n=!0){Tp(e,t),t=t.toString();let s=Fn.join(e,t);return N4({table:t,database:Fn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(L4,"copyEnvironment");async function qL(e,t,r=!1){Tp(e,t),t=t.toString();let n=TR(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 SR(e,t),i=Fn.join(e,t+kf),o=s!=i,c=new FL(s,o),l=ER.open(c);l.dbis=Object.create(null);let u=VL(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[ca.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(qL,"openEnvironment");async function M4(e,t,r=!1){Tp(e,t),t=t.toString();let n=Fn.join(e,t+kf),s=await SR(e,t);if(global.lmdb_map!==void 0){let i=TR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await $L(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+P4:Fn.join(Fn.dirname(s),C4))}a(M4,"deleteEnvironment");async function $L(e){gp.validateEnv(e);let t=e[ca.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a($L,"closeEnvironment");function TR(e,t,r=!1){let s=`${Fn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(TR,"getCachedEnvironmentName");function v4(e){gp.validateEnv(e);let t=Object.create(null),r=hs(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Sp,s)}catch{kL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(v4,"listDBIDefinitions");function VL(e){gp.validateEnv(e);let t=[],r=hs(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(VL,"listDBIs");function U4(e,t){let n=hs(e,Gs).getEntry(t),s=new Sp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{kL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(U4,"getDBIDefinition");function KL(e,t,r,n=!r){if(Ap(e,t),t=t.toString(),t===Gs)throw new Error(pn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===pn.DBI_DOES_NOT_EXIST){let i=new gR(r,n===!0),o=e.openDB(t,i),c=new Sp(r===!0,n);return o[GL]=c,hs(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(KL,"createDBI");function hs(e,t){if(Ap(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=U4(e,t):r=new Sp,r===void 0)throw new Error(pn.DBI_DOES_NOT_EXIST);let n;try{let s=new gR(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(pn.DBI_DOES_NOT_EXIST):s}return n[GL]=r,e.dbis[t]=n,n}a(hs,"openDBI");function x4(e,t){Ap(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[ca.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(x4,"statDBI");async function B4(e,t){try{let r=Fn.join(e,t+kf);return(await Fs.stat(r)).size}catch{throw new Error(pn.INVALID_ENVIRONMENT)}}a(B4,"environmentDataSize");function H4(e,t){if(Ap(e,t),t=t.toString(),t===Gs)throw new Error(pn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,Gs).removeSync(t)}a(H4,"dropDBI");function k4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{hs(e,i)}catch(o){if(o.message===pn.DBI_DOES_NOT_EXIST)KL(e,i,i!==t,i===t),n=!0;else throw o}}n&&w4()}a(k4,"initializeDBIs");YL.exports={openDBI:hs,openEnvironment:qL,createEnvironment:D4,listDBIs:VL,listDBIDefinitions:v4,createDBI:KL,dropDBI:H4,statDBI:x4,deleteEnvironment:M4,initializeDBIs:k4,TransactionCursor:pR,environmentDataSize:B4,copyEnvironment:L4,closeEnvironment:$L}});var zL=C((FRe,WL)=>{"use strict";var AR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};WL.exports=AR});var jL=C((qRe,QL)=>{"use strict";var RR=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}};QL.exports=RR});var XL=C((VRe,JL)=>{"use strict";var yR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};JL.exports=yR});var Dc=C((QRe,tM)=>{"use strict";var F4=_t(),G4=zL(),q4=jL(),$4=XL(),yi=un(),Ff=Un().LMDB_ERRORS_ENUM,V4=Ft(),oo=(k(),P(q)),K4=ie(),Y4=require("uuid"),YRe=require("lmdb"),{handleHDBError:W4,hdb_errors:z4}=he(),{OVERFLOW_MARKER:WRe,MAX_SEARCH_KEY_LENGTH:zRe}=V4,ZL=le();ZL.initSync();var Rp=ZL.get(oo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),bR=oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pc=oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Q4(e,t,r,n,s=yi.getNextMonotonicTime()){IR(e,t,r,n),OR(e,t,r);let i=new G4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];eM(u,!0,s);let f=j4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return NR(o,c,n,i,s)}a(Q4,"insertRecords");function j4(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][oo.FUNC_VAL],n[o]=c)}let l=yi.getIndexedValues(c),u=e.dbis[o];if(l){Rp&&u.prefetch(l.map(f=>({key:f,value:s})),yp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Rp&&e.dbis[t].prefetch([s],yp),e.dbis[t].put(s,n,n[Pc])})}a(j4,"insertRecord");function J4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(J4,"removeSkippedRecords");function eM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Pc]))&&(e[Pc]=r||(r=yi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[bR]))&&(e[bR]=r||yi.getNextMonotonicTime()):delete e[bR]}a(eM,"setTimestamps");function OR(e,t,r){r.indexOf(oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(oo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(oo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),F4.initializeDBIs(e,t,r)}a(OR,"initializeTransaction");async function X4(e,t,r,n,s=yi.getNextMonotonicTime()){IR(e,t,r,n),OR(e,t,r);let i=new q4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],_;try{_=wR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(_),l.push(d)}return NR(c,l,n,i,s,o)}a(X4,"updateRecords");async function Z4(e,t,r,n,s=yi.getNextMonotonicTime()){try{IR(e,t,r,n)}catch(l){throw W4(l,l.message,z4.HTTP_STATUS_CODES.BAD_REQUEST)}OR(e,t,r);let i=new $4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;K4.isEmpty(u[t])?(f=Y4.v4(),u[t]=f):f=u[t];let d=wR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return NR(o,c,n,i,s)}a(Z4,"upsertRecords");async function NR(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||yi.getNextMonotonicTime(),J4(r,i),n}a(NR,"finalizeWrite");function wR(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(eM(r,!f,o),Number.isInteger(r[Pc])&&u[Pc]>r[Pc])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][oo.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=yi.getIndexedValues(R);if(E){Rp&&g.prefetch(E.map(T=>({key:T,value:n})),yp);for(let T=0,N=E.length;T<N;T++)g.remove(E[T],n)}if(E=yi.getIndexedValues(S),E){Rp&&g.prefetch(E.map(T=>({key:T,value:n})),yp);for(let T=0,N=E.length;T<N;T++)g.put(E[T],n)}}let h={...u,...r};c.put(n,h,h[Pc])},"do_put");return l?d=c.ifVersion(n,l.version,_):d=c.ifNoExists(n,_),d.then(h=>h?!0:wR(e,t,r,n,s,i,o))}a(wR,"updateUpsertRecord");function e3(e,t,r){if(yi.validateEnv(e),t===void 0)throw new Error(Ff.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ff.WRITE_ATTRIBUTES_REQUIRED):new Error(Ff.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(e3,"validateBasic");function IR(e,t,r,n){if(e3(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ff.RECORDS_REQUIRED):new Error(Ff.RECORDS_MUST_BE_ARRAY)}a(IR,"validateWrite");function yp(){}a(yp,"noop");tM.exports={insertRecords:Q4,updateRecords:X4,upsertRecords:Z4}});var ao=C((JRe,t3)=>{t3.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 nM=C((XRe,rM)=>{"use strict";var r3=require("uuid"),CR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||r3.v4(),this.schema_table=`${this.schema}.${this.table}`}};rM.exports=CR});var bp=C((eye,sM)=>{"use strict";var n3=nM(),PR=class extends n3{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}};sM.exports=PR});var oM=C((rye,iM)=>{"use strict";iM.exports=i3;var s3="inserted";function i3(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===s3?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(i3,"returnObject")});var Op=C((iye,cM)=>{"use strict";var o3=(k(),P(q)),DR=_t(),a3=Dc(),{getSystemSchemaPath:c3,getSchemaPath:l3}=gt(),sye=ao(),{validateBySchema:u3}=ot(),Gf=require("joi"),d3=bp(),f3=oM(),{handleHDBError:_3,hdb_errors:h3,ClientError:m3}=he(),aM=ie(),{HTTP_STATUS_CODES:p3}=h3,E3="inserted";cM.exports=g3;async function g3(e){let t=u3(e,Gf.object({database:Gf.string(),schema:Gf.string(),table:Gf.string().required(),attribute:Gf.string().required()}));if(t)throw new m3(t.message);let r=!e.skip_table_check&&aM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw _3(new Error,r,p3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=aM.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 d3(e.schema,e.table,e.attribute,e.id);try{let i=await DR.openEnvironment(l3(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}`);DR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await DR.openEnvironment(c3(),o3.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await a3.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return f3(E3,c,{records:[s]},l)}catch(i){throw i}}a(g3,"lmdbCreateAttribute")});var qf=C((cye,uM)=>{"use strict";var co=ie(),lM=ee(),aye=sR(),{getDatabases:S3}=(xe(),P(ct)),{ClientError:Lc}=he();uM.exports=T3;function T3(e){if(co.isEmpty(e))throw new Lc("invalid update parameters defined.");if(co.isEmptyOrZeroLength(e.schema))throw new Lc("invalid schema specified.");if(co.isEmptyOrZeroLength(e.table))throw new Lc("invalid table specified.");if(!Array.isArray(e.records))throw new Lc("records must be an array");let t=S3()[e.schema]?.[e.table];if(co.isEmpty(t))throw new Lc(`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&&co.isEmptyOrZeroLength(o[r]))throw lM.error("a valid hash attribute must be provided with update record:",o),new Lc("a valid hash attribute must be provided with update record, check log for more info");if(!co.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw lM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Lc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!co.isEmpty(o[r])&&o[r]!==""&&n.has(co.autoCast(o[r]))&&(o.skip=!0),n.add(co.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(T3,"insertUpdateValidate")});var fM=C((uye,dM)=>{"use strict";var LR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};dM.exports=LR});var mM=C((fye,hM)=>{"use strict";var MR=_t(),A3=ee(),_M=Un().LMDB_ERRORS_ENUM;hM.exports=R3;async function R3(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 MR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==_M.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await MR.closeEnvironment(global.lmdb_map[n]),await MR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==_M.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){A3.error(t)}}a(R3,"cleanLMDBMap")});var IM=C((mye,wM)=>{"use strict";var vR=require("recursive-iterator"),y3=require("alasql"),UR=require("clone"),pM=ie(),{handleHDBError:EM,hdb_errors:b3}=he(),{HDB_ERROR_MSGS:gM,HTTP_STATUS_CODES:SM}=b3,{getDatabases:O3}=(xe(),P(ct)),N3=["DISTINCT_ARRAY"],TM=Symbol("validateTables"),xR=Symbol("validateTable"),hye=Symbol("getAllColumns"),AM=Symbol("validateAllColumns"),Np=Symbol("findColumn"),RM=Symbol("validateOrderBy"),$f=Symbol("validateSegment"),BR=Symbol("validateColumn"),yM=Symbol("setColumnsForTable"),bM=Symbol("checkColumnsForAsterisk"),OM=Symbol("validateGroupBy"),NM=Symbol("hasColumns"),HR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[TM](),this[bM](),this[AM]()}[TM](){if(this[NM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xR](t.table)})}}[NM](){let t=!1,r=new vR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=O3();if(!r[t.databaseid])throw EM(new Error,gM.SCHEMA_NOT_FOUND(t.databaseid),SM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw EM(new Error,gM.TABLE_NOT_FOUND(t.databaseid,t.tableid),SM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=UR(s);i.table=UR(t),this.attributes.push(i)})}[Np](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)}[bM](){let t=new vR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[yM](r.tableid)}[yM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new y3.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[AM](){this[$f](this.statement.columns,!1),this[$f](this.statement.joins,!1),this[$f](this.statement.where,!1),this[OM](this.statement.group,!1),this[$f](this.statement.order,!0)}[$f](t,r){if(!t)return;let n=new vR(t),s=[];for(let{node:i,path:o}of n)!pM.isEmpty(i)&&!pM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[RM](i):s.push(this[BR](i)));return s}[OM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&N3.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=UR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Np](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[Np](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`}[RM](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[BR](t)}[BR](t){let r=this[Np](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]}};wM.exports=HR});var LM=C((Eye,DM)=>{"use strict";var CM=require("lodash"),Vf=require("mathjs"),w3=require("jsonata"),PM=ie();DM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?CM.uniqWith(e,CM.isEqual):e,"distinct_array"),searchJSON:I3,mad:Kf.bind(null,Vf.mad),mean:Kf.bind(null,Vf.mean),mode:Kf.bind(null,Vf.mode),prod:Kf.bind(null,Vf.prod),median:Kf.bind(null,Vf.median)};function Kf(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(Kf,"aggregateFunction");function I3(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(PM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),PM.isEmpty(this.__ala__.res[r])){let n=w3(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(I3,"searchJSON")});var vM=C((Sye,MM)=>{"use strict";var er=require("moment"),kR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;MM.exports={current_date:a(()=>er().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>er().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return er(e).utc().format("YYYY");case"month":return er(e).utc().format("MM");case"day":return er(e).utc().format("DD");case"hour":return er(e).utc().format("HH");case"minute":return er(e).utc().format("mm");case"second":return er(e).utc().format("ss");case"millisecond":return er(e).utc().format("SSS");default:break}},"extract"),date:a(e=>er(e).utc().format(kR),"date"),date_format:a((e,t)=>er(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>er(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>er(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=er(e).utc(),s=er(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>er().utc().valueOf(),"now"),get_server_time:a(()=>er().format(kR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(kR),"offset_utc")}});var HM=C((Aye,BM)=>{"use strict";var C3=require("@turf/area"),P3=require("@turf/length"),D3=require("@turf/circle"),L3=require("@turf/difference"),M3=require("@turf/distance"),v3=require("@turf/boolean-contains"),U3=require("@turf/boolean-equal"),x3=require("@turf/boolean-disjoint"),B3=require("@turf/helpers"),UM=(k(),P(q)),Ke=ie(),lo=ee();BM.exports={geoArea:H3,geoLength:k3,geoCircle:F3,geoDifference:G3,geoDistance:xM,geoNear:q3,geoContains:$3,geoEqual:V3,geoCrosses:K3,geoConvert:Y3};function H3(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return C3.default(e)}catch(t){return lo.trace(t,e),NaN}}a(H3,"geoArea");function k3(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return P3.default(e,{units:t||"kilometers"})}catch(r){return lo.trace(r,e),NaN}}a(k3,"geoLength");function F3(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return D3.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(F3,"geoCircle");function G3(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 L3(e,t)}catch(r){return lo.trace(r,e,t),NaN}}a(G3,"geoDifference");function xM(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 M3.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(xM,"geoDistance");function q3(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 xM(e,t,n)<=r}catch(s){return lo.trace(s,e,t),!1}}a(q3,"geoNear");function $3(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 v3.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a($3,"geoContains");function V3(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 U3.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(V3,"geoEqual");function K3(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!x3.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(K3,"geoCrosses");function Y3(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(UM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(UM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),B3[t](e,r)}a(Y3,"geoConvert")});var wp=C((yye,kM)=>{var Mc=LM(),Gn=vM(),bi=HM();kM.exports=e=>{e.aggr.mad=e.aggr.MAD=Mc.mad,e.aggr.mean=e.aggr.MEAN=Mc.mean,e.aggr.mode=e.aggr.MODE=Mc.mode,e.aggr.prod=e.aggr.PROD=Mc.prod,e.aggr.median=e.aggr.MEDIAN=Mc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Mc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Mc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var $M=C((bye,qM)=>{"use strict";var Yf=require("lodash"),En=require("alasql");En.options.cache=!1;var W3=wp(),FM=require("clone"),Ip=require("recursive-iterator"),ke=ee(),Je=ie(),su=qn(),z3=(k(),P(q)),{hdb_errors:Q3}=he(),{getDatabases:GM}=(xe(),P(ct)),j3="IS NULL",qs="There was a problem performing this search. Please check the logs and try again.";W3(En);var FR=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(qs)}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(qs)}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(qs)}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(qs)}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(qs)}}_getColumns(){let t=new Ip(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(FM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Yf.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=GM()[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 Ip(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 En.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 En.yy.LogicValue({value:i}):n instanceof En.yy.StringValue&&Je.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new En.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 Ip(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(z3.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&&Yf.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 En.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(FM(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(j3)>-1&&this.tables.forEach(s=>{let i={columnid:GM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Yf.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 su.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(qs)}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 su.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(qs)}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 su.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(qs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await su.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(qs)}}}_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 En.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 En.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new En.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 En.yy.FuncValue:new En.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 En.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=Yf.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 Ip(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=Yf.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(qs)}}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 su.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 En.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(Q3.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 su.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(qs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};qM.exports=FR});var Wr=C((Nye,VM)=>{"use strict";var J3=IM();VM.exports={searchByConditions:Z3,searchByHash:eX,searchByValue:tX,search:rX};var GR=qn(),{transformReq:qR}=ie(),X3=$M();async function Z3(e){return qR(e),GR.searchByConditions(e)}a(Z3,"searchByConditions");async function eX(e){qR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of GR.searchByHash(e))r&&t.push(r);return t}a(eX,"searchByHash");async function tX(e){qR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of GR.searchByValue(e))t.push(r);return t}a(tX,"searchByValue");function rX(e,t){try{let r=new J3(e);r.validate(),new X3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(rX,"search")});var uo=C((Iye,zM)=>{"use strict";var Wf=require("crypto"),nX=le(),{CONFIG_PARAMS:sX}=(k(),P(q)),YM="aes-256-cbc",iX=32,oX=16,$R=64,WM=32,aX=$R+WM,KM=new Map;zM.exports={encrypt:cX,decrypt:lX,createNatsTableStreamName:uX};function cX(e){let t=Wf.randomBytes(iX),r=Wf.randomBytes(oX),n=Wf.createCipheriv(YM,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(cX,"encrypt");function lX(e){let t=e.substr(0,$R),r=e.substr($R,WM),n=e.substr(aX,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Wf.createDecipheriv(YM,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(lX,"decrypt");function uX(e,t){let r=nX.get(sX.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=KM.get(r);return n||(n=Wf.createHash("md5").update(r).digest("hex"),KM.set(r,n)),n}a(uX,"createNatsTableStreamName")});var fo=C((Dye,XM)=>{"use strict";var Pye=Wr(),zf=ee(),{validateBySchema:QM}=ot(),vc=require("joi"),dX=uo(),Cp=ie(),{handleHDBError:Pp,hdb_errors:fX,ClientError:jM}=he(),{HDB_ERROR_MSGS:Dp,HTTP_STATUS_CODES:VR}=fX,JM=le();JM.initSync();var{getDatabases:KR}=(xe(),P(ct)),_X=require("fs-extra"),hX=(k(),P(q));XM.exports={describeAll:mX,describeTable:Lp,describeSchema:pX};async function mX(e={}){try{let t=Cp.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=KR(),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 Lp({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 Lp({schema:d,table:h,exact_count:u},S)}m&&l.push(m)}catch(m){zf.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 zf.error("Got an error in describeAll"),zf.error(t),Pp(new Error,Dp.DESCRIBE_ALL_ERR)}}a(mX,"describeAll");async function Lp(e,t){Cp.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=QM(e,vc.object({database:vc.string(),table:vc.string().required(),exact_count:vc.boolean().strict()}));if(i)throw new jM(i.message);let c=KR()[r];if(!c)throw Pp(new Error,Dp.SCHEMA_NOT_FOUND(e.schema),VR.NOT_FOUND);let l=c[n];if(!l)throw Pp(new Error,Dp.TABLE_NOT_FOUND(e.schema,e.table),VR.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 _X.stat(l.primaryStore.env.path)).size}catch(h){zf.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")),JM.get(hX.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(_.clustering_stream_name=dX.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){zf.warn(`unable to stat table dbi due to ${h}`)}return _}a(Lp,"descTable");async function pX(e){Cp.transformReq(e);let t=QM(e,vc.object({database:vc.string(),exact_count:vc.boolean().strict()}));if(t)throw new jM(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=KR()[n];if(!i)throw Pp(new Error,Dp.SCHEMA_NOT_FOUND(e.schema),VR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Cp.isEmpty(l)||l.describe){let u=await Lp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(pX,"describeSchema")});var $s=C((Uye,nv)=>{var EX=ao(),{callbackify:ev,promisify:gX}=require("util"),{getDatabases:tv}=(xe(),P(ct));nv.exports={setSchemaDataToGlobal:ZM,getTableSchema:SX,getSystemSchema:TX,setSchemaDataToGlobalAsync:gX(ZM)};var rv=fo(),Mye=ev(rv.describeAll),vye=ev(rv.describeTable);function ZM(e){global.hdb_schema=tv(),e&&e()}a(ZM,"setSchemaDataToGlobal");function SX(e,t,r){let n=tv()[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(SX,"getTableSchema");function TX(){return EX}a(TX,"getSystemSchema")});var WR=C((Bye,ov)=>{var AX=ot(),YR=require("joi"),{hdb_table:RX,hdb_database:sv}=Ai(),iv={schema:sv,database:sv,table:RX},yX={date:YR.date().iso().required()},bX={timestamp:YR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ov.exports=function(e,t){let r=t==="timestamp"?{...iv,...bX}:{...iv,...yX},n=YR.object(r);return AX.validateBySchema(e,n)}});var lv=C((Hye,cv)=>{var OX=ot(),zR=require("joi"),{hdb_table:NX,hdb_database:av}=Ai(),wX=zR.object({schema:av,database:av,table:NX,hash_values:zR.array().required(),ids:zR.array()});cv.exports=function(e){return OX.validateBySchema(e,wX)}});var XR=C((kye,uv)=>{"use strict";var QR=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}},jR=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}},JR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};uv.exports={InsertObject:QR,NoSQLSeachObject:jR,DeleteResponseObject:JR}});var Bc=C((Gye,mv)=>{"use strict";var fv=WR(),IX=lv(),Uc=ie(),dv=require("moment"),_v=ee(),{promisify:CX,callbackify:PX}=require("util"),xc=(k(),P(q)),DX=$s(),ZR=CX(DX.getTableSchema),ey=qn(),{DeleteResponseObject:LX}=XR(),{handleHDBError:la,hdb_errors:MX}=he(),{HDB_ERROR_MSGS:Mp,HTTP_STATUS_CODES:ua}=MX,vX="records successfully deleted",UX=PX(hv);mv.exports={delete:UX,deleteRecord:hv,deleteFilesBefore:xX,deleteAuditLogsBefore:BX};async function xX(e){let t=fv(e,"date");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Uc.transformReq(e),!dv(e.date,dv.ISO_8601).isValid())throw la(new Error,Mp.INVALID_DATE,ua.BAD_REQUEST,xc.LOG_LEVELS.ERROR,Mp.INVALID_DATE,!0);let n=Uc.checkSchemaTableExist(e.schema,e.table);if(n)throw la(new Error,n,ua.NOT_FOUND,xc.LOG_LEVELS.ERROR,n,!0);let s=await ey.deleteRecordsBefore(e);if(await ZR(e.schema,e.table),_v.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(xX,"deleteFilesBefore");async function BX(e){let t=fv(e,"timestamp");if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);if(Uc.transformReq(e),isNaN(e.timestamp))throw la(new Error,Mp.INVALID_VALUE("Timestamp"),ua.BAD_REQUEST,xc.LOG_LEVELS.ERROR,Mp.INVALID_VALUE("Timestamp"),!0);let r=Uc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,xc.LOG_LEVELS.ERROR,r,!0);let n=await ey.deleteAuditLogsBefore(e);return await ZR(e.schema,e.table),_v.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(BX,"deleteAuditLogsBefore");async function hv(e){e.ids&&(e.hash_values=e.ids);let t=IX(e);if(t)throw la(t,t.message,ua.BAD_REQUEST,void 0,void 0,!0);Uc.transformReq(e);let r=Uc.checkSchemaTableExist(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,xc.LOG_LEVELS.ERROR,r,!0);try{await ZR(e.schema,e.table);let n=await ey.deleteRecords(e);return Uc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${vX}`),n}catch(n){if(n.message===xc.SEARCH_NOT_FOUND_MESSAGE){let s=new LX;return s.message=xc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(hv,"deleteRecord")});var vp={};Ue(vp,{HASH_FUNCTION:()=>Jf,hash:()=>ny,validate:()=>sy});function ty(e=jf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Qf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function ny(e,t=Jf[Ev?.toUpperCase()]??"sha256"){return ry[t](e)}function sy(e,t,r=Jf[Ev?.toUpperCase()]??"sha256"){return e?HX[r](e,t):!1}var Qf,iu,pv,Ev,jf,gv,Jf,ry,HX,Up=Re(()=>{Qf=v(require("node:crypto")),iu=v(require("argon2")),pv=v(le());k();Ev=(0,pv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),jf=16,gv=9,Jf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(Jf||{});a(ty,"generateSalt");ry={md5:a((e,t=void 0)=>{t=t??ty(gv);let r=Qf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??ty(jf);let r=Qf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=ty(jf),r=await iu.hash(e,{type:iu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},HX={md5:a((e,t)=>{let r=e.slice(0,gv);return e===ry.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,jf);return e===ry.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await iu.verify(e.slice(jf),t),"argon2id")};a(ny,"hash");a(sy,"validate")});var Tv=C((Kye,Sv)=>{var iy=ot(),zr={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 kX(e){return zr.password.presence=!0,zr.username.presence=!0,zr.role.presence=!0,zr.active.presence=!0,iy.validateObject(e,zr)}a(kX,"addUserValidation");function FX(e){return zr.password.presence=!1,zr.username.presence=!0,zr.role.presence=!1,zr.active.presence=!1,iy.validateObject(e,zr)}a(FX,"alterUserValidation");function GX(e){return zr.password.presence=!1,zr.username.presence=!0,zr.role.presence=!1,zr.active.presence=!1,iy.validateObject(e,zr)}a(GX,"dropUserValidation");Sv.exports={addUserValidation:kX,alterUserValidation:FX,dropUserValidation:GX}});var Ct=C((zye,Rv)=>{"use strict";var{platform:Wye}=require("os"),qX="nats-server.zip",oy="nats-server",$X=process.platform==="win32"?`${oy}.exe`:oy,VX=/^[^\s.,*>]+$/,Av="__request__",KX=a(e=>`${e}.${Av}`,"REQUEST_SUBJECT"),YX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},WX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},zX={HUB:"hub.pid",LEAF:"leaf.pid"},QX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},jX={SUCCESS:"success",ERROR:"error"},JX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},XX={TXN:"txn",MSGID:"msgid"},ou={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},ZX={[ou.ERR]:1,[ou.WRN]:2,[ou.INF]:3,[ou.DBG]:4,[ou.TRC]:5},e6={debug:"-D",trace:"-DVV"};Rv.exports={NATS_SERVER_ZIP:qX,NATS_SERVER_NAME:oy,NATS_BINARY_NAME:$X,PID_FILES:zX,NATS_CONFIG_FILES:WX,SERVER_SUFFIX:QX,NATS_TERM_CONSTRAINTS_RX:VX,REQUEST_SUFFIX:Av,UPDATE_REMOTE_RESPONSE_STATUSES:jX,CLUSTER_STATUS_STATUSES:JX,REQUEST_SUBJECT:KX,SUBJECT_PREFIXES:XX,MSG_HEADERS:YX,LOG_LEVELS:ou,LOG_LEVEL_FLAGS:e6,LOG_LEVEL_HIERARCHY:ZX}});var ay=C(yv=>{"use strict";var t6={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
17
17
  `),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
18
18
  `)},r6="certificate.pem",n6="privateKey.pem",s6="caCertificate.pem",i6="natsCertificate.pem",o6="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},a6={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},c6={[Rt.SERVER]:2,[Rt.DEFAULT]:1},l6={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},u6={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},d6={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},f6={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},_6={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(yv,{CERTIFICATE_PEM_NAME:r6,PRIVATEKEY_PEM_NAME:n6,CA_PEM_NAME:s6,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:a6,CERT_PREFERENCE_APP:c6,CERT_PREFERENCE_OPS:l6,CERT_PREFERENCE_REP:u6,CA_CERT_PREFERENCE_REP:d6,CA_CERT_PREFERENCE_OPS:f6,CA_CERT_PREFERENCE_APP:_6,CERTIFICATE_VALUES:t6,NATS_CERTIFICATE_PEM_NAME:i6,NATS_CA_PEM_NAME:o6})});var ly=C((Xye,Cv)=>{"use strict";var wv=require("fs-extra"),ge=require("joi"),h6=require("os"),{boolean:Fe,string:ht,number:tr,array:da}=ge.types(),{totalmem:bv}=require("os"),Hc=require("path"),m6=ee(),cy=ie(),Jye=ay(),Ov=(k(),P(q)),p6=ot(),Nv="log",E6="components",g6="Invalid logging.rotation.maxSize unit. Available units are G, M or K",S6="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",T6="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",A6="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",R6="rootPath config parameter is undefined",gn=ge.alternatives([tr.min(0),ht]).optional().empty(null),xp=ge.alternatives([da.items(ht,{host:ht.required(),port:gn},{hostname:ht.required(),port:gn}).empty(null),da.items(ht)]),Oi,Iv=!1;Cv.exports={configValidator:y6,routesValidator:C6,route_constraints:xp};function y6(e,t=!1){if(Iv=t,Oi=e.rootPath,cy.isEmpty(Oi))throw R6;let r=Fe.optional(),n=tr.min(0).max(1e3).empty(null).default(I6),s=ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xf),i=ht.optional().empty(null),o=ht.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(Xf),l=ge.custom(O6).empty(null).default(Xf),u=e.clustering?.enabled,f=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:gn,routes:xp}).required()}).required(),leafNodes:ge.object({network:ge.object({port:gn}).required()}).required(),network:ge.object({port:gn}).required()}).required(),leafServer:ge.object({network:ge.object({port:gn,routes:xp}).required(),streams:ge.object({maxAge:tr.min(120).allow(null).optional(),maxBytes:tr.min(1).allow(null).optional(),maxMsgs:tr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Fe.optional(),databaseLevel:Fe.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Fe.required(),verify:Fe.optional()}),user:ht.optional().empty(null)}).optional():d=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Fe.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Fe,cacheTTL:tr.required(),cookie:ge.object({domains:da.items(ht).optional(),expires:ht.optional()}),enableSessions:Fe,hashFunction:ht.valid("md5","sha256","argon2id").optional().empty(null)}),Fe).optional(),analytics:ge.object({aggregatePeriod:tr}),replication:ge.object({hostname:ge.alternatives(ht,tr).optional().empty(null),url:ht.optional().empty(null),port:gn,securePort:gn,routes:da.optional().empty(null),databases:ge.alternatives(ht,da),enableRootCAs:Fe.optional(),copyTablesToCatchUp:Fe.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Fe,logSuccessful:Fe}),file:Fe.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Fe.optional(),compress:Fe.optional(),interval:ht.custom(w6).optional().empty(null),maxSize:ht.custom(N6).optional().empty(null),path:ht.optional().empty(null).default(Xf)}).required(),root:s,stdStreams:Fe.required(),auditLog:Fe.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Fe.optional(),corsAccessList:da.optional(),headersTimeout:tr.min(1).optional(),keepAliveTimeout:tr.min(1).optional(),port:gn,domainSocket:ge.optional().empty("hdb/operations-server").default(Xf),securePort:gn,timeout:tr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(f),f])}).required(),rootPath:ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:gn,securePort:gn,mtls:ge.alternatives([Fe.optional(),ge.object({user:ht.optional(),certificateAuthority:i,required:Fe.optional()})])}).required(),webSocket:Fe.optional(),requireAuthentication:Fe.optional()}),http:ge.object({compressionThreshold:tr.optional(),cors:Fe.optional(),corsAccessList:da.optional(),headersTimeout:tr.min(1).optional(),port:gn,securePort:gn,maxHeaderSize:tr.optional(),mtls:ge.alternatives([Fe.optional(),ge.object({user:ht.optional(),certificateAuthority:i,required:Fe.optional()})]),threadRange:ge.alternatives([da.optional(),ht.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Fe.optional(),ge.object({startingPort:tr.min(1).optional(),host:ht.optional(),waitForDebugger:Fe.optional()})),maxHeapMemory:tr.min(0).optional()})),storage:ge.object({writeAsync:Fe.required(),overlappingSync:Fe.optional(),caching:Fe.optional(),compression:ge.alternatives([Fe.optional(),ge.object({dictionary:ht.optional(),threshold:tr.optional()})]),compactOnStart:Fe.optional(),compactOnStartKeepBackup:Fe.optional(),noReadAhead:Fe.optional(),path:l,prefetchWrites:Fe.optional(),maxFreeSpaceToLoad:tr.optional(),maxFreeSpaceToRetain:tr.optional()}).required(),ignoreScripts:Fe.optional(),tls:ge.alternatives([ge.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(y6,"configValidator");function b6(e){return Iv||wv.existsSync(e)?null:`Specified path ${e} does not exist.`}a(b6,"doesPathExist");function O6(e,t){ge.assert(e,ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=b6(e);if(r)return t.message(r)}a(O6,"validatePath");function N6(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(g6);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(T6):e}a(N6,"validateRotationMaxSize");function w6(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(S6);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(A6):e}a(w6,"validateRotationInterval");function I6(e,t){let r=t.state.path.join("."),n=h6.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||bv();return i=Math.round(Math.min(i,bv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),m6.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(I6,"setDefaultThreads");function Xf(e,t){let r=t.state.path.join(".");if(!cy.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(cy.isEmpty(Oi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Hc.join(Oi,E6);case"logging.root":return Hc.join(Oi,Nv);case"clustering.leafServer.streams.path":return Hc.join(Oi,"clustering","leaf");case"storage.path":let n=Hc.join(Oi,Ov.LEGACY_DATABASES_DIR_NAME);return wv.existsSync(n)?n:Hc.join(Oi,Ov.DATABASES_DIR_NAME);case"logging.rotation.path":return Hc.join(Oi,Nv);case"operationsApi.network.domainSocket":return r==null?null:Hc.join(Oi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xf,"setDefaultRoot");function C6(e){let t=ge.object({routes:xp});return p6.validateBySchema({routes:e},t)}a(C6,"routesValidator")});var Dt=C(Fv=>{"use strict";var ms=(k(),P(q)),mr=ie(),rr=ee(),{configValidator:P6,routesValidator:Pv}=ly(),Qr=require("fs-extra"),Lv=require("yaml"),Vn=require("path"),D6=require("is-number"),Mv=require("properties-reader"),L6=require("lodash"),{handleHDBError:M6}=he(),{HTTP_STATUS_CODES:v6,HDB_ERROR_MSGS:au}=Un(),{server:U6}=(Mr(),P(Zl)),{PACKAGE_ROOT:vv}=Et(),{DATABASES_PARAM_CONFIG:Zf,CONFIG_PARAMS:$n,CONFIG_PARAM_MAP:Vs}=ms,x6="Unable to get config value because config is uninitialized",B6="Config successfully initialized",H6="Error backing up config file",k6="Empty parameter sent to getConfigValue",Uv=Vn.join(vv,"config","yaml",ms.HDB_DEFAULT_CONFIG_FILE),F6=Vn.join(vv,"config","yaml","defaultNatsConfig.yaml"),G6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Dv={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},Bp,Pt,Hp;Object.assign(Fv,{createConfigFile:q6,getDefaultConfig:$6,getConfigValue:Bv,initConfig:kp,flattenConfig:cu,updateConfigValue:Hv,updateConfigObject:K6,getConfiguration:z6,setConfiguration:Q6,readConfigFile:_y,getClusteringRoutes:j6,initOldConfig:kv,getConfigFromFile:J6,getConfigFilePath:kc,addConfig:X6,deleteConfigFromFile:Z6,getConfigObj:e8,resolvePath:uy,getFlatConfigObj:t8});function uy(e){if(e?.startsWith("~/"))return Vn.join(mr.getHomeDir(),e.slice(1));let t=le();try{return Vn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(uy,"resolvePath");function q6(e,t=!1){let r=fa(Uv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=Lv.parseDocument(Qr.readFileSync(F6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Bp=cu(r.toJSON());let n;for(let c in e){let l=Vs[c.toLowerCase()];if(l===$n.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=dy(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){rr.error(d)}}}n&&xv(r,n),fy(r,t);let s=r.toJSON();Pt=cu(s);let i=r.getIn(["rootPath"]),o=Vn.join(i,ms.HDB_CONFIG_FILE);if(Qr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Qr.writeFileSync(o,String(r)),rr.trace(`Config file written to ${o}`)}a(q6,"createConfigFile");function xv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!mr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Zf.TABLES))for(let i in n[s][Zf.TABLES])for(let o in n[s][Zf.TABLES][i]){let c=n[s][Zf.TABLES][i][o],l=[$n.DATABASES,s,Zf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[$n.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){rr.error("Error parsing schemas CLI/env config arguments",n)}}a(xv,"setSchemasConfig");function $6(e){if(Bp===void 0){let r=fa(Uv);Bp=cu(r.toJSON())}let t=Vs[e.toLowerCase()];if(t!==void 0)return Bp[t.toLowerCase()]}a($6,"getDefaultConfig");function Bv(e){if(e==null){rr.info(k6);return}if(Pt===void 0){rr.trace(x6);return}let t=Vs[e.toLowerCase()];if(t!==void 0)return Pt[t.toLowerCase()]}a(Bv,"getConfigValue");function kc(e=mr.getPropsFilePath()){let t=mr.getEnvCliRootPath();if(t)return uy(Vn.join(t,ms.HDB_CONFIG_FILE));let r=Mv(e);return uy(r.get(ms.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(kc,"getConfigFilePath");function kp(e=!1){if(Pt===void 0||e){let t;if(!mr.noBootFile()){t=mr.getPropsFilePath();try{Qr.accessSync(t,Qr.constants.F_OK|Qr.constants.R_OK)}catch(i){throw rr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=kc(t),n;if(r.includes("config/settings.js"))try{kv(r);return}catch(i){if(i.code!==ms.NODE_ERROR_CODES.ENOENT)throw i}try{n=fa(r)}catch(i){if(i.code===ms.NODE_ERROR_CODES.ENOENT){rr.trace(`HarperDB config file not found at ${r}.
19
19
  This can occur during early stages of install where the config file has not yet been created`);return}else throw rr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}V6(n,r),fy(n);let s=n.toJSON();if(U6.config=s,Pt=cu(s),Pt.logging_rotation_rotate)for(let i in Dv)Pt[i]&&rr.error(`Config ${Dv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rr.trace(B6)}}a(kp,"initConfig");function V6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Vn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Vn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(rr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Qr.writeFileSync(t,String(e))}}a(V6,"checkForUpdatedConfig");function fy(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw au.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw au.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=P6(r,t);if(n.error)throw au.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(fy,"validateConfig");function K6(e,t){Pt===void 0&&(Pt={});let r=Vs[e.toLowerCase()];if(r===void 0){rr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Pt[r.toLowerCase()]=t}a(K6,"updateConfigObject");function Hv(e,t,r=void 0,n=!1,s=!1,i=!1){Pt===void 0&&kp();let o=Bv(Vs.hdb_root),c=Vn.join(o,ms.HDB_CONFIG_FILE),l=fa(c),u;if(r&&Pt){let _=!1;for(let h in r)if(r[h]!=Pt[h.toLowerCase()]){_=!0;break}if(!_){rr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===$n.DATABASES)u=t;else if(r===void 0){let _;if(i)_=e;else if(_=Vs[e.toLowerCase()],_===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=_.split("_"),m=dy(_,t);l.setIn([...h],m)}else for(let _ in r){let h=Vs[_.toLowerCase()];if(h===$n.HTTP_SECUREPORT&&r[_]===Pt[$n.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===$n.OPERATIONSAPI_NETWORK_SECUREPORT&&r[_]===Pt[$n.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===$n.DATABASES){u=r[_];continue}if(h?.startsWith("threads_")){let m=l.getIn(["threads"]);m>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],m))}if(!h&&(_.endsWith("_package")||_.endsWith("_port"))&&(h=_),h!==void 0){let m=h.split("_"),S=ms.LEGACY_CONFIG_PARAMS[_.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(h=S,m=S.split("_"));let g=dy(h,r[_]);h==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{m.length>1&&typeof l.getIn(m.slice(0,-1))=="boolean"&&l.deleteIn(m.slice(0,-1)),l.setIn([...m],g)}catch(R){rr.error(R)}}}u&&xv(l,u),fy(l);let f=l.getIn(["rootPath"]),d=Vn.join(f,ms.HDB_CONFIG_FILE);if(n===!0&&Y6(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Qr.writeFileSync(d,String(l)),s&&(Pt=cu(l.toJSON())),rr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Hv,"updateConfigValue");function Y6(e,t){try{let r=Vn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ms.HDB_CONFIG_FILE}.bak`);Qr.copySync(e,r),rr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rr.error(H6),rr.error(r)}}a(Y6,"backupConfigFile");var W6=["databases"];function cu(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),Hp=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!W6.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!$n[l.toUpperCase()]&&Vs[l]&&(s[Vs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(cu,"flattenConfig");function dy(e,t){if(e===$n.CLUSTERING_NODENAME||e===$n.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(D6(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||mr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return mr.autoCast(t)}a(dy,"castConfigValue");function z6(){let e=mr.getPropsFilePath(),t=kc(e);return fa(t).toJSON()}a(z6,"getConfiguration");async function Q6(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return Hv(void 0,void 0,s,!0),G6}catch(i){throw typeof i=="string"||i instanceof String?M6(i,i,v6.BAD_REQUEST,void 0,void 0,!0):i}}a(Q6,"setConfiguration");function _y(){let e=mr.getPropsFilePath();try{Qr.accessSync(e,Qr.constants.F_OK|Qr.constants.R_OK)}catch(n){if(!mr.noBootFile())throw rr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=kc(e);return fa(t).toJSON()}a(_y,"readConfigFile");function fa(e){return Lv.parseDocument(Qr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(fa,"parseYamlDoc");function j6(){let e=_y(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mr.isEmptyOrZeroLength(t)?[]:t;let r=Pv(t);if(r)throw au.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=mr.isEmptyOrZeroLength(n)?[]:n;let s=Pv(n);if(s)throw au.CONFIG_VALIDATION(s.message);if(!mr.isEmptyOrZeroLength(n)&&!mr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!mr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw au.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(j6,"getClusteringRoutes");function kv(e){let t=Mv(e);Pt={};for(let r in Vs){let n=t.get(r.toUpperCase());if(mr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Vs[r].toLowerCase();s===$n.LOGGING_ROOT?Pt[s]=Vn.dirname(n):Pt[s]=n}return Pt}a(kv,"initOldConfig");function J6(e){let t=_y();return L6.get(t,e.replaceAll("_","."))}a(J6,"getConfigFromFile");async function X6(e,t){let r=fa(kc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Qr.writeFile(kc(),String(r))}a(X6,"addConfig");function Z6(e){let t=kc(mr.getPropsFilePath()),r=fa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Vn.join(n,ms.HDB_CONFIG_FILE);Qr.writeFileSync(s,String(r))}a(Z6,"deleteConfigFromFile");function e8(){return Hp||(kp(),Hp)}a(e8,"getConfigObj");function t8(){return Pt||kp(),Pt}a(t8,"getFlatConfigObj")});var Kn=C((rbe,Or)=>{"use strict";var $v="username is required",Vv="nothing to update, must supply active, role or password to update",Kv="password cannot be an empty string",Yv="If role is specified, it cannot be empty.",Wv="active must be true or false";Or.exports.addUser=u8;Or.exports.alterUser=d8;Or.exports.dropUser=_8;Or.exports.getSuperUser=g8;Or.exports.userInfo=h8;Or.exports.listUsers=Gp;Or.exports.listUsersExternal=m8;Or.exports.setUsersWithRolesCache=Fc;Or.exports.findAndValidateUser=Ry;Or.exports.getClusterUser=S8;Or.exports.getUsersWithRolesCache=E8;Or.exports.USERNAME_REQUIRED=$v;Or.exports.ALTERUSER_NOTHING_TO_UPDATE=Vv;Or.exports.EMPTY_PASSWORD=Kv;Or.exports.EMPTY_ROLE=Yv;Or.exports.ACTIVE_BOOLEAN=Wv;var zv=Sn(),r8=Bc(),e_=(Up(),P(vp)),Qv=Tv(),t_=Wr(),gy=ho(),Ni=ie(),jv=require("validate.js"),Sy=ee(),{promisify:n8}=require("util"),Ty=uo(),my=(k(),P(q)),Gv=Ct(),s8=Dt(),i8=le(),o8=ao(),{hdb_errors:a8,ClientError:Ks}=he(),{HTTP_STATUS_CODES:_o,AUTHENTICATION_ERROR_MSGS:hy,HDB_ERROR_MSGS:lu}=a8,{UserEventMsg:Ay}=Ys(),py=require("lodash"),{server:Fp}=(Mr(),P(Zl)),c8=ee();Fp.getUser=(e,t)=>Ry(e,t,t!=null);Fp.authenticateUser=(e,t)=>Ry(e,t);var Jv={username:!0,active:!0,role:!0,password:!0},qv=new Map,l8=n8(r8.delete),Ey=i8.get(my.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??e_.HASH_FUNCTION.SHA256,wi;async function u8(e){let t=jv.cleanAttributes(e,Jv),r=Qv.addUserValidation(t);if(r)throw new Ks(r.message);let n=await t_.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(lu.ROLE_NAME_NOT_FOUND(t.role),_o.NOT_FOUND);if(n.length>1)throw new Ks(lu.DUP_ROLES_FOUND(t.role),_o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Ty.encrypt(t.password)),t.password=await e_.hash(t.password,Ey),t.hash_function=Ey,t.role=n[0].id;let s=await zv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Sy.debug(s),await Fc(),s.skipped_hashes.length===1)throw new Ks(lu.USER_ALREADY_EXISTS(t.username),_o.CONFLICT);return gy.signalUserChange(new Ay(process.pid)),`${t.username} successfully added`}a(u8,"addUser");async function d8(e){let t=jv.cleanAttributes(e,Jv);if(Ni.isEmptyOrZeroLength(t.username))throw new Error($v);if(Ni.isEmptyOrZeroLength(t.password)&&Ni.isEmptyOrZeroLength(t.role)&&Ni.isEmptyOrZeroLength(t.active))throw new Error(Vv);if(!Ni.isEmpty(t.password)&&Ni.isEmptyOrZeroLength(t.password.trim()))throw new Error(Kv);if(!Ni.isEmpty(t.active)&&!Ni.isBoolean(t.active))throw new Error(Wv);if(!Ni.isEmpty(t.password)&&!Ni.isEmptyOrZeroLength(t.password.trim())&&(f8(t.username)&&(t.hash=Ty.encrypt(t.password)),t.password=await e_.hash(t.password,Ey)),t.role==="")throw new Error(Yv);if(t.role){let n=await t_.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ks(lu.ALTER_USER_ROLE_NOT_FOUND(t.role),_o.NOT_FOUND);if(n.length>1)throw new Ks(lu.DUP_ROLES_FOUND(t.role),_o.CONFLICT);t.role=n[0].id}let r=await zv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Fc(),gy.signalUserChange(new Ay(process.pid)),r}a(d8,"alterUser");function f8(e){let t=!1,r=wi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(f8,"isClusterUser");async function _8(e){let t=Qv.dropUserValidation(e);if(t)throw new Ks(t.message);if(wi.get(e.username)===void 0)throw new Ks(lu.USER_NOT_EXIST(e.username),_o.NOT_FOUND);let r=await l8({table:"hdb_user",schema:"system",hash_values:[e.username]});return Sy.debug(r),await Fc(),gy.signalUserChange(new Ay(process.pid)),`${e.username} successfully deleted`}a(_8,"dropUser");async function h8(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=py.cloneDeep(e.hdb_user);let r=await t_.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(h8,"userInfo");async function m8(){let e=await Gp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(m8,"listUsersExternal");async function Gp(){let e=await t_.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=py.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await t_.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=py.cloneDeep(s),s.role=t[s.role],p8(s.role),n.set(s.username,s);return n}a(Gp,"listUsers");function p8(e){if(!e){Sy.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(o8)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(p8,"appendSystemTablesToRole");async function Fc(e=void 0){e?wi=e:wi=await Gp()}a(Fc,"setUsersWithRolesCache");async function E8(){return wi||await Fc(),wi}a(E8,"getUsersWithRolesCache");async function Ry(e,t,r=!0){wi||await Fc();let n=wi.get(e);if(!n){if(!r)return{username:e};throw new Ks(hy.GENERIC_AUTH_FAIL,_o.UNAUTHORIZED)}if(n&&!n.active)throw new Ks(hy.USER_INACTIVE,_o.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(qv.get(t)===n.password)return s;{let i=e_.validate(n.password,t,n.hash_function||e_.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)qv.set(t,n.password);else throw new Ks(hy.GENERIC_AUTH_FAIL,_o.UNAUTHORIZED)}}return s}a(Ry,"findAndValidateUser");async function g8(){wi||await Fc();for(let[,e]of wi)if(e.role.role==="super_user")return e}a(g8,"getSuperUser");async function S8(){let e=await Gp(),t=s8.getConfigFromFile(my.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==my.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Ty.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Gv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Gv.SERVER_SUFFIX.ADMIN,r}a(S8,"getClusterUser");var Xv=[];Fp.invalidateUser=function(e){for(let t of Xv)try{t(e)}catch(r){c8.error("Error invalidating user",r)}};Fp.onInvalidatedUser=function(e){Xv.push(e)}});var n_=C((obe,rU)=>{"use strict";var Gc=ee(),Yn=(k(),P(q)),T8=mM(),sbe=$s(),ibe=fo(),A8=Kn(),{validateEvent:Zv}=Ys(),r_=qn(),R8=require("process"),{resetDatabases:y8}=(xe(),P(ct)),b8={[Yn.ITC_EVENT_TYPES.SCHEMA]:O8,[Yn.ITC_EVENT_TYPES.USER]:tU};async function O8(e){let t=Zv(e);if(t){Gc.error(t);return}Gc.trace("ITC schemaHandler received schema event:",e),await T8(e.message),await N8(e.message)}a(O8,"schemaHandler");async function N8(e){try{r_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),r_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),r_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=y8();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Gc.error(t)}}a(N8,"syncSchemaMetadata");var eU=[];async function tU(e){try{try{r_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),r_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Gc.warn(r)}let t=Zv(e);if(t){Gc.error(t);return}Gc.trace(`ITC userHandler ${Yn.HDB_ITC_CLIENT_PREFIX}${R8.pid} received user event:`,e),await A8.setUsersWithRolesCache();for(let r of eU)r()}catch(t){Gc.error(t)}}a(tU,"userHandler");tU.addListener=function(e){eU.push(e)};rU.exports=b8});var Ys=C((fbe,sU)=>{"use strict";var cbe=ee(),yy=ie(),w8=(k(),P(q)),{ITC_ERRORS:s_}=Un(),{parentPort:lbe,threadId:I8,isMainThread:C8,workerData:ube}=require("worker_threads"),{onMessageFromWorkers:P8,broadcast:dbe,broadcastWithAcknowledgement:D8}=it();sU.exports={sendItcEvent:L8,validateEvent:nU,SchemaEventMsg:M8,UserEventMsg:v8};var qp;P8(async(e,t)=>{qp=qp||n_(),nU(e),qp[e.type]&&await qp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function L8(e){return!C8&&e.message&&(e.message.originator=I8),D8(e)}a(L8,"sendItcEvent");function nU(e){if(typeof e!="object")return s_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||yy.isEmpty(e.type))return s_.MISSING_TYPE;if(!e.hasOwnProperty("message")||yy.isEmpty(e.message))return s_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||yy.isEmpty(e.message.originator))return s_.MISSING_ORIGIN;if(w8.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return s_.INVALID_EVENT(e.type)}a(nU,"validateEvent");function M8(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(M8,"SchemaEventMsg");function v8(e){this.originator=e}a(v8,"UserEventMsg")});var ho=C((mbe,cU)=>{"use strict";var iU=(k(),P(q)),hbe=ie(),$p=ee(),oU=fM(),uu,{sendItcEvent:aU}=Ys();function U8(e){try{$p.info("signalSchemaChange called with message:",e),uu=uu||n_();let t=new oU(iU.ITC_EVENT_TYPES.SCHEMA,e);return uu.schema(t),aU(t)}catch(t){$p.error(t)}}a(U8,"signalSchemaChange");function x8(e){try{$p.trace("signalUserChange called with message:",e),uu=uu||n_();let t=new oU(iU.ITC_EVENT_TYPES.USER,e);return uu.user(t),aU(t)}catch(t){$p.error(t)}}a(x8,"signalUserChange");cU.exports={signalSchemaChange:U8,signalUserChange:x8}});var Vp=C((Ebe,uU)=>{"use strict";var lU=ie(),B8=(k(),P(q)),H8=ee(),k8=Op(),F8=bp(),G8=ho(),{SchemaEventMsg:q8}=Ys(),$8="already exists in";uU.exports=V8;async function V8(e,t,r){if(lU.isEmptyOrZeroLength(r))return r;let n=[];lU.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 K8(e,t.schema,t.name,i)})),s}a(V8,"lmdbCheckForNewAttributes");async function K8(e,t,r,n){let s=new F8(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await Y8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes($8))H8.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(K8,"createNewAttribute");async function Y8(e){let t;return t=await k8(e),G8.signalSchemaChange(new q8(process.pid,B8.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Y8,"createAttribute")});var du=C((Sbe,dU)=>{"use strict";var by=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}};dU.exports=by});var _U=C((Abe,fU)=>{"use strict";var W8=du(),z8=(k(),P(q)).OPERATIONS_ENUM,Oy=class extends W8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(z8.INSERT,r,n,s,i),this.records=t}};fU.exports=Oy});var mU=C((ybe,hU)=>{"use strict";var Q8=du(),j8=(k(),P(q)).OPERATIONS_ENUM,Ny=class extends Q8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(j8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};hU.exports=Ny});var EU=C((Obe,pU)=>{"use strict";var J8=du(),X8=(k(),P(q)).OPERATIONS_ENUM,wy=class extends J8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(X8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};pU.exports=wy});var SU=C((wbe,gU)=>{"use strict";var Z8=du(),eZ=(k(),P(q)).OPERATIONS_ENUM,Iy=class extends Z8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(eZ.DELETE,n,s,t,i),this.original_records=r}};gU.exports=Iy});var i_=C((Pbe,yU)=>{"use strict";var Cbe=require("path"),TU=_t(),tZ=_U(),rZ=mU(),nZ=EU(),sZ=SU(),fu=Ft(),AU=ie(),{CONFIG_PARAMS:iZ}=(k(),P(q)),RU=le();RU.initSync();var Kp=(k(),P(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:oZ}=gt();yU.exports=aZ;async function aZ(e,t){if(RU.get(iZ.LOGGING_AUDITLOG)===!1)return;let r=oZ(e.schema,e.table),n=await TU.openEnvironment(r,e.table,!0),s=cZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){TU.initializeDBIs(n,fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,fu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),AU.isEmpty(s.user_name)||n.dbis[fu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[fu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(aZ,"writeTransaction");function cZ(e,t){let r=AU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Kp.INSERT)return new tZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Kp.UPDATE)return new rZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Kp.UPSERT)return new nZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Kp.DELETE)return new sZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(cZ,"createTransactionObject")});var Cy=C((Mbe,bU)=>{"use strict";var lZ=qf(),Lbe=gf(),o_=(k(),P(q)),uZ=Sf(),dZ=Dc().insertRecords,fZ=_t(),_Z=ee(),hZ=Vp(),{getSchemaPath:mZ}=gt(),pZ=i_();bU.exports=EZ;async function EZ(e){try{let{schema_table:t,attributes:r}=lZ(e);uZ(e,r,t.hash_attribute),e.schema!==o_.SYSTEM_SCHEMA_NAME&&(r.includes(o_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(o_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(o_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(o_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await hZ(e.hdb_auth_header,t,r),s=mZ(e.schema,e.table),i=await fZ.openEnvironment(s,e.table),o=await dZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await pZ(e,o)}catch(c){_Z.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(EZ,"lmdbCreateRecords")});var wU=C((Ube,NU)=>{"use strict";var OU=(k(),P(q)),gZ=Cy(),SZ=gf(),TZ=require("fs-extra"),{getSchemaPath:AZ}=gt();NU.exports=RZ;async function RZ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new SZ(OU.SYSTEM_SCHEMA_NAME,OU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await gZ(r),await TZ.mkdirp(AZ(e.schema))}a(RZ,"lmdbCreateSchema")});var CU=C((Bbe,IU)=>{"use strict";var Py=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}};IU.exports=Py});var MU=C((qbe,LU)=>{"use strict";var PU=_t(),Dy=un(),Ly=Un().LMDB_ERRORS_ENUM,yZ=Ft(),DU=ee(),kbe=ie(),bZ=require("lmdb"),OZ=CU(),NZ=(k(),P(q)),{OVERFLOW_MARKER:Fbe,MAX_SEARCH_KEY_LENGTH:Gbe}=yZ,wZ=NZ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function IZ(e,t,r,n){if(Dy.validateEnv(e),t===void 0)throw new Error(Ly.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ly.IDS_REQUIRED):new Error(Ly.IDS_MUST_BE_ITERABLE);try{let s=PU.listDBIs(e);PU.initializeDBIs(e,t,s);let i=new OZ,o,c=[],l=[];for(let _=0,h=r.length;_<h;_++)try{o=r[_];let m=e.dbis[t].get(o);if(!m||n&&m[wZ]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,bZ.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=Dy.getIndexedValues(T);if(N)for(let M=0,H=N.length;M<H;M++)E.remove(N[M],o)}catch{DU.warn(`cannot delete from attribute: ${R}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){DU.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=Dy.getNextMonotonicTime(),i}catch(s){throw s}}a(IZ,"deleteRecords");LU.exports={deleteRecords:IZ}});var a_=C((Vbe,UU)=>{"use strict";var _u=ie(),CZ=MU(),PZ=_t(),{getSchemaPath:DZ}=gt(),LZ=i_(),MZ=ee();UU.exports=vZ;async function vZ(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(_u.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_u.isEmptyOrZeroLength(e.hash_values)&&!_u.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];_u.isEmpty(l)||e.hash_values.push(l)}}if(_u.isEmptyOrZeroLength(e.hash_values))return vU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_u.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=DZ(e.schema,e.table),i=await PZ.openEnvironment(s,e.table),o=await CZ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await LZ(e,o)}catch(c){MZ.error(`unable to write transaction due to ${c.message}`)}return vU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(vZ,"lmdbDeleteRecords");function vU(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(vU,"createDeleteResponse")});var vy=C((Wbe,xU)=>{"use strict";var UZ=(k(),P(q)),Ybe=un();function My(e,t){let r=Object.create(null);if(t.length===1&&UZ.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(My,"parseRow");function xZ(e,t,r,n){let s=My(r,e);n.push(s)}a(xZ,"searchAll");function BZ(e,t,r,n){let s=My(r,e);n[t]=s}a(BZ,"searchAllToMap");function HZ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(HZ,"iterateDBI");function qc(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(qc,"pushResults");function kZ(e,t,r,n,s,i){t.toString().endsWith(e)&&qc(t,r,n,s,i)}a(kZ,"endsWith");function FZ(e,t,r,n,s,i){t.toString().includes(e)&&qc(t,r,n,s,i)}a(FZ,"contains");function GZ(e,t,r,n,s,i){t>e&&qc(t,r,n,s,i)}a(GZ,"greaterThanCompare");function qZ(e,t,r,n,s,i){t>=e&&qc(t,r,n,s,i)}a(qZ,"greaterThanEqualCompare");function $Z(e,t,r,n,s,i){t<e&&qc(t,r,n,s,i)}a($Z,"lessThanCompare");function VZ(e,t,r,n,s,i){t<=e&&qc(t,r,n,s,i)}a(VZ,"lessThanEqualCompare");xU.exports={parseRow:My,searchAll:xZ,searchAllToMap:BZ,iterateDBI:HZ,endsWith:kZ,contains:FZ,greaterThanCompare:GZ,greaterThanEqualCompare:qZ,lessThanCompare:$Z,lessThanEqualCompare:VZ,pushResults:qc}});var hu=C((Xbe,$U)=>{"use strict";var _a=_t(),Qbe=ee(),Wn=un(),Yp=Ft(),zt=Un().LMDB_ERRORS_ENUM,jbe=ie(),KZ=(k(),P(q)),Wp=vy(),{parseRow:YZ}=Wp,Jbe=require("lmdb"),{OVERFLOW_MARKER:BU,MAX_SEARCH_KEY_LENGTH:WZ}=Yp;function HU(e,t,r,n=!1,s=void 0,i=void 0){return $c(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(HU,"iterateFullIndex");function c_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return $c(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(c_,"iterateRangeBetween");function $c(e,t,r,n){let s=e.database||e,i=_a.openDBI(s,r);i[Yp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_a.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($c,"setupTransaction");function kU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(BU)){if(!s)if(r)s=_a.openDBI(e,r);else{let l=_a.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=_a.openDBI(e,l[u]),!s[Yp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(kU,"getOverflowCheck");function zZ(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 $c(e,t,t,(o,c,l)=>(zp(r),r=l_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>YZ(u.value,r))))}a(zZ,"searchAll");function QZ(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);zp(r),r=l_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of HU(e,t,t,n,s,i))o.set(c,Wp.parseRow(l,r));return o}a(QZ,"searchAllToMap");function jZ(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=HU(e,void 0,t,r,n,s),c=o.transaction,l=kU(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(jZ,"iterateDBI");function JZ(e,t){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return _a.statDBI(e,t).entryCount}a(JZ,"countAll");function XZ(e,t,r,n,s=!1,i=void 0,o=void 0){return ha(e,r,n),$c(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(XZ,"equals");function ZZ(e,t,r){return ha(e,t,r),_a.openDBI(e,t).getValuesCount(r)}a(ZZ,"count");function e5(e,t,r,n,s=!1,i=void 0,o=void 0){return ha(e,r,n),$c(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(e5,"startsWith");function t5(e,t,r,n,s=!1,i=void 0,o=void 0){return FU(e,t,r,n,s,i,o,!0)}a(t5,"endsWith");function FU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ha(e,r,n),$c(e,null,r,(l,u,f,d)=>{let _=kU(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(BU)?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[Yp.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(FU,"contains");function r5(e,t,r,n,s=!1,i=void 0,o=void 0){ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),c_(e,t,r,n,l,s,i,o,!0,!1)}a(r5,"greaterThan");function n5(e,t,r,n,s=!1,i=void 0,o=void 0){ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),c_(e,t,r,n,l,s,i,o,!1,!1)}a(n5,"greaterThanEqual");function s5(e,t,r,n,s=!1,i=void 0,o=void 0){ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),c_(e,t,r,l,n,s,i,o,!1,!0)}a(s5,"lessThan");function i5(e,t,r,n,s=!1,i=void 0,o=void 0){ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),c_(e,t,r,l,n,s,i,o,!1,!1)}a(i5,"lessThanEqual");function o5(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 c_(e,t,r,n,s,i,o,c)}a(o5,"between");function a5(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(zp(r),r=l_(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=Wp.parseRow(c,r)),o}a(a5,"searchByHash");function c5(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(c5,"checkHashExists");function l5(e,t,r,n,s=[]){return qU(e,t,r,n,s),GU(e,t,r,n,s).map(i=>i[1])}a(l5,"batchSearchByHash");function u5(e,t,r,n,s=[]){qU(e,t,r,n,s);let i=new Map;for(let[o,c]of GU(e,t,r,n,s))i.set(o,c);return i}a(u5,"batchSearchByHashToMap");function GU(e,t,r,n,s=[]){return $c(e,t,t,(i,o,c)=>{r=l_(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,Wp.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(GU,"batchHashSearch");function qU(e,t,r,n,s){if(Wn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(zp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(qU,"initializeBatchSearchByHash");function zp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(zp,"validateFetchAttributes");function ha(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>WZ)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(ha,"validateComparisonFunctions");function l_(e,t){return t.length===1&&KZ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_a.listDBIs(e)),t}a(l_,"setGetWholeRowAttributes");$U.exports={searchAll:zZ,searchAllToMap:QZ,count:ZZ,countAll:JZ,equals:XZ,startsWith:e5,endsWith:t5,contains:FU,searchByHash:a5,setGetWholeRowAttributes:l_,batchSearchByHash:l5,batchSearchByHashToMap:u5,checkHashExists:c5,iterateDBI:jZ,greaterThan:r5,greaterThanEqual:n5,lessThan:s5,lessThanEqual:i5,between:o5}});var mu=C((eOe,zU)=>{var VU=require("lodash"),KU=ot(),Ge=require("joi"),d5=ie(),{hdb_schema_table:u_,checkValidTable:YU,hdb_table:WU,hdb_database:Qp}=Ai(),{handleHDBError:f5,hdb_errors:_5}=he(),{getDatabases:h5}=(xe(),P(ct)),{HTTP_STATUS_CODES:m5}=_5,p5=Ge.object({database:Qp,schema:Qp,table:WU,search_attribute:u_,search_value:Ge.any().required(),get_attributes:Ge.array().min(1).items(Ge.alternatives(u_,Ge.object())).optional(),desc:Ge.bool(),limit:Ge.number().integer().min(1),offset:Ge.number().integer().min(0)}),E5=Ge.object({database:Qp,schema:Qp,table:WU,operator:Ge.string().valid("and","or").default("and").lowercase(),offset:Ge.number().integer().min(0),limit:Ge.number().integer().min(1),get_attributes:Ge.array().min(1).items(Ge.alternatives(u_,Ge.object())).optional(),sort:Ge.object({attribute:Ge.alternatives(u_,Ge.array().min(1)),descending:Ge.bool().optional()}).optional(),conditions:Ge.array().min(1).items(Ge.alternatives(Ge.object({operator:Ge.string().valid("and","or").default("and").lowercase(),conditions:Ge.array()}),Ge.object({search_attribute:Ge.alternatives(u_,Ge.array().min(1)),search_type:Ge.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Ge.when("search_type",{switch:[{is:"equals",then:Ge.any()},{is:"between",then:Ge.array().items(Ge.alternatives([Ge.string(),Ge.number()])).length(2)}],otherwise:Ge.alternatives(Ge.string(),Ge.number())}).required()}))).required()});zU.exports=function(e,t){let r=null;switch(t){case"value":r=KU.validateBySchema(e,p5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(YU("database",e.schema)),i(YU("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=KU.validateBySchema(e,E5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=d5.checkGlobalSchemaTable(e.schema,e.table);if(s)return f5(new Error,s,m5.NOT_FOUND);let o=h5()[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=VU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!VU.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 Uy=C((rOe,QU)=>{"use strict";var g5=_t(),S5=mu(),{getSchemaPath:T5}=gt();QU.exports=A5;function A5(e){let t=S5(e,"hashes");if(t)throw t;let r=T5(e.schema,e.table);return g5.openEnvironment(r,e.table)}a(A5,"initialize")});var xy=C((sOe,jU)=>{"use strict";var R5=hu(),y5=Uy();jU.exports=b5;async function b5(e){let t=await y5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return R5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(b5,"lmdbGetDataByHash")});var pu=C((oOe,JU)=>{"use strict";var By=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};JU.exports=By});var ZU=C((lOe,XU)=>{"use strict";var cOe=pu(),O5=hu(),N5=Uy();XU.exports=w5;async function w5(e){let t=await N5(e),r=global.hdb_schema[e.schema][e.table];return O5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(w5,"lmdbSearchByHash")});var Ws=C((dOe,e0)=>{"use strict";var Hy=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}};e0.exports=Hy});var jp=C((_Oe,o0)=>{"use strict";var jr=hu(),I5=_t(),C5=ie(),qe=Ft(),Vc=(k(),P(q)),P5=ao(),t0=Un().LMDB_ERRORS_ENUM,{getSchemaPath:D5}=gt(),mo=Vc.SEARCH_WILDCARDS;async function L5(e,t,r){let n;e.schema===Vc.SYSTEM_SCHEMA_NAME?n=P5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=i0(e,n.hash_attribute,r,t);return n0(e,s,n.hash_attribute,r)}a(L5,"prepSearch");async function n0(e,t,r,n){let s=D5(e.schema,e.table),i=await I5.openEnvironment(s,e.table),o=s0(i,e,t,r),c=o.transaction||i;if([qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,qe.SEARCH_TYPES.SEARCH_ALL,qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(M5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?r0(o,()=>!0):o.map(_=>({[r]:_.key}));let d=a(_=>({[r]:_.value,[f]:_.key}),"toObject");return n?r0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?jr.batchSearchByHashToMap(c,r,e.get_attributes,u):jr.batchSearchByHash(c,r,e.get_attributes,u)}a(n0,"executeSearch");function s0(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 qe.SEARCH_TYPES.EQUALS:s=jr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case qe.SEARCH_TYPES.CONTAINS:s=jr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case qe.SEARCH_TYPES.ENDS_WITH:case qe.SEARCH_TYPES._ENDS_WITH:s=jr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case qe.SEARCH_TYPES.STARTS_WITH:case qe.SEARCH_TYPES._STARTS_WITH:s=jr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return jr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return jr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case qe.SEARCH_TYPES.SEARCH_ALL:return jr.searchAll(e,n,t.get_attributes,o,c,l);case qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return jr.searchAllToMap(e,n,t.get_attributes,o,c,l);case qe.SEARCH_TYPES.BETWEEN:s=jr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case qe.SEARCH_TYPES.GREATER_THAN:case qe.SEARCH_TYPES._GREATER_THAN:s=jr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=jr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case qe.SEARCH_TYPES.LESS_THAN:case qe.SEARCH_TYPES._LESS_THAN:s=jr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case qe.SEARCH_TYPES.LESS_THAN_EQUAL:case qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=jr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(s0,"searchByType");function r0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(r0,"createMapFromIterable");function M5(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(M5,"checkToFetchMore");function i0(e,t,r,n){if(C5.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),mo.indexOf(s)>-1)return r===!0?qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(mo[0])<0&&s.indexOf(mo[1])<0)return c===!0?r===!0?qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:qe.SEARCH_TYPES.EQUALS;if(mo.indexOf(i)>=0&&mo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),qe.SEARCH_TYPES.CONTAINS;if(mo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),qe.SEARCH_TYPES.ENDS_WITH;if(mo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(mo[0])||s.includes(mo[1]))return qe.SEARCH_TYPES.EQUALS;throw new Error(t0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Vc.VALUE_SEARCH_COMPARATORS.BETWEEN:return qe.SEARCH_TYPES.BETWEEN;case Vc.VALUE_SEARCH_COMPARATORS.GREATER:return qe.SEARCH_TYPES.GREATER_THAN;case Vc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Vc.VALUE_SEARCH_COMPARATORS.LESS:return qe.SEARCH_TYPES.LESS_THAN;case Vc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(t0.UNKNOWN_SEARCH_TYPE)}}a(i0,"createSearchTypeFromSearchObject");o0.exports={executeSearch:n0,createSearchTypeFromSearchObject:i0,prepSearch:L5,searchByType:s0}});var c0=C((pOe,a0)=>{"use strict";var mOe=Ws(),v5=mu(),U5=ie(),x5=(k(),P(q)),B5=jp();a0.exports=H5;function H5(e,t){if(!U5.isEmpty(t)&&x5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=v5(e,"value");if(n)throw n;return B5.prepSearch(e,t,!0)}a(H5,"lmdbGetDataByValue")});var d_=C((SOe,l0)=>{"use strict";var gOe=Ws(),k5=mu(),F5=ie(),G5=(k(),P(q)),q5=jp();l0.exports=$5;async function $5(e,t){if(!F5.isEmpty(t)&&G5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=k5(e,"value");if(n)throw n;return q5.prepSearch(e,t,!1)}a($5,"lmdbSearchByValue")});var d0=C((ROe,u0)=>{"use strict";var AOe=Ft(),ky=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}},Fy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Gy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};u0.exports={SearchByConditionsObject:ky,SearchCondition:Fy,SortAttribute:Gy}});var p0=C((NOe,m0)=>{"use strict";var bOe=d0().SearchByConditionsObject,V5=Ws(),K5=mu(),qy=hu(),Jp=Ft(),{Resource:OOe}=(na(),P(GA)),h0=jp(),Y5=vy(),W5=require("lodash"),{getSchemaPath:z5}=gt(),f0=_t(),{handleHDBError:Q5,hdb_errors:j5}=he(),{HTTP_STATUS_CODES:J5}=j5,X5=1e8;m0.exports=Z5;async function Z5(e){let t=K5(e,"conditions");if(t)throw Q5(t,t.message,J5.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=z5(e.schema,e.table),n=await f0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)f0.openDBI(n,u.search_attribute);let i=W5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Jp.SEARCH_TYPES.EQUALS?u.estimated_count=qy.count(n,u.search_attribute,u.search_value):f===Jp.SEARCH_TYPES.CONTAINS||f===Jp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=X5}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await _0(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(h0.filterByType),d=f.length,_=qy.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=>Y5.parseRow(h,_))}else{for(let d=1;d<i.length;d++){let _=i[d],h=await _0(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=qy.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Z5,"lmdbSearchByConditions");async function _0(e,t,r,n){let s=new V5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Jp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,h0.searchByType(e,s,i,n).map(o=>o.value)}a(_0,"executeConditionSearch")});var f_=C((IOe,E0)=>{"use strict";var e9=(k(),P(q)).OPERATIONS_ENUM,$y=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=e9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};E0.exports=$y});var Vy=C((POe,O0)=>{"use strict";var A0=Ws(),R0=f_(),y0=d_(),b0=a_(),Tn=(k(),P(q)),g0=ie(),S0=_t(),{getTransactionAuditStorePath:t9,getSchemaPath:r9}=gt(),T0=ee();O0.exports=n9;async function n9(e){try{if(g0.isEmpty(global.hdb_schema[e.schema])||g0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await s9(e),await i9(e);let t=r9(e.schema,e.table);try{await S0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")T0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=t9(e.schema,e.table);await S0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")T0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(n9,"lmdbDropTable");async function s9(e){let t=new A0(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Tn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Tn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await y0(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 R0(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await b0(s)}a(s9,"deleteAttributesFromSystem");async function i9(e){let t=new A0(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Tn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Tn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Tn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await y0(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 R0(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await b0(s)}catch(i){throw i}}a(i9,"dropTableFromSystem")});var w0=C((LOe,N0)=>{"use strict";var o9=require("fs-extra"),a9=Ws(),c9=pu(),l9=f_(),u9=Vy(),d9=a_(),f9=xy(),_9=d_(),po=(k(),P(q)),{getSchemaPath:h9}=gt(),{handleHDBError:m9,hdb_errors:p9}=he(),{HDB_ERROR_MSGS:E9,HTTP_STATUS_CODES:g9}=p9;N0.exports=S9;async function S9(e){let t;try{t=await T9(e.schema);let r=new a9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[po.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await _9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await u9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new l9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await d9(s);let i=h9(t);await o9.remove(i)}catch(r){throw r}}a(S9,"lmdbDropSchema");async function T9(e){let t=new c9(po.SYSTEM_SCHEMA_NAME,po.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[po.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 m9(new Error,E9.SCHEMA_NOT_FOUND(e),g9.NOT_FOUND,void 0,void 0,!0);return n}a(T9,"validateDropSchema")});var __=C((vOe,I0)=>{"use strict";var Ky=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};I0.exports=Ky});var Wy=C((BOe,C0)=>{"use strict";var A9=require("fs-extra"),Xp=_t(),{getTransactionAuditStorePath:R9}=gt(),Yy=Ft(),xOe=__();C0.exports=y9;async function y9(e){let t;try{let r=R9(e.schema,e.table);await A9.mkdirp(r),t=await Xp.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{Xp.createDBI(t,Yy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Xp.createDBI(t,Yy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Xp.createDBI(t,Yy.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(y9,"createTransactionsAuditEnvironment")});var L0=C((FOe,D0)=>{"use strict";var zy=(k(),P(q)),P0=_t(),b9=Dc(),{getSystemSchemaPath:O9,getSchemaPath:N9}=gt(),kOe=ao(),w9=Op(),Qy=bp(),I9=ee(),C9=Wy();D0.exports=P9;async function P9(e,t){let r=N9(t.schema,t.table),n=new Qy(t.schema,t.table,zy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Qy(t.schema,t.table,zy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Qy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await P0.createEnvironment(r,t.table),e!==void 0){let o=await P0.openEnvironment(O9(),zy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await b9.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 jy(n),await jy(s),await jy(i)}await C9(t)}catch(o){throw o}}a(P9,"lmdbCreateTable");async function jy(e){try{await w9(e)}catch(t){I9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(jy,"createAttribute")});var v0=C((qOe,M0)=>{"use strict";var D9=qf(),L9=Sf(),M9=Vp(),h_=(k(),P(q)),v9=Dc().updateRecords,U9=_t(),{getSchemaPath:x9}=gt(),B9=i_(),H9=ee();M0.exports=k9;async function k9(e){try{let{schema_table:t,attributes:r}=D9(e);L9(e,r,t.hash_attribute),e.schema!==h_.SYSTEM_SCHEMA_NAME&&(r.includes(h_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(h_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(h_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(h_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await M9(e.hdb_auth_header,t,r),s=x9(e.schema,e.table),i=await U9.openEnvironment(s,e.table),o=await v9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await B9(e,o)}catch(c){H9.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(k9,"lmdbUpdateRecords")});var x0=C((VOe,U0)=>{"use strict";var F9=(k(),P(q)).OPERATIONS_ENUM,Jy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=F9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};U0.exports=Jy});var H0=C((WOe,B0)=>{"use strict";var YOe=x0(),G9=qf(),q9=Sf(),$9=Vp(),m_=(k(),P(q)),V9=Dc().upsertRecords,K9=_t(),{getSchemaPath:Y9}=gt(),W9=i_(),z9=ee(),{handleHDBError:Q9,hdb_errors:j9}=he();B0.exports=J9;async function J9(e){let t;try{t=G9(e)}catch(l){throw Q9(l,l.message,j9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;q9(e,n,r.hash_attribute),e.schema!==m_.SYSTEM_SCHEMA_NAME&&(n.includes(m_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(m_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(m_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(m_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $9(e.hdb_auth_header,r,n),i=Y9(e.schema,e.table),o=await K9.openEnvironment(i,e.table),c=await V9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await W9(e,c)}catch(l){z9.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(J9,"lmdbUpsertRecords")});var F0=C((QOe,k0)=>{"use strict";var Xy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};k0.exports=Xy});var q0=C((JOe,G0)=>{"use strict";var Zy=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}};G0.exports=Zy});var K0=C((eNe,V0)=>{"use strict";var eb=_t(),{getTransactionAuditStorePath:X9}=gt(),ZOe=F0(),p_=Ft(),Z9=ie(),$0=q0(),e7=require("util").promisify,t7=e7(setTimeout),r7=1e4,n7=100;V0.exports=s7;async function s7(e){let t=X9(e.schema,e.table),r=await eb.openEnvironment(t,e.table,!0),n=eb.listDBIs(r);eb.initializeDBIs(r,p_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new $0;do s=await i7(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 t7(n7);while(s.transactions_deleted>0);return i}a(s7,"deleteAuditLogsBefore");async function i7(e,t){let r=new $0;try{let n=e.dbis[p_.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[p_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Z9.isEmpty(c)||(s=e.dbis[p_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[p_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>r7)break}return await s,r}catch(n){throw n}}a(i7,"deleteTransactions")});var W0=C((rNe,Y0)=>{"use strict";var tb=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Y0.exports=tb});var Q0=C((iNe,z0)=>{"use strict";var o7=Ws(),a7=f_(),sNe=W0(),Ii=(k(),P(q)),c7=ie(),rb=_t(),l7=ao(),u7=d_(),d7=a_(),{getSchemaPath:f7}=gt();z0.exports=_7;async function _7(e,t=!0){let r;e.schema===Ii.SYSTEM_SCHEMA_NAME?r=l7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await m7(e),s=f7(e.schema,e.table),i=await rb.openEnvironment(s,e.table);return t===!0&&await h7(e,i,r.hash_attribute),rb.dropDBI(i,e.attribute),n}a(_7,"lmdbDropAttribute");async function h7(e,t,r){let n=rb.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(h7,"removeAttributeFromAllObjects");async function m7(e){let t=new o7(Ii.SYSTEM_SCHEMA_NAME,Ii.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ii.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ii.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ii.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await u7(t)).filter(o=>o[Ii.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(c7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ii.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new a7(Ii.SYSTEM_SCHEMA_NAME,Ii.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return d7(i)}a(m7,"dropAttributeFromSystem")});var tx=C((cNe,ex)=>{"use strict";var nb=_t(),Eu=Ft(),aNe=un(),sb=(k(),P(q)),j0=ie(),{getTransactionAuditStorePath:p7}=gt(),E7=hu(),Zp=du(),g7=ee();ex.exports=S7;async function S7(e){let t=p7(e.schema,e.table),r=await nb.openEnvironment(t,e.table,!0),n=nb.listDBIs(r);nb.initializeDBIs(r,Eu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case sb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return J0(r,e.search_values);case sb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,A7(r,e.search_values,s);case sb.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return T7(r,e.search_values);default:return J0(r)}}a(S7,"readAuditLog");function J0(e,t=[0,Date.now()]){j0.isEmpty(t[0])&&(t[0]=0),j0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Eu.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 Zp,s))}a(J0,"searchTransactionsByTimestamp");function T7(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[Eu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Z0(e,i))}return Object.fromEntries(r)}a(T7,"searchTransactionsByUsername");function A7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=E7.equals(e,Eu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Eu.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=Z0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);X0(l,"records",r,f,o),X0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(A7,"searchTransactionsByHashValues");function X0(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 Zp(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new Zp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(X0,"loopRecords");function Z0(e,t){let r=[];try{let n=e.dbis[Eu.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 Zp,i);r.push(o)}}catch(i){g7.warn(i)}return r}catch(n){throw n}}a(Z0,"batchSearchTransactions")});var nx=C((fNe,rx)=>{"use strict";var{getSchemaPath:uNe}=gt(),dNe=_t(),{database:R7}=(xe(),P(ct));rx.exports={writeTransaction:y7};async function y7(e,t,r){return R7({database:e,table:t}).transaction(r)}a(y7,"writeTransaction")});var ax=C((hNe,ox)=>{"use strict";var{getSchemaPath:sx}=gt(),ix=_t();ox.exports={flush:b7,resetReadTxn:O7};async function b7(e,t){return(await ix.openEnvironment(sx(e,t),t.toString())).flushed}a(b7,"flush");async function O7(e,t){try{(await ix.openEnvironment(sx(e,t),t.toString())).resetReadTxn()}catch{}}a(O7,"resetReadTxn")});var dx=C((pNe,ux)=>{"use strict";var{Readable:N7}=require("stream"),{getDatabases:w7}=(xe(),P(ct)),{readSync:I7,openSync:C7,createReadStream:cx}=require("fs"),{open:P7}=require("lmdb"),lx=Bf(),D7=Hf(),{AUDIT_STORE_OPTIONS:L7}=(Ri(),P(fx)),{INTERNAL_DBIS_NAME:M7,AUDIT_STORE_NAME:v7}=Ft();ux.exports=x7;var ib=32768,U7=100;async function x7(e){let t=e.database||e.schema||"data",r=w7()[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=P7({noSync:!0,maxDbs:D7.MAX_DBS}),_,h=d.openDB(M7,new lx(!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++%U7===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 lx(!M,M);await g(E,H)}e.include_audit&&await g(v7,{...L7}),await _;let R=cx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=C7(o.path);return o.transaction(()=>{let u=Buffer.alloc(ib);I7(c,u,0,ib),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=cx(null,{fd:c,start:ib}),_=new N7.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(x7,"getBackup")});var mx=C((gNe,hx)=>{"use strict";var B7=ee(),{handleHDBError:H7}=he(),k7=NL(),F7=Op(),G7=Cy(),q7=wU(),$7=a_(),V7=xy(),K7=ZU(),Y7=c0(),W7=d_(),z7=p0(),Q7=w0(),j7=L0(),J7=v0(),X7=H0(),Z7=K0(),eee=Vy(),tee=Q0(),ree=tx(),nee=nx(),_x=ax(),see=dx(),ob=class extends k7{static{a(this,"LMDBBridge")}async searchByConditions(t){return z7(t)}async getDataByHash(t){return await V7(t)}async searchByHash(t){return await K7(t)}async getDataByValue(t,r){return await Y7(t,r)}async searchByValue(t){return await W7(t)}async createSchema(t){return await q7(t)}async dropSchema(t){return await Q7(t)}async createTable(t,r){return await j7(t,r)}async dropTable(t){return await eee(t)}async createAttribute(t){return await F7(t)}async createRecords(t){return await G7(t)}async updateRecords(t){return await J7(t)}async upsertRecords(t){try{return await X7(t)}catch(r){throw H7(r,null,null,B7.ERR,r)}}async deleteRecords(t){return await $7(t)}async dropAttribute(t){return await tee(t)}async deleteAuditLogsBefore(t){return await Z7(t)}async readAuditLog(t){return await ree(t)}writeTransaction(t,r,n){return nee.writeTransaction(t,r,n)}flush(t,r){return _x.flush(t,r)}resetReadTxn(t,r){return _x.resetReadTxn(t,r)}getBackup(t){return see(t)}};hx.exports=ob});var cb={};Ue(cb,{add:()=>eE,applyReverse:()=>px,getRecordAtTime:()=>ab,rebuildUpdateBefore:()=>tE});function eE(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 tE(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,eE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function px(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=iee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Ex}}function ab(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":px(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Ex&&(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 iee,Ex,rE=Re(()=>{Ri();a(eE,"add");eE.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)};iee={add:eE};a(tE,"rebuildUpdateBefore");a(px,"applyReverse");Ex={};a(ab,"getRecordAtTime")});function An(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function oE(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}`);An(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}`);An(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 ${_}`);An(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}`);An(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}`);An(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}`);An(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}`);An(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}`);An(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}`);An(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof gi||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);An(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){An(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}`);An(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=lb(_,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");An(this)[c]=l}),i("deleteProperty",function(c){An(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,Sx);break}o=c}while(o&&o!==Sx)}function lb(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends E_{static{a(this,"TrackedObject")}},oE(r,t)),new r(e)):new E_(e);case Array:let n=new sE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=lb(o,t?.elements)),n[s]=o}return n;default:return e}}function aE(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=aE(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 gu(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=gu(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=cb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=gu(s);r[n]=s}if(!Array.isArray(e))for(let n in e)oee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function nE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Kc]||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(nE(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(nE(s))return!0}else return!0}else return!0}}return!1}var zn,gx,Sx,E_,oee,Kc,sE,iE,ub=Re(()=>{zn=v(he());rE();hn();a(An,"getChanges");a(oE,"assignTrackedAccessors");gx=Object.prototype,Sx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(gx[t])return gx[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=lb(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(lb,"trackObject");E_=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}};oE(E_,{});a(aE,"collapseData");oee=Object.prototype.hasOwnProperty;a(gu,"updateAndFreeze");a(nE,"hasChanges");Kc=Symbol.for("has-array-changes"),sE=class extends Array{static{a(this,"TrackedArray")}#e;[Kc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Kc]=!0,super.splice(...t)}push(...t){return this[Kc]=!0,super.push(...t)}pop(){return this[Kc]=!0,super.pop()}unshift(...t){return this[Kc]=!0,super.unshift(...t)}shift(){return this[Kc]=!0,super.shift()}};sE.prototype.constructor=Array;iE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var wx={};Ue(wx,{ResourceBridge:()=>_b});function hb({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 Ax(e,t){let r=Ci(e),n=hb(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;It(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&&aE(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 Ci(e){let t=e.database||e.schema||cee,r=Xe()[t];if(!r)throw(0,zs.handleHDBError)(new Error,aee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Rx(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*yx(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 bx,cE,zs,Ox,db,fb,Nx,aee,cee,lee,uee,Tx,_b,Ix=Re(()=>{"use strict";bx=v(mx()),cE=v(mu()),zs=v(he());xe();Ox=v(qf());k();db=v(ho()),fb=v(Ys()),Nx=v(ie());mc();ub();({HDB_ERROR_MSGS:aee}=zs.hdb_errors),cee="data",lee=1e4,uee=10,_b=class extends bx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Tx=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,cE.default)(t,"conditions");if(r)throw(0,zs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ci(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:hb(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}]}ft({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ci(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ci(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){Ci(t).dropTable()}createSchema(t){return Su({database:t.schema,table:null}),db.signalSchemaChange(new fb.SchemaEventMsg(process.pid,Yt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mb(t.schema),db.signalSchemaChange(new fb.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,Tx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Ox.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),It(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}_&&(_=aE(_));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),It(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 Rx(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:Um.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,Nx.async_set_timeout)(uee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%lee===0&&await u();return l.length>0&&await u(),s?Rx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,cE.default)(t,"hashes");if(r)throw r;return Ax(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Ax(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&TA[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,cE.default)(t,"value");if(n)throw n;let s=Ci(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===Um.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:hb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ci(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){Ci({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ci(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ci(t),n={};switch(t.search_type){case xm.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 xm.USERNAME:let s=t.search_values;for await(let i of yx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return yx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(hb,"getSelect");a(Ax,"getRecords");a(Ci,"getTable");a(Rx,"createDeleteResponse");a(yx,"groupRecordsInHistory")});var qn=C((DNe,Cx)=>{"use strict";var{ResourceBridge:dee}=(Ix(),P(wx)),fee=le();fee.initSync();var lE;function _ee(){return lE||(lE=new dee,lE)}a(_ee,"getBridge");Cx.exports=_ee()});var Sn=C((MNe,Mx)=>{"use strict";var dE=sR(),Ur=ie(),hee=require("util"),fE=qn(),mee=$s(),Px=ee(),{handleHDBError:Yc,hdb_errors:pee}=he(),{HTTP_STATUS_CODES:Wc}=pee,Eee=hee.promisify(mee.getTableSchema),gee="updated",Dx="inserted",Lx="upserted";Mx.exports={insert:Tee,update:Aee,upsert:Ree,validation:See,flush:yee};async function See(e){if(Ur.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ur.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ur.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Eee(e.schema,e.table),r=dE(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&&Ur.isEmptyOrZeroLength(c[n]))throw Px.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(!Ur.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Px.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ur.isEmpty(c[n])&&c[n]!==""&&s.has(Ur.autoCast(c[n]))&&(c.skip=!0),s.add(Ur.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(See,"validation");async function Tee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=dE(e);if(t)throw Yc(new Error,t.message,Wc.BAD_REQUEST);Ur.transformReq(e);let r=Ur.checkSchemaTableExist(e.schema,e.table);if(r)throw Yc(new Error,r,Wc.BAD_REQUEST);let n=await fE.createRecords(e);return uE(Dx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Tee,"insertData");async function Aee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=dE(e);if(t)throw Yc(new Error,t.message,Wc.BAD_REQUEST);Ur.transformReq(e);let r=Ur.checkSchemaTableExist(e.schema,e.table);if(r)throw Yc(new Error,r,Wc.BAD_REQUEST);let n=await fE.updateRecords(e);return Ur.isEmpty(n.existing_rows)?uE(gee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):uE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Aee,"updateData");async function Ree(e){if(e.operation!=="upsert")throw Yc(new Error,"invalid operation, must be upsert",Wc.INTERNAL_SERVER_ERROR);let t=dE(e);if(t)throw Yc(new Error,t.message,Wc.BAD_REQUEST);Ur.transformReq(e);let r=Ur.checkSchemaTableExist(e.schema,e.table);if(r)throw Yc(new Error,r,Wc.BAD_REQUEST);let n=await fE.upsertRecords(e);return uE(Lx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Ree,"upsertData");function uE(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===Dx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Lx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(uE,"returnObject");function yee(e){return Ur.transformReq(e),fE.flush(e.schema,e.table)}a(yee,"flush")});var kx=C((UNe,Hx)=>{var Tu=require("validate.js"),Ux=ot(),Au=(k(),P(q)),{handleHDBError:bee,hdb_errors:Oee}=he(),{HDB_ERROR_MSGS:Qt,HTTP_STATUS_CODES:Nee}=Oee,pb=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),wee={STRUCTURE_USER:"structure_user"},vx=Object.values(Au.ROLE_TYPES_ENUM),Iee="attribute_permissions",Cee="attribute_name",{PERMS_CRUD_ENUM:Ru}=Au,Pee=[Iee,...Object.values(Ru)],xx=[Ru.READ,Ru.INSERT,Ru.UPDATE],Dee=[Cee,...xx];function Lee(e){let t=pb();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Bx(e,t)}a(Lee,"addRoleValidation");function Mee(e){let t=pb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Bx(e,t)}a(Mee,"alterRoleValidation");function vee(e){let t=pb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ux.validateObject(e,t)}a(vee,"dropRoleValidation");var Uee=["operation","role","id","permission","hdb_user","access"];function Bx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Uee.includes(n[o])||s.push(n[o]);s.length>0&&nr(Qt.INVALID_ROLE_JSON_KEYS(s),r);let i=Ux.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=xee(e);o&&nr(o,r),vx.forEach(c=>{e.permission[c]&&!Tu.isBoolean(e.permission[c])&&nr(Qt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(vx.indexOf(o)<0){if(o===wee.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(Qt.SCHEMA_NOT_FOUND(d),r)}continue}nr(Qt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(Qt.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(Qt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{Pee.includes(f)||nr(Qt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Ru).forEach(f=>{Tu.isDefined(u[f])?Tu.isBoolean(u[f])||nr(Qt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(Qt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(Qt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(Qt.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=>{!Dee.includes(S)&&S!==Ru.DELETE&&nr(Qt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!Tu.isDefined(h.attribute_name)){nr(Qt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=h.attribute_name;if(!f.includes(m)){nr(Qt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}xx.forEach(S=>{Tu.isDefined(h[S])?Tu.isBoolean(h[S])||nr(Qt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):nr(Qt.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(Qt.MISMATCHED_TABLE_ATTR_PERMS(_),r,o,l)}}}}return Bee(r)}a(Bx,"customValidate");Hx.exports={addRoleValidation:Lee,alterRoleValidation:Mee,dropRoleValidation:vee};function xee(e){let{operation:t,permission:r}=e;if(t===Au.OPERATIONS_ENUM.ADD_ROLE||t===Au.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 Qt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Au.ROLE_TYPES_ENUM.SUPER_USER:Au.ROLE_TYPES_ENUM.CLUSTER_USER;return Qt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(xee,"validateNoSUPerms");function Bee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Qt.ROLE_PERMS_ERROR,...e};return bee(new Error,n,Nee.BAD_REQUEST)}else return null}a(Bee,"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 S_=C((HNe,$x)=>{"use strict";var Fx=Sn(),Gx=Wr(),Hee=Bc(),gb=kx(),Sb=ho(),BNe=require("uuid").v4,kee=require("util"),_E=(k(),P(q)),Fee=ie(),Tb=Gx.searchByValue,Gee=Gx.searchByHash,qee=kee.promisify(Hee.delete),$ee=Ws(),Vee=pu(),{hdb_errors:Kee,handleHDBError:zc}=he(),{HDB_ERROR_MSGS:qx,HTTP_STATUS_CODES:g_}=Kee,{UserEventMsg:Ab}=Ys();$x.exports={addRole:Yee,alterRole:Wee,dropRole:zee,listRoles:Qee};function Eb(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(Eb,"scrubRoleDetails");async function Yee(e){let t=gb.addRoleValidation(e);if(t)throw t;e=Eb(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 Tb(r)||[])}catch(i){throw zc(i)}if(n&&n.length>0)throw zc(new Error,qx.ROLE_ALREADY_EXISTS(e.role),g_.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 Fx.insert(s),Sb.signalUserChange(new Ab(process.pid)),e=Eb(e),e}a(Yee,"addRole");async function Wee(e){let t=gb.alterRoleValidation(e);if(t)throw t;e=Eb(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Fx.update(r)}catch(s){throw zc(s)}if(n&&n?.message==="updated 0 of 1 records")throw zc(new Error,"Invalid role id",g_.BAD_REQUEST,void 0,void 0,!0);return await Sb.signalUserChange(new Ab(process.pid)),e}a(Wee,"alterRole");async function zee(e){let t=gb.dropRoleValidation(e);if(t)throw zc(new Error,t,g_.BAD_REQUEST,void 0,void 0,!0);let r=new Vee(_E.SYSTEM_SCHEMA_NAME,_E.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Gee(r));if(n.length===0)throw zc(new Error,qx.ROLE_NOT_FOUND,g_.NOT_FOUND,void 0,void 0,!0);let s=new $ee(_E.SYSTEM_SCHEMA_NAME,_E.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Tb(s)),o=!1;if(Fee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw zc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,g_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qee(c),Sb.signalUserChange(new Ab(process.pid)),`${n[0].role} successfully deleted`}a(zee,"dropRole");async function Qee(){return Tb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Qee,"listRoles")});var Rb={};Ue(Rb,{start:()=>Yx,startOnMainThread:()=>Xee});function Yx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Vx.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(jee.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 Jee(i)}}}async function Jee(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,Kx.isEqual)(i,e)?void 0:(e.id=r.id,(0,hE.alterRole)(e))}return(0,hE.addRole)(e)}var hE,Vx,Kx,jee,Xee,Wx=Re(()=>{xe();hE=v(S_()),Vx=require("yaml"),Kx=require("lodash"),jee=["super_user","cluster_user","structure_user"];a(Yx,"start");a(Jee,"ensureRole");Xee=Yx});async function mE(e){let t=(0,jx.pathToFileURL)(e).toString();if(Zee)return T_||(T_=ete(rte)),(await(await T_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function ete(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),T_=new Compartment({console,Math,Date,fetch:tte,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Qx.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Kr,tables:Qn,databases:We})}};let n=await(0,zx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),T_}function tte(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 rte(){return{Resource:Kr,tables:Qn}}var zx,Qx,jx,Zee,T_,yb=Re(()=>{na();xe();zx=require("fs/promises"),Qx=require("path"),jx=require("url"),Zee=!1;a(mE,"secureImport");a(ete,"getCompartment");a(tte,"secureOnlyFetch");a(rte,"getGlobalVars")});var Ob={};Ue(Ob,{handleFile:()=>nte});async function nte(e,t,r,n){let s=new Map,i=await mE(r);c(i.default)&&n.set((0,bb.dirname)(t),i.default),o(i,(0,bb.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 bb,Jx=Re(()=>{yb();bb=require("path");a(nte,"handleFile")});var wb={};Ue(wb,{start:()=>ste});function ste({resources:e}){e.set("login",Nb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Nb,Xx=Re(()=>{na();a(ste,"start");Nb=class extends Kr{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 N_={};Ue(N_,{addAnalyticsListener:()=>O_,calculateCPUUtilization:()=>EB,diffResourceUsage:()=>gB,recordAction:()=>Lt,recordActionBinary:()=>jn,setAnalyticsEnabled:()=>ite});function ite(e){fB=e}function ote(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 ate(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},EE.set(e,o)}function Lt(e,t,r,n,s){if(!fB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=EE.get(i);o?ote(e,o):ate(i,e,t,r,n,s),pE||cte()}function jn(e,t,r,n,s){Lt(!!e,t,r,n,s)}function O_(e){mB.push(e)}function cte(){pE=performance.now(),setTimeout(async()=>{let e=performance.now()-pE;pE=0;let t=[],r={time:Date.now(),period:e,threadId:Qc.threadId,metrics:t};for(let[s,i]of EE){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 pB){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 SB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Qc.threadId,byThread:!0,...n});for(let s of mB)s(t);EE=new Map,Qc.parentPort?Qc.parentPort.postMessage({type:hB,report:r}):RB({report:r})},_B).unref()}function gE(e,t,r){let n={id:(0,y_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function EB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function gB(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 lte(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};gE(e,"table-size",l),jc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function Zx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=dB.default.statSync(s.primaryStore.env.path).size,c=lte(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};gE(e,"database-size",u),jc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){jc.warn?.("Error getting DB size metrics",s)}}function eB(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};gE(e,"storage-volume",o),jc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){jc.warn?.("Error getting DB volume metrics",s)}}async function ute(e,t=6e4){let r=Cb(),n=TB(),s=new Promise(E=>{let T=performance.now();setImmediate(()=>{let N=performance.now();N-T>5e3&&jc.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&&jc.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 Ln=Ae[dt];typeof Ln=="number"&&(ye[dt]=(ye[dt]*Ht+Ln*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 SB()}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,Ln)=>dt.value>Ln.value?1:-1);let M=N.count-1,H=[],X=0,W=0,$;for(let dt of pB){let Ln=M*dt;for(;X<Ln;)$=T[W++],X+=$.count,W===1&&X--;let Vr=T[W>1?W-2:0];$||($=T[0]),H.push($.value-($.value-Vr.value)*(X-Ln)/$.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,y_.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,y_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:h-tB,active:m-rB,taskQueueLatency:await s,time:_,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(N=>{N||n.primaryStore.put(E,T)})}tB=h,rB=m;let S=process.resourceUsage(),g=gB(A_,S);g.time=_,g.period=A_.time?_-A_.time:t,g.cpuUtilization=EB(A_,g.period),gE(n,"resource-usage",g),A_=g;let R=Xe();Zx(n,R),Zx(n,{system:R.system}),eB(n,R),eB(n,{system:R.system})}async function nB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Cb(){return sB||(sB=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function TB(){return iB||(iB=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function _te(){AB=!0;let e=(0,b_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await ute(_B,e),await nB(Cb(),dte),await nB(TB(),fte)},Math.min(e/2,2147483647)).unref()}function RB(e,t){let r=e.report;r.threadId=t?.threadId||Qc.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(aB.get(t))}),aB.set(t,t.performance.eventLoopUtilization())),r.id=(0,y_.getNextMonotonicTime)(),Cb().primaryStore.put(r.id,r),AB||_te(),hte&&(yB=pte(r))}async function pte(e){if(await yB,!ma){let r=(0,R_.dirname)((0,lB.getLogFilePath)());try{ma=await(0,Ib.open)((0,R_.join)(r,"analytics.log"),"r+")}catch{ma=await(0,Ib.open)((0,R_.join)(r,"analytics.log"),"w+")}}let t=(await ma.stat()).size;if(t>mte){let r=Buffer.alloc(t);await ma.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ma.write(r,{position:0}),await ma.truncate(r.length),t=r.length}await ma.write(JSON.stringify(e)+`