harperdb 4.5.2 → 4.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/bin/lite.js +2 -2
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/npm-shrinkwrap.json +75 -66
- package/package.json +2 -1
- package/server/jobs/jobProcess.js +2 -2
- package/server/threads/threadServer.js +2 -2
- package/studio/build-local/asset-manifest.json +34 -34
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{164.f552d832.chunk.js → 164.13a1ca36.chunk.js} +1 -1
- package/studio/build-local/static/js/{833.5847bc85.chunk.js → 833.0adf7923.chunk.js} +1 -1
- package/studio/build-local/static/js/86.5d79defb.chunk.js +2 -0
- package/studio/build-local/static/js/{browse-csvupload.97e20c4a.chunk.js → browse-csvupload.aceb2454.chunk.js} +1 -1
- package/studio/build-local/static/js/{browse-datatable.339fb83c.chunk.js → browse-datatable.170a2dc3.chunk.js} +1 -1
- package/studio/build-local/static/js/{browse-entitymanager.fd37a083.chunk.js → browse-entitymanager.bab20377.chunk.js} +1 -1
- package/studio/build-local/static/js/{browse-jsonviewer.f57cc39c.chunk.js → browse-jsonviewer.62991eaa.chunk.js} +1 -1
- package/studio/build-local/static/js/{custom-functions.f682aa33.chunk.js → custom-functions.fc08c212.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-cluster.e2dba73f.chunk.js → instance-cluster.b1cecd22.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-config.4e2c4644.chunk.js → instance-config.3b4c8bb2.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-logs.bcec2256.chunk.js → instance-logs.7ffbdb78.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-roles.1ad69c74.chunk.js → instance-roles.0496670c.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-status.4e190908.chunk.js → instance-status.e1d264ed.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-users-datatable.4a2c57e4.chunk.js → instance-users-datatable.74be158e.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-users-edit.ecf717d1.chunk.js → instance-users-edit.f6546639.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance-users.967796d9.chunk.js → instance-users.9f8c9ce8.chunk.js} +1 -1
- package/studio/build-local/static/js/{instance.809ece1e.chunk.js → instance.7f8bc10e.chunk.js} +1 -1
- package/studio/build-local/static/js/{instances.2eb16b86.chunk.js → instances.b9528378.chunk.js} +1 -1
- package/studio/build-local/static/js/{main.2384076c.js → main.055e9e0e.js} +2 -2
- package/studio/build-local/static/js/{offline-app.86377447.chunk.js → offline-app.2b3d559a.chunk.js} +1 -1
- package/studio/build-local/static/js/{online-app.e65f9ef3.chunk.js → online-app.75d38a43.chunk.js} +1 -1
- package/studio/build-local/static/js/{organization-billing.1c318ac1.chunk.js → organization-billing.eb5f253c.chunk.js} +1 -1
- package/studio/build-local/static/js/{organization-users.36a2ed5a.chunk.js → organization-users.6e22a1a5.chunk.js} +1 -1
- package/studio/build-local/static/js/{organization.9a81d022.chunk.js → organization.42c0f784.chunk.js} +1 -1
- package/studio/build-local/static/js/{organizations.af48c8e8.chunk.js → organizations.44dd3bd2.chunk.js} +1 -1
- package/studio/build-local/static/js/{profile.190afea3.chunk.js → profile.97200a91.chunk.js} +1 -1
- package/studio/build-local/static/js/{resetPassword.50fa5b91.chunk.js → resetPassword.a3406893.chunk.js} +1 -1
- package/studio/build-local/static/js/{roles-jsonviewer.b5d5a908.chunk.js → roles-jsonviewer.b6e22a22.chunk.js} +1 -1
- package/studio/build-local/static/js/{signIn.8fbf4021.chunk.js → signIn.6aa68409.chunk.js} +1 -1
- package/studio/build-local/static/js/{signUp.459d42df.chunk.js → signUp.1df9eab1.chunk.js} +1 -1
- package/studio/build-local/static/js/{structure-reloader.ceaf6675.chunk.js → structure-reloader.b808fbf1.chunk.js} +1 -1
- package/studio/build-local/static/js/{topnav.79dbd3ab.chunk.js → topnav.64ebd91d.chunk.js} +1 -1
- package/studio/build-local/static/js/{updatePassword.b05821cb.chunk.js → updatePassword.a3c0ffcf.chunk.js} +1 -1
- package/utility/scripts/restartHdb.js +2 -2
- package/studio/build-local/static/js/708.1805e937.chunk.js +0 -2
- /package/studio/build-local/static/js/{708.1805e937.chunk.js.LICENSE.txt → 86.5d79defb.chunk.js.LICENSE.txt} +0 -0
- /package/studio/build-local/static/js/{main.2384076c.js.LICENSE.txt → main.055e9e0e.js.LICENSE.txt} +0 -0
|
@@ -16,10 +16,10 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
|
|
|
16
16
|
|
|
17
17
|
`:`data: ${e}
|
|
18
18
|
|
|
19
|
-
`},"serialize"),compressible:!1,q:.8});Vr.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()}});NL={type:"application/json",serializeStream:gf,serialize:Rf,deserialize:z4,q:.5};Vr.set("*/*",NL);Vr.set("",NL);a(z4,"tryJSONParse");a(bf,"registerContentHandlers");Q4=require("fastify-plugin"),j4=Q4(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=fp(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(fp,"findBestSerializer");AL=KA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Of,"serialize");a(ra,"serializeMessage");a($A,"asyncSerialization");a(VA,"hasAsyncSerialization");a(J4,"streamToBuffer");X4=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(Z4,"isBufferEncoding");a(e3,"parseContentType");a(Ji,"getDeserializer");a(t3,"deserializerUnknownType");a(r3,"transformIterable");a(dp,"toCsvStream")});var jA={};Ue(jA,{start:()=>d3});function n3(e){if(e.kind!==Le.Kind.OPERATION_DEFINITION&&e.kind!==Le.Kind.FRAGMENT_DEFINITION)throw new yr(`Unexpected non-executable definition type ${e.kind}.`)}function IL(e){if(typeof e!="object"||e===null)throw new Ei("Request body must be an object.");if(!("query"in e))throw new Ei("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ei("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ei("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ei("Request body `operationName` field must be a string.")}function QA(e){return parseInt(e.value,10)}function PL(e){return parseFloat(e.value)}function DL(e,t,r){let n=r.get(e.name.value);return LL(n)?ML(n,t):{attribute:t,value:n}}function LL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function ML(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],LL(n)?ML(n,t):{attribute:t,value:n}))}function s3(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:QA(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:PL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return DL(e.value,t,r);case Le.Kind.OBJECT:return vL(e.value,t,r);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Value type, ${e.value.kind}, is not supported.`)}}function vL(e,t,r){return e.fields.flatMap(n=>s3(n,t,r))}function i3(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:QA(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:PL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return DL(e.value,e.name.value,t);case Le.Kind.OBJECT:return vL(e.value,[e.name.value],t);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Argument type, ${e.value.kind}, is not supported.`)}}function o3(e,t){return e.flatMap(r=>i3(r,t))}function _p(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 yr(`Fragment \`${n}\` not found.`);return _p(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return _p(r.selectionSet,t)}})}function UL(e,t){return _p(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:UL(r.selectionSet,t)}:r.name.value)}async function a3(e,t,r,n){let s=_i.getMatch(e.name.value,"graphql");if(s===void 0)throw new yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:UL(e.selectionSet,r),conditions:o3(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 xL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return QA(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]:xL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Value type, ${e.kind}, is not supported.`)}}function c3(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=xL(n.defaultValue)),n.type.kind===Le.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new yr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function l3(e,t,r,n){if(e.operation===Le.OperationTypeNode.SUBSCRIPTION)throw new yr("Subscriptions are not supported.");if(e.operation===Le.OperationTypeNode.MUTATION)throw new yr("Mutations are not supported yet.");let s=c3(e.variableDefinitions,t),i=await Promise.all(_p(e.selectionSet,r).map(c=>a3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function CL({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(n3(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 yr("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 yr(`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 yr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new yr(`Operation \`${r}\` not found.`);let l=await l3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function u3(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 IL(r),CL(r,e)}case"POST":{let r=await Ji(e.headers.get("content-type"),!0)(e._nodeRequest);return IL(r),CL(r,e)}default:throw new Ei("Method Not Allowed",405,{Allow:"GET, POST"})}}function d3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await u3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ei)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 yr)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 Ei)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 yr)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,yr,Ei,BL=be(()=>{Le=M(require("graphql"));zi();Jl();a(n3,"assertExecutableDefinitionNode");a(IL,"assertRequestParams");a(QA,"processIntValueNode");a(PL,"processFloatValueNode");a(DL,"processVariableNode");a(LL,"isObject");a(ML,"transformObjectIntoQueryCondition");a(s3,"processObjectFieldNode");a(vL,"processObjectValueNode");a(i3,"processArgumentNode");a(o3,"buildConditionsQuery");a(_p,"fillInFragments");a(UL,"buildSelectQuery");a(a3,"processFieldNode");a(xL,"processConstValueNode");a(c3,"resolveVariables");a(l3,"executeOperation");a(CL,"resolver");yr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ei=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(u3,"graphqlQueryingHandler");a(d3,"start")});var Si=C((tRe,FL)=>{"use strict";var kL=ae(),HL=(H(),P($)),eu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,gi=require("joi"),na={schema_format:{pattern:eu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},f3=gi.alternatives(gi.string().min(1).max(na.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+na.schema_format.message}),gi.number(),gi.array()).required(),_3=gi.alternatives(gi.string().min(1).max(na.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+na.schema_format.message}),gi.number()),h3=gi.alternatives(gi.string().min(1).max(na.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+na.schema_format.message}),gi.number()).required();function m3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>na.schema_length.maximum?`'${e}' maximum of 250 characters`:eu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(m3,"checkValidTable");function p3(e,t){return kL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(p3,"validateSchemaExists");function E3(e,t){let r=t.state.ancestors[0].schema;return kL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(E3,"validateTableExists");function g3(e,t){return e.toLowerCase()===HL.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${HL.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(g3,"validateSchemaName");FL.exports={common_validators:na,schema_regex:eu,hdb_schema_table:f3,validateSchemaExists:p3,validateTableExists:E3,validateSchemaName:g3,checkValidTable:m3,hdb_database:_3,hdb_table:h3}});var XA=C((nRe,qL)=>{var{hdb_table:S3,hdb_database:GL}=Si(),T3=rt(),JA=require("joi"),A3={undefined:"undefined",null:"null"},R3=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||A3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),y3=JA.object({database:GL,schema:GL,table:S3,records:JA.array().items(JA.object().custom(R3)).required()});qL.exports=function(e){return T3.validateBySchema(e,y3)}});var VL=C((iRe,$L)=>{"use strict";var ZA=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")}};$L.exports=ZA});var YL=C((aRe,KL)=>{"use strict";var eR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};KL.exports=eR});var JL={};Ue(JL,{HAS_EXPIRATION:()=>pp,HAS_RESIDENCY_ID:()=>aR,HAS_STRUCTURE_UPDATE:()=>gp,LAST_TIMESTAMP_PLACEHOLDER:()=>Pf,LOCAL_TIMESTAMP:()=>b3,METADATA:()=>Nf,NEW_TIMESTAMP_PLACEHOLDER:()=>zL,NO_TIMESTAMP:()=>tR,PENDING_LOCAL_TIME:()=>cR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>oR,RecordEncoder:()=>iR,TIMESTAMP_ASSIGN_LAST:()=>N3,TIMESTAMP_ASSIGN_NEW:()=>QL,TIMESTAMP_ASSIGN_PREVIOUS:()=>jL,TIMESTAMP_PLACEHOLDER:()=>hp,TIMESTAMP_RECORD_PREVIOUS:()=>rR,handleLocalTimeForGets:()=>Sp,recordUpdater:()=>lR,removeEntry:()=>Tc});function I3(){return Cf[0]=Cf[0]^64,O3.getFloat64(0)}function Sp(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?.[Nf];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?.[Nf]>=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[Nf];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,Sc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Sc.length;u++){let f=Sc[u].deref();(!f||f.isDone||f.isCommitted)&&Sc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function lR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?tu=i?.localTime?rR|jL:tR:tu=l?i?.localTime?rR|16384:QL|16384:tR;let _=u?.expiresAt;if(_>=0&&(c|=pp),If=c,nR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:tu>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(sR=E,If|=aR,g|=Ac),R!==E&&(g|=Rc,R||(R=0)),c&pp&&(g|=Lf),u?.originatingOperation&&(g|=Df),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&Un&&(r.getBinaryFast(i.localTime)||ta(i.value));let A;if(s!==void 0&&(A=lp(()=>e.put(n,s,m),n,e.rootStore),mc&&(g|=Un)),l){let N=u?.user?.username;if(h&&(lp(()=>e.encoder.encode(h),n,e.rootStore),mc&&(g|=Un)),e.encoder.hasStructureUpdate&&(g|=gp,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,F=r.get(v);if(F){let q=wt(F).previousLocalTime;return A=r.put(v,ru(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,wf,g,E,R,_),{ifVersion:S}),A}}A=r.put(s===void 0?zL:Pf,ru(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,wf,g,E,R,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return A}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function Tc(e,t,r){if(t)return t.value&&t.metadataFlags&Un&&!e.auditStore.getBinaryFast(t.localTime)&&ta(t.value),e.remove(t.key,r)}var WL,mp,hp,Pf,oR,zL,b3,Nf,Cf,O3,tR,QL,N3,jL,rR,pp,aR,cR,gp,w3,wf,tu,If,nR,sR,iR,Sc,nu=be(()=>{WL=require("msgpackr");Xi();mp=M(J());cs();cs();hp=new Uint8Array([1,1,1,1,4,64,0,0]),Pf=new Uint8Array([1,1,1,1,1,0,0,0]),oR=new Uint8Array([1,1,1,1,3,64,0,0]),zL=new Uint8Array([1,1,1,1,0,64,0,0]),b3=Symbol("local-timestamp"),Nf=Symbol("metadata"),Cf=new Uint8Array(8),O3=new DataView(Cf.buffer,0,8),tR=0,QL=0,N3=1,jL=3,rR=4,pp=16,aR=32,cR=1,gp=256,tu=0,If=-1,nR=-1,sR=0,iR=class extends WL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(tu||If>=0){let o=0,c=tu;c&&(o+=8,tu=0);let l=If,u=nR,f=sR;l>=0&&(o+=4,If=-1,u>=0&&(o+=8,nR=-1),f&&(o+=4,sR=0));let d=w3=r.call(this,s,i|2048|o);wf=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(hp[4]=c,hp[5]=c>>8,d.set(hp,h),h+=8),mc&&(l|=Un),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Ep<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return wf=r.call(this,s,i),wf};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(Cf,0,c),c+=8;else for(let h=0;h<8;h++)Cf[h]=t[c++];l=I3(),i=t[c]}let u,f;i<32&&(i===Ep?(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&pp&&(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=pc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[Nf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:pc(()=>super.decode(t,r),this.rootStore)}catch(c){return mp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(I3,"getTimestamp");a(Sp,"handleLocalTimeForGets");Sc=[];setInterval(()=>{for(let e=0;e<Sc.length;e++){let t=Sc[e].deref();!t||t.isDone||t.isCommitted?Sc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(mp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):mp.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(lR,"recordUpdater");a(Tc,"removeEntry")});var Mf=C((_Re,ZL)=>{"use strict";var XL=ce(),C3=(H(),P($)),{RecordEncoder:P3}=(nu(),P(JL));XL.initSync();var D3=XL.get(C3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,uR=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=D3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:P3})}};ZL.exports=uR});var vf=C((mRe,eM)=>{"use strict";var xn=ce(),ls=(H(),P($));xn.initSync();var Tp=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=xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=xn.get(ls.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};eM.exports=Tp;Tp.MAX_DBS=1e4});var dt=C((ERe,uM)=>{"use strict";var fR=require("lmdb"),Bs=require("fs-extra"),Bn=require("path"),Ap=un(),nM=J(),mn=Cn().LMDB_ERRORS_ENUM,Rp=YL(),_R=Mf(),sM=vf(),sa=Ut(),tM=(H(),P($)),{table:L3,resetDatabases:M3}=(ve(),P(it)),rM=ce(),Hs=sa.INTERNAL_DBIS_NAME,iM=sa.DBI_DEFINITION_NAME,v3="data.mdb",U3="lock.mdb",Uf=".mdb",x3="-lock",dR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[sa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[sa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new fR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function yp(e,t){if(e===void 0)throw new Error(mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(mn.ENV_NAME_REQUIRED)}a(yp,"pathEnvNameValidation");async function hR(e,t,r=!0){try{await Bs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(mn.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+Uf);return await Bs.access(n,Bs.constants.R_OK|Bs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Bs.access(Bn.join(e,t,v3),Bs.constants.R_OK|Bs.constants.F_OK),Bn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(mn.INVALID_ENVIRONMENT)}else throw new Error(mn.INVALID_ENVIRONMENT);throw n}}a(hR,"validateEnvironmentPath");function bp(e,t){if(Ap.validateEnv(e),t===void 0)throw new Error(mn.DBI_NAME_REQUIRED)}a(bp,"validateEnvDBIName");async function B3(e,t,r=!1,n=!1){yp(e,t);let s=Bn.basename(e);t=t.toString();let i=rM.get(tM.CONFIG_PARAMS.DATABASES);i||rM.setProperty(tM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await hR(e,t,n),oM(e,t,r)}catch(o){if(o.message===mn.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Bs.mkdirp(n?c:e);let l=new sM(n?c:c+Uf,!1),u=fR.open(l);u.dbis=Object.create(null);let f=new _R(!1);u.openDB(Hs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=mR(e,t,r);return u[sa.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(B3,"createEnvironment");async function H3(e,t,r,n=!0){yp(e,t),t=t.toString();let s=Bn.join(e,t);return L3({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(H3,"copyEnvironment");async function oM(e,t,r=!1){yp(e,t),t=t.toString();let n=mR(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await hR(e,t),i=Bn.join(e,t+Uf),o=s!=i,c=new sM(s,o),l=fR.open(c);l.dbis=Object.create(null);let u=cM(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[sa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(oM,"openEnvironment");async function k3(e,t,r=!1){yp(e,t),t=t.toString();let n=Bn.join(e,t+Uf),s=await hR(e,t);if(global.lmdb_map!==void 0){let i=mR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await aM(o),delete global.lmdb_map[i]}}await Bs.remove(s),await Bs.remove(s===n?s+x3:Bn.join(Bn.dirname(s),U3))}a(k3,"deleteEnvironment");async function aM(e){Ap.validateEnv(e);let t=e[sa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(aM,"closeEnvironment");function mR(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(mR,"getCachedEnvironmentName");function F3(e){Ap.validateEnv(e);let t=Object.create(null),r=us(e,Hs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Hs)try{t[n]=Object.assign(new Rp,s)}catch{nM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F3,"listDBIDefinitions");function cM(e){Ap.validateEnv(e);let t=[],r=us(e,Hs);for(let{key:n}of r.getRange({start:!1}))n!==Hs&&t.push(n);return t}a(cM,"listDBIs");function G3(e,t){let n=us(e,Hs).getEntry(t),s=new Rp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{nM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(G3,"getDBIDefinition");function lM(e,t,r,n=!r){if(bp(e,t),t=t.toString(),t===Hs)throw new Error(mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return us(e,t)}catch(s){if(s.message===mn.DBI_DOES_NOT_EXIST){let i=new _R(r,n===!0),o=e.openDB(t,i),c=new Rp(r===!0,n);return o[iM]=c,us(e,Hs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(lM,"createDBI");function us(e,t){if(bp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hs?r=G3(e,t):r=new Rp,r===void 0)throw new Error(mn.DBI_DOES_NOT_EXIST);let n;try{let s=new _R(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(mn.DBI_DOES_NOT_EXIST):s}return n[iM]=r,e.dbis[t]=n,n}a(us,"openDBI");function q3(e,t){bp(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[sa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(q3,"statDBI");async function $3(e,t){try{let r=Bn.join(e,t+Uf);return(await Bs.stat(r)).size}catch{throw new Error(mn.INVALID_ENVIRONMENT)}}a($3,"environmentDataSize");function V3(e,t){if(bp(e,t),t=t.toString(),t===Hs)throw new Error(mn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,Hs).removeSync(t)}a(V3,"dropDBI");function K3(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{us(e,i)}catch(o){if(o.message===mn.DBI_DOES_NOT_EXIST)lM(e,i,i!==t,i===t),n=!0;else throw o}}n&&M3()}a(K3,"initializeDBIs");uM.exports={openDBI:us,openEnvironment:oM,createEnvironment:B3,listDBIs:cM,listDBIDefinitions:F3,createDBI:lM,dropDBI:V3,statDBI:q3,deleteEnvironment:k3,initializeDBIs:K3,TransactionCursor:dR,environmentDataSize:$3,copyEnvironment:H3,closeEnvironment:aM}});var fM=C((SRe,dM)=>{"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}};dM.exports=pR});var hM=C((ARe,_M)=>{"use strict";var ER=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}};_M.exports=ER});var pM=C((yRe,mM)=>{"use strict";var gR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};mM.exports=gR});var bc=C((IRe,SM)=>{"use strict";var Y3=dt(),W3=fM(),z3=hM(),Q3=pM(),Ti=un(),xf=Cn().LMDB_ERRORS_ENUM,j3=Ut(),Zi=(H(),P($)),J3=ae(),X3=require("uuid"),ORe=require("lmdb"),{handleHDBError:Z3,hdb_errors:eX}=he(),{OVERFLOW_MARKER:NRe,MAX_SEARCH_KEY_LENGTH:wRe}=j3,EM=ce();EM.initSync();var Op=EM.get(Zi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),SR=Zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,yc=Zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tX(e,t,r,n,s=Ti.getNextMonotonicTime()){yR(e,t,r,n),TR(e,t,r);let i=new W3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];gM(u,!0,s);let f=rX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return AR(o,c,n,i,s)}a(tX,"insertRecords");function rX(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][Zi.FUNC_VAL],n[o]=c)}let l=Ti.getIndexedValues(c),u=e.dbis[o];if(l){Op&&u.prefetch(l.map(f=>({key:f,value:s})),Np);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Op&&e.dbis[t].prefetch([s],Np),e.dbis[t].put(s,n,n[yc])})}a(rX,"insertRecord");function nX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(nX,"removeSkippedRecords");function gM(e,t,r){let n=r>0;(n||!Number.isInteger(e[yc]))&&(e[yc]=r||(r=Ti.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[SR]))&&(e[SR]=r||Ti.getNextMonotonicTime()):delete e[SR]}a(gM,"setTimestamps");function TR(e,t,r){r.indexOf(Zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Y3.initializeDBIs(e,t,r)}a(TR,"initializeTransaction");async function sX(e,t,r,n,s=Ti.getNextMonotonicTime()){yR(e,t,r,n),TR(e,t,r);let i=new z3,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=RR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return AR(c,l,n,i,s,o)}a(sX,"updateRecords");async function iX(e,t,r,n,s=Ti.getNextMonotonicTime()){try{yR(e,t,r,n)}catch(l){throw Z3(l,l.message,eX.HTTP_STATUS_CODES.BAD_REQUEST)}TR(e,t,r);let i=new Q3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;J3.isEmpty(u[t])?(f=X3.v4(),u[t]=f):f=u[t];let d=RR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return AR(o,c,n,i,s)}a(iX,"upsertRecords");async function AR(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||Ti.getNextMonotonicTime(),nX(r,i),n}a(AR,"finalizeWrite");function RR(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(gM(r,!f,o),Number.isInteger(r[yc])&&u[yc]>r[yc])return!1;f&&s.original_records.push(u);let d,h=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 A=S([[u]]);Array.isArray(A)&&(S=A[0][Zi.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ti.getIndexedValues(R);if(E){Op&&g.prefetch(E.map(A=>({key:A,value:n})),Np);for(let A=0,N=E.length;A<N;A++)g.remove(E[A],n)}if(E=Ti.getIndexedValues(S),E){Op&&g.prefetch(E.map(A=>({key:A,value:n})),Np);for(let A=0,N=E.length;A<N;A++)g.put(E[A],n)}}let _={...u,...r};c.put(n,_,_[yc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:RR(e,t,r,n,s,i,o))}a(RR,"updateUpsertRecord");function oX(e,t,r){if(Ti.validateEnv(e),t===void 0)throw new Error(xf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xf.WRITE_ATTRIBUTES_REQUIRED):new Error(xf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oX,"validateBasic");function yR(e,t,r,n){if(oX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(xf.RECORDS_REQUIRED):new Error(xf.RECORDS_MUST_BE_ARRAY)}a(yR,"validateWrite");function Np(){}a(Np,"noop");SM.exports={insertRecords:tX,updateRecords:sX,upsertRecords:iX}});var eo=C((PRe,aX)=>{aX.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 AM=C((DRe,TM)=>{"use strict";var cX=require("uuid"),bR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||cX.v4(),this.schema_table=`${this.schema}.${this.table}`}};TM.exports=bR});var wp=C((MRe,RM)=>{"use strict";var lX=AM(),OR=class extends lX{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};RM.exports=OR});var bM=C((URe,yM)=>{"use strict";yM.exports=dX;var uX="inserted";function dX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===uX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(dX,"returnObject")});var Ip=C((HRe,NM)=>{"use strict";var fX=(H(),P($)),NR=dt(),_X=bc(),{getSystemSchemaPath:hX,getSchemaPath:mX}=Et(),BRe=eo(),{validateBySchema:pX}=rt(),Bf=require("joi"),EX=wp(),gX=bM(),{handleHDBError:SX,hdb_errors:TX,ClientError:AX}=he(),OM=ae(),{HTTP_STATUS_CODES:RX}=TX,yX="inserted";NM.exports=bX;async function bX(e){let t=pX(e,Bf.object({database:Bf.string(),schema:Bf.string(),table:Bf.string().required(),attribute:Bf.string().required()}));if(t)throw new AX(t.message);let r=!e.skip_table_check&&OM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw SX(new Error,r,RX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=OM.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 EX(e.schema,e.table,e.attribute,e.id);try{let i=await NR.openEnvironment(mX(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}`);NR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await NR.openEnvironment(hX(),fX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await _X.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return gX(yX,c,{records:[s]},l)}catch(i){throw i}}a(bX,"lmdbCreateAttribute")});var Hf=C((GRe,IM)=>{"use strict";var to=ae(),wM=J(),FRe=XA(),{getDatabases:OX}=(ve(),P(it)),{ClientError:Oc}=he();IM.exports=NX;function NX(e){if(to.isEmpty(e))throw new Oc("invalid update parameters defined.");if(to.isEmptyOrZeroLength(e.schema))throw new Oc("invalid schema specified.");if(to.isEmptyOrZeroLength(e.table))throw new Oc("invalid table specified.");if(!Array.isArray(e.records))throw new Oc("records must be an array");let t=OX()[e.schema]?.[e.table];if(to.isEmpty(t))throw new Oc(`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&&to.isEmptyOrZeroLength(o[r]))throw wM.error("a valid hash attribute must be provided with update record:",o),new Oc("a valid hash attribute must be provided with update record, check log for more info");if(!to.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw wM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Oc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!to.isEmpty(o[r])&&o[r]!==""&&n.has(to.autoCast(o[r]))&&(o.skip=!0),n.add(to.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(NX,"insertUpdateValidate")});var PM=C(($Re,CM)=>{"use strict";var wR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};CM.exports=wR});var MM=C((KRe,LM)=>{"use strict";var IR=dt(),wX=J(),DM=Cn().LMDB_ERRORS_ENUM;LM.exports=IX;async function IX(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 IR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==DM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await IR.closeEnvironment(global.lmdb_map[n]),await IR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==DM.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){wX.error(t)}}a(IX,"cleanLMDBMap")});var YM=C((zRe,KM)=>{"use strict";var CR=require("recursive-iterator"),CX=require("alasql"),PR=require("clone"),vM=ae(),{handleHDBError:UM,hdb_errors:PX}=he(),{HDB_ERROR_MSGS:xM,HTTP_STATUS_CODES:BM}=PX,{getDatabases:DX}=(ve(),P(it)),LX=["DISTINCT_ARRAY"],HM=Symbol("validateTables"),DR=Symbol("validateTable"),WRe=Symbol("getAllColumns"),kM=Symbol("validateAllColumns"),Cp=Symbol("findColumn"),FM=Symbol("validateOrderBy"),kf=Symbol("validateSegment"),LR=Symbol("validateColumn"),GM=Symbol("setColumnsForTable"),qM=Symbol("checkColumnsForAsterisk"),$M=Symbol("validateGroupBy"),VM=Symbol("hasColumns"),MR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[HM](),this[qM](),this[kM]()}[HM](){if(this[VM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[DR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[DR](t.table)})}}[VM](){let t=!1,r=new CR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[DR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=DX();if(!r[t.databaseid])throw UM(new Error,xM.SCHEMA_NOT_FOUND(t.databaseid),BM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw UM(new Error,xM.TABLE_NOT_FOUND(t.databaseid,t.tableid),BM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=PR(s);i.table=PR(t),this.attributes.push(i)})}[Cp](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)}[qM](){let t=new CR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[GM](r.tableid)}[GM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new CX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kM](){this[kf](this.statement.columns,!1),this[kf](this.statement.joins,!1),this[kf](this.statement.where,!1),this[$M](this.statement.group,!1),this[kf](this.statement.order,!0)}[kf](t,r){if(!t)return;let n=new CR(t),s=[];for(let{node:i,path:o}of n)!vM.isEmpty(i)&&!vM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[FM](i):s.push(this[LR](i)));return s}[$M](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&LX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=PR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Cp](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[Cp](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`}[FM](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[LR](t)}[LR](t){let r=this[Cp](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]}};KM.exports=MR});var jM=C((jRe,QM)=>{"use strict";var WM=require("lodash"),Ff=require("mathjs"),MX=require("jsonata"),zM=ae();QM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?WM.uniqWith(e,WM.isEqual):e,"distinct_array"),searchJSON:vX,mad:Gf.bind(null,Ff.mad),mean:Gf.bind(null,Ff.mean),mode:Gf.bind(null,Ff.mode),prod:Gf.bind(null,Ff.prod),median:Gf.bind(null,Ff.median)};function Gf(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(Gf,"aggregateFunction");function vX(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(zM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),zM.isEmpty(this.__ala__.res[r])){let n=MX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(vX,"searchJSON")});var XM=C((XRe,JM)=>{"use strict";var er=require("moment"),vR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;JM.exports={current_date:a(()=>er().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>er().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return er(e).utc().format("YYYY");case"month":return er(e).utc().format("MM");case"day":return er(e).utc().format("DD");case"hour":return er(e).utc().format("HH");case"minute":return er(e).utc().format("mm");case"second":return er(e).utc().format("ss");case"millisecond":return er(e).utc().format("SSS");default:break}},"extract"),date:a(e=>er(e).utc().format(vR),"date"),date_format:a((e,t)=>er(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>er(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>er(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=er(e).utc(),s=er(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>er().utc().valueOf(),"now"),get_server_time:a(()=>er().format(vR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(vR),"offset_utc")}});var rv=C((eye,tv)=>{"use strict";var UX=require("@turf/area"),xX=require("@turf/length"),BX=require("@turf/circle"),HX=require("@turf/difference"),kX=require("@turf/distance"),FX=require("@turf/boolean-contains"),GX=require("@turf/boolean-equal"),qX=require("@turf/boolean-disjoint"),$X=require("@turf/helpers"),ZM=(H(),P($)),qe=ae(),ro=J();tv.exports={geoArea:VX,geoLength:KX,geoCircle:YX,geoDifference:WX,geoDistance:ev,geoNear:zX,geoContains:QX,geoEqual:jX,geoCrosses:JX,geoConvert:XX};function VX(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return UX.default(e)}catch(t){return ro.trace(t,e),NaN}}a(VX,"geoArea");function KX(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return xX.default(e,{units:t||"kilometers"})}catch(r){return ro.trace(r,e),NaN}}a(KX,"geoLength");function YX(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return BX.default(e,t,{units:r||"kilometers"})}catch(n){return ro.trace(n,e,t),NaN}}a(YX,"geoCircle");function WX(e,t){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return HX(e,t)}catch(r){return ro.trace(r,e,t),NaN}}a(WX,"geoDifference");function ev(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return kX.default(e,t,{units:r||"kilometers"})}catch(n){return ro.trace(n,e,t),NaN}}a(ev,"geoDistance");function zX(e,t,r,n){if(qe.isEmpty(e)||qe.isEmpty(t))return!1;if(qe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ev(e,t,n)<=r}catch(s){return ro.trace(s,e,t),!1}}a(zX,"geoNear");function QX(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return FX.default(e,t)}catch(r){return ro.trace(r,e,t),!1}}a(QX,"geoContains");function jX(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return GX.default(e,t)}catch(r){return ro.trace(r,e,t),!1}}a(jX,"geoEqual");function JX(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return!qX.default(e,t)}catch(r){return ro.trace(r,e,t),!1}}a(JX,"geoCrosses");function XX(e,t,r){if(qe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(qe.isEmpty(t))throw new Error("geo_type is required");if(qe.isEmpty(ZM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(ZM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),$X[t](e,r)}a(XX,"geoConvert")});var Pp=C((rye,nv)=>{var Nc=jM(),Hn=XM(),Ai=rv();nv.exports=e=>{e.aggr.mad=e.aggr.MAD=Nc.mad,e.aggr.mean=e.aggr.MEAN=Nc.mean,e.aggr.mode=e.aggr.MODE=Nc.mode,e.aggr.prod=e.aggr.PROD=Nc.prod,e.aggr.median=e.aggr.MEDIAN=Nc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Nc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Nc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hn.current_time,e.fn.extract=e.fn.EXTRACT=Hn.extract,e.fn.date=e.fn.DATE=Hn.date,e.fn.date_format=e.fn.DATE_FORMAT=Hn.date_format,e.fn.date_add=e.fn.DATE_ADD=Hn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hn.date_diff,e.fn.now=e.fn.NOW=Hn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hn.get_server_time,e.fn.getdate=e.fn.GETDATE=Hn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ai.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ai.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ai.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ai.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ai.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ai.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ai.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ai.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ai.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ai.geoNear}});var av=C((nye,ov)=>{"use strict";var qf=require("lodash"),pn=require("alasql");pn.options.cache=!1;var ZX=Pp(),sv=require("clone"),Dp=require("recursive-iterator"),Be=J(),ze=ae(),su=kn(),e6=(H(),P($)),{hdb_errors:t6}=he(),{getDatabases:iv}=(ve(),P(it)),r6="IS NULL",ks="There was a problem performing this search. Please check the logs and try again.";ZX(pn);var UR=class{static{a(this,"SQLSearch")}constructor(t,r){if(ze.isEmpty(t))throw Be.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(),ze.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!ze.isEmptyOrZeroLength(n))return Be.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Be.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Be.error(n),new Error(ks)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Be.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Be.error(n),new Error(ks)}if(Object.keys(this.data).length===0)return Be.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Be.error("Error thrown from processJoins in SQLSearch class method search."),Be.error(n),new Error(ks)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Be.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Be.error(n),new Error(ks)}try{return t=await this._finalSQL(),t}catch(n){throw Be.error("Error thrown from finalSQL in SQLSearch class method search."),Be.error(n),new Error(ks)}}_getColumns(){let t=new Dp(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(sv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=qf.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=iv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ze.isEmpty(this.statement.where)){Be.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Dp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ze.isEmpty(r)&&r.right)if(ze.isNotEmptyAndHasValue(r.right.value)){let n=ze.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=ze.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pn.yy.LogicValue({value:i}):n instanceof pn.yy.StringValue&&ze.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pn.yy.NumValue({value:i}))});if(t){Be.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Dp(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(!ze.isEmpty(e6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ze.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ze.isEmptyOrZeroLength(r.left.columnid)||ze.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(ze.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"=":!ze.isEmpty(r.right.value)||!ze.isEmpty(r.left.value)?n.add(ze.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(ze.isEmptyOrZeroLength(this.all_table_attributes)&&ze.isEmptyOrZeroLength(this.statement.from)&&ze.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&&qf.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(ze.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);ze.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(ze.isEmptyOrZeroLength(this.all_table_attributes)&&!ze.isEmptyOrZeroLength(this.columns.columns))return t;if(ze.isEmptyOrZeroLength(this.all_table_attributes)&&ze.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pn.promise(r)}catch(r){throw Be.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Be.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(sv(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(ze.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(r6)>-1&&this.tables.forEach(s=>{let i={columnid:iv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=qf.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),!ze.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!ze.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await su.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw Be.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Be.error(f),new Error(ks)}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 h=await su.getDataByValue(d);for(let[_,m]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw Be.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Be.error(f),new Error(ks)}else if(!ze.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!ze.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let m=await su.getDataByValue(c,_.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 Be.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Be.error(f),new Error(ks)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await su.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw Be.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Be.error(f),new Error(ks)}}}_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 pn.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 pn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pn.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 pn.yy.FuncValue:new pn.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(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let m=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(m+=" ON "+_.on.toString()),i.push(m),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let m=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${m}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${m}\` AS "${S}.${m}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.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(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.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 h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(_,s);h=await pn.promise(m,t),t=null}catch(_){throw Be.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Be.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,m=h.length;_<m;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let m=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=qf.difference(m,[..._.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Dp(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=qf.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 Be.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Be.error(i),new Error(ks)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await su.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let m=0;m<u;m++){let S=s.columns[m],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw Be.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Be.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();Be.trace(`Final SQL: ${s}`),n=await pn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Be.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Be.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Be.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 Be.error(t6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Be.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await su.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Be.error("There was an error when processing this SQL operation. Check your logs"),Be.error(o),new Error(ks)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ov.exports=UR});var Kr=C((iye,cv)=>{"use strict";var n6=YM();cv.exports={searchByConditions:i6,searchByHash:o6,searchByValue:a6,search:c6};var xR=kn(),{transformReq:BR}=ae(),s6=av();async function i6(e){return BR(e),xR.searchByConditions(e)}a(i6,"searchByConditions");async function o6(e){BR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of xR.searchByHash(e))r&&t.push(r);return t}a(o6,"searchByHash");async function a6(e){BR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of xR.searchByValue(e))t.push(r);return t}a(a6,"searchByValue");function c6(e,t){try{let r=new n6(e);r.validate(),new s6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(c6,"search")});var no=C((aye,fv)=>{"use strict";var $f=require("crypto"),l6=ce(),{CONFIG_PARAMS:u6}=(H(),P($)),uv="aes-256-cbc",d6=32,f6=16,HR=64,dv=32,_6=HR+dv,lv=new Map;fv.exports={encrypt:h6,decrypt:m6,createNatsTableStreamName:p6};function h6(e){let t=$f.randomBytes(d6),r=$f.randomBytes(f6),n=$f.createCipheriv(uv,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(h6,"encrypt");function m6(e){let t=e.substr(0,HR),r=e.substr(HR,dv),n=e.substr(_6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=$f.createDecipheriv(uv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(m6,"decrypt");function p6(e,t){let r=l6.get(u6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=lv.get(r);return n||(n=$f.createHash("md5").update(r).digest("hex"),lv.set(r,n)),n}a(p6,"createNatsTableStreamName")});var so=C((uye,pv)=>{"use strict";var lye=Kr(),Vf=J(),{validateBySchema:_v}=rt(),wc=require("joi"),E6=no(),Lp=ae(),{handleHDBError:Mp,hdb_errors:g6,ClientError:hv}=he(),{HDB_ERROR_MSGS:vp,HTTP_STATUS_CODES:kR}=g6,mv=ce();mv.initSync();var{getDatabases:FR}=(ve(),P(it)),S6=require("fs-extra"),T6=(H(),P($));pv.exports={describeAll:A6,describeTable:Up,describeSchema:R6};async function A6(e={}){try{let t=Lp.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=FR(),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 h=i[d];for(let _ in h)try{let m;if(t||s||r)m=await Up({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;m=await Up({schema:d,table:_,exact_count:u},S)}m&&l.push(m)}catch(m){Vf.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 Vf.error("Got an error in describeAll"),Vf.error(t),Mp(new Error,vp.DESCRIBE_ALL_ERR)}}a(A6,"describeAll");async function Up(e,t){Lp.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=_v(e,wc.object({database:wc.string(),table:wc.string().required(),exact_count:wc.boolean().strict()}));if(i)throw new hv(i.message);let c=FR()[r];if(!c)throw Mp(new Error,vp.SCHEMA_NOT_FOUND(e.schema),kR.NOT_FOUND);let l=c[n];if(!l)throw Mp(new Error,vp.TABLE_NOT_FOUND(e.schema,e.table),kR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(m=>({type:m.type,name:m.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(m=>{m.describe&&(_[m.attribute_name]=!0)}),l.attributes.forEach(m=>{_[m.name]&&u(m)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await S6.stat(l.primaryStore.env.path)).size}catch(_){Vf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),mv.get(T6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=E6.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:!!e.exact_count});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Vf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Up,"descTable");async function R6(e){Lp.transformReq(e);let t=_v(e,wc.object({database:wc.string(),exact_count:wc.boolean().strict()}));if(t)throw new hv(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=FR()[n];if(!i)throw Mp(new Error,vp.SCHEMA_NOT_FOUND(e.schema),kR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Lp.isEmpty(l)||l.describe){let u=await Up({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(R6,"describeSchema")});var Fs=C((hye,Av)=>{var y6=eo(),{callbackify:gv,promisify:b6}=require("util"),{getDatabases:Sv}=(ve(),P(it));Av.exports={setSchemaDataToGlobal:Ev,getTableSchema:O6,getSystemSchema:N6,setSchemaDataToGlobalAsync:b6(Ev)};var Tv=so(),fye=gv(Tv.describeAll),_ye=gv(Tv.describeTable);function Ev(e){global.hdb_schema=Sv(),e&&e()}a(Ev,"setSchemaDataToGlobal");function O6(e,t,r){let n=Sv()[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(O6,"getTableSchema");function N6(){return y6}a(N6,"getSystemSchema")});var qR=C((pye,bv)=>{var w6=rt(),GR=require("joi"),{hdb_table:I6,hdb_database:Rv}=Si(),yv={schema:Rv,database:Rv,table:I6},C6={date:GR.date().iso().required()},P6={timestamp:GR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};bv.exports=function(e,t){let r=t==="timestamp"?{...yv,...P6}:{...yv,...C6},n=GR.object(r);return w6.validateBySchema(e,n)}});var wv=C((Eye,Nv)=>{var D6=rt(),$R=require("joi"),{hdb_table:L6,hdb_database:Ov}=Si(),M6=$R.object({schema:Ov,database:Ov,table:L6,hash_values:$R.array().required(),ids:$R.array()});Nv.exports=function(e){return D6.validateBySchema(e,M6)}});var WR=C((gye,Iv)=>{"use strict";var VR=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}},KR=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}},YR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Iv.exports={InsertObject:VR,NoSQLSeachObject:KR,DeleteResponseObject:YR}});var Pc=C((Tye,Mv)=>{"use strict";var Pv=qR(),v6=wv(),Ic=ae(),Cv=require("moment"),Dv=J(),{promisify:U6,callbackify:x6}=require("util"),Cc=(H(),P($)),B6=Fs(),zR=U6(B6.getTableSchema),QR=kn(),{DeleteResponseObject:H6}=WR(),{handleHDBError:ia,hdb_errors:k6}=he(),{HDB_ERROR_MSGS:xp,HTTP_STATUS_CODES:oa}=k6,F6="records successfully deleted",G6=x6(Lv);Mv.exports={delete:G6,deleteRecord:Lv,deleteFilesBefore:q6,deleteAuditLogsBefore:$6};async function q6(e){let t=Pv(e,"date");if(t)throw ia(t,t.message,oa.BAD_REQUEST,void 0,void 0,!0);if(Ic.transformReq(e),!Cv(e.date,Cv.ISO_8601).isValid())throw ia(new Error,xp.INVALID_DATE,oa.BAD_REQUEST,Cc.LOG_LEVELS.ERROR,xp.INVALID_DATE,!0);let n=Ic.checkSchemaTableExist(e.schema,e.table);if(n)throw ia(new Error,n,oa.NOT_FOUND,Cc.LOG_LEVELS.ERROR,n,!0);let s=await QR.deleteRecordsBefore(e);if(await zR(e.schema,e.table),Dv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(q6,"deleteFilesBefore");async function $6(e){let t=Pv(e,"timestamp");if(t)throw ia(t,t.message,oa.BAD_REQUEST,void 0,void 0,!0);if(Ic.transformReq(e),isNaN(e.timestamp))throw ia(new Error,xp.INVALID_VALUE("Timestamp"),oa.BAD_REQUEST,Cc.LOG_LEVELS.ERROR,xp.INVALID_VALUE("Timestamp"),!0);let r=Ic.checkSchemaTableExist(e.schema,e.table);if(r)throw ia(new Error,r,oa.NOT_FOUND,Cc.LOG_LEVELS.ERROR,r,!0);let n=await QR.deleteAuditLogsBefore(e);return await zR(e.schema,e.table),Dv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a($6,"deleteAuditLogsBefore");async function Lv(e){e.ids&&(e.hash_values=e.ids);let t=v6(e);if(t)throw ia(t,t.message,oa.BAD_REQUEST,void 0,void 0,!0);Ic.transformReq(e);let r=Ic.checkSchemaTableExist(e.schema,e.table);if(r)throw ia(new Error,r,oa.NOT_FOUND,Cc.LOG_LEVELS.ERROR,r,!0);try{await zR(e.schema,e.table);let n=await QR.deleteRecords(e);return Ic.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${F6}`),n}catch(n){if(n.message===Cc.SEARCH_NOT_FOUND_MESSAGE){let s=new H6;return s.message=Cc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Lv,"deleteRecord")});var Bp={};Ue(Bp,{HASH_FUNCTION:()=>Wf,hash:()=>XR,validate:()=>ZR});function jR(e=Yf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Kf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function XR(e,t=Wf[Uv?.toUpperCase()]??"sha256"){return JR[t](e)}function ZR(e,t,r=Wf[Uv?.toUpperCase()]??"sha256"){return e?V6[r](e,t):!1}var Kf,iu,vv,Uv,Yf,xv,Wf,JR,V6,Hp=be(()=>{Kf=M(require("node:crypto")),iu=M(require("argon2")),vv=M(ce());H();Uv=(0,vv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Yf=16,xv=9,Wf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(Wf||{});a(jR,"generateSalt");JR={md5:a((e,t=void 0)=>{t=t??jR(xv);let r=Kf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??jR(Yf);let r=Kf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=jR(Yf),r=await iu.hash(e,{type:iu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},V6={md5:a((e,t)=>{let r=e.slice(0,xv);return e===JR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Yf);return e===JR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await iu.verify(e.slice(Yf),t),"argon2id")};a(XR,"hash");a(ZR,"validate")});var Hv=C((bye,Bv)=>{var ey=rt(),Yr={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 K6(e){return Yr.password.presence=!0,Yr.username.presence=!0,Yr.role.presence=!0,Yr.active.presence=!0,ey.validateObject(e,Yr)}a(K6,"addUserValidation");function Y6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ey.validateObject(e,Yr)}a(Y6,"alterUserValidation");function W6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ey.validateObject(e,Yr)}a(W6,"dropUserValidation");Bv.exports={addUserValidation:K6,alterUserValidation:Y6,dropUserValidation:W6}});var It=C((wye,Fv)=>{"use strict";var{platform:Nye}=require("os"),z6="nats-server.zip",ty="nats-server",Q6=process.platform==="win32"?`${ty}.exe`:ty,j6=/^[^\s.,*>]+$/,kv="__request__",J6=a(e=>`${e}.${kv}`,"REQUEST_SUBJECT"),X6={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Z6={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eZ={HUB:"hub.pid",LEAF:"leaf.pid"},tZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rZ={SUCCESS:"success",ERROR:"error"},nZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sZ={TXN:"txn",MSGID:"msgid"},ou={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iZ={[ou.ERR]:1,[ou.WRN]:2,[ou.INF]:3,[ou.DBG]:4,[ou.TRC]:5},oZ={debug:"-D",trace:"-DVV"};Fv.exports={NATS_SERVER_ZIP:z6,NATS_SERVER_NAME:ty,NATS_BINARY_NAME:Q6,PID_FILES:eZ,NATS_CONFIG_FILES:Z6,SERVER_SUFFIX:tZ,NATS_TERM_CONSTRAINTS_RX:j6,REQUEST_SUFFIX:kv,UPDATE_REMOTE_RESPONSE_STATUSES:rZ,CLUSTER_STATUS_STATUSES:nZ,REQUEST_SUBJECT:J6,SUBJECT_PREFIXES:sZ,MSG_HEADERS:X6,LOG_LEVELS:ou,LOG_LEVEL_FLAGS:oZ,LOG_LEVEL_HIERARCHY:iZ}});var Fn=C((Cye,br)=>{"use strict";var $v="username is required",Vv="nothing to update, must supply active, role or password to update",Kv="password cannot be an empty string",Yv="If role is specified, it cannot be empty.",Wv="active must be true or false";br.exports.addUser=mZ;br.exports.alterUser=pZ;br.exports.dropUser=gZ;br.exports.getSuperUser=yZ;br.exports.userInfo=SZ;br.exports.listUsers=Fp;br.exports.listUsersExternal=TZ;br.exports.setUsersWithRolesCache=Dc;br.exports.findAndValidateUser=uy;br.exports.getClusterUser=bZ;br.exports.getUsersWithRolesCache=RZ;br.exports.USERNAME_REQUIRED=$v;br.exports.ALTERUSER_NOTHING_TO_UPDATE=Vv;br.exports.EMPTY_PASSWORD=Kv;br.exports.EMPTY_ROLE=Yv;br.exports.ACTIVE_BOOLEAN=Wv;var zv=En(),aZ=Pc(),zf=(Hp(),P(Bp)),Qv=Hv(),Qf=Kr(),oy=oo(),Ri=ae(),jv=require("validate.js"),ay=J(),{promisify:cZ}=require("util"),cy=no(),ny=(H(),P($)),Gv=It(),lZ=Ot(),uZ=ce(),dZ=eo(),{hdb_errors:fZ,ClientError:Gs}=he(),{HTTP_STATUS_CODES:io,AUTHENTICATION_ERROR_MSGS:ry,HDB_ERROR_MSGS:au}=fZ,{UserEventMsg:ly}=qs(),sy=require("lodash"),{server:kp}=(Gr(),P(ql)),_Z=J();kp.getUser=(e,t)=>uy(e,t,t!=null);kp.authenticateUser=(e,t)=>uy(e,t);var Jv={username:!0,active:!0,role:!0,password:!0},qv=new Map,hZ=cZ(aZ.delete),iy=uZ.get(ny.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??zf.HASH_FUNCTION.SHA256,yi;async function mZ(e){let t=jv.cleanAttributes(e,Jv),r=Qv.addUserValidation(t);if(r)throw new Gs(r.message);let n=await Qf.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 Gs(au.ROLE_NAME_NOT_FOUND(t.role),io.NOT_FOUND);if(n.length>1)throw new Gs(au.DUP_ROLES_FOUND(t.role),io.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=cy.encrypt(t.password)),t.password=await zf.hash(t.password,iy),t.hash_function=iy,t.role=n[0].id;let s=await zv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ay.debug(s),await Dc(),s.skipped_hashes.length===1)throw new Gs(au.USER_ALREADY_EXISTS(t.username),io.CONFLICT);return oy.signalUserChange(new ly(process.pid)),`${t.username} successfully added`}a(mZ,"addUser");async function pZ(e){let t=jv.cleanAttributes(e,Jv);if(Ri.isEmptyOrZeroLength(t.username))throw new Error($v);if(Ri.isEmptyOrZeroLength(t.password)&&Ri.isEmptyOrZeroLength(t.role)&&Ri.isEmptyOrZeroLength(t.active))throw new Error(Vv);if(!Ri.isEmpty(t.password)&&Ri.isEmptyOrZeroLength(t.password.trim()))throw new Error(Kv);if(!Ri.isEmpty(t.active)&&!Ri.isBoolean(t.active))throw new Error(Wv);if(!Ri.isEmpty(t.password)&&!Ri.isEmptyOrZeroLength(t.password.trim())&&(EZ(t.username)&&(t.hash=cy.encrypt(t.password)),t.password=await zf.hash(t.password,iy)),t.role==="")throw new Error(Yv);if(t.role){let n=await Qf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Gs(au.ALTER_USER_ROLE_NOT_FOUND(t.role),io.NOT_FOUND);if(n.length>1)throw new Gs(au.DUP_ROLES_FOUND(t.role),io.CONFLICT);t.role=n[0].id}let r=await zv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Dc(),oy.signalUserChange(new ly(process.pid)),r}a(pZ,"alterUser");function EZ(e){let t=!1,r=yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(EZ,"isClusterUser");async function gZ(e){let t=Qv.dropUserValidation(e);if(t)throw new Gs(t.message);if(yi.get(e.username)===void 0)throw new Gs(au.USER_NOT_EXIST(e.username),io.NOT_FOUND);let r=await hZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return ay.debug(r),await Dc(),oy.signalUserChange(new ly(process.pid)),`${e.username} successfully deleted`}a(gZ,"dropUser");async function SZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=sy.cloneDeep(e.hdb_user);let r=await Qf.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(SZ,"userInfo");async function TZ(){let e=await Fp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(TZ,"listUsersExternal");async function Fp(){let e=await Qf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=sy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Qf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=sy.cloneDeep(s),s.role=t[s.role],AZ(s.role),n.set(s.username,s);return n}a(Fp,"listUsers");function AZ(e){if(!e){ay.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(dZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(AZ,"appendSystemTablesToRole");async function Dc(e=void 0){e?yi=e:yi=await Fp()}a(Dc,"setUsersWithRolesCache");async function RZ(){return yi||await Dc(),yi}a(RZ,"getUsersWithRolesCache");async function uy(e,t,r=!0){yi||await Dc();let n=yi.get(e);if(!n){if(!r)return{username:e};throw new Gs(ry.GENERIC_AUTH_FAIL,io.UNAUTHORIZED)}if(n&&!n.active)throw new Gs(ry.USER_INACTIVE,io.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(qv.get(t)===n.password)return s;{let i=zf.validate(n.password,t,n.hash_function||zf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)qv.set(t,n.password);else throw new Gs(ry.GENERIC_AUTH_FAIL,io.UNAUTHORIZED)}}return s}a(uy,"findAndValidateUser");async function yZ(){yi||await Dc();for(let[,e]of yi)if(e.role.role==="super_user")return e}a(yZ,"getSuperUser");async function bZ(){let e=await Fp(),t=lZ.getConfigFromFile(ny.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==ny.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+Gv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Gv.SERVER_SUFFIX.ADMIN,r}a(bZ,"getClusterUser");var Xv=[];kp.invalidateUser=function(e){for(let t of Xv)try{t(e)}catch(r){_Z.error("Error invalidating user",r)}};kp.onInvalidatedUser=function(e){Xv.push(e)}});var Jf=C((Mye,rU)=>{"use strict";var Lc=J(),Gn=(H(),P($)),OZ=MM(),Dye=Fs(),Lye=so(),NZ=Fn(),{validateEvent:Zv}=qs(),jf=kn(),wZ=require("process"),{resetDatabases:IZ}=(ve(),P(it)),CZ={[Gn.ITC_EVENT_TYPES.SCHEMA]:PZ,[Gn.ITC_EVENT_TYPES.USER]:tU};async function PZ(e){let t=Zv(e);if(t){Lc.error(t);return}Lc.trace("ITC schemaHandler received schema event:",e),await OZ(e.message),await DZ(e.message)}a(PZ,"schemaHandler");async function DZ(e){try{jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=IZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Lc.error(t)}}a(DZ,"syncSchemaMetadata");var eU=[];async function tU(e){try{try{jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Lc.warn(r)}let t=Zv(e);if(t){Lc.error(t);return}Lc.trace(`ITC userHandler ${Gn.HDB_ITC_CLIENT_PREFIX}${wZ.pid} received user event:`,e),await NZ.setUsersWithRolesCache();for(let r of eU)r()}catch(t){Lc.error(t)}}a(tU,"userHandler");tU.addListener=function(e){eU.push(e)};rU.exports=CZ});var qs=C((kye,sU)=>{"use strict";var Uye=J(),dy=ae(),LZ=(H(),P($)),{ITC_ERRORS:Xf}=Cn(),{parentPort:xye,threadId:MZ,isMainThread:vZ,workerData:Bye}=require("worker_threads"),{onMessageFromWorkers:UZ,broadcast:Hye,broadcastWithAcknowledgement:xZ}=nt();sU.exports={sendItcEvent:BZ,validateEvent:nU,SchemaEventMsg:HZ,UserEventMsg:kZ};var Gp;UZ(async(e,t)=>{Gp=Gp||Jf(),nU(e),Gp[e.type]&&await Gp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function BZ(e){return!vZ&&e.message&&(e.message.originator=MZ),xZ(e)}a(BZ,"sendItcEvent");function nU(e){if(typeof e!="object")return Xf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||dy.isEmpty(e.type))return Xf.MISSING_TYPE;if(!e.hasOwnProperty("message")||dy.isEmpty(e.message))return Xf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||dy.isEmpty(e.message.originator))return Xf.MISSING_ORIGIN;if(LZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xf.INVALID_EVENT(e.type)}a(nU,"validateEvent");function HZ(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(HZ,"SchemaEventMsg");function kZ(e){this.originator=e}a(kZ,"UserEventMsg")});var oo=C((qye,cU)=>{"use strict";var iU=(H(),P($)),Gye=ae(),qp=J(),oU=PM(),cu,{sendItcEvent:aU}=qs();function FZ(e){try{qp.info("signalSchemaChange called with message:",e),cu=cu||Jf();let t=new oU(iU.ITC_EVENT_TYPES.SCHEMA,e);return cu.schema(t),aU(t)}catch(t){qp.error(t)}}a(FZ,"signalSchemaChange");function GZ(e){try{qp.trace("signalUserChange called with message:",e),cu=cu||Jf();let t=new oU(iU.ITC_EVENT_TYPES.USER,e);return cu.user(t),aU(t)}catch(t){qp.error(t)}}a(GZ,"signalUserChange");cU.exports={signalSchemaChange:FZ,signalUserChange:GZ}});var $p=C((Vye,uU)=>{"use strict";var lU=ae(),qZ=(H(),P($)),$Z=J(),VZ=Ip(),KZ=wp(),YZ=oo(),{SchemaEventMsg:WZ}=qs(),zZ="already exists in";uU.exports=QZ;async function QZ(e,t,r){if(lU.isEmptyOrZeroLength(r))return r;let n=[];lU.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await jZ(e,t.schema,t.name,i)})),s}a(QZ,"lmdbCheckForNewAttributes");async function jZ(e,t,r,n){let s=new KZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await JZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(zZ))$Z.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(jZ,"createNewAttribute");async function JZ(e){let t;return t=await VZ(e),YZ.signalSchemaChange(new WZ(process.pid,qZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(JZ,"createAttribute")});var lu=C((Yye,dU)=>{"use strict";var fy=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};dU.exports=fy});var _U=C((zye,fU)=>{"use strict";var XZ=lu(),ZZ=(H(),P($)).OPERATIONS_ENUM,_y=class extends XZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(ZZ.INSERT,r,n,s,i),this.records=t}};fU.exports=_y});var mU=C((jye,hU)=>{"use strict";var e8=lu(),t8=(H(),P($)).OPERATIONS_ENUM,hy=class extends e8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(t8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};hU.exports=hy});var EU=C((Xye,pU)=>{"use strict";var r8=lu(),n8=(H(),P($)).OPERATIONS_ENUM,my=class extends r8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(n8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};pU.exports=my});var SU=C((ebe,gU)=>{"use strict";var s8=lu(),i8=(H(),P($)).OPERATIONS_ENUM,py=class extends s8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(i8.DELETE,n,s,t,i),this.original_records=r}};gU.exports=py});var Zf=C((nbe,yU)=>{"use strict";var rbe=require("path"),TU=dt(),o8=_U(),a8=mU(),c8=EU(),l8=SU(),uu=Ut(),AU=ae(),{CONFIG_PARAMS:u8}=(H(),P($)),RU=ce();RU.initSync();var Vp=(H(),P($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:d8}=Et();yU.exports=f8;async function f8(e,t){if(RU.get(u8.LOGGING_AUDITLOG)===!1)return;let r=d8(e.schema,e.table),n=await TU.openEnvironment(r,e.table,!0),s=_8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){TU.initializeDBIs(n,uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,uu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),AU.isEmpty(s.user_name)||n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(f8,"writeTransaction");function _8(e,t){let r=AU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Vp.INSERT)return new o8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vp.UPDATE)return new a8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vp.UPSERT)return new c8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vp.DELETE)return new l8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(_8,"createTransactionObject")});var Ey=C((obe,bU)=>{"use strict";var h8=Hf(),ibe=uf(),e_=(H(),P($)),m8=df(),p8=bc().insertRecords,E8=dt(),g8=J(),S8=$p(),{getSchemaPath:T8}=Et(),A8=Zf();bU.exports=R8;async function R8(e){try{let{schema_table:t,attributes:r}=h8(e);m8(e,r,t.hash_attribute),e.schema!==e_.SYSTEM_SCHEMA_NAME&&(r.includes(e_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(e_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(e_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(e_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await S8(e.hdb_auth_header,t,r),s=T8(e.schema,e.table),i=await E8.openEnvironment(s,e.table),o=await p8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await A8(e,o)}catch(c){g8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(R8,"lmdbCreateRecords")});var wU=C((cbe,NU)=>{"use strict";var OU=(H(),P($)),y8=Ey(),b8=uf(),O8=require("fs-extra"),{getSchemaPath:N8}=Et();NU.exports=w8;async function w8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new b8(OU.SYSTEM_SCHEMA_NAME,OU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await y8(r),await O8.mkdirp(N8(e.schema))}a(w8,"lmdbCreateSchema")});var CU=C((ube,IU)=>{"use strict";var gy=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};IU.exports=gy});var MU=C((mbe,LU)=>{"use strict";var PU=dt(),Sy=un(),Ty=Cn().LMDB_ERRORS_ENUM,I8=Ut(),DU=J(),fbe=ae(),C8=require("lmdb"),P8=CU(),D8=(H(),P($)),{OVERFLOW_MARKER:_be,MAX_SEARCH_KEY_LENGTH:hbe}=I8,L8=D8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function M8(e,t,r,n){if(Sy.validateEnv(e),t===void 0)throw new Error(Ty.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ty.IDS_REQUIRED):new Error(Ty.IDS_MUST_BE_ITERABLE);try{let s=PU.listDBIs(e);PU.initializeDBIs(e,t,s);let i=new P8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let m=e.dbis[t].get(o);if(!m||n&&m[L8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,C8.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],A=m[R];if(A!=null)try{let N=Sy.getIndexedValues(A);if(N)for(let v=0,F=N.length;v<F;v++)E.remove(N[v],o)}catch{DU.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){DU.warn(m),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=Sy.getNextMonotonicTime(),i}catch(s){throw s}}a(M8,"deleteRecords");LU.exports={deleteRecords:M8}});var t_=C((Ebe,UU)=>{"use strict";var du=ae(),v8=MU(),U8=dt(),{getSchemaPath:x8}=Et(),B8=Zf(),H8=J();UU.exports=k8;async function k8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(du.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(du.isEmptyOrZeroLength(e.hash_values)&&!du.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];du.isEmpty(l)||e.hash_values.push(l)}}if(du.isEmptyOrZeroLength(e.hash_values))return vU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(du.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=x8(e.schema,e.table),i=await U8.openEnvironment(s,e.table),o=await v8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await B8(e,o)}catch(c){H8.error(`unable to write transaction due to ${c.message}`)}return vU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(k8,"lmdbDeleteRecords");function vU(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(vU,"createDeleteResponse")});var Ry=C((Tbe,xU)=>{"use strict";var F8=(H(),P($)),Sbe=un();function Ay(e,t){let r=Object.create(null);if(t.length===1&&F8.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(Ay,"parseRow");function G8(e,t,r,n){let s=Ay(r,e);n.push(s)}a(G8,"searchAll");function q8(e,t,r,n){let s=Ay(r,e);n[t]=s}a(q8,"searchAllToMap");function $8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a($8,"iterateDBI");function Mc(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(Mc,"pushResults");function V8(e,t,r,n,s,i){t.toString().endsWith(e)&&Mc(t,r,n,s,i)}a(V8,"endsWith");function K8(e,t,r,n,s,i){t.toString().includes(e)&&Mc(t,r,n,s,i)}a(K8,"contains");function Y8(e,t,r,n,s,i){t>e&&Mc(t,r,n,s,i)}a(Y8,"greaterThanCompare");function W8(e,t,r,n,s,i){t>=e&&Mc(t,r,n,s,i)}a(W8,"greaterThanEqualCompare");function z8(e,t,r,n,s,i){t<e&&Mc(t,r,n,s,i)}a(z8,"lessThanCompare");function Q8(e,t,r,n,s,i){t<=e&&Mc(t,r,n,s,i)}a(Q8,"lessThanEqualCompare");xU.exports={parseRow:Ay,searchAll:G8,searchAllToMap:q8,iterateDBI:$8,endsWith:V8,contains:K8,greaterThanCompare:Y8,greaterThanEqualCompare:W8,lessThanCompare:z8,lessThanEqualCompare:Q8,pushResults:Mc}});var fu=C((Obe,$U)=>{"use strict";var aa=dt(),Rbe=J(),qn=un(),Kp=Ut(),Kt=Cn().LMDB_ERRORS_ENUM,ybe=ae(),j8=(H(),P($)),Yp=Ry(),{parseRow:J8}=Yp,bbe=require("lmdb"),{OVERFLOW_MARKER:BU,MAX_SEARCH_KEY_LENGTH:X8}=Kp;function HU(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(HU,"iterateFullIndex");function r_(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 _===r?(E.values=!1,d.getRange(E).map(A=>({value:A}))):d.getRange(E)})}a(r_,"iterateRangeBetween");function vc(e,t,r,n){let s=e.database||e,i=aa.openDBI(s,r);i[Kp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&aa.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 kU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(BU)){if(!s)if(r)s=aa.openDBI(e,r);else{let l=aa.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=aa.openDBI(e,l[u]),!s[Kp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(kU,"getOverflowCheck");function Z8(e,t,r,n=!1,s=void 0,i=void 0){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return vc(e,t,t,(o,c,l)=>(Wp(r),r=n_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>J8(u.value,r))))}a(Z8,"searchAll");function e5(e,t,r,n=!1,s=void 0,i=void 0){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);Wp(r),r=n_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of HU(e,t,t,n,s,i))o.set(c,Yp.parseRow(l,r));return o}a(e5,"searchAllToMap");function t5(e,t,r=!1,n=void 0,s=void 0){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=HU(e,void 0,t,r,n,s),c=o.transaction,l=kU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(t5,"iterateDBI");function r5(e,t){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return aa.statDBI(e,t).entryCount}a(r5,"countAll");function n5(e,t,r,n,s=!1,i=void 0,o=void 0){return ca(e,r,n),vc(e,t,r,(c,l,u,f)=>(n=qn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(n5,"equals");function s5(e,t,r){return ca(e,t,r),aa.openDBI(e,t).getValuesCount(r)}a(s5,"count");function i5(e,t,r,n,s=!1,i=void 0,o=void 0){return ca(e,r,n),vc(e,null,r,(c,l)=>{n=qn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;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(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(i5,"startsWith");function o5(e,t,r,n,s=!1,i=void 0,o=void 0){return FU(e,t,r,n,s,i,o,!0)}a(o5,"endsWith");function FU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ca(e,r,n),vc(e,null,r,(l,u,f,d)=>{let h=kU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let m=_.toString();return m.endsWith(BU)?u.getValues(_,{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[Kp.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(FU,"contains");function a5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),r_(e,t,r,n,l,s,i,o,!0,!1)}a(a5,"greaterThan");function c5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),r_(e,t,r,n,l,s,i,o,!1,!1)}a(c5,"greaterThanEqual");function l5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),r_(e,t,r,l,n,s,i,o,!1,!0)}a(l5,"lessThan");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),r_(e,t,r,l,n,s,i,o,!1,!1)}a(u5,"lessThanEqual");function d5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(qn.validateEnv(e),r===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Kt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Kt.END_VALUE_REQUIRED);if(n=qn.convertKeyValueToWrite(n),s=qn.convertKeyValueToWrite(s),n>s)throw new Error(Kt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return r_(e,t,r,n,s,i,o,c)}a(d5,"between");function f5(e,t,r,n){qn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Wp(r),r=n_(s,r),n===void 0)throw new Error(Kt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Yp.parseRow(c,r)),o}a(f5,"searchByHash");function _5(e,t,r){qn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(_5,"checkHashExists");function h5(e,t,r,n,s=[]){return qU(e,t,r,n,s),GU(e,t,r,n,s).map(i=>i[1])}a(h5,"batchSearchByHash");function m5(e,t,r,n,s=[]){qU(e,t,r,n,s);let i=new Map;for(let[o,c]of GU(e,t,r,n,s))i.set(o,c);return i}a(m5,"batchSearchByHashToMap");function GU(e,t,r,n,s=[]){return vc(e,t,t,(i,o,c)=>{r=n_(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,Yp.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(GU,"batchHashSearch");function qU(e,t,r,n,s){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Wp(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a(qU,"initializeBatchSearchByHash");function Wp(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wp,"validateFetchAttributes");function ca(e,t,r){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.SEARCH_VALUE_REQUIRED);if(r?.length>X8)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(ca,"validateComparisonFunctions");function n_(e,t){return t.length===1&&j8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=aa.listDBIs(e)),t}a(n_,"setGetWholeRowAttributes");$U.exports={searchAll:Z8,searchAllToMap:e5,count:s5,countAll:r5,equals:n5,startsWith:i5,endsWith:o5,contains:FU,searchByHash:f5,setGetWholeRowAttributes:n_,batchSearchByHash:h5,batchSearchByHashToMap:m5,checkHashExists:_5,iterateDBI:t5,greaterThan:a5,greaterThanEqual:c5,lessThan:l5,lessThanEqual:u5,between:d5}});var _u=C((wbe,zU)=>{var VU=require("lodash"),KU=rt(),ke=require("joi"),p5=ae(),{hdb_schema_table:s_,checkValidTable:YU,hdb_table:WU,hdb_database:zp}=Si(),{handleHDBError:E5,hdb_errors:g5}=he(),{getDatabases:S5}=(ve(),P(it)),{HTTP_STATUS_CODES:T5}=g5,A5=ke.object({database:zp,schema:zp,table:WU,search_attribute:s_,search_value:ke.any().required(),get_attributes:ke.array().min(1).items(ke.alternatives(s_,ke.object())).optional(),desc:ke.bool(),limit:ke.number().integer().min(1),offset:ke.number().integer().min(0)}),R5=ke.object({database:zp,schema:zp,table:WU,operator:ke.string().valid("and","or").default("and").lowercase(),offset:ke.number().integer().min(0),limit:ke.number().integer().min(1),get_attributes:ke.array().min(1).items(ke.alternatives(s_,ke.object())).optional(),sort:ke.object({attribute:ke.alternatives(s_,ke.array().min(1)),descending:ke.bool().optional()}).optional(),conditions:ke.array().min(1).items(ke.alternatives(ke.object({operator:ke.string().valid("and","or").default("and").lowercase(),conditions:ke.array()}),ke.object({search_attribute:ke.alternatives(s_,ke.array().min(1)),search_type:ke.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:ke.when("search_type",{switch:[{is:"equals",then:ke.any()},{is:"between",then:ke.array().items(ke.alternatives([ke.string(),ke.number()])).length(2)}],otherwise:ke.alternatives(ke.string(),ke.number())}).required()}))).required()});zU.exports=function(e,t){let r=null;switch(t){case"value":r=KU.validateBySchema(e,A5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(YU("database",e.schema)),i(YU("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=KU.validateBySchema(e,R5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=p5.checkGlobalSchemaTable(e.schema,e.table);if(s)return E5(new Error,s,T5.NOT_FOUND);let o=S5()[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,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=VU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!VU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var yy=C((Cbe,QU)=>{"use strict";var y5=dt(),b5=_u(),{getSchemaPath:O5}=Et();QU.exports=N5;function N5(e){let t=b5(e,"hashes");if(t)throw t;let r=O5(e.schema,e.table);return y5.openEnvironment(r,e.table)}a(N5,"initialize")});var by=C((Dbe,jU)=>{"use strict";var w5=fu(),I5=yy();jU.exports=C5;async function C5(e){let t=await I5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return w5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(C5,"lmdbGetDataByHash")});var hu=C((Mbe,JU)=>{"use strict";var Oy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};JU.exports=Oy});var ZU=C((xbe,XU)=>{"use strict";var Ube=hu(),P5=fu(),D5=yy();XU.exports=L5;async function L5(e){let t=await D5(e),r=global.hdb_schema[e.schema][e.table];return P5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(L5,"lmdbSearchByHash")});var $s=C((Hbe,e0)=>{"use strict";var Ny=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};e0.exports=Ny});var Qp=C((Fbe,o0)=>{"use strict";var Wr=fu(),M5=dt(),v5=ae(),Fe=Ut(),Uc=(H(),P($)),U5=eo(),t0=Cn().LMDB_ERRORS_ENUM,{getSchemaPath:x5}=Et(),ao=Uc.SEARCH_WILDCARDS;async function B5(e,t,r){let n;e.schema===Uc.SYSTEM_SCHEMA_NAME?n=U5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=i0(e,n.hash_attribute,r,t);return n0(e,s,n.hash_attribute,r)}a(B5,"prepSearch");async function n0(e,t,r,n){let s=x5(e.schema,e.table),i=await M5.openEnvironment(s,e.table),o=s0(i,e,t,r),c=o.transaction||i;if([Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Fe.SEARCH_TYPES.SEARCH_ALL,Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(H5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?r0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?r0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(n0,"executeSearch");function s0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Fe.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.ENDS_WITH:case Fe.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.STARTS_WITH:case Fe.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN:case Fe.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Fe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN:case Fe.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN_EQUAL:case Fe.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(s0,"searchByType");function r0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(r0,"createMapFromIterable");function H5(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(H5,"checkToFetchMore");function i0(e,t,r,n){if(v5.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),ao.indexOf(s)>-1)return r===!0?Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Fe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ao[0])<0&&s.indexOf(ao[1])<0)return c===!0?r===!0?Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Fe.SEARCH_TYPES.EQUALS;if(ao.indexOf(i)>=0&&ao.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Fe.SEARCH_TYPES.CONTAINS;if(ao.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Fe.SEARCH_TYPES.ENDS_WITH;if(ao.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Fe.SEARCH_TYPES.STARTS_WITH;if(s.includes(ao[0])||s.includes(ao[1]))return Fe.SEARCH_TYPES.EQUALS;throw new Error(t0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Uc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Fe.SEARCH_TYPES.BETWEEN;case Uc.VALUE_SEARCH_COMPARATORS.GREATER:return Fe.SEARCH_TYPES.GREATER_THAN;case Uc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Fe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Uc.VALUE_SEARCH_COMPARATORS.LESS:return Fe.SEARCH_TYPES.LESS_THAN;case Uc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Fe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(t0.UNKNOWN_SEARCH_TYPE)}}a(i0,"createSearchTypeFromSearchObject");o0.exports={executeSearch:n0,createSearchTypeFromSearchObject:i0,prepSearch:B5,searchByType:s0}});var c0=C(($be,a0)=>{"use strict";var qbe=$s(),k5=_u(),F5=ae(),G5=(H(),P($)),q5=Qp();a0.exports=$5;function $5(e,t){if(!F5.isEmpty(t)&&G5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=k5(e,"value");if(n)throw n;return q5.prepSearch(e,t,!0)}a($5,"lmdbGetDataByValue")});var i_=C((Ybe,l0)=>{"use strict";var Kbe=$s(),V5=_u(),K5=ae(),Y5=(H(),P($)),W5=Qp();l0.exports=z5;async function z5(e,t){if(!K5.isEmpty(t)&&Y5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=V5(e,"value");if(n)throw n;return W5.prepSearch(e,t,!1)}a(z5,"lmdbSearchByValue")});var d0=C((Qbe,u0)=>{"use strict";var zbe=Ut(),wy=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}},Iy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Cy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};u0.exports={SearchByConditionsObject:wy,SearchCondition:Iy,SortAttribute:Cy}});var p0=C((Zbe,m0)=>{"use strict";var Jbe=d0().SearchByConditionsObject,Q5=$s(),j5=_u(),Py=fu(),jp=Ut(),{Resource:Xbe}=(Xo(),P(CA)),h0=Qp(),J5=Ry(),X5=require("lodash"),{getSchemaPath:Z5}=Et(),f0=dt(),{handleHDBError:e9,hdb_errors:t9}=he(),{HTTP_STATUS_CODES:r9}=t9,n9=1e8;m0.exports=s9;async function s9(e){let t=j5(e,"conditions");if(t)throw e9(t,t.message,r9.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=Z5(e.schema,e.table),n=await f0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)f0.openDBI(n,u.search_attribute);let i=X5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===jp.SEARCH_TYPES.EQUALS?u.estimated_count=Py.count(n,u.search_attribute,u.search_value):f===jp.SEARCH_TYPES.CONTAINS||f===jp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=n9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await _0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(h0.filterByType),d=f.length,h=Py.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let m=0;m<d;m++)if(!f[m](_))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(_=>J5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await _0(o,e,h,s.hash_attribute);c=c.concat(_)}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=Py.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(s9,"lmdbSearchByConditions");async function _0(e,t,r,n){let s=new Q5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===jp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,h0.searchByType(e,s,i,n).map(o=>o.value)}a(_0,"executeConditionSearch")});var o_=C((tOe,E0)=>{"use strict";var i9=(H(),P($)).OPERATIONS_ENUM,Dy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=i9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};E0.exports=Dy});var Ly=C((nOe,O0)=>{"use strict";var A0=$s(),R0=o_(),y0=i_(),b0=t_(),gn=(H(),P($)),g0=ae(),S0=dt(),{getTransactionAuditStorePath:o9,getSchemaPath:a9}=Et(),T0=J();O0.exports=c9;async function c9(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 l9(e),await u9(e);let t=a9(e.schema,e.table);try{await S0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")T0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=o9(e.schema,e.table);await S0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")T0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(c9,"lmdbDropTable");async function l9(e){let t=new A0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await y0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new R0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await b0(s)}a(l9,"deleteAttributesFromSystem");async function u9(e){let t=new A0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await y0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new R0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await b0(s)}catch(i){throw i}}a(u9,"dropTableFromSystem")});var w0=C((iOe,N0)=>{"use strict";var d9=require("fs-extra"),f9=$s(),_9=hu(),h9=o_(),m9=Ly(),p9=t_(),E9=by(),g9=i_(),co=(H(),P($)),{getSchemaPath:S9}=Et(),{handleHDBError:T9,hdb_errors:A9}=he(),{HDB_ERROR_MSGS:R9,HTTP_STATUS_CODES:y9}=A9;N0.exports=b9;async function b9(e){let t;try{t=await O9(e.schema);let r=new f9(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await g9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await m9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new h9(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await p9(s);let i=S9(t);await d9.remove(i)}catch(r){throw r}}a(b9,"lmdbDropSchema");async function O9(e){let t=new _9(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await E9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw T9(new Error,R9.SCHEMA_NOT_FOUND(e),y9.NOT_FOUND,void 0,void 0,!0);return n}a(O9,"validateDropSchema")});var a_=C((aOe,I0)=>{"use strict";var My=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};I0.exports=My});var Uy=C((uOe,C0)=>{"use strict";var N9=require("fs-extra"),Jp=dt(),{getTransactionAuditStorePath:w9}=Et(),vy=Ut(),lOe=a_();C0.exports=I9;async function I9(e){let t;try{let r=w9(e.schema,e.table);await N9.mkdirp(r),t=await Jp.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{Jp.createDBI(t,vy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Jp.createDBI(t,vy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Jp.createDBI(t,vy.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(I9,"createTransactionsAuditEnvironment")});var L0=C((_Oe,D0)=>{"use strict";var xy=(H(),P($)),P0=dt(),C9=bc(),{getSystemSchemaPath:P9,getSchemaPath:D9}=Et(),fOe=eo(),L9=Ip(),By=wp(),M9=J(),v9=Uy();D0.exports=U9;async function U9(e,t){let r=D9(t.schema,t.table),n=new By(t.schema,t.table,xy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new By(t.schema,t.table,xy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new By(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await P0.createEnvironment(r,t.table),e!==void 0){let o=await P0.openEnvironment(P9(),xy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await C9.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 Hy(n),await Hy(s),await Hy(i)}await v9(t)}catch(o){throw o}}a(U9,"lmdbCreateTable");async function Hy(e){try{await L9(e)}catch(t){M9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Hy,"createAttribute")});var v0=C((mOe,M0)=>{"use strict";var x9=Hf(),B9=df(),H9=$p(),c_=(H(),P($)),k9=bc().updateRecords,F9=dt(),{getSchemaPath:G9}=Et(),q9=Zf(),$9=J();M0.exports=V9;async function V9(e){try{let{schema_table:t,attributes:r}=x9(e);B9(e,r,t.hash_attribute),e.schema!==c_.SYSTEM_SCHEMA_NAME&&(r.includes(c_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(c_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(c_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(c_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await H9(e.hdb_auth_header,t,r),s=G9(e.schema,e.table),i=await F9.openEnvironment(s,e.table),o=await k9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await q9(e,o)}catch(c){$9.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(V9,"lmdbUpdateRecords")});var x0=C((EOe,U0)=>{"use strict";var K9=(H(),P($)).OPERATIONS_ENUM,ky=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=K9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};U0.exports=ky});var H0=C((TOe,B0)=>{"use strict";var SOe=x0(),Y9=Hf(),W9=df(),z9=$p(),l_=(H(),P($)),Q9=bc().upsertRecords,j9=dt(),{getSchemaPath:J9}=Et(),X9=Zf(),Z9=J(),{handleHDBError:e7,hdb_errors:t7}=he();B0.exports=r7;async function r7(e){let t;try{t=Y9(e)}catch(l){throw e7(l,l.message,t7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;W9(e,n,r.hash_attribute),e.schema!==l_.SYSTEM_SCHEMA_NAME&&(n.includes(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await z9(e.hdb_auth_header,r,n),i=J9(e.schema,e.table),o=await j9.openEnvironment(i,e.table),c=await Q9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await X9(e,c)}catch(l){Z9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(r7,"lmdbUpsertRecords")});var F0=C((ROe,k0)=>{"use strict";var Fy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};k0.exports=Fy});var q0=C((bOe,G0)=>{"use strict";var Gy=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};G0.exports=Gy});var K0=C((wOe,V0)=>{"use strict";var qy=dt(),{getTransactionAuditStorePath:n7}=Et(),NOe=F0(),u_=Ut(),s7=ae(),$0=q0(),i7=require("util").promisify,o7=i7(setTimeout),a7=1e4,c7=100;V0.exports=l7;async function l7(e){let t=n7(e.schema,e.table),r=await qy.openEnvironment(t,e.table,!0),n=qy.listDBIs(r);qy.initializeDBIs(r,u_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new $0;do s=await u7(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 o7(c7);while(s.transactions_deleted>0);return i}a(l7,"deleteAuditLogsBefore");async function u7(e,t){let r=new $0;try{let n=e.dbis[u_.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[u_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];s7.isEmpty(c)||(s=e.dbis[u_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[u_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>a7)break}return await s,r}catch(n){throw n}}a(u7,"deleteTransactions")});var W0=C((COe,Y0)=>{"use strict";var $y=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Y0.exports=$y});var Q0=C((LOe,z0)=>{"use strict";var d7=$s(),f7=o_(),DOe=W0(),bi=(H(),P($)),_7=ae(),Vy=dt(),h7=eo(),m7=i_(),p7=t_(),{getSchemaPath:E7}=Et();z0.exports=g7;async function g7(e,t=!0){let r;e.schema===bi.SYSTEM_SCHEMA_NAME?r=h7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await T7(e),s=E7(e.schema,e.table),i=await Vy.openEnvironment(s,e.table);return t===!0&&await S7(e,i,r.hash_attribute),Vy.dropDBI(i,e.attribute),n}a(g7,"lmdbDropAttribute");async function S7(e,t,r){let n=Vy.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(S7,"removeAttributeFromAllObjects");async function T7(e){let t=new d7(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await m7(t)).filter(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(_7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new f7(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return p7(i)}a(T7,"dropAttributeFromSystem")});var tx=C((UOe,ex)=>{"use strict";var Ky=dt(),mu=Ut(),vOe=un(),Yy=(H(),P($)),j0=ae(),{getTransactionAuditStorePath:A7}=Et(),R7=fu(),Xp=lu(),y7=J();ex.exports=b7;async function b7(e){let t=A7(e.schema,e.table),r=await Ky.openEnvironment(t,e.table,!0),n=Ky.listDBIs(r);Ky.initializeDBIs(r,mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Yy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return J0(r,e.search_values);case Yy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,N7(r,e.search_values,s);case Yy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return O7(r,e.search_values);default:return J0(r)}}a(b7,"readAuditLog");function J0(e,t=[0,Date.now()]){j0.isEmpty(t[0])&&(t[0]=0),j0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[mu.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 Xp,s))}a(J0,"searchTransactionsByTimestamp");function O7(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[mu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Z0(e,i))}return Object.fromEntries(r)}a(O7,"searchTransactionsByUsername");function N7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=R7.equals(e,mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,mu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=Z0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);X0(l,"records",r,f,o),X0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(N7,"searchTransactionsByHashValues");function X0(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new Xp(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new Xp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(X0,"loopRecords");function Z0(e,t){let r=[];try{let n=e.dbis[mu.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 Xp,i);r.push(o)}}catch(i){y7.warn(i)}return r}catch(n){throw n}}a(Z0,"batchSearchTransactions")});var nx=C((kOe,rx)=>{"use strict";var{getSchemaPath:BOe}=Et(),HOe=dt(),{database:w7}=(ve(),P(it));rx.exports={writeTransaction:I7};async function I7(e,t,r){return w7({database:e,table:t}).transaction(r)}a(I7,"writeTransaction")});var ax=C((GOe,ox)=>{"use strict";var{getSchemaPath:sx}=Et(),ix=dt();ox.exports={flush:C7,resetReadTxn:P7};async function C7(e,t){return(await ix.openEnvironment(sx(e,t),t.toString())).flushed}a(C7,"flush");async function P7(e,t){try{(await ix.openEnvironment(sx(e,t),t.toString())).resetReadTxn()}catch{}}a(P7,"resetReadTxn")});var dx=C(($Oe,ux)=>{"use strict";var{Readable:D7}=require("stream"),{getDatabases:L7}=(ve(),P(it)),{readSync:M7,openSync:v7,createReadStream:cx}=require("fs"),{open:U7}=require("lmdb"),lx=Mf(),x7=vf(),{AUDIT_STORE_OPTIONS:B7}=(Xi(),P(fx)),{INTERNAL_DBIS_NAME:H7,AUDIT_STORE_NAME:k7}=Ut();ux.exports=G7;var Wy=32768,F7=100;async function G7(e){let t=e.database||e.schema||"data",r=L7()[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=U7({noSync:!0,maxDbs:x7.MAX_DBS}),h,_=d.openDB(H7,new lx(!1)),m=f.useReadTransaction(),S=0,g=a(async function(E,A){A.encoding="binary",A.encoder=void 0;let N=d.openDB(E,A),v=f.openDB(E,A);for(let{key:F,version:q,value:Y}of v.getRange({start:null,transaction:m,versions:v.useVersions}))h=N.put(F,Y,q),S++%F7===0&&(await new Promise(ee=>setTimeout(ee,20)),m.openTimer&&(m.openTimer=0))},"copyDatabase");for(let{key:E,value:A}of f.getRange({transaction:m,start:!1}))if(s.some(N=>E.startsWith?.(N+"/"))){_.put(E,A);let[,N]=E.split("/"),v=!N,F=new lx(!v,v);await g(E,F)}e.include_audit&&await g(k7,{...B7}),await h;let R=cx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=v7(o.path);return o.transaction(()=>{let u=Buffer.alloc(Wy);M7(c,u,0,Wy),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=cx(null,{fd:c,start:Wy}),h=new D7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});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(G7,"getBackup")});var mx=C((KOe,hx)=>{"use strict";var q7=J(),{handleHDBError:$7}=he(),V7=VL(),K7=Ip(),Y7=Ey(),W7=wU(),z7=t_(),Q7=by(),j7=ZU(),J7=c0(),X7=i_(),Z7=p0(),eee=w0(),tee=L0(),ree=v0(),nee=H0(),see=K0(),iee=Ly(),oee=Q0(),aee=tx(),cee=nx(),_x=ax(),lee=dx(),zy=class extends V7{static{a(this,"LMDBBridge")}async searchByConditions(t){return Z7(t)}async getDataByHash(t){return await Q7(t)}async searchByHash(t){return await j7(t)}async getDataByValue(t,r){return await J7(t,r)}async searchByValue(t){return await X7(t)}async createSchema(t){return await W7(t)}async dropSchema(t){return await eee(t)}async createTable(t,r){return await tee(t,r)}async dropTable(t){return await iee(t)}async createAttribute(t){return await K7(t)}async createRecords(t){return await Y7(t)}async updateRecords(t){return await ree(t)}async upsertRecords(t){try{return await nee(t)}catch(r){throw $7(r,null,null,q7.ERR,r)}}async deleteRecords(t){return await z7(t)}async dropAttribute(t){return await oee(t)}async deleteAuditLogsBefore(t){return await see(t)}async readAuditLog(t){return await aee(t)}writeTransaction(t,r,n){return cee.writeTransaction(t,r,n)}flush(t,r){return _x.flush(t,r)}resetReadTxn(t,r){return _x.resetReadTxn(t,r)}getBackup(t){return lee(t)}};hx.exports=zy});var jy={};Ue(jy,{add:()=>Zp,applyReverse:()=>px,getRecordAtTime:()=>Qy,rebuildUpdateBefore:()=>eE});function Zp(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 eE(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,Zp(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function px(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=uee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Ex}}function Qy(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=wt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":px(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Ex&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=wt(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 uee,Ex,tE=be(()=>{Xi();a(Zp,"add");Zp.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)};uee={add:Zp};a(eE,"rebuildUpdateBefore");a(px,"applyReverse");Ex={};a(Qy,"getRecordAtTime")});function Sn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function iE(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 $n.ClientError(`${l} must be a string, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a string, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a number, attempt to assign ${h}`);Sn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new $n.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new $n.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new $n.ClientError(`${l} must be a number, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a boolean, attempt to assign ${d}`);Sn(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 $n.ClientError(`${l} must be a Date, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof mi||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a Blob, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){Sn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be an object, attempt to assign ${d}`);Sn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let m=this.getRecord()?.[l];return _.update(m)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=Jy(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},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 $n.ClientError("Can not add a property to a sealed table schema");Sn(this)[c]=l}),i("deleteProperty",function(c){Sn(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 h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,Sx);break}o=c}while(o&&o!==Sx)}function Jy(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends d_{static{a(this,"TrackedObject")}},iE(r,t)),new r(e)):new d_(e);case Array:let n=new nE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Jy(o,t?.elements)),n[s]=o}return n;default:return e}}function oE(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=oE(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 Bc(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=Bc(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=jy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Bc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)dee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function rE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[xc]||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(rE(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(rE(s))return!0}else return!0}else return!0}}return!1}var $n,gx,Sx,d_,dee,xc,nE,sE,Xy=be(()=>{$n=M(he());tE();cs();a(Sn,"getChanges");a(iE,"assignTrackedAccessors");gx=Object.prototype,Sx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(gx[t])return gx[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()[t];if(s&&typeof s=="object"){let i=Jy(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Jy,"trackObject");d_=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}};iE(d_,{});a(oE,"collapseData");dee=Object.prototype.hasOwnProperty;a(Bc,"updateAndFreeze");a(rE,"hasChanges");xc=Symbol.for("has-array-changes"),nE=class extends Array{static{a(this,"TrackedArray")}#e;[xc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[xc]=!0,super.splice(...t)}push(...t){return this[xc]=!0,super.push(...t)}pop(){return this[xc]=!0,super.pop()}unshift(...t){return this[xc]=!0,super.unshift(...t)}shift(){return this[xc]=!0,super.shift()}};nE.prototype.constructor=Array;sE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var wx={};Ue(wx,{ResourceBridge:()=>tb});function rb({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Ax(e,t){let r=Oi(e),n=rb(e,r);if(!r)throw new Vs.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;Nt(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&&oE(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 Oi(e){let t=e.database||e.schema||_ee,r=Xe()[t];if(!r)throw(0,Vs.handleHDBError)(new Error,fee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Rx(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*yx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var bx,aE,Vs,Ox,Zy,eb,Nx,fee,_ee,hee,mee,Tx,tb,Ix=be(()=>{"use strict";bx=M(mx()),aE=M(_u()),Vs=M(he());ve();Ox=M(Hf());H();Zy=M(oo()),eb=M(qs()),Nx=M(ae());uc();Xy();({HDB_ERROR_MSGS:fee}=Vs.hdb_errors),_ee="data",hee=1e4,mee=10,tb=class extends bx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Tx=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,aE.default)(t,"conditions");if(r)throw(0,Vs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Oi(t);if(!n)throw new Vs.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:rb(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 Vs.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}]}ut({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(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){Oi(t).dropTable()}createSchema(t){return pu({database:t.schema,table:null}),Zy.signalSchemaChange(new eb.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await nb(t.schema),Zy.signalSchemaChange(new eb.SchemaEventMsg(process.pid,$t.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Tx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Ox.default)(t),s,i=Xe()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Nt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.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],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=oE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let m=f[_];if(typeof m=="function")try{let S=m([[h]]);Array.isArray(S)&&(m=S[0].func_val,f[_]=m)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=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),Nt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Rx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Xe()[t.schema][t.table];if(!r.createdTimeProperty)throw new Vs.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:bm.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Nx.async_set_timeout)(mee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%hee===0&&await u();return l.length>0&&await u(),s?Rx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,aE.default)(t,"hashes");if(r)throw r;return Ax(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Ax(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&eA[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,aE.default)(t,"value");if(n)throw n;let s=Oi(t);if(!s)throw new Vs.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===bm.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:rb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Oi(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){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(t),n={};switch(t.search_type){case Om.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 Om.USERNAME:let s=t.search_values;for await(let i of yx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return yx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(rb,"getSelect");a(Ax,"getRecords");a(Oi,"getTable");a(Rx,"createDeleteResponse");a(yx,"groupRecordsInHistory")});var kn=C((sNe,Cx)=>{"use strict";var{ResourceBridge:pee}=(Ix(),P(wx)),Eee=ce();Eee.initSync();var cE;function gee(){return cE||(cE=new pee,cE)}a(gee,"getBridge");Cx.exports=gee()});var En=C((oNe,Mx)=>{"use strict";var uE=XA(),Pr=ae(),See=require("util"),dE=kn(),Tee=Fs(),Px=J(),{handleHDBError:Hc,hdb_errors:Aee}=he(),{HTTP_STATUS_CODES:kc}=Aee,Ree=See.promisify(Tee.getTableSchema),yee="updated",Dx="inserted",Lx="upserted";Mx.exports={insert:Oee,update:Nee,upsert:wee,validation:bee,flush:Iee};async function bee(e){if(Pr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Pr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Pr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Ree(e.schema,e.table),r=uE(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&&Pr.isEmptyOrZeroLength(c[n]))throw Px.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Pr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Px.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Pr.isEmpty(c[n])&&c[n]!==""&&s.has(Pr.autoCast(c[n]))&&(c.skip=!0),s.add(Pr.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(bee,"validation");async function Oee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=uE(e);if(t)throw Hc(new Error,t.message,kc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw Hc(new Error,r,kc.BAD_REQUEST);let n=await dE.createRecords(e);return lE(Dx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Oee,"insertData");async function Nee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=uE(e);if(t)throw Hc(new Error,t.message,kc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw Hc(new Error,r,kc.BAD_REQUEST);let n=await dE.updateRecords(e);return Pr.isEmpty(n.existing_rows)?lE(yee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):lE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Nee,"updateData");async function wee(e){if(e.operation!=="upsert")throw Hc(new Error,"invalid operation, must be upsert",kc.INTERNAL_SERVER_ERROR);let t=uE(e);if(t)throw Hc(new Error,t.message,kc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw Hc(new Error,r,kc.BAD_REQUEST);let n=await dE.upsertRecords(e);return lE(Lx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(wee,"upsertData");function lE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Dx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Lx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(lE,"returnObject");function Iee(e){return Pr.transformReq(e),dE.flush(e.schema,e.table)}a(Iee,"flush")});var kx=C((cNe,Hx)=>{var Eu=require("validate.js"),Ux=rt(),gu=(H(),P($)),{handleHDBError:Cee,hdb_errors:Pee}=he(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:Dee}=Pee,sb=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Lee={STRUCTURE_USER:"structure_user"},vx=Object.values(gu.ROLE_TYPES_ENUM),Mee="attribute_permissions",vee="attribute_name",{PERMS_CRUD_ENUM:Su}=gu,Uee=[Mee,...Object.values(Su)],xx=[Su.READ,Su.INSERT,Su.UPDATE],xee=[vee,...xx];function Bee(e){let t=sb();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Bx(e,t)}a(Bee,"addRoleValidation");function Hee(e){let t=sb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Bx(e,t)}a(Hee,"alterRoleValidation");function kee(e){let t=sb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ux.validateObject(e,t)}a(kee,"dropRoleValidation");var Fee=["operation","role","id","permission","hdb_user","access"];function Bx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Fee.includes(n[o])||s.push(n[o]);s.length>0&&tr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=Ux.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{tr(o,r)}),e.permission){let o=Gee(e);o&&tr(o,r),vx.forEach(c=>{e.permission[c]&&!Eu.isBoolean(e.permission[c])&&tr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(vx.indexOf(o)<0){if(o===Lee.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]||tr(Yt.SCHEMA_NOT_FOUND(d),r)}continue}tr(Yt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){tr(Yt.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]){tr(Yt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{Uee.includes(f)||tr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Su).forEach(f=>{Eu.isDefined(u[f])?Eu.isBoolean(u[f])||tr(Yt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):tr(Yt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){tr(Yt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){tr(Yt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!xee.includes(S)&&S!==Su.DELETE&&tr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!Eu.isDefined(_.attribute_name)){tr(Yt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=_.attribute_name;if(!f.includes(m)){tr(Yt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}xx.forEach(S=>{Eu.isDefined(_[S])?Eu.isBoolean(_[S])||tr(Yt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):tr(Yt.ATTR_PERM_MISSING(S,m),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.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 h=`${o}.${l}`;tr(Yt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return qee(r)}a(Bx,"customValidate");Hx.exports={addRoleValidation:Bee,alterRoleValidation:Hee,dropRoleValidation:kee};function Gee(e){let{operation:t,permission:r}=e;if(t===gu.OPERATIONS_ENUM.ADD_ROLE||t===gu.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 Yt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?gu.ROLE_TYPES_ENUM.SUPER_USER:gu.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Gee,"validateNoSUPerms");function qee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Yt.ROLE_PERMS_ERROR,...e};return Cee(new Error,n,Dee.BAD_REQUEST)}else return null}a(qee,"generateRolePermResponse");function tr(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(tr,"addPermError")});var __=C((dNe,$x)=>{"use strict";var Fx=En(),Gx=Kr(),$ee=Pc(),ob=kx(),ab=oo(),uNe=require("uuid").v4,Vee=require("util"),fE=(H(),P($)),Kee=ae(),cb=Gx.searchByValue,Yee=Gx.searchByHash,Wee=Vee.promisify($ee.delete),zee=$s(),Qee=hu(),{hdb_errors:jee,handleHDBError:Fc}=he(),{HDB_ERROR_MSGS:qx,HTTP_STATUS_CODES:f_}=jee,{UserEventMsg:lb}=qs();$x.exports={addRole:Jee,alterRole:Xee,dropRole:Zee,listRoles:ete};function ib(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(ib,"scrubRoleDetails");async function Jee(e){let t=ob.addRoleValidation(e);if(t)throw t;e=ib(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 Fc(i)}if(n&&n.length>0)throw Fc(new Error,qx.ROLE_ALREADY_EXISTS(e.role),f_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Fx.insert(s),ab.signalUserChange(new lb(process.pid)),e=ib(e),e}a(Jee,"addRole");async function Xee(e){let t=ob.alterRoleValidation(e);if(t)throw t;e=ib(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Fx.update(r)}catch(s){throw Fc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Fc(new Error,"Invalid role id",f_.BAD_REQUEST,void 0,void 0,!0);return await ab.signalUserChange(new lb(process.pid)),e}a(Xee,"alterRole");async function Zee(e){let t=ob.dropRoleValidation(e);if(t)throw Fc(new Error,t,f_.BAD_REQUEST,void 0,void 0,!0);let r=new Qee(fE.SYSTEM_SCHEMA_NAME,fE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Yee(r));if(n.length===0)throw Fc(new Error,qx.ROLE_NOT_FOUND,f_.NOT_FOUND,void 0,void 0,!0);let s=new zee(fE.SYSTEM_SCHEMA_NAME,fE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await cb(s)),o=!1;if(Kee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Fc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,f_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Wee(c),ab.signalUserChange(new lb(process.pid)),`${n[0].role} successfully deleted`}a(Zee,"dropRole");async function ete(){return cb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(ete,"listRoles")});var ub={};Ue(ub,{start:()=>Yx,startOnMainThread:()=>nte});function Yx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Vx.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(tte.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 h=u.attributes[d];h.attribute_name=d,f.push(h)}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 rte(i)}}}async function rte(e){let t=Xe().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Kx.isEqual)(i,e)?void 0:(e.id=r.id,(0,_E.alterRole)(e))}return(0,_E.addRole)(e)}var _E,Vx,Kx,tte,nte,Wx=be(()=>{ve();_E=M(__()),Vx=require("yaml"),Kx=require("lodash"),tte=["super_user","cluster_user","structure_user"];a(Yx,"start");a(rte,"ensureRole");nte=Yx});async function hE(e){let t=(0,jx.pathToFileURL)(e).toString();if(ste)return h_||(h_=ite(ate)),(await(await h_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function ite(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),h_=new Compartment({console,Math,Date,fetch:ote,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Qx.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$r,tables:Vn,databases:$e})}};let n=await(0,zx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),h_}function ote(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 ate(){return{Resource:$r,tables:Vn}}var zx,Qx,jx,ste,h_,db=be(()=>{Xo();ve();zx=require("fs/promises"),Qx=require("path"),jx=require("url"),ste=!1;a(hE,"secureImport");a(ite,"getCompartment");a(ote,"secureOnlyFetch");a(ate,"getGlobalVars")});var _b={};Ue(_b,{handleFile:()=>cte});async function cte(e,t,r,n){let s=new Map,i=await hE(r);c(i.default)&&n.set((0,fb.dirname)(t),i.default),o(i,(0,fb.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 fb,Jx=be(()=>{db();fb=require("path");a(cte,"handleFile")});var mb={};Ue(mb,{start:()=>lte});function lte({resources:e}){e.set("login",hb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var hb,Xx=be(()=>{Xo();a(lte,"start");hb=class extends $r{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 T_={};Ue(T_,{addAnalyticsListener:()=>S_,calculateCPUUtilization:()=>EB,diffResourceUsage:()=>gB,recordAction:()=>rr,recordActionBinary:()=>Kn,setAnalyticsEnabled:()=>ute});function ute(e){fB=e}function dte(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 fte(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},pE.set(e,o)}function rr(e,t,r,n,s){if(!fB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=pE.get(i);o?dte(e,o):fte(i,e,t,r,n,s),mE||_te()}function Kn(e,t,r,n,s){rr(!!e,t,r,n,s)}function S_(e){mB.push(e)}function _te(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Gc.threadId,metrics:t};for(let[s,i]of pE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of pB){let h=Math.floor(c*d),_=o[h-1];if(h>l){let m=h-l;if(_===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:_,count:m}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await SB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Gc.threadId,byThread:!0,...n});for(let s of mB)s(t);pE=new Map,Gc.parentPort?Gc.parentPort.postMessage({type:hB,report:r}):RB({report:r})},_B).unref()}function EE(e,t,r){let n={id:(0,E_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function EB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function gB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function hte(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};EE(e,"table-size",l),qc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function Zx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getAuditSize(),o=dB.default.statSync(s.primaryStore.env.path).size,c=hte(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};EE(e,"database-size",u),qc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){qc.warn?.("Error getting DB size metrics",s)}}function eB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};EE(e,"storage-volume",o),qc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){qc.warn?.("Error getting DB volumne metrics",s)}}async function mte(e,t=6e4){let r=Eb(),n=TB(),s=new Promise(E=>{let A=performance.now();setImmediate(()=>{let N=performance.now();N-A>5e3&&qc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(N-A)+"ms"),A=performance.now()}),n.primaryStore.prefetch([1],()=>{let N=performance.now();N-A>5e3&&qc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(N-A)+"ms"),E(N-A)})}),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:A}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!A)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:N,threadId:v}=A;for(let F of N||[]){let{path:q,method:Y,type:ee,metric:oe,count:z,total:se,distribution:W,threads:pe,...Ae}=F;z||(z=1);let Pe=oe+(q?"-"+q:"");Y!==void 0&&(Pe+="-"+Y),ee!==void 0&&(Pe+="-"+ee);let me=c.get(Pe);if(me){if(me.threads){let lt=me.threads[v];if(lt)me=lt;else{me.threads[v]={...Ae};continue}}me.count||(me.count=1);let yt=me.count;for(let lt in Ae){let Rr=Ae[lt];typeof Rr=="number"&&(me[lt]=(me[lt]*yt+Rr*z)/(yt+z))}me.count+=z,se>=0&&(me.total+=se,me.ratio=me.total/me.count)}else me={period:t,...F},delete me.distribution,c.set(Pe,me),me.byThread&&(me.threads=[],me.threads[v]={...Ae},u.push(me));if(W){W=W.map(lt=>typeof lt=="number"?{value:lt,count:1}:lt);let yt=l.get(Pe);yt?yt.push(...W):l.set(Pe,W)}}await SB()}for(let E of u){let{path:A,method:N,type:v,metric:F,count:q,total:Y,distribution:ee,threads:oe,...z}=E;oe=oe.filter(se=>se);for(let se in z){if(typeof E[se]!="number")continue;let W=0;for(let pe of oe){let Ae=pe[se];typeof Ae=="number"&&(W+=Ae)}E[se]=W}E.count=oe.length,delete E.threads,delete E.byThread}for(let[E,A]of l){let N=c.get(E);A.sort((lt,Rr)=>lt.value>Rr.value?1:-1);let v=N.count-1,F=[],q=0,Y=0,ee;for(let lt of pB){let Rr=v*lt;for(;q<Rr;)ee=A[Y++],q+=ee.count,Y===1&&q--;let ss=A[Y>1?Y-2:0];ee||(ee=A[0]),F.push(ee.value-(ee.value-ss.value)*(q-Rr)/ee.count)}let[oe,z,se,W,pe,Ae,Pe,me,yt]=F;Object.assign(N,{p1:oe,p10:z,p25:se,median:W,p75:pe,p90:Ae,p95:Pe,p99:me,p999:yt})}let d;for(let[E,A]of c)A.id=(0,E_.getNextMonotonicTime)(),A.time=f,n.primaryStore.put(A.id,A,{append:!0}).then(N=>{N||n.primaryStore.put(A.id,A)}),d=!0;let h=Date.now(),{idle:_,active:m}=performance.eventLoopUtilization();if(d||m*10>_){let E=(0,E_.getNextMonotonicTime)(),A={id:E,metric:"main-thread-utilization",idle:_-tB,active:m-rB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,A,{append:!0}).then(N=>{N||n.primaryStore.put(E,A)})}tB=_,rB=m;let S=process.resourceUsage(),g=gB(m_,S);g.time=h,g.period=m_.time?h-m_.time:t,g.cpuUtilization=EB(m_,g.period),EE(n,"resource-usage",g),m_=g;let R=Xe();Zx(n,R),Zx(n,{system:R.system}),eB(n,R),eB(n,{system:R.system})}async function nB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Eb(){return sB||(sB=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function TB(){return iB||(iB=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function gte(){AB=!0;let e=(0,g_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await mte(_B,e),await nB(Eb(),pte),await nB(TB(),Ete)},Math.min(e/2,2147483647)).unref()}function RB(e,t){let r=e.report;r.threadId=t?.threadId||Gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(oB+=n.mean*n.count);r.totalBytesProcessed=oB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(aB.get(t))}),aB.set(t,t.performance.eventLoopUtilization())),r.id=(0,E_.getNextMonotonicTime)(),Eb().primaryStore.put(r.id,r),AB||gte(),Ste&&(yB=Ate(r))}async function Ate(e){if(await yB,!la){let r=(0,p_.dirname)((0,lB.getLogFilePath)());try{la=await(0,pb.open)((0,p_.join)(r,"analytics.log"),"r+")}catch{la=await(0,pb.open)((0,p_.join)(r,"analytics.log"),"w+")}}let t=(await la.stat()).size;if(t>Tte){let r=Buffer.alloc(t);await la.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await la.write(r,{position:0}),await la.truncate(r.length),t=r.length}await la.write(JSON.stringify(e)+`
|
|
19
|
+
`},"serialize"),compressible:!1,q:.8});Vr.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()}});NL={type:"application/json",serializeStream:gf,serialize:Rf,deserialize:z4,q:.5};Vr.set("*/*",NL);Vr.set("",NL);a(z4,"tryJSONParse");a(bf,"registerContentHandlers");Q4=require("fastify-plugin"),j4=Q4(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=fp(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(fp,"findBestSerializer");AL=KA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Of,"serialize");a(ra,"serializeMessage");a($A,"asyncSerialization");a(VA,"hasAsyncSerialization");a(J4,"streamToBuffer");X4=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(Z4,"isBufferEncoding");a(e3,"parseContentType");a(Ji,"getDeserializer");a(t3,"deserializerUnknownType");a(r3,"transformIterable");a(dp,"toCsvStream")});var jA={};Ue(jA,{start:()=>d3});function n3(e){if(e.kind!==Le.Kind.OPERATION_DEFINITION&&e.kind!==Le.Kind.FRAGMENT_DEFINITION)throw new yr(`Unexpected non-executable definition type ${e.kind}.`)}function IL(e){if(typeof e!="object"||e===null)throw new Ei("Request body must be an object.");if(!("query"in e))throw new Ei("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ei("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ei("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ei("Request body `operationName` field must be a string.")}function QA(e){return parseInt(e.value,10)}function PL(e){return parseFloat(e.value)}function DL(e,t,r){let n=r.get(e.name.value);return LL(n)?ML(n,t):{attribute:t,value:n}}function LL(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function ML(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],LL(n)?ML(n,t):{attribute:t,value:n}))}function s3(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:QA(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:PL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return DL(e.value,t,r);case Le.Kind.OBJECT:return vL(e.value,t,r);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Value type, ${e.value.kind}, is not supported.`)}}function vL(e,t,r){return e.fields.flatMap(n=>s3(n,t,r))}function i3(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:QA(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:PL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return DL(e.value,e.name.value,t);case Le.Kind.OBJECT:return vL(e.value,[e.name.value],t);case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Argument type, ${e.value.kind}, is not supported.`)}}function o3(e,t){return e.flatMap(r=>i3(r,t))}function _p(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 yr(`Fragment \`${n}\` not found.`);return _p(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return _p(r.selectionSet,t)}})}function UL(e,t){return _p(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:UL(r.selectionSet,t)}:r.name.value)}async function a3(e,t,r,n){let s=_i.getMatch(e.name.value,"graphql");if(s===void 0)throw new yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:UL(e.selectionSet,r),conditions:o3(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 xL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return QA(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]:xL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Value type, ${e.kind}, is not supported.`)}}function c3(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=xL(n.defaultValue)),n.type.kind===Le.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new yr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function l3(e,t,r,n){if(e.operation===Le.OperationTypeNode.SUBSCRIPTION)throw new yr("Subscriptions are not supported.");if(e.operation===Le.OperationTypeNode.MUTATION)throw new yr("Mutations are not supported yet.");let s=c3(e.variableDefinitions,t),i=await Promise.all(_p(e.selectionSet,r).map(c=>a3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function CL({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(n3(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 yr("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 yr(`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 yr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new yr(`Operation \`${r}\` not found.`);let l=await l3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function u3(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 IL(r),CL(r,e)}case"POST":{let r=await Ji(e.headers.get("content-type"),!0)(e._nodeRequest);return IL(r),CL(r,e)}default:throw new Ei("Method Not Allowed",405,{Allow:"GET, POST"})}}function d3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await u3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ei)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 yr)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 Ei)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 yr)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,yr,Ei,BL=be(()=>{Le=M(require("graphql"));zi();Jl();a(n3,"assertExecutableDefinitionNode");a(IL,"assertRequestParams");a(QA,"processIntValueNode");a(PL,"processFloatValueNode");a(DL,"processVariableNode");a(LL,"isObject");a(ML,"transformObjectIntoQueryCondition");a(s3,"processObjectFieldNode");a(vL,"processObjectValueNode");a(i3,"processArgumentNode");a(o3,"buildConditionsQuery");a(_p,"fillInFragments");a(UL,"buildSelectQuery");a(a3,"processFieldNode");a(xL,"processConstValueNode");a(c3,"resolveVariables");a(l3,"executeOperation");a(CL,"resolver");yr=class extends Error{static{a(this,"GraphQLQueryingError")}},Ei=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(u3,"graphqlQueryingHandler");a(d3,"start")});var Si=C((tRe,FL)=>{"use strict";var kL=ae(),HL=(H(),P($)),eu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,gi=require("joi"),na={schema_format:{pattern:eu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},f3=gi.alternatives(gi.string().min(1).max(na.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+na.schema_format.message}),gi.number(),gi.array()).required(),_3=gi.alternatives(gi.string().min(1).max(na.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+na.schema_format.message}),gi.number()),h3=gi.alternatives(gi.string().min(1).max(na.schema_length.maximum).pattern(eu).messages({"string.pattern.base":"{:#label} "+na.schema_format.message}),gi.number()).required();function m3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>na.schema_length.maximum?`'${e}' maximum of 250 characters`:eu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(m3,"checkValidTable");function p3(e,t){return kL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(p3,"validateSchemaExists");function E3(e,t){let r=t.state.ancestors[0].schema;return kL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(E3,"validateTableExists");function g3(e,t){return e.toLowerCase()===HL.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${HL.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(g3,"validateSchemaName");FL.exports={common_validators:na,schema_regex:eu,hdb_schema_table:f3,validateSchemaExists:p3,validateTableExists:E3,validateSchemaName:g3,checkValidTable:m3,hdb_database:_3,hdb_table:h3}});var XA=C((nRe,qL)=>{var{hdb_table:S3,hdb_database:GL}=Si(),T3=rt(),JA=require("joi"),A3={undefined:"undefined",null:"null"},R3=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||A3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),y3=JA.object({database:GL,schema:GL,table:S3,records:JA.array().items(JA.object().custom(R3)).required()});qL.exports=function(e){return T3.validateBySchema(e,y3)}});var VL=C((iRe,$L)=>{"use strict";var ZA=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")}};$L.exports=ZA});var YL=C((aRe,KL)=>{"use strict";var eR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};KL.exports=eR});var JL={};Ue(JL,{HAS_EXPIRATION:()=>pp,HAS_RESIDENCY_ID:()=>aR,HAS_STRUCTURE_UPDATE:()=>gp,LAST_TIMESTAMP_PLACEHOLDER:()=>Pf,LOCAL_TIMESTAMP:()=>b3,METADATA:()=>Nf,NEW_TIMESTAMP_PLACEHOLDER:()=>zL,NO_TIMESTAMP:()=>tR,PENDING_LOCAL_TIME:()=>cR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>oR,RecordEncoder:()=>iR,TIMESTAMP_ASSIGN_LAST:()=>N3,TIMESTAMP_ASSIGN_NEW:()=>QL,TIMESTAMP_ASSIGN_PREVIOUS:()=>jL,TIMESTAMP_PLACEHOLDER:()=>hp,TIMESTAMP_RECORD_PREVIOUS:()=>rR,handleLocalTimeForGets:()=>Sp,recordUpdater:()=>lR,removeEntry:()=>Tc});function I3(){return Cf[0]=Cf[0]^64,O3.getFloat64(0)}function Sp(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?.[Nf];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?.[Nf]>=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[Nf];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,Sc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Sc.length;u++){let f=Sc[u].deref();(!f||f.isDone||f.isCommitted)&&Sc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function lR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?tu=i?.localTime?rR|jL:tR:tu=l?i?.localTime?rR|16384:QL|16384:tR;let _=u?.expiresAt;if(_>=0&&(c|=pp),If=c,nR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:tu>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(sR=E,If|=aR,g|=Ac),R!==E&&(g|=Rc,R||(R=0)),c&pp&&(g|=Lf),u?.originatingOperation&&(g|=Df),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&Un&&(r.getBinaryFast(i.localTime)||ta(i.value));let A;if(s!==void 0&&(A=lp(()=>e.put(n,s,m),n,e.rootStore),mc&&(g|=Un)),l){let N=u?.user?.username;if(h&&(lp(()=>e.encoder.encode(h),n,e.rootStore),mc&&(g|=Un)),e.encoder.hasStructureUpdate&&(g|=gp,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let v=i?.localTime,F=r.get(v);if(F){let q=wt(F).previousLocalTime;return A=r.put(v,ru(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,wf,g,E,R,_),{ifVersion:S}),A}}A=r.put(s===void 0?zL:Pf,ru(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,wf,g,E,R,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return A}catch(R){throw R.message+=" id: "+n+" options: "+m,R}}}function Tc(e,t,r){if(t)return t.value&&t.metadataFlags&Un&&!e.auditStore.getBinaryFast(t.localTime)&&ta(t.value),e.remove(t.key,r)}var WL,mp,hp,Pf,oR,zL,b3,Nf,Cf,O3,tR,QL,N3,jL,rR,pp,aR,cR,gp,w3,wf,tu,If,nR,sR,iR,Sc,nu=be(()=>{WL=require("msgpackr");Xi();mp=M(J());cs();cs();hp=new Uint8Array([1,1,1,1,4,64,0,0]),Pf=new Uint8Array([1,1,1,1,1,0,0,0]),oR=new Uint8Array([1,1,1,1,3,64,0,0]),zL=new Uint8Array([1,1,1,1,0,64,0,0]),b3=Symbol("local-timestamp"),Nf=Symbol("metadata"),Cf=new Uint8Array(8),O3=new DataView(Cf.buffer,0,8),tR=0,QL=0,N3=1,jL=3,rR=4,pp=16,aR=32,cR=1,gp=256,tu=0,If=-1,nR=-1,sR=0,iR=class extends WL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(tu||If>=0){let o=0,c=tu;c&&(o+=8,tu=0);let l=If,u=nR,f=sR;l>=0&&(o+=4,If=-1,u>=0&&(o+=8,nR=-1),f&&(o+=4,sR=0));let d=w3=r.call(this,s,i|2048|o);wf=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(hp[4]=c,hp[5]=c>>8,d.set(hp,h),h+=8),mc&&(l|=Un),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Ep<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return wf=r.call(this,s,i),wf};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(Cf,0,c),c+=8;else for(let h=0;h<8;h++)Cf[h]=t[c++];l=I3(),i=t[c]}let u,f;i<32&&(i===Ep?(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&pp&&(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=pc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[Nf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:pc(()=>super.decode(t,r),this.rootStore)}catch(c){return mp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(I3,"getTimestamp");a(Sp,"handleLocalTimeForGets");Sc=[];setInterval(()=>{for(let e=0;e<Sc.length;e++){let t=Sc[e].deref();!t||t.isDone||t.isCommitted?Sc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(mp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):mp.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(lR,"recordUpdater");a(Tc,"removeEntry")});var Mf=C((_Re,ZL)=>{"use strict";var XL=ce(),C3=(H(),P($)),{RecordEncoder:P3}=(nu(),P(JL));XL.initSync();var D3=XL.get(C3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,uR=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=D3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:P3})}};ZL.exports=uR});var vf=C((mRe,eM)=>{"use strict";var xn=ce(),ls=(H(),P($));xn.initSync();var Tp=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=xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=xn.get(ls.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};eM.exports=Tp;Tp.MAX_DBS=1e4});var dt=C((ERe,uM)=>{"use strict";var fR=require("lmdb"),Bs=require("fs-extra"),Bn=require("path"),Ap=un(),nM=J(),mn=Cn().LMDB_ERRORS_ENUM,Rp=YL(),_R=Mf(),sM=vf(),sa=Ut(),tM=(H(),P($)),{table:L3,resetDatabases:M3}=(ve(),P(it)),rM=ce(),Hs=sa.INTERNAL_DBIS_NAME,iM=sa.DBI_DEFINITION_NAME,v3="data.mdb",U3="lock.mdb",Uf=".mdb",x3="-lock",dR=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[sa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[sa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new fR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function yp(e,t){if(e===void 0)throw new Error(mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(mn.ENV_NAME_REQUIRED)}a(yp,"pathEnvNameValidation");async function hR(e,t,r=!0){try{await Bs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(mn.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+Uf);return await Bs.access(n,Bs.constants.R_OK|Bs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Bs.access(Bn.join(e,t,v3),Bs.constants.R_OK|Bs.constants.F_OK),Bn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(mn.INVALID_ENVIRONMENT)}else throw new Error(mn.INVALID_ENVIRONMENT);throw n}}a(hR,"validateEnvironmentPath");function bp(e,t){if(Ap.validateEnv(e),t===void 0)throw new Error(mn.DBI_NAME_REQUIRED)}a(bp,"validateEnvDBIName");async function B3(e,t,r=!1,n=!1){yp(e,t);let s=Bn.basename(e);t=t.toString();let i=rM.get(tM.CONFIG_PARAMS.DATABASES);i||rM.setProperty(tM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await hR(e,t,n),oM(e,t,r)}catch(o){if(o.message===mn.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Bs.mkdirp(n?c:e);let l=new sM(n?c:c+Uf,!1),u=fR.open(l);u.dbis=Object.create(null);let f=new _R(!1);u.openDB(Hs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=mR(e,t,r);return u[sa.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(B3,"createEnvironment");async function H3(e,t,r,n=!0){yp(e,t),t=t.toString();let s=Bn.join(e,t);return L3({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(H3,"copyEnvironment");async function oM(e,t,r=!1){yp(e,t),t=t.toString();let n=mR(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await hR(e,t),i=Bn.join(e,t+Uf),o=s!=i,c=new sM(s,o),l=fR.open(c);l.dbis=Object.create(null);let u=cM(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[sa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(oM,"openEnvironment");async function k3(e,t,r=!1){yp(e,t),t=t.toString();let n=Bn.join(e,t+Uf),s=await hR(e,t);if(global.lmdb_map!==void 0){let i=mR(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await aM(o),delete global.lmdb_map[i]}}await Bs.remove(s),await Bs.remove(s===n?s+x3:Bn.join(Bn.dirname(s),U3))}a(k3,"deleteEnvironment");async function aM(e){Ap.validateEnv(e);let t=e[sa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(aM,"closeEnvironment");function mR(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(mR,"getCachedEnvironmentName");function F3(e){Ap.validateEnv(e);let t=Object.create(null),r=us(e,Hs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Hs)try{t[n]=Object.assign(new Rp,s)}catch{nM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F3,"listDBIDefinitions");function cM(e){Ap.validateEnv(e);let t=[],r=us(e,Hs);for(let{key:n}of r.getRange({start:!1}))n!==Hs&&t.push(n);return t}a(cM,"listDBIs");function G3(e,t){let n=us(e,Hs).getEntry(t),s=new Rp;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{nM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(G3,"getDBIDefinition");function lM(e,t,r,n=!r){if(bp(e,t),t=t.toString(),t===Hs)throw new Error(mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return us(e,t)}catch(s){if(s.message===mn.DBI_DOES_NOT_EXIST){let i=new _R(r,n===!0),o=e.openDB(t,i),c=new Rp(r===!0,n);return o[iM]=c,us(e,Hs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(lM,"createDBI");function us(e,t){if(bp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hs?r=G3(e,t):r=new Rp,r===void 0)throw new Error(mn.DBI_DOES_NOT_EXIST);let n;try{let s=new _R(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(mn.DBI_DOES_NOT_EXIST):s}return n[iM]=r,e.dbis[t]=n,n}a(us,"openDBI");function q3(e,t){bp(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[sa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(q3,"statDBI");async function $3(e,t){try{let r=Bn.join(e,t+Uf);return(await Bs.stat(r)).size}catch{throw new Error(mn.INVALID_ENVIRONMENT)}}a($3,"environmentDataSize");function V3(e,t){if(bp(e,t),t=t.toString(),t===Hs)throw new Error(mn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,Hs).removeSync(t)}a(V3,"dropDBI");function K3(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{us(e,i)}catch(o){if(o.message===mn.DBI_DOES_NOT_EXIST)lM(e,i,i!==t,i===t),n=!0;else throw o}}n&&M3()}a(K3,"initializeDBIs");uM.exports={openDBI:us,openEnvironment:oM,createEnvironment:B3,listDBIs:cM,listDBIDefinitions:F3,createDBI:lM,dropDBI:V3,statDBI:q3,deleteEnvironment:k3,initializeDBIs:K3,TransactionCursor:dR,environmentDataSize:$3,copyEnvironment:H3,closeEnvironment:aM}});var fM=C((SRe,dM)=>{"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}};dM.exports=pR});var hM=C((ARe,_M)=>{"use strict";var ER=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}};_M.exports=ER});var pM=C((yRe,mM)=>{"use strict";var gR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};mM.exports=gR});var bc=C((IRe,SM)=>{"use strict";var Y3=dt(),W3=fM(),z3=hM(),Q3=pM(),Ti=un(),xf=Cn().LMDB_ERRORS_ENUM,j3=Ut(),Zi=(H(),P($)),J3=ae(),X3=require("uuid"),ORe=require("lmdb"),{handleHDBError:Z3,hdb_errors:eX}=he(),{OVERFLOW_MARKER:NRe,MAX_SEARCH_KEY_LENGTH:wRe}=j3,EM=ce();EM.initSync();var Op=EM.get(Zi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),SR=Zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,yc=Zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tX(e,t,r,n,s=Ti.getNextMonotonicTime()){yR(e,t,r,n),TR(e,t,r);let i=new W3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];gM(u,!0,s);let f=rX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return AR(o,c,n,i,s)}a(tX,"insertRecords");function rX(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][Zi.FUNC_VAL],n[o]=c)}let l=Ti.getIndexedValues(c),u=e.dbis[o];if(l){Op&&u.prefetch(l.map(f=>({key:f,value:s})),Np);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Op&&e.dbis[t].prefetch([s],Np),e.dbis[t].put(s,n,n[yc])})}a(rX,"insertRecord");function nX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(nX,"removeSkippedRecords");function gM(e,t,r){let n=r>0;(n||!Number.isInteger(e[yc]))&&(e[yc]=r||(r=Ti.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[SR]))&&(e[SR]=r||Ti.getNextMonotonicTime()):delete e[SR]}a(gM,"setTimestamps");function TR(e,t,r){r.indexOf(Zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Y3.initializeDBIs(e,t,r)}a(TR,"initializeTransaction");async function sX(e,t,r,n,s=Ti.getNextMonotonicTime()){yR(e,t,r,n),TR(e,t,r);let i=new z3,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=RR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return AR(c,l,n,i,s,o)}a(sX,"updateRecords");async function iX(e,t,r,n,s=Ti.getNextMonotonicTime()){try{yR(e,t,r,n)}catch(l){throw Z3(l,l.message,eX.HTTP_STATUS_CODES.BAD_REQUEST)}TR(e,t,r);let i=new Q3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;J3.isEmpty(u[t])?(f=X3.v4(),u[t]=f):f=u[t];let d=RR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return AR(o,c,n,i,s)}a(iX,"upsertRecords");async function AR(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||Ti.getNextMonotonicTime(),nX(r,i),n}a(AR,"finalizeWrite");function RR(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(gM(r,!f,o),Number.isInteger(r[yc])&&u[yc]>r[yc])return!1;f&&s.original_records.push(u);let d,h=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 A=S([[u]]);Array.isArray(A)&&(S=A[0][Zi.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ti.getIndexedValues(R);if(E){Op&&g.prefetch(E.map(A=>({key:A,value:n})),Np);for(let A=0,N=E.length;A<N;A++)g.remove(E[A],n)}if(E=Ti.getIndexedValues(S),E){Op&&g.prefetch(E.map(A=>({key:A,value:n})),Np);for(let A=0,N=E.length;A<N;A++)g.put(E[A],n)}}let _={...u,...r};c.put(n,_,_[yc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:RR(e,t,r,n,s,i,o))}a(RR,"updateUpsertRecord");function oX(e,t,r){if(Ti.validateEnv(e),t===void 0)throw new Error(xf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xf.WRITE_ATTRIBUTES_REQUIRED):new Error(xf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oX,"validateBasic");function yR(e,t,r,n){if(oX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(xf.RECORDS_REQUIRED):new Error(xf.RECORDS_MUST_BE_ARRAY)}a(yR,"validateWrite");function Np(){}a(Np,"noop");SM.exports={insertRecords:tX,updateRecords:sX,upsertRecords:iX}});var eo=C((PRe,aX)=>{aX.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 AM=C((DRe,TM)=>{"use strict";var cX=require("uuid"),bR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||cX.v4(),this.schema_table=`${this.schema}.${this.table}`}};TM.exports=bR});var wp=C((MRe,RM)=>{"use strict";var lX=AM(),OR=class extends lX{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};RM.exports=OR});var bM=C((URe,yM)=>{"use strict";yM.exports=dX;var uX="inserted";function dX(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===uX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(dX,"returnObject")});var Ip=C((HRe,NM)=>{"use strict";var fX=(H(),P($)),NR=dt(),_X=bc(),{getSystemSchemaPath:hX,getSchemaPath:mX}=Et(),BRe=eo(),{validateBySchema:pX}=rt(),Bf=require("joi"),EX=wp(),gX=bM(),{handleHDBError:SX,hdb_errors:TX,ClientError:AX}=he(),OM=ae(),{HTTP_STATUS_CODES:RX}=TX,yX="inserted";NM.exports=bX;async function bX(e){let t=pX(e,Bf.object({database:Bf.string(),schema:Bf.string(),table:Bf.string().required(),attribute:Bf.string().required()}));if(t)throw new AX(t.message);let r=!e.skip_table_check&&OM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw SX(new Error,r,RX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=OM.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 EX(e.schema,e.table,e.attribute,e.id);try{let i=await NR.openEnvironment(mX(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}`);NR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await NR.openEnvironment(hX(),fX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await _X.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return gX(yX,c,{records:[s]},l)}catch(i){throw i}}a(bX,"lmdbCreateAttribute")});var Hf=C((GRe,IM)=>{"use strict";var to=ae(),wM=J(),FRe=XA(),{getDatabases:OX}=(ve(),P(it)),{ClientError:Oc}=he();IM.exports=NX;function NX(e){if(to.isEmpty(e))throw new Oc("invalid update parameters defined.");if(to.isEmptyOrZeroLength(e.schema))throw new Oc("invalid schema specified.");if(to.isEmptyOrZeroLength(e.table))throw new Oc("invalid table specified.");if(!Array.isArray(e.records))throw new Oc("records must be an array");let t=OX()[e.schema]?.[e.table];if(to.isEmpty(t))throw new Oc(`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&&to.isEmptyOrZeroLength(o[r]))throw wM.error("a valid hash attribute must be provided with update record:",o),new Oc("a valid hash attribute must be provided with update record, check log for more info");if(!to.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw wM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Oc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!to.isEmpty(o[r])&&o[r]!==""&&n.has(to.autoCast(o[r]))&&(o.skip=!0),n.add(to.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(NX,"insertUpdateValidate")});var PM=C(($Re,CM)=>{"use strict";var wR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};CM.exports=wR});var MM=C((KRe,LM)=>{"use strict";var IR=dt(),wX=J(),DM=Cn().LMDB_ERRORS_ENUM;LM.exports=IX;async function IX(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 IR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==DM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await IR.closeEnvironment(global.lmdb_map[n]),await IR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==DM.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){wX.error(t)}}a(IX,"cleanLMDBMap")});var YM=C((zRe,KM)=>{"use strict";var CR=require("recursive-iterator"),CX=require("alasql"),PR=require("clone"),vM=ae(),{handleHDBError:UM,hdb_errors:PX}=he(),{HDB_ERROR_MSGS:xM,HTTP_STATUS_CODES:BM}=PX,{getDatabases:DX}=(ve(),P(it)),LX=["DISTINCT_ARRAY"],HM=Symbol("validateTables"),DR=Symbol("validateTable"),WRe=Symbol("getAllColumns"),kM=Symbol("validateAllColumns"),Cp=Symbol("findColumn"),FM=Symbol("validateOrderBy"),kf=Symbol("validateSegment"),LR=Symbol("validateColumn"),GM=Symbol("setColumnsForTable"),qM=Symbol("checkColumnsForAsterisk"),$M=Symbol("validateGroupBy"),VM=Symbol("hasColumns"),MR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[HM](),this[qM](),this[kM]()}[HM](){if(this[VM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[DR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[DR](t.table)})}}[VM](){let t=!1,r=new CR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[DR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=DX();if(!r[t.databaseid])throw UM(new Error,xM.SCHEMA_NOT_FOUND(t.databaseid),BM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw UM(new Error,xM.TABLE_NOT_FOUND(t.databaseid,t.tableid),BM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=PR(s);i.table=PR(t),this.attributes.push(i)})}[Cp](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)}[qM](){let t=new CR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[GM](r.tableid)}[GM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new CX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kM](){this[kf](this.statement.columns,!1),this[kf](this.statement.joins,!1),this[kf](this.statement.where,!1),this[$M](this.statement.group,!1),this[kf](this.statement.order,!0)}[kf](t,r){if(!t)return;let n=new CR(t),s=[];for(let{node:i,path:o}of n)!vM.isEmpty(i)&&!vM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[FM](i):s.push(this[LR](i)));return s}[$M](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&LX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=PR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Cp](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[Cp](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`}[FM](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[LR](t)}[LR](t){let r=this[Cp](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]}};KM.exports=MR});var jM=C((jRe,QM)=>{"use strict";var WM=require("lodash"),Ff=require("mathjs"),MX=require("jsonata"),zM=ae();QM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?WM.uniqWith(e,WM.isEqual):e,"distinct_array"),searchJSON:vX,mad:Gf.bind(null,Ff.mad),mean:Gf.bind(null,Ff.mean),mode:Gf.bind(null,Ff.mode),prod:Gf.bind(null,Ff.prod),median:Gf.bind(null,Ff.median)};function Gf(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(Gf,"aggregateFunction");function vX(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(zM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),zM.isEmpty(this.__ala__.res[r])){let n=MX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(vX,"searchJSON")});var XM=C((XRe,JM)=>{"use strict";var er=require("moment"),vR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;JM.exports={current_date:a(()=>er().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>er().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return er(e).utc().format("YYYY");case"month":return er(e).utc().format("MM");case"day":return er(e).utc().format("DD");case"hour":return er(e).utc().format("HH");case"minute":return er(e).utc().format("mm");case"second":return er(e).utc().format("ss");case"millisecond":return er(e).utc().format("SSS");default:break}},"extract"),date:a(e=>er(e).utc().format(vR),"date"),date_format:a((e,t)=>er(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>er(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>er(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=er(e).utc(),s=er(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>er().utc().valueOf(),"now"),get_server_time:a(()=>er().format(vR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(vR),"offset_utc")}});var rv=C((eye,tv)=>{"use strict";var UX=require("@turf/area"),xX=require("@turf/length"),BX=require("@turf/circle"),HX=require("@turf/difference"),kX=require("@turf/distance"),FX=require("@turf/boolean-contains"),GX=require("@turf/boolean-equal"),qX=require("@turf/boolean-disjoint"),$X=require("@turf/helpers"),ZM=(H(),P($)),qe=ae(),ro=J();tv.exports={geoArea:VX,geoLength:KX,geoCircle:YX,geoDifference:WX,geoDistance:ev,geoNear:zX,geoContains:QX,geoEqual:jX,geoCrosses:JX,geoConvert:XX};function VX(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return UX.default(e)}catch(t){return ro.trace(t,e),NaN}}a(VX,"geoArea");function KX(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return xX.default(e,{units:t||"kilometers"})}catch(r){return ro.trace(r,e),NaN}}a(KX,"geoLength");function YX(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return BX.default(e,t,{units:r||"kilometers"})}catch(n){return ro.trace(n,e,t),NaN}}a(YX,"geoCircle");function WX(e,t){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return HX(e,t)}catch(r){return ro.trace(r,e,t),NaN}}a(WX,"geoDifference");function ev(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return kX.default(e,t,{units:r||"kilometers"})}catch(n){return ro.trace(n,e,t),NaN}}a(ev,"geoDistance");function zX(e,t,r,n){if(qe.isEmpty(e)||qe.isEmpty(t))return!1;if(qe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ev(e,t,n)<=r}catch(s){return ro.trace(s,e,t),!1}}a(zX,"geoNear");function QX(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return FX.default(e,t)}catch(r){return ro.trace(r,e,t),!1}}a(QX,"geoContains");function jX(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return GX.default(e,t)}catch(r){return ro.trace(r,e,t),!1}}a(jX,"geoEqual");function JX(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return!qX.default(e,t)}catch(r){return ro.trace(r,e,t),!1}}a(JX,"geoCrosses");function XX(e,t,r){if(qe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(qe.isEmpty(t))throw new Error("geo_type is required");if(qe.isEmpty(ZM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(ZM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),$X[t](e,r)}a(XX,"geoConvert")});var Pp=C((rye,nv)=>{var Nc=jM(),Hn=XM(),Ai=rv();nv.exports=e=>{e.aggr.mad=e.aggr.MAD=Nc.mad,e.aggr.mean=e.aggr.MEAN=Nc.mean,e.aggr.mode=e.aggr.MODE=Nc.mode,e.aggr.prod=e.aggr.PROD=Nc.prod,e.aggr.median=e.aggr.MEDIAN=Nc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Nc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Nc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hn.current_time,e.fn.extract=e.fn.EXTRACT=Hn.extract,e.fn.date=e.fn.DATE=Hn.date,e.fn.date_format=e.fn.DATE_FORMAT=Hn.date_format,e.fn.date_add=e.fn.DATE_ADD=Hn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hn.date_diff,e.fn.now=e.fn.NOW=Hn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hn.get_server_time,e.fn.getdate=e.fn.GETDATE=Hn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ai.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ai.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ai.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ai.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ai.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ai.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ai.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ai.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ai.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ai.geoNear}});var av=C((nye,ov)=>{"use strict";var qf=require("lodash"),pn=require("alasql");pn.options.cache=!1;var ZX=Pp(),sv=require("clone"),Dp=require("recursive-iterator"),Be=J(),ze=ae(),su=kn(),e6=(H(),P($)),{hdb_errors:t6}=he(),{getDatabases:iv}=(ve(),P(it)),r6="IS NULL",ks="There was a problem performing this search. Please check the logs and try again.";ZX(pn);var UR=class{static{a(this,"SQLSearch")}constructor(t,r){if(ze.isEmpty(t))throw Be.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(),ze.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!ze.isEmptyOrZeroLength(n))return Be.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Be.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Be.error(n),new Error(ks)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Be.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Be.error(n),new Error(ks)}if(Object.keys(this.data).length===0)return Be.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Be.error("Error thrown from processJoins in SQLSearch class method search."),Be.error(n),new Error(ks)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Be.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Be.error(n),new Error(ks)}try{return t=await this._finalSQL(),t}catch(n){throw Be.error("Error thrown from finalSQL in SQLSearch class method search."),Be.error(n),new Error(ks)}}_getColumns(){let t=new Dp(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(sv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=qf.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=iv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ze.isEmpty(this.statement.where)){Be.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Dp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ze.isEmpty(r)&&r.right)if(ze.isNotEmptyAndHasValue(r.right.value)){let n=ze.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=ze.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pn.yy.LogicValue({value:i}):n instanceof pn.yy.StringValue&&ze.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pn.yy.NumValue({value:i}))});if(t){Be.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Dp(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(!ze.isEmpty(e6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ze.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ze.isEmptyOrZeroLength(r.left.columnid)||ze.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(ze.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"=":!ze.isEmpty(r.right.value)||!ze.isEmpty(r.left.value)?n.add(ze.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(ze.isEmptyOrZeroLength(this.all_table_attributes)&&ze.isEmptyOrZeroLength(this.statement.from)&&ze.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&&qf.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(ze.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);ze.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(ze.isEmptyOrZeroLength(this.all_table_attributes)&&!ze.isEmptyOrZeroLength(this.columns.columns))return t;if(ze.isEmptyOrZeroLength(this.all_table_attributes)&&ze.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pn.promise(r)}catch(r){throw Be.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Be.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(sv(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(ze.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(r6)>-1&&this.tables.forEach(s=>{let i={columnid:iv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=qf.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),!ze.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!ze.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await su.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw Be.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Be.error(f),new Error(ks)}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 h=await su.getDataByValue(d);for(let[_,m]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw Be.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Be.error(f),new Error(ks)}else if(!ze.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!ze.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let m=await su.getDataByValue(c,_.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 Be.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Be.error(f),new Error(ks)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await su.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw Be.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Be.error(f),new Error(ks)}}}_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 pn.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 pn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pn.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 pn.yy.FuncValue:new pn.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(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let m=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(m+=" ON "+_.on.toString()),i.push(m),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let m=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${m}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${m}\` AS "${S}.${m}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.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(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.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 h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(_,s);h=await pn.promise(m,t),t=null}catch(_){throw Be.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Be.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,m=h.length;_<m;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let m=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=qf.difference(m,[..._.keys].map(g=>g.toString()));for(let g=0,R=S.length;g<R;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Dp(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=qf.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 Be.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Be.error(i),new Error(ks)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await su.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let m=0;m<u;m++){let S=s.columns[m],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw Be.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Be.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();Be.trace(`Final SQL: ${s}`),n=await pn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Be.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Be.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Be.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 Be.error(t6.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Be.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await su.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Be.error("There was an error when processing this SQL operation. Check your logs"),Be.error(o),new Error(ks)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ov.exports=UR});var Kr=C((iye,cv)=>{"use strict";var n6=YM();cv.exports={searchByConditions:i6,searchByHash:o6,searchByValue:a6,search:c6};var xR=kn(),{transformReq:BR}=ae(),s6=av();async function i6(e){return BR(e),xR.searchByConditions(e)}a(i6,"searchByConditions");async function o6(e){BR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of xR.searchByHash(e))r&&t.push(r);return t}a(o6,"searchByHash");async function a6(e){BR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of xR.searchByValue(e))t.push(r);return t}a(a6,"searchByValue");function c6(e,t){try{let r=new n6(e);r.validate(),new s6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(c6,"search")});var no=C((aye,fv)=>{"use strict";var $f=require("crypto"),l6=ce(),{CONFIG_PARAMS:u6}=(H(),P($)),uv="aes-256-cbc",d6=32,f6=16,HR=64,dv=32,_6=HR+dv,lv=new Map;fv.exports={encrypt:h6,decrypt:m6,createNatsTableStreamName:p6};function h6(e){let t=$f.randomBytes(d6),r=$f.randomBytes(f6),n=$f.createCipheriv(uv,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(h6,"encrypt");function m6(e){let t=e.substr(0,HR),r=e.substr(HR,dv),n=e.substr(_6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=$f.createDecipheriv(uv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(m6,"decrypt");function p6(e,t){let r=l6.get(u6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=lv.get(r);return n||(n=$f.createHash("md5").update(r).digest("hex"),lv.set(r,n)),n}a(p6,"createNatsTableStreamName")});var so=C((uye,pv)=>{"use strict";var lye=Kr(),Vf=J(),{validateBySchema:_v}=rt(),wc=require("joi"),E6=no(),Lp=ae(),{handleHDBError:Mp,hdb_errors:g6,ClientError:hv}=he(),{HDB_ERROR_MSGS:vp,HTTP_STATUS_CODES:kR}=g6,mv=ce();mv.initSync();var{getDatabases:FR}=(ve(),P(it)),S6=require("fs-extra"),T6=(H(),P($));pv.exports={describeAll:A6,describeTable:Up,describeSchema:R6};async function A6(e={}){try{let t=Lp.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=FR(),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 h=i[d];for(let _ in h)try{let m;if(t||s||r)m=await Up({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;m=await Up({schema:d,table:_,exact_count:u},S)}m&&l.push(m)}catch(m){Vf.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 Vf.error("Got an error in describeAll"),Vf.error(t),Mp(new Error,vp.DESCRIBE_ALL_ERR)}}a(A6,"describeAll");async function Up(e,t){Lp.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=_v(e,wc.object({database:wc.string(),table:wc.string().required(),exact_count:wc.boolean().strict()}));if(i)throw new hv(i.message);let c=FR()[r];if(!c)throw Mp(new Error,vp.SCHEMA_NOT_FOUND(e.schema),kR.NOT_FOUND);let l=c[n];if(!l)throw Mp(new Error,vp.TABLE_NOT_FOUND(e.schema,e.table),kR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(m=>({type:m.type,name:m.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(m=>{m.describe&&(_[m.attribute_name]=!0)}),l.attributes.forEach(m=>{_[m.name]&&u(m)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await S6.stat(l.primaryStore.env.path)).size}catch(_){Vf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),mv.get(T6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=E6.createNatsTableStreamName(h.schema,h.name));try{let _=await l.getRecordCount({exactCount:!!e.exact_count});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Vf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Up,"descTable");async function R6(e){Lp.transformReq(e);let t=_v(e,wc.object({database:wc.string(),exact_count:wc.boolean().strict()}));if(t)throw new hv(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=FR()[n];if(!i)throw Mp(new Error,vp.SCHEMA_NOT_FOUND(e.schema),kR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Lp.isEmpty(l)||l.describe){let u=await Up({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(R6,"describeSchema")});var Fs=C((hye,Av)=>{var y6=eo(),{callbackify:gv,promisify:b6}=require("util"),{getDatabases:Sv}=(ve(),P(it));Av.exports={setSchemaDataToGlobal:Ev,getTableSchema:O6,getSystemSchema:N6,setSchemaDataToGlobalAsync:b6(Ev)};var Tv=so(),fye=gv(Tv.describeAll),_ye=gv(Tv.describeTable);function Ev(e){global.hdb_schema=Sv(),e&&e()}a(Ev,"setSchemaDataToGlobal");function O6(e,t,r){let n=Sv()[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(O6,"getTableSchema");function N6(){return y6}a(N6,"getSystemSchema")});var qR=C((pye,bv)=>{var w6=rt(),GR=require("joi"),{hdb_table:I6,hdb_database:Rv}=Si(),yv={schema:Rv,database:Rv,table:I6},C6={date:GR.date().iso().required()},P6={timestamp:GR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};bv.exports=function(e,t){let r=t==="timestamp"?{...yv,...P6}:{...yv,...C6},n=GR.object(r);return w6.validateBySchema(e,n)}});var wv=C((Eye,Nv)=>{var D6=rt(),$R=require("joi"),{hdb_table:L6,hdb_database:Ov}=Si(),M6=$R.object({schema:Ov,database:Ov,table:L6,hash_values:$R.array().required(),ids:$R.array()});Nv.exports=function(e){return D6.validateBySchema(e,M6)}});var WR=C((gye,Iv)=>{"use strict";var VR=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}},KR=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}},YR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Iv.exports={InsertObject:VR,NoSQLSeachObject:KR,DeleteResponseObject:YR}});var Pc=C((Tye,Mv)=>{"use strict";var Pv=qR(),v6=wv(),Ic=ae(),Cv=require("moment"),Dv=J(),{promisify:U6,callbackify:x6}=require("util"),Cc=(H(),P($)),B6=Fs(),zR=U6(B6.getTableSchema),QR=kn(),{DeleteResponseObject:H6}=WR(),{handleHDBError:ia,hdb_errors:k6}=he(),{HDB_ERROR_MSGS:xp,HTTP_STATUS_CODES:oa}=k6,F6="records successfully deleted",G6=x6(Lv);Mv.exports={delete:G6,deleteRecord:Lv,deleteFilesBefore:q6,deleteAuditLogsBefore:$6};async function q6(e){let t=Pv(e,"date");if(t)throw ia(t,t.message,oa.BAD_REQUEST,void 0,void 0,!0);if(Ic.transformReq(e),!Cv(e.date,Cv.ISO_8601).isValid())throw ia(new Error,xp.INVALID_DATE,oa.BAD_REQUEST,Cc.LOG_LEVELS.ERROR,xp.INVALID_DATE,!0);let n=Ic.checkSchemaTableExist(e.schema,e.table);if(n)throw ia(new Error,n,oa.NOT_FOUND,Cc.LOG_LEVELS.ERROR,n,!0);let s=await QR.deleteRecordsBefore(e);if(await zR(e.schema,e.table),Dv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(q6,"deleteFilesBefore");async function $6(e){let t=Pv(e,"timestamp");if(t)throw ia(t,t.message,oa.BAD_REQUEST,void 0,void 0,!0);if(Ic.transformReq(e),isNaN(e.timestamp))throw ia(new Error,xp.INVALID_VALUE("Timestamp"),oa.BAD_REQUEST,Cc.LOG_LEVELS.ERROR,xp.INVALID_VALUE("Timestamp"),!0);let r=Ic.checkSchemaTableExist(e.schema,e.table);if(r)throw ia(new Error,r,oa.NOT_FOUND,Cc.LOG_LEVELS.ERROR,r,!0);let n=await QR.deleteAuditLogsBefore(e);return await zR(e.schema,e.table),Dv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a($6,"deleteAuditLogsBefore");async function Lv(e){e.ids&&(e.hash_values=e.ids);let t=v6(e);if(t)throw ia(t,t.message,oa.BAD_REQUEST,void 0,void 0,!0);Ic.transformReq(e);let r=Ic.checkSchemaTableExist(e.schema,e.table);if(r)throw ia(new Error,r,oa.NOT_FOUND,Cc.LOG_LEVELS.ERROR,r,!0);try{await zR(e.schema,e.table);let n=await QR.deleteRecords(e);return Ic.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${F6}`),n}catch(n){if(n.message===Cc.SEARCH_NOT_FOUND_MESSAGE){let s=new H6;return s.message=Cc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Lv,"deleteRecord")});var Bp={};Ue(Bp,{HASH_FUNCTION:()=>Wf,hash:()=>XR,validate:()=>ZR});function jR(e=Yf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Kf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function XR(e,t=Wf[Uv?.toUpperCase()]??"sha256"){return JR[t](e)}function ZR(e,t,r=Wf[Uv?.toUpperCase()]??"sha256"){return e?V6[r](e,t):!1}var Kf,iu,vv,Uv,Yf,xv,Wf,JR,V6,Hp=be(()=>{Kf=M(require("node:crypto")),iu=M(require("argon2")),vv=M(ce());H();Uv=(0,vv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Yf=16,xv=9,Wf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(Wf||{});a(jR,"generateSalt");JR={md5:a((e,t=void 0)=>{t=t??jR(xv);let r=Kf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??jR(Yf);let r=Kf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=jR(Yf),r=await iu.hash(e,{type:iu.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},V6={md5:a((e,t)=>{let r=e.slice(0,xv);return e===JR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Yf);return e===JR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await iu.verify(e.slice(Yf),t),"argon2id")};a(XR,"hash");a(ZR,"validate")});var Hv=C((bye,Bv)=>{var ey=rt(),Yr={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 K6(e){return Yr.password.presence=!0,Yr.username.presence=!0,Yr.role.presence=!0,Yr.active.presence=!0,ey.validateObject(e,Yr)}a(K6,"addUserValidation");function Y6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ey.validateObject(e,Yr)}a(Y6,"alterUserValidation");function W6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ey.validateObject(e,Yr)}a(W6,"dropUserValidation");Bv.exports={addUserValidation:K6,alterUserValidation:Y6,dropUserValidation:W6}});var It=C((wye,Fv)=>{"use strict";var{platform:Nye}=require("os"),z6="nats-server.zip",ty="nats-server",Q6=process.platform==="win32"?`${ty}.exe`:ty,j6=/^[^\s.,*>]+$/,kv="__request__",J6=a(e=>`${e}.${kv}`,"REQUEST_SUBJECT"),X6={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Z6={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eZ={HUB:"hub.pid",LEAF:"leaf.pid"},tZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rZ={SUCCESS:"success",ERROR:"error"},nZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sZ={TXN:"txn",MSGID:"msgid"},ou={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iZ={[ou.ERR]:1,[ou.WRN]:2,[ou.INF]:3,[ou.DBG]:4,[ou.TRC]:5},oZ={debug:"-D",trace:"-DVV"};Fv.exports={NATS_SERVER_ZIP:z6,NATS_SERVER_NAME:ty,NATS_BINARY_NAME:Q6,PID_FILES:eZ,NATS_CONFIG_FILES:Z6,SERVER_SUFFIX:tZ,NATS_TERM_CONSTRAINTS_RX:j6,REQUEST_SUFFIX:kv,UPDATE_REMOTE_RESPONSE_STATUSES:rZ,CLUSTER_STATUS_STATUSES:nZ,REQUEST_SUBJECT:J6,SUBJECT_PREFIXES:sZ,MSG_HEADERS:X6,LOG_LEVELS:ou,LOG_LEVEL_FLAGS:oZ,LOG_LEVEL_HIERARCHY:iZ}});var Fn=C((Cye,br)=>{"use strict";var $v="username is required",Vv="nothing to update, must supply active, role or password to update",Kv="password cannot be an empty string",Yv="If role is specified, it cannot be empty.",Wv="active must be true or false";br.exports.addUser=mZ;br.exports.alterUser=pZ;br.exports.dropUser=gZ;br.exports.getSuperUser=yZ;br.exports.userInfo=SZ;br.exports.listUsers=Fp;br.exports.listUsersExternal=TZ;br.exports.setUsersWithRolesCache=Dc;br.exports.findAndValidateUser=uy;br.exports.getClusterUser=bZ;br.exports.getUsersWithRolesCache=RZ;br.exports.USERNAME_REQUIRED=$v;br.exports.ALTERUSER_NOTHING_TO_UPDATE=Vv;br.exports.EMPTY_PASSWORD=Kv;br.exports.EMPTY_ROLE=Yv;br.exports.ACTIVE_BOOLEAN=Wv;var zv=En(),aZ=Pc(),zf=(Hp(),P(Bp)),Qv=Hv(),Qf=Kr(),oy=oo(),Ri=ae(),jv=require("validate.js"),ay=J(),{promisify:cZ}=require("util"),cy=no(),ny=(H(),P($)),Gv=It(),lZ=Ot(),uZ=ce(),dZ=eo(),{hdb_errors:fZ,ClientError:Gs}=he(),{HTTP_STATUS_CODES:io,AUTHENTICATION_ERROR_MSGS:ry,HDB_ERROR_MSGS:au}=fZ,{UserEventMsg:ly}=qs(),sy=require("lodash"),{server:kp}=(Gr(),P(ql)),_Z=J();kp.getUser=(e,t)=>uy(e,t,t!=null);kp.authenticateUser=(e,t)=>uy(e,t);var Jv={username:!0,active:!0,role:!0,password:!0},qv=new Map,hZ=cZ(aZ.delete),iy=uZ.get(ny.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??zf.HASH_FUNCTION.SHA256,yi;async function mZ(e){let t=jv.cleanAttributes(e,Jv),r=Qv.addUserValidation(t);if(r)throw new Gs(r.message);let n=await Qf.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 Gs(au.ROLE_NAME_NOT_FOUND(t.role),io.NOT_FOUND);if(n.length>1)throw new Gs(au.DUP_ROLES_FOUND(t.role),io.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=cy.encrypt(t.password)),t.password=await zf.hash(t.password,iy),t.hash_function=iy,t.role=n[0].id;let s=await zv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ay.debug(s),await Dc(),s.skipped_hashes.length===1)throw new Gs(au.USER_ALREADY_EXISTS(t.username),io.CONFLICT);return oy.signalUserChange(new ly(process.pid)),`${t.username} successfully added`}a(mZ,"addUser");async function pZ(e){let t=jv.cleanAttributes(e,Jv);if(Ri.isEmptyOrZeroLength(t.username))throw new Error($v);if(Ri.isEmptyOrZeroLength(t.password)&&Ri.isEmptyOrZeroLength(t.role)&&Ri.isEmptyOrZeroLength(t.active))throw new Error(Vv);if(!Ri.isEmpty(t.password)&&Ri.isEmptyOrZeroLength(t.password.trim()))throw new Error(Kv);if(!Ri.isEmpty(t.active)&&!Ri.isBoolean(t.active))throw new Error(Wv);if(!Ri.isEmpty(t.password)&&!Ri.isEmptyOrZeroLength(t.password.trim())&&(EZ(t.username)&&(t.hash=cy.encrypt(t.password)),t.password=await zf.hash(t.password,iy)),t.role==="")throw new Error(Yv);if(t.role){let n=await Qf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Gs(au.ALTER_USER_ROLE_NOT_FOUND(t.role),io.NOT_FOUND);if(n.length>1)throw new Gs(au.DUP_ROLES_FOUND(t.role),io.CONFLICT);t.role=n[0].id}let r=await zv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Dc(),oy.signalUserChange(new ly(process.pid)),r}a(pZ,"alterUser");function EZ(e){let t=!1,r=yi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(EZ,"isClusterUser");async function gZ(e){let t=Qv.dropUserValidation(e);if(t)throw new Gs(t.message);if(yi.get(e.username)===void 0)throw new Gs(au.USER_NOT_EXIST(e.username),io.NOT_FOUND);let r=await hZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return ay.debug(r),await Dc(),oy.signalUserChange(new ly(process.pid)),`${e.username} successfully deleted`}a(gZ,"dropUser");async function SZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=sy.cloneDeep(e.hdb_user);let r=await Qf.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(SZ,"userInfo");async function TZ(){let e=await Fp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(TZ,"listUsersExternal");async function Fp(){let e=await Qf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=sy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Qf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=sy.cloneDeep(s),s.role=t[s.role],AZ(s.role),n.set(s.username,s);return n}a(Fp,"listUsers");function AZ(e){if(!e){ay.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(dZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(AZ,"appendSystemTablesToRole");async function Dc(e=void 0){e?yi=e:yi=await Fp()}a(Dc,"setUsersWithRolesCache");async function RZ(){return yi||await Dc(),yi}a(RZ,"getUsersWithRolesCache");async function uy(e,t,r=!0){yi||await Dc();let n=yi.get(e);if(!n){if(!r)return{username:e};throw new Gs(ry.GENERIC_AUTH_FAIL,io.UNAUTHORIZED)}if(n&&!n.active)throw new Gs(ry.USER_INACTIVE,io.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(qv.get(t)===n.password)return s;{let i=zf.validate(n.password,t,n.hash_function||zf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)qv.set(t,n.password);else throw new Gs(ry.GENERIC_AUTH_FAIL,io.UNAUTHORIZED)}}return s}a(uy,"findAndValidateUser");async function yZ(){yi||await Dc();for(let[,e]of yi)if(e.role.role==="super_user")return e}a(yZ,"getSuperUser");async function bZ(){let e=await Fp(),t=lZ.getConfigFromFile(ny.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==ny.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+Gv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Gv.SERVER_SUFFIX.ADMIN,r}a(bZ,"getClusterUser");var Xv=[];kp.invalidateUser=function(e){for(let t of Xv)try{t(e)}catch(r){_Z.error("Error invalidating user",r)}};kp.onInvalidatedUser=function(e){Xv.push(e)}});var Jf=C((Mye,rU)=>{"use strict";var Lc=J(),Gn=(H(),P($)),OZ=MM(),Dye=Fs(),Lye=so(),NZ=Fn(),{validateEvent:Zv}=qs(),jf=kn(),wZ=require("process"),{resetDatabases:IZ}=(ve(),P(it)),CZ={[Gn.ITC_EVENT_TYPES.SCHEMA]:PZ,[Gn.ITC_EVENT_TYPES.USER]:tU};async function PZ(e){let t=Zv(e);if(t){Lc.error(t);return}Lc.trace("ITC schemaHandler received schema event:",e),await OZ(e.message),await DZ(e.message)}a(PZ,"schemaHandler");async function DZ(e){try{jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=IZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Lc.error(t)}}a(DZ,"syncSchemaMetadata");var eU=[];async function tU(e){try{try{jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),jf.resetReadTxn(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Lc.warn(r)}let t=Zv(e);if(t){Lc.error(t);return}Lc.trace(`ITC userHandler ${Gn.HDB_ITC_CLIENT_PREFIX}${wZ.pid} received user event:`,e),await NZ.setUsersWithRolesCache();for(let r of eU)r()}catch(t){Lc.error(t)}}a(tU,"userHandler");tU.addListener=function(e){eU.push(e)};rU.exports=CZ});var qs=C((kye,sU)=>{"use strict";var Uye=J(),dy=ae(),LZ=(H(),P($)),{ITC_ERRORS:Xf}=Cn(),{parentPort:xye,threadId:MZ,isMainThread:vZ,workerData:Bye}=require("worker_threads"),{onMessageFromWorkers:UZ,broadcast:Hye,broadcastWithAcknowledgement:xZ}=nt();sU.exports={sendItcEvent:BZ,validateEvent:nU,SchemaEventMsg:HZ,UserEventMsg:kZ};var Gp;UZ(async(e,t)=>{Gp=Gp||Jf(),nU(e),Gp[e.type]&&await Gp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function BZ(e){return!vZ&&e.message&&(e.message.originator=MZ),xZ(e)}a(BZ,"sendItcEvent");function nU(e){if(typeof e!="object")return Xf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||dy.isEmpty(e.type))return Xf.MISSING_TYPE;if(!e.hasOwnProperty("message")||dy.isEmpty(e.message))return Xf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||dy.isEmpty(e.message.originator))return Xf.MISSING_ORIGIN;if(LZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xf.INVALID_EVENT(e.type)}a(nU,"validateEvent");function HZ(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(HZ,"SchemaEventMsg");function kZ(e){this.originator=e}a(kZ,"UserEventMsg")});var oo=C((qye,cU)=>{"use strict";var iU=(H(),P($)),Gye=ae(),qp=J(),oU=PM(),cu,{sendItcEvent:aU}=qs();function FZ(e){try{qp.info("signalSchemaChange called with message:",e),cu=cu||Jf();let t=new oU(iU.ITC_EVENT_TYPES.SCHEMA,e);return cu.schema(t),aU(t)}catch(t){qp.error(t)}}a(FZ,"signalSchemaChange");function GZ(e){try{qp.trace("signalUserChange called with message:",e),cu=cu||Jf();let t=new oU(iU.ITC_EVENT_TYPES.USER,e);return cu.user(t),aU(t)}catch(t){qp.error(t)}}a(GZ,"signalUserChange");cU.exports={signalSchemaChange:FZ,signalUserChange:GZ}});var $p=C((Vye,uU)=>{"use strict";var lU=ae(),qZ=(H(),P($)),$Z=J(),VZ=Ip(),KZ=wp(),YZ=oo(),{SchemaEventMsg:WZ}=qs(),zZ="already exists in";uU.exports=QZ;async function QZ(e,t,r){if(lU.isEmptyOrZeroLength(r))return r;let n=[];lU.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await jZ(e,t.schema,t.name,i)})),s}a(QZ,"lmdbCheckForNewAttributes");async function jZ(e,t,r,n){let s=new KZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await JZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(zZ))$Z.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(jZ,"createNewAttribute");async function JZ(e){let t;return t=await VZ(e),YZ.signalSchemaChange(new WZ(process.pid,qZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(JZ,"createAttribute")});var lu=C((Yye,dU)=>{"use strict";var fy=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};dU.exports=fy});var _U=C((zye,fU)=>{"use strict";var XZ=lu(),ZZ=(H(),P($)).OPERATIONS_ENUM,_y=class extends XZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(ZZ.INSERT,r,n,s,i),this.records=t}};fU.exports=_y});var mU=C((jye,hU)=>{"use strict";var e8=lu(),t8=(H(),P($)).OPERATIONS_ENUM,hy=class extends e8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(t8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};hU.exports=hy});var EU=C((Xye,pU)=>{"use strict";var r8=lu(),n8=(H(),P($)).OPERATIONS_ENUM,my=class extends r8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(n8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};pU.exports=my});var SU=C((ebe,gU)=>{"use strict";var s8=lu(),i8=(H(),P($)).OPERATIONS_ENUM,py=class extends s8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(i8.DELETE,n,s,t,i),this.original_records=r}};gU.exports=py});var Zf=C((nbe,yU)=>{"use strict";var rbe=require("path"),TU=dt(),o8=_U(),a8=mU(),c8=EU(),l8=SU(),uu=Ut(),AU=ae(),{CONFIG_PARAMS:u8}=(H(),P($)),RU=ce();RU.initSync();var Vp=(H(),P($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:d8}=Et();yU.exports=f8;async function f8(e,t){if(RU.get(u8.LOGGING_AUDITLOG)===!1)return;let r=d8(e.schema,e.table),n=await TU.openEnvironment(r,e.table,!0),s=_8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){TU.initializeDBIs(n,uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,uu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),AU.isEmpty(s.user_name)||n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(f8,"writeTransaction");function _8(e,t){let r=AU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Vp.INSERT)return new o8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vp.UPDATE)return new a8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vp.UPSERT)return new c8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vp.DELETE)return new l8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(_8,"createTransactionObject")});var Ey=C((obe,bU)=>{"use strict";var h8=Hf(),ibe=uf(),e_=(H(),P($)),m8=df(),p8=bc().insertRecords,E8=dt(),g8=J(),S8=$p(),{getSchemaPath:T8}=Et(),A8=Zf();bU.exports=R8;async function R8(e){try{let{schema_table:t,attributes:r}=h8(e);m8(e,r,t.hash_attribute),e.schema!==e_.SYSTEM_SCHEMA_NAME&&(r.includes(e_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(e_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(e_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(e_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await S8(e.hdb_auth_header,t,r),s=T8(e.schema,e.table),i=await E8.openEnvironment(s,e.table),o=await p8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await A8(e,o)}catch(c){g8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(R8,"lmdbCreateRecords")});var wU=C((cbe,NU)=>{"use strict";var OU=(H(),P($)),y8=Ey(),b8=uf(),O8=require("fs-extra"),{getSchemaPath:N8}=Et();NU.exports=w8;async function w8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new b8(OU.SYSTEM_SCHEMA_NAME,OU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await y8(r),await O8.mkdirp(N8(e.schema))}a(w8,"lmdbCreateSchema")});var CU=C((ube,IU)=>{"use strict";var gy=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};IU.exports=gy});var MU=C((mbe,LU)=>{"use strict";var PU=dt(),Sy=un(),Ty=Cn().LMDB_ERRORS_ENUM,I8=Ut(),DU=J(),fbe=ae(),C8=require("lmdb"),P8=CU(),D8=(H(),P($)),{OVERFLOW_MARKER:_be,MAX_SEARCH_KEY_LENGTH:hbe}=I8,L8=D8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function M8(e,t,r,n){if(Sy.validateEnv(e),t===void 0)throw new Error(Ty.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ty.IDS_REQUIRED):new Error(Ty.IDS_MUST_BE_ITERABLE);try{let s=PU.listDBIs(e);PU.initializeDBIs(e,t,s);let i=new P8,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let m=e.dbis[t].get(o);if(!m||n&&m[L8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,C8.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],A=m[R];if(A!=null)try{let N=Sy.getIndexedValues(A);if(N)for(let v=0,F=N.length;v<F;v++)E.remove(N[v],o)}catch{DU.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){DU.warn(m),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=Sy.getNextMonotonicTime(),i}catch(s){throw s}}a(M8,"deleteRecords");LU.exports={deleteRecords:M8}});var t_=C((Ebe,UU)=>{"use strict";var du=ae(),v8=MU(),U8=dt(),{getSchemaPath:x8}=Et(),B8=Zf(),H8=J();UU.exports=k8;async function k8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(du.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(du.isEmptyOrZeroLength(e.hash_values)&&!du.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];du.isEmpty(l)||e.hash_values.push(l)}}if(du.isEmptyOrZeroLength(e.hash_values))return vU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(du.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=x8(e.schema,e.table),i=await U8.openEnvironment(s,e.table),o=await v8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await B8(e,o)}catch(c){H8.error(`unable to write transaction due to ${c.message}`)}return vU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(k8,"lmdbDeleteRecords");function vU(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(vU,"createDeleteResponse")});var Ry=C((Tbe,xU)=>{"use strict";var F8=(H(),P($)),Sbe=un();function Ay(e,t){let r=Object.create(null);if(t.length===1&&F8.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(Ay,"parseRow");function G8(e,t,r,n){let s=Ay(r,e);n.push(s)}a(G8,"searchAll");function q8(e,t,r,n){let s=Ay(r,e);n[t]=s}a(q8,"searchAllToMap");function $8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a($8,"iterateDBI");function Mc(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(Mc,"pushResults");function V8(e,t,r,n,s,i){t.toString().endsWith(e)&&Mc(t,r,n,s,i)}a(V8,"endsWith");function K8(e,t,r,n,s,i){t.toString().includes(e)&&Mc(t,r,n,s,i)}a(K8,"contains");function Y8(e,t,r,n,s,i){t>e&&Mc(t,r,n,s,i)}a(Y8,"greaterThanCompare");function W8(e,t,r,n,s,i){t>=e&&Mc(t,r,n,s,i)}a(W8,"greaterThanEqualCompare");function z8(e,t,r,n,s,i){t<e&&Mc(t,r,n,s,i)}a(z8,"lessThanCompare");function Q8(e,t,r,n,s,i){t<=e&&Mc(t,r,n,s,i)}a(Q8,"lessThanEqualCompare");xU.exports={parseRow:Ay,searchAll:G8,searchAllToMap:q8,iterateDBI:$8,endsWith:V8,contains:K8,greaterThanCompare:Y8,greaterThanEqualCompare:W8,lessThanCompare:z8,lessThanEqualCompare:Q8,pushResults:Mc}});var fu=C((Obe,$U)=>{"use strict";var aa=dt(),Rbe=J(),qn=un(),Kp=Ut(),Kt=Cn().LMDB_ERRORS_ENUM,ybe=ae(),j8=(H(),P($)),Yp=Ry(),{parseRow:J8}=Yp,bbe=require("lmdb"),{OVERFLOW_MARKER:BU,MAX_SEARCH_KEY_LENGTH:X8}=Kp;function HU(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(HU,"iterateFullIndex");function r_(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 _===r?(E.values=!1,d.getRange(E).map(A=>({value:A}))):d.getRange(E)})}a(r_,"iterateRangeBetween");function vc(e,t,r,n){let s=e.database||e,i=aa.openDBI(s,r);i[Kp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&aa.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 kU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(BU)){if(!s)if(r)s=aa.openDBI(e,r);else{let l=aa.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=aa.openDBI(e,l[u]),!s[Kp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(kU,"getOverflowCheck");function Z8(e,t,r,n=!1,s=void 0,i=void 0){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return vc(e,t,t,(o,c,l)=>(Wp(r),r=n_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>J8(u.value,r))))}a(Z8,"searchAll");function e5(e,t,r,n=!1,s=void 0,i=void 0){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);Wp(r),r=n_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of HU(e,t,t,n,s,i))o.set(c,Yp.parseRow(l,r));return o}a(e5,"searchAllToMap");function t5(e,t,r=!1,n=void 0,s=void 0){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=HU(e,void 0,t,r,n,s),c=o.transaction,l=kU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(t5,"iterateDBI");function r5(e,t){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return aa.statDBI(e,t).entryCount}a(r5,"countAll");function n5(e,t,r,n,s=!1,i=void 0,o=void 0){return ca(e,r,n),vc(e,t,r,(c,l,u,f)=>(n=qn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(n5,"equals");function s5(e,t,r){return ca(e,t,r),aa.openDBI(e,t).getValuesCount(r)}a(s5,"count");function i5(e,t,r,n,s=!1,i=void 0,o=void 0){return ca(e,r,n),vc(e,null,r,(c,l)=>{n=qn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;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(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(i5,"startsWith");function o5(e,t,r,n,s=!1,i=void 0,o=void 0){return FU(e,t,r,n,s,i,o,!0)}a(o5,"endsWith");function FU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ca(e,r,n),vc(e,null,r,(l,u,f,d)=>{let h=kU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let m=_.toString();return m.endsWith(BU)?u.getValues(_,{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[Kp.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(FU,"contains");function a5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),r_(e,t,r,n,l,s,i,o,!0,!1)}a(a5,"greaterThan");function c5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),r_(e,t,r,n,l,s,i,o,!1,!1)}a(c5,"greaterThanEqual");function l5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),r_(e,t,r,l,n,s,i,o,!1,!0)}a(l5,"lessThan");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){ca(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),r_(e,t,r,l,n,s,i,o,!1,!1)}a(u5,"lessThanEqual");function d5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(qn.validateEnv(e),r===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Kt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Kt.END_VALUE_REQUIRED);if(n=qn.convertKeyValueToWrite(n),s=qn.convertKeyValueToWrite(s),n>s)throw new Error(Kt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return r_(e,t,r,n,s,i,o,c)}a(d5,"between");function f5(e,t,r,n){qn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Wp(r),r=n_(s,r),n===void 0)throw new Error(Kt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Yp.parseRow(c,r)),o}a(f5,"searchByHash");function _5(e,t,r){qn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(_5,"checkHashExists");function h5(e,t,r,n,s=[]){return qU(e,t,r,n,s),GU(e,t,r,n,s).map(i=>i[1])}a(h5,"batchSearchByHash");function m5(e,t,r,n,s=[]){qU(e,t,r,n,s);let i=new Map;for(let[o,c]of GU(e,t,r,n,s))i.set(o,c);return i}a(m5,"batchSearchByHashToMap");function GU(e,t,r,n,s=[]){return vc(e,t,t,(i,o,c)=>{r=n_(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,Yp.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(GU,"batchHashSearch");function qU(e,t,r,n,s){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(Wp(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a(qU,"initializeBatchSearchByHash");function Wp(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wp,"validateFetchAttributes");function ca(e,t,r){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.SEARCH_VALUE_REQUIRED);if(r?.length>X8)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(ca,"validateComparisonFunctions");function n_(e,t){return t.length===1&&j8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=aa.listDBIs(e)),t}a(n_,"setGetWholeRowAttributes");$U.exports={searchAll:Z8,searchAllToMap:e5,count:s5,countAll:r5,equals:n5,startsWith:i5,endsWith:o5,contains:FU,searchByHash:f5,setGetWholeRowAttributes:n_,batchSearchByHash:h5,batchSearchByHashToMap:m5,checkHashExists:_5,iterateDBI:t5,greaterThan:a5,greaterThanEqual:c5,lessThan:l5,lessThanEqual:u5,between:d5}});var _u=C((wbe,zU)=>{var VU=require("lodash"),KU=rt(),ke=require("joi"),p5=ae(),{hdb_schema_table:s_,checkValidTable:YU,hdb_table:WU,hdb_database:zp}=Si(),{handleHDBError:E5,hdb_errors:g5}=he(),{getDatabases:S5}=(ve(),P(it)),{HTTP_STATUS_CODES:T5}=g5,A5=ke.object({database:zp,schema:zp,table:WU,search_attribute:s_,search_value:ke.any().required(),get_attributes:ke.array().min(1).items(ke.alternatives(s_,ke.object())).optional(),desc:ke.bool(),limit:ke.number().integer().min(1),offset:ke.number().integer().min(0)}),R5=ke.object({database:zp,schema:zp,table:WU,operator:ke.string().valid("and","or").default("and").lowercase(),offset:ke.number().integer().min(0),limit:ke.number().integer().min(1),get_attributes:ke.array().min(1).items(ke.alternatives(s_,ke.object())).optional(),sort:ke.object({attribute:ke.alternatives(s_,ke.array().min(1)),descending:ke.bool().optional()}).optional(),conditions:ke.array().min(1).items(ke.alternatives(ke.object({operator:ke.string().valid("and","or").default("and").lowercase(),conditions:ke.array()}),ke.object({search_attribute:ke.alternatives(s_,ke.array().min(1)),search_type:ke.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:ke.when("search_type",{switch:[{is:"equals",then:ke.any()},{is:"between",then:ke.array().items(ke.alternatives([ke.string(),ke.number()])).length(2)}],otherwise:ke.alternatives(ke.string(),ke.number())}).required()}))).required()});zU.exports=function(e,t){let r=null;switch(t){case"value":r=KU.validateBySchema(e,A5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(YU("database",e.schema)),i(YU("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=KU.validateBySchema(e,R5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=p5.checkGlobalSchemaTable(e.schema,e.table);if(s)return E5(new Error,s,T5.NOT_FOUND);let o=S5()[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,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=VU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!VU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var yy=C((Cbe,QU)=>{"use strict";var y5=dt(),b5=_u(),{getSchemaPath:O5}=Et();QU.exports=N5;function N5(e){let t=b5(e,"hashes");if(t)throw t;let r=O5(e.schema,e.table);return y5.openEnvironment(r,e.table)}a(N5,"initialize")});var by=C((Dbe,jU)=>{"use strict";var w5=fu(),I5=yy();jU.exports=C5;async function C5(e){let t=await I5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return w5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(C5,"lmdbGetDataByHash")});var hu=C((Mbe,JU)=>{"use strict";var Oy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};JU.exports=Oy});var ZU=C((xbe,XU)=>{"use strict";var Ube=hu(),P5=fu(),D5=yy();XU.exports=L5;async function L5(e){let t=await D5(e),r=global.hdb_schema[e.schema][e.table];return P5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(L5,"lmdbSearchByHash")});var $s=C((Hbe,e0)=>{"use strict";var Ny=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};e0.exports=Ny});var Qp=C((Fbe,o0)=>{"use strict";var Wr=fu(),M5=dt(),v5=ae(),Fe=Ut(),Uc=(H(),P($)),U5=eo(),t0=Cn().LMDB_ERRORS_ENUM,{getSchemaPath:x5}=Et(),ao=Uc.SEARCH_WILDCARDS;async function B5(e,t,r){let n;e.schema===Uc.SYSTEM_SCHEMA_NAME?n=U5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=i0(e,n.hash_attribute,r,t);return n0(e,s,n.hash_attribute,r)}a(B5,"prepSearch");async function n0(e,t,r,n){let s=x5(e.schema,e.table),i=await M5.openEnvironment(s,e.table),o=s0(i,e,t,r),c=o.transaction||i;if([Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Fe.SEARCH_TYPES.SEARCH_ALL,Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(H5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?r0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?r0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(n0,"executeSearch");function s0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Fe.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.ENDS_WITH:case Fe.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.STARTS_WITH:case Fe.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN:case Fe.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Fe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN:case Fe.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN_EQUAL:case Fe.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(s0,"searchByType");function r0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(r0,"createMapFromIterable");function H5(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(H5,"checkToFetchMore");function i0(e,t,r,n){if(v5.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),ao.indexOf(s)>-1)return r===!0?Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Fe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ao[0])<0&&s.indexOf(ao[1])<0)return c===!0?r===!0?Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Fe.SEARCH_TYPES.EQUALS;if(ao.indexOf(i)>=0&&ao.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Fe.SEARCH_TYPES.CONTAINS;if(ao.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Fe.SEARCH_TYPES.ENDS_WITH;if(ao.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Fe.SEARCH_TYPES.STARTS_WITH;if(s.includes(ao[0])||s.includes(ao[1]))return Fe.SEARCH_TYPES.EQUALS;throw new Error(t0.UNKNOWN_SEARCH_TYPE)}else switch(n){case Uc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Fe.SEARCH_TYPES.BETWEEN;case Uc.VALUE_SEARCH_COMPARATORS.GREATER:return Fe.SEARCH_TYPES.GREATER_THAN;case Uc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Fe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Uc.VALUE_SEARCH_COMPARATORS.LESS:return Fe.SEARCH_TYPES.LESS_THAN;case Uc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Fe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(t0.UNKNOWN_SEARCH_TYPE)}}a(i0,"createSearchTypeFromSearchObject");o0.exports={executeSearch:n0,createSearchTypeFromSearchObject:i0,prepSearch:B5,searchByType:s0}});var c0=C(($be,a0)=>{"use strict";var qbe=$s(),k5=_u(),F5=ae(),G5=(H(),P($)),q5=Qp();a0.exports=$5;function $5(e,t){if(!F5.isEmpty(t)&&G5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=k5(e,"value");if(n)throw n;return q5.prepSearch(e,t,!0)}a($5,"lmdbGetDataByValue")});var i_=C((Ybe,l0)=>{"use strict";var Kbe=$s(),V5=_u(),K5=ae(),Y5=(H(),P($)),W5=Qp();l0.exports=z5;async function z5(e,t){if(!K5.isEmpty(t)&&Y5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=V5(e,"value");if(n)throw n;return W5.prepSearch(e,t,!1)}a(z5,"lmdbSearchByValue")});var d0=C((Qbe,u0)=>{"use strict";var zbe=Ut(),wy=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}},Iy=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Cy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};u0.exports={SearchByConditionsObject:wy,SearchCondition:Iy,SortAttribute:Cy}});var p0=C((Zbe,m0)=>{"use strict";var Jbe=d0().SearchByConditionsObject,Q5=$s(),j5=_u(),Py=fu(),jp=Ut(),{Resource:Xbe}=(Xo(),P(CA)),h0=Qp(),J5=Ry(),X5=require("lodash"),{getSchemaPath:Z5}=Et(),f0=dt(),{handleHDBError:e9,hdb_errors:t9}=he(),{HTTP_STATUS_CODES:r9}=t9,n9=1e8;m0.exports=s9;async function s9(e){let t=j5(e,"conditions");if(t)throw e9(t,t.message,r9.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=Z5(e.schema,e.table),n=await f0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)f0.openDBI(n,u.search_attribute);let i=X5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===jp.SEARCH_TYPES.EQUALS?u.estimated_count=Py.count(n,u.search_attribute,u.search_value):f===jp.SEARCH_TYPES.CONTAINS||f===jp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=n9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await _0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(h0.filterByType),d=f.length,h=Py.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let m=0;m<d;m++)if(!f[m](_))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(_=>J5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await _0(o,e,h,s.hash_attribute);c=c.concat(_)}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=Py.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(s9,"lmdbSearchByConditions");async function _0(e,t,r,n){let s=new Q5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===jp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,h0.searchByType(e,s,i,n).map(o=>o.value)}a(_0,"executeConditionSearch")});var o_=C((tOe,E0)=>{"use strict";var i9=(H(),P($)).OPERATIONS_ENUM,Dy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=i9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};E0.exports=Dy});var Ly=C((nOe,O0)=>{"use strict";var A0=$s(),R0=o_(),y0=i_(),b0=t_(),gn=(H(),P($)),g0=ae(),S0=dt(),{getTransactionAuditStorePath:o9,getSchemaPath:a9}=Et(),T0=J();O0.exports=c9;async function c9(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 l9(e),await u9(e);let t=a9(e.schema,e.table);try{await S0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")T0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=o9(e.schema,e.table);await S0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")T0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(c9,"lmdbDropTable");async function l9(e){let t=new A0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await y0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new R0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await b0(s)}a(l9,"deleteAttributesFromSystem");async function u9(e){let t=new A0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,gn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await y0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new R0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await b0(s)}catch(i){throw i}}a(u9,"dropTableFromSystem")});var w0=C((iOe,N0)=>{"use strict";var d9=require("fs-extra"),f9=$s(),_9=hu(),h9=o_(),m9=Ly(),p9=t_(),E9=by(),g9=i_(),co=(H(),P($)),{getSchemaPath:S9}=Et(),{handleHDBError:T9,hdb_errors:A9}=he(),{HDB_ERROR_MSGS:R9,HTTP_STATUS_CODES:y9}=A9;N0.exports=b9;async function b9(e){let t;try{t=await O9(e.schema);let r=new f9(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await g9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await m9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new h9(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await p9(s);let i=S9(t);await d9.remove(i)}catch(r){throw r}}a(b9,"lmdbDropSchema");async function O9(e){let t=new _9(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await E9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw T9(new Error,R9.SCHEMA_NOT_FOUND(e),y9.NOT_FOUND,void 0,void 0,!0);return n}a(O9,"validateDropSchema")});var a_=C((aOe,I0)=>{"use strict";var My=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};I0.exports=My});var Uy=C((uOe,C0)=>{"use strict";var N9=require("fs-extra"),Jp=dt(),{getTransactionAuditStorePath:w9}=Et(),vy=Ut(),lOe=a_();C0.exports=I9;async function I9(e){let t;try{let r=w9(e.schema,e.table);await N9.mkdirp(r),t=await Jp.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{Jp.createDBI(t,vy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Jp.createDBI(t,vy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Jp.createDBI(t,vy.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(I9,"createTransactionsAuditEnvironment")});var L0=C((_Oe,D0)=>{"use strict";var xy=(H(),P($)),P0=dt(),C9=bc(),{getSystemSchemaPath:P9,getSchemaPath:D9}=Et(),fOe=eo(),L9=Ip(),By=wp(),M9=J(),v9=Uy();D0.exports=U9;async function U9(e,t){let r=D9(t.schema,t.table),n=new By(t.schema,t.table,xy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new By(t.schema,t.table,xy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new By(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await P0.createEnvironment(r,t.table),e!==void 0){let o=await P0.openEnvironment(P9(),xy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await C9.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 Hy(n),await Hy(s),await Hy(i)}await v9(t)}catch(o){throw o}}a(U9,"lmdbCreateTable");async function Hy(e){try{await L9(e)}catch(t){M9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Hy,"createAttribute")});var v0=C((mOe,M0)=>{"use strict";var x9=Hf(),B9=df(),H9=$p(),c_=(H(),P($)),k9=bc().updateRecords,F9=dt(),{getSchemaPath:G9}=Et(),q9=Zf(),$9=J();M0.exports=V9;async function V9(e){try{let{schema_table:t,attributes:r}=x9(e);B9(e,r,t.hash_attribute),e.schema!==c_.SYSTEM_SCHEMA_NAME&&(r.includes(c_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(c_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(c_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(c_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await H9(e.hdb_auth_header,t,r),s=G9(e.schema,e.table),i=await F9.openEnvironment(s,e.table),o=await k9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await q9(e,o)}catch(c){$9.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(V9,"lmdbUpdateRecords")});var x0=C((EOe,U0)=>{"use strict";var K9=(H(),P($)).OPERATIONS_ENUM,ky=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=K9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};U0.exports=ky});var H0=C((TOe,B0)=>{"use strict";var SOe=x0(),Y9=Hf(),W9=df(),z9=$p(),l_=(H(),P($)),Q9=bc().upsertRecords,j9=dt(),{getSchemaPath:J9}=Et(),X9=Zf(),Z9=J(),{handleHDBError:e7,hdb_errors:t7}=he();B0.exports=r7;async function r7(e){let t;try{t=Y9(e)}catch(l){throw e7(l,l.message,t7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;W9(e,n,r.hash_attribute),e.schema!==l_.SYSTEM_SCHEMA_NAME&&(n.includes(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await z9(e.hdb_auth_header,r,n),i=J9(e.schema,e.table),o=await j9.openEnvironment(i,e.table),c=await Q9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await X9(e,c)}catch(l){Z9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(r7,"lmdbUpsertRecords")});var F0=C((ROe,k0)=>{"use strict";var Fy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};k0.exports=Fy});var q0=C((bOe,G0)=>{"use strict";var Gy=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};G0.exports=Gy});var K0=C((wOe,V0)=>{"use strict";var qy=dt(),{getTransactionAuditStorePath:n7}=Et(),NOe=F0(),u_=Ut(),s7=ae(),$0=q0(),i7=require("util").promisify,o7=i7(setTimeout),a7=1e4,c7=100;V0.exports=l7;async function l7(e){let t=n7(e.schema,e.table),r=await qy.openEnvironment(t,e.table,!0),n=qy.listDBIs(r);qy.initializeDBIs(r,u_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new $0;do s=await u7(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 o7(c7);while(s.transactions_deleted>0);return i}a(l7,"deleteAuditLogsBefore");async function u7(e,t){let r=new $0;try{let n=e.dbis[u_.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[u_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];s7.isEmpty(c)||(s=e.dbis[u_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[u_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>a7)break}return await s,r}catch(n){throw n}}a(u7,"deleteTransactions")});var W0=C((COe,Y0)=>{"use strict";var $y=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Y0.exports=$y});var Q0=C((LOe,z0)=>{"use strict";var d7=$s(),f7=o_(),DOe=W0(),bi=(H(),P($)),_7=ae(),Vy=dt(),h7=eo(),m7=i_(),p7=t_(),{getSchemaPath:E7}=Et();z0.exports=g7;async function g7(e,t=!0){let r;e.schema===bi.SYSTEM_SCHEMA_NAME?r=h7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await T7(e),s=E7(e.schema,e.table),i=await Vy.openEnvironment(s,e.table);return t===!0&&await S7(e,i,r.hash_attribute),Vy.dropDBI(i,e.attribute),n}a(g7,"lmdbDropAttribute");async function S7(e,t,r){let n=Vy.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(S7,"removeAttributeFromAllObjects");async function T7(e){let t=new d7(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await m7(t)).filter(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(_7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new f7(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return p7(i)}a(T7,"dropAttributeFromSystem")});var tx=C((UOe,ex)=>{"use strict";var Ky=dt(),mu=Ut(),vOe=un(),Yy=(H(),P($)),j0=ae(),{getTransactionAuditStorePath:A7}=Et(),R7=fu(),Xp=lu(),y7=J();ex.exports=b7;async function b7(e){let t=A7(e.schema,e.table),r=await Ky.openEnvironment(t,e.table,!0),n=Ky.listDBIs(r);Ky.initializeDBIs(r,mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Yy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return J0(r,e.search_values);case Yy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,N7(r,e.search_values,s);case Yy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return O7(r,e.search_values);default:return J0(r)}}a(b7,"readAuditLog");function J0(e,t=[0,Date.now()]){j0.isEmpty(t[0])&&(t[0]=0),j0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[mu.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 Xp,s))}a(J0,"searchTransactionsByTimestamp");function O7(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[mu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Z0(e,i))}return Object.fromEntries(r)}a(O7,"searchTransactionsByUsername");function N7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=R7.equals(e,mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,mu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=Z0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);X0(l,"records",r,f,o),X0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(N7,"searchTransactionsByHashValues");function X0(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new Xp(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new Xp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(X0,"loopRecords");function Z0(e,t){let r=[];try{let n=e.dbis[mu.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 Xp,i);r.push(o)}}catch(i){y7.warn(i)}return r}catch(n){throw n}}a(Z0,"batchSearchTransactions")});var nx=C((kOe,rx)=>{"use strict";var{getSchemaPath:BOe}=Et(),HOe=dt(),{database:w7}=(ve(),P(it));rx.exports={writeTransaction:I7};async function I7(e,t,r){return w7({database:e,table:t}).transaction(r)}a(I7,"writeTransaction")});var ax=C((GOe,ox)=>{"use strict";var{getSchemaPath:sx}=Et(),ix=dt();ox.exports={flush:C7,resetReadTxn:P7};async function C7(e,t){return(await ix.openEnvironment(sx(e,t),t.toString())).flushed}a(C7,"flush");async function P7(e,t){try{(await ix.openEnvironment(sx(e,t),t.toString())).resetReadTxn()}catch{}}a(P7,"resetReadTxn")});var dx=C(($Oe,ux)=>{"use strict";var{Readable:D7}=require("stream"),{getDatabases:L7}=(ve(),P(it)),{readSync:M7,openSync:v7,createReadStream:cx}=require("fs"),{open:U7}=require("lmdb"),lx=Mf(),x7=vf(),{AUDIT_STORE_OPTIONS:B7}=(Xi(),P(fx)),{INTERNAL_DBIS_NAME:H7,AUDIT_STORE_NAME:k7}=Ut();ux.exports=G7;var Wy=32768,F7=100;async function G7(e){let t=e.database||e.schema||"data",r=L7()[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=U7({noSync:!0,maxDbs:x7.MAX_DBS}),h,_=d.openDB(H7,new lx(!1)),m=f.useReadTransaction(),S=0,g=a(async function(E,A){A.encoding="binary",A.encoder=void 0;let N=d.openDB(E,A),v=f.openDB(E,A);for(let{key:F,version:q,value:Y}of v.getRange({start:null,transaction:m,versions:v.useVersions}))h=N.put(F,Y,q),S++%F7===0&&(await new Promise(ee=>setTimeout(ee,20)),m.openTimer&&(m.openTimer=0))},"copyDatabase");for(let{key:E,value:A}of f.getRange({transaction:m,start:!1}))if(s.some(N=>E.startsWith?.(N+"/"))){_.put(E,A);let[,N]=E.split("/"),v=!N,F=new lx(!v,v);await g(E,F)}e.include_audit&&await g(k7,{...B7}),await h;let R=cx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=v7(o.path);return o.transaction(()=>{let u=Buffer.alloc(Wy);M7(c,u,0,Wy),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=cx(null,{fd:c,start:Wy}),h=new D7.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});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(G7,"getBackup")});var mx=C((KOe,hx)=>{"use strict";var q7=J(),{handleHDBError:$7}=he(),V7=VL(),K7=Ip(),Y7=Ey(),W7=wU(),z7=t_(),Q7=by(),j7=ZU(),J7=c0(),X7=i_(),Z7=p0(),eee=w0(),tee=L0(),ree=v0(),nee=H0(),see=K0(),iee=Ly(),oee=Q0(),aee=tx(),cee=nx(),_x=ax(),lee=dx(),zy=class extends V7{static{a(this,"LMDBBridge")}async searchByConditions(t){return Z7(t)}async getDataByHash(t){return await Q7(t)}async searchByHash(t){return await j7(t)}async getDataByValue(t,r){return await J7(t,r)}async searchByValue(t){return await X7(t)}async createSchema(t){return await W7(t)}async dropSchema(t){return await eee(t)}async createTable(t,r){return await tee(t,r)}async dropTable(t){return await iee(t)}async createAttribute(t){return await K7(t)}async createRecords(t){return await Y7(t)}async updateRecords(t){return await ree(t)}async upsertRecords(t){try{return await nee(t)}catch(r){throw $7(r,null,null,q7.ERR,r)}}async deleteRecords(t){return await z7(t)}async dropAttribute(t){return await oee(t)}async deleteAuditLogsBefore(t){return await see(t)}async readAuditLog(t){return await aee(t)}writeTransaction(t,r,n){return cee.writeTransaction(t,r,n)}flush(t,r){return _x.flush(t,r)}resetReadTxn(t,r){return _x.resetReadTxn(t,r)}getBackup(t){return lee(t)}};hx.exports=zy});var jy={};Ue(jy,{add:()=>Zp,applyReverse:()=>px,getRecordAtTime:()=>Qy,rebuildUpdateBefore:()=>eE});function Zp(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 eE(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,Zp(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function px(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=uee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Ex}}function Qy(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=wt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":px(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Ex&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=wt(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 uee,Ex,tE=be(()=>{Xi();a(Zp,"add");Zp.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)};uee={add:Zp};a(eE,"rebuildUpdateBefore");a(px,"applyReverse");Ex={};a(Qy,"getRecordAtTime")});function Sn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function iE(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 $n.ClientError(`${l} must be a string, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a string, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a number, attempt to assign ${h}`);Sn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new $n.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new $n.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new $n.ClientError(`${l} must be a number, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a boolean, attempt to assign ${d}`);Sn(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 $n.ClientError(`${l} must be a Date, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof mi||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be a Blob, attempt to assign ${d}`);Sn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){Sn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new $n.ClientError(`${l} must be an object, attempt to assign ${d}`);Sn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let m=this.getRecord()?.[l];return _.update(m)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=Jy(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},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 $n.ClientError("Can not add a property to a sealed table schema");Sn(this)[c]=l}),i("deleteProperty",function(c){Sn(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 h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,Sx);break}o=c}while(o&&o!==Sx)}function Jy(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends d_{static{a(this,"TrackedObject")}},iE(r,t)),new r(e)):new d_(e);case Array:let n=new nE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Jy(o,t?.elements)),n[s]=o}return n;default:return e}}function oE(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=oE(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 Bc(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=Bc(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=jy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Bc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)dee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function rE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[xc]||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(rE(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(rE(s))return!0}else return!0}else return!0}}return!1}var $n,gx,Sx,d_,dee,xc,nE,sE,Xy=be(()=>{$n=M(he());tE();cs();a(Sn,"getChanges");a(iE,"assignTrackedAccessors");gx=Object.prototype,Sx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(gx[t])return gx[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()[t];if(s&&typeof s=="object"){let i=Jy(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Jy,"trackObject");d_=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}};iE(d_,{});a(oE,"collapseData");dee=Object.prototype.hasOwnProperty;a(Bc,"updateAndFreeze");a(rE,"hasChanges");xc=Symbol.for("has-array-changes"),nE=class extends Array{static{a(this,"TrackedArray")}#e;[xc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[xc]=!0,super.splice(...t)}push(...t){return this[xc]=!0,super.push(...t)}pop(){return this[xc]=!0,super.pop()}unshift(...t){return this[xc]=!0,super.unshift(...t)}shift(){return this[xc]=!0,super.shift()}};nE.prototype.constructor=Array;sE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var wx={};Ue(wx,{ResourceBridge:()=>tb});function rb({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function Ax(e,t){let r=Oi(e),n=rb(e,r);if(!r)throw new Vs.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;Nt(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&&oE(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 Oi(e){let t=e.database||e.schema||_ee,r=Xe()[t];if(!r)throw(0,Vs.handleHDBError)(new Error,fee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Rx(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*yx(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var bx,aE,Vs,Ox,Zy,eb,Nx,fee,_ee,hee,mee,Tx,tb,Ix=be(()=>{"use strict";bx=M(mx()),aE=M(_u()),Vs=M(he());ve();Ox=M(Hf());H();Zy=M(oo()),eb=M(qs()),Nx=M(ae());uc();Xy();({HDB_ERROR_MSGS:fee}=Vs.hdb_errors),_ee="data",hee=1e4,mee=10,tb=class extends bx.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Tx=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,aE.default)(t,"conditions");if(r)throw(0,Vs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Oi(t);if(!n)throw new Vs.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:rb(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 Vs.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}]}ut({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(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){Oi(t).dropTable()}createSchema(t){return pu({database:t.schema,table:null}),Zy.signalSchemaChange(new eb.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await nb(t.schema),Zy.signalSchemaChange(new eb.SchemaEventMsg(process.pid,$t.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Tx.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Ox.default)(t),s,i=Xe()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Nt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.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],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=oE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let m=f[_];if(typeof m=="function")try{let S=m([[h]]);Array.isArray(S)&&(m=S[0].func_val,f[_]=m)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=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),Nt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Rx(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Xe()[t.schema][t.table];if(!r.createdTimeProperty)throw new Vs.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:bm.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Nx.async_set_timeout)(mee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%hee===0&&await u();return l.length>0&&await u(),s?Rx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,aE.default)(t,"hashes");if(r)throw r;return Ax(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Ax(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&eA[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,aE.default)(t,"value");if(n)throw n;let s=Oi(t);if(!s)throw new Vs.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===bm.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:rb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Oi(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){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(t),n={};switch(t.search_type){case Om.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 Om.USERNAME:let s=t.search_values;for await(let i of yx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return yx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(rb,"getSelect");a(Ax,"getRecords");a(Oi,"getTable");a(Rx,"createDeleteResponse");a(yx,"groupRecordsInHistory")});var kn=C((sNe,Cx)=>{"use strict";var{ResourceBridge:pee}=(Ix(),P(wx)),Eee=ce();Eee.initSync();var cE;function gee(){return cE||(cE=new pee,cE)}a(gee,"getBridge");Cx.exports=gee()});var En=C((oNe,Mx)=>{"use strict";var uE=XA(),Pr=ae(),See=require("util"),dE=kn(),Tee=Fs(),Px=J(),{handleHDBError:Hc,hdb_errors:Aee}=he(),{HTTP_STATUS_CODES:kc}=Aee,Ree=See.promisify(Tee.getTableSchema),yee="updated",Dx="inserted",Lx="upserted";Mx.exports={insert:Oee,update:Nee,upsert:wee,validation:bee,flush:Iee};async function bee(e){if(Pr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Pr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Pr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Ree(e.schema,e.table),r=uE(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&&Pr.isEmptyOrZeroLength(c[n]))throw Px.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Pr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Px.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Pr.isEmpty(c[n])&&c[n]!==""&&s.has(Pr.autoCast(c[n]))&&(c.skip=!0),s.add(Pr.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(bee,"validation");async function Oee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=uE(e);if(t)throw Hc(new Error,t.message,kc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw Hc(new Error,r,kc.BAD_REQUEST);let n=await dE.createRecords(e);return lE(Dx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Oee,"insertData");async function Nee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=uE(e);if(t)throw Hc(new Error,t.message,kc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw Hc(new Error,r,kc.BAD_REQUEST);let n=await dE.updateRecords(e);return Pr.isEmpty(n.existing_rows)?lE(yee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):lE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Nee,"updateData");async function wee(e){if(e.operation!=="upsert")throw Hc(new Error,"invalid operation, must be upsert",kc.INTERNAL_SERVER_ERROR);let t=uE(e);if(t)throw Hc(new Error,t.message,kc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw Hc(new Error,r,kc.BAD_REQUEST);let n=await dE.upsertRecords(e);return lE(Lx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(wee,"upsertData");function lE(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Dx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Lx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(lE,"returnObject");function Iee(e){return Pr.transformReq(e),dE.flush(e.schema,e.table)}a(Iee,"flush")});var kx=C((cNe,Hx)=>{var Eu=require("validate.js"),Ux=rt(),gu=(H(),P($)),{handleHDBError:Cee,hdb_errors:Pee}=he(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:Dee}=Pee,sb=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Lee={STRUCTURE_USER:"structure_user"},vx=Object.values(gu.ROLE_TYPES_ENUM),Mee="attribute_permissions",vee="attribute_name",{PERMS_CRUD_ENUM:Su}=gu,Uee=[Mee,...Object.values(Su)],xx=[Su.READ,Su.INSERT,Su.UPDATE],xee=[vee,...xx];function Bee(e){let t=sb();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Bx(e,t)}a(Bee,"addRoleValidation");function Hee(e){let t=sb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Bx(e,t)}a(Hee,"alterRoleValidation");function kee(e){let t=sb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ux.validateObject(e,t)}a(kee,"dropRoleValidation");var Fee=["operation","role","id","permission","hdb_user","access"];function Bx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Fee.includes(n[o])||s.push(n[o]);s.length>0&&tr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=Ux.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{tr(o,r)}),e.permission){let o=Gee(e);o&&tr(o,r),vx.forEach(c=>{e.permission[c]&&!Eu.isBoolean(e.permission[c])&&tr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(vx.indexOf(o)<0){if(o===Lee.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]||tr(Yt.SCHEMA_NOT_FOUND(d),r)}continue}tr(Yt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){tr(Yt.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]){tr(Yt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{Uee.includes(f)||tr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Su).forEach(f=>{Eu.isDefined(u[f])?Eu.isBoolean(u[f])||tr(Yt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):tr(Yt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){tr(Yt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){tr(Yt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!xee.includes(S)&&S!==Su.DELETE&&tr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!Eu.isDefined(_.attribute_name)){tr(Yt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=_.attribute_name;if(!f.includes(m)){tr(Yt.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}xx.forEach(S=>{Eu.isDefined(_[S])?Eu.isBoolean(_[S])||tr(Yt.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):tr(Yt.ATTR_PERM_MISSING(S,m),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.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 h=`${o}.${l}`;tr(Yt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return qee(r)}a(Bx,"customValidate");Hx.exports={addRoleValidation:Bee,alterRoleValidation:Hee,dropRoleValidation:kee};function Gee(e){let{operation:t,permission:r}=e;if(t===gu.OPERATIONS_ENUM.ADD_ROLE||t===gu.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 Yt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?gu.ROLE_TYPES_ENUM.SUPER_USER:gu.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Gee,"validateNoSUPerms");function qee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Yt.ROLE_PERMS_ERROR,...e};return Cee(new Error,n,Dee.BAD_REQUEST)}else return null}a(qee,"generateRolePermResponse");function tr(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(tr,"addPermError")});var __=C((dNe,$x)=>{"use strict";var Fx=En(),Gx=Kr(),$ee=Pc(),ob=kx(),ab=oo(),uNe=require("uuid").v4,Vee=require("util"),fE=(H(),P($)),Kee=ae(),cb=Gx.searchByValue,Yee=Gx.searchByHash,Wee=Vee.promisify($ee.delete),zee=$s(),Qee=hu(),{hdb_errors:jee,handleHDBError:Fc}=he(),{HDB_ERROR_MSGS:qx,HTTP_STATUS_CODES:f_}=jee,{UserEventMsg:lb}=qs();$x.exports={addRole:Jee,alterRole:Xee,dropRole:Zee,listRoles:ete};function ib(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(ib,"scrubRoleDetails");async function Jee(e){let t=ob.addRoleValidation(e);if(t)throw t;e=ib(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 Fc(i)}if(n&&n.length>0)throw Fc(new Error,qx.ROLE_ALREADY_EXISTS(e.role),f_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Fx.insert(s),ab.signalUserChange(new lb(process.pid)),e=ib(e),e}a(Jee,"addRole");async function Xee(e){let t=ob.alterRoleValidation(e);if(t)throw t;e=ib(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Fx.update(r)}catch(s){throw Fc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Fc(new Error,"Invalid role id",f_.BAD_REQUEST,void 0,void 0,!0);return await ab.signalUserChange(new lb(process.pid)),e}a(Xee,"alterRole");async function Zee(e){let t=ob.dropRoleValidation(e);if(t)throw Fc(new Error,t,f_.BAD_REQUEST,void 0,void 0,!0);let r=new Qee(fE.SYSTEM_SCHEMA_NAME,fE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Yee(r));if(n.length===0)throw Fc(new Error,qx.ROLE_NOT_FOUND,f_.NOT_FOUND,void 0,void 0,!0);let s=new zee(fE.SYSTEM_SCHEMA_NAME,fE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await cb(s)),o=!1;if(Kee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Fc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,f_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Wee(c),ab.signalUserChange(new lb(process.pid)),`${n[0].role} successfully deleted`}a(Zee,"dropRole");async function ete(){return cb({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(ete,"listRoles")});var ub={};Ue(ub,{start:()=>Yx,startOnMainThread:()=>nte});function Yx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Vx.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(tte.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 h=u.attributes[d];h.attribute_name=d,f.push(h)}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 rte(i)}}}async function rte(e){let t=Xe().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Kx.isEqual)(i,e)?void 0:(e.id=r.id,(0,_E.alterRole)(e))}return(0,_E.addRole)(e)}var _E,Vx,Kx,tte,nte,Wx=be(()=>{ve();_E=M(__()),Vx=require("yaml"),Kx=require("lodash"),tte=["super_user","cluster_user","structure_user"];a(Yx,"start");a(rte,"ensureRole");nte=Yx});async function hE(e){let t=(0,jx.pathToFileURL)(e).toString();if(ste)return h_||(h_=ite(ate)),(await(await h_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function ite(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),h_=new Compartment({console,Math,Date,fetch:ote,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Qx.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$r,tables:Vn,databases:$e})}};let n=await(0,zx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),h_}function ote(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 ate(){return{Resource:$r,tables:Vn}}var zx,Qx,jx,ste,h_,db=be(()=>{Xo();ve();zx=require("fs/promises"),Qx=require("path"),jx=require("url"),ste=!1;a(hE,"secureImport");a(ite,"getCompartment");a(ote,"secureOnlyFetch");a(ate,"getGlobalVars")});var _b={};Ue(_b,{handleFile:()=>cte});async function cte(e,t,r,n){let s=new Map,i=await hE(r);c(i.default)&&n.set((0,fb.dirname)(t),i.default),o(i,(0,fb.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 fb,Jx=be(()=>{db();fb=require("path");a(cte,"handleFile")});var mb={};Ue(mb,{start:()=>lte});function lte({resources:e}){e.set("login",hb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var hb,Xx=be(()=>{Xo();a(lte,"start");hb=class extends $r{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 T_={};Ue(T_,{addAnalyticsListener:()=>S_,calculateCPUUtilization:()=>EB,diffResourceUsage:()=>gB,recordAction:()=>rr,recordActionBinary:()=>Kn,setAnalyticsEnabled:()=>ute});function ute(e){fB=e}function dte(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 fte(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},pE.set(e,o)}function rr(e,t,r,n,s){if(!fB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=pE.get(i);o?dte(e,o):fte(i,e,t,r,n,s),mE||_te()}function Kn(e,t,r,n,s){rr(!!e,t,r,n,s)}function S_(e){mB.push(e)}function _te(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Gc.threadId,metrics:t};for(let[s,i]of pE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of pB){let h=Math.floor(c*d),_=o[h-1];if(h>l){let m=h-l;if(_===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:_,count:m}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await SB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Gc.threadId,byThread:!0,...n});for(let s of mB)s(t);pE=new Map,Gc.parentPort?Gc.parentPort.postMessage({type:hB,report:r}):RB({report:r})},_B).unref()}function EE(e,t,r){let n={id:(0,E_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function EB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function gB(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function hte(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};EE(e,"table-size",l),qc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function Zx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=dB.default.statSync(s.primaryStore.env.path).size,c=hte(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};EE(e,"database-size",u),qc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){qc.warn?.("Error getting DB size metrics",s)}}function eB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={database:r,...i};EE(e,"storage-volume",o),qc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){qc.warn?.("Error getting DB volume metrics",s)}}async function mte(e,t=6e4){let r=Eb(),n=TB(),s=new Promise(E=>{let A=performance.now();setImmediate(()=>{let N=performance.now();N-A>5e3&&qc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(N-A)+"ms"),A=performance.now()}),n.primaryStore.prefetch([1],()=>{let N=performance.now();N-A>5e3&&qc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(N-A)+"ms"),E(N-A)})}),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:A}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!A)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:N,threadId:v}=A;for(let F of N||[]){let{path:q,method:Y,type:ee,metric:oe,count:z,total:se,distribution:W,threads:pe,...Ae}=F;z||(z=1);let Pe=oe+(q?"-"+q:"");Y!==void 0&&(Pe+="-"+Y),ee!==void 0&&(Pe+="-"+ee);let me=c.get(Pe);if(me){if(me.threads){let lt=me.threads[v];if(lt)me=lt;else{me.threads[v]={...Ae};continue}}me.count||(me.count=1);let yt=me.count;for(let lt in Ae){let Rr=Ae[lt];typeof Rr=="number"&&(me[lt]=(me[lt]*yt+Rr*z)/(yt+z))}me.count+=z,se>=0&&(me.total+=se,me.ratio=me.total/me.count)}else me={period:t,...F},delete me.distribution,c.set(Pe,me),me.byThread&&(me.threads=[],me.threads[v]={...Ae},u.push(me));if(W){W=W.map(lt=>typeof lt=="number"?{value:lt,count:1}:lt);let yt=l.get(Pe);yt?yt.push(...W):l.set(Pe,W)}}await SB()}for(let E of u){let{path:A,method:N,type:v,metric:F,count:q,total:Y,distribution:ee,threads:oe,...z}=E;oe=oe.filter(se=>se);for(let se in z){if(typeof E[se]!="number")continue;let W=0;for(let pe of oe){let Ae=pe[se];typeof Ae=="number"&&(W+=Ae)}E[se]=W}E.count=oe.length,delete E.threads,delete E.byThread}for(let[E,A]of l){let N=c.get(E);A.sort((lt,Rr)=>lt.value>Rr.value?1:-1);let v=N.count-1,F=[],q=0,Y=0,ee;for(let lt of pB){let Rr=v*lt;for(;q<Rr;)ee=A[Y++],q+=ee.count,Y===1&&q--;let ss=A[Y>1?Y-2:0];ee||(ee=A[0]),F.push(ee.value-(ee.value-ss.value)*(q-Rr)/ee.count)}let[oe,z,se,W,pe,Ae,Pe,me,yt]=F;Object.assign(N,{p1:oe,p10:z,p25:se,median:W,p75:pe,p90:Ae,p95:Pe,p99:me,p999:yt})}let d;for(let[E,A]of c)A.id=(0,E_.getNextMonotonicTime)(),A.time=f,n.primaryStore.put(A.id,A,{append:!0}).then(N=>{N||n.primaryStore.put(A.id,A)}),d=!0;let h=Date.now(),{idle:_,active:m}=performance.eventLoopUtilization();if(d||m*10>_){let E=(0,E_.getNextMonotonicTime)(),A={id:E,metric:"main-thread-utilization",idle:_-tB,active:m-rB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,A,{append:!0}).then(N=>{N||n.primaryStore.put(E,A)})}tB=_,rB=m;let S=process.resourceUsage(),g=gB(m_,S);g.time=h,g.period=m_.time?h-m_.time:t,g.cpuUtilization=EB(m_,g.period),EE(n,"resource-usage",g),m_=g;let R=Xe();Zx(n,R),Zx(n,{system:R.system}),eB(n,R),eB(n,{system:R.system})}async function nB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Eb(){return sB||(sB=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function TB(){return iB||(iB=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function gte(){AB=!0;let e=(0,g_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await mte(_B,e),await nB(Eb(),pte),await nB(TB(),Ete)},Math.min(e/2,2147483647)).unref()}function RB(e,t){let r=e.report;r.threadId=t?.threadId||Gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(oB+=n.mean*n.count);r.totalBytesProcessed=oB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(aB.get(t))}),aB.set(t,t.performance.eventLoopUtilization())),r.id=(0,E_.getNextMonotonicTime)(),Eb().primaryStore.put(r.id,r),AB||gte(),Ste&&(yB=Ate(r))}async function Ate(e){if(await yB,!la){let r=(0,p_.dirname)((0,lB.getLogFilePath)());try{la=await(0,pb.open)((0,p_.join)(r,"analytics.log"),"r+")}catch{la=await(0,pb.open)((0,p_.join)(r,"analytics.log"),"w+")}}let t=(await la.stat()).size;if(t>Tte){let r=Buffer.alloc(t);await la.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await la.write(r,{position:0}),await la.truncate(r.length),t=r.length}await la.write(JSON.stringify(e)+`
|
|
20
20
|
`,t)}var Gc,cB,lB,uB,p_,pb,E_,g_,dB,qc,pE,fB,mE,_B,hB,mB,pB,tB,rB,m_,SB,pte,Ete,sB,iB,AB,oB,aB,Ste,yB,la,Tte,Ni=be(()=>{Gc=require("worker_threads"),cB=M(nt());ve();lB=M(J()),uB=M(hi()),p_=require("path"),pb=require("fs/promises"),E_=M(un()),g_=M(ce());H();Gr();dB=M(require("node:fs")),qc=(0,uB.loggerWithTag)("analytics");(0,g_.initSync)();pE=new Map,fB=(0,g_.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(ute,"setAnalyticsEnabled");a(dte,"recordExistingAction");a(fte,"recordNewAction");a(rr,"recordAction");We.recordAnalytics=rr;a(Kn,"recordActionBinary");mE=0,_B=1e3,hB="analytics-report",mB=[];a(S_,"addAnalyticsListener");pB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(_te,"sendAnalytics");a(EE,"storeMetric");a(EB,"calculateCPUUtilization");a(gB,"diffResourceUsage");a(hte,"storeTableSizeMetrics");a(Zx,"storeDBSizeMetrics");a(eB,"storeVolumeMetrics");a(mte,"aggregation");tB=0,rB=0,m_={},SB=a(()=>new Promise(setImmediate),"rest");a(nB,"cleanup");pte=36e5,Ete=31536e6;a(Eb,"getRawAnalyticsTable");a(TB,"getAnalyticsTable");(0,cB.setChildListenerByType)(hB,RB);a(gte,"startScheduledTasks");oB=0,aB=new Map,Ste=!1;a(RB,"recordAnalytics");Tte=1e6;a(Ate,"logAnalytics")});var bB={};Ue(bB,{Headers:()=>lo,appendHeader:()=>gE,mergeHeaders:()=>gb});function gE(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function gb(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new lo(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var lo,A_=be(()=>{lo=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(gE,"appendHeader");a(gb,"mergeHeaders")});function CB(e){let t={openapi:Rte,info:{title:"HarperDB HTTP REST interface",version:IB.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:A,name:N,elements:v,relationship:F,definition:q}of o){if(F)A==="array"?u[N]={type:"array",items:{$ref:ua+v.type}}:u[N]={$ref:ua+A};else{let Y=q??v?.definition;if(Y){if(!t.components.schemas[Y.type]){let ee={};Y.properties.forEach(oe=>{ee[oe.name]=new Rb(Sb[oe.type],oe.type)}),t.components.schemas[Y.type]=new wB(ee)}A==="array"?u[N]={type:"array",items:{$ref:ua+Y.type}}:u[N]={$ref:ua+Y.type}}else A==="array"?v.type==="Any"||v.type=="ID"?u[N]={type:"array",items:{format:v.type}}:u[N]={type:"array",items:new Rb(Sb[v.type],v.type)}:A==="Any"||A=="ID"?u[N]={format:A}:u[N]=new Rb(Sb[A],A)}f.push(new yb(N,"query",u[N]))}let d=Object.keys(u),h=new yb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new yb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new wB(u);let m=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",R=typeof l.delete=="function",E="/"+s+"/";m&&(t.paths[E]={},t.paths[E].post=new yte(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new Tb(f,r,{200:new Ab({$ref:ua+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new NB(f,r,"delete all the records that match the provided query",{204:new OB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new Tb([h],r,{200:new Ab({$ref:ua+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new bte([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new NB([h],r,"delete a record with the given primary key",{204:new OB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new Tb([h,_],r,{200:new Ab({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function yte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ua+e}}}},this.security=t,this.responses={200:{description:bb,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Tb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Ab(e){this.description=bb,this.content={"application/json":{schema:e}}}function OB(){this.description="successfully processed request, no content returned to client"}function bte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ua+r}}}},this.responses={200:{description:bb}}}function NB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function wB(e){this.type="object",this.properties=e}function Rb(e,t){this.type=e,this.format=t}function yb(e,t,r){this.name=e,this.in=t,this.schema=r}var IB,Rte,Sb,ua,bb,PB=be(()=>{IB=M(pt()),Rte="3.0.3",Sb={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ua="#/components/schemas/",bb="successful operation";a(CB,"generateJsonApi");a(yte,"Post");a(Tb,"Get");a(Ab,"Response200");a(OB,"Response204");a(bte,"Put");a(NB,"Delete");a(wB,"ResourceSchema");a(Rb,"Type");a(yb,"Parameter")});var TE={};Ue(TE,{parseHeaderValue:()=>Nb,start:()=>wte});async function Nte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&zm(e);let i=new lo;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==DB){let g=SE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new dc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=Nb(g);for(let E of R)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=Nb(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await Nt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ji(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Tu.ClientError(g,400)}if(e.authorize=!0,o===DB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return CB(SE);throw new Tu.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Tu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Tu.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,Ob.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=gb(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=Of(d.data,e,d)),d}else if(_=e.lastModified){Ote[0]=_;let g=String.fromCharCode(34,(Dr[0]&63)+62,(Dr[0]>>6)+(Dr[1]<<2&63)+62,(Dr[1]>>4)+(Dr[2]<<4&63)+62,(Dr[2]>>2)+62,(Dr[3]&63)+62,(Dr[3]>>6)+(Dr[4]<<2&63)+62,(Dr[4]>>4)+(Dr[5]<<4&63)+62,(Dr[5]>>2)+62,(Dr[6]&63)+62,(Dr[6]>>6)+(Dr[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),Ob.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let m={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(m.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(m.body=Of(d,e,m),s==="HEAD"&&(m.body=void 0)),m}catch(o){o.statusCode?o.statusCode===500?wi.warn(o):wi.info(o):wi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=Of(o.contentType?o:o.toString(),e,c),c}}function wte(e){Ob=e,!LB&&(LB=!0,SE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Nte(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{R_++;let s=new Ln;MB||(MB=!0,S_(l=>{R_>0&&l.push({metric:"ws-connections",connections:R_,byThread:!0})}));let i;t.on("error",l=>{i=!0,wi.warn(l)});let o;t.on("message",a(function(u){o||(o=Ji(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);rr(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{R_--,Kn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=SE.getMatch(l,"ws");if(Kn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,rr(m=>({count:m.count,total:R_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new dc(u.relativeURL),d=u.Resource;c=(await Nt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let m=await ra(_.value,r);t.send(m),rr(m.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(S=>t._socket.once("drain",S))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?wi.warn(l):wi.info(l):wi.error(l),t.close(Ite[l.statusCode]||1011,l.toString())}t.close()},e))}function Nb(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var wi,Tu,Dr,Ote,Ob,DB,LB,SE,MB,R_,Ite,vB=be(()=>{zi();Ni();wi=M(J()),Tu=M(he());pf();Kl();uc();A_();PB();pf();Dr=new Uint8Array(8),Ote=new Float64Array(Dr.buffer,0,1),Ob={},DB="openapi";a(Nte,"http");R_=0;a(wte,"start");Ite={401:3e3,403:3003};a(Nb,"parseHeaderValue")});var wb=C((FNe,xB)=>{var{recordAction:AE,recordActionBinary:UB}=(Ni(),P(T_)),Cte=require("fastify-plugin"),Pte=200;xB.exports=Cte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),AE(o,"duration",u,d,f),UB(s.raw.statusCode<400,"success",u,d,f),UB(1,"response_"+s.raw.statusCode,u,d,f);let h=Pte;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{AE(performance.now()-c,"transfer",u,d,f),AE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,AE(h,"bytes-sent",u,d,f));let _=o.toFixed(3),m=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",m?`${m}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var HB=C((GNe,BB)=>{var Dte=rt(),Lte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};BB.exports=function(e){return Dte.validateObject(e,Lte)}});var RE=C((qNe,kB)=>{"use strict";var Mte=(H(),P($)).OPERATIONS_ENUM,Ib=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Mte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};kB.exports=Ib});var O_={};Ue(O_,{createTokens:()=>Ute,getJWTRSAKeys:()=>wE,refreshOperationToken:()=>xte,validateOperationToken:()=>Db,validateRefreshToken:()=>IE});async function wE(){if(yE)return yE;try{let e=y_.default.join(b_.default.getHdbBasePath(),JT),t=await bE.default.readFile(y_.default.join(e,Qd.JWT_PASSPHRASE_NAME),"utf8"),r=await bE.default.readFile(y_.default.join(e,Qd.JWT_PRIVATE_KEY_NAME),"utf8");return yE={publicKey:await bE.default.readFile(y_.default.join(e,Qd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},yE}catch(e){throw NE.default.error(e),new Ks.ClientError(Ru.NO_ENCRYPTION_KEYS,Au.INTERNAL_SERVER_ERROR)}}async function Ute(e){let t=(0,Cb.validateBySchema)(e,Ii.default.object({username:Ii.default.string().optional(),password:Ii.default.string().optional(),role:Ii.default.string().optional(),expires_in:Ii.default.alternatives(Ii.default.string(),Ii.default.number()).optional()}));if(t)throw new Ks.ClientError(t.message);let r;try{let d=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,d=!1),r=await(0,Pb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw NE.default.error(d),new Ks.ClientError(Ru.INVALID_CREDENTIALS,Au.UNAUTHORIZED)}if(!r)throw new Ks.ClientError(Ru.INVALID_CREDENTIALS,Au.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await wE(),c=await yu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??VB,algorithm:OE,subject:"operation"}),l=await yu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:vte,algorithm:OE,subject:"refresh"}),u=XR(l,"sha256");if((await(0,FB.update)(new GB.default(zd,Fl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ks.ClientError(Ru.REFRESH_TOKEN_SAVE_FAILED,Au.INTERNAL_SERVER_ERROR);return qB.default.signalUserChange(new $B.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function xte(e){let t=(0,Cb.validateBySchema)(e,Ii.default.object({refresh_token:Ii.default.string().required()}).required());if(t)throw new Ks.ClientError(t.message);let{refresh_token:r}=e;await IE(r);let n=await wE(),s=await yu.default.decode(r);return{operation_token:await yu.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:VB,algorithm:OE,subject:"operation"})}}async function Db(e){return KB(e,"operation")}async function IE(e){return KB(e,"refresh")}async function KB(e,t){try{let r=await wE(),n=await yu.default.verify(e,r.publicKey,{algorithms:OE,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,Pb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!ZR(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw NE.default.warn(r),r?.name==="TokenExpiredError"?new Ks.ClientError(Ru.TOKEN_EXPIRED,Au.FORBIDDEN):new Ks.ClientError(Ru.INVALID_TOKEN,Au.UNAUTHORIZED)}}var yu,bE,y_,Ii,Cb,Ks,NE,Pb,FB,GB,qB,$B,b_,Au,Ru,VB,vte,OE,yE,bu=be(()=>{yu=M(require("jsonwebtoken")),bE=M(require("fs-extra")),y_=M(require("node:path")),Ii=M(require("joi")),Cb=M(rt());H();Ks=M(he()),NE=M(J());Hp();Pb=M(Fn()),FB=M(En()),GB=M(RE()),qB=M(oo()),$B=M(qs()),b_=M(ce()),{HTTP_STATUS_CODES:Au,AUTHENTICATION_ERROR_MSGS:Ru}=Ks.hdb_errors;b_.default.initSync();VB=b_.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",vte=b_.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",OE="RS256";a(wE,"getJWTRSAKeys");a(Ute,"createTokens");a(xte,"refreshOperationToken");a(Db,"validateOperationToken");a(IE,"validateRefreshToken");a(KB,"validateToken")});var Lb=C((WNe,zB)=>{"use strict";var Bte=HB(),Ou=require("passport"),Hte=require("passport-local").Strategy,kte=require("passport-http").BasicStrategy,Fte=require("util"),Gte=Fn(),WB=Fte.callbackify(Gte.findAndValidateUser),YNe=Cn(),qte=(H(),P($)),YB=(bu(),P(O_));Ou.use(new Hte(function(e,t,r){WB(e,t,r)}));Ou.use(new kte(function(e,t,r){WB(e,t,r)}));Ou.serializeUser(function(e,t){t(null,e)});Ou.deserializeUser(function(e,t){t(null,e)});function $te(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Ou.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===qte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?YB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):YB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ou.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a($te,"authorize");function Vte(e,t){let r=Bte(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(Vte,"checkPermissions");zB.exports={authorize:$te,checkPermissions:Vte}});var CE=C((QNe,QB)=>{"use strict";var Kte=kn();QB.exports={writeTransaction:Yte};function Yte(e,t,r){return Kte.writeTransaction(e,t,r)}a(Yte,"writeTransaction")});var ZB=C((XNe,XB)=>{"use strict";var Wte=Kr(),zte=Fs(),jB=J(),Qte=En(),JNe=CE(),jte=require("clone"),vb=require("alasql"),Jte=Pp(),JB=require("util"),Xte=JB.promisify(zte.getTableSchema),Zte=JB.promisify(Wte.search),ere=(H(),P($)),Mb=ae();Jte(vb);XB.exports={update:rre};var tre="There was a problem performing this update. Please check the logs and try again.";async function rre({statement:e,hdb_user:t}){let r=await Xte(e.table.databaseid,e.table.tableid),n=nre(e.columns);Mb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=jte(s),c=Mb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=vb.parse(l).statements[0],f=await Zte(u),d=sre(n,f);return ire(o,d,t)}a(rre,"update");function nre(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vb.compile(`SELECT ${r.expression.toString()} AS [${ere.FUNC_VAL}] FROM ?`)}),t}catch(t){throw jB.error(t),new Error(tre)}}a(nre,"createUpdateRecord");function sre(e,t){return Mb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(sre,"buildUpdateRecords");async function ire(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Qte.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){jB.error(`Error delete new_attributes from update response: ${i}`)}return s}a(ire,"updateRecords")});var tH=C((rwe,eH)=>{var ore=require("alasql"),are=Kr(),cre=J(),lre=kn(),xb=require("util"),Ub=ae(),ure=(H(),P($)),dre=Fs(),ewe=CE(),twe=En(),fre="record",_re="successfully deleted",hre=xb.callbackify(gre),mre=xb.promisify(are.search),pre=xb.promisify(dre.getTableSchema);eH.exports={convertDelete:hre};function Ere(e){return`${e.deleted_hashes.length} ${fre}${e.deleted_hashes.length===1?"":"s"} ${_re}`}a(Ere,"generateReturnMessage");async function gre({statement:e,hdb_user:t}){let r=await pre(e.table.databaseid,e.table.tableid);Ub.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Ub.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=ore.parse(o).statements[0],l={operation:ure.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await mre(c);let u=await lre.deleteRecords(l);return Ub.isEmptyOrZeroLength(u.message)&&(u.message=Ere(u)),delete u.txn_time,u}catch(u){throw cre.error(u),u.hdb_code?u.message:u}}a(gre,"convertDelete")});var oH=C((swe,iH)=>{"use strict";var Sre=so(),{hdb_errors:rH}=he(),{getDatabases:nH}=(ve(),P(it));iH.exports={checkSchemaExists:sH,checkSchemaTableExists:Tre,schema_describe:Sre};async function sH(e){if(!nH()[e])return rH.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(sH,"checkSchemaExists");async function Tre(e,t){let r=await sH(e);if(r)return r;if(!nH()[e][t])return rH.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Tre,"checkSchemaTableExists")});var Gb=C((lwe,gH)=>{"use strict";var{decode:Are}=require("msgpackr"),{isMainThread:owe,parentPort:awe,threadId:cwe}=require("worker_threads"),LE=Er(),Nu=It(),kb=(H(),P($)),zr=J(),Hb=ce(),Rre=(H(),P($)),{onMessageByType:yre}=nt(),uH=no(),{recordAction:aH,recordActionBinary:bre}=(Ni(),P(T_)),{publishToStream:Ore}=LE,{ConsumerEvents:cH}=require("nats"),Nre=Kr(),{promisify:wre}=require("util"),{decodeBlobsWithWrites:Ire}=(cs(),P(up)),dH=wre(setTimeout),ME=1e4,vE,DE,Cre,Pre,fH,N_=new Map,wu=new Map;gH.exports={initialize:_H,ingestConsumer:Fb,setSubscription:Dre,setIgnoreOrigin:vre,getDatabaseSubscriptions:Mre,updateConsumer:hH};async function _H(){yre(kb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await hH(n)}),fH=!0,zr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await LE.getNATSReferences();vE=e,DE=e.info.server_name,Cre=t,Pre=r}a(_H,"initialize");async function hH(e){if(e.status==="start"){let{js:t,jsm:r}=await mH(e.node_domain_name);Fb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=N_.get(e.stream_name+e.node_domain_name);t&&(zr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),N_.set(e.stream_name+e.node_domain_name,"close")),wu.get(e.node_domain_name)==="failed"&&wu.set(e.node_domain_name,"close")}}a(hH,"updateConsumer");var UE=new Map;function Dre(e,t,r){let n=UE.get(e);n||UE.set(e,n=new Map),n.set(t,r),fH||_H().then(Lre)}a(Dre,"setSubscription");async function Lre(){let e=await Nre.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Nu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await mH(r),!n))break;let{schema:o,table:c}=i,l=uH.createNatsTableStreamName(o,c);Fb(l,n,s,r)}}}a(Lre,"accessConsumers");async function mH(e){let t,r,n=1;for(;!r;)try{t=await vE.jetstream({domain:e}),r=await vE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(wu.get(e)==="close")break;wu.set(e,"failed"),n%10===1&&zr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<ME?n++*100:ME;await dH(i)}return{js:t,jsm:r}}a(mH,"connectToRemoteJS");function Mre(){return UE}a(Mre,"getDatabaseSubscriptions");var pH;function vre(e){pH=e}a(vre,"setIgnoreOrigin");var EH=100,lH=new Array(EH),PE=0;async function Fb(e,t,r,n){let{connection:s}=await LE.getNATSReferences();vE=s,DE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,DE),zr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(wu.get(n)==="close")break;o%10===1&&zr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(zr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await LE.createConsumer(r,e,DE,new Date(Date.now()).toISOString()));let f=o++*100<ME?o++*100:ME;await dH(f)}let c=!1,l;for(;!c;){if(N_.get(e+n)==="close"||wu.get(n)==="close"){N_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Hb.get(kb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),N_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===cH.ConsumerDeleted&&(await l.close(),c=!0),f.type===cH.HeartbeatsMissed){let d=f.data;zr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(zr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await lH[PE],lH[PE]=Ure(f).catch(d=>{zr.error(d)}),++PE>=EH&&(PE=0)}catch(f){f.message==="consumer deleted"?(zr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):zr.error("Error consuming clustering ingest, restarting consumer",f)}}}a(Fb,"ingestConsumer");async function Ure(e){let t;await Ire(()=>{t=Are(e.data)}),aH(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Hb.get(kb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Nu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Nu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Nu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!pH),bre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Nu.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;zr.trace("processing message:",o,c,u,(f?"records: "+f.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zr.trace(`messageProcessor nats msg id: ${e.headers.get(Nu.MSG_HEADERS.NATS_MSG_ID)}`);let m;f||(f=d);let S=new Promise(v=>m=v),{timestamp:g,user:R,node_name:E}=h||{},A=UE.get(c)?.get(u);if(!A)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=m,A.send(t);else if(f.length===1&&!l)A.send({type:Bb(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:m,user:R,nodeName:E});else{let v=f.map((F,q)=>({type:Bb(o),value:F,expiresAt:_,id:d?.[q],table:u}));for(;l;)v.push({type:Bb(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:v,table:u,timestamp:g,onCommit:m,user:R,nodeName:E})}Hb.get(Rre.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Ore(e.subject.split(".").slice(0,-1).join("."),uH.createNatsTableStreamName(c,u),e.headers,e.data),await S;let N=Date.now()-g;g&&aH(N,"replication-latency",e.subject,o,"ingest")}catch(o){zr.error(o)}e.ack()}a(Ure,"messageProcessor");function Bb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Bb,"convertOperation")});var Er=C((pwe,UH)=>{"use strict";var Or=ce();Or.initSync();var xre=require("fs-extra"),Bre=require("semver"),C_=require("path"),{monotonicFactory:Hre}=require("ulidx"),TH=Hre(),kre=require("util"),AH=require("child_process"),Fre=kre.promisify(AH.exec),Gre=AH.spawn,Lr=It(),Ke=(H(),P($)),{packageJson:qre,PACKAGE_ROOT:$re}=pt(),xE=ae(),Ys=J(),BE=no(),Vre=CE(),w_=Ot(),{broadcast:Kre,onMessageByType:Yre,getWorkerIndex:Wre}=nt(),{isMainThread:RH}=require("worker_threads"),{Encoder:zre,decode:Kb}=require("msgpackr"),yH=new zre,{isEmpty:Yc}=xE,bH=Fn(),dwe=48*36e11;RH&&Yre(Ke.ITC_EVENT_TYPES.RESTART,()=>{Qr=void 0,Kc=void 0});var{connect:Qre,StorageType:jre,RetentionPolicy:Jre,AckPolicy:Yb,DeliverPolicy:Wb,DiscardPolicy:Xre,NatsConnection:fwe,JetStreamManager:_we,JetStreamClient:hwe,StringCodec:mwe,JSONCodec:Zre,createInbox:zb,headers:ene,ErrorCode:SH}=require("nats"),{recordAction:tne}=(Ni(),P(T_)),{encodeBlobsAsBuffers:rne}=(cs(),P(up)),OH=Zre(),nne="clustering",sne=qre.engines[Lr.NATS_SERVER_NAME],ine=C_.join($re,"dependencies"),Vb=C_.join(ine,`${process.platform}-${process.arch}`,Lr.NATS_BINARY_NAME),qb,$b,I_,$c,Vc;UH.exports={runCommand:NH,checkNATSServerInstalled:one,createConnection:Qb,getConnection:P_,getJetStreamManager:D_,getJetStream:IH,getNATSReferences:Ci,getServerList:cne,createLocalStream:jb,listStreams:CH,deleteLocalStream:lne,getServerConfig:Iu,listRemoteStreams:une,viewStream:dne,viewStreamIterator:fne,publishToStream:_ne,request:pne,reloadNATS:Jb,reloadNATSHub:Ene,reloadNATSLeaf:gne,extractServerName:mne,requestErrorHandler:Sne,createLocalTableStream:MH,createTableStreams:Rne,purgeTableStream:vH,purgeSchemaTableStreams:yne,getStreamInfo:bne,updateLocalStreams:Nne,closeConnection:ane,getJsmServerName:HE,addNatsMsgHeader:PH,clearClientCache:wH,updateRemoteConsumer:Tne,createConsumer:DH,updateConsumerIterator:Ane};async function NH(e,t=void 0){let{stdout:r,stderr:n}=await Fre(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
21
21
|
`,""));return r.replace(`
|
|
22
|
-
`,"")}a(NH,"runCommand");async function one(){try{await xre.access(Vb)}catch{return!1}let e=await NH(`${Vb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Bre.eq(t,sne)}a(one,"checkNATSServerInstalled");async function Qb(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await bH.getClusterUser();if(Yc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ys.trace("create nats connection called");let i=await Qre({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ys.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ys.error("Error with Nats client connection, connection closed",o),i===Qr&&wH()}),i}a(Qb,"createConnection");function wH(){Qr=void 0,$c=void 0,Vc=void 0,Kc=void 0}a(wH,"clearClientCache");async function ane(){Qr&&(await Qr.drain(),Qr=void 0,$c=void 0,Vc=void 0,Kc=void 0)}a(ane,"closeConnection");var Qr,Kc;async function P_(){return Kc||(Kc=Qb(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await Kc),Qr||Kc}a(P_,"getConnection");async function D_(){if($c)return $c;Yc(Qr)&&await P_();let{domain:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Yc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return $c=await Qr.jetstreamManager({domain:e,timeout:6e4}),$c}a(D_,"getJetStreamManager");async function IH(){if(Vc)return Vc;Yc(Qr)&&await P_();let{domain:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Yc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Vc=Qr.jetstream({domain:e,timeout:6e4}),Vc}a(IH,"getJetStream");async function Ci(){let e=Qr||await P_(),t=$c||await D_(),r=Vc||await IH();return{connection:e,jsm:t,js:r}}a(Ci,"getNATSReferences");async function cne(e){let t=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await bH.getClusterUser(),s=await Qb(t,r,n),i=zb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=OH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await xE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(cne,"getServerList");async function jb(e,t){let{jsm:r}=await Ci(),n=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:jre.File,retention:Jre.Limits,subjects:t,discard:Xre.Old,max_msgs:s,max_bytes:i,max_age:n})}a(jb,"createLocalStream");async function CH(){let{jsm:e}=await Ci(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(CH,"listStreams");async function lne(e){let{jsm:t}=await Ci();await t.streams.delete(e)}a(lne,"deleteLocalStream");async function une(e){let{connection:t}=await Ci(),r=[],n=zb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(OH.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(une,"listRemoteStreams");async function dne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=TH(),o={durable_name:i,ack_policy:Yb.Explicit};t&&(o.deliver_policy=Wb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=Kb(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Lr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(dne,"viewStream");async function*fne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=TH(),o={durable_name:i,ack_policy:Yb.Explicit};t&&(o.deliver_policy=Wb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=Kb(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Lr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(fne,"viewStreamIterator");async function _ne(e,t,r,n){Ys.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=PH(n,r);let{js:s}=await Ci(),i=await HE(),o=`${e}.${i}`,c=await rne(()=>n instanceof Uint8Array?n:yH.encode(n));try{Ys.trace(`publishToStream publishing to subject: ${o}`),tne(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return LH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ys.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await jb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(_ne,"publishToStream");function PH(e,t){t===void 0&&(t=ene());let r=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Lr.MSG_HEADERS.ORIGIN)&&r&&t.append(Lr.MSG_HEADERS.ORIGIN,r),t}a(PH,"addNatsMsgHeader");function Iu(e){e=e.toLowerCase();let t=C_.join(Or.get(Ke.CONFIG_PARAMS.ROOTPATH),nne);if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Yc($b)&&($b={port:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.HUB,config_file:Lr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:C_.join(t,Lr.PID_FILES.HUB),hdb_nats_path:t}),$b;if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Yc(qb)&&(qb={port:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,config_file:Lr.NATS_CONFIG_FILES.LEAF_SERVER,domain:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,pid_file_path:C_.join(t,Lr.PID_FILES.LEAF),hdb_nats_path:t}),qb;Ys.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Iu,"getServerConfig");async function DH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Yb.Explicit,durable_name:r,deliver_policy:Wb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(DH,"createConsumer");async function hne(e,t,r){await e.consumers.delete(t,r)}a(hne,"removeConsumer");function mne(e){return e.split(".")[1]}a(mne,"extractServerName");async function pne(e,t,r=6e4,n=zb()){if(!xE.isObject(t))throw new Error("data param must be an object");let s=yH.encode(t),{connection:i}=await Ci(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Kb(c.data)}a(pne,"request");function Jb(e){return new Promise(async(t,r)=>{let n=Gre(Vb,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(Jb,"reloadNATS");async function Ene(){let{pid_file_path:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Jb(e)}a(Ene,"reloadNATSHub");async function gne(){let{pid_file_path:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Jb(e)}a(gne,"reloadNATSLeaf");function Sne(e,t,r){let n;switch(e.code){case SH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case SH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Sne,"requestErrorHandler");async function Tne(e,t){let r=t+Lr.SERVER_SUFFIX.LEAF,{connection:n}=await Ci(),{jsm:s}=await Ine(r),{schema:i,table:o}=e,c=BE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await LH(async()=>{if(e.subscribe===!0)await DH(s,c,n.info.server_name,l);else try{await hne(s,c,n.info.server_name)}catch(u){Ys.trace(u)}})}a(Tne,"updateRemoteConsumer");async function Ane(e,t,r,n){let s=BE.createNatsTableStreamName(e,t),i=r+Lr.SERVER_SUFFIX.LEAF,o={type:Ke.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!RH&&Wre()<Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Gb();await c(o)}await Kre(o),n==="stop"&&await xE.async_set_timeout(1e3)}a(Ane,"updateConsumerIterator");function LH(e){return Vre.writeTransaction(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(LH,"exclusiveLock");async function MH(e,t){let r=BE.createNatsTableStreamName(e,t),n=await HE(),s=One(e,t,n);await jb(r,[s])}a(MH,"createLocalTableStream");async function Rne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await MH(n,s)}}a(Rne,"createTableStreams");async function vH(e,t,r=void 0){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=BE.createNatsTableStreamName(e,t),{domain:s}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await P_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ys.warn(n);else throw n}}a(vH,"purgeTableStream");async function yne(e,t){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await vH(e,t[r])}a(yne,"purgeSchemaTableStreams");async function bne(e){return(await D_()).streams.info(e)}a(bne,"getStreamInfo");function One(e,t,r){return`${Lr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(One,"createSubjectName");async function HE(){if(I_)return I_;if(I_=(await D_())?.nc?.info?.server_name,I_===void 0)throw new Error("Unable to get jetstream manager server name");return I_}a(HE,"getJsmServerName");async function Nne(){let e=await D_(),t=await HE(),r=await CH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=wne(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");Ys.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(Nne,"updateLocalStreams");function wne(e){let{config:t}=e,r=!1,n=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(wne,"updateStreamLimits");async function Ine(e){let t,r;try{t=await Qr.jetstream({domain:e}),r=await Qr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ys.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Ine,"connectToRemoteJS")});function Xb(e){let t=e.get(kE),r=t?(0,Cu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Ze(),s=!1;r.nodeName=Ze();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:M_(e)??1,nodes:[]})})}i[n]=0,e.putSync(kE,(0,Cu.pack)(r))}return r}function L_(e){return Xb(e).remoteNameToId}function BH(e,t){let r=Xb(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(kE,(0,Cu.pack)(r)),s}function FE(e,t){let r=Xb(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(kE,(0,Cu.pack)(r))}return xH.trace?.("The remote node name map",e,n,s),s}var xH,Cu,kE,Zb=be(()=>{xH=M(hi());ds();Cu=require("msgpackr"),kE=Symbol.for("remote-ids");a(Xb,"getIdMappingRecord");a(L_,"exportIdMapping");a(BH,"remoteToLocalNodeId");a(FE,"getIdOfRemoteNode")});var eO={};Ue(eO,{commits_awaiting_replication:()=>Du,getHDBNodeTable:()=>nr,getReplicationSharedStatus:()=>GE,iterateRoutes:()=>U_,shouldReplicateToNode:()=>v_,subscribeToNodeUpdates:()=>Lu});function nr(){return HH||(HH=ut({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function GE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Lu(e){nr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;qH.debug?.("adding node",n,"on node",Ze()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Ze()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of nr().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function v_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&nr().primaryStore.get(Ze())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Cne(){Lu(e=>{da({},(t,r)=>{let n=e.name,s=kH.get(n);if(s||kH.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=GE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Du.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*U_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Pu.default.get(x.REPLICATION_SECUREPORT)??(!Pu.default.get(x.REPLICATION_PORT)&&Pu.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Pu.default.get(x.REPLICATION_PORT)||Pu.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){FH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates,shard:t.shard}}}var FH,GH,Pu,qH,HH,kH,Du,Wc=be(()=>{ve();ds();Km();FH=require("worker_threads"),GH=M(he()),Pu=M(ce());H();qH=M(hi());server.nodes=[];a(nr,"getHDBNodeTable");a(GE,"getReplicationSharedStatus");a(Lu,"subscribeToNodeUpdates");a(v_,"shouldReplicateToNode");kH=new Map;HD((e,t,r)=>{if(r>server.nodes.length)throw new GH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Du||(Du=new Map,Cne());let n=Du.get(e);return n||(n=[],Du.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Cne,"startSubscriptionToReplications");a(U_,"iterateRoutes")});var YH={};Ue(YH,{connectedToNode:()=>zc,disconnectedFromNode:()=>Uu,ensureNode:()=>fo,requestClusterStatus:()=>KH,startOnMainThread:()=>rO});async function rO(e){let t=0,r=Xe();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){qE.set(i,M_(l.auditStore));break}}}Pi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of U_(e))try{let c=!o.subscriptions;if(c){let u=Ze(),f=nr().primaryStore.get(u);if(f!==null){let d=e.url??fa();(f===void 0||f.url!==d||f.shard!==e.shard)&&await fo(u,{name:u,url:d,shard:e.shard,replicates:!0})}}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Lu(s)});let n;function s(i,o=i?.name){let c=Ze()&&o===Ze()||fa()&&i?.url===fa();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of nr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(ot.trace("Setting up node replication for",i),!i){for(let[d,h]of uo){let _;for(let[m,{worker:S,nodes:g}]of h){let R=g[0];if(R&&R.name==o){_=!0;for(let[E,{worker:A}]of h)h.delete(E),ot.warn("Node was deleted, unsubscribing from node",o,E,d),A?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){uo.get(d).iterator.remove(),uo.delete(d);return}}return}if(c)return;if(!i.url){ot.info(`Node ${i.name} is missing url`);return}let l=uo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ot.info(`Added node ${i.name} at ${i.url} for process ${Ze()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Mu)if(i.url===h.url){Mu.delete(d);break}Mu.set(i.name,i)}let u=Xe();if(l||(l=new Map,uo.set(i.url,l)),l.iterator=da(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(ot.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){ot.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),m,S=[{replicateByDefault:h,...i}];qE.has(d)&&(S.push({replicateByDefault:h,name:Ze(),start_time:qE.get(d),end_time:Date.now(),replicates:!0}),qE.delete(d));let g=v_(i,d),R=Pi.workers.filter(E=>E.name==="http");if(_?(m=_.worker,_.nodes=S):g&&(t=t%R.length,m=R[t++],l.set(d,{worker:m,nodes:S,url:i.url}),m?.on("exit",()=>{l.get(d)?.worker===m&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};m?m.postMessage(E):vu(E)},Pne);else{ot.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],nr().primaryStore.get(Ze())?.replicates),nr().primaryStore.get(Ze())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};m?m.postMessage(E):VE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Uu=a(function(i){try{ot.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Mu.keys()),c=o.sort(),l=c.indexOf(i.name||Ws(i.url));if(l===-1){ot.warn("Disconnected node not found in node map",i.name,o);return}let u=uo.get(i.url),f=u?.get(i.database);if(!f){ot.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],m=Mu.get(_);u=uo.get(m.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:R}=S,E=!1;for(let A of f.nodes){if(R.some(N=>N.name===A.name)){ot.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}R.push(A),E=!0}if(!E){ot.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,ot.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:R}):vu({database:i.database,nodes:R});return}ot.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){ot.error("Error failing over node",o)}},"disconnectedFromNode"),zc=a(function(i){let o=uo.get(i.url),c=o?.get(i.database);if(!c){ot.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):vu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Pi.onMessageByType)("disconnected-from-node",Uu),(0,Pi.onMessageByType)("connected-to-node",zc),(0,Pi.onMessageByType)("request-cluster-status",KH)}function KH(e,t){let r=[];for(let[n,s]of Mu)try{let i=uo.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,tO.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function fo(e,t){let r=nr();e=e??Ws(t.url),t.name=e;try{if(t.ca){let s=new VH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!$H.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,tO.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Pi,$E,ot,tO,$H,VH,Pne,uo,Uu,zc,Mu,qE,x_=be(()=>{ve();Pi=M(nt());ds();$E=require("worker_threads");Wc();ot=M(J()),tO=require("lodash"),$H=M(ce());H();VH=require("crypto"),Pne=200,uo=new Map,Mu=new Map,qE=new Map;a(rO,"startOnMainThread");a(KH,"requestClusterStatus");$E.parentPort&&(Uu=a(e=>{$E.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),zc=a(e=>{$E.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Pi.onMessageByType)("subscribe-to-node",e=>{vu(e)}),(0,Pi.onMessageByType)("unsubscribe-from-node",e=>{VE(e)}));a(fo,"ensureNode")});var js=C(mk=>{"use strict";var sr=require("path"),Tn=require("fs-extra"),xu=require("node-forge"),XH=require("net"),{generateKeyPair:sO,X509Certificate:_o,createPrivateKey:ZH}=require("crypto"),Dne=require("util");sO=Dne.promisify(sO);var At=xu.pki,zs=require("joi"),{v4:ek}=require("uuid"),{validateBySchema:cO}=rt(),ft=J(),fs=ce(),_s=(H(),P($)),{CONFIG_PARAMS:Bu}=_s,Qs=dA(),{ClientError:ha}=he(),KE=require("node:tls"),{relative:tk,join:Lne}=require("node:path"),{CERT_PREFERENCE_APP:Mwe,CERTIFICATE_VALUES:WH}=Qs,Mne=sc(),iO=Ot(),{table:vne,getDatabases:Une,databases:nO}=(ve(),P(it)),{getJWTRSAKeys:zH}=(bu(),P(O_));Object.assign(mk,{generateKeys:dO,updateConfigCert:lk,createCsr:$ne,signCertificate:Vne,setCertTable:Hu,loadCertificates:ok,reviewSelfSignedCert:_O,createTLSSelector:dk,listCertificates:_k,addCertificate:jne,removeCertificate:Xne,createNatsCerts:Wne,generateCertsKeys:Yne,getReplicationCert:H_,getReplicationCertAuth:qne,renewSelfSigned:zne,hostnamesFromCert:hk,getKey:Zne});var{urlToNodeName:rk,getThisNodeUrl:xne,getThisNodeName:WE,clearThisNodeName:Bne}=(ds(),P(Ea)),{readFileSync:Hne,watchFile:kne,statSync:nk}=require("node:fs"),vwe=ce(),{getTicketKeys:Fne,onMessageFromWorkers:Gne}=nt(),_a=J(),{isMainThread:sk}=require("worker_threads"),{TLSSocket:ik,createSecureContext:Uwe}=require("node:tls"),lO=3650,B_=["127.0.0.1","localhost","::1"],uO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Gne(async e=>{e.type===_s.ITC_EVENT_TYPES.RESTART&&(fs.initSync(!0),await _O())});var Mr;function pa(){return Mr||(Mr=Une().system.hdb_certificate,Mr||(Mr=vne({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Mr}a(pa,"getCertTable");async function H_(){let e=dk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(WE());if(!r)return;let n=new _o(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(H_,"getReplicationCert");async function qne(){pa();let e=(await H_()).options.cert,r=new _o(e).issuer.match(/CN=(.*)/)?.[1];return Mr.get(r)}a(qne,"getReplicationCertAuth");var QH,ma=new Map;function ok(){if(QH)return;QH=!0;let e=[{configKey:Bu.TLS},{configKey:Bu.OPERATIONSAPI_TLS}];pa();let t=sr.dirname(iO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=iO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&tk(Lne(t,"keys"),o);c&&jH(o,l=>{ma.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&sk){let f;jH(u,d=>{if(WH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=uk(u),m=new _o(_),S;try{S=hO(m)}catch(A){ft.error("error extracting common name from certificate",A);return}if(S==null){ft.error("error extracting common name from certificate");return}if(m.checkIssued(new _o(WH.cert)))return;let g=Mr.primaryStore.get(S),R=nk(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=E){R<E&&ft.info(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=Mr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:R,details:{issuer:m.issuer.replace(/\n/g," "),subject:m.subject.replace(/\n/g," "),subject_alt_name:m.subjectAltName,serial_number:m.serialNumber,valid_from:m.validFrom,valid_to:m.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(ok,"loadCertificates");function jH(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&sk&&ft.warn(`Reloading ${r}:`,e),n=c,t(uk(e)))}catch(c){ft.error(`Error loading ${r}:`,e,c)}},"loadFile");Tn.existsSync(e)?s(nk(e)):ft.error(`${r} file not found:`,e),kne(e,{persistent:!1},s)}a(jH,"loadAndWatch");function oO(){let e=xne();if(e==null){let t=B_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return rk(e)}a(oO,"getHost");function YE(){let e=WE();if(e==null){let t=B_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(YE,"getCommonName");async function $ne(){let e=await H_(),t=At.certificateFromPem(e.options.cert),r=At.privateKeyFromPem(e.options.key);ft.info("Creating CSR with cert named:",e.name);let n=At.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:YE()},...uO];ft.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:ak()}];return ft.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),xu.pki.certificationRequestToPem(n)}a($ne,"createCsr");function ak(){let e=B_.includes(YE())?B_:[...B_,YE()];return e.includes(oO())||e.push(oO()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>XH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(ak,"certExtensions");async function Vne(e){let t={},r=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;pa();for await(let f of Mr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(ma.has(f.private_key_name)){n=ma.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await Tn.exists(sr.join(r,f.private_key_name))){n=Tn.readFile(sr.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await aO();s=f.ca,n=f.private_key}n=At.privateKeyFromPem(n),t.signingCA=s.certificate;let i=At.certificateFromPem(s.certificate);ft.info("Signing CSR with cert named",s.name);let o=At.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return ft.error(f),new Error("Error verifying CSR: "+f.message)}let c=xu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+lO),ft.info("sign cert setting validity:",c.validity),ft.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),ft.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;ft.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,xu.md.sha256.create()),t.certificate=At.certificateToPem(c)}else ft.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Vne,"signCertificate");async function Kne(e,t){await Hu({name:WE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Hu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:At.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Kne,"createCertificateTable");async function Hu(e){let t=new _o(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},pa(),await Mr.patch(e)}a(Hu,"setCertTable");async function dO(){let e=await sO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:At.publicKeyFromPem(e.publicKey),private_key:At.privateKeyFromPem(e.privateKey)}}a(dO,"generateKeys");async function fO(e,t,r){let n=At.createCertificate();if(!t){let o=await H_();t=At.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+lO);let i=[{name:"commonName",value:YE()},...uO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(ak()),n.sign(e,xu.md.sha256.create()),At.certificateToPem(n)}a(fO,"generateCertificates");async function aO(){let e=await _k(),t;for(let r of e){if(!r.is_authority)continue;let n=await fk(r.private_key_name);if(r.private_key_name&&n&&new _o(r.certificate).checkPrivateKey(ZH(n))){ft.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ft.trace("No CA found with matching private key")}a(aO,"getCertAuthority");async function ck(e,t,r=!0){let n=At.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+lO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${fs.get(Bu.REPLICATION_HOSTNAME)??rk(fs.get(Bu.REPLICATION_URL))??ek().split("-")[0]}`},...uO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,xu.md.sha256.create());let o=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),c=sr.join(o,Qs.PRIVATEKEY_PEM_NAME);return r&&await Tn.writeFile(c,At.privateKeyToPem(e)),n}a(ck,"generateCertAuthority");async function Yne(){let{private_key:e,public_key:t}=await dO(),r=await ck(e,t),n=await fO(e,t,r);await Kne(n,r),lk()}a(Yne,"generateCertsKeys");async function Wne(){let e=await fO(At.privateKeyFromPem(Qs.CERTIFICATE_VALUES.key),void 0,At.certificateFromPem(Qs.CERTIFICATE_VALUES.cert)),t=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME);await Tn.exists(r)||await Tn.writeFile(r,e);let n=sr.join(t,Qs.NATS_CA_PEM_NAME);await Tn.exists(n)||await Tn.writeFile(n,Qs.CERTIFICATE_VALUES.cert)}a(Wne,"createNatsCerts");async function zne(){pa();for await(let e of Mr.search([{attribute:"is_self_signed",value:!0}]))await Mr.delete(e.name);await _O()}a(zne,"renewSelfSigned");async function _O(){Bne(),await ok(),pa();let e=await aO();if(!e){ft.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=fs.get(Bu.TLS_PRIVATEKEY),n=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),s,i=tk(n,r);try{s=At.privateKeyFromPem(await Tn.readFile(r))}catch(c){ft.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await dO(),await Tn.exists(sr.join(n,Qs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${ek().split("-")[0]}.pem`),await Tn.writeFile(sr.join(n,i),At.privateKeyToPem(s))}let o=await ck(s,At.setRsaPublicKey(s.n,s.e),!1);await Hu({name:o.subject.getField("CN").value,uses:["https"],certificate:At.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await H_()){let r=WE();ft.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await aO();let n=At.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await fO(At.privateKeyFromPem(e.private_key),s,n);await Hu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(_O,"reviewSelfSignedCert");function lk(){let e=Mne(Object.keys(_s.CONFIG_PARAM_MAP),!0),t=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.PRIVATEKEY_PEM_NAME),n=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME),s=sr.join(t,Qs.NATS_CA_PEM_NAME),i=_s.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),iO.updateConfigValue(void 0,void 0,o,!1,!0)}a(lk,"updateConfigCert");function uk(e){return e.startsWith("-----BEGIN")?e:Hne(e,"utf8")}a(uk,"readPEM");var JH=KE.createSecureContext;KE.createSecureContext=function(e){if(!e.cert||!e.key)return JH(e);let t={...e};delete t.key,delete t.cert;let r=JH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Qne=ik.prototype._init;ik.prototype._init=function(e,t){Qne.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Qc=new Map;function dk(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Qc.clear();let f=0;for await(let d of nO.system.hdb_certificate.search([])){let h=d.certificate,_=new _o(h);d.is_authority&&(_.asString=h,Qc.set(_.subject,h))}for await(let d of nO.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let m=await fk(d.private_key_name),S=d.certificate,g=new _o(S);if(Qc.has(g.issuer)&&(S+=`
|
|
22
|
+
`,"")}a(NH,"runCommand");async function one(){try{await xre.access(Vb)}catch{return!1}let e=await NH(`${Vb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Bre.eq(t,sne)}a(one,"checkNATSServerInstalled");async function Qb(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await bH.getClusterUser();if(Yc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ys.trace("create nats connection called");let i=await Qre({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ys.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ys.error("Error with Nats client connection, connection closed",o),i===Qr&&wH()}),i}a(Qb,"createConnection");function wH(){Qr=void 0,$c=void 0,Vc=void 0,Kc=void 0}a(wH,"clearClientCache");async function ane(){Qr&&(await Qr.drain(),Qr=void 0,$c=void 0,Vc=void 0,Kc=void 0)}a(ane,"closeConnection");var Qr,Kc;async function P_(){return Kc||(Kc=Qb(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await Kc),Qr||Kc}a(P_,"getConnection");async function D_(){if($c)return $c;Yc(Qr)&&await P_();let{domain:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Yc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return $c=await Qr.jetstreamManager({domain:e,timeout:6e4}),$c}a(D_,"getJetStreamManager");async function IH(){if(Vc)return Vc;Yc(Qr)&&await P_();let{domain:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Yc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Vc=Qr.jetstream({domain:e,timeout:6e4}),Vc}a(IH,"getJetStream");async function Ci(){let e=Qr||await P_(),t=$c||await D_(),r=Vc||await IH();return{connection:e,jsm:t,js:r}}a(Ci,"getNATSReferences");async function cne(e){let t=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await bH.getClusterUser(),s=await Qb(t,r,n),i=zb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=OH.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await xE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(cne,"getServerList");async function jb(e,t){let{jsm:r}=await Ci(),n=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:jre.File,retention:Jre.Limits,subjects:t,discard:Xre.Old,max_msgs:s,max_bytes:i,max_age:n})}a(jb,"createLocalStream");async function CH(){let{jsm:e}=await Ci(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(CH,"listStreams");async function lne(e){let{jsm:t}=await Ci();await t.streams.delete(e)}a(lne,"deleteLocalStream");async function une(e){let{connection:t}=await Ci(),r=[],n=zb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(OH.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(une,"listRemoteStreams");async function dne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=TH(),o={durable_name:i,ack_policy:Yb.Explicit};t&&(o.deliver_policy=Wb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=Kb(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Lr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(dne,"viewStream");async function*fne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ci(),i=TH(),o={durable_name:i,ack_policy:Yb.Explicit};t&&(o.deliver_policy=Wb.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=Kb(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Lr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(fne,"viewStreamIterator");async function _ne(e,t,r,n){Ys.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=PH(n,r);let{js:s}=await Ci(),i=await HE(),o=`${e}.${i}`,c=await rne(()=>n instanceof Uint8Array?n:yH.encode(n));try{Ys.trace(`publishToStream publishing to subject: ${o}`),tne(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return LH(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ys.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await jb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(_ne,"publishToStream");function PH(e,t){t===void 0&&(t=ene());let r=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Lr.MSG_HEADERS.ORIGIN)&&r&&t.append(Lr.MSG_HEADERS.ORIGIN,r),t}a(PH,"addNatsMsgHeader");function Iu(e){e=e.toLowerCase();let t=C_.join(Or.get(Ke.CONFIG_PARAMS.ROOTPATH),nne);if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Yc($b)&&($b={port:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.HUB,config_file:Lr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:C_.join(t,Lr.PID_FILES.HUB),hdb_nats_path:t}),$b;if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Yc(qb)&&(qb={port:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,config_file:Lr.NATS_CONFIG_FILES.LEAF_SERVER,domain:w_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,pid_file_path:C_.join(t,Lr.PID_FILES.LEAF),hdb_nats_path:t}),qb;Ys.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Iu,"getServerConfig");async function DH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Yb.Explicit,durable_name:r,deliver_policy:Wb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(DH,"createConsumer");async function hne(e,t,r){await e.consumers.delete(t,r)}a(hne,"removeConsumer");function mne(e){return e.split(".")[1]}a(mne,"extractServerName");async function pne(e,t,r=6e4,n=zb()){if(!xE.isObject(t))throw new Error("data param must be an object");let s=yH.encode(t),{connection:i}=await Ci(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Kb(c.data)}a(pne,"request");function Jb(e){return new Promise(async(t,r)=>{let n=Gre(Vb,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(Jb,"reloadNATS");async function Ene(){let{pid_file_path:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Jb(e)}a(Ene,"reloadNATSHub");async function gne(){let{pid_file_path:e}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Jb(e)}a(gne,"reloadNATSLeaf");function Sne(e,t,r){let n;switch(e.code){case SH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case SH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Sne,"requestErrorHandler");async function Tne(e,t){let r=t+Lr.SERVER_SUFFIX.LEAF,{connection:n}=await Ci(),{jsm:s}=await Ine(r),{schema:i,table:o}=e,c=BE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await LH(async()=>{if(e.subscribe===!0)await DH(s,c,n.info.server_name,l);else try{await hne(s,c,n.info.server_name)}catch(u){Ys.trace(u)}})}a(Tne,"updateRemoteConsumer");async function Ane(e,t,r,n){let s=BE.createNatsTableStreamName(e,t),i=r+Lr.SERVER_SUFFIX.LEAF,o={type:Ke.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!RH&&Wre()<Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Gb();await c(o)}await Kre(o),n==="stop"&&await xE.async_set_timeout(1e3)}a(Ane,"updateConsumerIterator");function LH(e){return Vre.writeTransaction(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(LH,"exclusiveLock");async function MH(e,t){let r=BE.createNatsTableStreamName(e,t),n=await HE(),s=One(e,t,n);await jb(r,[s])}a(MH,"createLocalTableStream");async function Rne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await MH(n,s)}}a(Rne,"createTableStreams");async function vH(e,t,r=void 0){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=BE.createNatsTableStreamName(e,t),{domain:s}=Iu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await P_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ys.warn(n);else throw n}}a(vH,"purgeTableStream");async function yne(e,t){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await vH(e,t[r])}a(yne,"purgeSchemaTableStreams");async function bne(e){return(await D_()).streams.info(e)}a(bne,"getStreamInfo");function One(e,t,r){return`${Lr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(One,"createSubjectName");async function HE(){if(I_)return I_;if(I_=(await D_())?.nc?.info?.server_name,I_===void 0)throw new Error("Unable to get jetstream manager server name");return I_}a(HE,"getJsmServerName");async function Nne(){let e=await D_(),t=await HE(),r=await CH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=wne(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");Ys.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(Nne,"updateLocalStreams");function wne(e){let{config:t}=e,r=!1,n=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(wne,"updateStreamLimits");async function Ine(e){let t,r;try{t=await Qr.jetstream({domain:e}),r=await Qr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ys.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Ine,"connectToRemoteJS")});function Xb(e){let t=e.get(kE),r=t?(0,Cu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Ze(),s=!1;r.nodeName=Ze();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:M_(e)??1,nodes:[]})})}i[n]=0,e.putSync(kE,(0,Cu.pack)(r))}return r}function L_(e){return Xb(e).remoteNameToId}function BH(e,t){let r=Xb(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(kE,(0,Cu.pack)(r)),s}function FE(e,t){let r=Xb(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(kE,(0,Cu.pack)(r))}return xH.trace?.("The remote node name map",e,n,s),s}var xH,Cu,kE,Zb=be(()=>{xH=M(hi());ds();Cu=require("msgpackr"),kE=Symbol.for("remote-ids");a(Xb,"getIdMappingRecord");a(L_,"exportIdMapping");a(BH,"remoteToLocalNodeId");a(FE,"getIdOfRemoteNode")});var eO={};Ue(eO,{commits_awaiting_replication:()=>Du,getHDBNodeTable:()=>nr,getReplicationSharedStatus:()=>GE,iterateRoutes:()=>U_,shouldReplicateToNode:()=>v_,subscribeToNodeUpdates:()=>Lu});function nr(){return HH||(HH=ut({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function GE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Lu(e){nr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;qH.debug?.("adding node",n,"on node",Ze()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==Ze()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of nr().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function v_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&nr().primaryStore.get(Ze())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Cne(){Lu(e=>{da({},(t,r)=>{let n=e.name,s=kH.get(n);if(s||kH.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=GE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Du.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*U_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Pu.default.get(x.REPLICATION_SECUREPORT)??(!Pu.default.get(x.REPLICATION_PORT)&&Pu.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Pu.default.get(x.REPLICATION_PORT)||Pu.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){FH.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime,revoked_certificates:t.revokedCertificates,shard:t.shard}}}var FH,GH,Pu,qH,HH,kH,Du,Wc=be(()=>{ve();ds();Km();FH=require("worker_threads"),GH=M(he()),Pu=M(ce());H();qH=M(hi());server.nodes=[];a(nr,"getHDBNodeTable");a(GE,"getReplicationSharedStatus");a(Lu,"subscribeToNodeUpdates");a(v_,"shouldReplicateToNode");kH=new Map;HD((e,t,r)=>{if(r>server.nodes.length)throw new GH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Du||(Du=new Map,Cne());let n=Du.get(e);return n||(n=[],Du.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Cne,"startSubscriptionToReplications");a(U_,"iterateRoutes")});var YH={};Ue(YH,{connectedToNode:()=>zc,disconnectedFromNode:()=>Uu,ensureNode:()=>fo,requestClusterStatus:()=>KH,startOnMainThread:()=>rO});async function rO(e){let t=0,r=Xe();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){qE.set(i,M_(l.auditStore));break}}}Pi.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of U_(e))try{let c=!o.subscriptions;if(c){let u=Ze(),f=nr().primaryStore.get(u);if(f!==null){let d=e.url??fa();(f===void 0||f.url!==d||f.shard!==e.shard)&&await fo(u,{name:u,url:d,shard:e.shard,replicates:!0})}}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}Lu(s)});let n;function s(i,o=i?.name){let c=Ze()&&o===Ze()||fa()&&i?.url===fa();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of nr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(ot.trace("Setting up node replication for",i),!i){for(let[d,h]of uo){let _;for(let[m,{worker:S,nodes:g}]of h){let R=g[0];if(R&&R.name==o){_=!0;for(let[E,{worker:A}]of h)h.delete(E),ot.warn("Node was deleted, unsubscribing from node",o,E,d),A?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){uo.get(d).iterator.remove(),uo.delete(d);return}}return}if(c)return;if(!i.url){ot.info(`Node ${i.name} is missing url`);return}let l=uo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ot.info(`Added node ${i.name} at ${i.url} for process ${Ze()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Mu)if(i.url===h.url){Mu.delete(d);break}Mu.set(i.name,i)}let u=Xe();if(l||(l=new Map,uo.set(i.url,l)),l.iterator=da(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(ot.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){ot.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),m,S=[{replicateByDefault:h,...i}];qE.has(d)&&(S.push({replicateByDefault:h,name:Ze(),start_time:qE.get(d),end_time:Date.now(),replicates:!0}),qE.delete(d));let g=v_(i,d),R=Pi.workers.filter(E=>E.name==="http");if(_?(m=_.worker,_.nodes=S):g&&(t=t%R.length,m=R[t++],l.set(d,{worker:m,nodes:S,url:i.url}),m?.on("exit",()=>{l.get(d)?.worker===m&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};m?m.postMessage(E):vu(E)},Pne);else{ot.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],nr().primaryStore.get(Ze())?.replicates),nr().primaryStore.get(Ze())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};m?m.postMessage(E):VE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Uu=a(function(i){try{ot.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Mu.keys()),c=o.sort(),l=c.indexOf(i.name||Ws(i.url));if(l===-1){ot.warn("Disconnected node not found in node map",i.name,o);return}let u=uo.get(i.url),f=u?.get(i.database);if(!f){ot.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],m=Mu.get(_);u=uo.get(m.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:R}=S,E=!1;for(let A of f.nodes){if(R.some(N=>N.name===A.name)){ot.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}R.push(A),E=!0}if(!E){ot.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,ot.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:R}):vu({database:i.database,nodes:R});return}ot.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){ot.error("Error failing over node",o)}},"disconnectedFromNode"),zc=a(function(i){let o=uo.get(i.url),c=o?.get(i.database);if(!c){ot.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):vu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Pi.onMessageByType)("disconnected-from-node",Uu),(0,Pi.onMessageByType)("connected-to-node",zc),(0,Pi.onMessageByType)("request-cluster-status",KH)}function KH(e,t){let r=[];for(let[n,s]of Mu)try{let i=uo.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,tO.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function fo(e,t){let r=nr();e=e??Ws(t.url),t.name=e;try{if(t.ca){let s=new VH.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!$H.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,tO.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Pi,$E,ot,tO,$H,VH,Pne,uo,Uu,zc,Mu,qE,x_=be(()=>{ve();Pi=M(nt());ds();$E=require("worker_threads");Wc();ot=M(J()),tO=require("lodash"),$H=M(ce());H();VH=require("crypto"),Pne=200,uo=new Map,Mu=new Map,qE=new Map;a(rO,"startOnMainThread");a(KH,"requestClusterStatus");$E.parentPort&&(Uu=a(e=>{$E.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),zc=a(e=>{$E.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Pi.onMessageByType)("subscribe-to-node",e=>{vu(e)}),(0,Pi.onMessageByType)("unsubscribe-from-node",e=>{VE(e)}));a(fo,"ensureNode")});var js=C(mk=>{"use strict";var sr=require("path"),{watch:Dne}=require("chokidar"),Tn=require("fs-extra"),xu=require("node-forge"),XH=require("net"),{generateKeyPair:sO,X509Certificate:_o,createPrivateKey:ZH}=require("crypto"),Lne=require("util");sO=Lne.promisify(sO);var At=xu.pki,zs=require("joi"),{v4:ek}=require("uuid"),{validateBySchema:cO}=rt(),ft=J(),fs=ce(),_s=(H(),P($)),{CONFIG_PARAMS:Bu}=_s,Qs=dA(),{ClientError:ha}=he(),KE=require("node:tls"),{relative:tk,join:Mne}=require("node:path"),{CERT_PREFERENCE_APP:Mwe,CERTIFICATE_VALUES:WH}=Qs,vne=sc(),iO=Ot(),{table:Une,getDatabases:xne,databases:nO}=(ve(),P(it)),{getJWTRSAKeys:zH}=(bu(),P(O_));Object.assign(mk,{generateKeys:dO,updateConfigCert:lk,createCsr:$ne,signCertificate:Vne,setCertTable:Hu,loadCertificates:ok,reviewSelfSignedCert:_O,createTLSSelector:dk,listCertificates:_k,addCertificate:jne,removeCertificate:Xne,createNatsCerts:Wne,generateCertsKeys:Yne,getReplicationCert:H_,getReplicationCertAuth:qne,renewSelfSigned:zne,hostnamesFromCert:hk,getKey:Zne});var{urlToNodeName:rk,getThisNodeUrl:Bne,getThisNodeName:WE,clearThisNodeName:Hne}=(ds(),P(Ea)),{readFileSync:kne,statSync:nk}=require("node:fs"),vwe=ce(),{getTicketKeys:Fne,onMessageFromWorkers:Gne}=nt(),_a=J(),{isMainThread:sk}=require("worker_threads"),{TLSSocket:ik,createSecureContext:Uwe}=require("node:tls"),lO=3650,B_=["127.0.0.1","localhost","::1"],uO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Gne(async e=>{e.type===_s.ITC_EVENT_TYPES.RESTART&&(fs.initSync(!0),await _O())});var Mr;function pa(){return Mr||(Mr=xne().system.hdb_certificate,Mr||(Mr=Une({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Mr}a(pa,"getCertTable");async function H_(){let e=dk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(WE());if(!r)return;let n=new _o(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(H_,"getReplicationCert");async function qne(){pa();let e=(await H_()).options.cert,r=new _o(e).issuer.match(/CN=(.*)/)?.[1];return Mr.get(r)}a(qne,"getReplicationCertAuth");var QH,ma=new Map;function ok(){if(QH)return;QH=!0;let e=[{configKey:Bu.TLS},{configKey:Bu.OPERATIONSAPI_TLS}];pa();let t=sr.dirname(iO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=iO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&tk(Mne(t,"keys"),o);c&&jH(o,l=>{ma.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&sk){let f;jH(u,d=>{if(WH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=uk(u),m=new _o(_),S;try{S=hO(m)}catch(A){ft.error("error extracting common name from certificate",A);return}if(S==null){ft.error("error extracting common name from certificate");return}if(m.checkIssued(new _o(WH.cert)))return;let g=Mr.primaryStore.get(S),R=nk(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=E){R<E&&ft.info(`Certificate ${S} at ${u} is older (${new Date(R)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=Mr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:R,details:{issuer:m.issuer.replace(/\n/g," "),subject:m.subject.replace(/\n/g," "),subject_alt_name:m.subjectAltName,serial_number:m.serialNumber,valid_from:m.validFrom,valid_to:m.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(ok,"loadCertificates");function jH(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&sk&&ft.warn(`Reloading ${r}:`,i),n=c,t(uk(i)))}catch(c){ft.error(`Error loading ${r}:`,i,c)}},"loadFile");Tn.existsSync(e)?s(e,nk(e)):ft.error(`${r} file not found:`,e),Dne(e,{persistent:!1}).on("change",s)}a(jH,"loadAndWatch");function oO(){let e=Bne();if(e==null){let t=B_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return rk(e)}a(oO,"getHost");function YE(){let e=WE();if(e==null){let t=B_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(YE,"getCommonName");async function $ne(){let e=await H_(),t=At.certificateFromPem(e.options.cert),r=At.privateKeyFromPem(e.options.key);ft.info("Creating CSR with cert named:",e.name);let n=At.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:YE()},...uO];ft.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:ak()}];return ft.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),xu.pki.certificationRequestToPem(n)}a($ne,"createCsr");function ak(){let e=B_.includes(YE())?B_:[...B_,YE()];return e.includes(oO())||e.push(oO()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>XH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(ak,"certExtensions");async function Vne(e){let t={},r=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;pa();for await(let f of Mr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(ma.has(f.private_key_name)){n=ma.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await Tn.exists(sr.join(r,f.private_key_name))){n=Tn.readFile(sr.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await aO();s=f.ca,n=f.private_key}n=At.privateKeyFromPem(n),t.signingCA=s.certificate;let i=At.certificateFromPem(s.certificate);ft.info("Signing CSR with cert named",s.name);let o=At.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return ft.error(f),new Error("Error verifying CSR: "+f.message)}let c=xu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+lO),ft.info("sign cert setting validity:",c.validity),ft.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),ft.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;ft.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,xu.md.sha256.create()),t.certificate=At.certificateToPem(c)}else ft.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Vne,"signCertificate");async function Kne(e,t){await Hu({name:WE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Hu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:At.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Kne,"createCertificateTable");async function Hu(e){let t=new _o(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},pa(),await Mr.patch(e)}a(Hu,"setCertTable");async function dO(){let e=await sO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:At.publicKeyFromPem(e.publicKey),private_key:At.privateKeyFromPem(e.privateKey)}}a(dO,"generateKeys");async function fO(e,t,r){let n=At.createCertificate();if(!t){let o=await H_();t=At.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+lO);let i=[{name:"commonName",value:YE()},...uO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(ak()),n.sign(e,xu.md.sha256.create()),At.certificateToPem(n)}a(fO,"generateCertificates");async function aO(){let e=await _k(),t;for(let r of e){if(!r.is_authority)continue;let n=await fk(r.private_key_name);if(r.private_key_name&&n&&new _o(r.certificate).checkPrivateKey(ZH(n))){ft.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ft.trace("No CA found with matching private key")}a(aO,"getCertAuthority");async function ck(e,t,r=!0){let n=At.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+lO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${fs.get(Bu.REPLICATION_HOSTNAME)??rk(fs.get(Bu.REPLICATION_URL))??ek().split("-")[0]}`},...uO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,xu.md.sha256.create());let o=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),c=sr.join(o,Qs.PRIVATEKEY_PEM_NAME);return r&&await Tn.writeFile(c,At.privateKeyToPem(e)),n}a(ck,"generateCertAuthority");async function Yne(){let{private_key:e,public_key:t}=await dO(),r=await ck(e,t),n=await fO(e,t,r);await Kne(n,r),lk()}a(Yne,"generateCertsKeys");async function Wne(){let e=await fO(At.privateKeyFromPem(Qs.CERTIFICATE_VALUES.key),void 0,At.certificateFromPem(Qs.CERTIFICATE_VALUES.cert)),t=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME);await Tn.exists(r)||await Tn.writeFile(r,e);let n=sr.join(t,Qs.NATS_CA_PEM_NAME);await Tn.exists(n)||await Tn.writeFile(n,Qs.CERTIFICATE_VALUES.cert)}a(Wne,"createNatsCerts");async function zne(){pa();for await(let e of Mr.search([{attribute:"is_self_signed",value:!0}]))await Mr.delete(e.name);await _O()}a(zne,"renewSelfSigned");async function _O(){Hne(),await ok(),pa();let e=await aO();if(!e){ft.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=fs.get(Bu.TLS_PRIVATEKEY),n=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),s,i=tk(n,r);try{s=At.privateKeyFromPem(await Tn.readFile(r))}catch(c){ft.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await dO(),await Tn.exists(sr.join(n,Qs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${ek().split("-")[0]}.pem`),await Tn.writeFile(sr.join(n,i),At.privateKeyToPem(s))}let o=await ck(s,At.setRsaPublicKey(s.n,s.e),!1);await Hu({name:o.subject.getField("CN").value,uses:["https"],certificate:At.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await H_()){let r=WE();ft.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await aO();let n=At.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await fO(At.privateKeyFromPem(e.private_key),s,n);await Hu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(_O,"reviewSelfSignedCert");function lk(){let e=vne(Object.keys(_s.CONFIG_PARAM_MAP),!0),t=sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.PRIVATEKEY_PEM_NAME),n=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME),s=sr.join(t,Qs.NATS_CA_PEM_NAME),i=_s.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),iO.updateConfigValue(void 0,void 0,o,!1,!0)}a(lk,"updateConfigCert");function uk(e){return e.startsWith("-----BEGIN")?e:kne(e,"utf8")}a(uk,"readPEM");var JH=KE.createSecureContext;KE.createSecureContext=function(e){if(!e.cert||!e.key)return JH(e);let t={...e};delete t.key,delete t.cert;let r=JH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Qne=ik.prototype._init;ik.prototype._init=function(e,t){Qne.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Qc=new Map;function dk(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Qc.clear();let f=0;for await(let d of nO.system.hdb_certificate.search([])){let h=d.certificate,_=new _o(h);d.is_authority&&(_.asString=h,Qc.set(_.subject,h))}for await(let d of nO.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let m=await fk(d.private_key_name),S=d.certificate,g=new _o(S);if(Qc.has(g.issuer)&&(S+=`
|
|
23
23
|
`+Qc.get(g.issuer)),!m||!S)throw new Error("Missing private key or certificate for secure server");let R={ciphers:d.ciphers,ticketKeys:Fne(),availableCAs:Qc,ca:t&&Array.from(Qc.values()),cert:S,key:m,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let E=KE.createSecureContext(R);E.name=d.name,E.options=R,E.quality=_,E.certificateAuthorities=Array.from(Qc),E.certStart=S.toString().slice(0,100);let A=d.hostnames??hk(g);Array.isArray(A)||(A=[A]);let N;for(let v of A)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===oO()&&(_+=2),XH.isIP(v)&&(N=!0);let F=r.get(v)?.quality??0;_>F&&r.set(v,E)}else _a.error("No hostname found for certificate at",KE.certificate);_a.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",A,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){_a.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),nO.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){_a.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return _a.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?_a.debug("No certificate found to match",o,"using the default certificate"):_a.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):_a.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(dk,"createTLSSelector");async function fk(e){let t=ma.get(e);return!t&&e?await Tn.readFile(sr.join(fs.get(Bu.ROOTPATH),_s.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(fk,"getPrivateKeyByName");async function _k(){pa();let e=[];for await(let t of Mr.search([]))e.push(t);return e}a(_k,"listCertificates");async function jne(e){let t=cO(e,zs.object({name:zs.string().required(),certificate:zs.string().required(),is_authority:zs.boolean().required(),private_key:zs.string(),hosts:zs.array(),uses:zs.array()}));if(t)throw new ha(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new _o(n),c=!1,l=!1,u;for(let[_,m]of ma)!s&&!c&&o.checkPrivateKey(ZH(m))&&(c=!0,u=_),s&&s===m&&(l=!0,u=_);if(!i&&!s&&!c)throw new ha("A suitable private key was not found for this certificate");let f;if(!r){try{f=hO(o)}catch(_){ft.error(_)}if(f==null)throw new ha("Error extracting certificate common name, please provide a name parameter")}let d=Jne(r??f);s&&!c&&!l&&(await Tn.writeFile(sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,d+".pem"),s),ma.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),await Hu(h),"Successfully added certificate: "+d}a(jne,"addCertificate");function Jne(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Jne,"sanitizeName");async function Xne(e){let t=cO(e,zs.object({name:zs.string().required()}));if(t)throw new ha(t.message);let{name:r}=e;pa();let n=await Mr.get(r);if(!n)throw new ha(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Mr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ft.info("Removing private key named",s),await Tn.remove(sr.join(fs.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,s)))}return await Mr.delete(r),"Successfully removed "+r}a(Xne,"removeCertificate");function hO(e){return e.subject.match(/CN=(.*)/)?.[1]}a(hO,"extractCommonName");function hk(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[hO(e)]}a(hk,"hostnamesFromCert");async function Zne(e){if(e.bypass_auth!==!0)throw new ha("Unauthorized","401");let t=cO(e,zs.object({name:zs.string().required()}));if(t)throw new ha(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await zH()).privateKey;if(r===".jwtPublic")return(await zH()).publicKey;if(ma.get(r))return ma.get(e.name);throw new ha("Key not found")}a(Zne,"getKey")});var vk={};Ue(vk,{CONFIRMATION_STATUS_POSITION:()=>Mk,NodeReplicationConnection:()=>k_,OPERATION_REQUEST:()=>gO,RECEIVED_TIME_POSITION:()=>TO,RECEIVED_VERSION_POSITION:()=>SO,SENDING_TIME_POSITION:()=>XE,createWebSocket:()=>eg,database_subscriptions:()=>Sa,replicateOverWS:()=>F_,table_update_listeners:()=>RO});async function eg(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Ze(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!pO){let l=(0,Pk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),pO=u.secureContexts}if(i=pO.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,Lk.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=Dk.createSecureContext({...i.options,ca:Array.from(Jc)})),new Ik.WebSocket(e,"harperdb-replication-v1",c)}function F_(e,t,r){let n=t.port||t.securePort,s=jc.pid%1e3+"-"+Ck.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||Sa,d,h,_=!1,m=t.subscription;m?.then&&m.then(T=>m=T);let S=t.tables||u&&Xe()[u];if(!r){ue.error?.("No authorization provided"),sn(1008,"Unauthorized");return}let g=new Map,R=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let A,N,v,F,q,Y,ee,oe=1e3,z,se=0,W=0,pe=0,Ae=new Map,Pe=[],me=0,yt;if(t.url){let T=a(()=>{q&&W===e._socket?.bytesRead&&pe===e._socket?.bytesWritten?e.terminate():(q=performance.now(),e.ping(),W=e._socket?.bytesRead,pe=e._socket?.bytesWritten)},"send_ping");v=setInterval(T,Ok).unref(),T()}else lt();e._socket?.setMaxListeners(200);function lt(){clearTimeout(F),W=e._socket?.bytesRead,pe=e._socket?.bytesWritten,F=setTimeout(()=>{W===e._socket?.bytesRead&&pe===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},Ok*2).unref()}a(lt,"resetPingTimer");function Rr(){return h||(h=GE(d,u,E)),h}a(Rr,"getSharedStatus"),u&&Fo(u);let ss,In,vl=[],Ul=[],GT,qT=[],Lt=[],Gd=[],hm=150,mm=25,qd=0,pm=0,Ie=!1,$d,nn,wr,xl;e.on("message",T=>{se=performance.now();try{let b=T.dataView=new Xc(T.buffer,T.byteOffset,T.byteLength);if(T[0]>127){let O=(0,Qe.decode)(T),[U,L,I]=O;switch(U){case Ek:{if(L){if(E){if(E!==L){ue.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${L}, disconnecting`),e.send((0,Qe.encode)([ku])),sn(1008,"Node name mismatch");return}}else if(E=L,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=E,t.connection.tentativeNode=null,fo(E,de)}if(t.connection&&(t.connection.nodeName=E),ue.debug?.(s,"received node name:",E,"db:",u),!u)try{Fo(u=O[2]),u==="system"&&(ss=da(t,(de,re)=>{Hl(re)&&Go(re)}),e.on("close",()=>{ss?.remove()}))}catch(de){ue.warn?.(s,"Error setting database",de),e.send((0,Qe.encode)([ku])),sn(1008,de.message);return}Hr()}break}case yk:{ue.debug?.(s,"Received table definitions for",L.map(de=>de.table));for(let de of L){let re=O[2];de.database=re;let fe;Hl(re)&&(re==="system"?$e[re]?.[de.table]||(fe=p(de,$e[re]?.[de.table])):fe=p(de,$e[re]?.[de.table]),d||(d=fe?.auditStore),S||(S=Xe()?.[re]))}break}case ku:sn();break;case gO:try{let de=r?.replicates||r?.subscribers||r?.name;server.operation(L,{user:r},!de).then(re=>{Array.isArray(re)&&(re={results:re}),re.requestId=L.requestId,e.send((0,Qe.encode)([QE,re]))},re=>{e.send((0,Qe.encode)([QE,{requestId:L.requestId,error:re instanceof Error?re.toString():re}]))})}catch(de){e.send((0,Qe.encode)([QE,{requestId:L.requestId,error:de instanceof Error?de.toString():de}]))}break;case QE:let{resolve:B,reject:G}=g.get(L.requestId);L.error?G(new Error(L.error)):B(L),g.delete(L.requestId);break;case mO:let j=O[3];S||(u?ue.error?.(s,"No tables found for",u):ue.error?.(s,"Database name never received"));let X=S[j];X=p({table:j,database:u,attributes:L.attributes,schemaDefined:L.schemaDefined},X),vl[I]={name:j,decoder:new Qe.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:L.typedStructs,structures:L.structures}),getEntry(de){return X.primaryStore.getEntry(de)},rootStore:X.primaryStore.rootStore};break;case gk:xl=d?BH(L,d):new Map,GT=O[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${GT}`);break;case Sk:let k=I;Gd[k]=L;break;case Rk:Rr()[Mk]=L,ue.trace?.(s,"received and broadcasting committed update",L),Rr().buffer.notify();break;case Ak:A=L,m.send({type:"end_txn",localTime:A,remoteNodeIds:R});break;case jE:{let de=O[1],{fileId:re,size:fe,finished:ie,error:Q}=de,le=Ae.get(re);ue.debug?.("Received blob",re,"has stream",!!le,"connectedToBlob",!!le?.connectedToBlob,"length",O[2].length,"finished",ie),le||(le=new EO.PassThrough,le.expectedSize=fe,Ae.set(re,le)),le.lastChunk=Date.now(),ie?(Q?(le.on("error",()=>{}),le.destroy(new Error("Blob error: "+Q))):le.end(O[2]),le.connectedToBlob&&Ae.delete(re)):le.write(O[2]);break}case Tk:{let de=L,re;try{let fe=O[3],ie=Ul[I]||(Ul[I]=S[O[4]]);if(!ie)return ue.warn?.("Unknown table id trying to handle record request",I);let Q=ie.primaryStore.getBinaryFast(Symbol.for("structures")),le=Q.length;if(le!==pm){pm=le;let Te=(0,Qe.decode)(Q);e.send((0,Qe.encode)([mO,{typedStructs:Te.typed,structures:Te.named},I,ie.tableName]))}let Re=ie.primaryStore.getBinaryFast(fe);if(Re){let Te=ie.primaryStore.decoder.decode(Re,{valueAsBuffer:!0});re=(0,Qe.encode)([zE,de,{value:Te.value,expiresAt:Te.expiresAt,version:Te.version,residencyId:Te.residencyId,nodeId:Te.nodeId,user:Te.user}])}else re=(0,Qe.encode)([zE,de])}catch(fe){re=(0,Qe.encode)([zE,de,{error:fe.message}])}e.send(re);break}case zE:{let{resolve:de,reject:re,tableId:fe,key:ie}=g.get(O[1]),Q=O[2];if(Q?.error)re(new Error(Q.error));else if(Q){let le=vl[fe].decoder.decode(Q.value);Q.value=le,Q.key=ie,de(Q)}else de();g.delete(O[1]);break}case pk:{wr=L;let de,re,fe=!1;if(m){if(u!==m.databaseName&&!m.then){ue.error?.("Subscription request for wrong database",u,m.databaseName);return}}else m=f.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",wr),!m){let ye;m=new Promise(tt=>{ue.debug?.("Waiting for subscription to database "+u),ye=tt}),m.ready=ye,Sa.set(u,m)}if(r.name)re=nr().subscribe(r.name),re.then(async ye=>{de=ye;for await(let tt of de){let Mt=tt.value;if(!(Mt?.replicates===!0||Mt?.replicates?.receives||Mt?.subscriptions?.some(_r=>(_r.database||_r.schema)===u&&_r.publish!==!1))){fe=!0,e.send((0,Qe.encode)([ku])),sn(1008,`Unauthorized database subscription to ${u}`);return}}},ye=>{ue.error?.(s,"Error subscribing to HDB nodes",ye)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,Qe.encode)([ku])),sn(1008,`Unauthorized database subscription to ${u}`);return}if(nn&&(ue.debug?.(s,"stopping previous subscription",u),nn.emit("close")),wr.length===0)return;let ie=wr[0],Q=a(ye=>{if(ye&&(ie.replicateByDefault?!ie.tables.includes(ye.tableName):ie.tables.includes(ye.tableName)))return{table:ye}},"tableToTableEntry"),le={txnTime:0},Re,Te,Me=1/0,je,Jt=a((ye,tt)=>{if(ye.type==="end_txn"){le.txnTime&&(o[i]!==66&&ue.error?.("Invalid encoding of message"),kl(9),kl(ZE),Za(je=tt),kr()),i=c,le.txnTime=0;return}let Mt=ye.nodeId,_r=ye.tableId,qt=Te[_r];if(!qt&&(qt=Te[_r]=Q(m.tableById[_r]),!qt))return ue.debug?.("Not subscribed to table",_r);let Fr=qt.table,ec=Fr.primaryStore,vt=ec.encoder;(ye.extendedType&gp||!vt.typedStructs)&&(vt._mergeStructures(vt.getStructures()),vt.typedStructs&&(vt.lastTypedStructuresLength=vt.typedStructs.length));let gm=Re[Mt];if(!(gm&&gm.startTime<tt&&(!gm.endTime||gm.endTime>tt)))return JE&&ue.trace?.(s,"skipping replication update",ye.recordId,"to:",E,"from:",Mt,"subscribed:",Re),JC();JE&&ue.trace?.(s,"sending replication update",ye.recordId,"to:",E,"from:",Mt,"subscribed:",Re);let $T=ye.version;le.txnTime!==$T&&(le.txnTime&&(JE&&ue.trace?.(s,"new txn time, sending queued txn",le.txnTime),o[i]!==66&&ue.error?.("Invalid encoding of message"),kr()),le.txnTime=$T,i=c,Za($T));let tc=ye.residencyId,VT=Bl(tc,Fr),Sm;if(VT&&!VT.includes(E)){let rc=Bl(ye.previousResidencyId,Fr);if(rc&&!rc.includes(E)&&(ye.type==="put"||ye.type==="patch")||Fr.getResidencyById)return JC();let Yd=ye.recordId;ue.trace?.(s,"sending invalidation",Yd,E,"from",Mt);let $o=0;tc&&($o|=Ac),ye.previousResidencyId&&($o|=Rc);let Ps,on=null;for(let Tm in Fr.indices){if(!on){if(Ps=ye.getValue(ec,!0),!Ps)break;on={}}on[Tm]=Ps[Tm]}Sm=ru(ye.version,_r,Yd,null,Mt,ye.user,ye.type==="put"||ye.type==="patch"?"invalidate":ye.type,vt.encode(on),$o,tc,ye.previousResidencyId,ye.expiresAt)}function JC(){ue.trace?.(s,"skipping audit record",ye.recordId),Y||(Y=setTimeout(()=>{Y=null,(je||0)+bk/2<Me&&(JE&&ue.trace?.(s,"sending skipped sequence update",Me),e.send((0,Qe.encode)([Ak,Me])))},bk).unref())}a(JC,"skipAuditRecord");let KT=vt.typedStructs,YT=vt.structures;if((KT?.length!=qt.typed_length||YT?.length!=qt.structure_length)&&(qt.typed_length=KT?.length,qt.structure_length=YT.length,ue.debug?.(s,"send table struct",qt.typed_length,qt.structure_length),qt.sentName||(qt.sentName=!0),e.send((0,Qe.encode)([mO,{typedStructs:KT,structures:YT,attributes:Fr.attributes,schemaDefined:Fr.schemaDefined},_r,qt.table.tableName]))),tc&&!Lt[tc]&&(e.send((0,Qe.encode)([Sk,VT,tc])),Lt[tc]=!0),Sm)kl(Sm.length),Xa(Sm);else{let rc=ye.encoded;ye.extendedType&Un&&qA(()=>ye.getValue(ec),async $o=>{let Ps=ap($o);try{let on;me++;for await(let Tm of $o.stream()){if(on&&(ue.debug?.("Sending blob chunk",Ps,"length",on.length),e.send((0,Qe.encode)([jE,{fileId:Ps,size:$o.size},on]))),on=Tm,fe)return;e._socket.writableNeedDrain&&(ue.debug?.("draining",Ps),await new Promise(NQ=>e._socket.once("drain",NQ)),ue.debug?.("drained",Ps))}ue.debug?.("Sending final blob chunk",Ps,"length",on.length),e.send((0,Qe.encode)([jE,{fileId:Ps,size:$o.size,finished:!0},on]))}catch(on){ue.debug?.("Error sending blob",on),e.send((0,Qe.encode)([jE,{fileId:Ps,finished:!0,error:on.toString()},Buffer.alloc(0)]))}finally{me--,me<mm&&yt?.()}});let Yd=rc[0]===66?8:0;kl(rc.length-Yd),Xa(rc,Yd),ue.trace?.("wrote record",ye.recordId,"length:",rc.length)}},"sendAuditRecord"),kr=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i)):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");nn=new AO.EventEmitter,nn.once("close",()=>{fe=!0,de?.end()});for(let{startTime:ye}of wr)ye<Me&&(Me=ye);(re||Promise.resolve()).then(async()=>{m=await m,d=m.auditStore,Te=m.tableById.map(Q),Re=[];for(let{name:tt,startTime:Mt,endTime:_r}of wr){let qt=FE(tt,d);ue.debug?.("subscription to",tt,"using local id",qt,"starting",Mt),Re[qt]={startTime:Mt,endTime:_r}}Go(u),ss||(ss=Zc(tt=>{tt.databaseName===u&&Go(u)}),In=G_(tt=>{tt===u&&(e.send((0,Qe.encode)([ku])),sn())}),e.on("close",()=>{ss?.remove(),In?.remove()})),e.send((0,Qe.encode)([gk,L_(m.auditStore),wr.map(({name:tt})=>tt)]));let ye=!0;do{isFinite(Me)||(ue.warn?.("Invalid sequence id "+Me),sn(1008,"Invalid sequence id"+Me));let tt;if(ye&&!fe&&(ye=!1,!(bO(d)<=Me)&&(wk.default.get(x.REPLICATION_COPYTABLESTOCATCHUP)??ese)&&server.nodes[0]?.name===E)){ue.info?.("Replicating all tables to",E);let _r=Me,qt=tg(d);for(let Fr in S){if(!Q(Fr))continue;let ec=S[Fr];for(let vt of ec.primaryStore.getRange({snapshot:!1})){if(fe)return;vt.localTime>=Me&&(ue.trace?.(s,"Copying record from",u,Fr,vt.key,vt.localTime),_r=Math.max(vt.localTime,_r),tt=!0,Rr()[XE]=1,Jt({recordId:vt.key,tableId:ec.tableId,type:"put",getValue(){return vt.value},encoded:ec.primaryStore.getBinary(vt.key),version:vt.version,residencyId:vt.residencyId,nodeId:qt,extendedType:vt.metadataFlags},vt.localTime))}}Me=_r}for(let{key:Mt,value:_r}of d.getRange({start:Me||1,exclusiveStart:!0,snapshot:!1})){if(fe)return;let qt=wt(_r);ue.debug?.("sending audit record",new Date(Mt)),Rr()[XE]=Mt,Me=Mt,Jt(qt,Mt),e._socket.writableNeedDrain?await new Promise(Fr=>{ue.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Fr)}):me>mm?await new Promise(Fr=>{yt=Fr}):await new Promise(setImmediate),nn.startTime=Mt,tt=!0}tt&&Jt({type:"end_txn"},Me),Rr()[XE]=0,await Uk(d)}while(!fe)}).catch(ye=>{ue.error?.(s,"Error handling subscription to node",ye),sn(1008,"Error handling subscription to node")});break}}return}b.position=8;let w=!0,y,D;do{Rr();let O=b.readInt();if(O===9&&b.getUint8(b.position)==ZE){b.position++,A=D=b.readFloat64(),h[SO]=A,h[TO]=Date.now(),ue.trace?.("received remote sequence update",A,u);break}let U=b.position,L=wt(T,U,U+O),I=vl[L.tableId];I||ue.error?.(`No table found with an id of ${L.tableId}`);let B;L.residencyId&&(B=Gd[L.residencyId],ue.trace?.(s,"received residency list",B,L.type,L.recordId));try{GA(()=>{y={table:I.name,id:L.recordId,type:L.type,nodeId:xl.get(L.nodeId),residencyList:B,timestamp:L.version,value:L.getValue(I),user:L.user,beginTxn:w,expiresAt:L.expiresAt}},G=>{let j=ap(G),X=Ae.get(j);ue.debug?.("Received transaction with blob",j,"has stream",!!X,"ended",!!X?.writableEnded),X?X.writableEnded&&Ae.delete(j):(X=new EO.PassThrough,Ae.set(j,X)),X.connectedToBlob=!0,X.lastChunk=Date.now(),G.size===void 0&&X.expectedSize&&(G.size=X.expectedSize);let k=createBlob(X,G),de=k.save({primaryStore:m.auditStore});return de&&(de.blobId=j,Pe.push(de),de.finally(()=>{ue.debug?.(`Finished receiving blob stream ${j}`),Pe.splice(Pe.indexOf(de),1)})),k})}catch(G){throw G.message+="typed structures for current decoder"+JSON.stringify(I.decoder.typedStructs),G}w=!1,ue.trace?.(s,"received replication message",L.type,"id",y.id,"version",new Date(L.version),"nodeId",y.nodeId),h[SO]=L.version,h[TO]=Date.now(),m.send(y),b.position=U+O}while(b.position<T.byteLength);qd++,rr(T.byteLength,"bytes-received",`${E}.${u}.${y?.table||"unknown_table"}`,"replication","ingest"),qd>hm&&!Ie&&(Ie=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),m.send({type:"end_txn",localTime:A,remoteNodeIds:R,async onCommit(){if(y){let O=Date.now()-y.timestamp;rr(O,"replication-latency",E+"."+u+"."+y.table,y.type,"ingest")}qd--,Ie&&(Ie=!1,e.resume(),ue.debug?.(`Replication resuming ${E}`)),Pe.length>0&&await Promise.all(Pe),ue.trace?.("All blobs finished"),!N&&D&&(ue.trace?.(s,"queuing confirmation of a commit at",D),setTimeout(()=>{e.send((0,Qe.encode)([Rk,N])),ue.trace?.(s,"sent confirmation of a commit at",N),N=null},tse)),N=D,ue.debug?.("last sequence committed",new Date(D),u)}})}catch(b){ue.error?.(s,"Error handling incoming replication message",b)}}),e.on("ping",lt),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-q,zc({name:E,database:u,url:t.url,latency:t.connection.latency})),q=null}),e.on("close",(T,b)=>{clearInterval(v),clearTimeout(F),clearInterval(ee),nn&&nn.emit("close"),$d&&$d.end();for(let[w,{reject:y}]of g)y(new Error(`Connection closed ${b?.toString()} ${T}`));ue.debug?.(s,"closed",T,b?.toString())});function Vd(){}a(Vd,"recordRemoteNodeSequence");function sn(T,b){e.isFinished=!0,e.close(T,b)}a(sn,"close");function Hr(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Hr)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let T=new Map;try{for(let y of m?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let D of y.value.nodes||[])D.lastTxnTime>(T.get(D.id)??0)&&T.set(D.id,D.lastTxnTime)}catch(y){if(!y.message.includes("Can not re"))throw y}let b=t.connection?.nodeSubscriptions?.[0];R=[];let w=t.connection?.nodeSubscriptions.map((y,D)=>{let O=[],{replicateByDefault:U}=y;if(y.subscriptions){for(let G of y.subscriptions)if(G.subscribe&&(G.schema||G.database)===u){let j=G.table;S?.[j]?.replicate!==!1&&O.push(j)}U=!1}else for(let G in S)(U?S[G].replicate===!1:S[G].replicate)&&O.push(G);let L=d&&FE(y.name,d),I=m?.dbisDB?.get([Symbol.for("seq"),L])??1,B=Math.max(I?.seqId??1,(typeof y.start_time=="string"?new Date(y.start_time).getTime():y.start_time)??1);if(ue.debug?.("Starting time recorded in db",y.name,L,u,I?.seqId,"start time:",B,new Date(B)),b!==y){let G=d&&FE(b.name,d),j=m?.dbisDB?.get([Symbol.for("seq"),G])??1;for(let X of j?.nodes||[])X.name===y.name&&(B=X.seqId,ue.debug?.("Using sequence id from proxy node",b.name,B))}return R.push(L),T.get(L)>B&&(B=T.get(L),ue.debug?.("Updating start time from more recent txn recorded",b.name,B)),{name:y.name,replicateByDefault:U,tables:O,startTime:B,endTime:y.end_time}});if(w)if(ue.debug?.(s,"sending subscription request",w,m?.dbisDB?.path),clearTimeout(z),w.length>0)e.send((0,Qe.encode)([pk,w]));else{let y=a(()=>{let D=performance.now();z=setTimeout(()=>{se<=D?sn(1008,"No nodes to subscribe to"):y()},oe)},"schedule_close");y()}}a(Hr,"sendSubscriptionRequestUpdate");function Bl(T,b){if(!T)return;let w=qT[T];return w||(w=b.getResidencyRecord(T),qT[T]=w),w}a(Bl,"getResidence");function Hl(T){return!(ga&&ga!="*"&&!ga[T]&&!ga.includes?.(T)&&!ga.some?.(b=>b.name===T))}a(Hl,"checkDatabaseAccess");function Fo(T){if(m=m||f.get(T),!Hl(T))throw new Error(`Access to database "${T}" is not permitted`);m||ue.warn?.(`No database named "${T}" was declared and registered`),d=m?.auditStore,S||(S=Xe()?.[T]);let b=Ze();if(b===E)throw b?new Error("Should not connect to self",b):new Error("Node name not defined");return Em(b,T),!0}a(Fo,"setDatabase");function Em(T,b){let w=Xe()?.[b],y=[];for(let D in w){let O=w[D];y.push({table:D,schemaDefined:O.schemaDefined,attributes:O.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}ue.trace?.("Sending database info for node",T,"database name",b),e.send((0,Qe.encode)([Ek,T,b,y]))}a(Em,"sendNodeDBName");function Go(T){let b=Xe()?.[T],w=[];for(let y in b){if(wr&&!wr.some(O=>O.replicateByDefault?!O.tables.includes(y):O.tables.includes(y)))continue;let D=b[y];w.push({table:y,schemaDefined:D.schemaDefined,attributes:D.attributes.map(O=>({name:O.name,type:O.type,isPrimaryKey:O.isPrimaryKey}))})}e.send((0,Qe.encode)([yk,w,T]))}a(Go,"sendDBSchema"),ee=setInterval(()=>{for(let[T,b]of Ae)b.lastChunk+3e4<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${T} from ${E}`),Ae.delete(T),b.end())},3e4).unref();let qo=1,Kd=[];return{end(){$d&&$d.end(),nn&&nn.emit("close")},getRecord(T){let b=qo++;return new Promise((w,y)=>{let D=[Tk,b,T.table.tableId,T.id];Kd[T.table.tableId]||(D.push(T.table.tableName),Kd[T.table.tableId]=!0),e.send((0,Qe.encode)(D)),g.set(b,{tableId:T.table.tableId,key:T.id,resolve(O){let{table:U,entry:L}=T;w(O),O&&U._recordRelocate(L,O)},reject:y})})},sendOperation(T){let b=qo++;return T.requestId=b,e.send((0,Qe.encode)([gO,T])),new Promise((w,y)=>{g.set(b,{resolve:w,reject:y})})}};function kl(T){V(5),T<128?o[c++]=T:T<16384?(l.setUint16(c,T|32768),c+=2):T<1056964608?(l.setUint32(c,T|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,T),c+=5)}function Xa(T,b=0,w=T.length){let y=w-b;V(y),T.copy(o,c,b,w),c+=y}function Za(T){V(8),l.setFloat64(c,T),c+=8}function V(T){if(T+16>o.length-c){let b=Buffer.allocUnsafeSlow(c+T-i+65536>>10<<11);o.copy(b,0,i,c),c=c-i,i=0,o=b,l=new DataView(o.buffer,0,o.length)}}function p(T,b){let w=T.database??"data";if(w!=="data"&&!$e[w]){ue.warn?.("Database not found",T.database);return}b||(b={});let y=b.schemaDefined,D=!1,O=T.schemaDefined,U=b.attributes||[];for(let L=0;L<T.attributes?.length;L++){let I=T.attributes[L],B=U[L];(!B||B.name!==I.name||B.type!==I.type)&&(y?ue.error?.(`Schema for '${u}.${T.table}' is defined locally, but attribute '${I.name}: ${I.type}' from '${E}' does not match local attribute ${B?"'"+B.name+": "+B.type+"'":"which does not exist"}`):(D=!0,O||(I.indexed=!0),U[L]=I))}return D?(ue.debug?.("(Re)creating",T),ut({table:T.table,database:T.database,schemaDefined:T.schemaDefined,attributes:U,...b})):b}}var wk,Qe,Ik,Ck,ue,AO,Pk,Dk,jc,Lk,EO,pk,Ek,gk,ku,Sk,mO,Tk,zE,gO,QE,Ak,Rk,yk,jE,Mk,SO,TO,XE,ese,RO,Sa,JE,bk,tse,Ok,pO,Nk,k_,yO=be(()=>{ve();Xi();Zb();OO();ds();wk=M(ce());H();nu();Qe=require("msgpackr"),Ik=require("ws"),Ck=require("worker_threads"),ue=M(hi());x_();AO=require("events"),Pk=M(js()),Dk=M(require("node:tls"));Wc();jc=M(require("node:process")),Lk=require("node:net");Ni();cs();EO=require("node:stream"),pk=129,Ek=140,gk=141,ku=142,Sk=130,mO=132,Tk=133,zE=134,gO=136,QE=137,Ak=143,Rk=144,yk=145,jE=146,Mk=0,SO=1,TO=2,XE=3,ese=jc.env.HDB_LEADER_URL||jc.argv.includes("--HDB_LEADER_URL"),RO=new Map,Sa=new Map,JE=!0,bk=300,tse=2,Ok=3e4;a(eg,"createWebSocket");Nk=1e3,k_=class extends AO.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Ws(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=Nk;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await eg(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${jc.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=Nk,zc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=F_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(Uu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();ue.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(F_,"replicateOverWS")});var Ea={};Ue(Ea,{clearThisNodeName:()=>lse,disableReplication:()=>ise,enabled_databases:()=>ga,forEachReplicatedDatabase:()=>da,getThisNodeId:()=>tg,getThisNodeName:()=>Ze,getThisNodeUrl:()=>fa,hostnameToUrl:()=>ig,lastTimeInAuditStore:()=>M_,monitorNodeCAs:()=>$k,replicateOperation:()=>dse,replication_certificate_authorities:()=>Jc,sendOperationToNode:()=>$_,servers:()=>nse,setReplicator:()=>Kk,start:()=>sse,startOnMainThread:()=>rO,subscribeToNode:()=>vu,unsubscribeFromNode:()=>VE,urlToNodeName:()=>Ws});function sse(e){if(e.port||(e.port=hs.default.get(x.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=hs.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!Ze())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of U_(e))t.set(Ws(n.url),n);ose(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=We.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),F_(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&ir.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,We.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&ir.error(`Incoming client connection from ${n.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,n._nodeRequest.socket.authorizationError);let i=nr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));if(c)if(c?.revoked_certificates?.includes(n.peerCertificate.serialNumber)){ir.warn("Revoked certificate used in attempt to connect to node",c.name,"certificate serial number",n.peerCertificate.serialNumber);return}else n.user=c;else ir.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:ir.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Jc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=sg.createSecureContext(l)}catch(c){ir.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),$k(s),hs.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function $k(e){let t=0;Lu(r=>{r?.ca&&(Jc.add(r.ca),Jc.size!==t&&(t=Jc.size,e?.()))})}function ise(e=!0){qk=e}function ose(e){qk||(Xe(),ga=e.databases,da(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Sa;for(let[s,i]of q_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];Kk(r,s,e),RO.get(s)?.forEach(i=>i(s))}}))}function Kk(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class Vk extends $r{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Sa,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(ir.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Ln,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=ase(h,Vk.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Fk.ServerError("No connection to any other nodes are available",502);let d={requestId:rse++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;ir.warn("Error in load from node",ng,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Yk(e,t,r,n,s){let i=q_.get(e);i||q_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new k_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function ase(e,t,r){let n=xk.get(e)?.get(r);if(n)return n;let s=nr().primaryStore.get(e);return s?.url&&(n=Yk(s.url,t,r,e,s.authorization),xk.set(e,q_.get(s.url))),n}async function $_(e,t,r){r||(r={}),r.serverName=e.name;let n=await eg(e.url,r),s=F_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{ir.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function vu(e){try{Gk.isMainThread&&ir.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Sa.get(e.database);if(!t){let n;t=new Promise(s=>{ir.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Sa.set(e.database,t)}let r=Yk(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>v_(n,e.database)),e.replicateByDefault)}catch(t){ir.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function VE({name:e,url:t,database:r}){ir.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(nr().primaryStore.getRange({})));let n=q_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function cse(){if(NO!==void 0)return NO;let e=hs.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||hs.default.get(x.TLS_CERTIFICATE);if(e)return NO=new Hk.X509Certificate((0,kk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Ze(){return ng||(ng=hs.default.get("replication_hostname")??Ws(hs.default.get("replication_url"))??cse()??Bk("operationsapi_network_secureport")??Bk("operationsapi_network_port")??"127.0.0.1")}function lse(){ng=void 0}function Bk(e){let t=hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function rg(e){let t=hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function tg(e){return L_(e)?.[Ze()]}function fa(){let e=hs.default.get("replication_url");return e||ig(Ze())}function ig(e){let t=rg("replication_port");if(t)return`ws://${e}:${t}`;if(t=rg("replication_secureport"),t)return`wss://${e}:${t}`;if(t=rg("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=rg("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ws(e){if(e)return new URL(e).hostname}function da(e,t){for(let n of Object.getOwnPropertyNames($e))r(n);return G_(n=>{r(n)}),Zc((n,s)=>{r(n.databaseName)});function r(n){let s=$e[n];ir.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):use(n)&&t(s,n,!1)}a(r,"forDatabase")}function use(e){let t=$e[e];for(let r in t)if(t[r].replicate)return!0}function M_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function dse(e){let t={message:""};if(e.replicated){e.replicated=!1,ir.trace?.("Replicating operation",e.operation,"to nodes",We.nodes.map(n=>n.name));let r=await Promise.allSettled(We.nodes.map(n=>$_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=We.nodes[s]?.name,i})}return t}var hs,ir,Hk,kk,sg,Fk,Gk,qk,rse,nse,Jc,ga,q_,xk,NO,ng,ds=be(()=>{ve();Xo();Kl();yO();Gr();hs=M(ce()),ir=M(J()),Hk=require("crypto"),kk=require("fs");x_();Wc();H();Zb();sg=M(require("node:tls")),Fk=M(he()),Gk=require("worker_threads"),rse=1,nse=[],Jc=hs.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(sg.rootCertificates):new Set;a(sse,"start");a($k,"monitorNodeCAs");a(ise,"disableReplication");a(ose,"assignReplicationSource");a(Kk,"setReplicator");q_=new Map;a(Yk,"getConnection");xk=new Map;a(ase,"getConnectionByName");a($_,"sendOperationToNode");a(vu,"subscribeToNode");a(VE,"unsubscribeFromNode");a(cse,"getCommonNameFromCert");a(Ze,"getThisNodeName");a(lse,"clearThisNodeName");Object.defineProperty(We,"hostname",{get(){return Ze()}});a(Bk,"getHostFromListeningPort");a(rg,"getPortFromListeningPort");a(tg,"getThisNodeId");We.replication={getThisNodeId:tg,exportIdMapping:L_};a(fa,"getThisNodeUrl");a(ig,"hostnameToUrl");a(Ws,"urlToNodeName");a(da,"forEachReplicatedDatabase");a(use,"hasExplicitlyReplicatedTable");a(M_,"lastTimeInAuditStore");a(dse,"replicateOperation")});var ug=C((aIe,Jk)=>{"use strict";var Fu=oH(),{validateBySchema:V_}=rt(),{common_validators:Gu,schema_regex:wO}=Si(),or=require("joi"),fse=J(),_se=require("uuid").v4,cg=oo(),qu=(H(),P($)),hse=require("util"),Ta=kn(),{handleHDBError:ho,hdb_errors:mse,ClientError:K_}=he(),{HDB_ERROR_MSGS:og,HTTP_STATUS_CODES:mo}=mse,{SchemaEventMsg:lg}=qs(),Wk=Er(),{getDatabases:pse}=(ve(),P(it)),{transformReq:$u}=ae(),{replicateOperation:zk}=(ds(),P(Ea)),ag=or.string().min(1).max(Gu.schema_length.maximum).pattern(wO).messages({"string.pattern.base":"{:#label} "+Gu.schema_format.message}),Ese=or.string().min(1).max(Gu.schema_length.maximum).pattern(wO).messages({"string.pattern.base":"{:#label} "+Gu.schema_format.message}).required(),gse=or.string().min(1).max(Gu.schema_length.maximum).pattern(wO).messages({"string.pattern.base":"{:#label} "+Gu.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();Jk.exports={createSchema:Sse,createSchemaStructure:Qk,createTable:Tse,createTableStructure:jk,createAttribute:Ose,dropSchema:Ase,dropTable:Rse,dropAttribute:yse,getBackup:Nse};async function Sse(e){let t=await Qk(e);return cg.signalSchemaChange(new lg(process.pid,e.operation,e.schema)),t}a(Sse,"createSchema");async function Qk(e){let t=V_(e,or.object({database:ag,schema:ag}));if(t)throw new K_(t.message);if($u(e),!await Fu.checkSchemaExists(e.schema))throw ho(new Error,og.SCHEMA_EXISTS_ERR(e.schema),mo.BAD_REQUEST,qu.LOG_LEVELS.ERROR,og.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ta.createSchema(e),`database '${e.schema}' successfully created`}a(Qk,"createSchemaStructure");async function Tse(e){return $u(e),e.hash_attribute=e.primary_key??e.hash_attribute,await jk(e)}a(Tse,"createTable");async function jk(e){let t=V_(e,or.object({database:ag,schema:ag,table:Ese,residence:or.array().items(or.string().min(1)).optional(),hash_attribute:gse}));if(t)throw new K_(t.message);if(!await Fu.checkSchemaTableExists(e.schema,e.table))throw ho(new Error,og.TABLE_EXISTS_ERR(e.schema,e.table),mo.BAD_REQUEST,qu.LOG_LEVELS.ERROR,og.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:_se(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ta.createTable(n,e);else throw ho(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",mo.BAD_REQUEST);else await Ta.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(jk,"createTableStructure");async function Ase(e){let t=V_(e,or.object({database:or.string(),schema:or.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new K_(t.message);$u(e);let r=await Fu.checkSchemaExists(e.schema);if(r)throw ho(new Error,r,mo.NOT_FOUND,qu.LOG_LEVELS.ERROR,r,!0);let n=await Fu.schema_describe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Ta.dropSchema(e),cg.signalSchemaChange(new lg(process.pid,e.operation,e.schema)),await Wk.purgeSchemaTableStreams(e.schema,s);let i=await zk(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Ase,"dropSchema");async function Rse(e){let t=V_(e,or.object({database:or.string(),schema:or.string(),table:or.string().required()}));if(t)throw new K_(t.message);$u(e);let r=await Fu.checkSchemaTableExists(e.schema,e.table);if(r)throw ho(new Error,r,mo.NOT_FOUND,qu.LOG_LEVELS.ERROR,r,!0);await Ta.dropTable(e),await Wk.purgeTableStream(e.schema,e.table);let n=await zk(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Rse,"dropTable");async function yse(e){let t=V_(e,or.object({database:or.string(),schema:or.string(),table:or.string().required(),attribute:or.string().required()}));if(t)throw new K_(t.message);$u(e);let r=await Fu.checkSchemaTableExists(e.schema,e.table);if(r)throw ho(new Error,r,mo.NOT_FOUND,qu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ho(new Error,"You cannot drop a hash attribute",mo.BAD_REQUEST,void 0,void 0,!0);if(qu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ho(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,mo.BAD_REQUEST,void 0,void 0,!0);try{return await Ta.dropAttribute(e),bse(e),cg.signalSchemaChange(new lg(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw fse.error(`Got an error deleting attribute ${hse.inspect(e)}.`),n}}a(yse,"dropAttribute");function bse(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(bse,"dropAttributeFromGlobal");async function Ose(e){$u(e);let t=pse()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ho(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,mo.BAD_REQUEST,void 0,void 0,!0);return await Ta.createAttribute(e),cg.signalSchemaChange(new lg(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Ose,"createAttribute");function Nse(e){return Ta.getBackup(e)}a(Nse,"getBackup")});var Zk=C((lIe,Xk)=>{"use strict";var{OPERATIONS_ENUM:wse}=(H(),P($)),IO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=wse.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};Xk.exports=IO});var CO=C((fIe,sF)=>{"use strict";var Ise=kn(),dIe=Zk(),dg=ae(),fg=(H(),P($)),Cse=ce(),{handleHDBError:eF,hdb_errors:Pse}=he(),{HDB_ERROR_MSGS:tF,HTTP_STATUS_CODES:rF}=Pse,Dse=Object.values(fg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),nF="To use this operation audit log must be enabled in harperdb-config.yaml";sF.exports=Lse;async function Lse(e){if(dg.isEmpty(e.schema))throw new Error(tF.SCHEMA_REQUIRED_ERR);if(dg.isEmpty(e.table))throw new Error(tF.TABLE_REQUIRED_ERR);if(!Cse.get(fg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw eF(new Error,nF,rF.BAD_REQUEST,fg.LOG_LEVELS.ERROR,nF,!0);let t=dg.checkSchemaTableExist(e.schema,e.table);if(t)throw eF(new Error,t,rF.NOT_FOUND,fg.LOG_LEVELS.ERROR,t,!0);if(!dg.isEmpty(e.search_type)&&Dse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Ise.readAuditLog(e)}a(Lse,"readAuditLog")});var oF=C((hIe,iF)=>{"use strict";var{OPERATIONS_ENUM:Mse}=(H(),P($)),PO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Mse.GET_BACKUP,this.schema=t,this.table=r}};iF.exports=PO});var lF=C((gIe,cF)=>{"use strict";var vse=kn(),pIe=oF(),DO=ae(),Use=(H(),P($)),EIe=ce(),{handleHDBError:xse,hdb_errors:Bse}=he(),{HDB_ERROR_MSGS:aF,HTTP_STATUS_CODES:Hse}=Bse;cF.exports=kse;async function kse(e){if(DO.isEmpty(e.schema))throw new Error(aF.SCHEMA_REQUIRED_ERR);if(DO.isEmpty(e.table))throw new Error(aF.TABLE_REQUIRED_ERR);let t=DO.checkSchemaTableExist(e.schema,e.table);if(t)throw xse(new Error,t,Hse.NOT_FOUND,Use.LOG_LEVELS.ERROR,t,!0);return await vse.getBackup(read_audit_log_object)}a(kse,"getBackup")});var _F=C((TIe,fF)=>{"use strict";var Fse=ce(),Aa=require("joi"),Gse=rt(),uF=require("moment"),qse=require("fs-extra"),LO=require("path"),$se=require("lodash"),Y_=(H(),P($)),{LOG_LEVELS:el}=(H(),P($)),Vse="YYYY-MM-DD hh:mm:ss",Kse=LO.resolve(__dirname,"../logs");fF.exports=function(e){return Gse.validateBySchema(e,Yse)};var Yse=Aa.object({from:Aa.custom(dF),until:Aa.custom(dF),level:Aa.valid(el.NOTIFY,el.FATAL,el.ERROR,el.WARN,el.INFO,el.DEBUG,el.TRACE),order:Aa.valid("asc","desc"),limit:Aa.number().min(1),start:Aa.number().min(0),log_name:Aa.custom(Wse)});function dF(e,t){if(uF(e,uF.ISO_8601).format(Vse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(dF,"validateDatetime");function Wse(e,t){if($se.invert(Y_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Fse.get(Y_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Y_.LOG_NAMES.HDB:e,i=s===Y_.LOG_NAMES.INSTALL?LO.join(Kse,Y_.LOG_NAMES.INSTALL):LO.join(n,s);return qse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Wse,"validateReadLogPath")});var vO=C((RIe,mF)=>{"use strict";var _g=(H(),P($)),zse=J(),Qse=ce(),jse=_F(),MO=require("path"),hF=require("fs-extra"),{once:Jse}=require("events"),{handleHDBError:Xse,hdb_errors:Zse}=he(),{PACKAGE_ROOT:eie}=pt(),tie=MO.join(eie,"logs"),rie=1e3,nie=200;mF.exports=sie;async function sie(e){let t=jse(e);if(t)throw Xse(t,t.message,Zse.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Qse.get(_g.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?_g.LOG_NAMES.HDB:e.log_name,s=n===_g.LOG_NAMES.INSTALL?MO.join(tie,_g.LOG_NAMES.INSTALL):MO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?rie:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,m=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(hF.statSync(s).size-(m+5)*nie,0));let g=hF.createReadStream(s,{start:S});g.on("error",F=>{zse.error(F)});let R=0,E=[],A="",N;g.on("data",F=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=A+F;let Y=0,ee;for(;(ee=q.exec(F))&&!g.destroyed;){N&&(N.message=F.slice(Y,ee.index),v(N));let[oe,z,se]=ee,W=se.split("] ["),pe=W[0],Ae=W[1];W.splice(0,2),N={timestamp:z,thread:pe,level:Ae,tags:W,message:""},Y=ee.index+oe.length}A=F.slice(Y)}),g.on("end",F=>{g.destroyed||N&&(N.message=A.trim(),v(N))}),g.resume();function v(F){let q,Y,ee;switch(!0){case(i&&c&&u):q=new Date(F.timestamp),Y=new Date(l),ee=new Date(f),F.level===o&&q>=Y&&q<=ee&&R<_?R++:F.level===o&&q>=Y&&q<=ee&&(Ra(F,h,E),R++,R===m&&g.destroy());break;case(i&&c):q=new Date(F.timestamp),Y=new Date(l),F.level===o&&q>=Y&&R<_?R++:F.level===o&&q>=Y&&(Ra(F,h,E),R++,R===m&&g.destroy());break;case(i&&u):q=new Date(F.timestamp),ee=new Date(f),F.level===o&&q<=ee&&R<_?R++:F.level===o&&q<=ee&&(Ra(F,h,E),R++,R===m&&g.destroy());break;case(c&&u):q=new Date(F.timestamp),Y=new Date(l),ee=new Date(f),q>=Y&&q<=ee&&R<_?R++:q>=Y&&q<=ee&&(Ra(F,h,E),R++,R===m&&g.destroy());break;case i:F.level===o&&R<_?R++:F.level===o&&(Ra(F,h,E),R++,R===m&&g.destroy());break;case c:q=new Date(F.timestamp),Y=new Date(l),q>=Y&&R<_?R++:q>=Y&&R>=_&&(Ra(F,h,E),R++,R===m&&g.destroy());break;case u:q=new Date(F.timestamp),ee=new Date(f),q<=ee&&R<_?R++:q<=ee&&R>=_&&(Ra(F,h,E),R++,R===m&&g.destroy());break;default:R<_?R++:(Ra(F,h,E),R++,R===m&&g.destroy())}}return a(v,"onLogMessage"),await Jse(g,"close"),E}a(sie,"readLog");function Ra(e,t,r){t==="desc"?iie(e,r):t==="asc"?oie(e,r):r.push(e)}a(Ra,"pushLineToResult");function iie(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(iie,"insertDescending");function oie(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(oie,"insertAscending")});var hg=C((IIe,SF)=>{"use strict";var UO=require("joi"),{string:Vu,boolean:pF,date:aie}=UO.types(),cie=rt(),{validateSchemaExists:bIe,validateTableExists:OIe,validateSchemaName:NIe}=Si(),lie=(H(),P($)),uie=It(),EF=ce();EF.initSync();var wIe=Vu.invalid(EF.get(lie.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(uie.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),gF={operation:Vu.valid("add_node","update_node","set_node_replication"),node_name:Vu.optional(),subscriptions:UO.array().items({table:Vu.optional(),schema:Vu.optional(),database:Vu.optional(),subscribe:pF.required(),publish:pF.required().custom(fie),start_time:aie.iso()})};function die(e){return cie.validateBySchema(e,UO.object(gF))}a(die,"addUpdateNodeValidator");function fie(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(fie,"checkForFalsy");SF.exports={addUpdateNodeValidator:die,validation_schema:gF}});var Ku=C((PIe,TF)=>{"use strict";var xO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},BO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TF.exports={Node:xO,NodeSubscription:BO}});var RF=C((LIe,AF)=>{"use strict";var _ie=(H(),P($)).OPERATIONS_ENUM,HO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_ie.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};AF.exports=HO});var W_=C((vIe,yF)=>{"use strict";var kO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},FO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};yF.exports={RemotePayloadObject:kO,RemotePayloadSubscription:FO}});var OF=C((xIe,bF)=>{"use strict";var GO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};bF.exports=GO});var wF=C((qIe,NF)=>{"use strict";var hie=OF(),HIe=Ut(),kIe=dt(),mie=J(),{getSchemaPath:FIe,getTransactionAuditStorePath:GIe}=Et(),{getDatabases:pie}=(ve(),P(it));NF.exports=Eie;async function Eie(e){let t=new hie;try{let r=pie()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){mie.warn(`unable to stat table dbi due to ${r}`)}return t}a(Eie,"lmdbGetTableSize")});var CF=C((VIe,IF)=>{"use strict";var qO=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};IF.exports=qO});var Wu=C((jIe,MF)=>{"use strict";var gie=require("fs-extra"),Sie=require("path"),jr=require("systeminformation"),ya=J(),PF=Er(),YIe=It(),Yu=(H(),P($)),Tie=wF(),Aie=so(),{getThreadInfo:DF}=nt(),z_=ce();z_.initSync();var Rie=CF(),{openEnvironment:WIe}=dt(),{getSchemaPath:zIe}=Et(),{database:QIe,databases:$O}=(ve(),P(it)),mg;MF.exports={getHDBProcessInfo:WO,getNetworkInfo:QO,getDiskInfo:zO,getMemoryInfo:YO,getCPUInfo:KO,getTimeInfo:VO,getSystemInformation:jO,systemInformation:yie,getTableSize:JO,getMetrics:XO};function VO(){return jr.time()}a(VO,"getTimeInfo");async function KO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await jr.cpu();f.cpu_speed=await jr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:m,raw_currentload_system:S,raw_currentload_user:g,cpus:R,...E}=await jr.currentLoad();return E.cpus=[],R.forEach(A=>{let{raw_load:N,raw_load_idle:v,raw_load_irq:F,raw_load_nice:q,raw_load_system:Y,raw_load_user:ee,...oe}=A;E.cpus.push(oe)}),f.current_load=E,f}catch(e){return ya.error(`error in getCPUInfo: ${e}`),{}}}a(KO,"getCPUInfo");async function YO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ya.error(`error in getMemoryInfo: ${e}`),{}}}a(YO,"getMemoryInfo");async function WO(){let e={core:[],clustering:[]};try{let t=await jr.processes(),r;try{r=Number.parseInt(await gie.readFile(Sie.join(z_.get(Yu.CONFIG_PARAMS.ROOTPATH),Yu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Yu.NODE_ERROR_CODES.ENOENT)ya.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ya.error(`error in getHDBProcessInfo: ${t}`),e}}a(WO,"getHDBProcessInfo");async function zO(){let e={};try{if(!z_.get(Yu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await jr.fsStats();return e.read_write=u,e.size=await jr.fsSize(),e}catch(t){return ya.error(`error in getDiskInfo: ${t}`),e}}a(zO,"getDiskInfo");async function QO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return z_.get(Yu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await jr.networkInterfaceDefault(),e.latency=await jr.inetChecksite("google.com"),(await jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return ya.error(`error in getNetworkInfo: ${t}`),e}}a(QO,"getNetworkInfo");async function jO(){if(mg!==void 0)return mg;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await jr.osInfo();e=c;let l=await jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,mg=e,mg}catch(t){return ya.error(`error in getSystemInformation: ${t}`),e}}a(jO,"getSystemInformation");async function JO(){let e=[],t=await Aie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Tie(n));return e}a(JO,"getTableSize");async function XO(){let e={};for(let t in $O){let r=e[t]={},n=r.tables={};for(let s in $O[t])try{let i=$O[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){ya.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(XO,"getMetrics");async function LF(){if(z_.get(Yu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await PF.getNATSReferences(),t=await PF.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(LF,"getNatsStreamInfo");async function yie(e){let t=new Rie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await jO(),t.time=VO(),t.cpu=await KO(),t.memory=await YO(),t.disk=await zO(),t.network=await QO(),t.harperdb_processes=await WO(),t.table_size=await JO(),t.metrics=await XO(),t.threads=await DF(),t.replication=await LF(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await jO();break;case"time":t.time=VO();break;case"cpu":t.cpu=await KO();break;case"memory":t.memory=await YO();break;case"disk":t.disk=await zO();break;case"network":t.network=await QO();break;case"harperdb_processes":t.harperdb_processes=await WO();break;case"table_size":t.table_size=await JO();break;case"database_metrics":case"metrics":t.metrics=await XO();break;case"threads":t.threads=await DF();break;case"replication":t.replication=await LF();break;default:break}return t}a(yie,"systemInformation")});var po=C((tCe,BF)=>{"use strict";var bie=En(),ZO=ae(),Oie=require("util"),tl=(H(),P($)),vF=ce();vF.initSync();var Nie=Lb(),UF=Kr(),{Node:XIe,NodeSubscription:ZIe}=Ku(),wie=hu(),Iie=RF(),{RemotePayloadObject:Cie,RemotePayloadSubscription:Pie}=W_(),{handleHDBError:Die,hdb_errors:Lie}=he(),{HTTP_STATUS_CODES:Mie,HDB_ERROR_MSGS:vie}=Lie,Uie=$s(),xie=Wu(),{packageJson:Bie}=pt(),{getDatabases:Hie}=(ve(),P(it)),eCe=Oie.promisify(Nie.authorize),kie=UF.searchByHash,Fie=UF.searchByValue;BF.exports={isEmpty:Gie,getNodeRecord:qie,upsertNodeRecord:$ie,buildNodePayloads:Vie,checkClusteringEnabled:Kie,getAllNodeRecords:Yie,getSystemInfo:Wie,reverseSubscription:xF};function Gie(e){return e==null}a(Gie,"isEmpty");async function qie(e){let t=new wie(tl.SYSTEM_SCHEMA_NAME,tl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return kie(t)}a(qie,"getNodeRecord");async function $ie(e){let t=new Iie(tl.SYSTEM_SCHEMA_NAME,tl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return bie.upsert(t)}a($ie,"upsertNodeRecord");function xF(e){if(ZO.isEmpty(e.subscribe)||ZO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(xF,"reverseSubscription");function Vie(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=ZO.getTableHashAttribute(l,u),{subscribe:d,publish:h}=xF(c),_=Hie()[l]?.[u],m=new Pie(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(m)}return new Cie(r,t,s,n)}a(Vie,"buildNodePayloads");function Kie(){if(!vF.get(tl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Die(new Error,vie.CLUSTERING_NOT_ENABLED,Mie.BAD_REQUEST,void 0,void 0,!0)}a(Kie,"checkClusteringEnabled");async function Yie(){let e=new Uie(tl.SYSTEM_SCHEMA_NAME,tl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Fie(e))}a(Yie,"getAllNodeRecords");async function Wie(){let e=await xie.getSystemInformation();return{hdb_version:Bie.version,node_version:e.node_version,platform:e.platform}}a(Wie,"getSystemInfo")});var eN=C((nCe,KF)=>{"use strict";var pg=Er(),HF=ae(),kF=It(),FF=(H(),P($)),Eg=J(),GF=ug(),zie=a_(),{RemotePayloadObject:Qie}=W_(),{handleHDBError:qF,hdb_errors:jie}=he(),{HTTP_STATUS_CODES:$F}=jie,{NodeSubscription:VF}=Ku();KF.exports=Jie;async function Jie(e,t){let r;try{r=await pg.request(`${t}.${kF.REQUEST_SUFFIX}`,new Qie(FF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Eg.trace("Response from remote describe all request:",r)}catch(o){Eg.error(`addNode received error from describe all request to remote node: ${o}`);let c=pg.requestErrorHandler(o,"add_node",t);throw qF(new Error,c,$F.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===kF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw qF(new Error,o,$F.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===FF.SYSTEM_SCHEMA_NAME){await pg.createLocalTableStream(l,c);let m=new VF(l,c,o.publish,o.subscribe);m.start_time=o.start_time,i.push(m);continue}let u=HF.doesSchemaExist(l),f=n[l]!==void 0,d=c?HF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(Eg.trace(`addNode creating schema: ${l}`),await GF.createSchema({operation:"create_schema",schema:l})),!d&&h){Eg.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let m=new zie(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(m.attributes=n[l][c].attributes),await GF.createTable(m)}await pg.createLocalTableStream(l,c);let _=new VF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(Jie,"reviewSubscriptions")});var rl={};Ue(rl,{addNodeBack:()=>roe,removeNodeBack:()=>noe,setNode:()=>toe});async function toe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Ws(t)):t=ig(r);let n=(0,WF.validateBySchema)(e,eoe);if(n)throw(0,Eo.handleHDBError)(n,n.message,Zie.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Eo.ClientError("url or hostname is required for remove_node operation");let _=r,m=nr(),S=await m.get(_);if(!S)throw new Eo.ClientError(_+" does not exist");try{await $_({url:S.url},{operation:$t.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?Ze():_},void 0)}catch(g){Yn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await m.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new Eo.ClientError("url required for this operation");let s=fa();if(s==null)throw new Eo.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ms.getReplicationCert)();let _=await(0,ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,ms.createCsr)(),Yn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,Yn.info("Sending CA named",_.name,"to target node",t))}let l={operation:$t.ADD_NODE_BACK,hostname:(0,Oa.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Oa.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Oa.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(YF):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=YF(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await $_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,Yn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Yn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ms.setCertTable)({name:Xie.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ms.setCertTable)({name:Ze(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),e.revoked_certificates&&(d.revoked_certificates=e.revoked_certificates),e.shard!==void 0&&(d.shard=e.shard),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};(0,Oa.get)(x.REPLICATION_SHARD)!==void 0&&(_.shard=(0,Oa.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await fo(Ze(),_)}await fo(u?u.nodeName:d.name??Ws(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function roe(e){Yn.trace("addNodeBack received request:",e);let t=await(0,ms.signCertificate)(e),r;e.csr?(r=t.signingCA,Yn.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Yn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,ms.getReplicationCertAuth)();if(n.replicates){let i={url:fa(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Oa.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Oa.get)(x.REPLICATION_SHARD)),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await fo(Ze(),i)}return await fo(e.hostname,n),t.nodeName=Ze(),t.usingCA=s?.certificate,Yn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function noe(e){Yn.trace("removeNodeBack received request:",e),await nr().delete(e.name)}function YF(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ms,WF,ba,Oa,Yn,Eo,Xie,Zie,eoe,nl=be(()=>{ms=M(js()),WF=M(rt()),ba=M(require("joi")),Oa=M(ce());H();x_();Wc();ds();Yn=M(J()),Eo=M(he()),{pki:Xie}=require("node-forge"),{HTTP_STATUS_CODES:Zie}=Eo.hdb_errors,eoe=ba.default.object({hostname:ba.default.string(),verify_tls:ba.default.boolean(),replicates:ba.default.boolean(),subscriptions:ba.default.array(),revoked_certificates:ba.default.array(),shard:ba.default.number()});a(toe,"setNode");a(roe,"addNodeBack");a(noe,"removeNodeBack");a(YF,"reverseSubscription")});var Rg=C((fCe,QF)=>{"use strict";var{handleHDBError:gg,hdb_errors:soe}=he(),{HTTP_STATUS_CODES:Sg}=soe,{addUpdateNodeValidator:ioe}=hg(),Tg=J(),Ag=(H(),P($)),zF=It(),ooe=ae(),Q_=Er(),j_=po(),tN=ce(),aoe=eN(),{Node:coe,NodeSubscription:loe}=Ku(),{broadcast:uoe}=nt(),{setNode:doe}=(nl(),P(rl)),uCe=ce(),dCe=(H(),P($)),foe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",_oe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hoe=tN.get(Ag.CONFIG_PARAMS.CLUSTERING_NODENAME);QF.exports=moe;async function moe(e,t=!1){if(Tg.trace("addNode called with:",e),tN.get(Ag.CONFIG_PARAMS.REPLICATION_URL)||tN.get(Ag.CONFIG_PARAMS.REPLICATION_HOSTNAME))return doe(e);j_.checkClusteringEnabled();let r=ioe(e);if(r)throw gg(r,r.message,Sg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await j_.getNodeRecord(n);if(!ooe.isEmptyOrZeroLength(d))throw gg(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Sg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await aoe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=foe,o;let c=j_.buildNodePayloads(s,hoe,Ag.OPERATIONS_ENUM.ADD_NODE,await j_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new loe(_.schema,_.table,_.publish,_.subscribe))}Tg.trace("addNode sending remote payload:",c);let u;try{u=await Q_.request(`${n}.${zF.REQUEST_SUFFIX}`,c)}catch(d){Tg.error(`addNode received error from request: ${d}`);for(let _=0,m=s.length;_<m;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await Q_.updateRemoteConsumer(S,n)}let h=Q_.requestErrorHandler(d,"add_node",n);throw gg(new Error,h,Sg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===zF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw gg(new Error,d,Sg.INTERNAL_SERVER_ERROR,"error",d)}Tg.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await Q_.updateRemoteConsumer(_,n),_.subscribe===!0&&await Q_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new coe(n,l,u.system_info);return await j_.upsertNodeRecord(f),uoe({type:"nats_update"}),i.length>0?o.message=_oe:o.message=`Successfully added '${n}' to manifest`,o}a(moe,"addNode")});var iN=C((mCe,JF)=>{"use strict";var{handleHDBError:rN,hdb_errors:poe}=he(),{HTTP_STATUS_CODES:nN}=poe,{addUpdateNodeValidator:Eoe}=hg(),J_=J(),yg=(H(),P($)),jF=It(),hCe=ae(),X_=Er(),Z_=po(),sN=ce(),{cloneDeep:goe}=require("lodash"),Soe=eN(),{Node:Toe,NodeSubscription:Aoe}=Ku(),{broadcast:Roe}=nt(),{setNode:yoe}=(nl(),P(rl)),boe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ooe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Noe=sN.get(yg.CONFIG_PARAMS.CLUSTERING_NODENAME);JF.exports=woe;async function woe(e){if(J_.trace("updateNode called with:",e),sN.get(yg.CONFIG_PARAMS.REPLICATION_URL)??sN.get(yg.CONFIG_PARAMS.REPLICATION_HOSTNAME))return yoe(e);Z_.checkClusteringEnabled();let t=Eoe(e);if(t)throw rN(t,t.message,nN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Z_.getNodeRecord(r);s.length>0&&(n=goe(s));let{added:i,skipped:o}=await Soe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=boe,c;let l=Z_.buildNodePayloads(i,Noe,yg.OPERATIONS_ENUM.UPDATE_NODE,await Z_.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];J_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}J_.trace("updateNode sending remote payload:",l);let u;try{u=await X_.request(`${r}.${jF.REQUEST_SUFFIX}`,l)}catch(f){J_.error(`updateNode received error from request: ${f}`);let d=X_.requestErrorHandler(f,"update_node",r);throw rN(new Error,d,nN.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===jF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw rN(new Error,f,nN.INTERNAL_SERVER_ERROR,"error",f)}J_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await X_.updateRemoteConsumer(h,r),h.subscribe===!0?await X_.updateConsumerIterator(h.schema,h.table,r,"start"):await X_.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new Toe(r,[],u.system_info)]),await Ioe(n[0],i,u.system_info),o.length>0?c.message=Ooe:c.message=`Successfully updated '${r}'`,c}a(woe,"updateNode");async function Ioe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Aoe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Z_.upsertNodeRecord(n),Roe({type:"nats_update"})}a(Ioe,"updateNodeTable")});var rG=C((ECe,tG)=>{"use strict";var eG=require("joi"),{string:XF}=eG.types(),Coe=rt(),ZF=(H(),P($)),Poe=ce(),Doe=It();tG.exports=Loe;function Loe(e){let t=XF.invalid(Poe.get(ZF.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Doe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=eG.object({operation:XF.valid(ZF.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Coe.validateBySchema(e,r)}a(Loe,"removeNodeValidator")});var bg=C((SCe,aG)=>{"use strict";var{handleHDBError:nG,hdb_errors:Moe}=he(),{HTTP_STATUS_CODES:sG}=Moe,voe=rG(),eh=J(),iG=po(),Uoe=ae(),zu=(H(),P($)),oG=It(),oN=Er(),aN=ce(),{RemotePayloadObject:xoe}=W_(),{NodeSubscription:Boe}=Ku(),Hoe=o_(),koe=Pc(),{broadcast:Foe}=nt(),{setNode:Goe}=(nl(),P(rl)),qoe=aN.get(zu.CONFIG_PARAMS.CLUSTERING_NODENAME);aG.exports=$oe;async function $oe(e){if(eh.trace("removeNode called with:",e),aN.get(zu.CONFIG_PARAMS.REPLICATION_URL)??aN.get(zu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Goe(e);iG.checkClusteringEnabled();let t=voe(e);if(t)throw nG(t,t.message,sG.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await iG.getNodeRecord(r);if(Uoe.isEmptyOrZeroLength(n))throw nG(new Error,`Node '${r}' was not found.`,sG.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new xoe(zu.OPERATIONS_ENUM.REMOVE_NODE,qoe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await oN.updateConsumerIterator(f.schema,f.table,r,"stop");try{await oN.updateRemoteConsumer(new Boe(f.schema,f.table,!1,!1),r)}catch(d){eh.error(d)}}try{i=await oN.request(`${r}.${oG.REQUEST_SUFFIX}`,s),eh.trace("Remove node reply from remote node:",r,i)}catch(l){eh.error("removeNode received error from request:",l),o=!0}let c=new Hoe(zu.SYSTEM_SCHEMA_NAME,zu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await koe.deleteRecord(c),Foe({type:"nats_update"}),i?.status===oG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(eh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a($oe,"removeNode")});var uG=C((ACe,lG)=>{"use strict";var cG=require("joi"),{string:Voe,array:Koe}=cG.types(),Yoe=rt(),Woe=hg();lG.exports=zoe;function zoe(e){let t=cG.object({operation:Voe.valid("configure_cluster").required(),connections:Koe.items(Woe.validation_schema).required()});return Yoe.validateBySchema(e,t)}a(zoe,"configureClusterValidator")});var cN=C((yCe,mG)=>{"use strict";var dG=(H(),P($)),Og=J(),Qoe=ae(),joe=ce(),Joe=bg(),Xoe=Rg(),Zoe=po(),eae=uG(),{handleHDBError:fG,hdb_errors:tae}=he(),{HTTP_STATUS_CODES:_G}=tae,rae="Configure cluster complete.",nae="Failed to configure the cluster. Check the logs for more details.",sae="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mG.exports=iae;async function iae(e){Og.trace("configure cluster called with:",e);let t=eae(e);if(t)throw fG(t,t.message,_G.BAD_REQUEST,void 0,void 0,!0);let r=await Zoe.getAllNodeRecords(),n=[];if(joe.get(dG.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await hG(Joe,{operation:dG.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}Og.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await hG(Xoe,d,d.node_name);s.push(h)}Og.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(Og.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(Qoe.isEmptyOrZeroLength(o))return{message:rae,connections:c};if(l)return{message:sae,failed_nodes:o,connections:c};throw fG(new Error,nae,_G.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(iae,"configureCluster");async function hG(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(hG,"functionWrapper")});var SG=C((OCe,gG)=>{"use strict";var th=require("joi"),oae=rt(),{validateSchemaExists:pG,validateTableExists:aae,validateSchemaName:EG}=Si(),cae=th.object({operation:th.string().valid("purge_stream"),schema:th.string().custom(pG).custom(EG).optional(),database:th.string().custom(pG).custom(EG).optional(),table:th.string().custom(aae).required()});function lae(e){return oae.validateBySchema(e,cae)}a(lae,"purgeStreamValidator");gG.exports=lae});var lN=C((wCe,TG)=>{"use strict";var{handleHDBError:uae,hdb_errors:dae}=he(),{HTTP_STATUS_CODES:fae}=dae,_ae=SG(),hae=Er(),mae=po();TG.exports=pae;async function pae(e){e.schema=e.schema??e.database;let t=_ae(e);if(t)throw uae(t,t.message,fae.BAD_REQUEST,void 0,void 0,!0);mae.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await hae.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(pae,"purgeStream")});var fN=C((CCe,wG)=>{"use strict";var dN=po(),Eae=Er(),wg=ce(),Qu=(H(),P($)),sl=It(),gae=ae(),uN=J(),{RemotePayloadObject:Sae}=W_(),{ErrorCode:AG}=require("nats"),{parentPort:RG}=require("worker_threads"),{onMessageByType:Tae}=nt(),{getThisNodeName:Aae}=(ds(),P(Ea)),{requestClusterStatus:Rae}=(x_(),P(YH)),{getReplicationSharedStatus:yae,getHDBNodeTable:bae}=(Wc(),P(eO)),{CONFIRMATION_STATUS_POSITION:Oae,RECEIVED_VERSION_POSITION:Nae,RECEIVED_TIME_POSITION:wae,SENDING_TIME_POSITION:Iae}=(yO(),P(vk)),yG=wg.get(Qu.CONFIG_PARAMS.CLUSTERING_ENABLED),bG=wg.get(Qu.CONFIG_PARAMS.CLUSTERING_NODENAME);wG.exports={clusterStatus:Cae,buildNodeStatus:NG};var OG;Tae("cluster-status",async e=>{OG(e)});async function Cae(){if(wg.get(Qu.CONFIG_PARAMS.REPLICATION_URL)||wg.get(Qu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(RG){RG.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{OG=i});for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let d of Object.values(databases[l]||{}))if(u=d.auditStore,u)break;if(!u)continue;let f=yae(u,l,o);c.lastCommitConfirmed=Ng(f[Oae]),c.lastReceivedRemoteTime=Ng(f[Nae]),c.lastReceivedLocalTime=Ng(f[wae]),c.sendingMessage=Ng(f[Iae])}}}else n=Rae();n.node_name=Aae();let s=bae().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:bG,is_enabled:yG,connections:[]};if(!yG)return e;let t=await dN.getAllNodeRecords();if(gae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NG(t[n],e.connections));return await Promise.allSettled(r),e}a(Cae,"clusterStatus");function Ng(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(Ng,"asDate");async function NG(e,t){let r=e.name,n=new Sae(Qu.OPERATIONS_ENUM.CLUSTER_STATUS,bG,void 0,await dN.getSystemInfo()),s,i,o=sl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Eae.request(sl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===sl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=sl.CLUSTER_STATUS_STATUSES.CLOSED,uN.error(`Error getting node status from ${r} `,s))}catch(l){uN.warn(`Error getting node status from ${r}`,l),l.code===AG.NoResponders?o=sl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===AG.Timeout?o=sl.CLUSTER_STATUS_STATUSES.TIMEOUT:o=sl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Pae(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Qu.PRE_4_0_0_VERSION&&await dN.upsertNodeRecord(l)}catch(l){uN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(NG,"buildNodeStatus");function Pae(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Pae,"NodeStatusObject")});var hN=C((DCe,IG)=>{"use strict";var{handleHDBError:Dae,hdb_errors:Lae}=he(),{HTTP_STATUS_CODES:Mae}=Lae,vae=Er(),Uae=po(),_N=ae(),Ig=require("joi"),xae=rt(),Bae=2e3,Hae=Ig.object({timeout:Ig.number().min(1),connected_nodes:Ig.boolean(),routes:Ig.boolean()});IG.exports=kae;async function kae(e){Uae.checkClusteringEnabled();let t=xae.validateBySchema(e,Hae);if(t)throw Dae(t,t.message,Mae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||_N.autoCastBoolean(n),o=s===void 0||_N.autoCastBoolean(s),c={nodes:[]},l=await vae.getServerList(r??Bae),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let m={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(m.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{m.connected_nodes.includes(S.name.slice(0,-4))||m.connected_nodes.push(S.name.slice(0,-4))})),o&&(m.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:_N.autoCast(S.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(kae,"clusterNetwork")});var LG=C((MCe,DG)=>{"use strict";var mN=require("joi"),CG=rt(),{route_constraints:PG}=_A();DG.exports={setRoutesValidator:Fae,deleteRoutesValidator:Gae};function Fae(e){let t=mN.object({server:mN.valid("hub","leaf"),routes:PG.required()});return CG.validateBySchema(e,t)}a(Fae,"setRoutesValidator");function Gae(e){let t=mN.object({routes:PG.required()});return CG.validateBySchema(e,t)}a(Gae,"deleteRoutesValidator")});var Cg=C((UCe,kG)=>{"use strict";var go=Ot(),pN=ae(),ps=(H(),P($)),ju=ce(),MG=LG(),{handleHDBError:vG,hdb_errors:qae}=he(),{HTTP_STATUS_CODES:UG}=qae,xG="cluster routes successfully set",BG="cluster routes successfully deleted";kG.exports={setRoutes:Vae,getRoutes:Kae,deleteRoutes:Yae};function $ae(e){let t=go.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=pN.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?go.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):go.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:xG,set:i,skipped:s}}a($ae,"setRoutesNats");function Vae(e){let t=MG.setRoutesValidator(e);if(t)throw vG(t,t.message,UG.BAD_REQUEST,void 0,void 0,!0);if(ju.get(ps.CONFIG_PARAMS.CLUSTERING_ENABLED))return $ae(e);let r=[],n=[],s=ju.get(ps.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{HG(s,i)?n.push(i):(s.push(i),r.push(i))}),go.updateConfigValue(ps.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:xG,set:r,skipped:n}}a(Vae,"setRoutes");function HG(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(HG,"existsInArray");function Kae(){if(ju.get(ps.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=go.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return ju.get(ps.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Kae,"getRoutes");function Yae(e){let t=MG.deleteRoutesValidator(e);if(t)throw vG(t,t.message,UG.BAD_REQUEST,void 0,void 0,!0);if(ju.get(ps.CONFIG_PARAMS.CLUSTERING_ENABLED))return Wae(e);let r=[],n=[],s=ju.get(ps.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{HG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),go.updateConfigValue(ps.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:BG,deleted:r,skipped:n}}a(Yae,"deleteRoutes");function Wae(e){let t=go.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let m=r[h];if(f.host===m.host&&f.port===m.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,m=n.length;_<m;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=pN.isEmptyOrZeroLength(r)?null:r,go.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=pN.isEmptyOrZeroLength(n)?null:n,go.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:BG,deleted:s,skipped:i}}a(Wae,"deleteRoutesNats")});var GG=C((BCe,FG)=>{"use strict";var rh=require("alasql"),il=require("recursive-iterator"),Js=J(),zae=ae(),nh=(H(),P($)),EN=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,jae(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>nh.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!nh.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][nh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Qae(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!nh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new rh.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Qae(e){return e.filter(t=>t[nh.PERMS_CRUD_ENUM.READ])}a(Qae,"filterReadRestrictedAttrs");function jae(e,t,r,n,s){Jae(e,t,r,n,s)}a(jae,"interpretAST");function sh(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(sh,"addSchemaTableToMap");function Jae(e,t,r,n,s){if(!e){Js.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof rh.yy.Insert?tce(e,t,r):e instanceof rh.yy.Select?Xae(e,t,r,n,s):e instanceof rh.yy.Update?Zae(e,t,r):e instanceof rh.yy.Delete?ece(e,t,r):Js.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Jae,"getRecordAttributesAST");function Xae(e,t,r,n,s){if(!e){Js.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(zae.isEmptyOrZeroLength(i)){Js.error("No schema specified");return}e.from.forEach(c=>{sh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),sh(c.table,t,r,n,s)});let o=new il(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Js.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new il(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{Js.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new il(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{Js.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new il(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{Js.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(Xae,"getSelectAttributes");function Zae(e,t,r){if(!e){Js.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new il(e.columns),s=e.table.databaseid;sh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&gN(e.table.tableid,s,i.columnid,t,r)}a(Zae,"getUpdateAttributes");function ece(e,t,r){if(!e){Js.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new il(e.where),s=e.table.databaseid;sh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&gN(e.table.tableid,s,i.columnid,t,r)}a(ece,"getDeleteAttributes");function tce(e,t,r){if(!e){Js.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new il(e.columns),s=e.into.databaseid;sh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&gN(e.into.tableid,s,i.columnid,t,r)}a(tce,"getInsertAttributes");function gN(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(gN,"pushAttribute");FG.exports=EN});var $G=C((kCe,qG)=>{"use strict";var Pg=(H(),P($)),Dg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Pg.RAM_ALLOCATION_ENUM.DEFAULT,n=Pg.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},SN=class extends Dg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Pg.RAM_ALLOCATION_ENUM.DEFAULT,n=Pg.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};qG.exports={BaseLicense:Dg,ExtendedLicense:SN}});var Zu=C((GCe,QG)=>{"use strict";var Xu=require("fs-extra"),Lg=(Hp(),P(Bp)),KG=require("crypto"),rce=require("moment"),nce=require("uuid").v4,Jr=J(),AN=require("path"),sce=ae(),ol=(H(),P($)),{totalmem:VG}=require("os"),ice=$G().ExtendedLicense,Ju="invalid license key format",oce="061183",ace="mofi25",cce="aes-256-cbc",lce=16,uce=32,YG=ce(),{resolvePath:WG}=Ot();YG.initSync();var TN;QG.exports={validateLicense:zG,generateFingerPrint:fce,licenseSearch:bN,getLicense:mce,checkMemoryLimit:pce};function RN(){return AN.join(YG.getHdbBasePath(),ol.LICENSE_KEY_DIR_NAME,ol.LICENSE_FILE_NAME)}a(RN,"getLicenseDirPath");function dce(){let e=RN();return WG(AN.join(e,ol.LICENSE_FILE_NAME))}a(dce,"getLicenseFilePath");function yN(){let e=RN();return WG(AN.join(e,ol.REG_KEY_FILE_NAME))}a(yN,"getFingerPrintFilePath");async function fce(){let e=yN();try{return await Xu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await _ce();throw Jr.error(`Error writing fingerprint file to ${e}`),Jr.error(t),new Error("There was an error generating the fingerprint")}}a(fce,"generateFingerPrint");async function _ce(){let e=nce(),t=Lg.hash(e,Lg.HASH_FUNCTION.MD5),r=yN();try{await Xu.mkdirp(RN()),await Xu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Jr.error(`Error writing fingerprint file to ${r}`),Jr.error(n),new Error("There was an error generating the fingerprint")}return t}a(_ce,"writeFingerprint");function zG(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ol.RAM_ALLOCATION_ENUM.DEFAULT,version:ol.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Jr.error("empty license key passed to validate."),r;let n=yN(),s=!1;try{s=Xu.statSync(n)}catch(i){Jr.error(i)}if(s){let i;try{i=Xu.readFileSync(n,"utf8")}catch{Jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(ace),c=o[1];c=Buffer.concat([Buffer.from(c)],lce);let l=Buffer.concat([Buffer.from(i)],uce),u=KG.createDecipheriv(cce,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=hce(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ju),Jr.error(Ju),new Error(Ju)}let d;if(isNaN(f))try{d=JSON.parse(f),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Ju),Jr.error(Ju),new Error(Ju)}else r.exp_date=f;r.exp_date<rce().valueOf()&&(r.valid_date=!1),Lg.validate(o[1],`${oce}${i}${t}`,Lg.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Jr.error("Invalid licence"),r}a(zG,"validateLicense");function hce(e,t){try{let r=KG.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Jr.warn("Check old license failed")}}a(hce,"checkOldLicense");function bN(){let e=new ice,t=[];try{t=Xu.readFileSync(dce(),"utf-8").split(`\r
|
|
24
24
|
`)}catch(r){r.code==="ENOENT"?Jr.debug("no license file found"):Jr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(sce.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=zG(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Jr.error("There was an error parsing the license string."),Jr.error(s),e.ram_allocation=ol.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return TN=e,e}a(bN,"licenseSearch");async function mce(){return TN||await bN(),TN}a(mce,"getLicense");function pce(){let e=bN().ram_allocation,t=process.constrainedMemory?.()||VG();if(t=Math.round(Math.min(t,VG())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(pce,"checkMemoryLimit")});var wN=C(($Ce,ZG)=>{var Mg=Zu(),jG=require("chalk"),Wn=J(),JG=require("prompt"),{promisify:Ece}=require("util"),ON=(H(),P($)),gce=require("fs-extra"),Sce=require("path"),Tce=ae(),{packageJson:Ace}=pt(),XG=ce();XG.initSync();var Rce=require("moment"),yce=Ece(JG.get),bce=Sce.join(XG.getHdbBasePath(),ON.LICENSE_KEY_DIR_NAME,ON.LICENSE_FILE_NAME,ON.LICENSE_FILE_NAME);ZG.exports={getFingerprint:Nce,setLicense:Oce,parseLicense:NN,register:wce,getRegistrationInfo:Cce};async function Oce(e){if(e&&e.key&&e.company){try{Wn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await NN(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Wn.error(r),Wn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Oce,"setLicense");async function Nce(){let e={};try{e=await Mg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Wn.error(r),Wn.error(t),new Error(r)}return e}a(Nce,"getFingerprint");async function NN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Wn.info("Validating license input...");let r=Mg.validateLicense(e,t);if(Wn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Wn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Wn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Wn.info("writing license to disk"),await gce.writeFile(bce,JSON.stringify({license_key:e,company:t}))}catch(n){throw Wn.error("Failed to write License"),n}return"Registration successful."}a(NN,"parseLicense");async function wce(){let e=await Ice();return NN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(wce,"register");async function Ice(){let e=await Mg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:jG.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:jG.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{JG.start()}catch(n){Wn.error(n)}let r;try{r=await yce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Ice,"promptForRegistration");async function Cce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Mg.getLicense()}catch(r){throw Wn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Tce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Ace.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Rce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Cce,"getRegistrationInfo")});var tq=C((KCe,eq)=>{"use strict";var Pce=It(),IN=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,m){this.port=t,o===null&&(o=void 0),this.server_name=r+Pce.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:m}},this.system_account="SYS"}};eq.exports=IN});var sq=C((WCe,nq)=>{"use strict";var rq=It(),CN=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+rq.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+rq.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};nq.exports=CN});var oq=C((QCe,iq)=>{"use strict";var PN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};iq.exports=PN});var cq=C((JCe,aq)=>{"use strict";var Dce=It(),DN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Dce.SERVER_SUFFIX.ADMIN,this.password=r}};aq.exports=DN});var Bg=C((ZCe,dq)=>{"use strict";var al=require("path"),cl=require("fs-extra"),Lce=tq(),Mce=sq(),vce=oq(),Uce=cq(),LN=Fn(),td=ae(),An=Ot(),Ug=(H(),P($)),ih=It(),{CONFIG_PARAMS:Wt}=Ug,rd=J(),oh=ce(),lq=no(),MN=Er(),xce=js(),ed="clustering",Bce=1e4,uq=50;dq.exports={generateNatsConfig:kce,removeNatsConfig:Fce,getHubConfigPath:Hce};function Hce(){let e=oh.get(Wt.ROOTPATH);return al.join(e,ed,ih.NATS_CONFIG_FILES.HUB_SERVER)}a(Hce,"getHubConfigPath");async function kce(e=!1,t=void 0){let r=oh.get(Wt.ROOTPATH);cl.ensureDirSync(al.join(r,"clustering","leaf")),oh.initSync();let n=An.getConfigFromFile(Wt.CLUSTERING_TLS_CERT_AUTH),s=An.getConfigFromFile(Wt.CLUSTERING_TLS_PRIVATEKEY),i=An.getConfigFromFile(Wt.CLUSTERING_TLS_CERTIFICATE);!await cl.exists(i)&&!await cl.exists(!n)&&await xce.createNatsCerts();let o=al.join(r,ed,ih.PID_FILES.HUB),c=al.join(r,ed,ih.PID_FILES.LEAF),l=An.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=al.join(r,ed,ih.NATS_CONFIG_FILES.HUB_SERVER),f=al.join(r,ed,ih.NATS_CONFIG_FILES.LEAF_SERVER),d=An.getConfigFromFile(Wt.CLUSTERING_TLS_INSECURE),h=An.getConfigFromFile(Wt.CLUSTERING_TLS_VERIFY),_=An.getConfigFromFile(Wt.CLUSTERING_NODENAME),m=An.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await MN.checkNATSServerInstalled()||xg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await LN.listUsers(),g=An.getConfigFromFile(Wt.CLUSTERING_USER),R=await LN.getClusterUser();(td.isEmpty(R)||R.active!==!0)&&xg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await vg(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await vg(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await vg(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),await vg(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],A=[];for(let[oe,z]of S.entries())z.role?.role===Ug.ROLE_TYPES_ENUM.CLUSTER_USER&&z.active&&(E.push(new Uce(z.username,lq.decrypt(z.hash))),A.push(new vce(z.username,lq.decrypt(z.hash))));let N=[],{hub_routes:v}=An.getClusteringRoutes();if(!td.isEmptyOrZeroLength(v))for(let oe of v)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${oe.host}:${oe.port}`);let F=new Lce(An.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,m,An.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NAME),An.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,E,A);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=td.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ug.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await cl.writeJson(u,F),rd.trace(`Hub server config written to ${u}`));let q=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${m}`,Y=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${m}`,ee=new Mce(An.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[q],[Y],E,A,i,s,n,d);n==null&&delete ee.tls.ca_file,(t===void 0||t===Ug.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await cl.writeJson(f,ee),rd.trace(`Leaf server config written to ${f}`))}a(kce,"generateNatsConfig");async function vg(e){let t=oh.get(e);return td.isEmpty(t)&&xg(`port undefined for '${e}'`),await td.isPortTaken(t)&&xg(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(vg,"isPortAvailable");function xg(e){let t=`Error generating clustering config: ${e}`;rd.error(t),console.error(t),process.exit(1)}a(xg,"generateNatsConfigError");async function Fce(e){let{port:t,config_file:r}=MN.getServerConfig(e),{username:n,decrypt_hash:s}=await LN.getClusterUser(),i=0,o=2e3;for(;i<uq;){try{let f=await MN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){rd.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=uq)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&rd.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await td.async_set_timeout(u)}let c="0".repeat(Bce),l=al.join(oh.get(Wt.ROOTPATH),ed,r);await cl.writeFile(l,c),await cl.remove(l),rd.notify(e,"started.")}a(Fce,"removeNatsConfig")});var xN={};Ue(xN,{compactOnStart:()=>Gce,copyDb:()=>Eq});async function Gce(){Na.notify("Running compact on start"),console.log("Running compact on start");let e=(0,vN.get)(x.ROOTPATH),t=new Map,r=Xe();(0,UN.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Hg.join)(e,"backup",n+".mdb"),o=(0,Hg.join)(e,nc,n+"-copy.mdb"),c=0;try{c=await fq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Na.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Eq(n,o),console.log("Backing up",n,"to",i),await(0,ll.move)(s,i,{overwrite:!0})}try{nd()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,ll.move)(i,s,{overwrite:!0}),await(0,ll.remove)((0,Hg.join)(e,nc,`${n}-copy.mdb-lock`));try{nd()}catch(n){Na.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Na.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,UN.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,ll.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw nd(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await fq(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
25
25
|
Total record count before compaction: ${i}, total after: ${c}.
|