harperdb 4.5.31 → 4.5.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +13 -13
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.fbfcc75d.js → main.64412ce7.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.fbfcc75d.js.LICENSE.txt → main.64412ce7.js.LICENSE.txt} +0 -0
|
@@ -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});Kr.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()}});DL={type:"application/json",serializeStream:Df,serialize:Uf,deserialize:F4,q:.5};Kr.set("*/*",DL);Kr.set("",DL);a(F4,"tryJSONParse");a(Bf,"registerContentHandlers");q4=require("fastify-plugin"),G4=q4(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Tp(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(Tp,"findBestSerializer");NL=iR.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(Hf,"serialize");a(ca,"serializeMessage");a(nR,"asyncSerialization");a(sR,"hasAsyncSerialization");a($4,"streamToBuffer");V4=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(K4,"isBufferEncoding");a(Y4,"parseContentType");a(co,"getDeserializer");a(W4,"deserializerUnknownType");a(z4,"transformIterable");a(Sp,"toCsvStream")});var uR={};Ue(uR,{start:()=>n3});function j4(e){if(e.kind!==Le.Kind.OPERATION_DEFINITION&&e.kind!==Le.Kind.FRAGMENT_DEFINITION)throw new Or(`Unexpected non-executable definition type ${e.kind}.`)}function ML(e){if(typeof e!="object"||e===null)throw new yi("Request body must be an object.");if(!("query"in e))throw new yi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new yi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new yi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new yi("Request body `operationName` field must be a string.")}function lR(e){return parseInt(e.value,10)}function UL(e){return parseFloat(e.value)}function xL(e,t,r){let n=r.get(e.name.value);return BL(n)?HL(n,t):{attribute:t,value:n}}function BL(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],BL(n)?HL(n,t):{attribute:t,value:n}))}function Q4(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:lR(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:UL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return xL(e.value,t,r);case Le.Kind.OBJECT:return kL(e.value,t,r);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new Or(`Value type, ${e.value.kind}, is not supported.`)}}function kL(e,t,r){return e.fields.flatMap(n=>Q4(n,t,r))}function J4(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:lR(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:UL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return xL(e.value,e.name.value,t);case Le.Kind.OBJECT:return kL(e.value,[e.name.value],t);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new Or(`Argument type, ${e.value.kind}, is not supported.`)}}function X4(e,t){return e.flatMap(r=>J4(r,t))}function Ap(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 Or(`Fragment \`${n}\` not found.`);return Ap(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return Ap(r.selectionSet,t)}})}function FL(e,t){return Ap(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:FL(r.selectionSet,t)}:r.name.value)}async function Z4(e,t,r,n){let s=fs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Or(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:FL(e.selectionSet,r),conditions:X4(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 qL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return lR(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]:qL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new Or(`Value type, ${e.kind}, is not supported.`)}}function e3(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=qL(n.defaultValue)),n.type.kind===Le.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Or(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function t3(e,t,r,n){if(e.operation===Le.OperationTypeNode.SUBSCRIPTION)throw new Or("Subscriptions are not supported.");if(e.operation===Le.OperationTypeNode.MUTATION)throw new Or("Mutations are not supported yet.");let s=e3(e.variableDefinitions,t),i=await Promise.all(Ap(e.selectionSet,r).map(c=>Z4(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function vL({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(j4(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 Or("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Or(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Or("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Or(`Operation \`${r}\` not found.`);let l=await t3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function r3(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 ML(r),vL(r,e)}case"POST":{let r=await co(e.headers.get("content-type"),!0)(e._nodeRequest);return ML(r),vL(r,e)}default:throw new yi("Method Not Allowed",405,{Allow:"GET, POST"})}}function n3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await r3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Or)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Or)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Le,Or,yi,GL=Re(()=>{Le=M(require("graphql"));io();ru();a(j4,"assertExecutableDefinitionNode");a(ML,"assertRequestParams");a(lR,"processIntValueNode");a(UL,"processFloatValueNode");a(xL,"processVariableNode");a(BL,"isObject");a(HL,"transformObjectIntoQueryCondition");a(Q4,"processObjectFieldNode");a(kL,"processObjectValueNode");a(J4,"processArgumentNode");a(X4,"buildConditionsQuery");a(Ap,"fillInFragments");a(FL,"buildSelectQuery");a(Z4,"processFieldNode");a(qL,"processConstValueNode");a(e3,"resolveVariables");a(t3,"executeOperation");a(vL,"resolver");Or=class extends Error{static{a(this,"GraphQLQueryingError")}},yi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(r3,"graphqlQueryingHandler");a(n3,"start")});var Oi=C((ibe,KL)=>{"use strict";var VL=oe(),$L=(k(),P(q)),cu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bi=require("joi"),la={schema_format:{pattern:cu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},s3=bi.alternatives(bi.string().min(1).max(la.schema_length.maximum).pattern(cu).messages({"string.pattern.base":"{:#label} "+la.schema_format.message}),bi.number(),bi.array()).required(),i3=bi.alternatives(bi.string().min(1).max(la.schema_length.maximum).pattern(cu).messages({"string.pattern.base":"{:#label} "+la.schema_format.message}),bi.number()),o3=bi.alternatives(bi.string().min(1).max(la.schema_length.maximum).pattern(cu).messages({"string.pattern.base":"{:#label} "+la.schema_format.message}),bi.number()).required();function a3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>la.schema_length.maximum?`'${e}' maximum of 250 characters`:cu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(a3,"checkValidTable");function c3(e,t){return VL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(c3,"validateSchemaExists");function l3(e,t){let r=t.state.ancestors[0].schema;return VL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(l3,"validateTableExists");function u3(e,t){return e.toLowerCase()===$L.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${$L.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(u3,"validateSchemaName");KL.exports={common_validators:la,schema_regex:cu,hdb_schema_table:s3,validateSchemaExists:c3,validateTableExists:l3,validateSchemaName:u3,checkValidTable:a3,hdb_database:i3,hdb_table:o3}});var tt=C((abe,YL)=>{"use strict";var gn=require("validate.js");gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};gn.validators.type.checks={Object:a(function(e){return gn.isObject(e)&&!gn.isArray(e)},"Object"),Array:gn.isArray,Integer:gn.isInteger,Number:gn.isNumber,String:gn.isString,Date:gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};gn.validators.hasValidFileExt=function(e,t){return gn.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};YL.exports={validateObject:d3,validateObjectAsync:f3,validateBySchema:_3};function d3(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=gn(e,t,{format:"flat"});return r?new Error(r):null}a(d3,"validateObject");async function f3(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(f3,"validateObjectAsync");function _3(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_3,"validateBySchema")});var fR=C((lbe,zL)=>{var{hdb_table:h3,hdb_database:WL}=Oi(),m3=tt(),dR=require("joi"),p3={undefined:"undefined",null:"null"},E3=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||p3[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"),g3=dR.object({database:WL,schema:WL,table:h3,records:dR.array().items(dR.object().custom(E3)).required()});zL.exports=function(e){return m3.validateBySchema(e,g3)}});var QL=C((dbe,jL)=>{"use strict";var _R=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")}};jL.exports=_R});var XL=C((_be,JL)=>{"use strict";var hR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};JL.exports=hR});var nM={};Ue(nM,{HAS_EXPIRATION:()=>bp,HAS_RESIDENCY_ID:()=>AR,HAS_STRUCTURE_UPDATE:()=>Np,LAST_TIMESTAMP_PLACEHOLDER:()=>Gf,LOCAL_TIMESTAMP:()=>S3,METADATA:()=>wc,NEW_TIMESTAMP_PLACEHOLDER:()=>eM,NO_TIMESTAMP:()=>mR,PENDING_LOCAL_TIME:()=>RR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>TR,RecordEncoder:()=>SR,TIMESTAMP_ASSIGN_LAST:()=>A3,TIMESTAMP_ASSIGN_NEW:()=>tM,TIMESTAMP_ASSIGN_PREVIOUS:()=>rM,TIMESTAMP_PLACEHOLDER:()=>Rp,TIMESTAMP_RECORD_PREVIOUS:()=>pR,handleLocalTimeForGets:()=>wp,recordUpdater:()=>yR,removeEntry:()=>Cc});function y3(){return qf[0]=qf[0]^64,T3.getFloat64(0)}function wp(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?.[wc];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?.[wc]>=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[wc];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,Nc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Nc.length;u++){let f=Nc[u].deref();(!f||f.isDone||f.isCommitted)&&Nc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function yR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,_){d||l==null?lu=i?.localTime?pR|rM:mR:lu=l?i?.localTime?pR|16384:tM|16384:mR;let h=u?.expiresAt;if(h>=0&&(c|=bp),Ff=c,ER=h,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:lu>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(gR=E,Ff|=AR,g|=Pc),R!==E&&(g|=Dc,R||(R=0)),c&bp&&(g|=Vf),u?.originatingOperation&&(g|=$f),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&f!=="message"&&i.metadataFlags&Ur&&(r.getBinaryFast(i.localTime)||aa(i.value));let T;if(s!==void 0&&(T=Ep(()=>e.put(n,s,m),n,e.rootStore),yc&&(g|=Ur)),l){let N=u?.user?.username;if(_&&(Ep(()=>e.encoder.encode(_),n,e.rootStore),yc&&(g|=Ur)),e.encoder.hasStructureUpdate&&(g|=Np,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,H=r.get(v);if(H){let Z=St(H).previousLocalTime;return T=r.put(v,Ic(o,t,n,Z,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,kf,g,E,R,h),{ifVersion:S}),T}}T=r.put(s===void 0?eM:Gf,Ic(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,kf,g,E,R,h,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function Cc(e,t,r){if(t)return t.value&&t.metadataFlags&Ur&&!e.auditStore?.getBinaryFast(t.localTime)&&aa(t.value),e.remove(t.key,r)}var ZL,yp,Rp,Gf,TR,eM,S3,wc,qf,T3,mR,tM,A3,rM,pR,bp,AR,RR,Np,R3,kf,lu,Ff,ER,gR,SR,Nc,uu=Re(()=>{ZL=require("msgpackr");Ai();yp=M(X());En();En();Rp=new Uint8Array([1,1,1,1,4,64,0,0]),Gf=new Uint8Array([1,1,1,1,1,0,0,0]),TR=new Uint8Array([1,1,1,1,3,64,0,0]),eM=new Uint8Array([1,1,1,1,0,64,0,0]),S3=Symbol("local-timestamp"),wc=Symbol("metadata"),qf=new Uint8Array(8),T3=new DataView(qf.buffer,0,8),mR=0,tM=0,A3=1,rM=3,pR=4,bp=16,AR=32,RR=1,Np=256,lu=0,Ff=-1,ER=-1,gR=0,SR=class extends ZL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(lu||Ff>=0){let o=0,c=lu;c&&(o+=8,lu=0);let l=Ff,u=ER,f=gR;l>=0&&(o+=4,Ff=-1,u>=0&&(o+=8,ER=-1),f&&(o+=4,gR=0));let d=R3=r.call(this,s,i|2048|o);kf=d.subarray((d.start||0)+o,d.end);let _=d.start||0;return c&&(Rp[4]=c,Rp[5]=c>>8,d.set(Rp,_),_+=8),yc&&(l|=Ur),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,l|Op<<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 kf=r.call(this,s,i),kf};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(qf,0,c),c+=8;else for(let _=0;_<8;_++)qf[_]=t[c++];l=y3(),i=t[c]}let u,f;i<32&&(i===Op?(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&bp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&AR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=so(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[wc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:so(()=>super.decode(t,r),this.rootStore)}catch(c){return yp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(y3,"getTimestamp");a(wp,"handleLocalTimeForGets");Nc=[];setInterval(()=>{for(let e=0;e<Nc.length;e++){let t=Nc[e].deref();!t||t.isDone||t.isCommitted?Nc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(yp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):yp.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(yR,"recordUpdater");a(Cc,"removeEntry")});var Kf=C((Sbe,iM)=>{"use strict";var sM=ae(),b3=(k(),P(q)),{RecordEncoder:O3}=(uu(),P(nM));sM.initSync();var N3=sM.get(b3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,bR=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=N3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:O3})}};iM.exports=bR});var Yf=C((Abe,oM)=>{"use strict";var kn=ae(),_s=(k(),P(q));kn.initSync();var Ip=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)}};oM.exports=Ip;Ip.MAX_DBS=1e4});var _t=C((ybe,pM)=>{"use strict";var NR=require("lmdb"),Gs=require("fs-extra"),Fn=require("path"),Cp=dn(),lM=X(),Sn=Un().LMDB_ERRORS_ENUM,Pp=XL(),wR=Kf(),uM=Yf(),ua=kt(),aM=(k(),P(q)),{table:w3,resetDatabases:I3}=(xe(),P(at)),cM=ae(),$s=ua.INTERNAL_DBIS_NAME,dM=ua.DBI_DEFINITION_NAME,C3="data.mdb",P3="lock.mdb",Wf=".mdb",D3="-lock",OR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[ua.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ua.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new NR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Dp(e,t){if(e===void 0)throw new Error(Sn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Sn.ENV_NAME_REQUIRED)}a(Dp,"pathEnvNameValidation");async function IR(e,t,r=!0){try{await Gs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Sn.INVALID_BASE_PATH):n}try{let n=Fn.join(e,t+Wf);return await Gs.access(n,Gs.constants.R_OK|Gs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Gs.access(Fn.join(e,t,C3),Gs.constants.R_OK|Gs.constants.F_OK),Fn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Sn.INVALID_ENVIRONMENT)}else throw new Error(Sn.INVALID_ENVIRONMENT);throw n}}a(IR,"validateEnvironmentPath");function Lp(e,t){if(Cp.validateEnv(e),t===void 0)throw new Error(Sn.DBI_NAME_REQUIRED)}a(Lp,"validateEnvDBIName");async function L3(e,t,r=!1,n=!1){Dp(e,t);let s=Fn.basename(e);t=t.toString();let i=cM.get(aM.CONFIG_PARAMS.DATABASES);i||cM.setProperty(aM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await IR(e,t,n),fM(e,t,r)}catch(o){if(o.message===Sn.INVALID_ENVIRONMENT){let c=Fn.join(e,t);await Gs.mkdirp(n?c:e);let l=new uM(n?c:c+Wf,!1),u=NR.open(l);u.dbis=Object.create(null);let f=new wR(!1);u.openDB($s,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=CR(e,t,r);return u[ua.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(L3,"createEnvironment");async function M3(e,t,r,n=!0){Dp(e,t),t=t.toString();let s=Fn.join(e,t);return w3({table:t,database:Fn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(M3,"copyEnvironment");async function fM(e,t,r=!1){Dp(e,t),t=t.toString();let n=CR(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 IR(e,t),i=Fn.join(e,t+Wf),o=s!=i,c=new uM(s,o),l=NR.open(c);l.dbis=Object.create(null);let u=hM(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[ua.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(fM,"openEnvironment");async function v3(e,t,r=!1){Dp(e,t),t=t.toString();let n=Fn.join(e,t+Wf),s=await IR(e,t);if(global.lmdb_map!==void 0){let i=CR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _M(o),delete global.lmdb_map[i]}}await Gs.remove(s),await Gs.remove(s===n?s+D3:Fn.join(Fn.dirname(s),P3))}a(v3,"deleteEnvironment");async function _M(e){Cp.validateEnv(e);let t=e[ua.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_M,"closeEnvironment");function CR(e,t,r=!1){let s=`${Fn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(CR,"getCachedEnvironmentName");function U3(e){Cp.validateEnv(e);let t=Object.create(null),r=hs(e,$s);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==$s)try{t[n]=Object.assign(new Pp,s)}catch{lM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(U3,"listDBIDefinitions");function hM(e){Cp.validateEnv(e);let t=[],r=hs(e,$s);for(let{key:n}of r.getRange({start:!1}))n!==$s&&t.push(n);return t}a(hM,"listDBIs");function x3(e,t){let n=hs(e,$s).getEntry(t),s=new Pp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{lM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(x3,"getDBIDefinition");function mM(e,t,r,n=!r){if(Lp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===Sn.DBI_DOES_NOT_EXIST){let i=new wR(r,n===!0),o=e.openDB(t,i),c=new Pp(r===!0,n);return o[dM]=c,hs(e,$s).putSync(t,c),e.dbis[t]=o,o}throw s}}a(mM,"createDBI");function hs(e,t){if(Lp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==$s?r=x3(e,t):r=new Pp,r===void 0)throw new Error(Sn.DBI_DOES_NOT_EXIST);let n;try{let s=new wR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Sn.DBI_DOES_NOT_EXIST):s}return n[dM]=r,e.dbis[t]=n,n}a(hs,"openDBI");function B3(e,t){Lp(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[ua.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(B3,"statDBI");async function H3(e,t){try{let r=Fn.join(e,t+Wf);return(await Gs.stat(r)).size}catch{throw new Error(Sn.INVALID_ENVIRONMENT)}}a(H3,"environmentDataSize");function k3(e,t){if(Lp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,$s).removeSync(t)}a(k3,"dropDBI");function F3(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===Sn.DBI_DOES_NOT_EXIST)mM(e,i,i!==t,i===t),n=!0;else throw o}}n&&I3()}a(F3,"initializeDBIs");pM.exports={openDBI:hs,openEnvironment:fM,createEnvironment:L3,listDBIs:hM,listDBIDefinitions:U3,createDBI:mM,dropDBI:k3,statDBI:B3,deleteEnvironment:v3,initializeDBIs:F3,TransactionCursor:OR,environmentDataSize:H3,copyEnvironment:M3,closeEnvironment:_M}});var gM=C((Obe,EM)=>{"use strict";var PR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};EM.exports=PR});var TM=C((wbe,SM)=>{"use strict";var DR=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}};SM.exports=DR});var RM=C((Cbe,AM)=>{"use strict";var LR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};AM.exports=LR});var Mc=C((vbe,OM)=>{"use strict";var q3=_t(),G3=gM(),$3=TM(),V3=RM(),Ni=dn(),zf=Un().LMDB_ERRORS_ENUM,K3=kt(),lo=(k(),P(q)),Y3=oe(),W3=require("uuid"),Dbe=require("lmdb"),{handleHDBError:z3,hdb_errors:j3}=me(),{OVERFLOW_MARKER:Lbe,MAX_SEARCH_KEY_LENGTH:Mbe}=K3,yM=ae();yM.initSync();var Mp=yM.get(lo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),MR=lo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Lc=lo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Q3(e,t,r,n,s=Ni.getNextMonotonicTime()){BR(e,t,r,n),vR(e,t,r);let i=new G3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];bM(u,!0,s);let f=J3(e,t,r,u),d=u[t];o.push(f),c.push(d)}return UR(o,c,n,i,s)}a(Q3,"insertRecords");function J3(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][lo.FUNC_VAL],n[o]=c)}let l=Ni.getIndexedValues(c),u=e.dbis[o];if(l){Mp&&u.prefetch(l.map(f=>({key:f,value:s})),vp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Mp&&e.dbis[t].prefetch([s],vp),e.dbis[t].put(s,n,n[Lc])})}a(J3,"insertRecord");function X3(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(X3,"removeSkippedRecords");function bM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Lc]))&&(e[Lc]=r||(r=Ni.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[MR]))&&(e[MR]=r||Ni.getNextMonotonicTime()):delete e[MR]}a(bM,"setTimestamps");function vR(e,t,r){r.indexOf(lo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(lo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(lo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(lo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),q3.initializeDBIs(e,t,r)}a(vR,"initializeTransaction");async function Z3(e,t,r,n,s=Ni.getNextMonotonicTime()){BR(e,t,r,n),vR(e,t,r);let i=new $3,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],_;try{_=xR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(_),l.push(d)}return UR(c,l,n,i,s,o)}a(Z3,"updateRecords");async function eX(e,t,r,n,s=Ni.getNextMonotonicTime()){try{BR(e,t,r,n)}catch(l){throw z3(l,l.message,j3.HTTP_STATUS_CODES.BAD_REQUEST)}vR(e,t,r);let i=new V3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;Y3.isEmpty(u[t])?(f=W3.v4(),u[t]=f):f=u[t];let d=xR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return UR(o,c,n,i,s)}a(eX,"upsertRecords");async function UR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ni.getNextMonotonicTime(),X3(r,i),n}a(UR,"finalizeWrite");function xR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(bM(r,!f,o),Number.isInteger(r[Lc])&&u[Lc]>r[Lc])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][lo.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ni.getIndexedValues(R);if(E){Mp&&g.prefetch(E.map(T=>({key:T,value:n})),vp);for(let T=0,N=E.length;T<N;T++)g.remove(E[T],n)}if(E=Ni.getIndexedValues(S),E){Mp&&g.prefetch(E.map(T=>({key:T,value:n})),vp);for(let T=0,N=E.length;T<N;T++)g.put(E[T],n)}}let h={...u,...r};c.put(n,h,h[Lc])},"do_put");return l?d=c.ifVersion(n,l.version,_):d=c.ifNoExists(n,_),d.then(h=>h?!0:xR(e,t,r,n,s,i,o))}a(xR,"updateUpsertRecord");function tX(e,t,r){if(Ni.validateEnv(e),t===void 0)throw new Error(zf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zf.WRITE_ATTRIBUTES_REQUIRED):new Error(zf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(tX,"validateBasic");function BR(e,t,r,n){if(tX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(zf.RECORDS_REQUIRED):new Error(zf.RECORDS_MUST_BE_ARRAY)}a(BR,"validateWrite");function vp(){}a(vp,"noop");OM.exports={insertRecords:Q3,updateRecords:Z3,upsertRecords:eX}});var uo=C((xbe,rX)=>{rX.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 wM=C((Bbe,NM)=>{"use strict";var nX=require("uuid"),HR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||nX.v4(),this.schema_table=`${this.schema}.${this.table}`}};NM.exports=HR});var Up=C((kbe,IM)=>{"use strict";var sX=wM(),kR=class extends sX{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}};IM.exports=kR});var PM=C((qbe,CM)=>{"use strict";CM.exports=oX;var iX="inserted";function oX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===iX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(oX,"returnObject")});var xp=C((Vbe,LM)=>{"use strict";var aX=(k(),P(q)),FR=_t(),cX=Mc(),{getSystemSchemaPath:lX,getSchemaPath:uX}=gt(),$be=uo(),{validateBySchema:dX}=tt(),jf=require("joi"),fX=Up(),_X=PM(),{handleHDBError:hX,hdb_errors:mX,ClientError:pX}=me(),DM=oe(),{HTTP_STATUS_CODES:EX}=mX,gX="inserted";LM.exports=SX;async function SX(e){let t=dX(e,jf.object({database:jf.string(),schema:jf.string(),table:jf.string().required(),attribute:jf.string().required()}));if(t)throw new pX(t.message);let r=!e.skip_table_check&&DM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw hX(new Error,r,EX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=DM.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new fX(e.schema,e.table,e.attribute,e.id);try{let i=await FR.openEnvironment(uX(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}`);FR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await FR.openEnvironment(lX(),aX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await cX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return _X(gX,c,{records:[s]},l)}catch(i){throw i}}a(SX,"lmdbCreateAttribute")});var Qf=C((Wbe,vM)=>{"use strict";var fo=oe(),MM=X(),Ybe=fR(),{getDatabases:TX}=(xe(),P(at)),{ClientError:vc}=me();vM.exports=AX;function AX(e){if(fo.isEmpty(e))throw new vc("invalid update parameters defined.");if(fo.isEmptyOrZeroLength(e.schema))throw new vc("invalid schema specified.");if(fo.isEmptyOrZeroLength(e.table))throw new vc("invalid table specified.");if(!Array.isArray(e.records))throw new vc("records must be an array");let t=TX()[e.schema]?.[e.table];if(fo.isEmpty(t))throw new vc(`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&&fo.isEmptyOrZeroLength(o[r]))throw MM.error("a valid hash attribute must be provided with update record:",o),new vc("a valid hash attribute must be provided with update record, check log for more info");if(!fo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw MM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new vc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!fo.isEmpty(o[r])&&o[r]!==""&&n.has(fo.autoCast(o[r]))&&(o.skip=!0),n.add(fo.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(AX,"insertUpdateValidate")});var xM=C((jbe,UM)=>{"use strict";var qR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};UM.exports=qR});var kM=C((Jbe,HM)=>{"use strict";var GR=_t(),RX=X(),BM=Un().LMDB_ERRORS_ENUM;HM.exports=yX;async function yX(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 GR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==BM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await GR.closeEnvironment(global.lmdb_map[n]),await GR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==BM.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){RX.error(t)}}a(yX,"cleanLMDBMap")});var XM=C((eOe,JM)=>{"use strict";var $R=require("recursive-iterator"),bX=require("alasql"),VR=require("clone"),FM=oe(),{handleHDBError:qM,hdb_errors:OX}=me(),{HDB_ERROR_MSGS:GM,HTTP_STATUS_CODES:$M}=OX,{getDatabases:NX}=(xe(),P(at)),wX=["DISTINCT_ARRAY"],VM=Symbol("validateTables"),KR=Symbol("validateTable"),Zbe=Symbol("getAllColumns"),KM=Symbol("validateAllColumns"),Bp=Symbol("findColumn"),YM=Symbol("validateOrderBy"),Jf=Symbol("validateSegment"),YR=Symbol("validateColumn"),WM=Symbol("setColumnsForTable"),zM=Symbol("checkColumnsForAsterisk"),jM=Symbol("validateGroupBy"),QM=Symbol("hasColumns"),WR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[VM](),this[zM](),this[KM]()}[VM](){if(this[QM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[KR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[KR](t.table)})}}[QM](){let t=!1,r=new $R(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[KR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=NX();if(!r[t.databaseid])throw qM(new Error,GM.SCHEMA_NOT_FOUND(t.databaseid),$M.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw qM(new Error,GM.TABLE_NOT_FOUND(t.databaseid,t.tableid),$M.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=VR(s);i.table=VR(t),this.attributes.push(i)})}[Bp](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)}[zM](){let t=new $R(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[WM](r.tableid)}[WM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new bX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[KM](){this[Jf](this.statement.columns,!1),this[Jf](this.statement.joins,!1),this[Jf](this.statement.where,!1),this[jM](this.statement.group,!1),this[Jf](this.statement.order,!0)}[Jf](t,r){if(!t)return;let n=new $R(t),s=[];for(let{node:i,path:o}of n)!FM.isEmpty(i)&&!FM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[YM](i):s.push(this[YR](i)));return s}[jM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&wX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=VR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Bp](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[Bp](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`}[YM](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[YR](t)}[YR](t){let r=this[Bp](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]}};JM.exports=WR});var rv=C((rOe,tv)=>{"use strict";var ZM=require("lodash"),Xf=require("mathjs"),IX=require("jsonata"),ev=oe();tv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?ZM.uniqWith(e,ZM.isEqual):e,"distinct_array"),searchJSON:CX,mad:Zf.bind(null,Xf.mad),mean:Zf.bind(null,Xf.mean),mode:Zf.bind(null,Xf.mode),prod:Zf.bind(null,Xf.prod),median:Zf.bind(null,Xf.median)};function Zf(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(Zf,"aggregateFunction");function CX(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(ev.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ev.isEmpty(this.__ala__.res[r])){let n=IX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(CX,"searchJSON")});var sv=C((sOe,nv)=>{"use strict";var tr=require("moment"),zR="YYYY-MM-DDTHH:mm:ss.SSSZZ";tr.suppressDeprecationWarnings=!0;nv.exports={current_date:a(()=>tr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>tr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return tr(e).utc().format("YYYY");case"month":return tr(e).utc().format("MM");case"day":return tr(e).utc().format("DD");case"hour":return tr(e).utc().format("HH");case"minute":return tr(e).utc().format("mm");case"second":return tr(e).utc().format("ss");case"millisecond":return tr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>tr(e).utc().format(zR),"date"),date_format:a((e,t)=>tr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>tr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>tr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=tr(e).utc(),s=tr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>tr().utc().valueOf(),"now"),get_server_time:a(()=>tr().format(zR),"get_server_time"),offset_utc:a((e,t)=>tr(e).utc().utcOffset(t).format(zR),"offset_utc")}});var cv=C((oOe,av)=>{"use strict";var PX=require("@turf/area"),DX=require("@turf/length"),LX=require("@turf/circle"),MX=require("@turf/difference"),vX=require("@turf/distance"),UX=require("@turf/boolean-contains"),xX=require("@turf/boolean-equal"),BX=require("@turf/boolean-disjoint"),HX=require("@turf/helpers"),iv=(k(),P(q)),Ke=oe(),_o=X();av.exports={geoArea:kX,geoLength:FX,geoCircle:qX,geoDifference:GX,geoDistance:ov,geoNear:$X,geoContains:VX,geoEqual:KX,geoCrosses:YX,geoConvert:WX};function kX(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return PX.default(e)}catch(t){return _o.trace(t,e),NaN}}a(kX,"geoArea");function FX(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return DX.default(e,{units:t||"kilometers"})}catch(r){return _o.trace(r,e),NaN}}a(FX,"geoLength");function qX(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return LX.default(e,t,{units:r||"kilometers"})}catch(n){return _o.trace(n,e,t),NaN}}a(qX,"geoCircle");function GX(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 MX(e,t)}catch(r){return _o.trace(r,e,t),NaN}}a(GX,"geoDifference");function ov(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 vX.default(e,t,{units:r||"kilometers"})}catch(n){return _o.trace(n,e,t),NaN}}a(ov,"geoDistance");function $X(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 ov(e,t,n)<=r}catch(s){return _o.trace(s,e,t),!1}}a($X,"geoNear");function VX(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 UX.default(e,t)}catch(r){return _o.trace(r,e,t),!1}}a(VX,"geoContains");function KX(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 xX.default(e,t)}catch(r){return _o.trace(r,e,t),!1}}a(KX,"geoEqual");function YX(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!BX.default(e,t)}catch(r){return _o.trace(r,e,t),!1}}a(YX,"geoCrosses");function WX(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(iv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(iv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),HX[t](e,r)}a(WX,"geoConvert")});var Hp=C((cOe,lv)=>{var Uc=rv(),qn=sv(),wi=cv();lv.exports=e=>{e.aggr.mad=e.aggr.MAD=Uc.mad,e.aggr.mean=e.aggr.MEAN=Uc.mean,e.aggr.mode=e.aggr.MODE=Uc.mode,e.aggr.prod=e.aggr.PROD=Uc.prod,e.aggr.median=e.aggr.MEDIAN=Uc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Uc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Uc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=qn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=qn.current_time,e.fn.extract=e.fn.EXTRACT=qn.extract,e.fn.date=e.fn.DATE=qn.date,e.fn.date_format=e.fn.DATE_FORMAT=qn.date_format,e.fn.date_add=e.fn.DATE_ADD=qn.date_add,e.fn.date_sub=e.fn.DATE_SUB=qn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=qn.date_diff,e.fn.now=e.fn.NOW=qn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=qn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=qn.get_server_time,e.fn.getdate=e.fn.GETDATE=qn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=qn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wi.geoNear}});var _v=C((lOe,fv)=>{"use strict";var e_=require("lodash"),Tn=require("alasql");Tn.options.cache=!1;var zX=Hp(),uv=require("clone"),kp=require("recursive-iterator"),ke=X(),Je=oe(),du=Gn(),jX=(k(),P(q)),{hdb_errors:QX}=me(),{getDatabases:dv}=(xe(),P(at)),JX="IS NULL",Vs="There was a problem performing this search. Please check the logs and try again.";zX(Tn);var jR=class{static{a(this,"SQLSearch")}constructor(t,r){if(Je.isEmpty(t))throw ke.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Je.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Je.isEmptyOrZeroLength(n))return ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ke.error(n),new Error(Vs)}if(Object.keys(this.data).length===0)return ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ke.error("Error thrown from processJoins in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{return t=await this._finalSQL(),t}catch(n){throw ke.error("Error thrown from finalSQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}}_getColumns(){let t=new kp(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(uv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=e_.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=dv()[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 kp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Je.isEmpty(r)&&r.right)if(Je.isNotEmptyAndHasValue(r.right.value)){let n=Je.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Tn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Je.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Tn.yy.LogicValue({value:i}):n instanceof Tn.yy.StringValue&&Je.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Tn.yy.NumValue({value:i}))});if(t){ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new kp(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(jX.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&&e_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Je.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Je.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&!Je.isEmptyOrZeroLength(this.columns.columns))return t;if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Tn.promise(r)}catch(r){throw ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ke.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(uv(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(JX)>-1&&this.tables.forEach(s=>{let i={columnid:dv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=e_.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 du.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let _=await du.getDataByValue(d);for(let[h,m]of _)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]):(this.data[i].__merged_data[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else if(!Je.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,_=f.length;d<_;d++){let h=f[d];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await du.getDataByValue(c,h.operation);if(l)for(let[S]of m)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of m)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await du.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,_]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ke.error(f),new Error(Vs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Tn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Tn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Tn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Tn.yy.FuncValue:new Tn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,S=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${S}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${S}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let _=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(h,s);_=await Tn.promise(m,t),t=null}catch(h){throw ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ke.error(h),new Error("There was a problem processing the data.")}if(_&&_.length>0){for(let h=0,m=_.length;h<m;h++){let S=_[h];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),S=e_.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 kp(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=e_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ke.error(i),new Error(Vs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await du.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let _=o[f],h=l.get(_);for(let m=0;m<u;m++){let S=s.columns[m],g=h[S]===void 0?null:h[S];this.data[n].__merged_data[_].push(g)}}}}catch(r){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ke.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ke.trace(`Final SQL: ${s}`),n=await Tn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ke.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return ke.error(QX.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 du.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw ke.error("There was an error when processing this SQL operation. Check your logs"),ke.error(o),new Error(Vs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};fv.exports=jR});var Yr=C((dOe,hv)=>{"use strict";var XX=XM();hv.exports={searchByConditions:e6,searchByHash:t6,searchByValue:r6,search:n6};var QR=Gn(),{transformReq:JR}=oe(),ZX=_v();async function e6(e){return JR(e),QR.searchByConditions(e)}a(e6,"searchByConditions");async function t6(e){JR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of QR.searchByHash(e))r&&t.push(r);return t}a(t6,"searchByHash");async function r6(e){JR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of QR.searchByValue(e))t.push(r);return t}a(r6,"searchByValue");function n6(e,t){try{let r=new XX(e);r.validate(),new ZX(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(n6,"search")});var ho=C((_Oe,gv)=>{"use strict";var t_=require("crypto"),s6=ae(),{CONFIG_PARAMS:i6}=(k(),P(q)),pv="aes-256-cbc",o6=32,a6=16,XR=64,Ev=32,c6=XR+Ev,mv=new Map;gv.exports={encrypt:l6,decrypt:u6,createNatsTableStreamName:d6};function l6(e){let t=t_.randomBytes(o6),r=t_.randomBytes(a6),n=t_.createCipheriv(pv,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(l6,"encrypt");function u6(e){let t=e.substr(0,XR),r=e.substr(XR,Ev),n=e.substr(c6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=t_.createDecipheriv(pv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(u6,"decrypt");function d6(e,t){let r=s6.get(i6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=mv.get(r);return n||(n=t_.createHash("md5").update(r).digest("hex"),mv.set(r,n)),n}a(d6,"createNatsTableStreamName")});var Ii=C((pOe,Rv)=>{"use strict";var mOe=Yr(),r_=X(),{validateBySchema:Sv}=tt(),xc=require("joi"),f6=ho(),Fp=oe(),{handleHDBError:qp,hdb_errors:_6,ClientError:Tv}=me(),{HDB_ERROR_MSGS:Gp,HTTP_STATUS_CODES:ZR}=_6,Av=ae();Av.initSync();var{getDatabases:ey}=(xe(),P(at)),h6=require("fs-extra"),m6=(k(),P(q));Rv.exports={describeAll:p6,describeTable:$p,describeSchema:E6};async function p6(e={}){try{let t=Fp.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=ey(),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 $p({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 $p({schema:d,table:h,exact_count:u},S)}m&&l.push(m)}catch(m){r_.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 r_.error("Got an error in describeAll"),r_.error(t),qp(new Error,Gp.DESCRIBE_ALL_ERR)}}a(p6,"describeAll");async function $p(e,t){Fp.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=Sv(e,xc.object({database:xc.string(),table:xc.string().required(),exact_count:xc.boolean().strict()}));if(i)throw new Tv(i.message);let c=ey()[r];if(!c)throw qp(new Error,Gp.SCHEMA_NOT_FOUND(e.schema),ZR.NOT_FOUND);let l=c[n];if(!l)throw qp(new Error,Gp.TABLE_NOT_FOUND(e.schema,e.table),ZR.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 h6.stat(l.primaryStore.env.path)).size}catch(h){r_.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")),Av.get(m6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(_.clustering_stream_name=f6.createNatsTableStreamName(_.schema,_.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});_.record_count=h.recordCount,_.table_size=l.getSize(),_.db_audit_size=l.getAuditSize(),_.estimated_record_range=h.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))_.last_updated_record=S[0];if(!_.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=S}catch(h){r_.warn(`unable to stat table dbi due to ${h}`)}return _}a($p,"descTable");async function E6(e){Fp.transformReq(e);let t=Sv(e,xc.object({database:xc.string(),exact_count:xc.boolean().strict()}));if(t)throw new Tv(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=ey()[n];if(!i)throw qp(new Error,Gp.SCHEMA_NOT_FOUND(e.schema),ZR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Fp.isEmpty(l)||l.describe){let u=await $p({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(E6,"describeSchema")});var ms=C((TOe,wv)=>{var g6=uo(),{callbackify:bv,promisify:S6}=require("util"),{getDatabases:Ov}=(xe(),P(at));wv.exports={setSchemaDataToGlobal:yv,getTableSchema:T6,getSystemSchema:A6,setSchemaDataToGlobalAsync:S6(yv)};var Nv=Ii(),gOe=bv(Nv.describeAll),SOe=bv(Nv.describeTable);function yv(e){global.hdb_schema=Ov(),e&&e()}a(yv,"setSchemaDataToGlobal");function T6(e,t,r){let n=Ov()[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(T6,"getTableSchema");function A6(){return g6}a(A6,"getSystemSchema")});var ry=C((ROe,Pv)=>{var R6=tt(),ty=require("joi"),{hdb_table:y6,hdb_database:Iv}=Oi(),Cv={schema:Iv,database:Iv,table:y6},b6={date:ty.date().iso().required()},O6={timestamp:ty.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Pv.exports=function(e,t){let r=t==="timestamp"?{...Cv,...O6}:{...Cv,...b6},n=ty.object(r);return R6.validateBySchema(e,n)}});var Mv=C((yOe,Lv)=>{var N6=tt(),ny=require("joi"),{hdb_table:w6,hdb_database:Dv}=Oi(),I6=ny.object({schema:Dv,database:Dv,table:w6,hash_values:ny.array().required(),ids:ny.array()});Lv.exports=function(e){return N6.validateBySchema(e,I6)}});var ay=C((bOe,vv)=>{"use strict";var sy=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}},iy=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}},oy=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};vv.exports={InsertObject:sy,NoSQLSeachObject:iy,DeleteResponseObject:oy}});var _a=C((NOe,kv)=>{"use strict";var xv=ry(),C6=Mv(),Bc=oe(),Uv=require("moment"),Bv=X(),{promisify:P6,callbackify:D6}=require("util"),Hc=(k(),P(q)),L6=ms(),cy=P6(L6.getTableSchema),ly=Gn(),{DeleteResponseObject:M6}=ay(),{handleHDBError:da,hdb_errors:v6}=me(),{HDB_ERROR_MSGS:Vp,HTTP_STATUS_CODES:fa}=v6,U6="records successfully deleted",x6=D6(Hv);kv.exports={delete:x6,deleteRecord:Hv,deleteFilesBefore:B6,deleteAuditLogsBefore:H6};async function B6(e){let t=xv(e,"date");if(t)throw da(t,t.message,fa.BAD_REQUEST,void 0,void 0,!0);if(Bc.transformReq(e),!Uv(e.date,Uv.ISO_8601).isValid())throw da(new Error,Vp.INVALID_DATE,fa.BAD_REQUEST,Hc.LOG_LEVELS.ERROR,Vp.INVALID_DATE,!0);let n=Bc.checkSchemaTableExist(e.schema,e.table);if(n)throw da(new Error,n,fa.NOT_FOUND,Hc.LOG_LEVELS.ERROR,n,!0);let s=await ly.deleteRecordsBefore(e);if(await cy(e.schema,e.table),Bv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(B6,"deleteFilesBefore");async function H6(e){let t=xv(e,"timestamp");if(t)throw da(t,t.message,fa.BAD_REQUEST,void 0,void 0,!0);if(Bc.transformReq(e),isNaN(e.timestamp))throw da(new Error,Vp.INVALID_VALUE("Timestamp"),fa.BAD_REQUEST,Hc.LOG_LEVELS.ERROR,Vp.INVALID_VALUE("Timestamp"),!0);let r=Bc.checkSchemaTableExist(e.schema,e.table);if(r)throw da(new Error,r,fa.NOT_FOUND,Hc.LOG_LEVELS.ERROR,r,!0);let n=await ly.deleteAuditLogsBefore(e);return await cy(e.schema,e.table),Bv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(H6,"deleteAuditLogsBefore");async function Hv(e){e.ids&&(e.hash_values=e.ids);let t=C6(e);if(t)throw da(t,t.message,fa.BAD_REQUEST,void 0,void 0,!0);Bc.transformReq(e);let r=Bc.checkSchemaTableExist(e.schema,e.table);if(r)throw da(new Error,r,fa.NOT_FOUND,Hc.LOG_LEVELS.ERROR,r,!0);try{await cy(e.schema,e.table);let n=await ly.deleteRecords(e);return Bc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${U6}`),n}catch(n){if(n.message===Hc.SEARCH_NOT_FOUND_MESSAGE){let s=new M6;return s.message=Hc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Hv,"deleteRecord")});var Kp={};Ue(Kp,{HASH_FUNCTION:()=>i_,hash:()=>fy,validate:()=>_y});function uy(e=s_){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(n_.randomBytes(e)).map(r=>t[r%t.length]).join("")}function fy(e,t=i_[qv?.toUpperCase()]??"sha256"){return dy[t](e)}function _y(e,t,r=i_[qv?.toUpperCase()]??"sha256"){return e?k6[r](e,t):!1}var n_,fu,Fv,qv,s_,Gv,i_,dy,k6,Yp=Re(()=>{n_=M(require("node:crypto")),fu=M(require("argon2")),Fv=M(ae());k();qv=(0,Fv.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),s_=16,Gv=9,i_=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(i_||{});a(uy,"generateSalt");dy={md5:a((e,t=void 0)=>{t=t??uy(Gv);let r=n_.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??uy(s_);let r=n_.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=uy(s_),r=await fu.hash(e,{type:fu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},k6={md5:a((e,t)=>{let r=e.slice(0,Gv);return e===dy.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,s_);return e===dy.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await fu.verify(e.slice(s_),t),"argon2id")};a(fy,"hash");a(_y,"validate")});var Vv=C((POe,$v)=>{var hy=tt(),Wr={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 F6(e){return Wr.password.presence=!0,Wr.username.presence=!0,Wr.role.presence=!0,Wr.active.presence=!0,hy.validateObject(e,Wr)}a(F6,"addUserValidation");function q6(e){return Wr.password.presence=!1,Wr.username.presence=!0,Wr.role.presence=!1,Wr.active.presence=!1,hy.validateObject(e,Wr)}a(q6,"alterUserValidation");function G6(e){return Wr.password.presence=!1,Wr.username.presence=!0,Wr.role.presence=!1,Wr.active.presence=!1,hy.validateObject(e,Wr)}a(G6,"dropUserValidation");$v.exports={addUserValidation:F6,alterUserValidation:q6,dropUserValidation:G6}});var ct=C((MOe,Yv)=>{"use strict";var{platform:LOe}=require("os"),$6="nats-server.zip",my="nats-server",V6=process.platform==="win32"?`${my}.exe`:my,K6=/^[^\s.,*>]+$/,Kv="__request__",Y6=a(e=>`${e}.${Kv}`,"REQUEST_SUBJECT"),W6={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},z6={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},j6={HUB:"hub.pid",LEAF:"leaf.pid"},Q6={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},J6={SUCCESS:"success",ERROR:"error"},X6={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Z6={TXN:"txn",MSGID:"msgid"},_u={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eZ={[_u.ERR]:1,[_u.WRN]:2,[_u.INF]:3,[_u.DBG]:4,[_u.TRC]:5},tZ={debug:"-D",trace:"-DVV"};Yv.exports={NATS_SERVER_ZIP:$6,NATS_SERVER_NAME:my,NATS_BINARY_NAME:V6,PID_FILES:j6,NATS_CONFIG_FILES:z6,SERVER_SUFFIX:Q6,NATS_TERM_CONSTRAINTS_RX:K6,REQUEST_SUFFIX:Kv,UPDATE_REMOTE_RESPONSE_STATUSES:J6,CLUSTER_STATUS_STATUSES:X6,REQUEST_SUBJECT:Y6,SUBJECT_PREFIXES:Z6,MSG_HEADERS:W6,LOG_LEVELS:_u,LOG_LEVEL_FLAGS:tZ,LOG_LEVEL_HIERARCHY:eZ}});var py=C(Wv=>{"use strict";var rZ={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});Kr.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()}});DL={type:"application/json",serializeStream:Df,serialize:Uf,deserialize:F4,q:.5};Kr.set("*/*",DL);Kr.set("",DL);a(F4,"tryJSONParse");a(Bf,"registerContentHandlers");q4=require("fastify-plugin"),G4=q4(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Tp(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(Tp,"findBestSerializer");NL=iR.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(Hf,"serialize");a(ca,"serializeMessage");a(nR,"asyncSerialization");a(sR,"hasAsyncSerialization");a($4,"streamToBuffer");V4=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(K4,"isBufferEncoding");a(Y4,"parseContentType");a(co,"getDeserializer");a(W4,"deserializerUnknownType");a(z4,"transformIterable");a(Sp,"toCsvStream")});var uR={};Ue(uR,{start:()=>n3});function j4(e){if(e.kind!==Le.Kind.OPERATION_DEFINITION&&e.kind!==Le.Kind.FRAGMENT_DEFINITION)throw new Or(`Unexpected non-executable definition type ${e.kind}.`)}function ML(e){if(typeof e!="object"||e===null)throw new yi("Request body must be an object.");if(!("query"in e))throw new yi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new yi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new yi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new yi("Request body `operationName` field must be a string.")}function lR(e){return parseInt(e.value,10)}function UL(e){return parseFloat(e.value)}function xL(e,t,r){let n=r.get(e.name.value);return BL(n)?HL(n,t):{attribute:t,value:n}}function BL(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],BL(n)?HL(n,t):{attribute:t,value:n}))}function Q4(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:lR(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:UL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return xL(e.value,t,r);case Le.Kind.OBJECT:return kL(e.value,t,r);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new Or(`Value type, ${e.value.kind}, is not supported.`)}}function kL(e,t,r){return e.fields.flatMap(n=>Q4(n,t,r))}function J4(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:lR(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:UL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return xL(e.value,e.name.value,t);case Le.Kind.OBJECT:return kL(e.value,[e.name.value],t);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new Or(`Argument type, ${e.value.kind}, is not supported.`)}}function X4(e,t){return e.flatMap(r=>J4(r,t))}function Ap(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 Or(`Fragment \`${n}\` not found.`);return Ap(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return Ap(r.selectionSet,t)}})}function FL(e,t){return Ap(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:FL(r.selectionSet,t)}:r.name.value)}async function Z4(e,t,r,n){let s=fs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Or(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:FL(e.selectionSet,r),conditions:X4(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 qL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return lR(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]:qL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new Or(`Value type, ${e.kind}, is not supported.`)}}function e3(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=qL(n.defaultValue)),n.type.kind===Le.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Or(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function t3(e,t,r,n){if(e.operation===Le.OperationTypeNode.SUBSCRIPTION)throw new Or("Subscriptions are not supported.");if(e.operation===Le.OperationTypeNode.MUTATION)throw new Or("Mutations are not supported yet.");let s=e3(e.variableDefinitions,t),i=await Promise.all(Ap(e.selectionSet,r).map(c=>Z4(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function vL({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(j4(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 Or("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new Or(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Or("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Or(`Operation \`${r}\` not found.`);let l=await t3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function r3(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 ML(r),vL(r,e)}case"POST":{let r=await co(e.headers.get("content-type"),!0)(e._nodeRequest);return ML(r),vL(r,e)}default:throw new yi("Method Not Allowed",405,{Allow:"GET, POST"})}}function n3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await r3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Or)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof yi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Le.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Or)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Le,Or,yi,GL=Re(()=>{Le=M(require("graphql"));io();ru();a(j4,"assertExecutableDefinitionNode");a(ML,"assertRequestParams");a(lR,"processIntValueNode");a(UL,"processFloatValueNode");a(xL,"processVariableNode");a(BL,"isObject");a(HL,"transformObjectIntoQueryCondition");a(Q4,"processObjectFieldNode");a(kL,"processObjectValueNode");a(J4,"processArgumentNode");a(X4,"buildConditionsQuery");a(Ap,"fillInFragments");a(FL,"buildSelectQuery");a(Z4,"processFieldNode");a(qL,"processConstValueNode");a(e3,"resolveVariables");a(t3,"executeOperation");a(vL,"resolver");Or=class extends Error{static{a(this,"GraphQLQueryingError")}},yi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(r3,"graphqlQueryingHandler");a(n3,"start")});var Oi=C((ibe,KL)=>{"use strict";var VL=oe(),$L=(k(),P(q)),cu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bi=require("joi"),la={schema_format:{pattern:cu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},s3=bi.alternatives(bi.string().min(1).max(la.schema_length.maximum).pattern(cu).messages({"string.pattern.base":"{:#label} "+la.schema_format.message}),bi.number(),bi.array()).required(),i3=bi.alternatives(bi.string().min(1).max(la.schema_length.maximum).pattern(cu).messages({"string.pattern.base":"{:#label} "+la.schema_format.message}),bi.number()),o3=bi.alternatives(bi.string().min(1).max(la.schema_length.maximum).pattern(cu).messages({"string.pattern.base":"{:#label} "+la.schema_format.message}),bi.number()).required();function a3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>la.schema_length.maximum?`'${e}' maximum of 250 characters`:cu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(a3,"checkValidTable");function c3(e,t){return VL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(c3,"validateSchemaExists");function l3(e,t){let r=t.state.ancestors[0].schema;return VL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(l3,"validateTableExists");function u3(e,t){return e.toLowerCase()===$L.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${$L.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(u3,"validateSchemaName");KL.exports={common_validators:la,schema_regex:cu,hdb_schema_table:s3,validateSchemaExists:c3,validateTableExists:l3,validateSchemaName:u3,checkValidTable:a3,hdb_database:i3,hdb_table:o3}});var tt=C((abe,YL)=>{"use strict";var gn=require("validate.js");gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};gn.validators.type.checks={Object:a(function(e){return gn.isObject(e)&&!gn.isArray(e)},"Object"),Array:gn.isArray,Integer:gn.isInteger,Number:gn.isNumber,String:gn.isString,Date:gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};gn.validators.hasValidFileExt=function(e,t){return gn.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};YL.exports={validateObject:d3,validateObjectAsync:f3,validateBySchema:_3};function d3(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=gn(e,t,{format:"flat"});return r?new Error(r):null}a(d3,"validateObject");async function f3(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(f3,"validateObjectAsync");function _3(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_3,"validateBySchema")});var fR=C((lbe,zL)=>{var{hdb_table:h3,hdb_database:WL}=Oi(),m3=tt(),dR=require("joi"),p3={undefined:"undefined",null:"null"},E3=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||p3[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"),g3=dR.object({database:WL,schema:WL,table:h3,records:dR.array().items(dR.object().custom(E3)).required()});zL.exports=function(e){return m3.validateBySchema(e,g3)}});var QL=C((dbe,jL)=>{"use strict";var _R=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")}};jL.exports=_R});var XL=C((_be,JL)=>{"use strict";var hR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};JL.exports=hR});var nM={};Ue(nM,{HAS_EXPIRATION:()=>bp,HAS_RESIDENCY_ID:()=>AR,HAS_STRUCTURE_UPDATE:()=>Np,LAST_TIMESTAMP_PLACEHOLDER:()=>Gf,LOCAL_TIMESTAMP:()=>S3,METADATA:()=>wc,NEW_TIMESTAMP_PLACEHOLDER:()=>eM,NO_TIMESTAMP:()=>mR,PENDING_LOCAL_TIME:()=>RR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>TR,RecordEncoder:()=>SR,TIMESTAMP_ASSIGN_LAST:()=>A3,TIMESTAMP_ASSIGN_NEW:()=>tM,TIMESTAMP_ASSIGN_PREVIOUS:()=>rM,TIMESTAMP_PLACEHOLDER:()=>Rp,TIMESTAMP_RECORD_PREVIOUS:()=>pR,handleLocalTimeForGets:()=>wp,recordUpdater:()=>yR,removeEntry:()=>Cc});function y3(){return qf[0]=qf[0]^64,T3.getFloat64(0)}function wp(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?.[wc];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?.[wc]>=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[wc];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,Nc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Nc.length;u++){let f=Nc[u].deref();(!f||f.isDone||f.isCommitted)&&Nc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function yR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,_){d||l==null?lu=i?.localTime?pR|rM:mR:lu=l?i?.localTime?pR|16384:tM|16384:mR;let h=u?.expiresAt;if(h>=0&&(c|=bp),Ff=c,ER=h,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:lu>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(gR=E,Ff|=AR,g|=Pc),R!==E&&(g|=Dc,R||(R=0)),c&bp&&(g|=Vf),u?.originatingOperation&&(g|=$f),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&f!=="message"&&i.metadataFlags&Ur&&(r.getBinaryFast(i.localTime)||aa(i.value));let T;if(s!==void 0&&(T=Ep(()=>e.put(n,s,m),n,e.rootStore),yc&&(g|=Ur)),l){let N=u?.user?.username;if(_&&(Ep(()=>e.encoder.encode(_),n,e.rootStore),yc&&(g|=Ur)),e.encoder.hasStructureUpdate&&(g|=Np,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,H=r.get(v);if(H){let Z=St(H).previousLocalTime;return T=r.put(v,Ic(o,t,n,Z,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,kf,g,E,R,h),{ifVersion:S}),T}}T=r.put(s===void 0?eM:Gf,Ic(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,kf,g,E,R,h,u?.originatingOperation),{instructedWrite:!0,ifVersion:S})}return T}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function Cc(e,t,r){if(t)return t.value&&t.metadataFlags&Ur&&!e.auditStore?.getBinaryFast(t.localTime)&&aa(t.value),e.remove(t.key,r)}var ZL,yp,Rp,Gf,TR,eM,S3,wc,qf,T3,mR,tM,A3,rM,pR,bp,AR,RR,Np,R3,kf,lu,Ff,ER,gR,SR,Nc,uu=Re(()=>{ZL=require("msgpackr");Ai();yp=M(X());En();En();Rp=new Uint8Array([1,1,1,1,4,64,0,0]),Gf=new Uint8Array([1,1,1,1,1,0,0,0]),TR=new Uint8Array([1,1,1,1,3,64,0,0]),eM=new Uint8Array([1,1,1,1,0,64,0,0]),S3=Symbol("local-timestamp"),wc=Symbol("metadata"),qf=new Uint8Array(8),T3=new DataView(qf.buffer,0,8),mR=0,tM=0,A3=1,rM=3,pR=4,bp=16,AR=32,RR=1,Np=256,lu=0,Ff=-1,ER=-1,gR=0,SR=class extends ZL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(lu||Ff>=0){let o=0,c=lu;c&&(o+=8,lu=0);let l=Ff,u=ER,f=gR;l>=0&&(o+=4,Ff=-1,u>=0&&(o+=8,ER=-1),f&&(o+=4,gR=0));let d=R3=r.call(this,s,i|2048|o);kf=d.subarray((d.start||0)+o,d.end);let _=d.start||0;return c&&(Rp[4]=c,Rp[5]=c>>8,d.set(Rp,_),_+=8),yc&&(l|=Ur),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(_,l|Op<<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 kf=r.call(this,s,i),kf};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(qf,0,c),c+=8;else for(let _=0;_<8;_++)qf[_]=t[c++];l=y3(),i=t[c]}let u,f;i<32&&(i===Op?(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&bp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&AR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=so(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[wc]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:so(()=>super.decode(t,r),this.rootStore)}catch(c){return yp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(y3,"getTimestamp");a(wp,"handleLocalTimeForGets");Nc=[];setInterval(()=>{for(let e=0;e<Nc.length;e++){let t=Nc[e].deref();!t||t.isDone||t.isCommitted?Nc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(yp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):yp.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(yR,"recordUpdater");a(Cc,"removeEntry")});var Kf=C((Sbe,iM)=>{"use strict";var sM=ae(),b3=(k(),P(q)),{RecordEncoder:O3}=(uu(),P(nM));sM.initSync();var N3=sM.get(b3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,bR=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=N3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:O3})}};iM.exports=bR});var Yf=C((Abe,oM)=>{"use strict";var kn=ae(),_s=(k(),P(q));kn.initSync();var Ip=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)}};oM.exports=Ip;Ip.MAX_DBS=1e4});var _t=C((ybe,pM)=>{"use strict";var NR=require("lmdb"),Gs=require("fs-extra"),Fn=require("path"),Cp=dn(),lM=X(),Sn=Un().LMDB_ERRORS_ENUM,Pp=XL(),wR=Kf(),uM=Yf(),ua=kt(),aM=(k(),P(q)),{table:w3,resetDatabases:I3}=(xe(),P(at)),cM=ae(),$s=ua.INTERNAL_DBIS_NAME,dM=ua.DBI_DEFINITION_NAME,C3="data.mdb",P3="lock.mdb",Wf=".mdb",D3="-lock",OR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=hs(t,r),this.key_type=this.dbi[ua.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ua.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new NR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Dp(e,t){if(e===void 0)throw new Error(Sn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Sn.ENV_NAME_REQUIRED)}a(Dp,"pathEnvNameValidation");async function IR(e,t,r=!0){try{await Gs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Sn.INVALID_BASE_PATH):n}try{let n=Fn.join(e,t+Wf);return await Gs.access(n,Gs.constants.R_OK|Gs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Gs.access(Fn.join(e,t,C3),Gs.constants.R_OK|Gs.constants.F_OK),Fn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Sn.INVALID_ENVIRONMENT)}else throw new Error(Sn.INVALID_ENVIRONMENT);throw n}}a(IR,"validateEnvironmentPath");function Lp(e,t){if(Cp.validateEnv(e),t===void 0)throw new Error(Sn.DBI_NAME_REQUIRED)}a(Lp,"validateEnvDBIName");async function L3(e,t,r=!1,n=!1){Dp(e,t);let s=Fn.basename(e);t=t.toString();let i=cM.get(aM.CONFIG_PARAMS.DATABASES);i||cM.setProperty(aM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await IR(e,t,n),fM(e,t,r)}catch(o){if(o.message===Sn.INVALID_ENVIRONMENT){let c=Fn.join(e,t);await Gs.mkdirp(n?c:e);let l=new uM(n?c:c+Wf,!1),u=NR.open(l);u.dbis=Object.create(null);let f=new wR(!1);u.openDB($s,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=CR(e,t,r);return u[ua.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(L3,"createEnvironment");async function M3(e,t,r,n=!0){Dp(e,t),t=t.toString();let s=Fn.join(e,t);return w3({table:t,database:Fn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(M3,"copyEnvironment");async function fM(e,t,r=!1){Dp(e,t),t=t.toString();let n=CR(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 IR(e,t),i=Fn.join(e,t+Wf),o=s!=i,c=new uM(s,o),l=NR.open(c);l.dbis=Object.create(null);let u=hM(l);for(let f=0;f<u.length;f++)hs(l,u[f]);return l[ua.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(fM,"openEnvironment");async function v3(e,t,r=!1){Dp(e,t),t=t.toString();let n=Fn.join(e,t+Wf),s=await IR(e,t);if(global.lmdb_map!==void 0){let i=CR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _M(o),delete global.lmdb_map[i]}}await Gs.remove(s),await Gs.remove(s===n?s+D3:Fn.join(Fn.dirname(s),P3))}a(v3,"deleteEnvironment");async function _M(e){Cp.validateEnv(e);let t=e[ua.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_M,"closeEnvironment");function CR(e,t,r=!1){let s=`${Fn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(CR,"getCachedEnvironmentName");function U3(e){Cp.validateEnv(e);let t=Object.create(null),r=hs(e,$s);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==$s)try{t[n]=Object.assign(new Pp,s)}catch{lM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(U3,"listDBIDefinitions");function hM(e){Cp.validateEnv(e);let t=[],r=hs(e,$s);for(let{key:n}of r.getRange({start:!1}))n!==$s&&t.push(n);return t}a(hM,"listDBIs");function x3(e,t){let n=hs(e,$s).getEntry(t),s=new Pp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{lM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(x3,"getDBIDefinition");function mM(e,t,r,n=!r){if(Lp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return hs(e,t)}catch(s){if(s.message===Sn.DBI_DOES_NOT_EXIST){let i=new wR(r,n===!0),o=e.openDB(t,i),c=new Pp(r===!0,n);return o[dM]=c,hs(e,$s).putSync(t,c),e.dbis[t]=o,o}throw s}}a(mM,"createDBI");function hs(e,t){if(Lp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==$s?r=x3(e,t):r=new Pp,r===void 0)throw new Error(Sn.DBI_DOES_NOT_EXIST);let n;try{let s=new wR(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Sn.DBI_DOES_NOT_EXIST):s}return n[dM]=r,e.dbis[t]=n,n}a(hs,"openDBI");function B3(e,t){Lp(e,t),t=t.toString();let r=hs(e,t),n=r.getStats();return r[ua.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(B3,"statDBI");async function H3(e,t){try{let r=Fn.join(e,t+Wf);return(await Gs.stat(r)).size}catch{throw new Error(Sn.INVALID_ENVIRONMENT)}}a(H3,"environmentDataSize");function k3(e,t){if(Lp(e,t),t=t.toString(),t===$s)throw new Error(Sn.CANNOT_DROP_INTERNAL_DBIS_NAME);hs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],hs(e,$s).removeSync(t)}a(k3,"dropDBI");function F3(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===Sn.DBI_DOES_NOT_EXIST)mM(e,i,i!==t,i===t),n=!0;else throw o}}n&&I3()}a(F3,"initializeDBIs");pM.exports={openDBI:hs,openEnvironment:fM,createEnvironment:L3,listDBIs:hM,listDBIDefinitions:U3,createDBI:mM,dropDBI:k3,statDBI:B3,deleteEnvironment:v3,initializeDBIs:F3,TransactionCursor:OR,environmentDataSize:H3,copyEnvironment:M3,closeEnvironment:_M}});var gM=C((Obe,EM)=>{"use strict";var PR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};EM.exports=PR});var TM=C((wbe,SM)=>{"use strict";var DR=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}};SM.exports=DR});var RM=C((Cbe,AM)=>{"use strict";var LR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};AM.exports=LR});var Mc=C((vbe,OM)=>{"use strict";var q3=_t(),G3=gM(),$3=TM(),V3=RM(),Ni=dn(),zf=Un().LMDB_ERRORS_ENUM,K3=kt(),lo=(k(),P(q)),Y3=oe(),W3=require("uuid"),Dbe=require("lmdb"),{handleHDBError:z3,hdb_errors:j3}=me(),{OVERFLOW_MARKER:Lbe,MAX_SEARCH_KEY_LENGTH:Mbe}=K3,yM=ae();yM.initSync();var Mp=yM.get(lo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),MR=lo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Lc=lo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Q3(e,t,r,n,s=Ni.getNextMonotonicTime()){BR(e,t,r,n),vR(e,t,r);let i=new G3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];bM(u,!0,s);let f=J3(e,t,r,u),d=u[t];o.push(f),c.push(d)}return UR(o,c,n,i,s)}a(Q3,"insertRecords");function J3(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][lo.FUNC_VAL],n[o]=c)}let l=Ni.getIndexedValues(c),u=e.dbis[o];if(l){Mp&&u.prefetch(l.map(f=>({key:f,value:s})),vp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Mp&&e.dbis[t].prefetch([s],vp),e.dbis[t].put(s,n,n[Lc])})}a(J3,"insertRecord");function X3(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(X3,"removeSkippedRecords");function bM(e,t,r){let n=r>0;(n||!Number.isInteger(e[Lc]))&&(e[Lc]=r||(r=Ni.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[MR]))&&(e[MR]=r||Ni.getNextMonotonicTime()):delete e[MR]}a(bM,"setTimestamps");function vR(e,t,r){r.indexOf(lo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(lo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(lo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(lo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),q3.initializeDBIs(e,t,r)}a(vR,"initializeTransaction");async function Z3(e,t,r,n,s=Ni.getNextMonotonicTime()){BR(e,t,r,n),vR(e,t,r);let i=new $3,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],_;try{_=xR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(_),l.push(d)}return UR(c,l,n,i,s,o)}a(Z3,"updateRecords");async function eX(e,t,r,n,s=Ni.getNextMonotonicTime()){try{BR(e,t,r,n)}catch(l){throw z3(l,l.message,j3.HTTP_STATUS_CODES.BAD_REQUEST)}vR(e,t,r);let i=new V3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;Y3.isEmpty(u[t])?(f=W3.v4(),u[t]=f):f=u[t];let d=xR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return UR(o,c,n,i,s)}a(eX,"upsertRecords");async function UR(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ni.getNextMonotonicTime(),X3(r,i),n}a(UR,"finalizeWrite");function xR(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(bM(r,!f,o),Number.isInteger(r[Lc])&&u[Lc]>r[Lc])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][lo.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ni.getIndexedValues(R);if(E){Mp&&g.prefetch(E.map(T=>({key:T,value:n})),vp);for(let T=0,N=E.length;T<N;T++)g.remove(E[T],n)}if(E=Ni.getIndexedValues(S),E){Mp&&g.prefetch(E.map(T=>({key:T,value:n})),vp);for(let T=0,N=E.length;T<N;T++)g.put(E[T],n)}}let h={...u,...r};c.put(n,h,h[Lc])},"do_put");return l?d=c.ifVersion(n,l.version,_):d=c.ifNoExists(n,_),d.then(h=>h?!0:xR(e,t,r,n,s,i,o))}a(xR,"updateUpsertRecord");function tX(e,t,r){if(Ni.validateEnv(e),t===void 0)throw new Error(zf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zf.WRITE_ATTRIBUTES_REQUIRED):new Error(zf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(tX,"validateBasic");function BR(e,t,r,n){if(tX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(zf.RECORDS_REQUIRED):new Error(zf.RECORDS_MUST_BE_ARRAY)}a(BR,"validateWrite");function vp(){}a(vp,"noop");OM.exports={insertRecords:Q3,updateRecords:Z3,upsertRecords:eX}});var uo=C((xbe,rX)=>{rX.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 wM=C((Bbe,NM)=>{"use strict";var nX=require("uuid"),HR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||nX.v4(),this.schema_table=`${this.schema}.${this.table}`}};NM.exports=HR});var Up=C((kbe,IM)=>{"use strict";var sX=wM(),kR=class extends sX{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}};IM.exports=kR});var PM=C((qbe,CM)=>{"use strict";CM.exports=oX;var iX="inserted";function oX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===iX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(oX,"returnObject")});var xp=C((Vbe,LM)=>{"use strict";var aX=(k(),P(q)),FR=_t(),cX=Mc(),{getSystemSchemaPath:lX,getSchemaPath:uX}=gt(),$be=uo(),{validateBySchema:dX}=tt(),jf=require("joi"),fX=Up(),_X=PM(),{handleHDBError:hX,hdb_errors:mX,ClientError:pX}=me(),DM=oe(),{HTTP_STATUS_CODES:EX}=mX,gX="inserted";LM.exports=SX;async function SX(e){let t=dX(e,jf.object({database:jf.string(),schema:jf.string(),table:jf.string().required(),attribute:jf.string().required()}));if(t)throw new pX(t.message);let r=!e.skip_table_check&&DM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw hX(new Error,r,EX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=DM.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new fX(e.schema,e.table,e.attribute,e.id);try{let i=await FR.openEnvironment(uX(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}`);FR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await FR.openEnvironment(lX(),aX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await cX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return _X(gX,c,{records:[s]},l)}catch(i){throw i}}a(SX,"lmdbCreateAttribute")});var Qf=C((Wbe,vM)=>{"use strict";var fo=oe(),MM=X(),Ybe=fR(),{getDatabases:TX}=(xe(),P(at)),{ClientError:vc}=me();vM.exports=AX;function AX(e){if(fo.isEmpty(e))throw new vc("invalid update parameters defined.");if(fo.isEmptyOrZeroLength(e.schema))throw new vc("invalid schema specified.");if(fo.isEmptyOrZeroLength(e.table))throw new vc("invalid table specified.");if(!Array.isArray(e.records))throw new vc("records must be an array");let t=TX()[e.schema]?.[e.table];if(fo.isEmpty(t))throw new vc(`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&&fo.isEmptyOrZeroLength(o[r]))throw MM.error("a valid hash attribute must be provided with update record:",o),new vc("a valid hash attribute must be provided with update record, check log for more info");if(!fo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw MM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new vc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!fo.isEmpty(o[r])&&o[r]!==""&&n.has(fo.autoCast(o[r]))&&(o.skip=!0),n.add(fo.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(AX,"insertUpdateValidate")});var xM=C((jbe,UM)=>{"use strict";var qR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};UM.exports=qR});var kM=C((Jbe,HM)=>{"use strict";var GR=_t(),RX=X(),BM=Un().LMDB_ERRORS_ENUM;HM.exports=yX;async function yX(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 GR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==BM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await GR.closeEnvironment(global.lmdb_map[n]),await GR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==BM.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){RX.error(t)}}a(yX,"cleanLMDBMap")});var XM=C((eOe,JM)=>{"use strict";var $R=require("recursive-iterator"),bX=require("alasql"),VR=require("clone"),FM=oe(),{handleHDBError:qM,hdb_errors:OX}=me(),{HDB_ERROR_MSGS:GM,HTTP_STATUS_CODES:$M}=OX,{getDatabases:NX}=(xe(),P(at)),wX=["DISTINCT_ARRAY"],VM=Symbol("validateTables"),KR=Symbol("validateTable"),Zbe=Symbol("getAllColumns"),KM=Symbol("validateAllColumns"),Bp=Symbol("findColumn"),YM=Symbol("validateOrderBy"),Jf=Symbol("validateSegment"),YR=Symbol("validateColumn"),WM=Symbol("setColumnsForTable"),zM=Symbol("checkColumnsForAsterisk"),jM=Symbol("validateGroupBy"),QM=Symbol("hasColumns"),WR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[VM](),this[zM](),this[KM]()}[VM](){if(this[QM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[KR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[KR](t.table)})}}[QM](){let t=!1,r=new $R(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[KR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=NX();if(!r[t.databaseid])throw qM(new Error,GM.SCHEMA_NOT_FOUND(t.databaseid),$M.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw qM(new Error,GM.TABLE_NOT_FOUND(t.databaseid,t.tableid),$M.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=VR(s);i.table=VR(t),this.attributes.push(i)})}[Bp](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)}[zM](){let t=new $R(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[WM](r.tableid)}[WM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new bX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[KM](){this[Jf](this.statement.columns,!1),this[Jf](this.statement.joins,!1),this[Jf](this.statement.where,!1),this[jM](this.statement.group,!1),this[Jf](this.statement.order,!0)}[Jf](t,r){if(!t)return;let n=new $R(t),s=[];for(let{node:i,path:o}of n)!FM.isEmpty(i)&&!FM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[YM](i):s.push(this[YR](i)));return s}[jM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&wX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=VR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Bp](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[Bp](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`}[YM](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[YR](t)}[YR](t){let r=this[Bp](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]}};JM.exports=WR});var rv=C((rOe,tv)=>{"use strict";var ZM=require("lodash"),Xf=require("mathjs"),IX=require("jsonata"),ev=oe();tv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?ZM.uniqWith(e,ZM.isEqual):e,"distinct_array"),searchJSON:CX,mad:Zf.bind(null,Xf.mad),mean:Zf.bind(null,Xf.mean),mode:Zf.bind(null,Xf.mode),prod:Zf.bind(null,Xf.prod),median:Zf.bind(null,Xf.median)};function Zf(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(Zf,"aggregateFunction");function CX(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(ev.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ev.isEmpty(this.__ala__.res[r])){let n=IX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(CX,"searchJSON")});var sv=C((sOe,nv)=>{"use strict";var tr=require("moment"),zR="YYYY-MM-DDTHH:mm:ss.SSSZZ";tr.suppressDeprecationWarnings=!0;nv.exports={current_date:a(()=>tr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>tr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return tr(e).utc().format("YYYY");case"month":return tr(e).utc().format("MM");case"day":return tr(e).utc().format("DD");case"hour":return tr(e).utc().format("HH");case"minute":return tr(e).utc().format("mm");case"second":return tr(e).utc().format("ss");case"millisecond":return tr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>tr(e).utc().format(zR),"date"),date_format:a((e,t)=>tr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>tr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>tr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=tr(e).utc(),s=tr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>tr().utc().valueOf(),"now"),get_server_time:a(()=>tr().format(zR),"get_server_time"),offset_utc:a((e,t)=>tr(e).utc().utcOffset(t).format(zR),"offset_utc")}});var cv=C((oOe,av)=>{"use strict";var PX=require("@turf/area"),DX=require("@turf/length"),LX=require("@turf/circle"),MX=require("@turf/difference"),vX=require("@turf/distance"),UX=require("@turf/boolean-contains"),xX=require("@turf/boolean-equal"),BX=require("@turf/boolean-disjoint"),HX=require("@turf/helpers"),iv=(k(),P(q)),Ke=oe(),_o=X();av.exports={geoArea:kX,geoLength:FX,geoCircle:qX,geoDifference:GX,geoDistance:ov,geoNear:$X,geoContains:VX,geoEqual:KX,geoCrosses:YX,geoConvert:WX};function kX(e){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return PX.default(e)}catch(t){return _o.trace(t,e),NaN}}a(kX,"geoArea");function FX(e,t){if(Ke.isEmpty(e))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return DX.default(e,{units:t||"kilometers"})}catch(r){return _o.trace(r,e),NaN}}a(FX,"geoLength");function qX(e,t,r){if(Ke.isEmpty(e))return NaN;if(Ke.isEmpty(t))return NaN;typeof e=="string"&&(e=Ke.autoCastJSON(e));try{return LX.default(e,t,{units:r||"kilometers"})}catch(n){return _o.trace(n,e,t),NaN}}a(qX,"geoCircle");function GX(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 MX(e,t)}catch(r){return _o.trace(r,e,t),NaN}}a(GX,"geoDifference");function ov(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 vX.default(e,t,{units:r||"kilometers"})}catch(n){return _o.trace(n,e,t),NaN}}a(ov,"geoDistance");function $X(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 ov(e,t,n)<=r}catch(s){return _o.trace(s,e,t),!1}}a($X,"geoNear");function VX(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 UX.default(e,t)}catch(r){return _o.trace(r,e,t),!1}}a(VX,"geoContains");function KX(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 xX.default(e,t)}catch(r){return _o.trace(r,e,t),!1}}a(KX,"geoEqual");function YX(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!BX.default(e,t)}catch(r){return _o.trace(r,e,t),!1}}a(YX,"geoCrosses");function WX(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(iv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(iv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ke.autoCastJSON(e)),HX[t](e,r)}a(WX,"geoConvert")});var Hp=C((cOe,lv)=>{var Uc=rv(),qn=sv(),wi=cv();lv.exports=e=>{e.aggr.mad=e.aggr.MAD=Uc.mad,e.aggr.mean=e.aggr.MEAN=Uc.mean,e.aggr.mode=e.aggr.MODE=Uc.mode,e.aggr.prod=e.aggr.PROD=Uc.prod,e.aggr.median=e.aggr.MEDIAN=Uc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Uc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Uc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=qn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=qn.current_time,e.fn.extract=e.fn.EXTRACT=qn.extract,e.fn.date=e.fn.DATE=qn.date,e.fn.date_format=e.fn.DATE_FORMAT=qn.date_format,e.fn.date_add=e.fn.DATE_ADD=qn.date_add,e.fn.date_sub=e.fn.DATE_SUB=qn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=qn.date_diff,e.fn.now=e.fn.NOW=qn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=qn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=qn.get_server_time,e.fn.getdate=e.fn.GETDATE=qn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=qn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wi.geoNear}});var _v=C((lOe,fv)=>{"use strict";var e_=require("lodash"),Tn=require("alasql");Tn.options.cache=!1;var zX=Hp(),uv=require("clone"),kp=require("recursive-iterator"),ke=X(),Je=oe(),du=Gn(),jX=(k(),P(q)),{hdb_errors:QX}=me(),{getDatabases:dv}=(xe(),P(at)),JX="IS NULL",Vs="There was a problem performing this search. Please check the logs and try again.";zX(Tn);var jR=class{static{a(this,"SQLSearch")}constructor(t,r){if(Je.isEmpty(t))throw ke.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Je.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Je.isEmptyOrZeroLength(n))return ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ke.error(n),new Error(Vs)}if(Object.keys(this.data).length===0)return ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ke.error("Error thrown from processJoins in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ke.error(n),new Error(Vs)}try{return t=await this._finalSQL(),t}catch(n){throw ke.error("Error thrown from finalSQL in SQLSearch class method search."),ke.error(n),new Error(Vs)}}_getColumns(){let t=new kp(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(uv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=e_.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=dv()[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 kp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Je.isEmpty(r)&&r.right)if(Je.isNotEmptyAndHasValue(r.right.value)){let n=Je.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Tn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Je.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Tn.yy.LogicValue({value:i}):n instanceof Tn.yy.StringValue&&Je.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Tn.yy.NumValue({value:i}))});if(t){ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new kp(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(jX.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&&e_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Je.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Je.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&!Je.isEmptyOrZeroLength(this.columns.columns))return t;if(Je.isEmptyOrZeroLength(this.all_table_attributes)&&Je.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Tn.promise(r)}catch(r){throw ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ke.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(uv(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(JX)>-1&&this.tables.forEach(s=>{let i={columnid:dv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=e_.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 du.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let _=await du.getDataByValue(d);for(let[h,m]of _)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]):(this.data[i].__merged_data[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(f),new Error(Vs)}else if(!Je.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Je.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,_=f.length;d<_;d++){let h=f[d];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await du.getDataByValue(c,h.operation);if(l)for(let[S]of m)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of m)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ke.error(f),new Error(Vs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await du.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,_]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ke.error(f),new Error(Vs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Tn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Tn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Tn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Tn.yy.FuncValue:new Tn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,S=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${S}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${S}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let _=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(h,s);_=await Tn.promise(m,t),t=null}catch(h){throw ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ke.error(h),new Error("There was a problem processing the data.")}if(_&&_.length>0){for(let h=0,m=_.length;h<m;h++){let S=_[h];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),S=e_.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 kp(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=e_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ke.error(i),new Error(Vs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await du.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let _=o[f],h=l.get(_);for(let m=0;m<u;m++){let S=s.columns[m],g=h[S]===void 0?null:h[S];this.data[n].__merged_data[_].push(g)}}}}catch(r){throw ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ke.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ke.trace(`Final SQL: ${s}`),n=await Tn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ke.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return ke.error(QX.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 du.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw ke.error("There was an error when processing this SQL operation. Check your logs"),ke.error(o),new Error(Vs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};fv.exports=jR});var Yr=C((dOe,hv)=>{"use strict";var XX=XM();hv.exports={searchByConditions:e6,searchByHash:t6,searchByValue:r6,search:n6};var QR=Gn(),{transformReq:JR}=oe(),ZX=_v();async function e6(e){return JR(e),QR.searchByConditions(e)}a(e6,"searchByConditions");async function t6(e){JR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of QR.searchByHash(e))r&&t.push(r);return t}a(t6,"searchByHash");async function r6(e){JR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of QR.searchByValue(e))t.push(r);return t}a(r6,"searchByValue");function n6(e,t){try{let r=new XX(e);r.validate(),new ZX(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(n6,"search")});var ho=C((_Oe,gv)=>{"use strict";var t_=require("crypto"),s6=ae(),{CONFIG_PARAMS:i6}=(k(),P(q)),pv="aes-256-cbc",o6=32,a6=16,XR=64,Ev=32,c6=XR+Ev,mv=new Map;gv.exports={encrypt:l6,decrypt:u6,createNatsTableStreamName:d6};function l6(e){let t=t_.randomBytes(o6),r=t_.randomBytes(a6),n=t_.createCipheriv(pv,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(l6,"encrypt");function u6(e){let t=e.substr(0,XR),r=e.substr(XR,Ev),n=e.substr(c6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=t_.createDecipheriv(pv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(u6,"decrypt");function d6(e,t){let r=s6.get(i6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=mv.get(r);return n||(n=t_.createHash("md5").update(r).digest("hex"),mv.set(r,n)),n}a(d6,"createNatsTableStreamName")});var Ii=C((pOe,Rv)=>{"use strict";var mOe=Yr(),r_=X(),{validateBySchema:Sv}=tt(),xc=require("joi"),f6=ho(),Fp=oe(),{handleHDBError:qp,hdb_errors:_6,ClientError:Tv}=me(),{HDB_ERROR_MSGS:Gp,HTTP_STATUS_CODES:ZR}=_6,Av=ae();Av.initSync();var{getDatabases:ey}=(xe(),P(at)),h6=require("fs-extra"),m6=(k(),P(q));Rv.exports={describeAll:p6,describeTable:$p,describeSchema:E6};async function p6(e={}){try{let t=Fp.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=ey(),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 $p({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 $p({schema:d,table:h,exact_count:u},S)}m&&l.push(m)}catch(m){r_.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 r_.error("Got an error in describeAll"),r_.error(t),qp(new Error,Gp.DESCRIBE_ALL_ERR)}}a(p6,"describeAll");async function $p(e,t){Fp.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=Sv(e,xc.object({database:xc.string(),table:xc.string().required(),exact_count:xc.boolean().strict()}));if(i)throw new Tv(i.message);let c=ey()[r];if(!c)throw qp(new Error,Gp.SCHEMA_NOT_FOUND(e.schema),ZR.NOT_FOUND);let l=c[n];if(!l)throw qp(new Error,Gp.TABLE_NOT_FOUND(e.schema,e.table),ZR.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 h6.stat(l.primaryStore.env.path)).size}catch(h){r_.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")),Av.get(m6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(_.clustering_stream_name=f6.createNatsTableStreamName(_.schema,_.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});_.record_count=h.recordCount,_.table_size=l.getSize(),_.db_audit_size=l.getAuditSize(),_.estimated_record_range=h.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))_.last_updated_record=S[0];if(!_.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=S}catch(h){r_.warn(`unable to stat table dbi due to ${h}`)}return _}a($p,"descTable");async function E6(e){Fp.transformReq(e);let t=Sv(e,xc.object({database:xc.string(),exact_count:xc.boolean().strict()}));if(t)throw new Tv(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=ey()[n];if(!i)throw qp(new Error,Gp.SCHEMA_NOT_FOUND(e.schema),ZR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Fp.isEmpty(l)||l.describe){let u=await $p({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(E6,"describeSchema")});var ms=C((TOe,wv)=>{var g6=uo(),{callbackify:bv,promisify:S6}=require("util"),{getDatabases:Ov}=(xe(),P(at));wv.exports={setSchemaDataToGlobal:yv,getTableSchema:T6,getSystemSchema:A6,setSchemaDataToGlobalAsync:S6(yv)};var Nv=Ii(),gOe=bv(Nv.describeAll),SOe=bv(Nv.describeTable);function yv(e){global.hdb_schema=Ov(),e&&e()}a(yv,"setSchemaDataToGlobal");function T6(e,t,r){let n=Ov()[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(T6,"getTableSchema");function A6(){return g6}a(A6,"getSystemSchema")});var ry=C((ROe,Pv)=>{var R6=tt(),ty=require("joi"),{hdb_table:y6,hdb_database:Iv}=Oi(),Cv={schema:Iv,database:Iv,table:y6},b6={date:ty.date().iso().required()},O6={timestamp:ty.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Pv.exports=function(e,t){let r=t==="timestamp"?{...Cv,...O6}:{...Cv,...b6},n=ty.object(r);return R6.validateBySchema(e,n)}});var Mv=C((yOe,Lv)=>{var N6=tt(),ny=require("joi"),{hdb_table:w6,hdb_database:Dv}=Oi(),I6=ny.object({schema:Dv,database:Dv,table:w6,hash_values:ny.array().required(),ids:ny.array()});Lv.exports=function(e){return N6.validateBySchema(e,I6)}});var ay=C((bOe,vv)=>{"use strict";var sy=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}},iy=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}},oy=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};vv.exports={InsertObject:sy,NoSQLSeachObject:iy,DeleteResponseObject:oy}});var _a=C((NOe,kv)=>{"use strict";var xv=ry(),C6=Mv(),Bc=oe(),Uv=require("moment"),Bv=X(),{promisify:P6,callbackify:D6}=require("util"),Hc=(k(),P(q)),L6=ms(),cy=P6(L6.getTableSchema),ly=Gn(),{DeleteResponseObject:M6}=ay(),{handleHDBError:da,hdb_errors:v6}=me(),{HDB_ERROR_MSGS:Vp,HTTP_STATUS_CODES:fa}=v6,U6="records successfully deleted",x6=D6(Hv);kv.exports={delete:x6,deleteRecord:Hv,deleteFilesBefore:B6,deleteAuditLogsBefore:H6};async function B6(e){let t=xv(e,"date");if(t)throw da(t,t.message,fa.BAD_REQUEST,void 0,void 0,!0);if(Bc.transformReq(e),!Uv(e.date,Uv.ISO_8601).isValid())throw da(new Error,Vp.INVALID_DATE,fa.BAD_REQUEST,Hc.LOG_LEVELS.ERROR,Vp.INVALID_DATE,!0);let n=Bc.checkSchemaTableExist(e.schema,e.table);if(n)throw da(new Error,n,fa.NOT_FOUND,Hc.LOG_LEVELS.ERROR,n,!0);let s=await ly.deleteRecordsBefore(e);if(await cy(e.schema,e.table),Bv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(B6,"deleteFilesBefore");async function H6(e){let t=xv(e,"timestamp");if(t)throw da(t,t.message,fa.BAD_REQUEST,void 0,void 0,!0);if(Bc.transformReq(e),isNaN(e.timestamp))throw da(new Error,Vp.INVALID_VALUE("Timestamp"),fa.BAD_REQUEST,Hc.LOG_LEVELS.ERROR,Vp.INVALID_VALUE("Timestamp"),!0);let r=Bc.checkSchemaTableExist(e.schema,e.table);if(r)throw da(new Error,r,fa.NOT_FOUND,Hc.LOG_LEVELS.ERROR,r,!0);let n=await ly.deleteAuditLogsBefore(e);return await cy(e.schema,e.table),Bv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(H6,"deleteAuditLogsBefore");async function Hv(e){e.ids&&(e.hash_values=e.ids);let t=C6(e);if(t)throw da(t,t.message,fa.BAD_REQUEST,void 0,void 0,!0);Bc.transformReq(e);let r=Bc.checkSchemaTableExist(e.schema,e.table);if(r)throw da(new Error,r,fa.NOT_FOUND,Hc.LOG_LEVELS.ERROR,r,!0);try{await cy(e.schema,e.table);let n=await ly.deleteRecords(e);return Bc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${U6}`),n}catch(n){if(n.message===Hc.SEARCH_NOT_FOUND_MESSAGE){let s=new M6;return s.message=Hc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Hv,"deleteRecord")});var Kp={};Ue(Kp,{HASH_FUNCTION:()=>i_,hash:()=>fy,validate:()=>_y});function uy(e=s_){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(n_.randomBytes(e)).map(r=>t[r%t.length]).join("")}function fy(e,t=i_[qv?.toUpperCase()]??"sha256"){return dy[t](e)}function _y(e,t,r=i_[qv?.toUpperCase()]??"sha256"){return e?k6[r](e,t):!1}var n_,fu,Fv,qv,s_,Gv,i_,dy,k6,Yp=Re(()=>{n_=M(require("node:crypto")),fu=M(require("argon2")),Fv=M(ae());k();qv=(0,Fv.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),s_=16,Gv=9,i_=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(i_||{});a(uy,"generateSalt");dy={md5:a((e,t=void 0)=>{t=t??uy(Gv);let r=n_.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??uy(s_);let r=n_.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=uy(s_),r=await fu.hash(e,{type:fu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},k6={md5:a((e,t)=>{let r=e.slice(0,Gv);return e===dy.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,s_);return e===dy.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await fu.verify(e.slice(s_),t),"argon2id")};a(fy,"hash");a(_y,"validate")});var Vv=C((POe,$v)=>{var hy=tt(),Wr={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 F6(e){return Wr.password.presence=!0,Wr.username.presence=!0,Wr.role.presence=!0,Wr.active.presence=!0,hy.validateObject(e,Wr)}a(F6,"addUserValidation");function q6(e){return Wr.password.presence=!1,Wr.username.presence=!0,Wr.role.presence=!1,Wr.active.presence=!1,hy.validateObject(e,Wr)}a(q6,"alterUserValidation");function G6(e){return Wr.password.presence=!1,Wr.username.presence=!0,Wr.role.presence=!1,Wr.active.presence=!1,hy.validateObject(e,Wr)}a(G6,"dropUserValidation");$v.exports={addUserValidation:F6,alterUserValidation:q6,dropUserValidation:G6}});var ct=C((MOe,Yv)=>{"use strict";var{platform:LOe}=require("os"),$6="nats-server.zip",my="nats-server",V6=process.platform==="win32"?`${my}.exe`:my,K6=/^[^\s.,*>]+$/,Kv="__request__",Y6=a(e=>`${e}.${Kv}`,"REQUEST_SUBJECT"),W6={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},z6={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},j6={HUB:"hub.pid",LEAF:"leaf.pid"},Q6={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},J6={SUCCESS:"success",ERROR:"error"},X6={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Z6={TXN:"txn",MSGID:"msgid"},_u={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eZ={[_u.ERR]:1,[_u.WRN]:2,[_u.INF]:3,[_u.DBG]:4,[_u.TRC]:5},tZ={debug:"-D",trace:"-DVV"};Yv.exports={NATS_SERVER_ZIP:$6,NATS_SERVER_NAME:my,NATS_BINARY_NAME:V6,PID_FILES:j6,NATS_CONFIG_FILES:z6,SERVER_SUFFIX:Q6,NATS_TERM_CONSTRAINTS_RX:K6,REQUEST_SUFFIX:Kv,UPDATE_REMOTE_RESPONSE_STATUSES:J6,CLUSTER_STATUS_STATUSES:X6,REQUEST_SUBJECT:Y6,SUBJECT_PREFIXES:Z6,MSG_HEADERS:W6,LOG_LEVELS:_u,LOG_LEVEL_FLAGS:tZ,LOG_LEVEL_HIERARCHY:eZ}});var py=C(Wv=>{"use strict";var rZ={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
|
`)},nZ="certificate.pem",sZ="privateKey.pem",iZ="caCertificate.pem",oZ="natsCertificate.pem",aZ="natsCaCertificate.pem",yt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},cZ={tls_certificate:yt.SERVER,tls_certificateAuthority:yt.CA,customFunctions_tls_certificate:yt.SERVER,customFunctions_tls_certificateAuthority:yt.CA,operationsApi_tls_certificate:yt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:yt["OPERATIONS-CA"]},lZ={[yt.SERVER]:2,[yt.DEFAULT]:1},uZ={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},dZ={[yt["OPERATIONS-API"]]:3,[yt.SERVER]:2,[yt.DEFAULT]:1},fZ={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},_Z={[yt["OPERATIONS-CA"]]:3,[yt.CA]:2,[yt["DEFAULT-CA"]]:1},hZ={[yt.CA]:2,[yt["DEFAULT-CA"]]:1};Object.assign(Wv,{CERTIFICATE_PEM_NAME:nZ,PRIVATEKEY_PEM_NAME:sZ,CA_PEM_NAME:iZ,CERT_NAME:yt,CERT_CONFIG_NAME_MAP:cZ,CERT_PREFERENCE_APP:lZ,CERT_PREFERENCE_OPS:uZ,CERT_PREFERENCE_REP:dZ,CA_CERT_PREFERENCE_REP:fZ,CA_CERT_PREFERENCE_OPS:_Z,CA_CERT_PREFERENCE_APP:hZ,CERTIFICATE_VALUES:rZ,NATS_CERTIFICATE_PEM_NAME:oZ,NATS_CA_PEM_NAME:aZ})});var gy=C((BOe,Zv)=>{"use strict";var Jv=require("fs-extra"),Ee=require("joi"),mZ=require("os"),{boolean:qe,string:ht,number:rr,array:ha}=Ee.types(),{totalmem:zv}=require("os"),kc=require("path"),pZ=X(),Ey=oe(),xOe=py(),jv=(k(),P(q)),EZ=tt(),Qv="log",gZ="components",SZ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",TZ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",AZ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",RZ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",yZ="rootPath config parameter is undefined",An=Ee.alternatives([rr.min(0),ht]).optional().empty(null),Wp=Ee.alternatives([ha.items(ht,{host:ht.required(),port:An},{hostname:ht.required(),port:An}).empty(null),ha.items(ht)]),Ci,Xv=!1;Zv.exports={configValidator:bZ,routesValidator:PZ,route_constraints:Wp};function bZ(e,t=!1){if(Xv=t,Ci=e.rootPath,Ey.isEmpty(Ci))throw yZ;let r=qe.optional(),n=rr.min(0).max(1e3).empty(null).default(CZ),s=ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(o_),i=ht.optional().empty(null),o=ht.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Ee.string().empty(null).default(o_),l=Ee.custom(NZ).empty(null).default(o_),u=e.clustering?.enabled,f=Ee.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Ee.object({enabled:r,hubServer:Ee.object({cluster:Ee.object({name:Ee.required().empty(null),network:Ee.object({port:An,routes:Wp}).required()}).required(),leafNodes:Ee.object({network:Ee.object({port:An}).required()}).required(),network:Ee.object({port:An}).required()}).required(),leafServer:Ee.object({network:Ee.object({port:An,routes:Wp}).required(),streams:Ee.object({maxAge:rr.min(120).allow(null).optional(),maxBytes:rr.min(1).allow(null).optional(),maxMsgs:rr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:qe.optional(),databaseLevel:qe.optional(),tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.required(),verify:qe.optional()}),user:ht.optional().empty(null)}).optional():d=Ee.object({enabled:r,tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.optional()})}).optional(),Ee.object({authentication:Ee.alternatives(Ee.object({authorizeLocal:qe,cacheTTL:rr.required(),cookie:Ee.object({domains:ha.items(ht).optional(),expires:ht.optional()}),enableSessions:qe,hashFunction:ht.valid("md5","sha256","argon2id").optional().empty(null)}),qe).optional(),analytics:Ee.object({aggregatePeriod:rr}),replication:Ee.object({hostname:Ee.alternatives(ht,rr).optional().empty(null),url:ht.optional().empty(null),port:An,securePort:An,routes:ha.optional().empty(null),databases:Ee.alternatives(ht,ha),enableRootCAs:qe.optional(),copyTablesToCatchUp:qe.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Ee.object({enabled:r}).required(),logging:Ee.object({auditAuthEvents:Ee.object({logFailed:qe,logSuccessful:qe}),file:qe.required(),level:Ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Ee.object({enabled:qe.optional(),compress:qe.optional(),interval:ht.custom(IZ).optional().empty(null),maxSize:ht.custom(wZ).optional().empty(null),path:ht.optional().empty(null).default(o_)}).required(),root:s,stdStreams:qe.required(),auditLog:qe.required()}).required(),operationsApi:Ee.object({network:Ee.object({cors:qe.optional(),corsAccessList:ha.optional(),headersTimeout:rr.min(1).optional(),keepAliveTimeout:rr.min(1).optional(),port:An,domainSocket:Ee.optional().empty("hdb/operations-server").default(o_),securePort:An,timeout:rr.min(1).optional()}).optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).required(),rootPath:ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Ee.object({network:Ee.object({port:An,securePort:An,mtls:Ee.alternatives([qe.optional(),Ee.object({user:ht.optional(),certificateAuthority:i,required:qe.optional()})])}).required(),webSocket:qe.optional(),requireAuthentication:qe.optional()}),http:Ee.object({compressionThreshold:rr.optional(),cors:qe.optional(),corsAccessList:ha.optional(),headersTimeout:rr.min(1).optional(),port:An,securePort:An,maxHeaderSize:rr.optional(),mtls:Ee.alternatives([qe.optional(),Ee.object({user:ht.optional(),certificateAuthority:i,required:qe.optional()})]),threadRange:Ee.alternatives([ha.optional(),ht.optional()])}).required(),threads:Ee.alternatives(n.optional(),Ee.object({count:n.optional(),debug:Ee.alternatives(qe.optional(),Ee.object({startingPort:rr.min(1).optional(),host:ht.optional(),waitForDebugger:qe.optional()})),maxHeapMemory:rr.min(0).optional()})),storage:Ee.object({writeAsync:qe.required(),overlappingSync:qe.optional(),caching:qe.optional(),compression:Ee.alternatives([qe.optional(),Ee.object({dictionary:ht.optional(),threshold:rr.optional()})]),compactOnStart:qe.optional(),compactOnStartKeepBackup:qe.optional(),noReadAhead:qe.optional(),path:l,prefetchWrites:qe.optional(),maxFreeSpaceToLoad:rr.optional(),maxFreeSpaceToRetain:rr.optional()}).required(),ignoreScripts:qe.optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(bZ,"configValidator");function OZ(e){return Xv||Jv.existsSync(e)?null:`Specified path ${e} does not exist.`}a(OZ,"doesPathExist");function NZ(e,t){Ee.assert(e,ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=OZ(e);if(r)return t.message(r)}a(NZ,"validatePath");function wZ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(SZ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(AZ):e}a(wZ,"validateRotationMaxSize");function IZ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(TZ);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(RZ):e}a(IZ,"validateRotationInterval");function CZ(e,t){let r=t.state.path.join("."),n=mZ.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||zv();return i=Math.round(Math.min(i,zv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),pZ.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(CZ,"setDefaultThreads");function o_(e,t){let r=t.state.path.join(".");if(!Ey.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Ey.isEmpty(Ci))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return kc.join(Ci,gZ);case"logging.root":return kc.join(Ci,Qv);case"clustering.leafServer.streams.path":return kc.join(Ci,"clustering","leaf");case"storage.path":let n=kc.join(Ci,jv.LEGACY_DATABASES_DIR_NAME);return Jv.existsSync(n)?n:kc.join(Ci,jv.DATABASES_DIR_NAME);case"logging.rotation.path":return kc.join(Ci,Qv);case"operationsApi.network.domainSocket":return r==null?null:kc.join(Ci,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(o_,"setDefaultRoot");function PZ(e){let t=Ee.object({routes:Wp});return EZ.validateBySchema({routes:e},t)}a(PZ,"routesValidator")});var Pt=C(uU=>{"use strict";var ps=(k(),P(q)),Er=oe(),nr=X(),{configValidator:DZ,routesValidator:eU}=gy(),zr=require("fs-extra"),rU=require("yaml"),Vn=require("path"),LZ=require("is-number"),nU=require("properties-reader"),MZ=require("lodash"),{handleHDBError:vZ}=me(),{HTTP_STATUS_CODES:UZ,HDB_ERROR_MSGS:hu}=Un(),{server:xZ}=(Mr(),P(eu)),{PACKAGE_ROOT:sU}=Et(),{DATABASES_PARAM_CONFIG:a_,CONFIG_PARAMS:$n,CONFIG_PARAM_MAP:Ks}=ps,BZ="Unable to get config value because config is uninitialized",HZ="Config successfully initialized",kZ="Error backing up config file",FZ="Empty parameter sent to getConfigValue",iU=Vn.join(sU,"config","yaml",ps.HDB_DEFAULT_CONFIG_FILE),qZ=Vn.join(sU,"config","yaml","defaultNatsConfig.yaml"),GZ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",tU={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"},zp,Ct,jp;Object.assign(uU,{createConfigFile:$Z,getDefaultConfig:VZ,getConfigValue:aU,initConfig:Qp,flattenConfig:mu,updateConfigValue:cU,updateConfigObject:YZ,getConfiguration:jZ,setConfiguration:QZ,readConfigFile:Ry,getClusteringRoutes:JZ,initOldConfig:lU,getConfigFromFile:XZ,getConfigFilePath:Fc,addConfig:ZZ,deleteConfigFromFile:e8,getConfigObj:t8,resolvePath:Sy,getFlatConfigObj:r8});function Sy(e){if(e?.startsWith("~/"))return Vn.join(Er.getHomeDir(),e.slice(1));let t=ae();try{return Vn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(Sy,"resolvePath");function $Z(e,t=!1){let r=ma(iU);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=rU.parseDocument(zr.readFileSync(qZ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}zp=mu(r.toJSON());let n;for(let c in e){let l=Ks[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=Ty(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){nr.error(d)}}}n&&oU(r,n),Ay(r,t);let s=r.toJSON();Ct=mu(s);let i=r.getIn(["rootPath"]),o=Vn.join(i,ps.HDB_CONFIG_FILE);if(zr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);zr.writeFileSync(o,String(r)),nr.trace(`Config file written to ${o}`)}a($Z,"createConfigFile");function oU(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Er.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(a_.TABLES))for(let i in n[s][a_.TABLES])for(let o in n[s][a_.TABLES][i]){let c=n[s][a_.TABLES][i][o],l=[$n.DATABASES,s,a_.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){nr.error("Error parsing schemas CLI/env config arguments",n)}}a(oU,"setSchemasConfig");function VZ(e){if(zp===void 0){let r=ma(iU);zp=mu(r.toJSON())}let t=Ks[e.toLowerCase()];if(t!==void 0)return zp[t.toLowerCase()]}a(VZ,"getDefaultConfig");function aU(e){if(e==null){nr.info(FZ);return}if(Ct===void 0){nr.trace(BZ);return}let t=Ks[e.toLowerCase()];if(t!==void 0)return Ct[t.toLowerCase()]}a(aU,"getConfigValue");function Fc(e=Er.getPropsFilePath()){let t=Er.getEnvCliRootPath();if(t)return Sy(Vn.join(t,ps.HDB_CONFIG_FILE));let r=nU(e);return Sy(r.get(ps.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Fc,"getConfigFilePath");function Qp(e=!1){if(Ct===void 0||e){let t;if(!Er.noBootFile()){t=Er.getPropsFilePath();try{zr.accessSync(t,zr.constants.F_OK|zr.constants.R_OK)}catch(i){throw nr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Fc(t),n;if(r.includes("config/settings.js"))try{lU(r);return}catch(i){if(i.code!==ps.NODE_ERROR_CODES.ENOENT)throw i}try{n=ma(r)}catch(i){if(i.code===ps.NODE_ERROR_CODES.ENOENT){nr.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 nr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}KZ(n,r),Ay(n);let s=n.toJSON();if(xZ.config=s,Ct=mu(s),Ct.logging_rotation_rotate)for(let i in tU)Ct[i]&&nr.error(`Config ${tU[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);nr.trace(HZ)}}a(Qp,"initConfig");function KZ(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(nr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);zr.writeFileSync(t,String(e))}}a(KZ,"checkForUpdatedConfig");function Ay(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 hu.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 hu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=DZ(r,t);if(n.error)throw hu.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(Ay,"validateConfig");function YZ(e,t){Ct===void 0&&(Ct={});let r=Ks[e.toLowerCase()];if(r===void 0){nr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ct[r.toLowerCase()]=t}a(YZ,"updateConfigObject");function cU(e,t,r=void 0,n=!1,s=!1,i=!1){Ct===void 0&&Qp();let o=aU(Ks.hdb_root),c=Vn.join(o,ps.HDB_CONFIG_FILE),l=ma(c),u;if(r&&Ct){let _=!1;for(let h in r)if(r[h]!=Ct[h.toLowerCase()]){_=!0;break}if(!_){nr.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(_=Ks[e.toLowerCase()],_===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=_.split("_"),m=Ty(_,t);l.setIn([...h],m)}else for(let _ in r){let h=Ks[_.toLowerCase()];if(h===$n.HTTP_SECUREPORT&&r[_]===Ct[$n.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===$n.OPERATIONSAPI_NETWORK_SECUREPORT&&r[_]===Ct[$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=ps.LEGACY_CONFIG_PARAMS[_.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(h=S,m=S.split("_"));let g=Ty(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){nr.error(R)}}}u&&oU(l,u),Ay(l);let f=l.getIn(["rootPath"]),d=Vn.join(f,ps.HDB_CONFIG_FILE);if(n===!0&&WZ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);zr.writeFileSync(d,String(l)),s&&(Ct=mu(l.toJSON())),nr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cU,"updateConfigValue");function WZ(e,t){try{let r=Vn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ps.HDB_CONFIG_FILE}.bak`);zr.copySync(e,r),nr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){nr.error(kZ),nr.error(r)}}a(WZ,"backupConfigFile");var zZ=["databases"];function mu(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}),jp=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])&&!zZ.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()]&&Ks[l]&&(s[Ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(mu,"flattenConfig");function Ty(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(LZ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.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 Er.autoCast(t)}a(Ty,"castConfigValue");function jZ(){let e=Er.getPropsFilePath(),t=Fc(e);return ma(t).toJSON()}a(jZ,"getConfiguration");async function QZ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return cU(void 0,void 0,s,!0),GZ}catch(i){throw typeof i=="string"||i instanceof String?vZ(i,i,UZ.BAD_REQUEST,void 0,void 0,!0):i}}a(QZ,"setConfiguration");function Ry(){let e=Er.getPropsFilePath();try{zr.accessSync(e,zr.constants.F_OK|zr.constants.R_OK)}catch(n){if(!Er.noBootFile())throw nr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Fc(e);return ma(t).toJSON()}a(Ry,"readConfigFile");function ma(e){return rU.parseDocument(zr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ma,"parseYamlDoc");function JZ(){let e=Ry(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=eU(t);if(r)throw hu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=eU(n);if(s)throw hu.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw hu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(JZ,"getClusteringRoutes");function lU(e){let t=nU(e);Ct={};for(let r in Ks){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Ks[r].toLowerCase();s===$n.LOGGING_ROOT?Ct[s]=Vn.dirname(n):Ct[s]=n}return Ct}a(lU,"initOldConfig");function XZ(e){let t=Ry();return MZ.get(t,e.replaceAll("_","."))}a(XZ,"getConfigFromFile");async function ZZ(e,t){let r=ma(Fc());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 zr.writeFile(Fc(),String(r))}a(ZZ,"addConfig");function e8(e){let t=Fc(Er.getPropsFilePath()),r=ma(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Vn.join(n,ps.HDB_CONFIG_FILE);zr.writeFileSync(s,String(r))}a(e8,"deleteConfigFromFile");function t8(){return jp||(Qp(),jp)}a(t8,"getConfigObj");function r8(){return Ct||Qp(),Ct}a(r8,"getFlatConfigObj")});var Kn=C((qOe,Nr)=>{"use strict";var _U="username is required",hU="nothing to update, must supply active, role or password to update",mU="password cannot be an empty string",pU="If role is specified, it cannot be empty.",EU="active must be true or false";Nr.exports.addUser=d8;Nr.exports.alterUser=f8;Nr.exports.dropUser=h8;Nr.exports.getSuperUser=S8;Nr.exports.userInfo=m8;Nr.exports.listUsers=Xp;Nr.exports.listUsersExternal=p8;Nr.exports.setUsersWithRolesCache=qc;Nr.exports.findAndValidateUser=Dy;Nr.exports.getClusterUser=T8;Nr.exports.getUsersWithRolesCache=g8;Nr.exports.USERNAME_REQUIRED=_U;Nr.exports.ALTERUSER_NOTHING_TO_UPDATE=hU;Nr.exports.EMPTY_PASSWORD=mU;Nr.exports.EMPTY_ROLE=pU;Nr.exports.ACTIVE_BOOLEAN=EU;var gU=jr(),n8=_a(),c_=(Yp(),P(Kp)),SU=Vv(),l_=Yr(),wy=po(),Pi=oe(),TU=require("validate.js"),Iy=X(),{promisify:s8}=require("util"),Cy=ho(),by=(k(),P(q)),dU=ct(),i8=Pt(),o8=ae(),a8=uo(),{hdb_errors:c8,ClientError:Ys}=me(),{HTTP_STATUS_CODES:mo,AUTHENTICATION_ERROR_MSGS:yy,HDB_ERROR_MSGS:pu}=c8,{UserEventMsg:Py}=Ws(),Oy=require("lodash"),{server:Jp}=(Mr(),P(eu)),l8=X();Jp.getUser=(e,t)=>Dy(e,t,t!=null);Jp.authenticateUser=(e,t)=>Dy(e,t);var AU={username:!0,active:!0,role:!0,password:!0},fU=new Map,u8=s8(n8.delete),Ny=o8.get(by.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??c_.HASH_FUNCTION.SHA256,Di;async function d8(e){let t=TU.cleanAttributes(e,AU),r=SU.addUserValidation(t);if(r)throw new Ys(r.message);let n=await l_.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 Ys(pu.ROLE_NAME_NOT_FOUND(t.role),mo.NOT_FOUND);if(n.length>1)throw new Ys(pu.DUP_ROLES_FOUND(t.role),mo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Cy.encrypt(t.password)),t.password=await c_.hash(t.password,Ny),t.hash_function=Ny,t.role=n[0].id;let s=await gU.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Iy.debug(s),await qc(),s.skipped_hashes.length===1)throw new Ys(pu.USER_ALREADY_EXISTS(t.username),mo.CONFLICT);return wy.signalUserChange(new Py(process.pid)),`${t.username} successfully added`}a(d8,"addUser");async function f8(e){let t=TU.cleanAttributes(e,AU);if(Pi.isEmptyOrZeroLength(t.username))throw new Error(_U);if(Pi.isEmptyOrZeroLength(t.password)&&Pi.isEmptyOrZeroLength(t.role)&&Pi.isEmptyOrZeroLength(t.active))throw new Error(hU);if(!Pi.isEmpty(t.password)&&Pi.isEmptyOrZeroLength(t.password.trim()))throw new Error(mU);if(!Pi.isEmpty(t.active)&&!Pi.isBoolean(t.active))throw new Error(EU);if(!Pi.isEmpty(t.password)&&!Pi.isEmptyOrZeroLength(t.password.trim())&&(_8(t.username)&&(t.hash=Cy.encrypt(t.password)),t.password=await c_.hash(t.password,Ny)),t.role==="")throw new Error(pU);if(t.role){let n=await l_.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ys(pu.ALTER_USER_ROLE_NOT_FOUND(t.role),mo.NOT_FOUND);if(n.length>1)throw new Ys(pu.DUP_ROLES_FOUND(t.role),mo.CONFLICT);t.role=n[0].id}let r=await gU.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await qc(),wy.signalUserChange(new Py(process.pid)),r}a(f8,"alterUser");function _8(e){let t=!1,r=Di.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(_8,"isClusterUser");async function h8(e){let t=SU.dropUserValidation(e);if(t)throw new Ys(t.message);if(Di.get(e.username)===void 0)throw new Ys(pu.USER_NOT_EXIST(e.username),mo.NOT_FOUND);let r=await u8({table:"hdb_user",schema:"system",hash_values:[e.username]});return Iy.debug(r),await qc(),wy.signalUserChange(new Py(process.pid)),`${e.username} successfully deleted`}a(h8,"dropUser");async function m8(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Oy.cloneDeep(e.hdb_user);let r=await l_.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(m8,"userInfo");async function p8(){let e=await Xp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(p8,"listUsersExternal");async function Xp(){let e=await l_.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Oy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await l_.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Oy.cloneDeep(s),s.role=t[s.role],E8(s.role),n.set(s.username,s);return n}a(Xp,"listUsers");function E8(e){if(!e){Iy.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(a8)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(E8,"appendSystemTablesToRole");async function qc(e=void 0){e?Di=e:Di=await Xp()}a(qc,"setUsersWithRolesCache");async function g8(){return Di||await qc(),Di}a(g8,"getUsersWithRolesCache");async function Dy(e,t,r=!0){Di||await qc();let n=Di.get(e);if(!n){if(!r)return{username:e};throw new Ys(yy.GENERIC_AUTH_FAIL,mo.UNAUTHORIZED)}if(n&&!n.active)throw new Ys(yy.USER_INACTIVE,mo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(fU.get(t)===n.password)return s;{let i=c_.validate(n.password,t,n.hash_function||c_.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)fU.set(t,n.password);else throw new Ys(yy.GENERIC_AUTH_FAIL,mo.UNAUTHORIZED)}}return s}a(Dy,"findAndValidateUser");async function S8(){Di||await qc();for(let[,e]of Di)if(e.role.role==="super_user")return e}a(S8,"getSuperUser");async function T8(){let e=await Xp(),t=i8.getConfigFromFile(by.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==by.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Cy.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+dU.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+dU.SERVER_SUFFIX.ADMIN,r}a(T8,"getClusterUser");var RU=[];Jp.invalidateUser=function(e){for(let t of RU)try{t(e)}catch(r){l8.error("Error invalidating user",r)}};Jp.onInvalidatedUser=function(e){RU.push(e)}});var d_=C((KOe,NU)=>{"use strict";var Gc=X(),Yn=(k(),P(q)),A8=kM(),$Oe=ms(),VOe=Ii(),R8=Kn(),{validateEvent:yU}=Ws(),u_=Gn(),y8=require("process"),{resetDatabases:b8}=(xe(),P(at)),O8={[Yn.ITC_EVENT_TYPES.SCHEMA]:N8,[Yn.ITC_EVENT_TYPES.USER]:OU};async function N8(e){let t=yU(e);if(t){Gc.error(t);return}Gc.trace("ITC schemaHandler received schema event:",e),await A8(e.message),await w8(e.message)}a(N8,"schemaHandler");async function w8(e){try{u_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),u_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),u_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=b8();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Gc.error(t)}}a(w8,"syncSchemaMetadata");var bU=[];async function OU(e){try{try{u_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),u_.resetReadTxn(Yn.SYSTEM_SCHEMA_NAME,Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Gc.warn(r)}let t=yU(e);if(t){Gc.error(t);return}Gc.trace(`ITC userHandler ${Yn.HDB_ITC_CLIENT_PREFIX}${y8.pid} received user event:`,e),await R8.setUsersWithRolesCache();for(let r of bU)r()}catch(t){Gc.error(t)}}a(OU,"userHandler");OU.addListener=function(e){bU.push(e)};NU.exports=O8});var Ws=C((JOe,IU)=>{"use strict";var WOe=X(),Ly=oe(),I8=(k(),P(q)),{ITC_ERRORS:f_}=Un(),{parentPort:zOe,threadId:C8,isMainThread:P8,workerData:jOe}=require("worker_threads"),{onMessageFromWorkers:D8,broadcast:QOe,broadcastWithAcknowledgement:L8}=et();IU.exports={sendItcEvent:M8,validateEvent:wU,SchemaEventMsg:v8,UserEventMsg:U8};var Zp;D8(async(e,t)=>{Zp=Zp||d_(),wU(e),Zp[e.type]&&await Zp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function M8(e){return!P8&&e.message&&(e.message.originator=C8),L8(e)}a(M8,"sendItcEvent");function wU(e){if(typeof e!="object")return f_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ly.isEmpty(e.type))return f_.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ly.isEmpty(e.message))return f_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ly.isEmpty(e.message.originator))return f_.MISSING_ORIGIN;if(I8.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return f_.INVALID_EVENT(e.type)}a(wU,"validateEvent");function v8(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(v8,"SchemaEventMsg");function U8(e){this.originator=e}a(U8,"UserEventMsg")});var po=C((eNe,LU)=>{"use strict";var CU=(k(),P(q)),ZOe=oe(),eE=X(),PU=xM(),Eu,{sendItcEvent:DU}=Ws();function x8(e){try{eE.info("signalSchemaChange called with message:",e),Eu=Eu||d_();let t=new PU(CU.ITC_EVENT_TYPES.SCHEMA,e);return Eu.schema(t),DU(t)}catch(t){eE.error(t)}}a(x8,"signalSchemaChange");function B8(e){try{eE.trace("signalUserChange called with message:",e),Eu=Eu||d_();let t=new PU(CU.ITC_EVENT_TYPES.USER,e);return Eu.user(t),DU(t)}catch(t){eE.error(t)}}a(B8,"signalUserChange");LU.exports={signalSchemaChange:x8,signalUserChange:B8}});var tE=C((rNe,vU)=>{"use strict";var MU=oe(),H8=(k(),P(q)),k8=X(),F8=xp(),q8=Up(),G8=po(),{SchemaEventMsg:$8}=Ws(),V8="already exists in";vU.exports=K8;async function K8(e,t,r){if(MU.isEmptyOrZeroLength(r))return r;let n=[];MU.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 Y8(e,t.schema,t.name,i)})),s}a(K8,"lmdbCheckForNewAttributes");async function Y8(e,t,r,n){let s=new q8(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await W8(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(V8))k8.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(Y8,"createNewAttribute");async function W8(e){let t;return t=await F8(e),G8.signalSchemaChange(new $8(process.pid,H8.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(W8,"createAttribute")});var gu=C((sNe,UU)=>{"use strict";var My=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}};UU.exports=My});var BU=C((oNe,xU)=>{"use strict";var z8=gu(),j8=(k(),P(q)).OPERATIONS_ENUM,vy=class extends z8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(j8.INSERT,r,n,s,i),this.records=t}};xU.exports=vy});var kU=C((cNe,HU)=>{"use strict";var Q8=gu(),J8=(k(),P(q)).OPERATIONS_ENUM,Uy=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=Uy});var qU=C((uNe,FU)=>{"use strict";var X8=gu(),Z8=(k(),P(q)).OPERATIONS_ENUM,xy=class extends X8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(Z8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};FU.exports=xy});var $U=C((fNe,GU)=>{"use strict";var e5=gu(),t5=(k(),P(q)).OPERATIONS_ENUM,By=class extends e5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(t5.DELETE,n,s,t,i),this.original_records=r}};GU.exports=By});var __=C((mNe,WU)=>{"use strict";var hNe=require("path"),VU=_t(),r5=BU(),n5=kU(),s5=qU(),i5=$U(),Su=kt(),KU=oe(),{CONFIG_PARAMS:o5}=(k(),P(q)),YU=ae();YU.initSync();var rE=(k(),P(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:a5}=gt();WU.exports=c5;async function c5(e,t){if(YU.get(o5.LOGGING_AUDITLOG)===!1)return;let r=a5(e.schema,e.table),n=await VU.openEnvironment(r,e.table,!0),s=l5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){VU.initializeDBIs(n,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Su.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),KU.isEmpty(s.user_name)||n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(c5,"writeTransaction");function l5(e,t){let r=KU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===rE.INSERT)return new r5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.UPDATE)return new n5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.UPSERT)return new s5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rE.DELETE)return new i5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(l5,"createTransactionObject")});var Hy=C((gNe,zU)=>{"use strict";var u5=Qf(),ENe=yf(),h_=(k(),P(q)),d5=bf(),f5=Mc().insertRecords,_5=_t(),h5=X(),m5=tE(),{getSchemaPath:p5}=gt(),E5=__();zU.exports=g5;async function g5(e){try{let{schema_table:t,attributes:r}=u5(e);d5(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 m5(e.hdb_auth_header,t,r),s=p5(e.schema,e.table),i=await _5.openEnvironment(s,e.table),o=await f5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await E5(e,o)}catch(c){h5.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(g5,"lmdbCreateRecords")});var JU=C((TNe,QU)=>{"use strict";var jU=(k(),P(q)),S5=Hy(),T5=yf(),A5=require("fs-extra"),{getSchemaPath:R5}=gt();QU.exports=y5;async function y5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new T5(jU.SYSTEM_SCHEMA_NAME,jU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await S5(r),await A5.mkdirp(R5(e.schema))}a(y5,"lmdbCreateSchema")});var ZU=C((RNe,XU)=>{"use strict";var ky=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}};XU.exports=ky});var n0=C((wNe,r0)=>{"use strict";var e0=_t(),Fy=dn(),qy=Un().LMDB_ERRORS_ENUM,b5=kt(),t0=X(),bNe=oe(),O5=require("lmdb"),N5=ZU(),w5=(k(),P(q)),{OVERFLOW_MARKER:ONe,MAX_SEARCH_KEY_LENGTH:NNe}=b5,I5=w5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function C5(e,t,r,n){if(Fy.validateEnv(e),t===void 0)throw new Error(qy.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qy.IDS_REQUIRED):new Error(qy.IDS_MUST_BE_ITERABLE);try{let s=e0.listDBIs(e);e0.initializeDBIs(e,t,s);let i=new N5,o,c=[],l=[];for(let _=0,h=r.length;_<h;_++)try{o=r[_];let m=e.dbis[t].get(o);if(!m||n&&m[I5]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,O5.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=Fy.getIndexedValues(T);if(N)for(let v=0,H=N.length;v<H;v++)E.remove(N[v],o)}catch{t0.warn(`cannot delete from attribute: ${R}, ${T}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){t0.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=Fy.getNextMonotonicTime(),i}catch(s){throw s}}a(C5,"deleteRecords");r0.exports={deleteRecords:C5}});var m_=C((CNe,i0)=>{"use strict";var Tu=oe(),P5=n0(),D5=_t(),{getSchemaPath:L5}=gt(),M5=__(),v5=X();i0.exports=U5;async function U5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Tu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Tu.isEmptyOrZeroLength(e.hash_values)&&!Tu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Tu.isEmpty(l)||e.hash_values.push(l)}}if(Tu.isEmptyOrZeroLength(e.hash_values))return s0([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Tu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=L5(e.schema,e.table),i=await D5.openEnvironment(s,e.table),o=await P5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await M5(e,o)}catch(c){v5.error(`unable to write transaction due to ${c.message}`)}return s0(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(U5,"lmdbDeleteRecords");function s0(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(s0,"createDeleteResponse")});var $y=C((LNe,o0)=>{"use strict";var x5=(k(),P(q)),DNe=dn();function Gy(e,t){let r=Object.create(null);if(t.length===1&&x5.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(Gy,"parseRow");function B5(e,t,r,n){let s=Gy(r,e);n.push(s)}a(B5,"searchAll");function H5(e,t,r,n){let s=Gy(r,e);n[t]=s}a(H5,"searchAllToMap");function k5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(k5,"iterateDBI");function $c(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($c,"pushResults");function F5(e,t,r,n,s,i){t.toString().endsWith(e)&&$c(t,r,n,s,i)}a(F5,"endsWith");function q5(e,t,r,n,s,i){t.toString().includes(e)&&$c(t,r,n,s,i)}a(q5,"contains");function G5(e,t,r,n,s,i){t>e&&$c(t,r,n,s,i)}a(G5,"greaterThanCompare");function $5(e,t,r,n,s,i){t>=e&&$c(t,r,n,s,i)}a($5,"greaterThanEqualCompare");function V5(e,t,r,n,s,i){t<e&&$c(t,r,n,s,i)}a(V5,"lessThanCompare");function K5(e,t,r,n,s,i){t<=e&&$c(t,r,n,s,i)}a(K5,"lessThanEqualCompare");o0.exports={parseRow:Gy,searchAll:B5,searchAllToMap:H5,iterateDBI:k5,endsWith:F5,contains:q5,greaterThanCompare:G5,greaterThanEqualCompare:$5,lessThanCompare:V5,lessThanEqualCompare:K5,pushResults:$c}});var Au=C((BNe,_0)=>{"use strict";var pa=_t(),vNe=X(),Wn=dn(),nE=kt(),jt=Un().LMDB_ERRORS_ENUM,UNe=oe(),Y5=(k(),P(q)),sE=$y(),{parseRow:W5}=sE,xNe=require("lmdb"),{OVERFLOW_MARKER:a0,MAX_SEARCH_KEY_LENGTH:z5}=nE;function c0(e,t,r,n=!1,s=void 0,i=void 0){return Vc(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(c0,"iterateFullIndex");function p_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Vc(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(p_,"iterateRangeBetween");function Vc(e,t,r,n){let s=e.database||e,i=pa.openDBI(s,r);i[nE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&pa.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(Vc,"setupTransaction");function l0(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(a0)){if(!s)if(r)s=pa.openDBI(e,r);else{let l=pa.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=pa.openDBI(e,l[u]),!s[nE.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(l0,"getOverflowCheck");function j5(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(jt.HASH_ATTRIBUTE_REQUIRED);return Vc(e,t,t,(o,c,l)=>(iE(r),r=E_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>W5(u.value,r))))}a(j5,"searchAll");function Q5(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(jt.HASH_ATTRIBUTE_REQUIRED);iE(r),r=E_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of c0(e,t,t,n,s,i))o.set(c,sE.parseRow(l,r));return o}a(Q5,"searchAllToMap");function J5(e,t,r=!1,n=void 0,s=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(jt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=c0(e,void 0,t,r,n,s),c=o.transaction,l=l0(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(J5,"iterateDBI");function X5(e,t){if(Wn.validateEnv(e),t===void 0)throw new Error(jt.HASH_ATTRIBUTE_REQUIRED);return pa.statDBI(e,t).entryCount}a(X5,"countAll");function Z5(e,t,r,n,s=!1,i=void 0,o=void 0){return Ea(e,r,n),Vc(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(Z5,"equals");function e9(e,t,r){return Ea(e,t,r),pa.openDBI(e,t).getValuesCount(r)}a(e9,"count");function t9(e,t,r,n,s=!1,i=void 0,o=void 0){return Ea(e,r,n),Vc(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(t9,"startsWith");function r9(e,t,r,n,s=!1,i=void 0,o=void 0){return u0(e,t,r,n,s,i,o,!0)}a(r9,"endsWith");function u0(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Ea(e,r,n),Vc(e,null,r,(l,u,f,d)=>{let _=l0(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(a0)?u.getValues(h,{transaction:l}).map(S=>{let g=_(h,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?m.endsWith(n):m.includes(n))?u[nE.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(S=>({key:h,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(u0,"contains");function n9(e,t,r,n,s=!1,i=void 0,o=void 0){Ea(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),p_(e,t,r,n,l,s,i,o,!0,!1)}a(n9,"greaterThan");function s9(e,t,r,n,s=!1,i=void 0,o=void 0){Ea(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),p_(e,t,r,n,l,s,i,o,!1,!1)}a(s9,"greaterThanEqual");function i9(e,t,r,n,s=!1,i=void 0,o=void 0){Ea(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),p_(e,t,r,l,n,s,i,o,!1,!0)}a(i9,"lessThan");function o9(e,t,r,n,s=!1,i=void 0,o=void 0){Ea(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),p_(e,t,r,l,n,s,i,o,!1,!1)}a(o9,"lessThanEqual");function a9(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Wn.validateEnv(e),r===void 0)throw new Error(jt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(jt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(jt.END_VALUE_REQUIRED);if(n=Wn.convertKeyValueToWrite(n),s=Wn.convertKeyValueToWrite(s),n>s)throw new Error(jt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return p_(e,t,r,n,s,i,o,c)}a(a9,"between");function c9(e,t,r,n){Wn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(jt.HASH_ATTRIBUTE_REQUIRED);if(iE(r),r=E_(s,r),n===void 0)throw new Error(jt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=sE.parseRow(c,r)),o}a(c9,"searchByHash");function l9(e,t,r){Wn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(jt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(jt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(l9,"checkHashExists");function u9(e,t,r,n,s=[]){return f0(e,t,r,n,s),d0(e,t,r,n,s).map(i=>i[1])}a(u9,"batchSearchByHash");function d9(e,t,r,n,s=[]){f0(e,t,r,n,s);let i=new Map;for(let[o,c]of d0(e,t,r,n,s))i.set(o,c);return i}a(d9,"batchSearchByHashToMap");function d0(e,t,r,n,s=[]){return Vc(e,t,t,(i,o,c)=>{r=E_(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,sE.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(d0,"batchHashSearch");function f0(e,t,r,n,s){if(Wn.validateEnv(e),t===void 0)throw new Error(jt.HASH_ATTRIBUTE_REQUIRED);if(iE(r),n==null)throw new Error(jt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(jt.IDS_MUST_BE_ITERABLE)}a(f0,"initializeBatchSearchByHash");function iE(e){if(!Array.isArray(e))throw e===void 0?new Error(jt.FETCH_ATTRIBUTES_REQUIRED):new Error(jt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(iE,"validateFetchAttributes");function Ea(e,t,r){if(Wn.validateEnv(e),t===void 0)throw new Error(jt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(jt.SEARCH_VALUE_REQUIRED);if(r?.length>z5)throw new Error(jt.SEARCH_VALUE_TOO_LARGE)}a(Ea,"validateComparisonFunctions");function E_(e,t){return t.length===1&&Y5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=pa.listDBIs(e)),t}a(E_,"setGetWholeRowAttributes");_0.exports={searchAll:j5,searchAllToMap:Q5,count:e9,countAll:X5,equals:Z5,startsWith:t9,endsWith:r9,contains:u0,searchByHash:c9,setGetWholeRowAttributes:E_,batchSearchByHash:u9,batchSearchByHashToMap:d9,checkHashExists:l9,iterateDBI:J5,greaterThan:n9,greaterThanEqual:s9,lessThan:i9,lessThanEqual:o9,between:a9}});var Ru=C((kNe,g0)=>{var h0=require("lodash"),m0=tt(),Ge=require("joi"),f9=oe(),{hdb_schema_table:g_,checkValidTable:p0,hdb_table:E0,hdb_database:oE}=Oi(),{handleHDBError:_9,hdb_errors:h9}=me(),{getDatabases:m9}=(xe(),P(at)),{HTTP_STATUS_CODES:p9}=h9,E9=Ge.object({database:oE,schema:oE,table:E0,search_attribute:g_,search_value:Ge.any().required(),get_attributes:Ge.array().min(1).items(Ge.alternatives(g_,Ge.object())).optional(),desc:Ge.bool(),limit:Ge.number().integer().min(1),offset:Ge.number().integer().min(0)}),g9=Ge.object({database:oE,schema:oE,table:E0,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(g_,Ge.object())).optional(),sort:Ge.object({attribute:Ge.alternatives(g_,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(g_,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()});g0.exports=function(e,t){let r=null;switch(t){case"value":r=m0.validateBySchema(e,E9);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(p0("database",e.schema)),i(p0("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=m0.validateBySchema(e,g9);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=f9.checkGlobalSchemaTable(e.schema,e.table);if(s)return _9(new Error,s,p9.NOT_FOUND);let o=m9()[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=h0.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!h0.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 Vy=C((qNe,S0)=>{"use strict";var S9=_t(),T9=Ru(),{getSchemaPath:A9}=gt();S0.exports=R9;function R9(e){let t=T9(e,"hashes");if(t)throw t;let r=A9(e.schema,e.table);return S9.openEnvironment(r,e.table)}a(R9,"initialize")});var Ky=C(($Ne,T0)=>{"use strict";var y9=Au(),b9=Vy();T0.exports=O9;async function O9(e){let t=await b9(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return y9.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(O9,"lmdbGetDataByHash")});var yu=C((KNe,A0)=>{"use strict";var Yy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};A0.exports=Yy});var y0=C((zNe,R0)=>{"use strict";var WNe=yu(),N9=Au(),w9=Vy();R0.exports=I9;async function I9(e){let t=await w9(e),r=global.hdb_schema[e.schema][e.table];return N9.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(I9,"lmdbSearchByHash")});var zs=C((QNe,b0)=>{"use strict";var Wy=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}};b0.exports=Wy});var aE=C((XNe,P0)=>{"use strict";var Qr=Au(),C9=_t(),P9=oe(),$e=kt(),Kc=(k(),P(q)),D9=uo(),O0=Un().LMDB_ERRORS_ENUM,{getSchemaPath:L9}=gt(),Eo=Kc.SEARCH_WILDCARDS;async function M9(e,t,r){let n;e.schema===Kc.SYSTEM_SCHEMA_NAME?n=D9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=C0(e,n.hash_attribute,r,t);return w0(e,s,n.hash_attribute,r)}a(M9,"prepSearch");async function w0(e,t,r,n){let s=L9(e.schema,e.table),i=await C9.openEnvironment(s,e.table),o=I0(i,e,t,r),c=o.transaction||i;if([$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,$e.SEARCH_TYPES.SEARCH_ALL,$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(v9(e,r)===!1){let f=e.search_attribute;if(f===r)return n?N0(o,()=>!0):o.map(_=>({[r]:_.key}));let d=a(_=>({[r]:_.value,[f]:_.key}),"toObject");return n?N0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Qr.batchSearchByHashToMap(c,r,e.get_attributes,u):Qr.batchSearchByHash(c,r,e.get_attributes,u)}a(w0,"executeSearch");function I0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case $e.SEARCH_TYPES.EQUALS:s=Qr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.CONTAINS:s=Qr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.ENDS_WITH:case $e.SEARCH_TYPES._ENDS_WITH:s=Qr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.STARTS_WITH:case $e.SEARCH_TYPES._STARTS_WITH:s=Qr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case $e.SEARCH_TYPES.SEARCH_ALL:return Qr.searchAll(e,n,t.get_attributes,o,c,l);case $e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qr.searchAllToMap(e,n,t.get_attributes,o,c,l);case $e.SEARCH_TYPES.BETWEEN:s=Qr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN:case $e.SEARCH_TYPES._GREATER_THAN:s=Qr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.GREATER_THAN_EQUAL:case $e.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Qr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.LESS_THAN:case $e.SEARCH_TYPES._LESS_THAN:s=Qr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case $e.SEARCH_TYPES.LESS_THAN_EQUAL:case $e.SEARCH_TYPES._LESS_THAN_EQUAL:s=Qr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(I0,"searchByType");function N0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(N0,"createMapFromIterable");function v9(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(v9,"checkToFetchMore");function C0(e,t,r,n){if(P9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Eo.indexOf(s)>-1)return r===!0?$e.SEARCH_TYPES.SEARCH_ALL_TO_MAP:$e.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Eo[0])<0&&s.indexOf(Eo[1])<0)return c===!0?r===!0?$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:$e.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:$e.SEARCH_TYPES.EQUALS;if(Eo.indexOf(i)>=0&&Eo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),$e.SEARCH_TYPES.CONTAINS;if(Eo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),$e.SEARCH_TYPES.ENDS_WITH;if(Eo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),$e.SEARCH_TYPES.STARTS_WITH;if(s.includes(Eo[0])||s.includes(Eo[1]))return $e.SEARCH_TYPES.EQUALS;throw new Error(O0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Kc.VALUE_SEARCH_COMPARATORS.BETWEEN:return $e.SEARCH_TYPES.BETWEEN;case Kc.VALUE_SEARCH_COMPARATORS.GREATER:return $e.SEARCH_TYPES.GREATER_THAN;case Kc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return $e.SEARCH_TYPES.GREATER_THAN_EQUAL;case Kc.VALUE_SEARCH_COMPARATORS.LESS:return $e.SEARCH_TYPES.LESS_THAN;case Kc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return $e.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(O0.UNKNOWN_SEARCH_TYPE)}}a(C0,"createSearchTypeFromSearchObject");P0.exports={executeSearch:w0,createSearchTypeFromSearchObject:C0,prepSearch:M9,searchByType:I0}});var L0=C((twe,D0)=>{"use strict";var ewe=zs(),U9=Ru(),x9=oe(),B9=(k(),P(q)),H9=aE();D0.exports=k9;function k9(e,t){if(!x9.isEmpty(t)&&B9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=U9(e,"value");if(n)throw n;return H9.prepSearch(e,t,!0)}a(k9,"lmdbGetDataByValue")});var S_=C((swe,M0)=>{"use strict";var nwe=zs(),F9=Ru(),q9=oe(),G9=(k(),P(q)),$9=aE();M0.exports=V9;async function V9(e,t){if(!q9.isEmpty(t)&&G9.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=F9(e,"value");if(n)throw n;return $9.prepSearch(e,t,!1)}a(V9,"lmdbSearchByValue")});var U0=C((awe,v0)=>{"use strict";var owe=kt(),zy=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}},jy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Qy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};v0.exports={SearchByConditionsObject:zy,SearchCondition:jy,SortAttribute:Qy}});var F0=C((dwe,k0)=>{"use strict";var lwe=U0().SearchByConditionsObject,K9=zs(),Y9=Ru(),Jy=Au(),cE=kt(),{Resource:uwe}=(sa(),P(GA)),H0=aE(),W9=$y(),z9=require("lodash"),{getSchemaPath:j9}=gt(),x0=_t(),{handleHDBError:Q9,hdb_errors:J9}=me(),{HTTP_STATUS_CODES:X9}=J9,Z9=1e8;k0.exports=e7;async function e7(e){let t=Y9(e,"conditions");if(t)throw Q9(t,t.message,X9.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=j9(e.schema,e.table),n=await x0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)x0.openDBI(n,u.search_attribute);let i=z9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===cE.SEARCH_TYPES.EQUALS?u.estimated_count=Jy.count(n,u.search_attribute,u.search_value):f===cE.SEARCH_TYPES.CONTAINS||f===cE.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Z9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await B0(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,_=Jy.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=>W9.parseRow(h,_))}else{for(let d=1;d<i.length;d++){let _=i[d],h=await B0(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=Jy.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(e7,"lmdbSearchByConditions");async function B0(e,t,r,n){let s=new K9(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===cE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,H0.searchByType(e,s,i,n).map(o=>o.value)}a(B0,"executeConditionSearch")});var bu=C((_we,q0)=>{"use strict";var t7=(k(),P(q)).OPERATIONS_ENUM,Xy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=t7.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};q0.exports=Xy});var Zy=C((mwe,j0)=>{"use strict";var K0=zs(),Y0=bu(),W0=S_(),z0=m_(),Rn=(k(),P(q)),G0=oe(),$0=_t(),{getTransactionAuditStorePath:r7,getSchemaPath:n7}=gt(),V0=X();j0.exports=s7;async function s7(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 i7(e),await o7(e);let t=n7(e.schema,e.table);try{await $0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")V0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=r7(e.schema,e.table);await $0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")V0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(s7,"lmdbDropTable");async function i7(e){let t=new K0(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Rn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Rn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await W0(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 Y0(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await z0(s)}a(i7,"deleteAttributesFromSystem");async function o7(e){let t=new K0(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Rn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Rn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Rn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Rn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await W0(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 Y0(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await z0(s)}catch(i){throw i}}a(o7,"dropTableFromSystem")});var J0=C((Ewe,Q0)=>{"use strict";var a7=require("fs-extra"),c7=zs(),l7=yu(),u7=bu(),d7=Zy(),f7=m_(),_7=Ky(),h7=S_(),go=(k(),P(q)),{getSchemaPath:m7}=gt(),{handleHDBError:p7,hdb_errors:E7}=me(),{HDB_ERROR_MSGS:g7,HTTP_STATUS_CODES:S7}=E7;Q0.exports=T7;async function T7(e){let t;try{t=await A7(e.schema);let r=new c7(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await h7(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await d7(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new u7(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await f7(s);let i=m7(t);await a7.remove(i)}catch(r){throw r}}a(T7,"lmdbDropSchema");async function A7(e){let t=new l7(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await _7(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw p7(new Error,g7.SCHEMA_NOT_FOUND(e),S7.NOT_FOUND,void 0,void 0,!0);return n}a(A7,"validateDropSchema")});var Ou=C((Swe,X0)=>{"use strict";var eb=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};X0.exports=eb});var rb=C((Rwe,Z0)=>{"use strict";var R7=require("fs-extra"),lE=_t(),{getTransactionAuditStorePath:y7}=gt(),tb=kt(),Awe=Ou();Z0.exports=b7;async function b7(e){let t;try{let r=y7(e.schema,e.table);await R7.mkdirp(r),t=await lE.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{lE.createDBI(t,tb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),lE.createDBI(t,tb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),lE.createDBI(t,tb.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(b7,"createTransactionsAuditEnvironment")});var rx=C((Owe,tx)=>{"use strict";var nb=(k(),P(q)),ex=_t(),O7=Mc(),{getSystemSchemaPath:N7,getSchemaPath:w7}=gt(),bwe=uo(),I7=xp(),sb=Up(),C7=X(),P7=rb();tx.exports=D7;async function D7(e,t){let r=w7(t.schema,t.table),n=new sb(t.schema,t.table,nb.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new sb(t.schema,t.table,nb.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new sb(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await ex.createEnvironment(r,t.table),e!==void 0){let o=await ex.openEnvironment(N7(),nb.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await O7.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 ib(n),await ib(s),await ib(i)}await P7(t)}catch(o){throw o}}a(D7,"lmdbCreateTable");async function ib(e){try{await I7(e)}catch(t){C7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ib,"createAttribute")});var sx=C((wwe,nx)=>{"use strict";var L7=Qf(),M7=bf(),v7=tE(),T_=(k(),P(q)),U7=Mc().updateRecords,x7=_t(),{getSchemaPath:B7}=gt(),H7=__(),k7=X();nx.exports=F7;async function F7(e){try{let{schema_table:t,attributes:r}=L7(e);M7(e,r,t.hash_attribute),e.schema!==T_.SYSTEM_SCHEMA_NAME&&(r.includes(T_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(T_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(T_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(T_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await v7(e.hdb_auth_header,t,r),s=B7(e.schema,e.table),i=await x7.openEnvironment(s,e.table),o=await U7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await H7(e,o)}catch(c){k7.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(F7,"lmdbUpdateRecords")});var ox=C((Cwe,ix)=>{"use strict";var q7=(k(),P(q)).OPERATIONS_ENUM,ob=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=q7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ix.exports=ob});var cx=C((Lwe,ax)=>{"use strict";var Dwe=ox(),G7=Qf(),$7=bf(),V7=tE(),A_=(k(),P(q)),K7=Mc().upsertRecords,Y7=_t(),{getSchemaPath:W7}=gt(),z7=__(),j7=X(),{handleHDBError:Q7,hdb_errors:J7}=me();ax.exports=X7;async function X7(e){let t;try{t=G7(e)}catch(l){throw Q7(l,l.message,J7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;$7(e,n,r.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(n.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await V7(e.hdb_auth_header,r,n),i=W7(e.schema,e.table),o=await Y7.openEnvironment(i,e.table),c=await K7(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await z7(e,c)}catch(l){j7.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(X7,"lmdbUpsertRecords")});var ux=C((vwe,lx)=>{"use strict";var ab=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};lx.exports=ab});var fx=C((xwe,dx)=>{"use strict";var cb=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}};dx.exports=cb});var mx=C((kwe,hx)=>{"use strict";var lb=_t(),{getTransactionAuditStorePath:Z7}=gt(),Hwe=ux(),R_=kt(),eee=oe(),_x=fx(),tee=require("util").promisify,ree=tee(setTimeout),nee=1e4,see=100;hx.exports=iee;async function iee(e){let t=Z7(e.schema,e.table),r=await lb.openEnvironment(t,e.table,!0),n=lb.listDBIs(r);lb.initializeDBIs(r,R_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new _x;do s=await oee(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 ree(see);while(s.transactions_deleted>0);return i}a(iee,"deleteAuditLogsBefore");async function oee(e,t){let r=new _x;try{let n=e.dbis[R_.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[R_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];eee.isEmpty(c)||(s=e.dbis[R_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[R_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>nee)break}return await s,r}catch(n){throw n}}a(oee,"deleteTransactions")});var Ex=C((qwe,px)=>{"use strict";var ub=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};px.exports=ub});var Sx=C((Vwe,gx)=>{"use strict";var aee=zs(),cee=bu(),$we=Ex(),Li=(k(),P(q)),lee=oe(),db=_t(),uee=uo(),dee=S_(),fee=m_(),{getSchemaPath:_ee}=gt();gx.exports=hee;async function hee(e,t=!0){let r;e.schema===Li.SYSTEM_SCHEMA_NAME?r=uee[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await pee(e),s=_ee(e.schema,e.table),i=await db.openEnvironment(s,e.table);return t===!0&&await mee(e,i,r.hash_attribute),db.dropDBI(i,e.attribute),n}a(hee,"lmdbDropAttribute");async function mee(e,t,r){let n=db.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(mee,"removeAttributeFromAllObjects");async function pee(e){let t=new aee(Li.SYSTEM_SCHEMA_NAME,Li.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await dee(t)).filter(o=>o[Li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(lee.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new cee(Li.SYSTEM_SCHEMA_NAME,Li.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return fee(i)}a(pee,"dropAttributeFromSystem")});var Ox=C((Wwe,bx)=>{"use strict";var fb=_t(),Nu=kt(),Ywe=dn(),_b=(k(),P(q)),Tx=oe(),{getTransactionAuditStorePath:Eee}=gt(),gee=Au(),uE=gu(),See=X();bx.exports=Tee;async function Tee(e){let t=Eee(e.schema,e.table),r=await fb.openEnvironment(t,e.table,!0),n=fb.listDBIs(r);fb.initializeDBIs(r,Nu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case _b.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Ax(r,e.search_values);case _b.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Ree(r,e.search_values,s);case _b.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Aee(r,e.search_values);default:return Ax(r)}}a(Tee,"readAuditLog");function Ax(e,t=[0,Date.now()]){Tx.isEmpty(t[0])&&(t[0]=0),Tx.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Nu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new uE,s))}a(Ax,"searchTransactionsByTimestamp");function Aee(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[Nu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,yx(e,i))}return Object.fromEntries(r)}a(Aee,"searchTransactionsByUsername");function Ree(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=gee.equals(e,Nu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Nu.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=yx(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);Rx(l,"records",r,f,o),Rx(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(Ree,"searchTransactionsByHashValues");function Rx(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new uE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new uE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Rx,"loopRecords");function yx(e,t){let r=[];try{let n=e.dbis[Nu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new uE,i);r.push(o)}}catch(i){See.warn(i)}return r}catch(n){throw n}}a(yx,"batchSearchTransactions")});var wx=C((Jwe,Nx)=>{"use strict";var{getSchemaPath:jwe}=gt(),Qwe=_t(),{database:yee}=(xe(),P(at));Nx.exports={writeTransaction:bee};async function bee(e,t,r){return yee({database:e,table:t}).transaction(r)}a(bee,"writeTransaction")});var Dx=C((Zwe,Px)=>{"use strict";var{getSchemaPath:Ix}=gt(),Cx=_t();Px.exports={flush:Oee,resetReadTxn:Nee};async function Oee(e,t){return(await Cx.openEnvironment(Ix(e,t),t.toString())).flushed}a(Oee,"flush");async function Nee(e,t){try{(await Cx.openEnvironment(Ix(e,t),t.toString())).resetReadTxn()}catch{}}a(Nee,"resetReadTxn")});var Ux=C((tIe,vx)=>{"use strict";var{Readable:wee}=require("stream"),{getDatabases:Iee}=(xe(),P(at)),{readSync:Cee,openSync:Pee,createReadStream:Lx}=require("fs"),{open:Dee}=require("lmdb"),Mx=Kf(),Lee=Yf(),{AUDIT_STORE_OPTIONS:Mee}=(Ai(),P(xx)),{INTERNAL_DBIS_NAME:vee,AUDIT_STORE_NAME:Uee}=kt();vx.exports=Bee;var hb=32768,xee=100;async function Bee(e){let t=e.database||e.schema||"data",r=Iee()[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=Dee({noSync:!0,maxDbs:Lee.MAX_DBS}),_,h=d.openDB(vee,new Mx(!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),v=f.openDB(E,T);for(let{key:H,version:Z,value:W}of v.getRange({start:null,transaction:m,versions:v.useVersions}))_=N.put(H,W,Z),S++%xee===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("/"),v=!N,H=new Mx(!v,v);await g(E,H)}e.include_audit&&await g(Uee,{...Mee}),await _;let R=Lx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=Pee(o.path);return o.transaction(()=>{let u=Buffer.alloc(hb);Cee(c,u,0,hb),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=Lx(null,{fd:c,start:hb}),_=new wee.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(Bee,"getBackup")});var kx=C((nIe,Hx)=>{"use strict";var Hee=X(),{handleHDBError:kee}=me(),Fee=QL(),qee=xp(),Gee=Hy(),$ee=JU(),Vee=m_(),Kee=Ky(),Yee=y0(),Wee=L0(),zee=S_(),jee=F0(),Qee=J0(),Jee=rx(),Xee=sx(),Zee=cx(),ete=mx(),tte=Zy(),rte=Sx(),nte=Ox(),ste=wx(),Bx=Dx(),ite=Ux(),mb=class extends Fee{static{a(this,"LMDBBridge")}async searchByConditions(t){return jee(t)}async getDataByHash(t){return await Kee(t)}async searchByHash(t){return await Yee(t)}async getDataByValue(t,r){return await Wee(t,r)}async searchByValue(t){return await zee(t)}async createSchema(t){return await $ee(t)}async dropSchema(t){return await Qee(t)}async createTable(t,r){return await Jee(t,r)}async dropTable(t){return await tte(t)}async createAttribute(t){return await qee(t)}async createRecords(t){return await Gee(t)}async updateRecords(t){return await Xee(t)}async upsertRecords(t){try{return await Zee(t)}catch(r){throw kee(r,null,null,Hee.ERR,r)}}async deleteRecords(t){return await Vee(t)}async dropAttribute(t){return await rte(t)}async deleteAuditLogsBefore(t){return await ete(t)}async readAuditLog(t){return await nte(t)}writeTransaction(t,r,n){return ste.writeTransaction(t,r,n)}flush(t,r){return Bx.flush(t,r)}resetReadTxn(t,r){return Bx.resetReadTxn(t,r)}getBackup(t){return ite(t)}};Hx.exports=mb});var Eb={};Ue(Eb,{add:()=>dE,applyReverse:()=>Fx,getRecordAtTime:()=>pb,rebuildUpdateBefore:()=>fE});function dE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function fE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,dE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Fx(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=ote[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=qx}}function pb(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":Fx(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===qx&&(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 ote,qx,_E=Re(()=>{Ai();a(dE,"add");dE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};ote={add:dE};a(fE,"rebuildUpdateBefore");a(Fx,"applyReverse");qx={};a(pb,"getRecordAtTime")});function yn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function EE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a string, attempt to assign ${d}`);yn(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}`);yn(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 ${_}`);yn(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}`);yn(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}`);yn(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}`);yn(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}`);yn(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}`);yn(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}`);yn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof Ti||d==null&&c.nullable!==!1))throw new zn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);yn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){yn(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}`);yn(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=gb(_,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");yn(this)[c]=l}),i("deleteProperty",function(c){yn(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,$x);break}o=c}while(o&&o!==$x)}function gb(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends y_{static{a(this,"TrackedObject")}},EE(r,t)),new r(e)):new y_(e);case Array:let n=new mE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=gb(o,t?.elements)),n[s]=o}return n;default:return e}}function gE(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=gE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function wu(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=wu(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=Eb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wu(s);r[n]=s}if(!Array.isArray(e))for(let n in e)ate.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function hE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Yc]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(hE(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(hE(s))return!0}else return!0}else return!0}}return!1}var zn,Gx,$x,y_,ate,Yc,mE,pE,Sb=Re(()=>{zn=M(me());_E();En();a(yn,"getChanges");a(EE,"assignTrackedAccessors");Gx=Object.prototype,$x=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=gb(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(gb,"trackObject");y_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};EE(y_,{});a(gE,"collapseData");ate=Object.prototype.hasOwnProperty;a(wu,"updateAndFreeze");a(hE,"hasChanges");Yc=Symbol.for("has-array-changes"),mE=class extends Array{static{a(this,"TrackedArray")}#e;[Yc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Yc]=!0,super.splice(...t)}push(...t){return this[Yc]=!0,super.push(...t)}pop(){return this[Yc]=!0,super.pop()}unshift(...t){return this[Yc]=!0,super.unshift(...t)}shift(){return this[Yc]=!0,super.shift()}};mE.prototype.constructor=Array;pE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Jx={};Ue(Jx,{ResourceBridge:()=>Rb});function yb({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 Kx(e,t){let r=Mi(e),n=yb(e,r);if(!r)throw new js.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&&gE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Mi(e){let t=e.database||e.schema||lte,r=Xe()[t];if(!r)throw(0,js.handleHDBError)(new Error,cte.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Yx(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*Wx(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 zx,SE,js,jx,Tb,Ab,Qx,cte,lte,ute,dte,Vx,Rb,Xx=Re(()=>{"use strict";zx=M(kx()),SE=M(Ru()),js=M(me());xe();jx=M(Qf());k();Tb=M(po()),Ab=M(Ws()),Qx=M(oe());Ec();Sb();({HDB_ERROR_MSGS:cte}=js.hdb_errors),lte="data",ute=1e4,dte=10,Rb=class extends zx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Vx=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,SE.default)(t,"conditions");if(r)throw(0,js.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Mi(t);if(!n)throw new js.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:yb(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 js.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 Mi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Mi(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){Mi(t).dropTable()}createSchema(t){return Iu({database:t.schema,table:null}),Tb.signalSchemaChange(new Ab.SchemaEventMsg(process.pid,Wt.CREATE_SCHEMA,t.schema))}async dropSchema(t){await bb(t.schema),Tb.signalSchemaChange(new Ab.SchemaEventMsg(process.pid,Wt.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Vx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,jx.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}_&&(_=gE(_));for(let h in f)if(Object.prototype.hasOwnProperty.call(f,h)){let m=f[h];if(typeof m=="function")try{let S=m([[_]]);Array.isArray(S)&&(m=S[0].func_val,f[h]=m)}catch(S){throw S.message+="Trying to set key "+h+" on object"+JSON.stringify(f),S}}if(_)for(let h in _)Object.prototype.hasOwnProperty.call(f,h)||(f[h]=_[h]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Xe()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),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 Yx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Xe()[t.schema][t.table];if(!r.createdTimeProperty)throw new js.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:Fm.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,Qx.async_set_timeout)(dte),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%ute===0&&await u();return l.length>0&&await u(),s?Yx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,SE.default)(t,"hashes");if(r)throw r;return Kx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Kx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&AA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,SE.default)(t,"value");if(n)throw n;let s=Mi(t);if(!s)throw new js.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===Fm.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:yb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Mi(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){Mi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Mi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Mi(t),n={};switch(t.search_type){case qm.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 qm.USERNAME:let s=t.search_values;for await(let i of Wx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Wx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(yb,"getSelect");a(Kx,"getRecords");a(Mi,"getTable");a(Yx,"createDeleteResponse");a(Wx,"groupRecordsInHistory")});var Gn=C((pIe,Zx)=>{"use strict";var{ResourceBridge:fte}=(Xx(),P(Jx)),_te=ae();_te.initSync();var TE;function hte(){return TE||(TE=new fte,TE)}a(hte,"getBridge");Zx.exports=hte()});var jr=C((gIe,nB)=>{"use strict";var RE=fR(),xr=oe(),mte=require("util"),yE=Gn(),pte=ms(),eB=X(),{handleHDBError:Wc,hdb_errors:Ete}=me(),{HTTP_STATUS_CODES:zc}=Ete,gte=mte.promisify(pte.getTableSchema),Ste="updated",tB="inserted",rB="upserted";nB.exports={insert:Ate,update:Rte,upsert:yte,validation:Tte,flush:bte};async function Tte(e){if(xr.isEmpty(e))throw new Error("invalid update parameters defined.");if(xr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(xr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await gte(e.schema,e.table),r=RE(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&xr.isEmptyOrZeroLength(c[n]))throw eB.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!xr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw eB.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!xr.isEmpty(c[n])&&c[n]!==""&&s.has(xr.autoCast(c[n]))&&(c.skip=!0),s.add(xr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Tte,"validation");async function Ate(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=RE(e);if(t)throw Wc(new Error,t.message,zc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw Wc(new Error,r,zc.BAD_REQUEST);let n=await yE.createRecords(e);return AE(tB,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Ate,"insertData");async function Rte(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=RE(e);if(t)throw Wc(new Error,t.message,zc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw Wc(new Error,r,zc.BAD_REQUEST);let n=await yE.updateRecords(e);return xr.isEmpty(n.existing_rows)?AE(Ste,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):AE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Rte,"updateData");async function yte(e){if(e.operation!=="upsert")throw Wc(new Error,"invalid operation, must be upsert",zc.INTERNAL_SERVER_ERROR);let t=RE(e);if(t)throw Wc(new Error,t.message,zc.BAD_REQUEST);xr.transformReq(e);let r=xr.checkSchemaTableExist(e.schema,e.table);if(r)throw Wc(new Error,r,zc.BAD_REQUEST);let n=await yE.upsertRecords(e);return AE(rB,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(yte,"upsertData");function AE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===tB?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===rB?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(AE,"returnObject");function bte(e){return xr.transformReq(e),yE.flush(e.schema,e.table)}a(bte,"flush")});var lB=C((TIe,cB)=>{var Cu=require("validate.js"),iB=tt(),Pu=(k(),P(q)),{handleHDBError:Ote,hdb_errors:Nte}=me(),{HDB_ERROR_MSGS:Qt,HTTP_STATUS_CODES:wte}=Nte,Ob=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Ite={STRUCTURE_USER:"structure_user"},sB=Object.values(Pu.ROLE_TYPES_ENUM),Cte="attribute_permissions",Pte="attribute_name",{PERMS_CRUD_ENUM:Du}=Pu,Dte=[Cte,...Object.values(Du)],oB=[Du.READ,Du.INSERT,Du.UPDATE],Lte=[Pte,...oB];function Mte(e){let t=Ob();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,aB(e,t)}a(Mte,"addRoleValidation");function vte(e){let t=Ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,aB(e,t)}a(vte,"alterRoleValidation");function Ute(e){let t=Ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,iB.validateObject(e,t)}a(Ute,"dropRoleValidation");var xte=["operation","role","id","permission","hdb_user","access"];function aB(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)xte.includes(n[o])||s.push(n[o]);s.length>0&&sr(Qt.INVALID_ROLE_JSON_KEYS(s),r);let i=iB.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{sr(o,r)}),e.permission){let o=Bte(e);o&&sr(o,r),sB.forEach(c=>{e.permission[c]&&!Cu.isBoolean(e.permission[c])&&sr(Qt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(sB.indexOf(o)<0){if(o===Ite.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]||sr(Qt.SCHEMA_NOT_FOUND(d),r)}continue}sr(Qt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){sr(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]){sr(Qt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{Dte.includes(f)||sr(Qt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Du).forEach(f=>{Cu.isDefined(u[f])?Cu.isBoolean(u[f])||sr(Qt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):sr(Qt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){sr(Qt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){sr(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=>{!Lte.includes(S)&&S!==Du.DELETE&&sr(Qt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!Cu.isDefined(h.attribute_name)){sr(Qt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=h.attribute_name;if(!f.includes(m)){sr(Qt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}oB.forEach(S=>{Cu.isDefined(h[S])?Cu.isBoolean(h[S])||sr(Qt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):sr(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}`;sr(Qt.MISMATCHED_TABLE_ATTR_PERMS(_),r,o,l)}}}}return Hte(r)}a(aB,"customValidate");cB.exports={addRoleValidation:Mte,alterRoleValidation:vte,dropRoleValidation:Ute};function Bte(e){let{operation:t,permission:r}=e;if(t===Pu.OPERATIONS_ENUM.ADD_ROLE||t===Pu.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?Pu.ROLE_TYPES_ENUM.SUPER_USER:Pu.ROLE_TYPES_ENUM.CLUSTER_USER;return Qt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Bte,"validateNoSUPerms");function Hte(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 Ote(new Error,n,wte.BAD_REQUEST)}else return null}a(Hte,"generateRolePermResponse");function sr(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(sr,"addPermError")});var O_=C((yIe,_B)=>{"use strict";var uB=jr(),dB=Yr(),kte=_a(),wb=lB(),Ib=po(),RIe=require("uuid").v4,Fte=require("util"),bE=(k(),P(q)),qte=oe(),Cb=dB.searchByValue,Gte=dB.searchByHash,$te=Fte.promisify(kte.delete),Vte=zs(),Kte=yu(),{hdb_errors:Yte,handleHDBError:jc}=me(),{HDB_ERROR_MSGS:fB,HTTP_STATUS_CODES:b_}=Yte,{UserEventMsg:Pb}=Ws();_B.exports={addRole:Wte,alterRole:zte,dropRole:jte,listRoles:Qte};function Nb(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(Nb,"scrubRoleDetails");async function Wte(e){let t=wb.addRoleValidation(e);if(t)throw t;e=Nb(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 Cb(r)||[])}catch(i){throw jc(i)}if(n&&n.length>0)throw jc(new Error,fB.ROLE_ALREADY_EXISTS(e.role),b_.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 uB.insert(s),Ib.signalUserChange(new Pb(process.pid)),e=Nb(e),e}a(Wte,"addRole");async function zte(e){let t=wb.alterRoleValidation(e);if(t)throw t;e=Nb(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await uB.update(r)}catch(s){throw jc(s)}if(n&&n?.message==="updated 0 of 1 records")throw jc(new Error,"Invalid role id",b_.BAD_REQUEST,void 0,void 0,!0);return await Ib.signalUserChange(new Pb(process.pid)),e}a(zte,"alterRole");async function jte(e){let t=wb.dropRoleValidation(e);if(t)throw jc(new Error,t,b_.BAD_REQUEST,void 0,void 0,!0);let r=new Kte(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Gte(r));if(n.length===0)throw jc(new Error,fB.ROLE_NOT_FOUND,b_.NOT_FOUND,void 0,void 0,!0);let s=new Vte(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Cb(s)),o=!1;if(qte.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw jc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,b_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await $te(c),Ib.signalUserChange(new Pb(process.pid)),`${n[0].role} successfully deleted`}a(jte,"dropRole");async function Qte(){return Cb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Qte,"listRoles")});var Db={};Ue(Db,{start:()=>pB,startOnMainThread:()=>Zte});function pB({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,hB.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(Jte.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 Xte(i)}}}async function Xte(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,mB.isEqual)(i,e)?void 0:(e.id=r.id,(0,OE.alterRole)(e))}return(0,OE.addRole)(e)}var OE,hB,mB,Jte,Zte,EB=Re(()=>{xe();OE=M(O_()),hB=require("yaml"),mB=require("lodash"),Jte=["super_user","cluster_user","structure_user"];a(pB,"start");a(Xte,"ensureRole");Zte=pB});async function NE(e){let t=(0,TB.pathToFileURL)(e).toString();if(ere)return N_||(N_=tre(nre)),(await(await N_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function tre(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),N_=new Compartment({console,Math,Date,fetch:rre,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,SB.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Vr,tables:jn,databases:We})}};let n=await(0,gB.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),N_}function rre(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 nre(){return{Resource:Vr,tables:jn}}var gB,SB,TB,ere,N_,Lb=Re(()=>{sa();xe();gB=require("fs/promises"),SB=require("path"),TB=require("url"),ere=!1;a(NE,"secureImport");a(tre,"getCompartment");a(rre,"secureOnlyFetch");a(nre,"getGlobalVars")});var vb={};Ue(vb,{handleFile:()=>sre});async function sre(e,t,r,n){let s=new Map,i=await NE(r);c(i.default)&&n.set((0,Mb.dirname)(t),i.default),o(i,(0,Mb.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 Mb,AB=Re(()=>{Lb();Mb=require("path");a(sre,"handleFile")});var xb={};Ue(xb,{start:()=>ire});function ire({resources:e}){e.set("login",Ub),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ub,RB=Re(()=>{sa();a(ire,"start");Ub=class extends Vr{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 L_={};Ue(L_,{addAnalyticsListener:()=>D_,calculateCPUUtilization:()=>qB,diffResourceUsage:()=>GB,recordAction:()=>Dt,recordActionBinary:()=>Qn,setAnalyticsEnabled:()=>ore});function ore(e){xB=e}function are(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 cre(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},IE.set(e,o)}function Dt(e,t,r,n,s){if(!xB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=IE.get(i);o?are(e,o):cre(i,e,t,r,n,s),wE||lre()}function Qn(e,t,r,n,s){Dt(!!e,t,r,n,s)}function D_(e){kB.push(e)}function lre(){wE=performance.now(),setTimeout(async()=>{let e=performance.now()-wE;wE=0;let t=[],r={time:Date.now(),period:e,threadId:Qc.threadId,metrics:t};for(let[s,i]of IE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of FB){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 $B()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Qc.threadId,byThread:!0,...n});for(let s of kB)s(t);IE=new Map,Qc.parentPort?Qc.parentPort.postMessage({type:HB,report:r}):YB({report:r})},BB).unref()}function CE(e,t,r){let n={id:(0,C_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function qB(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 ure(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};CE(e,"table-size",l),Jc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function yB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=UB.default.statSync(s.primaryStore.env.path).size,c=ure(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};CE(e,"database-size",u),Jc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Jc.warn?.("Error getting DB size metrics",s)}}function bB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};CE(e,"storage-volume",o),Jc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){Jc.warn?.("Error getting DB volume metrics",s)}}async function dre(e,t=6e4){let r=Hb(),n=VB(),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:v}=T;for(let H of N||[]){let{path:Z,method:W,type:$,metric:ie,count:z,total:de,distribution:le,threads:ee,...Ae}=H;z||(z=1);let pe=ie+(Z?"-"+Z:"");W!==void 0&&(pe+="-"+W),$!==void 0&&(pe+="-"+$);let ye=c.get(pe);if(ye){if(ye.threads){let dt=ye.threads[v];if(dt)ye=dt;else{ye.threads[v]={...Ae};continue}}ye.count||(ye.count=1);let xt=ye.count;for(let dt in Ae){let Ln=Ae[dt];typeof Ln=="number"&&(ye[dt]=(ye[dt]*xt+Ln*z)/(xt+z))}ye.count+=z,de>=0&&(ye.total+=de,ye.ratio=ye.total/ye.count)}else ye={period:t,...H},delete ye.distribution,c.set(pe,ye),ye.byThread&&(ye.threads=[],ye.threads[v]={...Ae},u.push(ye));if(le){le=le.map(dt=>typeof dt=="number"?{value:dt,count:1}:dt);let xt=l.get(pe);xt?xt.push(...le):l.set(pe,le)}}await $B()}for(let E of u){let{path:T,method:N,type:v,metric:H,count:Z,total:W,distribution:$,threads:ie,...z}=E;ie=ie.filter(de=>de);for(let de in z){if(typeof E[de]!="number")continue;let le=0;for(let ee of ie){let Ae=ee[de];typeof Ae=="number"&&(le+=Ae)}E[de]=le}E.count=ie.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 v=N.count-1,H=[],Z=0,W=0,$;for(let dt of FB){let Ln=v*dt;for(;Z<Ln;)$=T[W++],Z+=$.count,W===1&&Z--;let cn=T[W>1?W-2:0];$||($=T[0]),H.push($.value-($.value-cn.value)*(Z-Ln)/$.count)}let[ie,z,de,le,ee,Ae,pe,ye,xt]=H;Object.assign(N,{p1:ie,p10:z,p25:de,median:le,p75:ee,p90:Ae,p95:pe,p99:ye,p999:xt})}let d;for(let[E,T]of c)T.id=(0,C_.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,C_.getNextMonotonicTime)(),T={id:E,metric:"main-thread-utilization",idle:h-OB,active:m-NB,taskQueueLatency:await s,time:_,...process.memoryUsage()};n.primaryStore.put(E,T,{append:!0}).then(N=>{N||n.primaryStore.put(E,T)})}OB=h,NB=m;let S=process.resourceUsage(),g=GB(w_,S);g.time=_,g.period=w_.time?_-w_.time:t,g.cpuUtilization=qB(w_,g.period),CE(n,"resource-usage",g),w_=g;let R=Xe();yB(n,R),yB(n,{system:R.system}),bB(n,R),bB(n,{system:R.system})}async function wB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Hb(){return IB||(IB=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function VB(){return CB||(CB=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function hre(){KB=!0;let e=(0,P_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await dre(BB,e),await wB(Hb(),fre),await wB(VB(),_re)},Math.min(e/2,2147483647)).unref()}function YB(e,t){let r=e.report;r.threadId=t?.threadId||Qc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(PB+=n.mean*n.count);r.totalBytesProcessed=PB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(DB.get(t))}),DB.set(t,t.performance.eventLoopUtilization())),r.id=(0,C_.getNextMonotonicTime)(),Hb().primaryStore.put(r.id,r),KB||hre(),mre&&(WB=Ere(r))}async function Ere(e){if(await WB,!ga){let r=(0,I_.dirname)((0,MB.getLogFilePath)());try{ga=await(0,Bb.open)((0,I_.join)(r,"analytics.log"),"r+")}catch{ga=await(0,Bb.open)((0,I_.join)(r,"analytics.log"),"w+")}}let t=(await ga.stat()).size;if(t>pre){let r=Buffer.alloc(t);await ga.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ga.write(r,{position:0}),await ga.truncate(r.length),t=r.length}await ga.write(JSON.stringify(e)+`
|