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.
Files changed (49) hide show
  1. package/README.md +1 -1
  2. package/bin/harperdb.js +2 -2
  3. package/bin/lite.js +2 -2
  4. package/launchServiceScripts/launchNatsIngestService.js +2 -2
  5. package/launchServiceScripts/launchNatsReplyService.js +2 -2
  6. package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
  7. package/npm-shrinkwrap.json +75 -66
  8. package/package.json +2 -1
  9. package/server/jobs/jobProcess.js +2 -2
  10. package/server/threads/threadServer.js +2 -2
  11. package/studio/build-local/asset-manifest.json +34 -34
  12. package/studio/build-local/index.html +1 -1
  13. package/studio/build-local/static/js/{164.f552d832.chunk.js → 164.13a1ca36.chunk.js} +1 -1
  14. package/studio/build-local/static/js/{833.5847bc85.chunk.js → 833.0adf7923.chunk.js} +1 -1
  15. package/studio/build-local/static/js/86.5d79defb.chunk.js +2 -0
  16. package/studio/build-local/static/js/{browse-csvupload.97e20c4a.chunk.js → browse-csvupload.aceb2454.chunk.js} +1 -1
  17. package/studio/build-local/static/js/{browse-datatable.339fb83c.chunk.js → browse-datatable.170a2dc3.chunk.js} +1 -1
  18. package/studio/build-local/static/js/{browse-entitymanager.fd37a083.chunk.js → browse-entitymanager.bab20377.chunk.js} +1 -1
  19. package/studio/build-local/static/js/{browse-jsonviewer.f57cc39c.chunk.js → browse-jsonviewer.62991eaa.chunk.js} +1 -1
  20. package/studio/build-local/static/js/{custom-functions.f682aa33.chunk.js → custom-functions.fc08c212.chunk.js} +1 -1
  21. package/studio/build-local/static/js/{instance-cluster.e2dba73f.chunk.js → instance-cluster.b1cecd22.chunk.js} +1 -1
  22. package/studio/build-local/static/js/{instance-config.4e2c4644.chunk.js → instance-config.3b4c8bb2.chunk.js} +1 -1
  23. package/studio/build-local/static/js/{instance-logs.bcec2256.chunk.js → instance-logs.7ffbdb78.chunk.js} +1 -1
  24. package/studio/build-local/static/js/{instance-roles.1ad69c74.chunk.js → instance-roles.0496670c.chunk.js} +1 -1
  25. package/studio/build-local/static/js/{instance-status.4e190908.chunk.js → instance-status.e1d264ed.chunk.js} +1 -1
  26. package/studio/build-local/static/js/{instance-users-datatable.4a2c57e4.chunk.js → instance-users-datatable.74be158e.chunk.js} +1 -1
  27. package/studio/build-local/static/js/{instance-users-edit.ecf717d1.chunk.js → instance-users-edit.f6546639.chunk.js} +1 -1
  28. package/studio/build-local/static/js/{instance-users.967796d9.chunk.js → instance-users.9f8c9ce8.chunk.js} +1 -1
  29. package/studio/build-local/static/js/{instance.809ece1e.chunk.js → instance.7f8bc10e.chunk.js} +1 -1
  30. package/studio/build-local/static/js/{instances.2eb16b86.chunk.js → instances.b9528378.chunk.js} +1 -1
  31. package/studio/build-local/static/js/{main.2384076c.js → main.055e9e0e.js} +2 -2
  32. package/studio/build-local/static/js/{offline-app.86377447.chunk.js → offline-app.2b3d559a.chunk.js} +1 -1
  33. package/studio/build-local/static/js/{online-app.e65f9ef3.chunk.js → online-app.75d38a43.chunk.js} +1 -1
  34. package/studio/build-local/static/js/{organization-billing.1c318ac1.chunk.js → organization-billing.eb5f253c.chunk.js} +1 -1
  35. package/studio/build-local/static/js/{organization-users.36a2ed5a.chunk.js → organization-users.6e22a1a5.chunk.js} +1 -1
  36. package/studio/build-local/static/js/{organization.9a81d022.chunk.js → organization.42c0f784.chunk.js} +1 -1
  37. package/studio/build-local/static/js/{organizations.af48c8e8.chunk.js → organizations.44dd3bd2.chunk.js} +1 -1
  38. package/studio/build-local/static/js/{profile.190afea3.chunk.js → profile.97200a91.chunk.js} +1 -1
  39. package/studio/build-local/static/js/{resetPassword.50fa5b91.chunk.js → resetPassword.a3406893.chunk.js} +1 -1
  40. package/studio/build-local/static/js/{roles-jsonviewer.b5d5a908.chunk.js → roles-jsonviewer.b6e22a22.chunk.js} +1 -1
  41. package/studio/build-local/static/js/{signIn.8fbf4021.chunk.js → signIn.6aa68409.chunk.js} +1 -1
  42. package/studio/build-local/static/js/{signUp.459d42df.chunk.js → signUp.1df9eab1.chunk.js} +1 -1
  43. package/studio/build-local/static/js/{structure-reloader.ceaf6675.chunk.js → structure-reloader.b808fbf1.chunk.js} +1 -1
  44. package/studio/build-local/static/js/{topnav.79dbd3ab.chunk.js → topnav.64ebd91d.chunk.js} +1 -1
  45. package/studio/build-local/static/js/{updatePassword.b05821cb.chunk.js → updatePassword.a3c0ffcf.chunk.js} +1 -1
  46. package/utility/scripts/restartHdb.js +2 -2
  47. package/studio/build-local/static/js/708.1805e937.chunk.js +0 -2
  48. /package/studio/build-local/static/js/{708.1805e937.chunk.js.LICENSE.txt → 86.5d79defb.chunk.js.LICENSE.txt} +0 -0
  49. /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()}});wL={type:"application/json",serializeStream:Sf,serialize:yf,deserialize:j4,q:.5};Vr.set("*/*",wL);Vr.set("",wL);a(j4,"tryJSONParse");a(Of,"registerContentHandlers");J4=require("fastify-plugin"),X4=J4(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=mp(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(mp,"findBestSerializer");RL=WA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Nf,"serialize");a(na,"serializeMessage");a(KA,"asyncSerialization");a(YA,"hasAsyncSerialization");a(Z4,"streamToBuffer");e3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(t3,"isBufferEncoding");a(r3,"parseContentType");a(Zi,"getDeserializer");a(n3,"deserializerUnknownType");a(s3,"transformIterable");a(hp,"toCsvStream")});var XA={};Ue(XA,{start:()=>_3});function i3(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 CL(e){if(typeof e!="object"||e===null)throw new gi("Request body must be an object.");if(!("query"in e))throw new gi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new gi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new gi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new gi("Request body `operationName` field must be a string.")}function JA(e){return parseInt(e.value,10)}function DL(e){return parseFloat(e.value)}function LL(e,t,r){let n=r.get(e.name.value);return ML(n)?vL(n,t):{attribute:t,value:n}}function ML(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function vL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],ML(n)?vL(n,t):{attribute:t,value:n}))}function o3(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:JA(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:DL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return LL(e.value,t,r);case Le.Kind.OBJECT:return UL(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 UL(e,t,r){return e.fields.flatMap(n=>o3(n,t,r))}function a3(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:JA(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:DL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return LL(e.value,e.name.value,t);case Le.Kind.OBJECT:return UL(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 c3(e,t){return e.flatMap(r=>a3(r,t))}function pp(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 pp(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return pp(r.selectionSet,t)}})}function xL(e,t){return pp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:xL(r.selectionSet,t)}:r.name.value)}async function l3(e,t,r,n){let s=hi.getMatch(e.name.value,"graphql");if(s===void 0)throw new yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:xL(e.selectionSet,r),conditions:c3(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function BL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return JA(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]:BL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Value type, ${e.kind}, is not supported.`)}}function u3(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=BL(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 d3(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=u3(e.variableDefinitions,t),i=await Promise.all(pp(e.selectionSet,r).map(c=>l3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function PL({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(i3(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 d3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function f3(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 CL(r),PL(r,e)}case"POST":{let r=await Zi(e.headers.get("content-type"),!0)(e._nodeRequest);return CL(r),PL(r,e)}default:throw new gi("Method Not Allowed",405,{Allow:"GET, POST"})}}function _3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await f3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof gi)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 gi)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,gi,HL=be(()=>{Le=M(require("graphql"));ji();Xl();a(i3,"assertExecutableDefinitionNode");a(CL,"assertRequestParams");a(JA,"processIntValueNode");a(DL,"processFloatValueNode");a(LL,"processVariableNode");a(ML,"isObject");a(vL,"transformObjectIntoQueryCondition");a(o3,"processObjectFieldNode");a(UL,"processObjectValueNode");a(a3,"processArgumentNode");a(c3,"buildConditionsQuery");a(pp,"fillInFragments");a(xL,"buildSelectQuery");a(l3,"processFieldNode");a(BL,"processConstValueNode");a(u3,"resolveVariables");a(d3,"executeOperation");a(PL,"resolver");yr=class extends Error{static{a(this,"GraphQLQueryingError")}},gi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(f3,"graphqlQueryingHandler");a(_3,"start")});var Ti=C((mRe,GL)=>{"use strict";var FL=ae(),kL=(H(),P($)),tu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),sa={schema_format:{pattern:tu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},h3=Si.alternatives(Si.string().min(1).max(sa.schema_length.maximum).pattern(tu).messages({"string.pattern.base":"{:#label} "+sa.schema_format.message}),Si.number(),Si.array()).required(),m3=Si.alternatives(Si.string().min(1).max(sa.schema_length.maximum).pattern(tu).messages({"string.pattern.base":"{:#label} "+sa.schema_format.message}),Si.number()),p3=Si.alternatives(Si.string().min(1).max(sa.schema_length.maximum).pattern(tu).messages({"string.pattern.base":"{:#label} "+sa.schema_format.message}),Si.number()).required();function E3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>sa.schema_length.maximum?`'${e}' maximum of 250 characters`:tu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(E3,"checkValidTable");function g3(e,t){return FL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(g3,"validateSchemaExists");function S3(e,t){let r=t.state.ancestors[0].schema;return FL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(S3,"validateTableExists");function T3(e,t){return e.toLowerCase()===kL.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${kL.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(T3,"validateSchemaName");GL.exports={common_validators:sa,schema_regex:tu,hdb_schema_table:h3,validateSchemaExists:g3,validateTableExists:S3,validateSchemaName:T3,checkValidTable:E3,hdb_database:m3,hdb_table:p3}});var eR=C((ERe,$L)=>{var{hdb_table:A3,hdb_database:qL}=Ti(),R3=rt(),ZA=require("joi"),y3={undefined:"undefined",null:"null"},b3=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||y3[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"),O3=ZA.object({database:qL,schema:qL,table:A3,records:ZA.array().items(ZA.object().custom(b3)).required()});$L.exports=function(e){return R3.validateBySchema(e,O3)}});var KL=C((SRe,VL)=>{"use strict";var tR=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")}};VL.exports=tR});var WL=C((ARe,YL)=>{"use strict";var rR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};YL.exports=rR});var XL={};Ue(XL,{HAS_EXPIRATION:()=>Sp,HAS_RESIDENCY_ID:()=>lR,HAS_STRUCTURE_UPDATE:()=>Ap,LAST_TIMESTAMP_PLACEHOLDER:()=>Df,LOCAL_TIMESTAMP:()=>N3,METADATA:()=>wf,NEW_TIMESTAMP_PLACEHOLDER:()=>QL,NO_TIMESTAMP:()=>nR,PENDING_LOCAL_TIME:()=>uR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>cR,RecordEncoder:()=>aR,TIMESTAMP_ASSIGN_LAST:()=>I3,TIMESTAMP_ASSIGN_NEW:()=>jL,TIMESTAMP_ASSIGN_PREVIOUS:()=>JL,TIMESTAMP_PLACEHOLDER:()=>Ep,TIMESTAMP_RECORD_PREVIOUS:()=>sR,handleLocalTimeForGets:()=>Rp,recordUpdater:()=>dR,removeEntry:()=>Ac});function P3(){return Pf[0]=Pf[0]^64,w3.getFloat64(0)}function Rp(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?.[wf];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?.[wf]>=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[wf];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,Tc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Tc.length;u++){let f=Tc[u].deref();(!f||f.isDone||f.isCommitted)&&Tc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function dR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?ru=i?.localTime?sR|JL:nR:ru=l?i?.localTime?sR|16384:jL|16384:nR;let _=u?.expiresAt;if(_>=0&&(c|=Sp),Cf=c,iR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:ru>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(oR=E,Cf|=lR,g|=Rc),R!==E&&(g|=yc,R||(R=0)),c&Sp&&(g|=Mf),u?.originatingOperation&&(g|=Lf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&Un&&(r.getBinaryFast(i.localTime)||ra(i.value));let A;if(s!==void 0&&(A=fp(()=>e.put(n,s,m),n,e.rootStore),pc&&(g|=Un)),l){let N=u?.user?.username;if(h&&(fp(()=>e.encoder.encode(h),n,e.rootStore),pc&&(g|=Un)),e.encoder.hasStructureUpdate&&(g|=Ap,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,nu(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,If,g,E,R,_),{ifVersion:S}),A}}A=r.put(s===void 0?QL:Df,nu(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,If,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 Ac(e,t,r){if(t)return t.value&&t.metadataFlags&Un&&!e.auditStore.getBinaryFast(t.localTime)&&ra(t.value),e.remove(t.key,r)}var zL,gp,Ep,Df,cR,QL,N3,wf,Pf,w3,nR,jL,I3,JL,sR,Sp,lR,uR,Ap,C3,If,ru,Cf,iR,oR,aR,Tc,su=be(()=>{zL=require("msgpackr");eo();gp=M(j());cs();cs();Ep=new Uint8Array([1,1,1,1,4,64,0,0]),Df=new Uint8Array([1,1,1,1,1,0,0,0]),cR=new Uint8Array([1,1,1,1,3,64,0,0]),QL=new Uint8Array([1,1,1,1,0,64,0,0]),N3=Symbol("local-timestamp"),wf=Symbol("metadata"),Pf=new Uint8Array(8),w3=new DataView(Pf.buffer,0,8),nR=0,jL=0,I3=1,JL=3,sR=4,Sp=16,lR=32,uR=1,Ap=256,ru=0,Cf=-1,iR=-1,oR=0,aR=class extends zL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(ru||Cf>=0){let o=0,c=ru;c&&(o+=8,ru=0);let l=Cf,u=iR,f=oR;l>=0&&(o+=4,Cf=-1,u>=0&&(o+=8,iR=-1),f&&(o+=4,oR=0));let d=C3=r.call(this,s,i|2048|o);If=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(Ep[4]=c,Ep[5]=c>>8,d.set(Ep,h),h+=8),pc&&(l|=Un),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Tp<<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 If=r.call(this,s,i),If};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(Pf,0,c),c+=8;else for(let h=0;h<8;h++)Pf[h]=t[c++];l=P3(),i=t[c]}let u,f;i<32&&(i===Tp?(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&Sp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&lR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=Ec(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[wf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:Ec(()=>super.decode(t,r),this.rootStore)}catch(c){return gp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(P3,"getTimestamp");a(Rp,"handleLocalTimeForGets");Tc=[];setInterval(()=>{for(let e=0;e<Tc.length;e++){let t=Tc[e].deref();!t||t.isDone||t.isCommitted?Tc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(gp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):gp.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(dR,"recordUpdater");a(Ac,"removeEntry")});var vf=C((wRe,eM)=>{"use strict";var ZL=ce(),D3=(H(),P($)),{RecordEncoder:L3}=(su(),P(XL));ZL.initSync();var M3=ZL.get(D3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,fR=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=M3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:L3})}};eM.exports=fR});var Uf=C((CRe,tM)=>{"use strict";var xn=ce(),ls=(H(),P($));xn.initSync();var yp=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)}};tM.exports=yp;yp.MAX_DBS=1e4});var dt=C((DRe,dM)=>{"use strict";var hR=require("lmdb"),Hs=require("fs-extra"),Bn=require("path"),bp=un(),sM=j(),mn=Cn().LMDB_ERRORS_ENUM,Op=WL(),mR=vf(),iM=Uf(),ia=Ut(),rM=(H(),P($)),{table:v3,resetDatabases:U3}=(ve(),P(it)),nM=ce(),ks=ia.INTERNAL_DBIS_NAME,oM=ia.DBI_DEFINITION_NAME,x3="data.mdb",B3="lock.mdb",xf=".mdb",H3="-lock",_R=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[ia.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ia.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new hR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Np(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(Np,"pathEnvNameValidation");async function pR(e,t,r=!0){try{await Hs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(mn.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+xf);return await Hs.access(n,Hs.constants.R_OK|Hs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Hs.access(Bn.join(e,t,x3),Hs.constants.R_OK|Hs.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(pR,"validateEnvironmentPath");function wp(e,t){if(bp.validateEnv(e),t===void 0)throw new Error(mn.DBI_NAME_REQUIRED)}a(wp,"validateEnvDBIName");async function k3(e,t,r=!1,n=!1){Np(e,t);let s=Bn.basename(e);t=t.toString();let i=nM.get(rM.CONFIG_PARAMS.DATABASES);i||nM.setProperty(rM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await pR(e,t,n),aM(e,t,r)}catch(o){if(o.message===mn.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Hs.mkdirp(n?c:e);let l=new iM(n?c:c+xf,!1),u=hR.open(l);u.dbis=Object.create(null);let f=new mR(!1);u.openDB(ks,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ER(e,t,r);return u[ia.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(k3,"createEnvironment");async function F3(e,t,r,n=!0){Np(e,t),t=t.toString();let s=Bn.join(e,t);return v3({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(F3,"copyEnvironment");async function aM(e,t,r=!1){Np(e,t),t=t.toString();let n=ER(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 pR(e,t),i=Bn.join(e,t+xf),o=s!=i,c=new iM(s,o),l=hR.open(c);l.dbis=Object.create(null);let u=lM(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[ia.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(aM,"openEnvironment");async function G3(e,t,r=!1){Np(e,t),t=t.toString();let n=Bn.join(e,t+xf),s=await pR(e,t);if(global.lmdb_map!==void 0){let i=ER(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await cM(o),delete global.lmdb_map[i]}}await Hs.remove(s),await Hs.remove(s===n?s+H3:Bn.join(Bn.dirname(s),B3))}a(G3,"deleteEnvironment");async function cM(e){bp.validateEnv(e);let t=e[ia.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(cM,"closeEnvironment");function ER(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(ER,"getCachedEnvironmentName");function q3(e){bp.validateEnv(e);let t=Object.create(null),r=us(e,ks);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ks)try{t[n]=Object.assign(new Op,s)}catch{sM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(q3,"listDBIDefinitions");function lM(e){bp.validateEnv(e);let t=[],r=us(e,ks);for(let{key:n}of r.getRange({start:!1}))n!==ks&&t.push(n);return t}a(lM,"listDBIs");function $3(e,t){let n=us(e,ks).getEntry(t),s=new Op;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{sM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a($3,"getDBIDefinition");function uM(e,t,r,n=!r){if(wp(e,t),t=t.toString(),t===ks)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 mR(r,n===!0),o=e.openDB(t,i),c=new Op(r===!0,n);return o[oM]=c,us(e,ks).putSync(t,c),e.dbis[t]=o,o}throw s}}a(uM,"createDBI");function us(e,t){if(wp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ks?r=$3(e,t):r=new Op,r===void 0)throw new Error(mn.DBI_DOES_NOT_EXIST);let n;try{let s=new mR(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[oM]=r,e.dbis[t]=n,n}a(us,"openDBI");function V3(e,t){wp(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[ia.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(V3,"statDBI");async function K3(e,t){try{let r=Bn.join(e,t+xf);return(await Hs.stat(r)).size}catch{throw new Error(mn.INVALID_ENVIRONMENT)}}a(K3,"environmentDataSize");function Y3(e,t){if(wp(e,t),t=t.toString(),t===ks)throw new Error(mn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,ks).removeSync(t)}a(Y3,"dropDBI");function W3(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)uM(e,i,i!==t,i===t),n=!0;else throw o}}n&&U3()}a(W3,"initializeDBIs");dM.exports={openDBI:us,openEnvironment:aM,createEnvironment:k3,listDBIs:lM,listDBIDefinitions:q3,createDBI:uM,dropDBI:Y3,statDBI:V3,deleteEnvironment:G3,initializeDBIs:W3,TransactionCursor:_R,environmentDataSize:K3,copyEnvironment:F3,closeEnvironment:cM}});var _M=C((MRe,fM)=>{"use strict";var gR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};fM.exports=gR});var mM=C((URe,hM)=>{"use strict";var SR=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}};hM.exports=SR});var EM=C((BRe,pM)=>{"use strict";var TR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};pM.exports=TR});var Oc=C((qRe,TM)=>{"use strict";var z3=dt(),Q3=_M(),j3=mM(),J3=EM(),Ai=un(),Bf=Cn().LMDB_ERRORS_ENUM,X3=Ut(),to=(H(),P($)),Z3=ae(),eX=require("uuid"),kRe=require("lmdb"),{handleHDBError:tX,hdb_errors:rX}=he(),{OVERFLOW_MARKER:FRe,MAX_SEARCH_KEY_LENGTH:GRe}=X3,gM=ce();gM.initSync();var Ip=gM.get(to.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),AR=to.TIME_STAMP_NAMES_ENUM.CREATED_TIME,bc=to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function nX(e,t,r,n,s=Ai.getNextMonotonicTime()){OR(e,t,r,n),RR(e,t,r);let i=new Q3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];SM(u,!0,s);let f=sX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return yR(o,c,n,i,s)}a(nX,"insertRecords");function sX(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][to.FUNC_VAL],n[o]=c)}let l=Ai.getIndexedValues(c),u=e.dbis[o];if(l){Ip&&u.prefetch(l.map(f=>({key:f,value:s})),Cp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Ip&&e.dbis[t].prefetch([s],Cp),e.dbis[t].put(s,n,n[bc])})}a(sX,"insertRecord");function iX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(iX,"removeSkippedRecords");function SM(e,t,r){let n=r>0;(n||!Number.isInteger(e[bc]))&&(e[bc]=r||(r=Ai.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[AR]))&&(e[AR]=r||Ai.getNextMonotonicTime()):delete e[AR]}a(SM,"setTimestamps");function RR(e,t,r){r.indexOf(to.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(to.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),z3.initializeDBIs(e,t,r)}a(RR,"initializeTransaction");async function oX(e,t,r,n,s=Ai.getNextMonotonicTime()){OR(e,t,r,n),RR(e,t,r);let i=new j3,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=bR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return yR(c,l,n,i,s,o)}a(oX,"updateRecords");async function aX(e,t,r,n,s=Ai.getNextMonotonicTime()){try{OR(e,t,r,n)}catch(l){throw tX(l,l.message,rX.HTTP_STATUS_CODES.BAD_REQUEST)}RR(e,t,r);let i=new J3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;Z3.isEmpty(u[t])?(f=eX.v4(),u[t]=f):f=u[t];let d=bR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return yR(o,c,n,i,s)}a(aX,"upsertRecords");async function yR(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||Ai.getNextMonotonicTime(),iX(r,i),n}a(yR,"finalizeWrite");function bR(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(SM(r,!f,o),Number.isInteger(r[bc])&&u[bc]>r[bc])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][to.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ai.getIndexedValues(R);if(E){Ip&&g.prefetch(E.map(A=>({key:A,value:n})),Cp);for(let A=0,N=E.length;A<N;A++)g.remove(E[A],n)}if(E=Ai.getIndexedValues(S),E){Ip&&g.prefetch(E.map(A=>({key:A,value:n})),Cp);for(let A=0,N=E.length;A<N;A++)g.put(E[A],n)}}let _={...u,...r};c.put(n,_,_[bc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:bR(e,t,r,n,s,i,o))}a(bR,"updateUpsertRecord");function cX(e,t,r){if(Ai.validateEnv(e),t===void 0)throw new Error(Bf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Bf.WRITE_ATTRIBUTES_REQUIRED):new Error(Bf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(cX,"validateBasic");function OR(e,t,r,n){if(cX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Bf.RECORDS_REQUIRED):new Error(Bf.RECORDS_MUST_BE_ARRAY)}a(OR,"validateWrite");function Cp(){}a(Cp,"noop");TM.exports={insertRecords:nX,updateRecords:oX,upsertRecords:aX}});var ro=C((VRe,lX)=>{lX.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 RM=C((KRe,AM)=>{"use strict";var uX=require("uuid"),NR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||uX.v4(),this.schema_table=`${this.schema}.${this.table}`}};AM.exports=NR});var Pp=C((WRe,yM)=>{"use strict";var dX=RM(),wR=class extends dX{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}};yM.exports=wR});var OM=C((QRe,bM)=>{"use strict";bM.exports=_X;var fX="inserted";function _X(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===fX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(_X,"returnObject")});var Dp=C((XRe,wM)=>{"use strict";var hX=(H(),P($)),IR=dt(),mX=Oc(),{getSystemSchemaPath:pX,getSchemaPath:EX}=Et(),JRe=ro(),{validateBySchema:gX}=rt(),Hf=require("joi"),SX=Pp(),TX=OM(),{handleHDBError:AX,hdb_errors:RX,ClientError:yX}=he(),NM=ae(),{HTTP_STATUS_CODES:bX}=RX,OX="inserted";wM.exports=NX;async function NX(e){let t=gX(e,Hf.object({database:Hf.string(),schema:Hf.string(),table:Hf.string().required(),attribute:Hf.string().required()}));if(t)throw new yX(t.message);let r=!e.skip_table_check&&NM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw AX(new Error,r,bX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NM.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 SX(e.schema,e.table,e.attribute,e.id);try{let i=await IR.openEnvironment(EX(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}`);IR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await IR.openEnvironment(pX(),hX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await mX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return TX(OX,c,{records:[s]},l)}catch(i){throw i}}a(NX,"lmdbCreateAttribute")});var kf=C((tye,CM)=>{"use strict";var no=ae(),IM=j(),eye=eR(),{getDatabases:wX}=(ve(),P(it)),{ClientError:Nc}=he();CM.exports=IX;function IX(e){if(no.isEmpty(e))throw new Nc("invalid update parameters defined.");if(no.isEmptyOrZeroLength(e.schema))throw new Nc("invalid schema specified.");if(no.isEmptyOrZeroLength(e.table))throw new Nc("invalid table specified.");if(!Array.isArray(e.records))throw new Nc("records must be an array");let t=wX()[e.schema]?.[e.table];if(no.isEmpty(t))throw new Nc(`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&&no.isEmptyOrZeroLength(o[r]))throw IM.error("a valid hash attribute must be provided with update record:",o),new Nc("a valid hash attribute must be provided with update record, check log for more info");if(!no.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw IM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Nc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!no.isEmpty(o[r])&&o[r]!==""&&n.has(no.autoCast(o[r]))&&(o.skip=!0),n.add(no.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(IX,"insertUpdateValidate")});var DM=C((nye,PM)=>{"use strict";var CR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};PM.exports=CR});var vM=C((iye,MM)=>{"use strict";var PR=dt(),CX=j(),LM=Cn().LMDB_ERRORS_ENUM;MM.exports=PX;async function PX(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 PR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await PR.closeEnvironment(global.lmdb_map[n]),await PR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==LM.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){CX.error(t)}}a(PX,"cleanLMDBMap")});var WM=C((cye,YM)=>{"use strict";var DR=require("recursive-iterator"),DX=require("alasql"),LR=require("clone"),UM=ae(),{handleHDBError:xM,hdb_errors:LX}=he(),{HDB_ERROR_MSGS:BM,HTTP_STATUS_CODES:HM}=LX,{getDatabases:MX}=(ve(),P(it)),vX=["DISTINCT_ARRAY"],kM=Symbol("validateTables"),MR=Symbol("validateTable"),aye=Symbol("getAllColumns"),FM=Symbol("validateAllColumns"),Lp=Symbol("findColumn"),GM=Symbol("validateOrderBy"),Ff=Symbol("validateSegment"),vR=Symbol("validateColumn"),qM=Symbol("setColumnsForTable"),$M=Symbol("checkColumnsForAsterisk"),VM=Symbol("validateGroupBy"),KM=Symbol("hasColumns"),UR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[kM](),this[$M](),this[FM]()}[kM](){if(this[KM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[MR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[MR](t.table)})}}[KM](){let t=!1,r=new DR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[MR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=MX();if(!r[t.databaseid])throw xM(new Error,BM.SCHEMA_NOT_FOUND(t.databaseid),HM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw xM(new Error,BM.TABLE_NOT_FOUND(t.databaseid,t.tableid),HM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=LR(s);i.table=LR(t),this.attributes.push(i)})}[Lp](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)}[$M](){let t=new DR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[qM](r.tableid)}[qM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new DX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[FM](){this[Ff](this.statement.columns,!1),this[Ff](this.statement.joins,!1),this[Ff](this.statement.where,!1),this[VM](this.statement.group,!1),this[Ff](this.statement.order,!0)}[Ff](t,r){if(!t)return;let n=new DR(t),s=[];for(let{node:i,path:o}of n)!UM.isEmpty(i)&&!UM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[GM](i):s.push(this[vR](i)));return s}[VM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&vX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=LR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Lp](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[Lp](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`}[GM](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[vR](t)}[vR](t){let r=this[Lp](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]}};YM.exports=UR});var JM=C((uye,jM)=>{"use strict";var zM=require("lodash"),Gf=require("mathjs"),UX=require("jsonata"),QM=ae();jM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?zM.uniqWith(e,zM.isEqual):e,"distinct_array"),searchJSON:xX,mad:qf.bind(null,Gf.mad),mean:qf.bind(null,Gf.mean),mode:qf.bind(null,Gf.mode),prod:qf.bind(null,Gf.prod),median:qf.bind(null,Gf.median)};function qf(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(qf,"aggregateFunction");function xX(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(QM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),QM.isEmpty(this.__ala__.res[r])){let n=UX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(xX,"searchJSON")});var ZM=C((fye,XM)=>{"use strict";var er=require("moment"),xR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;XM.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(xR),"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(xR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(xR),"offset_utc")}});var nv=C((hye,rv)=>{"use strict";var BX=require("@turf/area"),HX=require("@turf/length"),kX=require("@turf/circle"),FX=require("@turf/difference"),GX=require("@turf/distance"),qX=require("@turf/boolean-contains"),$X=require("@turf/boolean-equal"),VX=require("@turf/boolean-disjoint"),KX=require("@turf/helpers"),ev=(H(),P($)),qe=ae(),so=j();rv.exports={geoArea:YX,geoLength:WX,geoCircle:zX,geoDifference:QX,geoDistance:tv,geoNear:jX,geoContains:JX,geoEqual:XX,geoCrosses:ZX,geoConvert:e6};function YX(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return BX.default(e)}catch(t){return so.trace(t,e),NaN}}a(YX,"geoArea");function WX(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return HX.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(WX,"geoLength");function zX(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return kX.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(zX,"geoCircle");function QX(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 FX(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(QX,"geoDifference");function tv(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 GX.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(tv,"geoDistance");function jX(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 tv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(jX,"geoNear");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 so.trace(r,e,t),!1}}a(JX,"geoContains");function XX(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 $X.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(XX,"geoEqual");function ZX(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!VX.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(ZX,"geoCrosses");function e6(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(ev.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(ev.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),KX[t](e,r)}a(e6,"geoConvert")});var Mp=C((pye,sv)=>{var wc=JM(),Hn=ZM(),Ri=nv();sv.exports=e=>{e.aggr.mad=e.aggr.MAD=wc.mad,e.aggr.mean=e.aggr.MEAN=wc.mean,e.aggr.mode=e.aggr.MODE=wc.mode,e.aggr.prod=e.aggr.PROD=wc.prod,e.aggr.median=e.aggr.MEDIAN=wc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wc.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=Ri.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ri.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ri.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ri.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ri.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ri.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ri.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ri.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ri.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ri.geoNear}});var cv=C((Eye,av)=>{"use strict";var $f=require("lodash"),pn=require("alasql");pn.options.cache=!1;var t6=Mp(),iv=require("clone"),vp=require("recursive-iterator"),Be=j(),ze=ae(),iu=kn(),r6=(H(),P($)),{hdb_errors:n6}=he(),{getDatabases:ov}=(ve(),P(it)),s6="IS NULL",Fs="There was a problem performing this search. Please check the logs and try again.";t6(pn);var BR=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(Fs)}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(Fs)}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(Fs)}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(Fs)}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(Fs)}}_getColumns(){let t=new vp(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(iv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$f.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=ov()[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 vp(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 vp(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(r6.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&&$f.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(iv(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(s6)>-1&&this.tables.forEach(s=>{let i={columnid:ov()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$f.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 iu.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(Fs)}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 iu.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(Fs)}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 iu.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(Fs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await iu.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(Fs)}}}_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=$f.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 vp(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=$f.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(Fs)}}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 iu.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(n6.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 iu.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(Fs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};av.exports=BR});var Kr=C((Sye,lv)=>{"use strict";var i6=WM();lv.exports={searchByConditions:a6,searchByHash:c6,searchByValue:l6,search:u6};var HR=kn(),{transformReq:kR}=ae(),o6=cv();async function a6(e){return kR(e),HR.searchByConditions(e)}a(a6,"searchByConditions");async function c6(e){kR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of HR.searchByHash(e))r&&t.push(r);return t}a(c6,"searchByHash");async function l6(e){kR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of HR.searchByValue(e))t.push(r);return t}a(l6,"searchByValue");function u6(e,t){try{let r=new i6(e);r.validate(),new o6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(u6,"search")});var io=C((Aye,_v)=>{"use strict";var Vf=require("crypto"),d6=ce(),{CONFIG_PARAMS:f6}=(H(),P($)),dv="aes-256-cbc",_6=32,h6=16,FR=64,fv=32,m6=FR+fv,uv=new Map;_v.exports={encrypt:p6,decrypt:E6,createNatsTableStreamName:g6};function p6(e){let t=Vf.randomBytes(_6),r=Vf.randomBytes(h6),n=Vf.createCipheriv(dv,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(p6,"encrypt");function E6(e){let t=e.substr(0,FR),r=e.substr(FR,fv),n=e.substr(m6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Vf.createDecipheriv(dv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(E6,"decrypt");function g6(e,t){let r=d6.get(f6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=uv.get(r);return n||(n=Vf.createHash("md5").update(r).digest("hex"),uv.set(r,n)),n}a(g6,"createNatsTableStreamName")});var oo=C((bye,Ev)=>{"use strict";var yye=Kr(),Kf=j(),{validateBySchema:hv}=rt(),Ic=require("joi"),S6=io(),Up=ae(),{handleHDBError:xp,hdb_errors:T6,ClientError:mv}=he(),{HDB_ERROR_MSGS:Bp,HTTP_STATUS_CODES:GR}=T6,pv=ce();pv.initSync();var{getDatabases:qR}=(ve(),P(it)),A6=require("fs-extra"),R6=(H(),P($));Ev.exports={describeAll:y6,describeTable:Hp,describeSchema:b6};async function y6(e={}){try{let t=Up.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=qR(),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 Hp({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 Hp({schema:d,table:_,exact_count:u},S)}m&&l.push(m)}catch(m){Kf.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 Kf.error("Got an error in describeAll"),Kf.error(t),xp(new Error,Bp.DESCRIBE_ALL_ERR)}}a(y6,"describeAll");async function Hp(e,t){Up.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=hv(e,Ic.object({database:Ic.string(),table:Ic.string().required(),exact_count:Ic.boolean().strict()}));if(i)throw new mv(i.message);let c=qR()[r];if(!c)throw xp(new Error,Bp.SCHEMA_NOT_FOUND(e.schema),GR.NOT_FOUND);let l=c[n];if(!l)throw xp(new Error,Bp.TABLE_NOT_FOUND(e.schema,e.table),GR.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 A6.stat(l.primaryStore.env.path)).size}catch(_){Kf.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")),pv.get(R6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=S6.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(_){Kf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Hp,"descTable");async function b6(e){Up.transformReq(e);let t=hv(e,Ic.object({database:Ic.string(),exact_count:Ic.boolean().strict()}));if(t)throw new mv(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=qR()[n];if(!i)throw xp(new Error,Bp.SCHEMA_NOT_FOUND(e.schema),GR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Up.isEmpty(l)||l.describe){let u=await Hp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(b6,"describeSchema")});var ds=C((Iye,Rv)=>{var O6=ro(),{callbackify:Sv,promisify:N6}=require("util"),{getDatabases:Tv}=(ve(),P(it));Rv.exports={setSchemaDataToGlobal:gv,getTableSchema:w6,getSystemSchema:I6,setSchemaDataToGlobalAsync:N6(gv)};var Av=oo(),Nye=Sv(Av.describeAll),wye=Sv(Av.describeTable);function gv(e){global.hdb_schema=Tv(),e&&e()}a(gv,"setSchemaDataToGlobal");function w6(e,t,r){let n=Tv()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(w6,"getTableSchema");function I6(){return O6}a(I6,"getSystemSchema")});var VR=C((Pye,Ov)=>{var C6=rt(),$R=require("joi"),{hdb_table:P6,hdb_database:yv}=Ti(),bv={schema:yv,database:yv,table:P6},D6={date:$R.date().iso().required()},L6={timestamp:$R.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ov.exports=function(e,t){let r=t==="timestamp"?{...bv,...L6}:{...bv,...D6},n=$R.object(r);return C6.validateBySchema(e,n)}});var Iv=C((Dye,wv)=>{var M6=rt(),KR=require("joi"),{hdb_table:v6,hdb_database:Nv}=Ti(),U6=KR.object({schema:Nv,database:Nv,table:v6,hash_values:KR.array().required(),ids:KR.array()});wv.exports=function(e){return M6.validateBySchema(e,U6)}});var QR=C((Lye,Cv)=>{"use strict";var YR=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}},WR=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}},zR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Cv.exports={InsertObject:YR,NoSQLSeachObject:WR,DeleteResponseObject:zR}});var Dc=C((vye,vv)=>{"use strict";var Dv=VR(),x6=Iv(),Cc=ae(),Pv=require("moment"),Lv=j(),{promisify:B6,callbackify:H6}=require("util"),Pc=(H(),P($)),k6=ds(),jR=B6(k6.getTableSchema),JR=kn(),{DeleteResponseObject:F6}=QR(),{handleHDBError:oa,hdb_errors:G6}=he(),{HDB_ERROR_MSGS:kp,HTTP_STATUS_CODES:aa}=G6,q6="records successfully deleted",$6=H6(Mv);vv.exports={delete:$6,deleteRecord:Mv,deleteFilesBefore:V6,deleteAuditLogsBefore:K6};async function V6(e){let t=Dv(e,"date");if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(Cc.transformReq(e),!Pv(e.date,Pv.ISO_8601).isValid())throw oa(new Error,kp.INVALID_DATE,aa.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,kp.INVALID_DATE,!0);let n=Cc.checkSchemaTableExist(e.schema,e.table);if(n)throw oa(new Error,n,aa.NOT_FOUND,Pc.LOG_LEVELS.ERROR,n,!0);let s=await JR.deleteRecordsBefore(e);if(await jR(e.schema,e.table),Lv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(V6,"deleteFilesBefore");async function K6(e){let t=Dv(e,"timestamp");if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(Cc.transformReq(e),isNaN(e.timestamp))throw oa(new Error,kp.INVALID_VALUE("Timestamp"),aa.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,kp.INVALID_VALUE("Timestamp"),!0);let r=Cc.checkSchemaTableExist(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);let n=await JR.deleteAuditLogsBefore(e);return await jR(e.schema,e.table),Lv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(K6,"deleteAuditLogsBefore");async function Mv(e){e.ids&&(e.hash_values=e.ids);let t=x6(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);Cc.transformReq(e);let r=Cc.checkSchemaTableExist(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);try{await jR(e.schema,e.table);let n=await JR.deleteRecords(e);return Cc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${q6}`),n}catch(n){if(n.message===Pc.SEARCH_NOT_FOUND_MESSAGE){let s=new F6;return s.message=Pc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Mv,"deleteRecord")});var Fp={};Ue(Fp,{HASH_FUNCTION:()=>zf,hash:()=>ey,validate:()=>ty});function XR(e=Wf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Yf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function ey(e,t=zf[xv?.toUpperCase()]??"sha256"){return ZR[t](e)}function ty(e,t,r=zf[xv?.toUpperCase()]??"sha256"){return e?Y6[r](e,t):!1}var Yf,ou,Uv,xv,Wf,Bv,zf,ZR,Y6,Gp=be(()=>{Yf=M(require("node:crypto")),ou=M(require("argon2")),Uv=M(ce());H();xv=(0,Uv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Wf=16,Bv=9,zf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(zf||{});a(XR,"generateSalt");ZR={md5:a((e,t=void 0)=>{t=t??XR(Bv);let r=Yf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??XR(Wf);let r=Yf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=XR(Wf),r=await ou.hash(e,{type:ou.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},Y6={md5:a((e,t)=>{let r=e.slice(0,Bv);return e===ZR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Wf);return e===ZR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await ou.verify(e.slice(Wf),t),"argon2id")};a(ey,"hash");a(ty,"validate")});var kv=C((Hye,Hv)=>{var ry=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 W6(e){return Yr.password.presence=!0,Yr.username.presence=!0,Yr.role.presence=!0,Yr.active.presence=!0,ry.validateObject(e,Yr)}a(W6,"addUserValidation");function z6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ry.validateObject(e,Yr)}a(z6,"alterUserValidation");function Q6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ry.validateObject(e,Yr)}a(Q6,"dropUserValidation");Hv.exports={addUserValidation:W6,alterUserValidation:z6,dropUserValidation:Q6}});var It=C((Gye,Gv)=>{"use strict";var{platform:Fye}=require("os"),j6="nats-server.zip",ny="nats-server",J6=process.platform==="win32"?`${ny}.exe`:ny,X6=/^[^\s.,*>]+$/,Fv="__request__",Z6=a(e=>`${e}.${Fv}`,"REQUEST_SUBJECT"),eZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},tZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},rZ={HUB:"hub.pid",LEAF:"leaf.pid"},nZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},sZ={SUCCESS:"success",ERROR:"error"},iZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},oZ={TXN:"txn",MSGID:"msgid"},au={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},aZ={[au.ERR]:1,[au.WRN]:2,[au.INF]:3,[au.DBG]:4,[au.TRC]:5},cZ={debug:"-D",trace:"-DVV"};Gv.exports={NATS_SERVER_ZIP:j6,NATS_SERVER_NAME:ny,NATS_BINARY_NAME:J6,PID_FILES:rZ,NATS_CONFIG_FILES:tZ,SERVER_SUFFIX:nZ,NATS_TERM_CONSTRAINTS_RX:X6,REQUEST_SUFFIX:Fv,UPDATE_REMOTE_RESPONSE_STATUSES:sZ,CLUSTER_STATUS_STATUSES:iZ,REQUEST_SUBJECT:Z6,SUBJECT_PREFIXES:oZ,MSG_HEADERS:eZ,LOG_LEVELS:au,LOG_LEVEL_FLAGS:cZ,LOG_LEVEL_HIERARCHY:aZ}});var Fn=C(($ye,br)=>{"use strict";var Vv="username is required",Kv="nothing to update, must supply active, role or password to update",Yv="password cannot be an empty string",Wv="If role is specified, it cannot be empty.",zv="active must be true or false";br.exports.addUser=EZ;br.exports.alterUser=gZ;br.exports.dropUser=TZ;br.exports.getSuperUser=OZ;br.exports.userInfo=AZ;br.exports.listUsers=$p;br.exports.listUsersExternal=RZ;br.exports.setUsersWithRolesCache=Lc;br.exports.findAndValidateUser=fy;br.exports.getClusterUser=NZ;br.exports.getUsersWithRolesCache=bZ;br.exports.USERNAME_REQUIRED=Vv;br.exports.ALTERUSER_NOTHING_TO_UPDATE=Kv;br.exports.EMPTY_PASSWORD=Yv;br.exports.EMPTY_ROLE=Wv;br.exports.ACTIVE_BOOLEAN=zv;var Qv=En(),lZ=Dc(),Qf=(Gp(),P(Fp)),jv=kv(),jf=Kr(),cy=co(),yi=ae(),Jv=require("validate.js"),ly=j(),{promisify:uZ}=require("util"),uy=io(),iy=(H(),P($)),qv=It(),dZ=Ot(),fZ=ce(),_Z=ro(),{hdb_errors:hZ,ClientError:Gs}=he(),{HTTP_STATUS_CODES:ao,AUTHENTICATION_ERROR_MSGS:sy,HDB_ERROR_MSGS:cu}=hZ,{UserEventMsg:dy}=qs(),oy=require("lodash"),{server:qp}=(Gr(),P($l)),mZ=j();qp.getUser=(e,t)=>fy(e,t,t!=null);qp.authenticateUser=(e,t)=>fy(e,t);var Xv={username:!0,active:!0,role:!0,password:!0},$v=new Map,pZ=uZ(lZ.delete),ay=fZ.get(iy.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Qf.HASH_FUNCTION.SHA256,bi;async function EZ(e){let t=Jv.cleanAttributes(e,Xv),r=jv.addUserValidation(t);if(r)throw new Gs(r.message);let n=await jf.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(cu.ROLE_NAME_NOT_FOUND(t.role),ao.NOT_FOUND);if(n.length>1)throw new Gs(cu.DUP_ROLES_FOUND(t.role),ao.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=uy.encrypt(t.password)),t.password=await Qf.hash(t.password,ay),t.hash_function=ay,t.role=n[0].id;let s=await Qv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ly.debug(s),await Lc(),s.skipped_hashes.length===1)throw new Gs(cu.USER_ALREADY_EXISTS(t.username),ao.CONFLICT);return cy.signalUserChange(new dy(process.pid)),`${t.username} successfully added`}a(EZ,"addUser");async function gZ(e){let t=Jv.cleanAttributes(e,Xv);if(yi.isEmptyOrZeroLength(t.username))throw new Error(Vv);if(yi.isEmptyOrZeroLength(t.password)&&yi.isEmptyOrZeroLength(t.role)&&yi.isEmptyOrZeroLength(t.active))throw new Error(Kv);if(!yi.isEmpty(t.password)&&yi.isEmptyOrZeroLength(t.password.trim()))throw new Error(Yv);if(!yi.isEmpty(t.active)&&!yi.isBoolean(t.active))throw new Error(zv);if(!yi.isEmpty(t.password)&&!yi.isEmptyOrZeroLength(t.password.trim())&&(SZ(t.username)&&(t.hash=uy.encrypt(t.password)),t.password=await Qf.hash(t.password,ay)),t.role==="")throw new Error(Wv);if(t.role){let n=await jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Gs(cu.ALTER_USER_ROLE_NOT_FOUND(t.role),ao.NOT_FOUND);if(n.length>1)throw new Gs(cu.DUP_ROLES_FOUND(t.role),ao.CONFLICT);t.role=n[0].id}let r=await Qv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Lc(),cy.signalUserChange(new dy(process.pid)),r}a(gZ,"alterUser");function SZ(e){let t=!1,r=bi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(SZ,"isClusterUser");async function TZ(e){let t=jv.dropUserValidation(e);if(t)throw new Gs(t.message);if(bi.get(e.username)===void 0)throw new Gs(cu.USER_NOT_EXIST(e.username),ao.NOT_FOUND);let r=await pZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return ly.debug(r),await Lc(),cy.signalUserChange(new dy(process.pid)),`${e.username} successfully deleted`}a(TZ,"dropUser");async function AZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=oy.cloneDeep(e.hdb_user);let r=await jf.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(AZ,"userInfo");async function RZ(){let e=await $p();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(RZ,"listUsersExternal");async function $p(){let e=await jf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=oy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await jf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=oy.cloneDeep(s),s.role=t[s.role],yZ(s.role),n.set(s.username,s);return n}a($p,"listUsers");function yZ(e){if(!e){ly.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(_Z)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(yZ,"appendSystemTablesToRole");async function Lc(e=void 0){e?bi=e:bi=await $p()}a(Lc,"setUsersWithRolesCache");async function bZ(){return bi||await Lc(),bi}a(bZ,"getUsersWithRolesCache");async function fy(e,t,r=!0){bi||await Lc();let n=bi.get(e);if(!n){if(!r)return{username:e};throw new Gs(sy.GENERIC_AUTH_FAIL,ao.UNAUTHORIZED)}if(n&&!n.active)throw new Gs(sy.USER_INACTIVE,ao.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($v.get(t)===n.password)return s;{let i=Qf.validate(n.password,t,n.hash_function||Qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)$v.set(t,n.password);else throw new Gs(sy.GENERIC_AUTH_FAIL,ao.UNAUTHORIZED)}}return s}a(fy,"findAndValidateUser");async function OZ(){bi||await Lc();for(let[,e]of bi)if(e.role.role==="super_user")return e}a(OZ,"getSuperUser");async function NZ(){let e=await $p(),t=dZ.getConfigFromFile(iy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==iy.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=uy.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+qv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+qv.SERVER_SUFFIX.ADMIN,r}a(NZ,"getClusterUser");var Zv=[];qp.invalidateUser=function(e){for(let t of Zv)try{t(e)}catch(r){mZ.error("Error invalidating user",r)}};qp.onInvalidatedUser=function(e){Zv.push(e)}});var Xf=C((Wye,nU)=>{"use strict";var Mc=j(),Gn=(H(),P($)),wZ=vM(),Kye=ds(),Yye=oo(),IZ=Fn(),{validateEvent:eU}=qs(),Jf=kn(),CZ=require("process"),{resetDatabases:PZ}=(ve(),P(it)),DZ={[Gn.ITC_EVENT_TYPES.SCHEMA]:LZ,[Gn.ITC_EVENT_TYPES.USER]:rU};async function LZ(e){let t=eU(e);if(t){Mc.error(t);return}Mc.trace("ITC schemaHandler received schema event:",e),await wZ(e.message),await MZ(e.message)}a(LZ,"schemaHandler");async function MZ(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=PZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Mc.error(t)}}a(MZ,"syncSchemaMetadata");var tU=[];async function rU(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){Mc.warn(r)}let t=eU(e);if(t){Mc.error(t);return}Mc.trace(`ITC userHandler ${Gn.HDB_ITC_CLIENT_PREFIX}${CZ.pid} received user event:`,e),await IZ.setUsersWithRolesCache();for(let r of tU)r()}catch(t){Mc.error(t)}}a(rU,"userHandler");rU.addListener=function(e){tU.push(e)};nU.exports=DZ});var qs=C((Zye,iU)=>{"use strict";var Qye=j(),_y=ae(),vZ=(H(),P($)),{ITC_ERRORS:Zf}=Cn(),{parentPort:jye,threadId:UZ,isMainThread:xZ,workerData:Jye}=require("worker_threads"),{onMessageFromWorkers:BZ,broadcast:Xye,broadcastWithAcknowledgement:HZ}=nt();iU.exports={sendItcEvent:kZ,validateEvent:sU,SchemaEventMsg:FZ,UserEventMsg:GZ};var Vp;BZ(async(e,t)=>{Vp=Vp||Xf(),sU(e),Vp[e.type]&&await Vp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kZ(e){return!xZ&&e.message&&(e.message.originator=UZ),HZ(e)}a(kZ,"sendItcEvent");function sU(e){if(typeof e!="object")return Zf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_y.isEmpty(e.type))return Zf.MISSING_TYPE;if(!e.hasOwnProperty("message")||_y.isEmpty(e.message))return Zf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_y.isEmpty(e.message.originator))return Zf.MISSING_ORIGIN;if(vZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Zf.INVALID_EVENT(e.type)}a(sU,"validateEvent");function FZ(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(FZ,"SchemaEventMsg");function GZ(e){this.originator=e}a(GZ,"UserEventMsg")});var co=C((rbe,lU)=>{"use strict";var oU=(H(),P($)),tbe=ae(),Kp=j(),aU=DM(),lu,{sendItcEvent:cU}=qs();function qZ(e){try{Kp.info("signalSchemaChange called with message:",e),lu=lu||Xf();let t=new aU(oU.ITC_EVENT_TYPES.SCHEMA,e);return lu.schema(t),cU(t)}catch(t){Kp.error(t)}}a(qZ,"signalSchemaChange");function $Z(e){try{Kp.trace("signalUserChange called with message:",e),lu=lu||Xf();let t=new aU(oU.ITC_EVENT_TYPES.USER,e);return lu.user(t),cU(t)}catch(t){Kp.error(t)}}a($Z,"signalUserChange");lU.exports={signalSchemaChange:qZ,signalUserChange:$Z}});var Yp=C((sbe,dU)=>{"use strict";var uU=ae(),VZ=(H(),P($)),KZ=j(),YZ=Dp(),WZ=Pp(),zZ=co(),{SchemaEventMsg:QZ}=qs(),jZ="already exists in";dU.exports=JZ;async function JZ(e,t,r){if(uU.isEmptyOrZeroLength(r))return r;let n=[];uU.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 XZ(e,t.schema,t.name,i)})),s}a(JZ,"lmdbCheckForNewAttributes");async function XZ(e,t,r,n){let s=new WZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ZZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(jZ))KZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(XZ,"createNewAttribute");async function ZZ(e){let t;return t=await YZ(e),zZ.signalSchemaChange(new QZ(process.pid,VZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ZZ,"createAttribute")});var uu=C((obe,fU)=>{"use strict";var hy=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}};fU.exports=hy});var hU=C((cbe,_U)=>{"use strict";var e8=uu(),t8=(H(),P($)).OPERATIONS_ENUM,my=class extends e8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(t8.INSERT,r,n,s,i),this.records=t}};_U.exports=my});var pU=C((ube,mU)=>{"use strict";var r8=uu(),n8=(H(),P($)).OPERATIONS_ENUM,py=class extends r8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(n8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};mU.exports=py});var gU=C((fbe,EU)=>{"use strict";var s8=uu(),i8=(H(),P($)).OPERATIONS_ENUM,Ey=class extends s8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(i8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};EU.exports=Ey});var TU=C((hbe,SU)=>{"use strict";var o8=uu(),a8=(H(),P($)).OPERATIONS_ENUM,gy=class extends o8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(a8.DELETE,n,s,t,i),this.original_records=r}};SU.exports=gy});var e_=C((Ebe,bU)=>{"use strict";var pbe=require("path"),AU=dt(),c8=hU(),l8=pU(),u8=gU(),d8=TU(),du=Ut(),RU=ae(),{CONFIG_PARAMS:f8}=(H(),P($)),yU=ce();yU.initSync();var Wp=(H(),P($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:_8}=Et();bU.exports=h8;async function h8(e,t){if(yU.get(f8.LOGGING_AUDITLOG)===!1)return;let r=_8(e.schema,e.table),n=await AU.openEnvironment(r,e.table,!0),s=m8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){AU.initializeDBIs(n,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,du.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),RU.isEmpty(s.user_name)||n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(h8,"writeTransaction");function m8(e,t){let r=RU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Wp.INSERT)return new c8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.UPDATE)return new l8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.UPSERT)return new u8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.DELETE)return new d8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(m8,"createTransactionObject")});var Sy=C((Tbe,OU)=>{"use strict";var p8=kf(),Sbe=df(),t_=(H(),P($)),E8=ff(),g8=Oc().insertRecords,S8=dt(),T8=j(),A8=Yp(),{getSchemaPath:R8}=Et(),y8=e_();OU.exports=b8;async function b8(e){try{let{schema_table:t,attributes:r}=p8(e);E8(e,r,t.hash_attribute),e.schema!==t_.SYSTEM_SCHEMA_NAME&&(r.includes(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await A8(e.hdb_auth_header,t,r),s=R8(e.schema,e.table),i=await S8.openEnvironment(s,e.table),o=await g8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await y8(e,o)}catch(c){T8.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(b8,"lmdbCreateRecords")});var IU=C((Rbe,wU)=>{"use strict";var NU=(H(),P($)),O8=Sy(),N8=df(),w8=require("fs-extra"),{getSchemaPath:I8}=Et();wU.exports=C8;async function C8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new N8(NU.SYSTEM_SCHEMA_NAME,NU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await O8(r),await w8.mkdirp(I8(e.schema))}a(C8,"lmdbCreateSchema")});var PU=C((bbe,CU)=>{"use strict";var Ty=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}};CU.exports=Ty});var vU=C((Cbe,MU)=>{"use strict";var DU=dt(),Ay=un(),Ry=Cn().LMDB_ERRORS_ENUM,P8=Ut(),LU=j(),Nbe=ae(),D8=require("lmdb"),L8=PU(),M8=(H(),P($)),{OVERFLOW_MARKER:wbe,MAX_SEARCH_KEY_LENGTH:Ibe}=P8,v8=M8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function U8(e,t,r,n){if(Ay.validateEnv(e),t===void 0)throw new Error(Ry.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ry.IDS_REQUIRED):new Error(Ry.IDS_MUST_BE_ITERABLE);try{let s=DU.listDBIs(e);DU.initializeDBIs(e,t,s);let i=new L8,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[v8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,D8.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=Ay.getIndexedValues(A);if(N)for(let v=0,F=N.length;v<F;v++)E.remove(N[v],o)}catch{LU.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){LU.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=Ay.getNextMonotonicTime(),i}catch(s){throw s}}a(U8,"deleteRecords");MU.exports={deleteRecords:U8}});var r_=C((Dbe,xU)=>{"use strict";var fu=ae(),x8=vU(),B8=dt(),{getSchemaPath:H8}=Et(),k8=e_(),F8=j();xU.exports=G8;async function G8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fu.isEmptyOrZeroLength(e.hash_values)&&!fu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fu.isEmpty(l)||e.hash_values.push(l)}}if(fu.isEmptyOrZeroLength(e.hash_values))return UU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fu.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=H8(e.schema,e.table),i=await B8.openEnvironment(s,e.table),o=await x8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await k8(e,o)}catch(c){F8.error(`unable to write transaction due to ${c.message}`)}return UU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(G8,"lmdbDeleteRecords");function UU(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(UU,"createDeleteResponse")});var by=C((vbe,BU)=>{"use strict";var q8=(H(),P($)),Mbe=un();function yy(e,t){let r=Object.create(null);if(t.length===1&&q8.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(yy,"parseRow");function $8(e,t,r,n){let s=yy(r,e);n.push(s)}a($8,"searchAll");function V8(e,t,r,n){let s=yy(r,e);n[t]=s}a(V8,"searchAllToMap");function K8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(K8,"iterateDBI");function vc(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(vc,"pushResults");function Y8(e,t,r,n,s,i){t.toString().endsWith(e)&&vc(t,r,n,s,i)}a(Y8,"endsWith");function W8(e,t,r,n,s,i){t.toString().includes(e)&&vc(t,r,n,s,i)}a(W8,"contains");function z8(e,t,r,n,s,i){t>e&&vc(t,r,n,s,i)}a(z8,"greaterThanCompare");function Q8(e,t,r,n,s,i){t>=e&&vc(t,r,n,s,i)}a(Q8,"greaterThanEqualCompare");function j8(e,t,r,n,s,i){t<e&&vc(t,r,n,s,i)}a(j8,"lessThanCompare");function J8(e,t,r,n,s,i){t<=e&&vc(t,r,n,s,i)}a(J8,"lessThanEqualCompare");BU.exports={parseRow:yy,searchAll:$8,searchAllToMap:V8,iterateDBI:K8,endsWith:Y8,contains:W8,greaterThanCompare:z8,greaterThanEqualCompare:Q8,lessThanCompare:j8,lessThanEqualCompare:J8,pushResults:vc}});var _u=C((kbe,VU)=>{"use strict";var ca=dt(),xbe=j(),qn=un(),zp=Ut(),Kt=Cn().LMDB_ERRORS_ENUM,Bbe=ae(),X8=(H(),P($)),Qp=by(),{parseRow:Z8}=Qp,Hbe=require("lmdb"),{OVERFLOW_MARKER:HU,MAX_SEARCH_KEY_LENGTH:e5}=zp;function kU(e,t,r,n=!1,s=void 0,i=void 0){return Uc(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(kU,"iterateFullIndex");function n_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Uc(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(n_,"iterateRangeBetween");function Uc(e,t,r,n){let s=e.database||e,i=ca.openDBI(s,r);i[zp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ca.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(Uc,"setupTransaction");function FU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(HU)){if(!s)if(r)s=ca.openDBI(e,r);else{let l=ca.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ca.openDBI(e,l[u]),!s[zp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(FU,"getOverflowCheck");function t5(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 Uc(e,t,t,(o,c,l)=>(jp(r),r=s_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Z8(u.value,r))))}a(t5,"searchAll");function r5(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);jp(r),r=s_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of kU(e,t,t,n,s,i))o.set(c,Qp.parseRow(l,r));return o}a(r5,"searchAllToMap");function n5(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=kU(e,void 0,t,r,n,s),c=o.transaction,l=FU(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(n5,"iterateDBI");function s5(e,t){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return ca.statDBI(e,t).entryCount}a(s5,"countAll");function i5(e,t,r,n,s=!1,i=void 0,o=void 0){return la(e,r,n),Uc(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(i5,"equals");function o5(e,t,r){return la(e,t,r),ca.openDBI(e,t).getValuesCount(r)}a(o5,"count");function a5(e,t,r,n,s=!1,i=void 0,o=void 0){return la(e,r,n),Uc(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(a5,"startsWith");function c5(e,t,r,n,s=!1,i=void 0,o=void 0){return GU(e,t,r,n,s,i,o,!0)}a(c5,"endsWith");function GU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return la(e,r,n),Uc(e,null,r,(l,u,f,d)=>{let h=FU(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(HU)?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[zp.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(GU,"contains");function l5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!0,!1)}a(l5,"greaterThan");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!1,!1)}a(u5,"greaterThanEqual");function d5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!0)}a(d5,"lessThan");function f5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!1)}a(f5,"lessThanEqual");function _5(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 n_(e,t,r,n,s,i,o,c)}a(_5,"between");function h5(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(jp(r),r=s_(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=Qp.parseRow(c,r)),o}a(h5,"searchByHash");function m5(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(m5,"checkHashExists");function p5(e,t,r,n,s=[]){return $U(e,t,r,n,s),qU(e,t,r,n,s).map(i=>i[1])}a(p5,"batchSearchByHash");function E5(e,t,r,n,s=[]){$U(e,t,r,n,s);let i=new Map;for(let[o,c]of qU(e,t,r,n,s))i.set(o,c);return i}a(E5,"batchSearchByHashToMap");function qU(e,t,r,n,s=[]){return Uc(e,t,t,(i,o,c)=>{r=s_(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,Qp.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(qU,"batchHashSearch");function $U(e,t,r,n,s){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(jp(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a($U,"initializeBatchSearchByHash");function jp(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(jp,"validateFetchAttributes");function la(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>e5)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(la,"validateComparisonFunctions");function s_(e,t){return t.length===1&&X8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ca.listDBIs(e)),t}a(s_,"setGetWholeRowAttributes");VU.exports={searchAll:t5,searchAllToMap:r5,count:o5,countAll:s5,equals:i5,startsWith:a5,endsWith:c5,contains:GU,searchByHash:h5,setGetWholeRowAttributes:s_,batchSearchByHash:p5,batchSearchByHashToMap:E5,checkHashExists:m5,iterateDBI:n5,greaterThan:l5,greaterThanEqual:u5,lessThan:d5,lessThanEqual:f5,between:_5}});var hu=C((Gbe,QU)=>{var KU=require("lodash"),YU=rt(),ke=require("joi"),g5=ae(),{hdb_schema_table:i_,checkValidTable:WU,hdb_table:zU,hdb_database:Jp}=Ti(),{handleHDBError:S5,hdb_errors:T5}=he(),{getDatabases:A5}=(ve(),P(it)),{HTTP_STATUS_CODES:R5}=T5,y5=ke.object({database:Jp,schema:Jp,table:zU,search_attribute:i_,search_value:ke.any().required(),get_attributes:ke.array().min(1).items(ke.alternatives(i_,ke.object())).optional(),desc:ke.bool(),limit:ke.number().integer().min(1),offset:ke.number().integer().min(0)}),b5=ke.object({database:Jp,schema:Jp,table:zU,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(i_,ke.object())).optional(),sort:ke.object({attribute:ke.alternatives(i_,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(i_,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()});QU.exports=function(e,t){let r=null;switch(t){case"value":r=YU.validateBySchema(e,y5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(WU("database",e.schema)),i(WU("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=YU.validateBySchema(e,b5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=g5.checkGlobalSchemaTable(e.schema,e.table);if(s)return S5(new Error,s,R5.NOT_FOUND);let o=A5()[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=KU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!KU.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 Oy=C(($be,jU)=>{"use strict";var O5=dt(),N5=hu(),{getSchemaPath:w5}=Et();jU.exports=I5;function I5(e){let t=N5(e,"hashes");if(t)throw t;let r=w5(e.schema,e.table);return O5.openEnvironment(r,e.table)}a(I5,"initialize")});var Ny=C((Kbe,JU)=>{"use strict";var C5=_u(),P5=Oy();JU.exports=D5;async function D5(e){let t=await P5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return C5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(D5,"lmdbGetDataByHash")});var mu=C((Wbe,XU)=>{"use strict";var wy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};XU.exports=wy});var e0=C((jbe,ZU)=>{"use strict";var Qbe=mu(),L5=_u(),M5=Oy();ZU.exports=v5;async function v5(e){let t=await M5(e),r=global.hdb_schema[e.schema][e.table];return L5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(v5,"lmdbSearchByHash")});var $s=C((Xbe,t0)=>{"use strict";var Iy=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}};t0.exports=Iy});var Xp=C((eOe,a0)=>{"use strict";var Wr=_u(),U5=dt(),x5=ae(),Fe=Ut(),xc=(H(),P($)),B5=ro(),r0=Cn().LMDB_ERRORS_ENUM,{getSchemaPath:H5}=Et(),lo=xc.SEARCH_WILDCARDS;async function k5(e,t,r){let n;e.schema===xc.SYSTEM_SCHEMA_NAME?n=B5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=o0(e,n.hash_attribute,r,t);return s0(e,s,n.hash_attribute,r)}a(k5,"prepSearch");async function s0(e,t,r,n){let s=H5(e.schema,e.table),i=await U5.openEnvironment(s,e.table),o=i0(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(F5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?n0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?n0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(s0,"executeSearch");function i0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case 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(i0,"searchByType");function n0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(n0,"createMapFromIterable");function F5(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(F5,"checkToFetchMore");function o0(e,t,r,n){if(x5.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),lo.indexOf(s)>-1)return r===!0?Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Fe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(lo[0])<0&&s.indexOf(lo[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(lo.indexOf(i)>=0&&lo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Fe.SEARCH_TYPES.CONTAINS;if(lo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Fe.SEARCH_TYPES.ENDS_WITH;if(lo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Fe.SEARCH_TYPES.STARTS_WITH;if(s.includes(lo[0])||s.includes(lo[1]))return Fe.SEARCH_TYPES.EQUALS;throw new Error(r0.UNKNOWN_SEARCH_TYPE)}else switch(n){case xc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Fe.SEARCH_TYPES.BETWEEN;case xc.VALUE_SEARCH_COMPARATORS.GREATER:return Fe.SEARCH_TYPES.GREATER_THAN;case xc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Fe.SEARCH_TYPES.GREATER_THAN_EQUAL;case xc.VALUE_SEARCH_COMPARATORS.LESS:return Fe.SEARCH_TYPES.LESS_THAN;case xc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Fe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(r0.UNKNOWN_SEARCH_TYPE)}}a(o0,"createSearchTypeFromSearchObject");a0.exports={executeSearch:s0,createSearchTypeFromSearchObject:o0,prepSearch:k5,searchByType:i0}});var l0=C((nOe,c0)=>{"use strict";var rOe=$s(),G5=hu(),q5=ae(),$5=(H(),P($)),V5=Xp();c0.exports=K5;function K5(e,t){if(!q5.isEmpty(t)&&$5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=G5(e,"value");if(n)throw n;return V5.prepSearch(e,t,!0)}a(K5,"lmdbGetDataByValue")});var o_=C((oOe,u0)=>{"use strict";var iOe=$s(),Y5=hu(),W5=ae(),z5=(H(),P($)),Q5=Xp();u0.exports=j5;async function j5(e,t){if(!W5.isEmpty(t)&&z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Y5(e,"value");if(n)throw n;return Q5.prepSearch(e,t,!1)}a(j5,"lmdbSearchByValue")});var f0=C((lOe,d0)=>{"use strict";var cOe=Ut(),Cy=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}},Py=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Dy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};d0.exports={SearchByConditionsObject:Cy,SearchCondition:Py,SortAttribute:Dy}});var E0=C((_Oe,p0)=>{"use strict";var dOe=f0().SearchByConditionsObject,J5=$s(),X5=hu(),Ly=_u(),Zp=Ut(),{Resource:fOe}=(Zo(),P(DA)),m0=Xp(),Z5=by(),e9=require("lodash"),{getSchemaPath:t9}=Et(),_0=dt(),{handleHDBError:r9,hdb_errors:n9}=he(),{HTTP_STATUS_CODES:s9}=n9,i9=1e8;p0.exports=o9;async function o9(e){let t=X5(e,"conditions");if(t)throw r9(t,t.message,s9.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=t9(e.schema,e.table),n=await _0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)_0.openDBI(n,u.search_attribute);let i=e9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Zp.SEARCH_TYPES.EQUALS?u.estimated_count=Ly.count(n,u.search_attribute,u.search_value):f===Zp.SEARCH_TYPES.CONTAINS||f===Zp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=i9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await h0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(m0.filterByType),d=f.length,h=Ly.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(_=>Z5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await h0(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=Ly.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(o9,"lmdbSearchByConditions");async function h0(e,t,r,n){let s=new J5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Zp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,m0.searchByType(e,s,i,n).map(o=>o.value)}a(h0,"executeConditionSearch")});var a_=C((mOe,g0)=>{"use strict";var a9=(H(),P($)).OPERATIONS_ENUM,My=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=a9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};g0.exports=My});var vy=C((EOe,N0)=>{"use strict";var R0=$s(),y0=a_(),b0=o_(),O0=r_(),gn=(H(),P($)),S0=ae(),T0=dt(),{getTransactionAuditStorePath:c9,getSchemaPath:l9}=Et(),A0=j();N0.exports=u9;async function u9(e){try{if(S0.isEmpty(global.hdb_schema[e.schema])||S0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await d9(e),await f9(e);let t=l9(e.schema,e.table);try{await T0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")A0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=c9(e.schema,e.table);await T0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")A0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(u9,"lmdbDropTable");async function d9(e){let t=new R0(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 b0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new y0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await O0(s)}a(d9,"deleteAttributesFromSystem");async function f9(e){let t=new R0(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 b0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new y0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await O0(s)}catch(i){throw i}}a(f9,"dropTableFromSystem")});var I0=C((SOe,w0)=>{"use strict";var _9=require("fs-extra"),h9=$s(),m9=mu(),p9=a_(),E9=vy(),g9=r_(),S9=Ny(),T9=o_(),uo=(H(),P($)),{getSchemaPath:A9}=Et(),{handleHDBError:R9,hdb_errors:y9}=he(),{HDB_ERROR_MSGS:b9,HTTP_STATUS_CODES:O9}=y9;w0.exports=N9;async function N9(e){let t;try{t=await w9(e.schema);let r=new h9(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await T9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await E9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new p9(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await g9(s);let i=A9(t);await _9.remove(i)}catch(r){throw r}}a(N9,"lmdbDropSchema");async function w9(e){let t=new m9(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await S9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw R9(new Error,b9.SCHEMA_NOT_FOUND(e),O9.NOT_FOUND,void 0,void 0,!0);return n}a(w9,"validateDropSchema")});var c_=C((AOe,C0)=>{"use strict";var Uy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};C0.exports=Uy});var By=C((bOe,P0)=>{"use strict";var I9=require("fs-extra"),eE=dt(),{getTransactionAuditStorePath:C9}=Et(),xy=Ut(),yOe=c_();P0.exports=P9;async function P9(e){let t;try{let r=C9(e.schema,e.table);await I9.mkdirp(r),t=await eE.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{eE.createDBI(t,xy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),eE.createDBI(t,xy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),eE.createDBI(t,xy.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(P9,"createTransactionsAuditEnvironment")});var M0=C((wOe,L0)=>{"use strict";var Hy=(H(),P($)),D0=dt(),D9=Oc(),{getSystemSchemaPath:L9,getSchemaPath:M9}=Et(),NOe=ro(),v9=Dp(),ky=Pp(),U9=j(),x9=By();L0.exports=B9;async function B9(e,t){let r=M9(t.schema,t.table),n=new ky(t.schema,t.table,Hy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new ky(t.schema,t.table,Hy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ky(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await D0.createEnvironment(r,t.table),e!==void 0){let o=await D0.openEnvironment(L9(),Hy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await D9.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 Fy(n),await Fy(s),await Fy(i)}await x9(t)}catch(o){throw o}}a(B9,"lmdbCreateTable");async function Fy(e){try{await v9(e)}catch(t){U9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Fy,"createAttribute")});var U0=C((COe,v0)=>{"use strict";var H9=kf(),k9=ff(),F9=Yp(),l_=(H(),P($)),G9=Oc().updateRecords,q9=dt(),{getSchemaPath:$9}=Et(),V9=e_(),K9=j();v0.exports=Y9;async function Y9(e){try{let{schema_table:t,attributes:r}=H9(e);k9(e,r,t.hash_attribute),e.schema!==l_.SYSTEM_SCHEMA_NAME&&(r.includes(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await F9(e.hdb_auth_header,t,r),s=$9(e.schema,e.table),i=await q9.openEnvironment(s,e.table),o=await G9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await V9(e,o)}catch(c){K9.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(Y9,"lmdbUpdateRecords")});var B0=C((DOe,x0)=>{"use strict";var W9=(H(),P($)).OPERATIONS_ENUM,Gy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=W9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};x0.exports=Gy});var k0=C((vOe,H0)=>{"use strict";var MOe=B0(),z9=kf(),Q9=ff(),j9=Yp(),u_=(H(),P($)),J9=Oc().upsertRecords,X9=dt(),{getSchemaPath:Z9}=Et(),e7=e_(),t7=j(),{handleHDBError:r7,hdb_errors:n7}=he();H0.exports=s7;async function s7(e){let t;try{t=z9(e)}catch(l){throw r7(l,l.message,n7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;Q9(e,n,r.hash_attribute),e.schema!==u_.SYSTEM_SCHEMA_NAME&&(n.includes(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await j9(e.hdb_auth_header,r,n),i=Z9(e.schema,e.table),o=await X9.openEnvironment(i,e.table),c=await J9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await e7(e,c)}catch(l){t7.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(s7,"lmdbUpsertRecords")});var G0=C((xOe,F0)=>{"use strict";var qy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};F0.exports=qy});var $0=C((HOe,q0)=>{"use strict";var $y=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}};q0.exports=$y});var Y0=C((GOe,K0)=>{"use strict";var Vy=dt(),{getTransactionAuditStorePath:i7}=Et(),FOe=G0(),d_=Ut(),o7=ae(),V0=$0(),a7=require("util").promisify,c7=a7(setTimeout),l7=1e4,u7=100;K0.exports=d7;async function d7(e){let t=i7(e.schema,e.table),r=await Vy.openEnvironment(t,e.table,!0),n=Vy.listDBIs(r);Vy.initializeDBIs(r,d_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new V0;do s=await f7(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await c7(u7);while(s.transactions_deleted>0);return i}a(d7,"deleteAuditLogsBefore");async function f7(e,t){let r=new V0;try{let n=e.dbis[d_.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[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];o7.isEmpty(c)||(s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>l7)break}return await s,r}catch(n){throw n}}a(f7,"deleteTransactions")});var z0=C(($Oe,W0)=>{"use strict";var Ky=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};W0.exports=Ky});var j0=C((YOe,Q0)=>{"use strict";var _7=$s(),h7=a_(),KOe=z0(),Oi=(H(),P($)),m7=ae(),Yy=dt(),p7=ro(),E7=o_(),g7=r_(),{getSchemaPath:S7}=Et();Q0.exports=T7;async function T7(e,t=!0){let r;e.schema===Oi.SYSTEM_SCHEMA_NAME?r=p7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await R7(e),s=S7(e.schema,e.table),i=await Yy.openEnvironment(s,e.table);return t===!0&&await A7(e,i,r.hash_attribute),Yy.dropDBI(i,e.attribute),n}a(T7,"lmdbDropAttribute");async function A7(e,t,r){let n=Yy.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(A7,"removeAttributeFromAllObjects");async function R7(e){let t=new _7(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await E7(t)).filter(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(m7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new h7(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return g7(i)}a(R7,"dropAttributeFromSystem")});var rx=C((QOe,tx)=>{"use strict";var Wy=dt(),pu=Ut(),zOe=un(),zy=(H(),P($)),J0=ae(),{getTransactionAuditStorePath:y7}=Et(),b7=_u(),tE=uu(),O7=j();tx.exports=N7;async function N7(e){let t=y7(e.schema,e.table),r=await Wy.openEnvironment(t,e.table,!0),n=Wy.listDBIs(r);Wy.initializeDBIs(r,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return X0(r,e.search_values);case zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,I7(r,e.search_values,s);case zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return w7(r,e.search_values);default:return X0(r)}}a(N7,"readAuditLog");function X0(e,t=[0,Date.now()]){J0.isEmpty(t[0])&&(t[0]=0),J0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[pu.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 tE,s))}a(X0,"searchTransactionsByTimestamp");function w7(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[pu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,ex(e,i))}return Object.fromEntries(r)}a(w7,"searchTransactionsByUsername");function I7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=b7.equals(e,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pu.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=ex(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);Z0(l,"records",r,f,o),Z0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(I7,"searchTransactionsByHashValues");function Z0(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 tE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new tE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Z0,"loopRecords");function ex(e,t){let r=[];try{let n=e.dbis[pu.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 tE,i);r.push(o)}}catch(i){O7.warn(i)}return r}catch(n){throw n}}a(ex,"batchSearchTransactions")});var sx=C((ZOe,nx)=>{"use strict";var{getSchemaPath:JOe}=Et(),XOe=dt(),{database:C7}=(ve(),P(it));nx.exports={writeTransaction:P7};async function P7(e,t,r){return C7({database:e,table:t}).transaction(r)}a(P7,"writeTransaction")});var cx=C((tNe,ax)=>{"use strict";var{getSchemaPath:ix}=Et(),ox=dt();ax.exports={flush:D7,resetReadTxn:L7};async function D7(e,t){return(await ox.openEnvironment(ix(e,t),t.toString())).flushed}a(D7,"flush");async function L7(e,t){try{(await ox.openEnvironment(ix(e,t),t.toString())).resetReadTxn()}catch{}}a(L7,"resetReadTxn")});var fx=C((nNe,dx)=>{"use strict";var{Readable:M7}=require("stream"),{getDatabases:v7}=(ve(),P(it)),{readSync:U7,openSync:x7,createReadStream:lx}=require("fs"),{open:B7}=require("lmdb"),ux=vf(),H7=Uf(),{AUDIT_STORE_OPTIONS:k7}=(eo(),P(_x)),{INTERNAL_DBIS_NAME:F7,AUDIT_STORE_NAME:G7}=Ut();dx.exports=$7;var Qy=32768,q7=100;async function $7(e){let t=e.database||e.schema||"data",r=v7()[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=B7({noSync:!0,maxDbs:H7.MAX_DBS}),h,_=d.openDB(F7,new ux(!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++%q7===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 ux(!v,v);await g(E,F)}e.include_audit&&await g(G7,{...k7}),await h;let R=lx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=x7(o.path);return o.transaction(()=>{let u=Buffer.alloc(Qy);U7(c,u,0,Qy),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=lx(null,{fd:c,start:Qy}),h=new M7.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($7,"getBackup")});var px=C((iNe,mx)=>{"use strict";var V7=j(),{handleHDBError:K7}=he(),Y7=KL(),W7=Dp(),z7=Sy(),Q7=IU(),j7=r_(),J7=Ny(),X7=e0(),Z7=l0(),eee=o_(),tee=E0(),ree=I0(),nee=M0(),see=U0(),iee=k0(),oee=Y0(),aee=vy(),cee=j0(),lee=rx(),uee=sx(),hx=cx(),dee=fx(),jy=class extends Y7{static{a(this,"LMDBBridge")}async searchByConditions(t){return tee(t)}async getDataByHash(t){return await J7(t)}async searchByHash(t){return await X7(t)}async getDataByValue(t,r){return await Z7(t,r)}async searchByValue(t){return await eee(t)}async createSchema(t){return await Q7(t)}async dropSchema(t){return await ree(t)}async createTable(t,r){return await nee(t,r)}async dropTable(t){return await aee(t)}async createAttribute(t){return await W7(t)}async createRecords(t){return await z7(t)}async updateRecords(t){return await see(t)}async upsertRecords(t){try{return await iee(t)}catch(r){throw K7(r,null,null,V7.ERR,r)}}async deleteRecords(t){return await j7(t)}async dropAttribute(t){return await cee(t)}async deleteAuditLogsBefore(t){return await oee(t)}async readAuditLog(t){return await lee(t)}writeTransaction(t,r,n){return uee.writeTransaction(t,r,n)}flush(t,r){return hx.flush(t,r)}resetReadTxn(t,r){return hx.resetReadTxn(t,r)}getBackup(t){return dee(t)}};mx.exports=jy});var Xy={};Ue(Xy,{add:()=>rE,applyReverse:()=>Ex,getRecordAtTime:()=>Jy,rebuildUpdateBefore:()=>nE});function rE(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 nE(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,rE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ex(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=fee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=gx}}function Jy(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":Ex(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===gx&&(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 fee,gx,sE=be(()=>{eo();a(rE,"add");rE.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)};fee={add:rE};a(nE,"rebuildUpdateBefore");a(Ex,"applyReverse");gx={};a(Jy,"getRecordAtTime")});function Sn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function cE(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 pi||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 _=Zy(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,Tx);break}o=c}while(o&&o!==Tx)}function Zy(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends f_{static{a(this,"TrackedObject")}},cE(r,t)),new r(e)):new f_(e);case Array:let n=new oE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Zy(o,t?.elements)),n[s]=o}return n;default:return e}}function lE(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=lE(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 Hc(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=Hc(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=Xy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Hc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)_ee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function iE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Bc]||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(iE(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(iE(s))return!0}else return!0}else return!0}}return!1}var $n,Sx,Tx,f_,_ee,Bc,oE,aE,eb=be(()=>{$n=M(he());sE();cs();a(Sn,"getChanges");a(cE,"assignTrackedAccessors");Sx=Object.prototype,Tx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Sx[t])return Sx[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=Zy(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Zy,"trackObject");f_=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}};cE(f_,{});a(lE,"collapseData");_ee=Object.prototype.hasOwnProperty;a(Hc,"updateAndFreeze");a(iE,"hasChanges");Bc=Symbol.for("has-array-changes"),oE=class extends Array{static{a(this,"TrackedArray")}#e;[Bc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Bc]=!0,super.splice(...t)}push(...t){return this[Bc]=!0,super.push(...t)}pop(){return this[Bc]=!0,super.pop()}unshift(...t){return this[Bc]=!0,super.unshift(...t)}shift(){return this[Bc]=!0,super.shift()}};oE.prototype.constructor=Array;aE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Ix={};Ue(Ix,{ResourceBridge:()=>nb});function sb({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 Rx(e,t){let r=Ni(e),n=sb(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&&lE(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 Ni(e){let t=e.database||e.schema||mee,r=Xe()[t];if(!r)throw(0,Vs.handleHDBError)(new Error,hee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function yx(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*bx(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 Ox,uE,Vs,Nx,tb,rb,wx,hee,mee,pee,Eee,Ax,nb,Cx=be(()=>{"use strict";Ox=M(px()),uE=M(hu()),Vs=M(he());ve();Nx=M(kf());H();tb=M(co()),rb=M(qs()),wx=M(ae());dc();eb();({HDB_ERROR_MSGS:hee}=Vs.hdb_errors),mee="data",pee=1e4,Eee=10,nb=class extends Ox.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ax=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,uE.default)(t,"conditions");if(r)throw(0,Vs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ni(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:sb(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 Ni(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ni(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){Ni(t).dropTable()}createSchema(t){return Eu({database:t.schema,table:null}),tb.signalSchemaChange(new rb.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await ib(t.schema),tb.signalSchemaChange(new rb.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,Ax.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Nx.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=lE(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 yx(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:wm.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,wx.async_set_timeout)(Eee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%pee===0&&await u();return l.length>0&&await u(),s?yx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return Rx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Rx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&rA[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,uE.default)(t,"value");if(n)throw n;let s=Ni(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===wm.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:sb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ni(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){Ni({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ni(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ni(t),n={};switch(t.search_type){case Im.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 Im.USERNAME:let s=t.search_values;for await(let i of bx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return bx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(sb,"getSelect");a(Rx,"getRecords");a(Ni,"getTable");a(yx,"createDeleteResponse");a(bx,"groupRecordsInHistory")});var kn=C((gNe,Px)=>{"use strict";var{ResourceBridge:gee}=(Cx(),P(Ix)),See=ce();See.initSync();var dE;function Tee(){return dE||(dE=new gee,dE)}a(Tee,"getBridge");Px.exports=Tee()});var En=C((TNe,vx)=>{"use strict";var _E=eR(),Pr=ae(),Aee=require("util"),hE=kn(),Ree=ds(),Dx=j(),{handleHDBError:kc,hdb_errors:yee}=he(),{HTTP_STATUS_CODES:Fc}=yee,bee=Aee.promisify(Ree.getTableSchema),Oee="updated",Lx="inserted",Mx="upserted";vx.exports={insert:wee,update:Iee,upsert:Cee,validation:Nee,flush:Pee};async function Nee(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 bee(e.schema,e.table),r=_E(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 Dx.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 Dx.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(Nee,"validation");async function wee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=_E(e);if(t)throw kc(new Error,t.message,Fc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw kc(new Error,r,Fc.BAD_REQUEST);let n=await hE.createRecords(e);return fE(Lx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(wee,"insertData");async function Iee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=_E(e);if(t)throw kc(new Error,t.message,Fc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw kc(new Error,r,Fc.BAD_REQUEST);let n=await hE.updateRecords(e);return Pr.isEmpty(n.existing_rows)?fE(Oee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):fE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Iee,"updateData");async function Cee(e){if(e.operation!=="upsert")throw kc(new Error,"invalid operation, must be upsert",Fc.INTERNAL_SERVER_ERROR);let t=_E(e);if(t)throw kc(new Error,t.message,Fc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw kc(new Error,r,Fc.BAD_REQUEST);let n=await hE.upsertRecords(e);return fE(Mx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Cee,"upsertData");function fE(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===Lx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Mx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(fE,"returnObject");function Pee(e){return Pr.transformReq(e),hE.flush(e.schema,e.table)}a(Pee,"flush")});var Fx=C((RNe,kx)=>{var gu=require("validate.js"),xx=rt(),Su=(H(),P($)),{handleHDBError:Dee,hdb_errors:Lee}=he(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:Mee}=Lee,ob=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),vee={STRUCTURE_USER:"structure_user"},Ux=Object.values(Su.ROLE_TYPES_ENUM),Uee="attribute_permissions",xee="attribute_name",{PERMS_CRUD_ENUM:Tu}=Su,Bee=[Uee,...Object.values(Tu)],Bx=[Tu.READ,Tu.INSERT,Tu.UPDATE],Hee=[xee,...Bx];function kee(e){let t=ob();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Hx(e,t)}a(kee,"addRoleValidation");function Fee(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Hx(e,t)}a(Fee,"alterRoleValidation");function Gee(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xx.validateObject(e,t)}a(Gee,"dropRoleValidation");var qee=["operation","role","id","permission","hdb_user","access"];function Hx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)qee.includes(n[o])||s.push(n[o]);s.length>0&&tr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=xx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{tr(o,r)}),e.permission){let o=$ee(e);o&&tr(o,r),Ux.forEach(c=>{e.permission[c]&&!gu.isBoolean(e.permission[c])&&tr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Ux.indexOf(o)<0){if(o===vee.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=>{Bee.includes(f)||tr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Tu).forEach(f=>{gu.isDefined(u[f])?gu.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=>{!Hee.includes(S)&&S!==Tu.DELETE&&tr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!gu.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}Bx.forEach(S=>{gu.isDefined(_[S])?gu.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 Vee(r)}a(Hx,"customValidate");kx.exports={addRoleValidation:kee,alterRoleValidation:Fee,dropRoleValidation:Gee};function $ee(e){let{operation:t,permission:r}=e;if(t===Su.OPERATIONS_ENUM.ADD_ROLE||t===Su.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?Su.ROLE_TYPES_ENUM.SUPER_USER:Su.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a($ee,"validateNoSUPerms");function Vee(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 Dee(new Error,n,Mee.BAD_REQUEST)}else return null}a(Vee,"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 h_=C((ONe,Vx)=>{"use strict";var Gx=En(),qx=Kr(),Kee=Dc(),cb=Fx(),lb=co(),bNe=require("uuid").v4,Yee=require("util"),mE=(H(),P($)),Wee=ae(),ub=qx.searchByValue,zee=qx.searchByHash,Qee=Yee.promisify(Kee.delete),jee=$s(),Jee=mu(),{hdb_errors:Xee,handleHDBError:Gc}=he(),{HDB_ERROR_MSGS:$x,HTTP_STATUS_CODES:__}=Xee,{UserEventMsg:db}=qs();Vx.exports={addRole:Zee,alterRole:ete,dropRole:tte,listRoles:rte};function ab(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(ab,"scrubRoleDetails");async function Zee(e){let t=cb.addRoleValidation(e);if(t)throw t;e=ab(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 ub(r)||[])}catch(i){throw Gc(i)}if(n&&n.length>0)throw Gc(new Error,$x.ROLE_ALREADY_EXISTS(e.role),__.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 Gx.insert(s),lb.signalUserChange(new db(process.pid)),e=ab(e),e}a(Zee,"addRole");async function ete(e){let t=cb.alterRoleValidation(e);if(t)throw t;e=ab(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Gx.update(r)}catch(s){throw Gc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Gc(new Error,"Invalid role id",__.BAD_REQUEST,void 0,void 0,!0);return await lb.signalUserChange(new db(process.pid)),e}a(ete,"alterRole");async function tte(e){let t=cb.dropRoleValidation(e);if(t)throw Gc(new Error,t,__.BAD_REQUEST,void 0,void 0,!0);let r=new Jee(mE.SYSTEM_SCHEMA_NAME,mE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await zee(r));if(n.length===0)throw Gc(new Error,$x.ROLE_NOT_FOUND,__.NOT_FOUND,void 0,void 0,!0);let s=new jee(mE.SYSTEM_SCHEMA_NAME,mE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ub(s)),o=!1;if(Wee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Gc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,__.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Qee(c),lb.signalUserChange(new db(process.pid)),`${n[0].role} successfully deleted`}a(tte,"dropRole");async function rte(){return ub({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(rte,"listRoles")});var fb={};Ue(fb,{start:()=>Wx,startOnMainThread:()=>ite});function Wx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Kx.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(nte.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 ste(i)}}}async function ste(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,Yx.isEqual)(i,e)?void 0:(e.id=r.id,(0,pE.alterRole)(e))}return(0,pE.addRole)(e)}var pE,Kx,Yx,nte,ite,zx=be(()=>{ve();pE=M(h_()),Kx=require("yaml"),Yx=require("lodash"),nte=["super_user","cluster_user","structure_user"];a(Wx,"start");a(ste,"ensureRole");ite=Wx});async function EE(e){let t=(0,Jx.pathToFileURL)(e).toString();if(ote)return m_||(m_=ate(lte)),(await(await m_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function ate(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),m_=new Compartment({console,Math,Date,fetch:cte,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,jx.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,Qx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),m_}function cte(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function lte(){return{Resource:$r,tables:Vn}}var Qx,jx,Jx,ote,m_,_b=be(()=>{Zo();ve();Qx=require("fs/promises"),jx=require("path"),Jx=require("url"),ote=!1;a(EE,"secureImport");a(ate,"getCompartment");a(cte,"secureOnlyFetch");a(lte,"getGlobalVars")});var mb={};Ue(mb,{handleFile:()=>ute});async function ute(e,t,r,n){let s=new Map,i=await EE(r);c(i.default)&&n.set((0,hb.dirname)(t),i.default),o(i,(0,hb.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 hb,Xx=be(()=>{_b();hb=require("path");a(ute,"handleFile")});var Eb={};Ue(Eb,{start:()=>dte});function dte({resources:e}){e.set("login",pb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var pb,Zx=be(()=>{Zo();a(dte,"start");pb=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 A_={};Ue(A_,{addAnalyticsListener:()=>T_,calculateCPUUtilization:()=>gB,diffResourceUsage:()=>SB,recordAction:()=>rr,recordActionBinary:()=>Kn,setAnalyticsEnabled:()=>fte});function fte(e){_B=e}function _te(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 hte(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},SE.set(e,o)}function rr(e,t,r,n,s){if(!_B)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=SE.get(i);o?_te(e,o):hte(i,e,t,r,n,s),gE||mte()}function Kn(e,t,r,n,s){rr(!!e,t,r,n,s)}function T_(e){pB.push(e)}function mte(){gE=performance.now(),setTimeout(async()=>{let e=performance.now()-gE;gE=0;let t=[],r={time:Date.now(),period:e,threadId:qc.threadId,metrics:t};for(let[s,i]of SE){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 EB){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 TB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:qc.threadId,byThread:!0,...n});for(let s of pB)s(t);SE=new Map,qc.parentPort?qc.parentPort.postMessage({type:mB,report:r}):yB({report:r})},hB).unref()}function TE(e,t,r){let n={id:(0,g_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function gB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function SB(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 pte(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};TE(e,"table-size",l),$c.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function eB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getAuditSize(),o=fB.default.statSync(s.primaryStore.env.path).size,c=pte(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};TE(e,"database-size",u),$c.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){$c.warn?.("Error getting DB size metrics",s)}}function tB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};TE(e,"storage-volume",o),$c.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){$c.warn?.("Error getting DB volumne metrics",s)}}async function Ete(e,t=6e4){let r=Sb(),n=AB(),s=new Promise(E=>{let A=performance.now();setImmediate(()=>{let N=performance.now();N-A>5e3&&$c.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&&$c.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 TB()}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 EB){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,g_.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,g_.getNextMonotonicTime)(),A={id:E,metric:"main-thread-utilization",idle:_-rB,active:m-nB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,A,{append:!0}).then(N=>{N||n.primaryStore.put(E,A)})}rB=_,nB=m;let S=process.resourceUsage(),g=SB(p_,S);g.time=h,g.period=p_.time?h-p_.time:t,g.cpuUtilization=gB(p_,g.period),TE(n,"resource-usage",g),p_=g;let R=Xe();eB(n,R),eB(n,{system:R.system}),tB(n,R),tB(n,{system:R.system})}async function sB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Sb(){return iB||(iB=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function AB(){return oB||(oB=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Tte(){RB=!0;let e=(0,S_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Ete(hB,e),await sB(Sb(),gte),await sB(AB(),Ste)},Math.min(e/2,2147483647)).unref()}function yB(e,t){let r=e.report;r.threadId=t?.threadId||qc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(aB+=n.mean*n.count);r.totalBytesProcessed=aB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(cB.get(t))}),cB.set(t,t.performance.eventLoopUtilization())),r.id=(0,g_.getNextMonotonicTime)(),Sb().primaryStore.put(r.id,r),RB||Tte(),Ate&&(bB=yte(r))}async function yte(e){if(await bB,!ua){let r=(0,E_.dirname)((0,uB.getLogFilePath)());try{ua=await(0,gb.open)((0,E_.join)(r,"analytics.log"),"r+")}catch{ua=await(0,gb.open)((0,E_.join)(r,"analytics.log"),"w+")}}let t=(await ua.stat()).size;if(t>Rte){let r=Buffer.alloc(t);await ua.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ua.write(r,{position:0}),await ua.truncate(r.length),t=r.length}await ua.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()}});wL={type:"application/json",serializeStream:Sf,serialize:yf,deserialize:j4,q:.5};Vr.set("*/*",wL);Vr.set("",wL);a(j4,"tryJSONParse");a(Of,"registerContentHandlers");J4=require("fastify-plugin"),X4=J4(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=mp(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(mp,"findBestSerializer");RL=WA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Nf,"serialize");a(na,"serializeMessage");a(KA,"asyncSerialization");a(YA,"hasAsyncSerialization");a(Z4,"streamToBuffer");e3=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(t3,"isBufferEncoding");a(r3,"parseContentType");a(Zi,"getDeserializer");a(n3,"deserializerUnknownType");a(s3,"transformIterable");a(hp,"toCsvStream")});var XA={};Ue(XA,{start:()=>_3});function i3(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 CL(e){if(typeof e!="object"||e===null)throw new gi("Request body must be an object.");if(!("query"in e))throw new gi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new gi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new gi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new gi("Request body `operationName` field must be a string.")}function JA(e){return parseInt(e.value,10)}function DL(e){return parseFloat(e.value)}function LL(e,t,r){let n=r.get(e.name.value);return ML(n)?vL(n,t):{attribute:t,value:n}}function ML(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function vL(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],ML(n)?vL(n,t):{attribute:t,value:n}))}function o3(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:JA(e.value)};case Le.Kind.FLOAT:return{attribute:t,value:DL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:t,value:e.value.value};case Le.Kind.VARIABLE:return LL(e.value,t,r);case Le.Kind.OBJECT:return UL(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 UL(e,t,r){return e.fields.flatMap(n=>o3(n,t,r))}function a3(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:JA(e.value)};case Le.Kind.FLOAT:return{attribute:e.name.value,value:DL(e.value)};case Le.Kind.BOOLEAN:case Le.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Le.Kind.VARIABLE:return LL(e.value,e.name.value,t);case Le.Kind.OBJECT:return UL(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 c3(e,t){return e.flatMap(r=>a3(r,t))}function pp(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 pp(s.selectionSet,t)}case Le.Kind.INLINE_FRAGMENT:return pp(r.selectionSet,t)}})}function xL(e,t){return pp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:xL(r.selectionSet,t)}:r.name.value)}async function l3(e,t,r,n){let s=hi.getMatch(e.name.value,"graphql");if(s===void 0)throw new yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:xL(e.selectionSet,r),conditions:c3(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function BL(e){switch(e.kind){case Le.Kind.NULL:return null;case Le.Kind.INT:return JA(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]:BL(r.value),...t}),{});case Le.Kind.LIST:case Le.Kind.ENUM:default:throw new yr(`Value type, ${e.kind}, is not supported.`)}}function u3(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=BL(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 d3(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=u3(e.variableDefinitions,t),i=await Promise.all(pp(e.selectionSet,r).map(c=>l3(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function PL({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(i3(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 d3(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function f3(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 CL(r),PL(r,e)}case"POST":{let r=await Zi(e.headers.get("content-type"),!0)(e._nodeRequest);return CL(r),PL(r,e)}default:throw new gi("Method Not Allowed",405,{Allow:"GET, POST"})}}function _3(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await f3(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof gi)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 gi)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,gi,HL=be(()=>{Le=M(require("graphql"));ji();Xl();a(i3,"assertExecutableDefinitionNode");a(CL,"assertRequestParams");a(JA,"processIntValueNode");a(DL,"processFloatValueNode");a(LL,"processVariableNode");a(ML,"isObject");a(vL,"transformObjectIntoQueryCondition");a(o3,"processObjectFieldNode");a(UL,"processObjectValueNode");a(a3,"processArgumentNode");a(c3,"buildConditionsQuery");a(pp,"fillInFragments");a(xL,"buildSelectQuery");a(l3,"processFieldNode");a(BL,"processConstValueNode");a(u3,"resolveVariables");a(d3,"executeOperation");a(PL,"resolver");yr=class extends Error{static{a(this,"GraphQLQueryingError")}},gi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(f3,"graphqlQueryingHandler");a(_3,"start")});var Ti=C((mRe,GL)=>{"use strict";var FL=ae(),kL=(H(),P($)),tu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),sa={schema_format:{pattern:tu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},h3=Si.alternatives(Si.string().min(1).max(sa.schema_length.maximum).pattern(tu).messages({"string.pattern.base":"{:#label} "+sa.schema_format.message}),Si.number(),Si.array()).required(),m3=Si.alternatives(Si.string().min(1).max(sa.schema_length.maximum).pattern(tu).messages({"string.pattern.base":"{:#label} "+sa.schema_format.message}),Si.number()),p3=Si.alternatives(Si.string().min(1).max(sa.schema_length.maximum).pattern(tu).messages({"string.pattern.base":"{:#label} "+sa.schema_format.message}),Si.number()).required();function E3(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>sa.schema_length.maximum?`'${e}' maximum of 250 characters`:tu.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(E3,"checkValidTable");function g3(e,t){return FL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(g3,"validateSchemaExists");function S3(e,t){let r=t.state.ancestors[0].schema;return FL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(S3,"validateTableExists");function T3(e,t){return e.toLowerCase()===kL.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${kL.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(T3,"validateSchemaName");GL.exports={common_validators:sa,schema_regex:tu,hdb_schema_table:h3,validateSchemaExists:g3,validateTableExists:S3,validateSchemaName:T3,checkValidTable:E3,hdb_database:m3,hdb_table:p3}});var eR=C((ERe,$L)=>{var{hdb_table:A3,hdb_database:qL}=Ti(),R3=rt(),ZA=require("joi"),y3={undefined:"undefined",null:"null"},b3=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||y3[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"),O3=ZA.object({database:qL,schema:qL,table:A3,records:ZA.array().items(ZA.object().custom(b3)).required()});$L.exports=function(e){return R3.validateBySchema(e,O3)}});var KL=C((SRe,VL)=>{"use strict";var tR=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")}};VL.exports=tR});var WL=C((ARe,YL)=>{"use strict";var rR=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};YL.exports=rR});var XL={};Ue(XL,{HAS_EXPIRATION:()=>Sp,HAS_RESIDENCY_ID:()=>lR,HAS_STRUCTURE_UPDATE:()=>Ap,LAST_TIMESTAMP_PLACEHOLDER:()=>Df,LOCAL_TIMESTAMP:()=>N3,METADATA:()=>wf,NEW_TIMESTAMP_PLACEHOLDER:()=>QL,NO_TIMESTAMP:()=>nR,PENDING_LOCAL_TIME:()=>uR,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>cR,RecordEncoder:()=>aR,TIMESTAMP_ASSIGN_LAST:()=>I3,TIMESTAMP_ASSIGN_NEW:()=>jL,TIMESTAMP_ASSIGN_PREVIOUS:()=>JL,TIMESTAMP_PLACEHOLDER:()=>Ep,TIMESTAMP_RECORD_PREVIOUS:()=>sR,handleLocalTimeForGets:()=>Rp,recordUpdater:()=>dR,removeEntry:()=>Ac});function P3(){return Pf[0]=Pf[0]^64,w3.getFloat64(0)}function Rp(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?.[wf];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?.[wf]>=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[wf];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,Tc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Tc.length;u++){let f=Tc[u].deref();(!f||f.isDone||f.isCommitted)&&Tc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function dR(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?ru=i?.localTime?sR|JL:nR:ru=l?i?.localTime?sR|16384:jL|16384:nR;let _=u?.expiresAt;if(_>=0&&(c|=Sp),Cf=c,iR=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:ru>0},S,g=0;try{let R=i?.residencyId,E=u?.residencyId;E&&(oR=E,Cf|=lR,g|=Rc),R!==E&&(g|=yc,R||(R=0)),c&Sp&&(g|=Mf),u?.originatingOperation&&(g|=Lf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&Un&&(r.getBinaryFast(i.localTime)||ra(i.value));let A;if(s!==void 0&&(A=fp(()=>e.put(n,s,m),n,e.rootStore),pc&&(g|=Un)),l){let N=u?.user?.username;if(h&&(fp(()=>e.encoder.encode(h),n,e.rootStore),pc&&(g|=Un)),e.encoder.hasStructureUpdate&&(g|=Ap,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,nu(o,t,n,q,u?.nodeId??server.replication.getThisNodeId(r)??0,N,f,If,g,E,R,_),{ifVersion:S}),A}}A=r.put(s===void 0?QL:Df,nu(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,f,If,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 Ac(e,t,r){if(t)return t.value&&t.metadataFlags&Un&&!e.auditStore.getBinaryFast(t.localTime)&&ra(t.value),e.remove(t.key,r)}var zL,gp,Ep,Df,cR,QL,N3,wf,Pf,w3,nR,jL,I3,JL,sR,Sp,lR,uR,Ap,C3,If,ru,Cf,iR,oR,aR,Tc,su=be(()=>{zL=require("msgpackr");eo();gp=M(j());cs();cs();Ep=new Uint8Array([1,1,1,1,4,64,0,0]),Df=new Uint8Array([1,1,1,1,1,0,0,0]),cR=new Uint8Array([1,1,1,1,3,64,0,0]),QL=new Uint8Array([1,1,1,1,0,64,0,0]),N3=Symbol("local-timestamp"),wf=Symbol("metadata"),Pf=new Uint8Array(8),w3=new DataView(Pf.buffer,0,8),nR=0,jL=0,I3=1,JL=3,sR=4,Sp=16,lR=32,uR=1,Ap=256,ru=0,Cf=-1,iR=-1,oR=0,aR=class extends zL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(ru||Cf>=0){let o=0,c=ru;c&&(o+=8,ru=0);let l=Cf,u=iR,f=oR;l>=0&&(o+=4,Cf=-1,u>=0&&(o+=8,iR=-1),f&&(o+=4,oR=0));let d=C3=r.call(this,s,i|2048|o);If=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(Ep[4]=c,Ep[5]=c>>8,d.set(Ep,h),h+=8),pc&&(l|=Un),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|Tp<<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 If=r.call(this,s,i),If};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(Pf,0,c),c+=8;else for(let h=0;h<8;h++)Pf[h]=t[c++];l=P3(),i=t[c]}let u,f;i<32&&(i===Tp?(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&Sp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&lR&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=Ec(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[wf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:Ec(()=>super.decode(t,r),this.rootStore)}catch(c){return gp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(P3,"getTimestamp");a(Rp,"handleLocalTimeForGets");Tc=[];setInterval(()=>{for(let e=0;e<Tc.length;e++){let t=Tc[e].deref();!t||t.isDone||t.isCommitted?Tc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(gp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):gp.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(dR,"recordUpdater");a(Ac,"removeEntry")});var vf=C((wRe,eM)=>{"use strict";var ZL=ce(),D3=(H(),P($)),{RecordEncoder:L3}=(su(),P(XL));ZL.initSync();var M3=ZL.get(D3.CONFIG_PARAMS.STORAGE_CACHING)!==!1,fR=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=M3&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:L3})}};eM.exports=fR});var Uf=C((CRe,tM)=>{"use strict";var xn=ce(),ls=(H(),P($));xn.initSync();var yp=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)}};tM.exports=yp;yp.MAX_DBS=1e4});var dt=C((DRe,dM)=>{"use strict";var hR=require("lmdb"),Hs=require("fs-extra"),Bn=require("path"),bp=un(),sM=j(),mn=Cn().LMDB_ERRORS_ENUM,Op=WL(),mR=vf(),iM=Uf(),ia=Ut(),rM=(H(),P($)),{table:v3,resetDatabases:U3}=(ve(),P(it)),nM=ce(),ks=ia.INTERNAL_DBIS_NAME,oM=ia.DBI_DEFINITION_NAME,x3="data.mdb",B3="lock.mdb",xf=".mdb",H3="-lock",_R=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[ia.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ia.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new hR.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Np(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(Np,"pathEnvNameValidation");async function pR(e,t,r=!0){try{await Hs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(mn.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+xf);return await Hs.access(n,Hs.constants.R_OK|Hs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Hs.access(Bn.join(e,t,x3),Hs.constants.R_OK|Hs.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(pR,"validateEnvironmentPath");function wp(e,t){if(bp.validateEnv(e),t===void 0)throw new Error(mn.DBI_NAME_REQUIRED)}a(wp,"validateEnvDBIName");async function k3(e,t,r=!1,n=!1){Np(e,t);let s=Bn.basename(e);t=t.toString();let i=nM.get(rM.CONFIG_PARAMS.DATABASES);i||nM.setProperty(rM.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await pR(e,t,n),aM(e,t,r)}catch(o){if(o.message===mn.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Hs.mkdirp(n?c:e);let l=new iM(n?c:c+xf,!1),u=hR.open(l);u.dbis=Object.create(null);let f=new mR(!1);u.openDB(ks,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ER(e,t,r);return u[ia.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(k3,"createEnvironment");async function F3(e,t,r,n=!0){Np(e,t),t=t.toString();let s=Bn.join(e,t);return v3({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(F3,"copyEnvironment");async function aM(e,t,r=!1){Np(e,t),t=t.toString();let n=ER(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 pR(e,t),i=Bn.join(e,t+xf),o=s!=i,c=new iM(s,o),l=hR.open(c);l.dbis=Object.create(null);let u=lM(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[ia.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(aM,"openEnvironment");async function G3(e,t,r=!1){Np(e,t),t=t.toString();let n=Bn.join(e,t+xf),s=await pR(e,t);if(global.lmdb_map!==void 0){let i=ER(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await cM(o),delete global.lmdb_map[i]}}await Hs.remove(s),await Hs.remove(s===n?s+H3:Bn.join(Bn.dirname(s),B3))}a(G3,"deleteEnvironment");async function cM(e){bp.validateEnv(e);let t=e[ia.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(cM,"closeEnvironment");function ER(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(ER,"getCachedEnvironmentName");function q3(e){bp.validateEnv(e);let t=Object.create(null),r=us(e,ks);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ks)try{t[n]=Object.assign(new Op,s)}catch{sM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(q3,"listDBIDefinitions");function lM(e){bp.validateEnv(e);let t=[],r=us(e,ks);for(let{key:n}of r.getRange({start:!1}))n!==ks&&t.push(n);return t}a(lM,"listDBIs");function $3(e,t){let n=us(e,ks).getEntry(t),s=new Op;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{sM.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a($3,"getDBIDefinition");function uM(e,t,r,n=!r){if(wp(e,t),t=t.toString(),t===ks)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 mR(r,n===!0),o=e.openDB(t,i),c=new Op(r===!0,n);return o[oM]=c,us(e,ks).putSync(t,c),e.dbis[t]=o,o}throw s}}a(uM,"createDBI");function us(e,t){if(wp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ks?r=$3(e,t):r=new Op,r===void 0)throw new Error(mn.DBI_DOES_NOT_EXIST);let n;try{let s=new mR(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[oM]=r,e.dbis[t]=n,n}a(us,"openDBI");function V3(e,t){wp(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[ia.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(V3,"statDBI");async function K3(e,t){try{let r=Bn.join(e,t+xf);return(await Hs.stat(r)).size}catch{throw new Error(mn.INVALID_ENVIRONMENT)}}a(K3,"environmentDataSize");function Y3(e,t){if(wp(e,t),t=t.toString(),t===ks)throw new Error(mn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,ks).removeSync(t)}a(Y3,"dropDBI");function W3(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)uM(e,i,i!==t,i===t),n=!0;else throw o}}n&&U3()}a(W3,"initializeDBIs");dM.exports={openDBI:us,openEnvironment:aM,createEnvironment:k3,listDBIs:lM,listDBIDefinitions:q3,createDBI:uM,dropDBI:Y3,statDBI:V3,deleteEnvironment:G3,initializeDBIs:W3,TransactionCursor:_R,environmentDataSize:K3,copyEnvironment:F3,closeEnvironment:cM}});var _M=C((MRe,fM)=>{"use strict";var gR=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};fM.exports=gR});var mM=C((URe,hM)=>{"use strict";var SR=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}};hM.exports=SR});var EM=C((BRe,pM)=>{"use strict";var TR=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};pM.exports=TR});var Oc=C((qRe,TM)=>{"use strict";var z3=dt(),Q3=_M(),j3=mM(),J3=EM(),Ai=un(),Bf=Cn().LMDB_ERRORS_ENUM,X3=Ut(),to=(H(),P($)),Z3=ae(),eX=require("uuid"),kRe=require("lmdb"),{handleHDBError:tX,hdb_errors:rX}=he(),{OVERFLOW_MARKER:FRe,MAX_SEARCH_KEY_LENGTH:GRe}=X3,gM=ce();gM.initSync();var Ip=gM.get(to.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),AR=to.TIME_STAMP_NAMES_ENUM.CREATED_TIME,bc=to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function nX(e,t,r,n,s=Ai.getNextMonotonicTime()){OR(e,t,r,n),RR(e,t,r);let i=new Q3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];SM(u,!0,s);let f=sX(e,t,r,u),d=u[t];o.push(f),c.push(d)}return yR(o,c,n,i,s)}a(nX,"insertRecords");function sX(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][to.FUNC_VAL],n[o]=c)}let l=Ai.getIndexedValues(c),u=e.dbis[o];if(l){Ip&&u.prefetch(l.map(f=>({key:f,value:s})),Cp);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}Ip&&e.dbis[t].prefetch([s],Cp),e.dbis[t].put(s,n,n[bc])})}a(sX,"insertRecord");function iX(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(iX,"removeSkippedRecords");function SM(e,t,r){let n=r>0;(n||!Number.isInteger(e[bc]))&&(e[bc]=r||(r=Ai.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[AR]))&&(e[AR]=r||Ai.getNextMonotonicTime()):delete e[AR]}a(SM,"setTimestamps");function RR(e,t,r){r.indexOf(to.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(to.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(to.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),z3.initializeDBIs(e,t,r)}a(RR,"initializeTransaction");async function oX(e,t,r,n,s=Ai.getNextMonotonicTime()){OR(e,t,r,n),RR(e,t,r);let i=new j3,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=bR(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return yR(c,l,n,i,s,o)}a(oX,"updateRecords");async function aX(e,t,r,n,s=Ai.getNextMonotonicTime()){try{OR(e,t,r,n)}catch(l){throw tX(l,l.message,rX.HTTP_STATUS_CODES.BAD_REQUEST)}RR(e,t,r);let i=new J3,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;Z3.isEmpty(u[t])?(f=eX.v4(),u[t]=f):f=u[t];let d=bR(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return yR(o,c,n,i,s)}a(aX,"upsertRecords");async function yR(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||Ai.getNextMonotonicTime(),iX(r,i),n}a(yR,"finalizeWrite");function bR(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(SM(r,!f,o),Number.isInteger(r[bc])&&u[bc]>r[bc])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][to.FUNC_VAL],r[m]=S)}if(S===R)continue;let E=Ai.getIndexedValues(R);if(E){Ip&&g.prefetch(E.map(A=>({key:A,value:n})),Cp);for(let A=0,N=E.length;A<N;A++)g.remove(E[A],n)}if(E=Ai.getIndexedValues(S),E){Ip&&g.prefetch(E.map(A=>({key:A,value:n})),Cp);for(let A=0,N=E.length;A<N;A++)g.put(E[A],n)}}let _={...u,...r};c.put(n,_,_[bc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:bR(e,t,r,n,s,i,o))}a(bR,"updateUpsertRecord");function cX(e,t,r){if(Ai.validateEnv(e),t===void 0)throw new Error(Bf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Bf.WRITE_ATTRIBUTES_REQUIRED):new Error(Bf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(cX,"validateBasic");function OR(e,t,r,n){if(cX(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Bf.RECORDS_REQUIRED):new Error(Bf.RECORDS_MUST_BE_ARRAY)}a(OR,"validateWrite");function Cp(){}a(Cp,"noop");TM.exports={insertRecords:nX,updateRecords:oX,upsertRecords:aX}});var ro=C((VRe,lX)=>{lX.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 RM=C((KRe,AM)=>{"use strict";var uX=require("uuid"),NR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||uX.v4(),this.schema_table=`${this.schema}.${this.table}`}};AM.exports=NR});var Pp=C((WRe,yM)=>{"use strict";var dX=RM(),wR=class extends dX{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}};yM.exports=wR});var OM=C((QRe,bM)=>{"use strict";bM.exports=_X;var fX="inserted";function _X(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===fX?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(_X,"returnObject")});var Dp=C((XRe,wM)=>{"use strict";var hX=(H(),P($)),IR=dt(),mX=Oc(),{getSystemSchemaPath:pX,getSchemaPath:EX}=Et(),JRe=ro(),{validateBySchema:gX}=rt(),Hf=require("joi"),SX=Pp(),TX=OM(),{handleHDBError:AX,hdb_errors:RX,ClientError:yX}=he(),NM=ae(),{HTTP_STATUS_CODES:bX}=RX,OX="inserted";wM.exports=NX;async function NX(e){let t=gX(e,Hf.object({database:Hf.string(),schema:Hf.string(),table:Hf.string().required(),attribute:Hf.string().required()}));if(t)throw new yX(t.message);let r=!e.skip_table_check&&NM.checkGlobalSchemaTable(e.schema,e.table);if(r)throw AX(new Error,r,bX.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NM.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 SX(e.schema,e.table,e.attribute,e.id);try{let i=await IR.openEnvironment(EX(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}`);IR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await IR.openEnvironment(pX(),hX.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await mX.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return TX(OX,c,{records:[s]},l)}catch(i){throw i}}a(NX,"lmdbCreateAttribute")});var kf=C((tye,CM)=>{"use strict";var no=ae(),IM=j(),eye=eR(),{getDatabases:wX}=(ve(),P(it)),{ClientError:Nc}=he();CM.exports=IX;function IX(e){if(no.isEmpty(e))throw new Nc("invalid update parameters defined.");if(no.isEmptyOrZeroLength(e.schema))throw new Nc("invalid schema specified.");if(no.isEmptyOrZeroLength(e.table))throw new Nc("invalid table specified.");if(!Array.isArray(e.records))throw new Nc("records must be an array");let t=wX()[e.schema]?.[e.table];if(no.isEmpty(t))throw new Nc(`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&&no.isEmptyOrZeroLength(o[r]))throw IM.error("a valid hash attribute must be provided with update record:",o),new Nc("a valid hash attribute must be provided with update record, check log for more info");if(!no.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw IM.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Nc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!no.isEmpty(o[r])&&o[r]!==""&&n.has(no.autoCast(o[r]))&&(o.skip=!0),n.add(no.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(IX,"insertUpdateValidate")});var DM=C((nye,PM)=>{"use strict";var CR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};PM.exports=CR});var vM=C((iye,MM)=>{"use strict";var PR=dt(),CX=j(),LM=Cn().LMDB_ERRORS_ENUM;MM.exports=PX;async function PX(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 PR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LM.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await PR.closeEnvironment(global.lmdb_map[n]),await PR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==LM.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){CX.error(t)}}a(PX,"cleanLMDBMap")});var WM=C((cye,YM)=>{"use strict";var DR=require("recursive-iterator"),DX=require("alasql"),LR=require("clone"),UM=ae(),{handleHDBError:xM,hdb_errors:LX}=he(),{HDB_ERROR_MSGS:BM,HTTP_STATUS_CODES:HM}=LX,{getDatabases:MX}=(ve(),P(it)),vX=["DISTINCT_ARRAY"],kM=Symbol("validateTables"),MR=Symbol("validateTable"),aye=Symbol("getAllColumns"),FM=Symbol("validateAllColumns"),Lp=Symbol("findColumn"),GM=Symbol("validateOrderBy"),Ff=Symbol("validateSegment"),vR=Symbol("validateColumn"),qM=Symbol("setColumnsForTable"),$M=Symbol("checkColumnsForAsterisk"),VM=Symbol("validateGroupBy"),KM=Symbol("hasColumns"),UR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[kM](),this[$M](),this[FM]()}[kM](){if(this[KM]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[MR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[MR](t.table)})}}[KM](){let t=!1,r=new DR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[MR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=MX();if(!r[t.databaseid])throw xM(new Error,BM.SCHEMA_NOT_FOUND(t.databaseid),HM.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw xM(new Error,BM.TABLE_NOT_FOUND(t.databaseid,t.tableid),HM.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=LR(s);i.table=LR(t),this.attributes.push(i)})}[Lp](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)}[$M](){let t=new DR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[qM](r.tableid)}[qM](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new DX.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[FM](){this[Ff](this.statement.columns,!1),this[Ff](this.statement.joins,!1),this[Ff](this.statement.where,!1),this[VM](this.statement.group,!1),this[Ff](this.statement.order,!0)}[Ff](t,r){if(!t)return;let n=new DR(t),s=[];for(let{node:i,path:o}of n)!UM.isEmpty(i)&&!UM.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[GM](i):s.push(this[vR](i)));return s}[VM](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&vX.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=LR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Lp](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[Lp](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`}[GM](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[vR](t)}[vR](t){let r=this[Lp](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]}};YM.exports=UR});var JM=C((uye,jM)=>{"use strict";var zM=require("lodash"),Gf=require("mathjs"),UX=require("jsonata"),QM=ae();jM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?zM.uniqWith(e,zM.isEqual):e,"distinct_array"),searchJSON:xX,mad:qf.bind(null,Gf.mad),mean:qf.bind(null,Gf.mean),mode:qf.bind(null,Gf.mode),prod:qf.bind(null,Gf.prod),median:qf.bind(null,Gf.median)};function qf(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(qf,"aggregateFunction");function xX(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(QM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),QM.isEmpty(this.__ala__.res[r])){let n=UX(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(xX,"searchJSON")});var ZM=C((fye,XM)=>{"use strict";var er=require("moment"),xR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;XM.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(xR),"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(xR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(xR),"offset_utc")}});var nv=C((hye,rv)=>{"use strict";var BX=require("@turf/area"),HX=require("@turf/length"),kX=require("@turf/circle"),FX=require("@turf/difference"),GX=require("@turf/distance"),qX=require("@turf/boolean-contains"),$X=require("@turf/boolean-equal"),VX=require("@turf/boolean-disjoint"),KX=require("@turf/helpers"),ev=(H(),P($)),qe=ae(),so=j();rv.exports={geoArea:YX,geoLength:WX,geoCircle:zX,geoDifference:QX,geoDistance:tv,geoNear:jX,geoContains:JX,geoEqual:XX,geoCrosses:ZX,geoConvert:e6};function YX(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return BX.default(e)}catch(t){return so.trace(t,e),NaN}}a(YX,"geoArea");function WX(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return HX.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(WX,"geoLength");function zX(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return kX.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(zX,"geoCircle");function QX(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 FX(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(QX,"geoDifference");function tv(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 GX.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(tv,"geoDistance");function jX(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 tv(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(jX,"geoNear");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 so.trace(r,e,t),!1}}a(JX,"geoContains");function XX(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 $X.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(XX,"geoEqual");function ZX(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!VX.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(ZX,"geoCrosses");function e6(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(ev.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(ev.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),KX[t](e,r)}a(e6,"geoConvert")});var Mp=C((pye,sv)=>{var wc=JM(),Hn=ZM(),Ri=nv();sv.exports=e=>{e.aggr.mad=e.aggr.MAD=wc.mad,e.aggr.mean=e.aggr.MEAN=wc.mean,e.aggr.mode=e.aggr.MODE=wc.mode,e.aggr.prod=e.aggr.PROD=wc.prod,e.aggr.median=e.aggr.MEDIAN=wc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wc.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=Ri.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ri.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ri.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ri.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ri.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ri.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ri.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ri.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ri.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ri.geoNear}});var cv=C((Eye,av)=>{"use strict";var $f=require("lodash"),pn=require("alasql");pn.options.cache=!1;var t6=Mp(),iv=require("clone"),vp=require("recursive-iterator"),Be=j(),ze=ae(),iu=kn(),r6=(H(),P($)),{hdb_errors:n6}=he(),{getDatabases:ov}=(ve(),P(it)),s6="IS NULL",Fs="There was a problem performing this search. Please check the logs and try again.";t6(pn);var BR=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(Fs)}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(Fs)}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(Fs)}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(Fs)}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(Fs)}}_getColumns(){let t=new vp(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(iv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$f.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=ov()[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 vp(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 vp(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(r6.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&&$f.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(iv(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(s6)>-1&&this.tables.forEach(s=>{let i={columnid:ov()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$f.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 iu.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(Fs)}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 iu.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(Fs)}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 iu.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(Fs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await iu.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(Fs)}}}_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=$f.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 vp(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=$f.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(Fs)}}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 iu.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(n6.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 iu.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(Fs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};av.exports=BR});var Kr=C((Sye,lv)=>{"use strict";var i6=WM();lv.exports={searchByConditions:a6,searchByHash:c6,searchByValue:l6,search:u6};var HR=kn(),{transformReq:kR}=ae(),o6=cv();async function a6(e){return kR(e),HR.searchByConditions(e)}a(a6,"searchByConditions");async function c6(e){kR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of HR.searchByHash(e))r&&t.push(r);return t}a(c6,"searchByHash");async function l6(e){kR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of HR.searchByValue(e))t.push(r);return t}a(l6,"searchByValue");function u6(e,t){try{let r=new i6(e);r.validate(),new o6(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(u6,"search")});var io=C((Aye,_v)=>{"use strict";var Vf=require("crypto"),d6=ce(),{CONFIG_PARAMS:f6}=(H(),P($)),dv="aes-256-cbc",_6=32,h6=16,FR=64,fv=32,m6=FR+fv,uv=new Map;_v.exports={encrypt:p6,decrypt:E6,createNatsTableStreamName:g6};function p6(e){let t=Vf.randomBytes(_6),r=Vf.randomBytes(h6),n=Vf.createCipheriv(dv,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(p6,"encrypt");function E6(e){let t=e.substr(0,FR),r=e.substr(FR,fv),n=e.substr(m6,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Vf.createDecipheriv(dv,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(E6,"decrypt");function g6(e,t){let r=d6.get(f6.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=uv.get(r);return n||(n=Vf.createHash("md5").update(r).digest("hex"),uv.set(r,n)),n}a(g6,"createNatsTableStreamName")});var oo=C((bye,Ev)=>{"use strict";var yye=Kr(),Kf=j(),{validateBySchema:hv}=rt(),Ic=require("joi"),S6=io(),Up=ae(),{handleHDBError:xp,hdb_errors:T6,ClientError:mv}=he(),{HDB_ERROR_MSGS:Bp,HTTP_STATUS_CODES:GR}=T6,pv=ce();pv.initSync();var{getDatabases:qR}=(ve(),P(it)),A6=require("fs-extra"),R6=(H(),P($));Ev.exports={describeAll:y6,describeTable:Hp,describeSchema:b6};async function y6(e={}){try{let t=Up.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=qR(),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 Hp({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 Hp({schema:d,table:_,exact_count:u},S)}m&&l.push(m)}catch(m){Kf.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 Kf.error("Got an error in describeAll"),Kf.error(t),xp(new Error,Bp.DESCRIBE_ALL_ERR)}}a(y6,"describeAll");async function Hp(e,t){Up.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=hv(e,Ic.object({database:Ic.string(),table:Ic.string().required(),exact_count:Ic.boolean().strict()}));if(i)throw new mv(i.message);let c=qR()[r];if(!c)throw xp(new Error,Bp.SCHEMA_NOT_FOUND(e.schema),GR.NOT_FOUND);let l=c[n];if(!l)throw xp(new Error,Bp.TABLE_NOT_FOUND(e.schema,e.table),GR.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 A6.stat(l.primaryStore.env.path)).size}catch(_){Kf.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")),pv.get(R6.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=S6.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(_){Kf.warn(`unable to stat table dbi due to ${_}`)}return h}a(Hp,"descTable");async function b6(e){Up.transformReq(e);let t=hv(e,Ic.object({database:Ic.string(),exact_count:Ic.boolean().strict()}));if(t)throw new mv(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=qR()[n];if(!i)throw xp(new Error,Bp.SCHEMA_NOT_FOUND(e.schema),GR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Up.isEmpty(l)||l.describe){let u=await Hp({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(b6,"describeSchema")});var ds=C((Iye,Rv)=>{var O6=ro(),{callbackify:Sv,promisify:N6}=require("util"),{getDatabases:Tv}=(ve(),P(it));Rv.exports={setSchemaDataToGlobal:gv,getTableSchema:w6,getSystemSchema:I6,setSchemaDataToGlobalAsync:N6(gv)};var Av=oo(),Nye=Sv(Av.describeAll),wye=Sv(Av.describeTable);function gv(e){global.hdb_schema=Tv(),e&&e()}a(gv,"setSchemaDataToGlobal");function w6(e,t,r){let n=Tv()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(w6,"getTableSchema");function I6(){return O6}a(I6,"getSystemSchema")});var VR=C((Pye,Ov)=>{var C6=rt(),$R=require("joi"),{hdb_table:P6,hdb_database:yv}=Ti(),bv={schema:yv,database:yv,table:P6},D6={date:$R.date().iso().required()},L6={timestamp:$R.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ov.exports=function(e,t){let r=t==="timestamp"?{...bv,...L6}:{...bv,...D6},n=$R.object(r);return C6.validateBySchema(e,n)}});var Iv=C((Dye,wv)=>{var M6=rt(),KR=require("joi"),{hdb_table:v6,hdb_database:Nv}=Ti(),U6=KR.object({schema:Nv,database:Nv,table:v6,hash_values:KR.array().required(),ids:KR.array()});wv.exports=function(e){return M6.validateBySchema(e,U6)}});var QR=C((Lye,Cv)=>{"use strict";var YR=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}},WR=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}},zR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Cv.exports={InsertObject:YR,NoSQLSeachObject:WR,DeleteResponseObject:zR}});var Dc=C((vye,vv)=>{"use strict";var Dv=VR(),x6=Iv(),Cc=ae(),Pv=require("moment"),Lv=j(),{promisify:B6,callbackify:H6}=require("util"),Pc=(H(),P($)),k6=ds(),jR=B6(k6.getTableSchema),JR=kn(),{DeleteResponseObject:F6}=QR(),{handleHDBError:oa,hdb_errors:G6}=he(),{HDB_ERROR_MSGS:kp,HTTP_STATUS_CODES:aa}=G6,q6="records successfully deleted",$6=H6(Mv);vv.exports={delete:$6,deleteRecord:Mv,deleteFilesBefore:V6,deleteAuditLogsBefore:K6};async function V6(e){let t=Dv(e,"date");if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(Cc.transformReq(e),!Pv(e.date,Pv.ISO_8601).isValid())throw oa(new Error,kp.INVALID_DATE,aa.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,kp.INVALID_DATE,!0);let n=Cc.checkSchemaTableExist(e.schema,e.table);if(n)throw oa(new Error,n,aa.NOT_FOUND,Pc.LOG_LEVELS.ERROR,n,!0);let s=await JR.deleteRecordsBefore(e);if(await jR(e.schema,e.table),Lv.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(V6,"deleteFilesBefore");async function K6(e){let t=Dv(e,"timestamp");if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(Cc.transformReq(e),isNaN(e.timestamp))throw oa(new Error,kp.INVALID_VALUE("Timestamp"),aa.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,kp.INVALID_VALUE("Timestamp"),!0);let r=Cc.checkSchemaTableExist(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);let n=await JR.deleteAuditLogsBefore(e);return await jR(e.schema,e.table),Lv.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(K6,"deleteAuditLogsBefore");async function Mv(e){e.ids&&(e.hash_values=e.ids);let t=x6(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);Cc.transformReq(e);let r=Cc.checkSchemaTableExist(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);try{await jR(e.schema,e.table);let n=await JR.deleteRecords(e);return Cc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${q6}`),n}catch(n){if(n.message===Pc.SEARCH_NOT_FOUND_MESSAGE){let s=new F6;return s.message=Pc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Mv,"deleteRecord")});var Fp={};Ue(Fp,{HASH_FUNCTION:()=>zf,hash:()=>ey,validate:()=>ty});function XR(e=Wf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Yf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function ey(e,t=zf[xv?.toUpperCase()]??"sha256"){return ZR[t](e)}function ty(e,t,r=zf[xv?.toUpperCase()]??"sha256"){return e?Y6[r](e,t):!1}var Yf,ou,Uv,xv,Wf,Bv,zf,ZR,Y6,Gp=be(()=>{Yf=M(require("node:crypto")),ou=M(require("argon2")),Uv=M(ce());H();xv=(0,Uv.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Wf=16,Bv=9,zf=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(zf||{});a(XR,"generateSalt");ZR={md5:a((e,t=void 0)=>{t=t??XR(Bv);let r=Yf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??XR(Wf);let r=Yf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=XR(Wf),r=await ou.hash(e,{type:ou.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},Y6={md5:a((e,t)=>{let r=e.slice(0,Bv);return e===ZR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Wf);return e===ZR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await ou.verify(e.slice(Wf),t),"argon2id")};a(ey,"hash");a(ty,"validate")});var kv=C((Hye,Hv)=>{var ry=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 W6(e){return Yr.password.presence=!0,Yr.username.presence=!0,Yr.role.presence=!0,Yr.active.presence=!0,ry.validateObject(e,Yr)}a(W6,"addUserValidation");function z6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ry.validateObject(e,Yr)}a(z6,"alterUserValidation");function Q6(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,ry.validateObject(e,Yr)}a(Q6,"dropUserValidation");Hv.exports={addUserValidation:W6,alterUserValidation:z6,dropUserValidation:Q6}});var It=C((Gye,Gv)=>{"use strict";var{platform:Fye}=require("os"),j6="nats-server.zip",ny="nats-server",J6=process.platform==="win32"?`${ny}.exe`:ny,X6=/^[^\s.,*>]+$/,Fv="__request__",Z6=a(e=>`${e}.${Fv}`,"REQUEST_SUBJECT"),eZ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},tZ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},rZ={HUB:"hub.pid",LEAF:"leaf.pid"},nZ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},sZ={SUCCESS:"success",ERROR:"error"},iZ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},oZ={TXN:"txn",MSGID:"msgid"},au={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},aZ={[au.ERR]:1,[au.WRN]:2,[au.INF]:3,[au.DBG]:4,[au.TRC]:5},cZ={debug:"-D",trace:"-DVV"};Gv.exports={NATS_SERVER_ZIP:j6,NATS_SERVER_NAME:ny,NATS_BINARY_NAME:J6,PID_FILES:rZ,NATS_CONFIG_FILES:tZ,SERVER_SUFFIX:nZ,NATS_TERM_CONSTRAINTS_RX:X6,REQUEST_SUFFIX:Fv,UPDATE_REMOTE_RESPONSE_STATUSES:sZ,CLUSTER_STATUS_STATUSES:iZ,REQUEST_SUBJECT:Z6,SUBJECT_PREFIXES:oZ,MSG_HEADERS:eZ,LOG_LEVELS:au,LOG_LEVEL_FLAGS:cZ,LOG_LEVEL_HIERARCHY:aZ}});var Fn=C(($ye,br)=>{"use strict";var Vv="username is required",Kv="nothing to update, must supply active, role or password to update",Yv="password cannot be an empty string",Wv="If role is specified, it cannot be empty.",zv="active must be true or false";br.exports.addUser=EZ;br.exports.alterUser=gZ;br.exports.dropUser=TZ;br.exports.getSuperUser=OZ;br.exports.userInfo=AZ;br.exports.listUsers=$p;br.exports.listUsersExternal=RZ;br.exports.setUsersWithRolesCache=Lc;br.exports.findAndValidateUser=fy;br.exports.getClusterUser=NZ;br.exports.getUsersWithRolesCache=bZ;br.exports.USERNAME_REQUIRED=Vv;br.exports.ALTERUSER_NOTHING_TO_UPDATE=Kv;br.exports.EMPTY_PASSWORD=Yv;br.exports.EMPTY_ROLE=Wv;br.exports.ACTIVE_BOOLEAN=zv;var Qv=En(),lZ=Dc(),Qf=(Gp(),P(Fp)),jv=kv(),jf=Kr(),cy=co(),yi=ae(),Jv=require("validate.js"),ly=j(),{promisify:uZ}=require("util"),uy=io(),iy=(H(),P($)),qv=It(),dZ=Ot(),fZ=ce(),_Z=ro(),{hdb_errors:hZ,ClientError:Gs}=he(),{HTTP_STATUS_CODES:ao,AUTHENTICATION_ERROR_MSGS:sy,HDB_ERROR_MSGS:cu}=hZ,{UserEventMsg:dy}=qs(),oy=require("lodash"),{server:qp}=(Gr(),P($l)),mZ=j();qp.getUser=(e,t)=>fy(e,t,t!=null);qp.authenticateUser=(e,t)=>fy(e,t);var Xv={username:!0,active:!0,role:!0,password:!0},$v=new Map,pZ=uZ(lZ.delete),ay=fZ.get(iy.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Qf.HASH_FUNCTION.SHA256,bi;async function EZ(e){let t=Jv.cleanAttributes(e,Xv),r=jv.addUserValidation(t);if(r)throw new Gs(r.message);let n=await jf.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(cu.ROLE_NAME_NOT_FOUND(t.role),ao.NOT_FOUND);if(n.length>1)throw new Gs(cu.DUP_ROLES_FOUND(t.role),ao.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=uy.encrypt(t.password)),t.password=await Qf.hash(t.password,ay),t.hash_function=ay,t.role=n[0].id;let s=await Qv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ly.debug(s),await Lc(),s.skipped_hashes.length===1)throw new Gs(cu.USER_ALREADY_EXISTS(t.username),ao.CONFLICT);return cy.signalUserChange(new dy(process.pid)),`${t.username} successfully added`}a(EZ,"addUser");async function gZ(e){let t=Jv.cleanAttributes(e,Xv);if(yi.isEmptyOrZeroLength(t.username))throw new Error(Vv);if(yi.isEmptyOrZeroLength(t.password)&&yi.isEmptyOrZeroLength(t.role)&&yi.isEmptyOrZeroLength(t.active))throw new Error(Kv);if(!yi.isEmpty(t.password)&&yi.isEmptyOrZeroLength(t.password.trim()))throw new Error(Yv);if(!yi.isEmpty(t.active)&&!yi.isBoolean(t.active))throw new Error(zv);if(!yi.isEmpty(t.password)&&!yi.isEmptyOrZeroLength(t.password.trim())&&(SZ(t.username)&&(t.hash=uy.encrypt(t.password)),t.password=await Qf.hash(t.password,ay)),t.role==="")throw new Error(Wv);if(t.role){let n=await jf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Gs(cu.ALTER_USER_ROLE_NOT_FOUND(t.role),ao.NOT_FOUND);if(n.length>1)throw new Gs(cu.DUP_ROLES_FOUND(t.role),ao.CONFLICT);t.role=n[0].id}let r=await Qv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Lc(),cy.signalUserChange(new dy(process.pid)),r}a(gZ,"alterUser");function SZ(e){let t=!1,r=bi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(SZ,"isClusterUser");async function TZ(e){let t=jv.dropUserValidation(e);if(t)throw new Gs(t.message);if(bi.get(e.username)===void 0)throw new Gs(cu.USER_NOT_EXIST(e.username),ao.NOT_FOUND);let r=await pZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return ly.debug(r),await Lc(),cy.signalUserChange(new dy(process.pid)),`${e.username} successfully deleted`}a(TZ,"dropUser");async function AZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=oy.cloneDeep(e.hdb_user);let r=await jf.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(AZ,"userInfo");async function RZ(){let e=await $p();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(RZ,"listUsersExternal");async function $p(){let e=await jf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=oy.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await jf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=oy.cloneDeep(s),s.role=t[s.role],yZ(s.role),n.set(s.username,s);return n}a($p,"listUsers");function yZ(e){if(!e){ly.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(_Z)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(yZ,"appendSystemTablesToRole");async function Lc(e=void 0){e?bi=e:bi=await $p()}a(Lc,"setUsersWithRolesCache");async function bZ(){return bi||await Lc(),bi}a(bZ,"getUsersWithRolesCache");async function fy(e,t,r=!0){bi||await Lc();let n=bi.get(e);if(!n){if(!r)return{username:e};throw new Gs(sy.GENERIC_AUTH_FAIL,ao.UNAUTHORIZED)}if(n&&!n.active)throw new Gs(sy.USER_INACTIVE,ao.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($v.get(t)===n.password)return s;{let i=Qf.validate(n.password,t,n.hash_function||Qf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)$v.set(t,n.password);else throw new Gs(sy.GENERIC_AUTH_FAIL,ao.UNAUTHORIZED)}}return s}a(fy,"findAndValidateUser");async function OZ(){bi||await Lc();for(let[,e]of bi)if(e.role.role==="super_user")return e}a(OZ,"getSuperUser");async function NZ(){let e=await $p(),t=dZ.getConfigFromFile(iy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==iy.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=uy.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+qv.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+qv.SERVER_SUFFIX.ADMIN,r}a(NZ,"getClusterUser");var Zv=[];qp.invalidateUser=function(e){for(let t of Zv)try{t(e)}catch(r){mZ.error("Error invalidating user",r)}};qp.onInvalidatedUser=function(e){Zv.push(e)}});var Xf=C((Wye,nU)=>{"use strict";var Mc=j(),Gn=(H(),P($)),wZ=vM(),Kye=ds(),Yye=oo(),IZ=Fn(),{validateEvent:eU}=qs(),Jf=kn(),CZ=require("process"),{resetDatabases:PZ}=(ve(),P(it)),DZ={[Gn.ITC_EVENT_TYPES.SCHEMA]:LZ,[Gn.ITC_EVENT_TYPES.USER]:rU};async function LZ(e){let t=eU(e);if(t){Mc.error(t);return}Mc.trace("ITC schemaHandler received schema event:",e),await wZ(e.message),await MZ(e.message)}a(LZ,"schemaHandler");async function MZ(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=PZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Mc.error(t)}}a(MZ,"syncSchemaMetadata");var tU=[];async function rU(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){Mc.warn(r)}let t=eU(e);if(t){Mc.error(t);return}Mc.trace(`ITC userHandler ${Gn.HDB_ITC_CLIENT_PREFIX}${CZ.pid} received user event:`,e),await IZ.setUsersWithRolesCache();for(let r of tU)r()}catch(t){Mc.error(t)}}a(rU,"userHandler");rU.addListener=function(e){tU.push(e)};nU.exports=DZ});var qs=C((Zye,iU)=>{"use strict";var Qye=j(),_y=ae(),vZ=(H(),P($)),{ITC_ERRORS:Zf}=Cn(),{parentPort:jye,threadId:UZ,isMainThread:xZ,workerData:Jye}=require("worker_threads"),{onMessageFromWorkers:BZ,broadcast:Xye,broadcastWithAcknowledgement:HZ}=nt();iU.exports={sendItcEvent:kZ,validateEvent:sU,SchemaEventMsg:FZ,UserEventMsg:GZ};var Vp;BZ(async(e,t)=>{Vp=Vp||Xf(),sU(e),Vp[e.type]&&await Vp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kZ(e){return!xZ&&e.message&&(e.message.originator=UZ),HZ(e)}a(kZ,"sendItcEvent");function sU(e){if(typeof e!="object")return Zf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_y.isEmpty(e.type))return Zf.MISSING_TYPE;if(!e.hasOwnProperty("message")||_y.isEmpty(e.message))return Zf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_y.isEmpty(e.message.originator))return Zf.MISSING_ORIGIN;if(vZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Zf.INVALID_EVENT(e.type)}a(sU,"validateEvent");function FZ(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(FZ,"SchemaEventMsg");function GZ(e){this.originator=e}a(GZ,"UserEventMsg")});var co=C((rbe,lU)=>{"use strict";var oU=(H(),P($)),tbe=ae(),Kp=j(),aU=DM(),lu,{sendItcEvent:cU}=qs();function qZ(e){try{Kp.info("signalSchemaChange called with message:",e),lu=lu||Xf();let t=new aU(oU.ITC_EVENT_TYPES.SCHEMA,e);return lu.schema(t),cU(t)}catch(t){Kp.error(t)}}a(qZ,"signalSchemaChange");function $Z(e){try{Kp.trace("signalUserChange called with message:",e),lu=lu||Xf();let t=new aU(oU.ITC_EVENT_TYPES.USER,e);return lu.user(t),cU(t)}catch(t){Kp.error(t)}}a($Z,"signalUserChange");lU.exports={signalSchemaChange:qZ,signalUserChange:$Z}});var Yp=C((sbe,dU)=>{"use strict";var uU=ae(),VZ=(H(),P($)),KZ=j(),YZ=Dp(),WZ=Pp(),zZ=co(),{SchemaEventMsg:QZ}=qs(),jZ="already exists in";dU.exports=JZ;async function JZ(e,t,r){if(uU.isEmptyOrZeroLength(r))return r;let n=[];uU.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 XZ(e,t.schema,t.name,i)})),s}a(JZ,"lmdbCheckForNewAttributes");async function XZ(e,t,r,n){let s=new WZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ZZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(jZ))KZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(XZ,"createNewAttribute");async function ZZ(e){let t;return t=await YZ(e),zZ.signalSchemaChange(new QZ(process.pid,VZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ZZ,"createAttribute")});var uu=C((obe,fU)=>{"use strict";var hy=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}};fU.exports=hy});var hU=C((cbe,_U)=>{"use strict";var e8=uu(),t8=(H(),P($)).OPERATIONS_ENUM,my=class extends e8{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(t8.INSERT,r,n,s,i),this.records=t}};_U.exports=my});var pU=C((ube,mU)=>{"use strict";var r8=uu(),n8=(H(),P($)).OPERATIONS_ENUM,py=class extends r8{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(n8.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};mU.exports=py});var gU=C((fbe,EU)=>{"use strict";var s8=uu(),i8=(H(),P($)).OPERATIONS_ENUM,Ey=class extends s8{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(i8.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};EU.exports=Ey});var TU=C((hbe,SU)=>{"use strict";var o8=uu(),a8=(H(),P($)).OPERATIONS_ENUM,gy=class extends o8{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(a8.DELETE,n,s,t,i),this.original_records=r}};SU.exports=gy});var e_=C((Ebe,bU)=>{"use strict";var pbe=require("path"),AU=dt(),c8=hU(),l8=pU(),u8=gU(),d8=TU(),du=Ut(),RU=ae(),{CONFIG_PARAMS:f8}=(H(),P($)),yU=ce();yU.initSync();var Wp=(H(),P($)).OPERATIONS_ENUM,{getTransactionAuditStorePath:_8}=Et();bU.exports=h8;async function h8(e,t){if(yU.get(f8.LOGGING_AUDITLOG)===!1)return;let r=_8(e.schema,e.table),n=await AU.openEnvironment(r,e.table,!0),s=m8(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){AU.initializeDBIs(n,du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,du.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),RU.isEmpty(s.user_name)||n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[du.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(h8,"writeTransaction");function m8(e,t){let r=RU.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Wp.INSERT)return new c8(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.UPDATE)return new l8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.UPSERT)return new u8(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Wp.DELETE)return new d8(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(m8,"createTransactionObject")});var Sy=C((Tbe,OU)=>{"use strict";var p8=kf(),Sbe=df(),t_=(H(),P($)),E8=ff(),g8=Oc().insertRecords,S8=dt(),T8=j(),A8=Yp(),{getSchemaPath:R8}=Et(),y8=e_();OU.exports=b8;async function b8(e){try{let{schema_table:t,attributes:r}=p8(e);E8(e,r,t.hash_attribute),e.schema!==t_.SYSTEM_SCHEMA_NAME&&(r.includes(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(t_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await A8(e.hdb_auth_header,t,r),s=R8(e.schema,e.table),i=await S8.openEnvironment(s,e.table),o=await g8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await y8(e,o)}catch(c){T8.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(b8,"lmdbCreateRecords")});var IU=C((Rbe,wU)=>{"use strict";var NU=(H(),P($)),O8=Sy(),N8=df(),w8=require("fs-extra"),{getSchemaPath:I8}=Et();wU.exports=C8;async function C8(e){let t=[{name:e.schema,createddate:Date.now()}],r=new N8(NU.SYSTEM_SCHEMA_NAME,NU.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await O8(r),await w8.mkdirp(I8(e.schema))}a(C8,"lmdbCreateSchema")});var PU=C((bbe,CU)=>{"use strict";var Ty=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}};CU.exports=Ty});var vU=C((Cbe,MU)=>{"use strict";var DU=dt(),Ay=un(),Ry=Cn().LMDB_ERRORS_ENUM,P8=Ut(),LU=j(),Nbe=ae(),D8=require("lmdb"),L8=PU(),M8=(H(),P($)),{OVERFLOW_MARKER:wbe,MAX_SEARCH_KEY_LENGTH:Ibe}=P8,v8=M8.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function U8(e,t,r,n){if(Ay.validateEnv(e),t===void 0)throw new Error(Ry.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ry.IDS_REQUIRED):new Error(Ry.IDS_MUST_BE_ITERABLE);try{let s=DU.listDBIs(e);DU.initializeDBIs(e,t,s);let i=new L8,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[v8]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,D8.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=Ay.getIndexedValues(A);if(N)for(let v=0,F=N.length;v<F;v++)E.remove(N[v],o)}catch{LU.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){LU.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=Ay.getNextMonotonicTime(),i}catch(s){throw s}}a(U8,"deleteRecords");MU.exports={deleteRecords:U8}});var r_=C((Dbe,xU)=>{"use strict";var fu=ae(),x8=vU(),B8=dt(),{getSchemaPath:H8}=Et(),k8=e_(),F8=j();xU.exports=G8;async function G8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fu.isEmptyOrZeroLength(e.hash_values)&&!fu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fu.isEmpty(l)||e.hash_values.push(l)}}if(fu.isEmptyOrZeroLength(e.hash_values))return UU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fu.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=H8(e.schema,e.table),i=await B8.openEnvironment(s,e.table),o=await x8.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await k8(e,o)}catch(c){F8.error(`unable to write transaction due to ${c.message}`)}return UU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(G8,"lmdbDeleteRecords");function UU(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(UU,"createDeleteResponse")});var by=C((vbe,BU)=>{"use strict";var q8=(H(),P($)),Mbe=un();function yy(e,t){let r=Object.create(null);if(t.length===1&&q8.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(yy,"parseRow");function $8(e,t,r,n){let s=yy(r,e);n.push(s)}a($8,"searchAll");function V8(e,t,r,n){let s=yy(r,e);n[t]=s}a(V8,"searchAllToMap");function K8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(K8,"iterateDBI");function vc(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(vc,"pushResults");function Y8(e,t,r,n,s,i){t.toString().endsWith(e)&&vc(t,r,n,s,i)}a(Y8,"endsWith");function W8(e,t,r,n,s,i){t.toString().includes(e)&&vc(t,r,n,s,i)}a(W8,"contains");function z8(e,t,r,n,s,i){t>e&&vc(t,r,n,s,i)}a(z8,"greaterThanCompare");function Q8(e,t,r,n,s,i){t>=e&&vc(t,r,n,s,i)}a(Q8,"greaterThanEqualCompare");function j8(e,t,r,n,s,i){t<e&&vc(t,r,n,s,i)}a(j8,"lessThanCompare");function J8(e,t,r,n,s,i){t<=e&&vc(t,r,n,s,i)}a(J8,"lessThanEqualCompare");BU.exports={parseRow:yy,searchAll:$8,searchAllToMap:V8,iterateDBI:K8,endsWith:Y8,contains:W8,greaterThanCompare:z8,greaterThanEqualCompare:Q8,lessThanCompare:j8,lessThanEqualCompare:J8,pushResults:vc}});var _u=C((kbe,VU)=>{"use strict";var ca=dt(),xbe=j(),qn=un(),zp=Ut(),Kt=Cn().LMDB_ERRORS_ENUM,Bbe=ae(),X8=(H(),P($)),Qp=by(),{parseRow:Z8}=Qp,Hbe=require("lmdb"),{OVERFLOW_MARKER:HU,MAX_SEARCH_KEY_LENGTH:e5}=zp;function kU(e,t,r,n=!1,s=void 0,i=void 0){return Uc(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(kU,"iterateFullIndex");function n_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Uc(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(n_,"iterateRangeBetween");function Uc(e,t,r,n){let s=e.database||e,i=ca.openDBI(s,r);i[zp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ca.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(Uc,"setupTransaction");function FU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(HU)){if(!s)if(r)s=ca.openDBI(e,r);else{let l=ca.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ca.openDBI(e,l[u]),!s[zp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(FU,"getOverflowCheck");function t5(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 Uc(e,t,t,(o,c,l)=>(jp(r),r=s_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Z8(u.value,r))))}a(t5,"searchAll");function r5(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);jp(r),r=s_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of kU(e,t,t,n,s,i))o.set(c,Qp.parseRow(l,r));return o}a(r5,"searchAllToMap");function n5(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=kU(e,void 0,t,r,n,s),c=o.transaction,l=FU(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(n5,"iterateDBI");function s5(e,t){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return ca.statDBI(e,t).entryCount}a(s5,"countAll");function i5(e,t,r,n,s=!1,i=void 0,o=void 0){return la(e,r,n),Uc(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(i5,"equals");function o5(e,t,r){return la(e,t,r),ca.openDBI(e,t).getValuesCount(r)}a(o5,"count");function a5(e,t,r,n,s=!1,i=void 0,o=void 0){return la(e,r,n),Uc(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(a5,"startsWith");function c5(e,t,r,n,s=!1,i=void 0,o=void 0){return GU(e,t,r,n,s,i,o,!0)}a(c5,"endsWith");function GU(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return la(e,r,n),Uc(e,null,r,(l,u,f,d)=>{let h=FU(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(HU)?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[zp.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(GU,"contains");function l5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!0,!1)}a(l5,"greaterThan");function u5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),n_(e,t,r,n,l,s,i,o,!1,!1)}a(u5,"greaterThanEqual");function d5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!0)}a(d5,"lessThan");function f5(e,t,r,n,s=!1,i=void 0,o=void 0){la(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),n_(e,t,r,l,n,s,i,o,!1,!1)}a(f5,"lessThanEqual");function _5(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 n_(e,t,r,n,s,i,o,c)}a(_5,"between");function h5(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(jp(r),r=s_(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=Qp.parseRow(c,r)),o}a(h5,"searchByHash");function m5(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(m5,"checkHashExists");function p5(e,t,r,n,s=[]){return $U(e,t,r,n,s),qU(e,t,r,n,s).map(i=>i[1])}a(p5,"batchSearchByHash");function E5(e,t,r,n,s=[]){$U(e,t,r,n,s);let i=new Map;for(let[o,c]of qU(e,t,r,n,s))i.set(o,c);return i}a(E5,"batchSearchByHashToMap");function qU(e,t,r,n,s=[]){return Uc(e,t,t,(i,o,c)=>{r=s_(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,Qp.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(qU,"batchHashSearch");function $U(e,t,r,n,s){if(qn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(jp(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a($U,"initializeBatchSearchByHash");function jp(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(jp,"validateFetchAttributes");function la(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>e5)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(la,"validateComparisonFunctions");function s_(e,t){return t.length===1&&X8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ca.listDBIs(e)),t}a(s_,"setGetWholeRowAttributes");VU.exports={searchAll:t5,searchAllToMap:r5,count:o5,countAll:s5,equals:i5,startsWith:a5,endsWith:c5,contains:GU,searchByHash:h5,setGetWholeRowAttributes:s_,batchSearchByHash:p5,batchSearchByHashToMap:E5,checkHashExists:m5,iterateDBI:n5,greaterThan:l5,greaterThanEqual:u5,lessThan:d5,lessThanEqual:f5,between:_5}});var hu=C((Gbe,QU)=>{var KU=require("lodash"),YU=rt(),ke=require("joi"),g5=ae(),{hdb_schema_table:i_,checkValidTable:WU,hdb_table:zU,hdb_database:Jp}=Ti(),{handleHDBError:S5,hdb_errors:T5}=he(),{getDatabases:A5}=(ve(),P(it)),{HTTP_STATUS_CODES:R5}=T5,y5=ke.object({database:Jp,schema:Jp,table:zU,search_attribute:i_,search_value:ke.any().required(),get_attributes:ke.array().min(1).items(ke.alternatives(i_,ke.object())).optional(),desc:ke.bool(),limit:ke.number().integer().min(1),offset:ke.number().integer().min(0)}),b5=ke.object({database:Jp,schema:Jp,table:zU,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(i_,ke.object())).optional(),sort:ke.object({attribute:ke.alternatives(i_,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(i_,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()});QU.exports=function(e,t){let r=null;switch(t){case"value":r=YU.validateBySchema(e,y5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(WU("database",e.schema)),i(WU("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=YU.validateBySchema(e,b5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=g5.checkGlobalSchemaTable(e.schema,e.table);if(s)return S5(new Error,s,R5.NOT_FOUND);let o=A5()[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=KU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!KU.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 Oy=C(($be,jU)=>{"use strict";var O5=dt(),N5=hu(),{getSchemaPath:w5}=Et();jU.exports=I5;function I5(e){let t=N5(e,"hashes");if(t)throw t;let r=w5(e.schema,e.table);return O5.openEnvironment(r,e.table)}a(I5,"initialize")});var Ny=C((Kbe,JU)=>{"use strict";var C5=_u(),P5=Oy();JU.exports=D5;async function D5(e){let t=await P5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return C5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(D5,"lmdbGetDataByHash")});var mu=C((Wbe,XU)=>{"use strict";var wy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};XU.exports=wy});var e0=C((jbe,ZU)=>{"use strict";var Qbe=mu(),L5=_u(),M5=Oy();ZU.exports=v5;async function v5(e){let t=await M5(e),r=global.hdb_schema[e.schema][e.table];return L5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(v5,"lmdbSearchByHash")});var $s=C((Xbe,t0)=>{"use strict";var Iy=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}};t0.exports=Iy});var Xp=C((eOe,a0)=>{"use strict";var Wr=_u(),U5=dt(),x5=ae(),Fe=Ut(),xc=(H(),P($)),B5=ro(),r0=Cn().LMDB_ERRORS_ENUM,{getSchemaPath:H5}=Et(),lo=xc.SEARCH_WILDCARDS;async function k5(e,t,r){let n;e.schema===xc.SYSTEM_SCHEMA_NAME?n=B5[e.table]:n=global.hdb_schema[e.schema][e.table];let s=o0(e,n.hash_attribute,r,t);return s0(e,s,n.hash_attribute,r)}a(k5,"prepSearch");async function s0(e,t,r,n){let s=H5(e.schema,e.table),i=await U5.openEnvironment(s,e.table),o=i0(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(F5(e,r)===!1){let f=e.search_attribute;if(f===r)return n?n0(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?n0(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(s0,"executeSearch");function i0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case 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(i0,"searchByType");function n0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(n0,"createMapFromIterable");function F5(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(F5,"checkToFetchMore");function o0(e,t,r,n){if(x5.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),lo.indexOf(s)>-1)return r===!0?Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Fe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(lo[0])<0&&s.indexOf(lo[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(lo.indexOf(i)>=0&&lo.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Fe.SEARCH_TYPES.CONTAINS;if(lo.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Fe.SEARCH_TYPES.ENDS_WITH;if(lo.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Fe.SEARCH_TYPES.STARTS_WITH;if(s.includes(lo[0])||s.includes(lo[1]))return Fe.SEARCH_TYPES.EQUALS;throw new Error(r0.UNKNOWN_SEARCH_TYPE)}else switch(n){case xc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Fe.SEARCH_TYPES.BETWEEN;case xc.VALUE_SEARCH_COMPARATORS.GREATER:return Fe.SEARCH_TYPES.GREATER_THAN;case xc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Fe.SEARCH_TYPES.GREATER_THAN_EQUAL;case xc.VALUE_SEARCH_COMPARATORS.LESS:return Fe.SEARCH_TYPES.LESS_THAN;case xc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Fe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(r0.UNKNOWN_SEARCH_TYPE)}}a(o0,"createSearchTypeFromSearchObject");a0.exports={executeSearch:s0,createSearchTypeFromSearchObject:o0,prepSearch:k5,searchByType:i0}});var l0=C((nOe,c0)=>{"use strict";var rOe=$s(),G5=hu(),q5=ae(),$5=(H(),P($)),V5=Xp();c0.exports=K5;function K5(e,t){if(!q5.isEmpty(t)&&$5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=G5(e,"value");if(n)throw n;return V5.prepSearch(e,t,!0)}a(K5,"lmdbGetDataByValue")});var o_=C((oOe,u0)=>{"use strict";var iOe=$s(),Y5=hu(),W5=ae(),z5=(H(),P($)),Q5=Xp();u0.exports=j5;async function j5(e,t){if(!W5.isEmpty(t)&&z5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Y5(e,"value");if(n)throw n;return Q5.prepSearch(e,t,!1)}a(j5,"lmdbSearchByValue")});var f0=C((lOe,d0)=>{"use strict";var cOe=Ut(),Cy=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}},Py=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Dy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};d0.exports={SearchByConditionsObject:Cy,SearchCondition:Py,SortAttribute:Dy}});var E0=C((_Oe,p0)=>{"use strict";var dOe=f0().SearchByConditionsObject,J5=$s(),X5=hu(),Ly=_u(),Zp=Ut(),{Resource:fOe}=(Zo(),P(DA)),m0=Xp(),Z5=by(),e9=require("lodash"),{getSchemaPath:t9}=Et(),_0=dt(),{handleHDBError:r9,hdb_errors:n9}=he(),{HTTP_STATUS_CODES:s9}=n9,i9=1e8;p0.exports=o9;async function o9(e){let t=X5(e,"conditions");if(t)throw r9(t,t.message,s9.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=t9(e.schema,e.table),n=await _0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)_0.openDBI(n,u.search_attribute);let i=e9.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===Zp.SEARCH_TYPES.EQUALS?u.estimated_count=Ly.count(n,u.search_attribute,u.search_value):f===Zp.SEARCH_TYPES.CONTAINS||f===Zp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=i9}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await h0(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(m0.filterByType),d=f.length,h=Ly.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(_=>Z5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await h0(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=Ly.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(o9,"lmdbSearchByConditions");async function h0(e,t,r,n){let s=new J5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Zp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,m0.searchByType(e,s,i,n).map(o=>o.value)}a(h0,"executeConditionSearch")});var a_=C((mOe,g0)=>{"use strict";var a9=(H(),P($)).OPERATIONS_ENUM,My=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=a9.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};g0.exports=My});var vy=C((EOe,N0)=>{"use strict";var R0=$s(),y0=a_(),b0=o_(),O0=r_(),gn=(H(),P($)),S0=ae(),T0=dt(),{getTransactionAuditStorePath:c9,getSchemaPath:l9}=Et(),A0=j();N0.exports=u9;async function u9(e){try{if(S0.isEmpty(global.hdb_schema[e.schema])||S0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await d9(e),await f9(e);let t=l9(e.schema,e.table);try{await T0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")A0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=c9(e.schema,e.table);await T0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")A0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(u9,"lmdbDropTable");async function d9(e){let t=new R0(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 b0(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new y0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await O0(s)}a(d9,"deleteAttributesFromSystem");async function f9(e){let t=new R0(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 b0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new y0(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await O0(s)}catch(i){throw i}}a(f9,"dropTableFromSystem")});var I0=C((SOe,w0)=>{"use strict";var _9=require("fs-extra"),h9=$s(),m9=mu(),p9=a_(),E9=vy(),g9=r_(),S9=Ny(),T9=o_(),uo=(H(),P($)),{getSchemaPath:A9}=Et(),{handleHDBError:R9,hdb_errors:y9}=he(),{HDB_ERROR_MSGS:b9,HTTP_STATUS_CODES:O9}=y9;w0.exports=N9;async function N9(e){let t;try{t=await w9(e.schema);let r=new h9(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await T9(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await E9(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new p9(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await g9(s);let i=A9(t);await _9.remove(i)}catch(r){throw r}}a(N9,"lmdbDropSchema");async function w9(e){let t=new m9(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[uo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await S9(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw R9(new Error,b9.SCHEMA_NOT_FOUND(e),O9.NOT_FOUND,void 0,void 0,!0);return n}a(w9,"validateDropSchema")});var c_=C((AOe,C0)=>{"use strict";var Uy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};C0.exports=Uy});var By=C((bOe,P0)=>{"use strict";var I9=require("fs-extra"),eE=dt(),{getTransactionAuditStorePath:C9}=Et(),xy=Ut(),yOe=c_();P0.exports=P9;async function P9(e){let t;try{let r=C9(e.schema,e.table);await I9.mkdirp(r),t=await eE.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{eE.createDBI(t,xy.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),eE.createDBI(t,xy.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),eE.createDBI(t,xy.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(P9,"createTransactionsAuditEnvironment")});var M0=C((wOe,L0)=>{"use strict";var Hy=(H(),P($)),D0=dt(),D9=Oc(),{getSystemSchemaPath:L9,getSchemaPath:M9}=Et(),NOe=ro(),v9=Dp(),ky=Pp(),U9=j(),x9=By();L0.exports=B9;async function B9(e,t){let r=M9(t.schema,t.table),n=new ky(t.schema,t.table,Hy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new ky(t.schema,t.table,Hy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ky(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await D0.createEnvironment(r,t.table),e!==void 0){let o=await D0.openEnvironment(L9(),Hy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await D9.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 Fy(n),await Fy(s),await Fy(i)}await x9(t)}catch(o){throw o}}a(B9,"lmdbCreateTable");async function Fy(e){try{await v9(e)}catch(t){U9.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Fy,"createAttribute")});var U0=C((COe,v0)=>{"use strict";var H9=kf(),k9=ff(),F9=Yp(),l_=(H(),P($)),G9=Oc().updateRecords,q9=dt(),{getSchemaPath:$9}=Et(),V9=e_(),K9=j();v0.exports=Y9;async function Y9(e){try{let{schema_table:t,attributes:r}=H9(e);k9(e,r,t.hash_attribute),e.schema!==l_.SYSTEM_SCHEMA_NAME&&(r.includes(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(l_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await F9(e.hdb_auth_header,t,r),s=$9(e.schema,e.table),i=await q9.openEnvironment(s,e.table),o=await G9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await V9(e,o)}catch(c){K9.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(Y9,"lmdbUpdateRecords")});var B0=C((DOe,x0)=>{"use strict";var W9=(H(),P($)).OPERATIONS_ENUM,Gy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=W9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};x0.exports=Gy});var k0=C((vOe,H0)=>{"use strict";var MOe=B0(),z9=kf(),Q9=ff(),j9=Yp(),u_=(H(),P($)),J9=Oc().upsertRecords,X9=dt(),{getSchemaPath:Z9}=Et(),e7=e_(),t7=j(),{handleHDBError:r7,hdb_errors:n7}=he();H0.exports=s7;async function s7(e){let t;try{t=z9(e)}catch(l){throw r7(l,l.message,n7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;Q9(e,n,r.hash_attribute),e.schema!==u_.SYSTEM_SCHEMA_NAME&&(n.includes(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(u_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await j9(e.hdb_auth_header,r,n),i=Z9(e.schema,e.table),o=await X9.openEnvironment(i,e.table),c=await J9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await e7(e,c)}catch(l){t7.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(s7,"lmdbUpsertRecords")});var G0=C((xOe,F0)=>{"use strict";var qy=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};F0.exports=qy});var $0=C((HOe,q0)=>{"use strict";var $y=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}};q0.exports=$y});var Y0=C((GOe,K0)=>{"use strict";var Vy=dt(),{getTransactionAuditStorePath:i7}=Et(),FOe=G0(),d_=Ut(),o7=ae(),V0=$0(),a7=require("util").promisify,c7=a7(setTimeout),l7=1e4,u7=100;K0.exports=d7;async function d7(e){let t=i7(e.schema,e.table),r=await Vy.openEnvironment(t,e.table,!0),n=Vy.listDBIs(r);Vy.initializeDBIs(r,d_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new V0;do s=await f7(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await c7(u7);while(s.transactions_deleted>0);return i}a(d7,"deleteAuditLogsBefore");async function f7(e,t){let r=new V0;try{let n=e.dbis[d_.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[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];o7.isEmpty(c)||(s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[d_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>l7)break}return await s,r}catch(n){throw n}}a(f7,"deleteTransactions")});var z0=C(($Oe,W0)=>{"use strict";var Ky=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};W0.exports=Ky});var j0=C((YOe,Q0)=>{"use strict";var _7=$s(),h7=a_(),KOe=z0(),Oi=(H(),P($)),m7=ae(),Yy=dt(),p7=ro(),E7=o_(),g7=r_(),{getSchemaPath:S7}=Et();Q0.exports=T7;async function T7(e,t=!0){let r;e.schema===Oi.SYSTEM_SCHEMA_NAME?r=p7[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await R7(e),s=S7(e.schema,e.table),i=await Yy.openEnvironment(s,e.table);return t===!0&&await A7(e,i,r.hash_attribute),Yy.dropDBI(i,e.attribute),n}a(T7,"lmdbDropAttribute");async function A7(e,t,r){let n=Yy.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(A7,"removeAttributeFromAllObjects");async function R7(e){let t=new _7(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await E7(t)).filter(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(m7.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new h7(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return g7(i)}a(R7,"dropAttributeFromSystem")});var rx=C((QOe,tx)=>{"use strict";var Wy=dt(),pu=Ut(),zOe=un(),zy=(H(),P($)),J0=ae(),{getTransactionAuditStorePath:y7}=Et(),b7=_u(),tE=uu(),O7=j();tx.exports=N7;async function N7(e){let t=y7(e.schema,e.table),r=await Wy.openEnvironment(t,e.table,!0),n=Wy.listDBIs(r);Wy.initializeDBIs(r,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return X0(r,e.search_values);case zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,I7(r,e.search_values,s);case zy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return w7(r,e.search_values);default:return X0(r)}}a(N7,"readAuditLog");function X0(e,t=[0,Date.now()]){J0.isEmpty(t[0])&&(t[0]=0),J0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[pu.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 tE,s))}a(X0,"searchTransactionsByTimestamp");function w7(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[pu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,ex(e,i))}return Object.fromEntries(r)}a(w7,"searchTransactionsByUsername");function I7(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=b7.equals(e,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pu.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=ex(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);Z0(l,"records",r,f,o),Z0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(I7,"searchTransactionsByHashValues");function Z0(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 tE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new tE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Z0,"loopRecords");function ex(e,t){let r=[];try{let n=e.dbis[pu.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 tE,i);r.push(o)}}catch(i){O7.warn(i)}return r}catch(n){throw n}}a(ex,"batchSearchTransactions")});var sx=C((ZOe,nx)=>{"use strict";var{getSchemaPath:JOe}=Et(),XOe=dt(),{database:C7}=(ve(),P(it));nx.exports={writeTransaction:P7};async function P7(e,t,r){return C7({database:e,table:t}).transaction(r)}a(P7,"writeTransaction")});var cx=C((tNe,ax)=>{"use strict";var{getSchemaPath:ix}=Et(),ox=dt();ax.exports={flush:D7,resetReadTxn:L7};async function D7(e,t){return(await ox.openEnvironment(ix(e,t),t.toString())).flushed}a(D7,"flush");async function L7(e,t){try{(await ox.openEnvironment(ix(e,t),t.toString())).resetReadTxn()}catch{}}a(L7,"resetReadTxn")});var fx=C((nNe,dx)=>{"use strict";var{Readable:M7}=require("stream"),{getDatabases:v7}=(ve(),P(it)),{readSync:U7,openSync:x7,createReadStream:lx}=require("fs"),{open:B7}=require("lmdb"),ux=vf(),H7=Uf(),{AUDIT_STORE_OPTIONS:k7}=(eo(),P(_x)),{INTERNAL_DBIS_NAME:F7,AUDIT_STORE_NAME:G7}=Ut();dx.exports=$7;var Qy=32768,q7=100;async function $7(e){let t=e.database||e.schema||"data",r=v7()[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=B7({noSync:!0,maxDbs:H7.MAX_DBS}),h,_=d.openDB(F7,new ux(!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++%q7===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 ux(!v,v);await g(E,F)}e.include_audit&&await g(G7,{...k7}),await h;let R=lx(d.path);return R.headers=l(),R.on("close",()=>{m.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=x7(o.path);return o.transaction(()=>{let u=Buffer.alloc(Qy);U7(c,u,0,Qy),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=lx(null,{fd:c,start:Qy}),h=new M7.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($7,"getBackup")});var px=C((iNe,mx)=>{"use strict";var V7=j(),{handleHDBError:K7}=he(),Y7=KL(),W7=Dp(),z7=Sy(),Q7=IU(),j7=r_(),J7=Ny(),X7=e0(),Z7=l0(),eee=o_(),tee=E0(),ree=I0(),nee=M0(),see=U0(),iee=k0(),oee=Y0(),aee=vy(),cee=j0(),lee=rx(),uee=sx(),hx=cx(),dee=fx(),jy=class extends Y7{static{a(this,"LMDBBridge")}async searchByConditions(t){return tee(t)}async getDataByHash(t){return await J7(t)}async searchByHash(t){return await X7(t)}async getDataByValue(t,r){return await Z7(t,r)}async searchByValue(t){return await eee(t)}async createSchema(t){return await Q7(t)}async dropSchema(t){return await ree(t)}async createTable(t,r){return await nee(t,r)}async dropTable(t){return await aee(t)}async createAttribute(t){return await W7(t)}async createRecords(t){return await z7(t)}async updateRecords(t){return await see(t)}async upsertRecords(t){try{return await iee(t)}catch(r){throw K7(r,null,null,V7.ERR,r)}}async deleteRecords(t){return await j7(t)}async dropAttribute(t){return await cee(t)}async deleteAuditLogsBefore(t){return await oee(t)}async readAuditLog(t){return await lee(t)}writeTransaction(t,r,n){return uee.writeTransaction(t,r,n)}flush(t,r){return hx.flush(t,r)}resetReadTxn(t,r){return hx.resetReadTxn(t,r)}getBackup(t){return dee(t)}};mx.exports=jy});var Xy={};Ue(Xy,{add:()=>rE,applyReverse:()=>Ex,getRecordAtTime:()=>Jy,rebuildUpdateBefore:()=>nE});function rE(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 nE(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,rE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Ex(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=fee[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=gx}}function Jy(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":Ex(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===gx&&(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 fee,gx,sE=be(()=>{eo();a(rE,"add");rE.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)};fee={add:rE};a(nE,"rebuildUpdateBefore");a(Ex,"applyReverse");gx={};a(Jy,"getRecordAtTime")});function Sn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function cE(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 pi||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 _=Zy(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,Tx);break}o=c}while(o&&o!==Tx)}function Zy(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends f_{static{a(this,"TrackedObject")}},cE(r,t)),new r(e)):new f_(e);case Array:let n=new oE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Zy(o,t?.elements)),n[s]=o}return n;default:return e}}function lE(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=lE(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 Hc(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=Hc(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=Xy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Hc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)_ee.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function iE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Bc]||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(iE(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(iE(s))return!0}else return!0}else return!0}}return!1}var $n,Sx,Tx,f_,_ee,Bc,oE,aE,eb=be(()=>{$n=M(he());sE();cs();a(Sn,"getChanges");a(cE,"assignTrackedAccessors");Sx=Object.prototype,Tx=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Sx[t])return Sx[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=Zy(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Zy,"trackObject");f_=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}};cE(f_,{});a(lE,"collapseData");_ee=Object.prototype.hasOwnProperty;a(Hc,"updateAndFreeze");a(iE,"hasChanges");Bc=Symbol.for("has-array-changes"),oE=class extends Array{static{a(this,"TrackedArray")}#e;[Bc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Bc]=!0,super.splice(...t)}push(...t){return this[Bc]=!0,super.push(...t)}pop(){return this[Bc]=!0,super.pop()}unshift(...t){return this[Bc]=!0,super.unshift(...t)}shift(){return this[Bc]=!0,super.shift()}};oE.prototype.constructor=Array;aE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Ix={};Ue(Ix,{ResourceBridge:()=>nb});function sb({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 Rx(e,t){let r=Ni(e),n=sb(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&&lE(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 Ni(e){let t=e.database||e.schema||mee,r=Xe()[t];if(!r)throw(0,Vs.handleHDBError)(new Error,hee.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function yx(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*bx(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 Ox,uE,Vs,Nx,tb,rb,wx,hee,mee,pee,Eee,Ax,nb,Cx=be(()=>{"use strict";Ox=M(px()),uE=M(hu()),Vs=M(he());ve();Nx=M(kf());H();tb=M(co()),rb=M(qs()),wx=M(ae());dc();eb();({HDB_ERROR_MSGS:hee}=Vs.hdb_errors),mee="data",pee=1e4,Eee=10,nb=class extends Ox.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ax=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,uE.default)(t,"conditions");if(r)throw(0,Vs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ni(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:sb(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 Ni(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ni(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){Ni(t).dropTable()}createSchema(t){return Eu({database:t.schema,table:null}),tb.signalSchemaChange(new rb.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await ib(t.schema),tb.signalSchemaChange(new rb.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,Ax.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Nx.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=lE(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 yx(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:wm.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,wx.async_set_timeout)(Eee),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%pee===0&&await u();return l.length>0&&await u(),s?yx(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return Rx(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Rx(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&rA[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,uE.default)(t,"value");if(n)throw n;let s=Ni(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===wm.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:sb(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ni(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){Ni({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ni(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ni(t),n={};switch(t.search_type){case Im.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 Im.USERNAME:let s=t.search_values;for await(let i of bx(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return bx(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(sb,"getSelect");a(Rx,"getRecords");a(Ni,"getTable");a(yx,"createDeleteResponse");a(bx,"groupRecordsInHistory")});var kn=C((gNe,Px)=>{"use strict";var{ResourceBridge:gee}=(Cx(),P(Ix)),See=ce();See.initSync();var dE;function Tee(){return dE||(dE=new gee,dE)}a(Tee,"getBridge");Px.exports=Tee()});var En=C((TNe,vx)=>{"use strict";var _E=eR(),Pr=ae(),Aee=require("util"),hE=kn(),Ree=ds(),Dx=j(),{handleHDBError:kc,hdb_errors:yee}=he(),{HTTP_STATUS_CODES:Fc}=yee,bee=Aee.promisify(Ree.getTableSchema),Oee="updated",Lx="inserted",Mx="upserted";vx.exports={insert:wee,update:Iee,upsert:Cee,validation:Nee,flush:Pee};async function Nee(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 bee(e.schema,e.table),r=_E(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 Dx.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 Dx.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(Nee,"validation");async function wee(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=_E(e);if(t)throw kc(new Error,t.message,Fc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw kc(new Error,r,Fc.BAD_REQUEST);let n=await hE.createRecords(e);return fE(Lx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(wee,"insertData");async function Iee(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=_E(e);if(t)throw kc(new Error,t.message,Fc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw kc(new Error,r,Fc.BAD_REQUEST);let n=await hE.updateRecords(e);return Pr.isEmpty(n.existing_rows)?fE(Oee,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):fE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Iee,"updateData");async function Cee(e){if(e.operation!=="upsert")throw kc(new Error,"invalid operation, must be upsert",Fc.INTERNAL_SERVER_ERROR);let t=_E(e);if(t)throw kc(new Error,t.message,Fc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw kc(new Error,r,Fc.BAD_REQUEST);let n=await hE.upsertRecords(e);return fE(Mx,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Cee,"upsertData");function fE(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===Lx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Mx?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(fE,"returnObject");function Pee(e){return Pr.transformReq(e),hE.flush(e.schema,e.table)}a(Pee,"flush")});var Fx=C((RNe,kx)=>{var gu=require("validate.js"),xx=rt(),Su=(H(),P($)),{handleHDBError:Dee,hdb_errors:Lee}=he(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:Mee}=Lee,ob=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),vee={STRUCTURE_USER:"structure_user"},Ux=Object.values(Su.ROLE_TYPES_ENUM),Uee="attribute_permissions",xee="attribute_name",{PERMS_CRUD_ENUM:Tu}=Su,Bee=[Uee,...Object.values(Tu)],Bx=[Tu.READ,Tu.INSERT,Tu.UPDATE],Hee=[xee,...Bx];function kee(e){let t=ob();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Hx(e,t)}a(kee,"addRoleValidation");function Fee(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Hx(e,t)}a(Fee,"alterRoleValidation");function Gee(e){let t=ob();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xx.validateObject(e,t)}a(Gee,"dropRoleValidation");var qee=["operation","role","id","permission","hdb_user","access"];function Hx(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)qee.includes(n[o])||s.push(n[o]);s.length>0&&tr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=xx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{tr(o,r)}),e.permission){let o=$ee(e);o&&tr(o,r),Ux.forEach(c=>{e.permission[c]&&!gu.isBoolean(e.permission[c])&&tr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Ux.indexOf(o)<0){if(o===vee.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=>{Bee.includes(f)||tr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Tu).forEach(f=>{gu.isDefined(u[f])?gu.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=>{!Hee.includes(S)&&S!==Tu.DELETE&&tr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!gu.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}Bx.forEach(S=>{gu.isDefined(_[S])?gu.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 Vee(r)}a(Hx,"customValidate");kx.exports={addRoleValidation:kee,alterRoleValidation:Fee,dropRoleValidation:Gee};function $ee(e){let{operation:t,permission:r}=e;if(t===Su.OPERATIONS_ENUM.ADD_ROLE||t===Su.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?Su.ROLE_TYPES_ENUM.SUPER_USER:Su.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a($ee,"validateNoSUPerms");function Vee(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 Dee(new Error,n,Mee.BAD_REQUEST)}else return null}a(Vee,"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 h_=C((ONe,Vx)=>{"use strict";var Gx=En(),qx=Kr(),Kee=Dc(),cb=Fx(),lb=co(),bNe=require("uuid").v4,Yee=require("util"),mE=(H(),P($)),Wee=ae(),ub=qx.searchByValue,zee=qx.searchByHash,Qee=Yee.promisify(Kee.delete),jee=$s(),Jee=mu(),{hdb_errors:Xee,handleHDBError:Gc}=he(),{HDB_ERROR_MSGS:$x,HTTP_STATUS_CODES:__}=Xee,{UserEventMsg:db}=qs();Vx.exports={addRole:Zee,alterRole:ete,dropRole:tte,listRoles:rte};function ab(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(ab,"scrubRoleDetails");async function Zee(e){let t=cb.addRoleValidation(e);if(t)throw t;e=ab(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 ub(r)||[])}catch(i){throw Gc(i)}if(n&&n.length>0)throw Gc(new Error,$x.ROLE_ALREADY_EXISTS(e.role),__.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 Gx.insert(s),lb.signalUserChange(new db(process.pid)),e=ab(e),e}a(Zee,"addRole");async function ete(e){let t=cb.alterRoleValidation(e);if(t)throw t;e=ab(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Gx.update(r)}catch(s){throw Gc(s)}if(n&&n?.message==="updated 0 of 1 records")throw Gc(new Error,"Invalid role id",__.BAD_REQUEST,void 0,void 0,!0);return await lb.signalUserChange(new db(process.pid)),e}a(ete,"alterRole");async function tte(e){let t=cb.dropRoleValidation(e);if(t)throw Gc(new Error,t,__.BAD_REQUEST,void 0,void 0,!0);let r=new Jee(mE.SYSTEM_SCHEMA_NAME,mE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await zee(r));if(n.length===0)throw Gc(new Error,$x.ROLE_NOT_FOUND,__.NOT_FOUND,void 0,void 0,!0);let s=new jee(mE.SYSTEM_SCHEMA_NAME,mE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ub(s)),o=!1;if(Wee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Gc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,__.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Qee(c),lb.signalUserChange(new db(process.pid)),`${n[0].role} successfully deleted`}a(tte,"dropRole");async function rte(){return ub({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(rte,"listRoles")});var fb={};Ue(fb,{start:()=>Wx,startOnMainThread:()=>ite});function Wx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Kx.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(nte.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 ste(i)}}}async function ste(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,Yx.isEqual)(i,e)?void 0:(e.id=r.id,(0,pE.alterRole)(e))}return(0,pE.addRole)(e)}var pE,Kx,Yx,nte,ite,zx=be(()=>{ve();pE=M(h_()),Kx=require("yaml"),Yx=require("lodash"),nte=["super_user","cluster_user","structure_user"];a(Wx,"start");a(ste,"ensureRole");ite=Wx});async function EE(e){let t=(0,Jx.pathToFileURL)(e).toString();if(ote)return m_||(m_=ate(lte)),(await(await m_).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function ate(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),m_=new Compartment({console,Math,Date,fetch:cte,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,jx.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,Qx.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),m_}function cte(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function lte(){return{Resource:$r,tables:Vn}}var Qx,jx,Jx,ote,m_,_b=be(()=>{Zo();ve();Qx=require("fs/promises"),jx=require("path"),Jx=require("url"),ote=!1;a(EE,"secureImport");a(ate,"getCompartment");a(cte,"secureOnlyFetch");a(lte,"getGlobalVars")});var mb={};Ue(mb,{handleFile:()=>ute});async function ute(e,t,r,n){let s=new Map,i=await EE(r);c(i.default)&&n.set((0,hb.dirname)(t),i.default),o(i,(0,hb.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 hb,Xx=be(()=>{_b();hb=require("path");a(ute,"handleFile")});var Eb={};Ue(Eb,{start:()=>dte});function dte({resources:e}){e.set("login",pb),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var pb,Zx=be(()=>{Zo();a(dte,"start");pb=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 A_={};Ue(A_,{addAnalyticsListener:()=>T_,calculateCPUUtilization:()=>gB,diffResourceUsage:()=>SB,recordAction:()=>rr,recordActionBinary:()=>Kn,setAnalyticsEnabled:()=>fte});function fte(e){_B=e}function _te(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 hte(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},SE.set(e,o)}function rr(e,t,r,n,s){if(!_B)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=SE.get(i);o?_te(e,o):hte(i,e,t,r,n,s),gE||mte()}function Kn(e,t,r,n,s){rr(!!e,t,r,n,s)}function T_(e){pB.push(e)}function mte(){gE=performance.now(),setTimeout(async()=>{let e=performance.now()-gE;gE=0;let t=[],r={time:Date.now(),period:e,threadId:qc.threadId,metrics:t};for(let[s,i]of SE){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 EB){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 TB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:qc.threadId,byThread:!0,...n});for(let s of pB)s(t);SE=new Map,qc.parentPort?qc.parentPort.postMessage({type:mB,report:r}):yB({report:r})},hB).unref()}function TE(e,t,r){let n={id:(0,g_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function gB(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function SB(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 pte(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};TE(e,"table-size",l),$c.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function eB(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=fB.default.statSync(s.primaryStore.env.path).size,c=pte(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};TE(e,"database-size",u),$c.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){$c.warn?.("Error getting DB size metrics",s)}}function tB(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};TE(e,"storage-volume",o),$c.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){$c.warn?.("Error getting DB volume metrics",s)}}async function Ete(e,t=6e4){let r=Sb(),n=AB(),s=new Promise(E=>{let A=performance.now();setImmediate(()=>{let N=performance.now();N-A>5e3&&$c.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&&$c.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 TB()}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 EB){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,g_.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,g_.getNextMonotonicTime)(),A={id:E,metric:"main-thread-utilization",idle:_-rB,active:m-nB,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,A,{append:!0}).then(N=>{N||n.primaryStore.put(E,A)})}rB=_,nB=m;let S=process.resourceUsage(),g=SB(p_,S);g.time=h,g.period=p_.time?h-p_.time:t,g.cpuUtilization=gB(p_,g.period),TE(n,"resource-usage",g),p_=g;let R=Xe();eB(n,R),eB(n,{system:R.system}),tB(n,R),tB(n,{system:R.system})}async function sB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Sb(){return iB||(iB=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function AB(){return oB||(oB=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Tte(){RB=!0;let e=(0,S_.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Ete(hB,e),await sB(Sb(),gte),await sB(AB(),Ste)},Math.min(e/2,2147483647)).unref()}function yB(e,t){let r=e.report;r.threadId=t?.threadId||qc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(aB+=n.mean*n.count);r.totalBytesProcessed=aB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(cB.get(t))}),cB.set(t,t.performance.eventLoopUtilization())),r.id=(0,g_.getNextMonotonicTime)(),Sb().primaryStore.put(r.id,r),RB||Tte(),Ate&&(bB=yte(r))}async function yte(e){if(await bB,!ua){let r=(0,E_.dirname)((0,uB.getLogFilePath)());try{ua=await(0,gb.open)((0,E_.join)(r,"analytics.log"),"r+")}catch{ua=await(0,gb.open)((0,E_.join)(r,"analytics.log"),"w+")}}let t=(await ua.stat()).size;if(t>Rte){let r=Buffer.alloc(t);await ua.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ua.write(r,{position:0}),await ua.truncate(r.length),t=r.length}await ua.write(JSON.stringify(e)+`
20
20
  `,t)}var qc,lB,uB,dB,E_,gb,g_,S_,fB,$c,SE,_B,gE,hB,mB,pB,EB,rB,nB,p_,TB,gte,Ste,iB,oB,RB,aB,cB,Ate,bB,ua,Rte,wi=be(()=>{qc=require("worker_threads"),lB=M(nt());ve();uB=M(j()),dB=M(mi()),E_=require("path"),gb=require("fs/promises"),g_=M(un()),S_=M(ce());H();Gr();fB=M(require("node:fs")),$c=(0,dB.loggerWithTag)("analytics");(0,S_.initSync)();SE=new Map,_B=(0,S_.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(fte,"setAnalyticsEnabled");a(_te,"recordExistingAction");a(hte,"recordNewAction");a(rr,"recordAction");We.recordAnalytics=rr;a(Kn,"recordActionBinary");gE=0,hB=1e3,mB="analytics-report",pB=[];a(T_,"addAnalyticsListener");EB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(mte,"sendAnalytics");a(TE,"storeMetric");a(gB,"calculateCPUUtilization");a(SB,"diffResourceUsage");a(pte,"storeTableSizeMetrics");a(eB,"storeDBSizeMetrics");a(tB,"storeVolumeMetrics");a(Ete,"aggregation");rB=0,nB=0,p_={},TB=a(()=>new Promise(setImmediate),"rest");a(sB,"cleanup");gte=36e5,Ste=31536e6;a(Sb,"getRawAnalyticsTable");a(AB,"getAnalyticsTable");(0,lB.setChildListenerByType)(mB,yB);a(Tte,"startScheduledTasks");aB=0,cB=new Map,Ate=!1;a(yB,"recordAnalytics");Rte=1e6;a(yte,"logAnalytics")});var OB={};Ue(OB,{Headers:()=>fo,appendHeader:()=>AE,mergeHeaders:()=>Tb});function AE(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 Tb(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new fo(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 fo,R_=be(()=>{fo=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(AE,"appendHeader");a(Tb,"mergeHeaders")});function PB(e){let t={openapi:bte,info:{title:"HarperDB HTTP REST interface",version:CB.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:da+v.type}}:u[N]={$ref:da+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 bb(Ab[oe.type],oe.type)}),t.components.schemas[Y.type]=new IB(ee)}A==="array"?u[N]={type:"array",items:{$ref:da+Y.type}}:u[N]={$ref:da+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 bb(Ab[v.type],v.type)}:A==="Any"||A=="ID"?u[N]={format:A}:u[N]=new bb(Ab[A],A)}f.push(new Ob(N,"query",u[N]))}let d=Object.keys(u),h=new Ob(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new Ob("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new IB(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 Ote(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new Rb(f,r,{200:new yb({$ref:da+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new wB(f,r,"delete all the records that match the provided query",{204:new NB})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new Rb([h],r,{200:new yb({$ref:da+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new Nte([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 wB([h],r,"delete a record with the given primary key",{204:new NB})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new Rb([h,_],r,{200:new yb({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Ote(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:da+e}}}},this.security=t,this.responses={200:{description:Nb,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Rb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function yb(e){this.description=Nb,this.content={"application/json":{schema:e}}}function NB(){this.description="successfully processed request, no content returned to client"}function Nte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:da+r}}}},this.responses={200:{description:Nb}}}function wB(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function IB(e){this.type="object",this.properties=e}function bb(e,t){this.type=e,this.format=t}function Ob(e,t,r){this.name=e,this.in=t,this.schema=r}var CB,bte,Ab,da,Nb,DB=be(()=>{CB=M(pt()),bte="3.0.3",Ab={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},da="#/components/schemas/",Nb="successful operation";a(PB,"generateJsonApi");a(Ote,"Post");a(Rb,"Get");a(yb,"Response200");a(NB,"Response204");a(Nte,"Put");a(wB,"Delete");a(IB,"ResourceSchema");a(bb,"Type");a(Ob,"Parameter")});var yE={};Ue(yE,{parseHeaderValue:()=>Ib,start:()=>Cte});async function Ite(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Jm(e);let i=new fo;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==LB){let g=RE.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new fc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=Ib(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=Ib(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=Zi(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Au.ClientError(g,400)}if(e.authorize=!0,o===LB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return PB(RE);throw new Au.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 Au.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Au.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,wb.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=Tb(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=Nf(d.data,e,d)),d}else if(_=e.lastModified){wte[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),wb.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=Nf(d,e,m),s==="HEAD"&&(m.body=void 0)),m}catch(o){o.statusCode?o.statusCode===500?Ii.warn(o):Ii.info(o):Ii.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=Nf(o.contentType?o:o.toString(),e,c),c}}function Cte(e){wb=e,!MB&&(MB=!0,RE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Ite(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{y_++;let s=new Ln;vB||(vB=!0,T_(l=>{y_>0&&l.push({metric:"ws-connections",connections:y_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ii.warn(l)});let o;t.on("message",a(function(u){o||(o=Zi(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",()=>{y_--,Kn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=RE.getMatch(l,"ws");if(Kn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,rr(m=>({count:m.count,total:y_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new fc(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 na(_.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?Ii.warn(l):Ii.info(l):Ii.error(l),t.close(Pte[l.statusCode]||1011,l.toString())}t.close()},e))}function Ib(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 Ii,Au,Dr,wte,wb,LB,MB,RE,vB,y_,Pte,UB=be(()=>{ji();wi();Ii=M(j()),Au=M(he());Ef();Yl();dc();R_();DB();Ef();Dr=new Uint8Array(8),wte=new Float64Array(Dr.buffer,0,1),wb={},LB="openapi";a(Ite,"http");y_=0;a(Cte,"start");Pte={401:3e3,403:3003};a(Ib,"parseHeaderValue")});var Cb=C((ewe,BB)=>{var{recordAction:bE,recordActionBinary:xB}=(wi(),P(A_)),Dte=require("fastify-plugin"),Lte=200;BB.exports=Dte(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),bE(o,"duration",u,d,f),xB(s.raw.statusCode<400,"success",u,d,f),xB(1,"response_"+s.raw.statusCode,u,d,f);let h=Lte;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{bE(performance.now()-c,"transfer",u,d,f),bE(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,bE(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 kB=C((twe,HB)=>{var Mte=rt(),vte={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};HB.exports=function(e){return Mte.validateObject(e,vte)}});var OE=C((rwe,FB)=>{"use strict";var Ute=(H(),P($)).OPERATIONS_ENUM,Pb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Ute.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};FB.exports=Pb});var N_={};Ue(N_,{createTokens:()=>Bte,getJWTRSAKeys:()=>PE,refreshOperationToken:()=>Hte,validateOperationToken:()=>Mb,validateRefreshToken:()=>DE});async function PE(){if(NE)return NE;try{let e=b_.default.join(O_.default.getHdbBasePath(),ZT),t=await wE.default.readFile(b_.default.join(e,jd.JWT_PASSPHRASE_NAME),"utf8"),r=await wE.default.readFile(b_.default.join(e,jd.JWT_PRIVATE_KEY_NAME),"utf8");return NE={publicKey:await wE.default.readFile(b_.default.join(e,jd.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},NE}catch(e){throw CE.default.error(e),new Ks.ClientError(yu.NO_ENCRYPTION_KEYS,Ru.INTERNAL_SERVER_ERROR)}}async function Bte(e){let t=(0,Db.validateBySchema)(e,Ci.default.object({username:Ci.default.string().optional(),password:Ci.default.string().optional(),role:Ci.default.string().optional(),expires_in:Ci.default.alternatives(Ci.default.string(),Ci.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,Lb.findAndValidateUser)(e.username,e.password,d)}catch(d){throw CE.default.error(d),new Ks.ClientError(yu.INVALID_CREDENTIALS,Ru.UNAUTHORIZED)}if(!r)throw new Ks.ClientError(yu.INVALID_CREDENTIALS,Ru.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 PE(),c=await bu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??KB,algorithm:IE,subject:"operation"}),l=await bu.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:xte,algorithm:IE,subject:"refresh"}),u=ey(l,"sha256");if((await(0,GB.update)(new qB.default(Qd,Gl.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ks.ClientError(yu.REFRESH_TOKEN_SAVE_FAILED,Ru.INTERNAL_SERVER_ERROR);return $B.default.signalUserChange(new VB.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function Hte(e){let t=(0,Db.validateBySchema)(e,Ci.default.object({refresh_token:Ci.default.string().required()}).required());if(t)throw new Ks.ClientError(t.message);let{refresh_token:r}=e;await DE(r);let n=await PE(),s=await bu.default.decode(r);return{operation_token:await bu.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:KB,algorithm:IE,subject:"operation"})}}async function Mb(e){return YB(e,"operation")}async function DE(e){return YB(e,"refresh")}async function YB(e,t){try{let r=await PE(),n=await bu.default.verify(e,r.publicKey,{algorithms:IE,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,Lb.findAndValidateUser)(n.username,void 0,!1);if(t==="refresh"&&!ty(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw CE.default.warn(r),r?.name==="TokenExpiredError"?new Ks.ClientError(yu.TOKEN_EXPIRED,Ru.FORBIDDEN):new Ks.ClientError(yu.INVALID_TOKEN,Ru.UNAUTHORIZED)}}var bu,wE,b_,Ci,Db,Ks,CE,Lb,GB,qB,$B,VB,O_,Ru,yu,KB,xte,IE,NE,Ou=be(()=>{bu=M(require("jsonwebtoken")),wE=M(require("fs-extra")),b_=M(require("node:path")),Ci=M(require("joi")),Db=M(rt());H();Ks=M(he()),CE=M(j());Gp();Lb=M(Fn()),GB=M(En()),qB=M(OE()),$B=M(co()),VB=M(qs()),O_=M(ce()),{HTTP_STATUS_CODES:Ru,AUTHENTICATION_ERROR_MSGS:yu}=Ks.hdb_errors;O_.default.initSync();KB=O_.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",xte=O_.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",IE="RS256";a(PE,"getJWTRSAKeys");a(Bte,"createTokens");a(Hte,"refreshOperationToken");a(Mb,"validateOperationToken");a(DE,"validateRefreshToken");a(YB,"validateToken")});var vb=C((awe,QB)=>{"use strict";var kte=kB(),Nu=require("passport"),Fte=require("passport-local").Strategy,Gte=require("passport-http").BasicStrategy,qte=require("util"),$te=Fn(),zB=qte.callbackify($te.findAndValidateUser),owe=Cn(),Vte=(H(),P($)),WB=(Ou(),P(N_));Nu.use(new Fte(function(e,t,r){zB(e,t,r)}));Nu.use(new Gte(function(e,t,r){zB(e,t,r)}));Nu.serializeUser(function(e,t){t(null,e)});Nu.deserializeUser(function(e,t){t(null,e)});function Kte(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":Nu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Vte.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?WB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):WB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Kte,"authorize");function Yte(e,t){let r=kte(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(Yte,"checkPermissions");QB.exports={authorize:Kte,checkPermissions:Yte}});var LE=C((lwe,jB)=>{"use strict";var Wte=kn();jB.exports={writeTransaction:zte};function zte(e,t,r){return Wte.writeTransaction(e,t,r)}a(zte,"writeTransaction")});var eH=C((fwe,ZB)=>{"use strict";var Qte=Kr(),jte=ds(),JB=j(),Jte=En(),dwe=LE(),Xte=require("clone"),xb=require("alasql"),Zte=Mp(),XB=require("util"),ere=XB.promisify(jte.getTableSchema),tre=XB.promisify(Qte.search),rre=(H(),P($)),Ub=ae();Zte(xb);ZB.exports={update:sre};var nre="There was a problem performing this update. Please check the logs and try again.";async function sre({statement:e,hdb_user:t}){let r=await ere(e.table.databaseid,e.table.tableid),n=ire(e.columns);Ub.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Xte(s),c=Ub.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=xb.parse(l).statements[0],f=await tre(u),d=ore(n,f);return are(o,d,t)}a(sre,"update");function ire(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=xb.compile(`SELECT ${r.expression.toString()} AS [${rre.FUNC_VAL}] FROM ?`)}),t}catch(t){throw JB.error(t),new Error(nre)}}a(ire,"createUpdateRecord");function ore(e,t){return Ub.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(ore,"buildUpdateRecords");async function are(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Jte.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(are,"updateRecords")});var rH=C((pwe,tH)=>{var cre=require("alasql"),lre=Kr(),ure=j(),dre=kn(),Hb=require("util"),Bb=ae(),fre=(H(),P($)),_re=ds(),hwe=LE(),mwe=En(),hre="record",mre="successfully deleted",pre=Hb.callbackify(Tre),Ere=Hb.promisify(lre.search),gre=Hb.promisify(_re.getTableSchema);tH.exports={convertDelete:pre};function Sre(e){return`${e.deleted_hashes.length} ${hre}${e.deleted_hashes.length===1?"":"s"} ${mre}`}a(Sre,"generateReturnMessage");async function Tre({statement:e,hdb_user:t}){let r=await gre(e.table.databaseid,e.table.tableid);Bb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Bb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=cre.parse(o).statements[0],l={operation:fre.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Ere(c);let u=await dre.deleteRecords(l);return Bb.isEmptyOrZeroLength(u.message)&&(u.message=Sre(u)),delete u.txn_time,u}catch(u){throw ure.error(u),u.hdb_code?u.message:u}}a(Tre,"convertDelete")});var aH=C((gwe,oH)=>{"use strict";var Are=oo(),{hdb_errors:nH}=he(),{getDatabases:sH}=(ve(),P(it));oH.exports={checkSchemaExists:iH,checkSchemaTableExists:Rre,schema_describe:Are};async function iH(e){if(!sH()[e])return nH.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(iH,"checkSchemaExists");async function Rre(e,t){let r=await iH(e);if(r)return r;if(!sH()[e][t])return nH.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Rre,"checkSchemaTableExists")});var $b=C((ywe,SH)=>{"use strict";var{decode:yre}=require("msgpackr"),{isMainThread:Twe,parentPort:Awe,threadId:Rwe}=require("worker_threads"),UE=Er(),wu=It(),Gb=(H(),P($)),zr=j(),Fb=ce(),bre=(H(),P($)),{onMessageByType:Ore}=nt(),dH=io(),{recordAction:cH,recordActionBinary:Nre}=(wi(),P(A_)),{publishToStream:wre}=UE,{ConsumerEvents:lH}=require("nats"),Ire=Kr(),{promisify:Cre}=require("util"),{decodeBlobsWithWrites:Pre}=(cs(),P(_p)),fH=Cre(setTimeout),xE=1e4,BE,vE,Dre,Lre,_H,w_=new Map,Iu=new Map;SH.exports={initialize:hH,ingestConsumer:qb,setSubscription:Mre,setIgnoreOrigin:xre,getDatabaseSubscriptions:Ure,updateConsumer:mH};async function hH(){Ore(Gb.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await mH(n)}),_H=!0,zr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await UE.getNATSReferences();BE=e,vE=e.info.server_name,Dre=t,Lre=r}a(hH,"initialize");async function mH(e){if(e.status==="start"){let{js:t,jsm:r}=await pH(e.node_domain_name);qb(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=w_.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?.(),w_.set(e.stream_name+e.node_domain_name,"close")),Iu.get(e.node_domain_name)==="failed"&&Iu.set(e.node_domain_name,"close")}}a(mH,"updateConsumer");var HE=new Map;function Mre(e,t,r){let n=HE.get(e);n||HE.set(e,n=new Map),n.set(t,r),_H||hH().then(vre)}a(Mre,"setSubscription");async function vre(){let e=await Ire.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+wu.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await pH(r),!n))break;let{schema:o,table:c}=i,l=dH.createNatsTableStreamName(o,c);qb(l,n,s,r)}}}a(vre,"accessConsumers");async function pH(e){let t,r,n=1;for(;!r;)try{t=await BE.jetstream({domain:e}),r=await BE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Iu.get(e)==="close")break;Iu.set(e,"failed"),n%10===1&&zr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<xE?n++*100:xE;await fH(i)}return{js:t,jsm:r}}a(pH,"connectToRemoteJS");function Ure(){return HE}a(Ure,"getDatabaseSubscriptions");var EH;function xre(e){EH=e}a(xre,"setIgnoreOrigin");var gH=100,uH=new Array(gH),ME=0;async function qb(e,t,r,n){let{connection:s}=await UE.getNATSReferences();BE=s,vE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,vE),zr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Iu.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 UE.createConsumer(r,e,vE,new Date(Date.now()).toISOString()));let f=o++*100<xE?o++*100:xE;await fH(f)}let c=!1,l;for(;!c;){if(w_.get(e+n)==="close"||Iu.get(n)==="close"){w_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Fb.get(Gb.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),w_.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===lH.ConsumerDeleted&&(await l.close(),c=!0),f.type===lH.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 uH[ME],uH[ME]=Bre(f).catch(d=>{zr.error(d)}),++ME>=gH&&(ME=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(qb,"ingestConsumer");async function Bre(e){let t;await Pre(()=>{t=yre(e.data)}),cH(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=Fb.get(Gb.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(wu.MSG_HEADERS.TRANSACTED_NODES)&&r.values(wu.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(wu.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!EH),Nre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(wu.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(wu.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=HE.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:kb(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:kb(o),value:F,expiresAt:_,id:d?.[q],table:u}));for(;l;)v.push({type:kb(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})}Fb.get(bre.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&wre(e.subject.split(".").slice(0,-1).join("."),dH.createNatsTableStreamName(c,u),e.headers,e.data),await S;let N=Date.now()-g;g&&cH(N,"replication-latency",e.subject,o,"ingest")}catch(o){zr.error(o)}e.ack()}a(Bre,"messageProcessor");function kb(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(kb,"convertOperation")});var Er=C((Pwe,xH)=>{"use strict";var Or=ce();Or.initSync();var Hre=require("fs-extra"),kre=require("semver"),P_=require("path"),{monotonicFactory:Fre}=require("ulidx"),AH=Fre(),Gre=require("util"),RH=require("child_process"),qre=Gre.promisify(RH.exec),$re=RH.spawn,Lr=It(),Ke=(H(),P($)),{packageJson:Vre,PACKAGE_ROOT:Kre}=pt(),kE=ae(),Ys=j(),FE=io(),Yre=LE(),I_=Ot(),{broadcast:Wre,onMessageByType:zre,getWorkerIndex:Qre}=nt(),{isMainThread:yH}=require("worker_threads"),{Encoder:jre,decode:Wb}=require("msgpackr"),bH=new jre,{isEmpty:Wc}=kE,OH=Fn(),Owe=48*36e11;yH&&zre(Ke.ITC_EVENT_TYPES.RESTART,()=>{Qr=void 0,Yc=void 0});var{connect:Jre,StorageType:Xre,RetentionPolicy:Zre,AckPolicy:zb,DeliverPolicy:Qb,DiscardPolicy:ene,NatsConnection:Nwe,JetStreamManager:wwe,JetStreamClient:Iwe,StringCodec:Cwe,JSONCodec:tne,createInbox:jb,headers:rne,ErrorCode:TH}=require("nats"),{recordAction:nne}=(wi(),P(A_)),{encodeBlobsAsBuffers:sne}=(cs(),P(_p)),NH=tne(),ine="clustering",one=Vre.engines[Lr.NATS_SERVER_NAME],ane=P_.join(Kre,"dependencies"),Yb=P_.join(ane,`${process.platform}-${process.arch}`,Lr.NATS_BINARY_NAME),Vb,Kb,C_,Vc,Kc;xH.exports={runCommand:wH,checkNATSServerInstalled:cne,createConnection:Jb,getConnection:D_,getJetStreamManager:L_,getJetStream:CH,getNATSReferences:Pi,getServerList:une,createLocalStream:Xb,listStreams:PH,deleteLocalStream:dne,getServerConfig:Cu,listRemoteStreams:fne,viewStream:_ne,viewStreamIterator:hne,publishToStream:mne,request:gne,reloadNATS:Zb,reloadNATSHub:Sne,reloadNATSLeaf:Tne,extractServerName:Ene,requestErrorHandler:Ane,createLocalTableStream:vH,createTableStreams:bne,purgeTableStream:UH,purgeSchemaTableStreams:One,getStreamInfo:Nne,updateLocalStreams:Ine,closeConnection:lne,getJsmServerName:GE,addNatsMsgHeader:DH,clearClientCache:IH,updateRemoteConsumer:Rne,createConsumer:LH,updateConsumerIterator:yne};async function wH(e,t=void 0){let{stdout:r,stderr:n}=await qre(e,{cwd:t});if(n)throw new Error(n.replace(`
21
21
  `,""));return r.replace(`
22
- `,"")}a(wH,"runCommand");async function cne(){try{await Hre.access(Yb)}catch{return!1}let e=await wH(`${Yb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kre.eq(t,one)}a(cne,"checkNATSServerInstalled");async function Jb(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await OH.getClusterUser();if(Wc(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 Jre({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&&IH()}),i}a(Jb,"createConnection");function IH(){Qr=void 0,Vc=void 0,Kc=void 0,Yc=void 0}a(IH,"clearClientCache");async function lne(){Qr&&(await Qr.drain(),Qr=void 0,Vc=void 0,Kc=void 0,Yc=void 0)}a(lne,"closeConnection");var Qr,Yc;async function D_(){return Yc||(Yc=Jb(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await Yc),Qr||Yc}a(D_,"getConnection");async function L_(){if(Vc)return Vc;Wc(Qr)&&await D_();let{domain:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Wc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Vc=await Qr.jetstreamManager({domain:e,timeout:6e4}),Vc}a(L_,"getJetStreamManager");async function CH(){if(Kc)return Kc;Wc(Qr)&&await D_();let{domain:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Wc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Kc=Qr.jetstream({domain:e,timeout:6e4}),Kc}a(CH,"getJetStream");async function Pi(){let e=Qr||await D_(),t=Vc||await L_(),r=Kc||await CH();return{connection:e,jsm:t,js:r}}a(Pi,"getNATSReferences");async function une(e){let t=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await OH.getClusterUser(),s=await Jb(t,r,n),i=jb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=NH.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 kE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(une,"getServerList");async function Xb(e,t){let{jsm:r}=await Pi(),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:Xre.File,retention:Zre.Limits,subjects:t,discard:ene.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Xb,"createLocalStream");async function PH(){let{jsm:e}=await Pi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(PH,"listStreams");async function dne(e){let{jsm:t}=await Pi();await t.streams.delete(e)}a(dne,"deleteLocalStream");async function fne(e){let{connection:t}=await Pi(),r=[],n=jb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(NH.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(fne,"listRemoteStreams");async function _ne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pi(),i=AH(),o={durable_name:i,ack_policy:zb.Explicit};t&&(o.deliver_policy=Qb.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=Wb(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(_ne,"viewStream");async function*hne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pi(),i=AH(),o={durable_name:i,ack_policy:zb.Explicit};t&&(o.deliver_policy=Qb.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=Wb(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(hne,"viewStreamIterator");async function mne(e,t,r,n){Ys.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=DH(n,r);let{js:s}=await Pi(),i=await GE(),o=`${e}.${i}`,c=await sne(()=>n instanceof Uint8Array?n:bH.encode(n));try{Ys.trace(`publishToStream publishing to subject: ${o}`),nne(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 MH(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 Xb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(mne,"publishToStream");function DH(e,t){t===void 0&&(t=rne());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(DH,"addNatsMsgHeader");function Cu(e){e=e.toLowerCase();let t=P_.join(Or.get(Ke.CONFIG_PARAMS.ROOTPATH),ine);if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Wc(Kb)&&(Kb={port:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.HUB,config_file:Lr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:P_.join(t,Lr.PID_FILES.HUB),hdb_nats_path:t}),Kb;if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Wc(Vb)&&(Vb={port:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,config_file:Lr.NATS_CONFIG_FILES.LEAF_SERVER,domain:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,pid_file_path:P_.join(t,Lr.PID_FILES.LEAF),hdb_nats_path:t}),Vb;Ys.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Cu,"getServerConfig");async function LH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:zb.Explicit,durable_name:r,deliver_policy:Qb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(LH,"createConsumer");async function pne(e,t,r){await e.consumers.delete(t,r)}a(pne,"removeConsumer");function Ene(e){return e.split(".")[1]}a(Ene,"extractServerName");async function gne(e,t,r=6e4,n=jb()){if(!kE.isObject(t))throw new Error("data param must be an object");let s=bH.encode(t),{connection:i}=await Pi(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Wb(c.data)}a(gne,"request");function Zb(e){return new Promise(async(t,r)=>{let n=$re(Yb,["--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(Zb,"reloadNATS");async function Sne(){let{pid_file_path:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Zb(e)}a(Sne,"reloadNATSHub");async function Tne(){let{pid_file_path:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Zb(e)}a(Tne,"reloadNATSLeaf");function Ane(e,t,r){let n;switch(e.code){case TH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case TH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Ane,"requestErrorHandler");async function Rne(e,t){let r=t+Lr.SERVER_SUFFIX.LEAF,{connection:n}=await Pi(),{jsm:s}=await Pne(r),{schema:i,table:o}=e,c=FE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await MH(async()=>{if(e.subscribe===!0)await LH(s,c,n.info.server_name,l);else try{await pne(s,c,n.info.server_name)}catch(u){Ys.trace(u)}})}a(Rne,"updateRemoteConsumer");async function yne(e,t,r,n){let s=FE.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(!yH&&Qre()<Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=$b();await c(o)}await Wre(o),n==="stop"&&await kE.async_set_timeout(1e3)}a(yne,"updateConsumerIterator");function MH(e){return Yre.writeTransaction(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(MH,"exclusiveLock");async function vH(e,t){let r=FE.createNatsTableStreamName(e,t),n=await GE(),s=wne(e,t,n);await Xb(r,[s])}a(vH,"createLocalTableStream");async function bne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await vH(n,s)}}a(bne,"createTableStreams");async function UH(e,t,r=void 0){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=FE.createNatsTableStreamName(e,t),{domain:s}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await D_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ys.warn(n);else throw n}}a(UH,"purgeTableStream");async function One(e,t){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await UH(e,t[r])}a(One,"purgeSchemaTableStreams");async function Nne(e){return(await L_()).streams.info(e)}a(Nne,"getStreamInfo");function wne(e,t,r){return`${Lr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(wne,"createSubjectName");async function GE(){if(C_)return C_;if(C_=(await L_())?.nc?.info?.server_name,C_===void 0)throw new Error("Unable to get jetstream manager server name");return C_}a(GE,"getJsmServerName");async function Ine(){let e=await L_(),t=await GE(),r=await PH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Cne(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(Ine,"updateLocalStreams");function Cne(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(Cne,"updateStreamLimits");async function Pne(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(Pne,"connectToRemoteJS")});function eO(e){let t=e.get(qE),r=t?(0,Pu.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:v_(e)??1,nodes:[]})})}i[n]=0,e.putSync(qE,(0,Pu.pack)(r))}return r}function M_(e){return eO(e).remoteNameToId}function HH(e,t){let r=eO(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(qE,(0,Pu.pack)(r)),s}function $E(e,t){let r=eO(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(qE,(0,Pu.pack)(r))}return BH.trace?.("The remote node name map",e,n,s),s}var BH,Pu,qE,tO=be(()=>{BH=M(mi());fs();Pu=require("msgpackr"),qE=Symbol.for("remote-ids");a(eO,"getIdMappingRecord");a(M_,"exportIdMapping");a(HH,"remoteToLocalNodeId");a($E,"getIdOfRemoteNode")});var rO={};Ue(rO,{commits_awaiting_replication:()=>Lu,getHDBNodeTable:()=>nr,getReplicationSharedStatus:()=>VE,iterateRoutes:()=>x_,shouldReplicateToNode:()=>U_,subscribeToNodeUpdates:()=>Mu});function nr(){return kH||(kH=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 VE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Mu(e){nr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;$H.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 U_(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 Dne(){Mu(e=>{fa({},(t,r)=>{let n=e.name,s=FH.get(n);if(s||FH.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=VE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Lu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*x_(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=Du.default.get(x.REPLICATION_SECUREPORT)??(!Du.default.get(x.REPLICATION_PORT)&&Du.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||Du.default.get(x.REPLICATION_PORT)||Du.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){GH.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 GH,qH,Du,$H,kH,FH,Lu,zc=be(()=>{ve();fs();zm();GH=require("worker_threads"),qH=M(he()),Du=M(ce());H();$H=M(mi());server.nodes=[];a(nr,"getHDBNodeTable");a(VE,"getReplicationSharedStatus");a(Mu,"subscribeToNodeUpdates");a(U_,"shouldReplicateToNode");FH=new Map;kD((e,t,r)=>{if(r>server.nodes.length)throw new qH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Lu||(Lu=new Map,Dne());let n=Lu.get(e);return n||(n=[],Lu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Dne,"startSubscriptionToReplications");a(x_,"iterateRoutes")});var WH={};Ue(WH,{connectedToNode:()=>Qc,disconnectedFromNode:()=>xu,ensureNode:()=>ho,requestClusterStatus:()=>YH,startOnMainThread:()=>sO});async function sO(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){KE.set(i,v_(l.auditStore));break}}}Di.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of x_(e))try{let c=!o.subscriptions;if(c){let u=Ze(),f=nr().primaryStore.get(u);if(f!==null){let d=e.url??_a();(f===void 0||f.url!==d||f.shard!==e.shard)&&await ho(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)}Mu(s)});let n;function s(i,o=i?.name){let c=Ze()&&o===Ze()||_a()&&i?.url===_a();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 _o){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(_){_o.get(d).iterator.remove(),_o.delete(d);return}}return}if(c)return;if(!i.url){ot.info(`Node ${i.name} is missing url`);return}let l=_o.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 vu)if(i.url===h.url){vu.delete(d);break}vu.set(i.name,i)}let u=Xe();if(l||(l=new Map,_o.set(i.url,l)),l.iterator=fa(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}];KE.has(d)&&(S.push({replicateByDefault:h,name:Ze(),start_time:KE.get(d),end_time:Date.now(),replicates:!0}),KE.delete(d));let g=U_(i,d),R=Di.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):Uu(E)},Lne);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):WE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),xu=a(function(i){try{ot.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(vu.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=_o.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=vu.get(_);u=_o.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}):Uu({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"),Qc=a(function(i){let o=_o.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}):Uu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Di.onMessageByType)("disconnected-from-node",xu),(0,Di.onMessageByType)("connected-to-node",Qc),(0,Di.onMessageByType)("request-cluster-status",YH)}function YH(e,t){let r=[];for(let[n,s]of vu)try{let i=_o.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,nO.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 ho(e,t){let r=nr();e=e??Ws(t.url),t.name=e;try{if(t.ca){let s=new KH.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&&!VH.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,nO.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 Di,YE,ot,nO,VH,KH,Lne,_o,xu,Qc,vu,KE,B_=be(()=>{ve();Di=M(nt());fs();YE=require("worker_threads");zc();ot=M(j()),nO=require("lodash"),VH=M(ce());H();KH=require("crypto"),Lne=200,_o=new Map,vu=new Map,KE=new Map;a(sO,"startOnMainThread");a(YH,"requestClusterStatus");YE.parentPort&&(xu=a(e=>{YE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Qc=a(e=>{YE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Di.onMessageByType)("subscribe-to-node",e=>{Uu(e)}),(0,Di.onMessageByType)("unsubscribe-from-node",e=>{WE(e)}));a(ho,"ensureNode")});var js=C(pk=>{"use strict";var sr=require("path"),Tn=require("fs-extra"),Bu=require("node-forge"),ZH=require("net"),{generateKeyPair:oO,X509Certificate:mo,createPrivateKey:ek}=require("crypto"),Mne=require("util");oO=Mne.promisify(oO);var At=Bu.pki,zs=require("joi"),{v4:tk}=require("uuid"),{validateBySchema:uO}=rt(),ft=j(),_s=ce(),hs=(H(),P($)),{CONFIG_PARAMS:Hu}=hs,Qs=_A(),{ClientError:ma}=he(),zE=require("node:tls"),{relative:rk,join:vne}=require("node:path"),{CERT_PREFERENCE_APP:Wwe,CERTIFICATE_VALUES:zH}=Qs,Une=ic(),aO=Ot(),{table:xne,getDatabases:Bne,databases:iO}=(ve(),P(it)),{getJWTRSAKeys:QH}=(Ou(),P(N_));Object.assign(pk,{generateKeys:_O,updateConfigCert:uk,createCsr:Kne,signCertificate:Yne,setCertTable:ku,loadCertificates:ak,reviewSelfSignedCert:mO,createTLSSelector:fk,listCertificates:hk,addCertificate:Xne,removeCertificate:ese,createNatsCerts:Qne,generateCertsKeys:zne,getReplicationCert:k_,getReplicationCertAuth:Vne,renewSelfSigned:jne,hostnamesFromCert:mk,getKey:tse});var{urlToNodeName:nk,getThisNodeUrl:Hne,getThisNodeName:jE,clearThisNodeName:kne}=(fs(),P(ga)),{readFileSync:Fne,watchFile:Gne,statSync:sk}=require("node:fs"),zwe=ce(),{getTicketKeys:qne,onMessageFromWorkers:$ne}=nt(),ha=j(),{isMainThread:ik}=require("worker_threads"),{TLSSocket:ok,createSecureContext:Qwe}=require("node:tls"),dO=3650,H_=["127.0.0.1","localhost","::1"],fO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];$ne(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await mO())});var Mr;function Ea(){return Mr||(Mr=Bne().system.hdb_certificate,Mr||(Mr=xne({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(Ea,"getCertTable");async function k_(){let e=fk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(jE());if(!r)return;let n=new mo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(k_,"getReplicationCert");async function Vne(){Ea();let e=(await k_()).options.cert,r=new mo(e).issuer.match(/CN=(.*)/)?.[1];return Mr.get(r)}a(Vne,"getReplicationCertAuth");var jH,pa=new Map;function ak(){if(jH)return;jH=!0;let e=[{configKey:Hu.TLS},{configKey:Hu.OPERATIONSAPI_TLS}];Ea();let t=sr.dirname(aO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=aO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&rk(vne(t,"keys"),o);c&&JH(o,l=>{pa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&ik){let f;JH(u,d=>{if(zH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=dk(u),m=new mo(_),S;try{S=pO(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 mo(zH.cert)))return;let g=Mr.primaryStore.get(S),R=sk(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(ak,"loadCertificates");function JH(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&ik&&ft.warn(`Reloading ${r}:`,e),n=c,t(dk(e)))}catch(c){ft.error(`Error loading ${r}:`,e,c)}},"loadFile");Tn.existsSync(e)?s(sk(e)):ft.error(`${r} file not found:`,e),Gne(e,{persistent:!1},s)}a(JH,"loadAndWatch");function cO(){let e=Hne();if(e==null){let t=H_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return nk(e)}a(cO,"getHost");function QE(){let e=jE();if(e==null){let t=H_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(QE,"getCommonName");async function Kne(){let e=await k_(),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:QE()},...fO];ft.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:ck()}];return ft.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Bu.pki.certificationRequestToPem(n)}a(Kne,"createCsr");function ck(){let e=H_.includes(QE())?H_:[...H_,QE()];return e.includes(cO())||e.push(cO()),[{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=>ZH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(ck,"certExtensions");async function Yne(e){let t={},r=sr.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ea();for await(let f of Mr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(pa.has(f.private_key_name)){n=pa.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 lO();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=Bu.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()+dO),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,Bu.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(Yne,"signCertificate");async function Wne(e,t){await ku({name:jE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await ku({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:At.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Wne,"createCertificateTable");async function ku(e){let t=new mo(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},Ea(),await Mr.patch(e)}a(ku,"setCertTable");async function _O(){let e=await oO("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(_O,"generateKeys");async function hO(e,t,r){let n=At.createCertificate();if(!t){let o=await k_();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()+dO);let i=[{name:"commonName",value:QE()},...fO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(ck()),n.sign(e,Bu.md.sha256.create()),At.certificateToPem(n)}a(hO,"generateCertificates");async function lO(){let e=await hk(),t;for(let r of e){if(!r.is_authority)continue;let n=await _k(r.private_key_name);if(r.private_key_name&&n&&new mo(r.certificate).checkPrivateKey(ek(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(lO,"getCertAuthority");async function lk(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()+dO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(Hu.REPLICATION_HOSTNAME)??nk(_s.get(Hu.REPLICATION_URL))??tk().split("-")[0]}`},...fO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Bu.md.sha256.create());let o=sr.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=sr.join(o,Qs.PRIVATEKEY_PEM_NAME);return r&&await Tn.writeFile(c,At.privateKeyToPem(e)),n}a(lk,"generateCertAuthority");async function zne(){let{private_key:e,public_key:t}=await _O(),r=await lk(e,t),n=await hO(e,t,r);await Wne(n,r),uk()}a(zne,"generateCertsKeys");async function Qne(){let e=await hO(At.privateKeyFromPem(Qs.CERTIFICATE_VALUES.key),void 0,At.certificateFromPem(Qs.CERTIFICATE_VALUES.cert)),t=sr.join(_s.getHdbBasePath(),hs.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(Qne,"createNatsCerts");async function jne(){Ea();for await(let e of Mr.search([{attribute:"is_self_signed",value:!0}]))await Mr.delete(e.name);await mO()}a(jne,"renewSelfSigned");async function mO(){kne(),await ak(),Ea();let e=await lO();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=_s.get(Hu.TLS_PRIVATEKEY),n=sr.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=rk(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 _O(),await Tn.exists(sr.join(n,Qs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${tk().split("-")[0]}.pem`),await Tn.writeFile(sr.join(n,i),At.privateKeyToPem(s))}let o=await lk(s,At.setRsaPublicKey(s.n,s.e),!1);await ku({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 k_()){let r=jE();ft.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await lO();let n=At.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await hO(At.privateKeyFromPem(e.private_key),s,n);await ku({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(mO,"reviewSelfSignedCert");function uk(){let e=Une(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=sr.join(_s.getHdbBasePath(),hs.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=hs.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),aO.updateConfigValue(void 0,void 0,o,!1,!0)}a(uk,"updateConfigCert");function dk(e){return e.startsWith("-----BEGIN")?e:Fne(e,"utf8")}a(dk,"readPEM");var XH=zE.createSecureContext;zE.createSecureContext=function(e){if(!e.cert||!e.key)return XH(e);let t={...e};delete t.key,delete t.cert;let r=XH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Jne=ok.prototype._init;ok.prototype._init=function(e,t){Jne.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 jc=new Map;function fk(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(),jc.clear();let f=0;for await(let d of iO.system.hdb_certificate.search([])){let h=d.certificate,_=new mo(h);d.is_authority&&(_.asString=h,jc.set(_.subject,h))}for await(let d of iO.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 _k(d.private_key_name),S=d.certificate,g=new mo(S);if(jc.has(g.issuer)&&(S+=`
22
+ `,"")}a(wH,"runCommand");async function cne(){try{await Hre.access(Yb)}catch{return!1}let e=await wH(`${Yb} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kre.eq(t,one)}a(cne,"checkNATSServerInstalled");async function Jb(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await OH.getClusterUser();if(Wc(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 Jre({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&&IH()}),i}a(Jb,"createConnection");function IH(){Qr=void 0,Vc=void 0,Kc=void 0,Yc=void 0}a(IH,"clearClientCache");async function lne(){Qr&&(await Qr.drain(),Qr=void 0,Vc=void 0,Kc=void 0,Yc=void 0)}a(lne,"closeConnection");var Qr,Yc;async function D_(){return Yc||(Yc=Jb(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Qr=await Yc),Qr||Yc}a(D_,"getConnection");async function L_(){if(Vc)return Vc;Wc(Qr)&&await D_();let{domain:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Wc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Vc=await Qr.jetstreamManager({domain:e,timeout:6e4}),Vc}a(L_,"getJetStreamManager");async function CH(){if(Kc)return Kc;Wc(Qr)&&await D_();let{domain:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Wc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Kc=Qr.jetstream({domain:e,timeout:6e4}),Kc}a(CH,"getJetStream");async function Pi(){let e=Qr||await D_(),t=Vc||await L_(),r=Kc||await CH();return{connection:e,jsm:t,js:r}}a(Pi,"getNATSReferences");async function une(e){let t=Or.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await OH.getClusterUser(),s=await Jb(t,r,n),i=jb(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=NH.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 kE.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(une,"getServerList");async function Xb(e,t){let{jsm:r}=await Pi(),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:Xre.File,retention:Zre.Limits,subjects:t,discard:ene.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Xb,"createLocalStream");async function PH(){let{jsm:e}=await Pi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(PH,"listStreams");async function dne(e){let{jsm:t}=await Pi();await t.streams.delete(e)}a(dne,"deleteLocalStream");async function fne(e){let{connection:t}=await Pi(),r=[],n=jb(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(NH.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(fne,"listRemoteStreams");async function _ne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pi(),i=AH(),o={durable_name:i,ack_policy:zb.Explicit};t&&(o.deliver_policy=Qb.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=Wb(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(_ne,"viewStream");async function*hne(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pi(),i=AH(),o={durable_name:i,ack_policy:zb.Explicit};t&&(o.deliver_policy=Qb.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=Wb(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(hne,"viewStreamIterator");async function mne(e,t,r,n){Ys.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=DH(n,r);let{js:s}=await Pi(),i=await GE(),o=`${e}.${i}`,c=await sne(()=>n instanceof Uint8Array?n:bH.encode(n));try{Ys.trace(`publishToStream publishing to subject: ${o}`),nne(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 MH(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 Xb(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(mne,"publishToStream");function DH(e,t){t===void 0&&(t=rne());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(DH,"addNatsMsgHeader");function Cu(e){e=e.toLowerCase();let t=P_.join(Or.get(Ke.CONFIG_PARAMS.ROOTPATH),ine);if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Wc(Kb)&&(Kb={port:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.HUB,config_file:Lr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:P_.join(t,Lr.PID_FILES.HUB),hdb_nats_path:t}),Kb;if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Wc(Vb)&&(Vb={port:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,config_file:Lr.NATS_CONFIG_FILES.LEAF_SERVER,domain:I_.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Lr.SERVER_SUFFIX.LEAF,pid_file_path:P_.join(t,Lr.PID_FILES.LEAF),hdb_nats_path:t}),Vb;Ys.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Cu,"getServerConfig");async function LH(e,t,r,n){try{await e.consumers.add(t,{ack_policy:zb.Explicit,durable_name:r,deliver_policy:Qb.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(LH,"createConsumer");async function pne(e,t,r){await e.consumers.delete(t,r)}a(pne,"removeConsumer");function Ene(e){return e.split(".")[1]}a(Ene,"extractServerName");async function gne(e,t,r=6e4,n=jb()){if(!kE.isObject(t))throw new Error("data param must be an object");let s=bH.encode(t),{connection:i}=await Pi(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Wb(c.data)}a(gne,"request");function Zb(e){return new Promise(async(t,r)=>{let n=$re(Yb,["--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(Zb,"reloadNATS");async function Sne(){let{pid_file_path:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Zb(e)}a(Sne,"reloadNATSHub");async function Tne(){let{pid_file_path:e}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Zb(e)}a(Tne,"reloadNATSLeaf");function Ane(e,t,r){let n;switch(e.code){case TH.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case TH.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Ane,"requestErrorHandler");async function Rne(e,t){let r=t+Lr.SERVER_SUFFIX.LEAF,{connection:n}=await Pi(),{jsm:s}=await Pne(r),{schema:i,table:o}=e,c=FE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await MH(async()=>{if(e.subscribe===!0)await LH(s,c,n.info.server_name,l);else try{await pne(s,c,n.info.server_name)}catch(u){Ys.trace(u)}})}a(Rne,"updateRemoteConsumer");async function yne(e,t,r,n){let s=FE.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(!yH&&Qre()<Or.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=$b();await c(o)}await Wre(o),n==="stop"&&await kE.async_set_timeout(1e3)}a(yne,"updateConsumerIterator");function MH(e){return Yre.writeTransaction(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(MH,"exclusiveLock");async function vH(e,t){let r=FE.createNatsTableStreamName(e,t),n=await GE(),s=wne(e,t,n);await Xb(r,[s])}a(vH,"createLocalTableStream");async function bne(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await vH(n,s)}}a(bne,"createTableStreams");async function UH(e,t,r=void 0){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=FE.createNatsTableStreamName(e,t),{domain:s}=Cu(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await D_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ys.warn(n);else throw n}}a(UH,"purgeTableStream");async function One(e,t){if(Or.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await UH(e,t[r])}a(One,"purgeSchemaTableStreams");async function Nne(e){return(await L_()).streams.info(e)}a(Nne,"getStreamInfo");function wne(e,t,r){return`${Lr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(wne,"createSubjectName");async function GE(){if(C_)return C_;if(C_=(await L_())?.nc?.info?.server_name,C_===void 0)throw new Error("Unable to get jetstream manager server name");return C_}a(GE,"getJsmServerName");async function Ine(){let e=await L_(),t=await GE(),r=await PH();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Cne(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(Ine,"updateLocalStreams");function Cne(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(Cne,"updateStreamLimits");async function Pne(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(Pne,"connectToRemoteJS")});function eO(e){let t=e.get(qE),r=t?(0,Pu.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:v_(e)??1,nodes:[]})})}i[n]=0,e.putSync(qE,(0,Pu.pack)(r))}return r}function M_(e){return eO(e).remoteNameToId}function HH(e,t){let r=eO(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(qE,(0,Pu.pack)(r)),s}function $E(e,t){let r=eO(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(qE,(0,Pu.pack)(r))}return BH.trace?.("The remote node name map",e,n,s),s}var BH,Pu,qE,tO=be(()=>{BH=M(mi());fs();Pu=require("msgpackr"),qE=Symbol.for("remote-ids");a(eO,"getIdMappingRecord");a(M_,"exportIdMapping");a(HH,"remoteToLocalNodeId");a($E,"getIdOfRemoteNode")});var rO={};Ue(rO,{commits_awaiting_replication:()=>Lu,getHDBNodeTable:()=>nr,getReplicationSharedStatus:()=>VE,iterateRoutes:()=>x_,shouldReplicateToNode:()=>U_,subscribeToNodeUpdates:()=>Mu});function nr(){return kH||(kH=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 VE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function Mu(e){nr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;$H.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 U_(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 Dne(){Mu(e=>{fa({},(t,r)=>{let n=e.name,s=FH.get(n);if(s||FH.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=VE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of Lu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*x_(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=Du.default.get(x.REPLICATION_SECUREPORT)??(!Du.default.get(x.REPLICATION_PORT)&&Du.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||Du.default.get(x.REPLICATION_PORT)||Du.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){GH.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 GH,qH,Du,$H,kH,FH,Lu,zc=be(()=>{ve();fs();zm();GH=require("worker_threads"),qH=M(he()),Du=M(ce());H();$H=M(mi());server.nodes=[];a(nr,"getHDBNodeTable");a(VE,"getReplicationSharedStatus");a(Mu,"subscribeToNodeUpdates");a(U_,"shouldReplicateToNode");FH=new Map;kD((e,t,r)=>{if(r>server.nodes.length)throw new qH.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Lu||(Lu=new Map,Dne());let n=Lu.get(e);return n||(n=[],Lu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Dne,"startSubscriptionToReplications");a(x_,"iterateRoutes")});var WH={};Ue(WH,{connectedToNode:()=>Qc,disconnectedFromNode:()=>xu,ensureNode:()=>ho,requestClusterStatus:()=>YH,startOnMainThread:()=>sO});async function sO(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){KE.set(i,v_(l.auditStore));break}}}Di.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes?.search([])||[])i.push(o);for(let o of x_(e))try{let c=!o.subscriptions;if(c){let u=Ze(),f=nr().primaryStore.get(u);if(f!==null){let d=e.url??_a();(f===void 0||f.url!==d||f.shard!==e.shard)&&await ho(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)}Mu(s)});let n;function s(i,o=i?.name){let c=Ze()&&o===Ze()||_a()&&i?.url===_a();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 _o){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(_){_o.get(d).iterator.remove(),_o.delete(d);return}}return}if(c)return;if(!i.url){ot.info(`Node ${i.name} is missing url`);return}let l=_o.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 vu)if(i.url===h.url){vu.delete(d);break}vu.set(i.name,i)}let u=Xe();if(l||(l=new Map,_o.set(i.url,l)),l.iterator=fa(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}];KE.has(d)&&(S.push({replicateByDefault:h,name:Ze(),start_time:KE.get(d),end_time:Date.now(),replicates:!0}),KE.delete(d));let g=U_(i,d),R=Di.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):Uu(E)},Lne);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):WE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),xu=a(function(i){try{ot.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(vu.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=_o.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=vu.get(_);u=_o.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}):Uu({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"),Qc=a(function(i){let o=_o.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}):Uu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Di.onMessageByType)("disconnected-from-node",xu),(0,Di.onMessageByType)("connected-to-node",Qc),(0,Di.onMessageByType)("request-cluster-status",YH)}function YH(e,t){let r=[];for(let[n,s]of vu)try{let i=_o.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,nO.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 ho(e,t){let r=nr();e=e??Ws(t.url),t.name=e;try{if(t.ca){let s=new KH.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&&!VH.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,nO.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 Di,YE,ot,nO,VH,KH,Lne,_o,xu,Qc,vu,KE,B_=be(()=>{ve();Di=M(nt());fs();YE=require("worker_threads");zc();ot=M(j()),nO=require("lodash"),VH=M(ce());H();KH=require("crypto"),Lne=200,_o=new Map,vu=new Map,KE=new Map;a(sO,"startOnMainThread");a(YH,"requestClusterStatus");YE.parentPort&&(xu=a(e=>{YE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Qc=a(e=>{YE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Di.onMessageByType)("subscribe-to-node",e=>{Uu(e)}),(0,Di.onMessageByType)("unsubscribe-from-node",e=>{WE(e)}));a(ho,"ensureNode")});var js=C(pk=>{"use strict";var sr=require("path"),{watch:Mne}=require("chokidar"),Tn=require("fs-extra"),Bu=require("node-forge"),ZH=require("net"),{generateKeyPair:oO,X509Certificate:mo,createPrivateKey:ek}=require("crypto"),vne=require("util");oO=vne.promisify(oO);var At=Bu.pki,zs=require("joi"),{v4:tk}=require("uuid"),{validateBySchema:uO}=rt(),ft=j(),_s=ce(),hs=(H(),P($)),{CONFIG_PARAMS:Hu}=hs,Qs=_A(),{ClientError:ma}=he(),zE=require("node:tls"),{relative:rk,join:Une}=require("node:path"),{CERT_PREFERENCE_APP:Wwe,CERTIFICATE_VALUES:zH}=Qs,xne=ic(),aO=Ot(),{table:Bne,getDatabases:Hne,databases:iO}=(ve(),P(it)),{getJWTRSAKeys:QH}=(Ou(),P(N_));Object.assign(pk,{generateKeys:_O,updateConfigCert:uk,createCsr:Kne,signCertificate:Yne,setCertTable:ku,loadCertificates:ak,reviewSelfSignedCert:mO,createTLSSelector:fk,listCertificates:hk,addCertificate:Xne,removeCertificate:ese,createNatsCerts:Qne,generateCertsKeys:zne,getReplicationCert:k_,getReplicationCertAuth:Vne,renewSelfSigned:jne,hostnamesFromCert:mk,getKey:tse});var{urlToNodeName:nk,getThisNodeUrl:kne,getThisNodeName:jE,clearThisNodeName:Fne}=(fs(),P(ga)),{readFileSync:Gne,statSync:sk}=require("node:fs"),zwe=ce(),{getTicketKeys:qne,onMessageFromWorkers:$ne}=nt(),ha=j(),{isMainThread:ik}=require("worker_threads"),{TLSSocket:ok,createSecureContext:Qwe}=require("node:tls"),dO=3650,H_=["127.0.0.1","localhost","::1"],fO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];$ne(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await mO())});var Mr;function Ea(){return Mr||(Mr=Hne().system.hdb_certificate,Mr||(Mr=Bne({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(Ea,"getCertTable");async function k_(){let e=fk("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(jE());if(!r)return;let n=new mo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(k_,"getReplicationCert");async function Vne(){Ea();let e=(await k_()).options.cert,r=new mo(e).issuer.match(/CN=(.*)/)?.[1];return Mr.get(r)}a(Vne,"getReplicationCertAuth");var jH,pa=new Map;function ak(){if(jH)return;jH=!0;let e=[{configKey:Hu.TLS},{configKey:Hu.OPERATIONSAPI_TLS}];Ea();let t=sr.dirname(aO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=aO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&rk(Une(t,"keys"),o);c&&JH(o,l=>{pa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&ik){let f;JH(u,d=>{if(zH.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=dk(u),m=new mo(_),S;try{S=pO(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 mo(zH.cert)))return;let g=Mr.primaryStore.get(S),R=sk(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(ak,"loadCertificates");function JH(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&ik&&ft.warn(`Reloading ${r}:`,i),n=c,t(dk(i)))}catch(c){ft.error(`Error loading ${r}:`,i,c)}},"loadFile");Tn.existsSync(e)?s(e,sk(e)):ft.error(`${r} file not found:`,e),Mne(e,{persistent:!1}).on("change",s)}a(JH,"loadAndWatch");function cO(){let e=kne();if(e==null){let t=H_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return nk(e)}a(cO,"getHost");function QE(){let e=jE();if(e==null){let t=H_[0];return ft.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(QE,"getCommonName");async function Kne(){let e=await k_(),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:QE()},...fO];ft.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:ck()}];return ft.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Bu.pki.certificationRequestToPem(n)}a(Kne,"createCsr");function ck(){let e=H_.includes(QE())?H_:[...H_,QE()];return e.includes(cO())||e.push(cO()),[{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=>ZH.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(ck,"certExtensions");async function Yne(e){let t={},r=sr.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ea();for await(let f of Mr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(pa.has(f.private_key_name)){n=pa.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 lO();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=Bu.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()+dO),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,Bu.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(Yne,"signCertificate");async function Wne(e,t){await ku({name:jE(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await ku({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:At.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Wne,"createCertificateTable");async function ku(e){let t=new mo(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},Ea(),await Mr.patch(e)}a(ku,"setCertTable");async function _O(){let e=await oO("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(_O,"generateKeys");async function hO(e,t,r){let n=At.createCertificate();if(!t){let o=await k_();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()+dO);let i=[{name:"commonName",value:QE()},...fO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(ck()),n.sign(e,Bu.md.sha256.create()),At.certificateToPem(n)}a(hO,"generateCertificates");async function lO(){let e=await hk(),t;for(let r of e){if(!r.is_authority)continue;let n=await _k(r.private_key_name);if(r.private_key_name&&n&&new mo(r.certificate).checkPrivateKey(ek(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(lO,"getCertAuthority");async function lk(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()+dO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(Hu.REPLICATION_HOSTNAME)??nk(_s.get(Hu.REPLICATION_URL))??tk().split("-")[0]}`},...fO];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Bu.md.sha256.create());let o=sr.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=sr.join(o,Qs.PRIVATEKEY_PEM_NAME);return r&&await Tn.writeFile(c,At.privateKeyToPem(e)),n}a(lk,"generateCertAuthority");async function zne(){let{private_key:e,public_key:t}=await _O(),r=await lk(e,t),n=await hO(e,t,r);await Wne(n,r),uk()}a(zne,"generateCertsKeys");async function Qne(){let e=await hO(At.privateKeyFromPem(Qs.CERTIFICATE_VALUES.key),void 0,At.certificateFromPem(Qs.CERTIFICATE_VALUES.cert)),t=sr.join(_s.getHdbBasePath(),hs.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(Qne,"createNatsCerts");async function jne(){Ea();for await(let e of Mr.search([{attribute:"is_self_signed",value:!0}]))await Mr.delete(e.name);await mO()}a(jne,"renewSelfSigned");async function mO(){Fne(),await ak(),Ea();let e=await lO();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=_s.get(Hu.TLS_PRIVATEKEY),n=sr.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=rk(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 _O(),await Tn.exists(sr.join(n,Qs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${tk().split("-")[0]}.pem`),await Tn.writeFile(sr.join(n,i),At.privateKeyToPem(s))}let o=await lk(s,At.setRsaPublicKey(s.n,s.e),!1);await ku({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 k_()){let r=jE();ft.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await lO();let n=At.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await hO(At.privateKeyFromPem(e.private_key),s,n);await ku({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(mO,"reviewSelfSignedCert");function uk(){let e=xne(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=sr.join(_s.getHdbBasePath(),hs.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=hs.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),aO.updateConfigValue(void 0,void 0,o,!1,!0)}a(uk,"updateConfigCert");function dk(e){return e.startsWith("-----BEGIN")?e:Gne(e,"utf8")}a(dk,"readPEM");var XH=zE.createSecureContext;zE.createSecureContext=function(e){if(!e.cert||!e.key)return XH(e);let t={...e};delete t.key,delete t.cert;let r=XH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Jne=ok.prototype._init;ok.prototype._init=function(e,t){Jne.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 jc=new Map;function fk(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(),jc.clear();let f=0;for await(let d of iO.system.hdb_certificate.search([])){let h=d.certificate,_=new mo(h);d.is_authority&&(_.asString=h,jc.set(_.subject,h))}for await(let d of iO.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 _k(d.private_key_name),S=d.certificate,g=new mo(S);if(jc.has(g.issuer)&&(S+=`
23
23
  `+jc.get(g.issuer)),!m||!S)throw new Error("Missing private key or certificate for secure server");let R={ciphers:d.ciphers,ticketKeys:qne(),availableCAs:jc,ca:t&&Array.from(jc.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=zE.createSecureContext(R);E.name=d.name,E.options=R,E.quality=_,E.certificateAuthorities=Array.from(jc),E.certStart=S.toString().slice(0,100);let A=d.hostnames??mk(g);Array.isArray(A)||(A=[A]);let N;for(let v of A)if(v){v[0]==="*"&&(s=!0,v=v.slice(1)),v===cO()&&(_+=2),ZH.isIP(v)&&(N=!0);let F=r.get(v)?.quality??0;_>F&&r.set(v,E)}else ha.error("No hostname found for certificate at",zE.certificate);ha.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){ha.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),iO.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ha.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return ha.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?ha.debug("No certificate found to match",o,"using the default certificate"):ha.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):ha.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(fk,"createTLSSelector");async function _k(e){let t=pa.get(e);return!t&&e?await Tn.readFile(sr.join(_s.get(Hu.ROOTPATH),hs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(_k,"getPrivateKeyByName");async function hk(){Ea();let e=[];for await(let t of Mr.search([]))e.push(t);return e}a(hk,"listCertificates");async function Xne(e){let t=uO(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 ma(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new mo(n),c=!1,l=!1,u;for(let[_,m]of pa)!s&&!c&&o.checkPrivateKey(ek(m))&&(c=!0,u=_),s&&s===m&&(l=!0,u=_);if(!i&&!s&&!c)throw new ma("A suitable private key was not found for this certificate");let f;if(!r){try{f=pO(o)}catch(_){ft.error(_)}if(f==null)throw new ma("Error extracting certificate common name, please provide a name parameter")}let d=Zne(r??f);s&&!c&&!l&&(await Tn.writeFile(sr.join(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,d+".pem"),s),pa.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 ku(h),"Successfully added certificate: "+d}a(Xne,"addCertificate");function Zne(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Zne,"sanitizeName");async function ese(e){let t=uO(e,zs.object({name:zs.string().required()}));if(t)throw new ma(t.message);let{name:r}=e;Ea();let n=await Mr.get(r);if(!n)throw new ma(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(_s.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME,s)))}return await Mr.delete(r),"Successfully removed "+r}a(ese,"removeCertificate");function pO(e){return e.subject.match(/CN=(.*)/)?.[1]}a(pO,"extractCommonName");function mk(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):[pO(e)]}a(mk,"hostnamesFromCert");async function tse(e){if(e.bypass_auth!==!0)throw new ma("Unauthorized","401");let t=uO(e,zs.object({name:zs.string().required()}));if(t)throw new ma(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await QH()).privateKey;if(r===".jwtPublic")return(await QH()).publicKey;if(pa.get(r))return pa.get(e.name);throw new ma("Key not found")}a(tse,"getKey")});var Uk={};Ue(Uk,{CONFIRMATION_STATUS_POSITION:()=>vk,NodeReplicationConnection:()=>F_,OPERATION_REQUEST:()=>TO,RECEIVED_TIME_POSITION:()=>RO,RECEIVED_VERSION_POSITION:()=>AO,SENDING_TIME_POSITION:()=>tg,createWebSocket:()=>ng,database_subscriptions:()=>Ta,replicateOverWS:()=>G_,table_update_listeners:()=>bO});async function ng(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(!gO){let l=(0,Dk.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),gO=u.secureContexts}if(i=gO.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,Mk.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=Lk.createSecureContext({...i.options,ca:Array.from(Xc)})),new Ck.WebSocket(e,"harperdb-replication-v1",c)}function G_(e,t,r){let n=t.port||t.securePort,s=Jc.pid%1e3+"-"+Pk.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||Ta,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,Nk).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())},Nk*2).unref()}a(lt,"resetPingTimer");function Rr(){return h||(h=VE(d,u,E)),h}a(Rr,"getSharedStatus"),u&&Go(u);let ss,In,Ul=[],xl=[],$T,VT=[],Lt=[],qd=[],Em=150,gm=25,$d=0,Sm=0,Ie=!1,Vd,nn,wr,Bl;e.on("message",T=>{se=performance.now();try{let b=T.dataView=new Zc(T.buffer,T.byteOffset,T.byteLength);if(T[0]>127){let O=(0,Qe.decode)(T),[U,L,I]=O;switch(U){case gk:{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)([Fu])),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,ho(E,de)}if(t.connection&&(t.connection.nodeName=E),ue.debug?.(s,"received node name:",E,"db:",u),!u)try{Go(u=O[2]),u==="system"&&(ss=fa(t,(de,re)=>{kl(re)&&qo(re)}),e.on("close",()=>{ss?.remove()}))}catch(de){ue.warn?.(s,"Error setting database",de),e.send((0,Qe.encode)([Fu])),sn(1008,de.message);return}Hr()}break}case bk:{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;kl(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 Fu:sn();break;case TO: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)([XE,re]))},re=>{e.send((0,Qe.encode)([XE,{requestId:L.requestId,error:re instanceof Error?re.toString():re}]))})}catch(de){e.send((0,Qe.encode)([XE,{requestId:L.requestId,error:de instanceof Error?de.toString():de}]))}break;case XE:let{resolve:B,reject:G}=g.get(L.requestId);L.error?G(new Error(L.error)):B(L),g.delete(L.requestId);break;case EO: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),Ul[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 Sk:Bl=d?HH(L,d):new Map,$T=O[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${$T}`);break;case Tk:let k=I;qd[k]=L;break;case yk:Rr()[vk]=L,ue.trace?.(s,"received and broadcasting committed update",L),Rr().buffer.notify();break;case Rk:A=L,m.send({type:"end_txn",localTime:A,remoteNodeIds:R});break;case ZE:{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 SO.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 Ak:{let de=L,re;try{let fe=O[3],ie=xl[I]||(xl[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!==Sm){Sm=le;let Te=(0,Qe.decode)(Q);e.send((0,Qe.encode)([EO,{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)([JE,de,{value:Te.value,expiresAt:Te.expiresAt,version:Te.version,residencyId:Te.residencyId,nodeId:Te.nodeId,user:Te.user}])}else re=(0,Qe.encode)([JE,de])}catch(fe){re=(0,Qe.encode)([JE,de,{error:fe.message}])}e.send(re);break}case JE:{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=Ul[fe].decoder.decode(Q.value);Q.value=le,Q.key=ie,de(Q)}else de();g.delete(O[1]);break}case Ek:{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,Ta.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)([Fu])),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)([Fu])),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"),Fl(9),Fl(rg),ec(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,tc=Fr.primaryStore,vt=tc.encoder;(ye.extendedType&Ap||!vt.typedStructs)&&(vt._mergeStructures(vt.getStructures()),vt.typedStructs&&(vt.lastTypedStructuresLength=vt.typedStructs.length));let Am=Re[Mt];if(!(Am&&Am.startTime<tt&&(!Am.endTime||Am.endTime>tt)))return eg&&ue.trace?.(s,"skipping replication update",ye.recordId,"to:",E,"from:",Mt,"subscribed:",Re),XC();eg&&ue.trace?.(s,"sending replication update",ye.recordId,"to:",E,"from:",Mt,"subscribed:",Re);let KT=ye.version;le.txnTime!==KT&&(le.txnTime&&(eg&&ue.trace?.(s,"new txn time, sending queued txn",le.txnTime),o[i]!==66&&ue.error?.("Invalid encoding of message"),kr()),le.txnTime=KT,i=c,ec(KT));let rc=ye.residencyId,YT=Hl(rc,Fr),Rm;if(YT&&!YT.includes(E)){let nc=Hl(ye.previousResidencyId,Fr);if(nc&&!nc.includes(E)&&(ye.type==="put"||ye.type==="patch")||Fr.getResidencyById)return XC();let Wd=ye.recordId;ue.trace?.(s,"sending invalidation",Wd,E,"from",Mt);let Vo=0;rc&&(Vo|=Rc),ye.previousResidencyId&&(Vo|=yc);let Ds,on=null;for(let ym in Fr.indices){if(!on){if(Ds=ye.getValue(tc,!0),!Ds)break;on={}}on[ym]=Ds[ym]}Rm=nu(ye.version,_r,Wd,null,Mt,ye.user,ye.type==="put"||ye.type==="patch"?"invalidate":ye.type,vt.encode(on),Vo,rc,ye.previousResidencyId,ye.expiresAt)}function XC(){ue.trace?.(s,"skipping audit record",ye.recordId),Y||(Y=setTimeout(()=>{Y=null,(je||0)+Ok/2<Me&&(eg&&ue.trace?.(s,"sending skipped sequence update",Me),e.send((0,Qe.encode)([Rk,Me])))},Ok).unref())}a(XC,"skipAuditRecord");let WT=vt.typedStructs,zT=vt.structures;if((WT?.length!=qt.typed_length||zT?.length!=qt.structure_length)&&(qt.typed_length=WT?.length,qt.structure_length=zT.length,ue.debug?.(s,"send table struct",qt.typed_length,qt.structure_length),qt.sentName||(qt.sentName=!0),e.send((0,Qe.encode)([EO,{typedStructs:WT,structures:zT,attributes:Fr.attributes,schemaDefined:Fr.schemaDefined},_r,qt.table.tableName]))),rc&&!Lt[rc]&&(e.send((0,Qe.encode)([Tk,YT,rc])),Lt[rc]=!0),Rm)Fl(Rm.length),Za(Rm);else{let nc=ye.encoded;ye.extendedType&Un&&VA(()=>ye.getValue(tc),async Vo=>{let Ds=up(Vo);try{let on;me++;for await(let ym of Vo.stream()){if(on&&(ue.debug?.("Sending blob chunk",Ds,"length",on.length),e.send((0,Qe.encode)([ZE,{fileId:Ds,size:Vo.size},on]))),on=ym,fe)return;e._socket.writableNeedDrain&&(ue.debug?.("draining",Ds),await new Promise(IQ=>e._socket.once("drain",IQ)),ue.debug?.("drained",Ds))}ue.debug?.("Sending final blob chunk",Ds,"length",on.length),e.send((0,Qe.encode)([ZE,{fileId:Ds,size:Vo.size,finished:!0},on]))}catch(on){ue.debug?.("Error sending blob",on),e.send((0,Qe.encode)([ZE,{fileId:Ds,finished:!0,error:on.toString()},Buffer.alloc(0)]))}finally{me--,me<gm&&yt?.()}});let Wd=nc[0]===66?8:0;Fl(nc.length-Wd),Za(nc,Wd),ue.trace?.("wrote record",ye.recordId,"length:",nc.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 yO.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=$E(tt,d);ue.debug?.("subscription to",tt,"using local id",qt,"starting",Mt),Re[qt]={startTime:Mt,endTime:_r}}qo(u),ss||(ss=el(tt=>{tt.databaseName===u&&qo(u)}),In=q_(tt=>{tt===u&&(e.send((0,Qe.encode)([Fu])),sn())}),e.on("close",()=>{ss?.remove(),In?.remove()})),e.send((0,Qe.encode)([Sk,M_(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,!(NO(d)<=Me)&&(Ik.default.get(x.REPLICATION_COPYTABLESTOCATCHUP)??rse)&&server.nodes[0]?.name===E)){ue.info?.("Replicating all tables to",E);let _r=Me,qt=sg(d);for(let Fr in S){if(!Q(Fr))continue;let tc=S[Fr];for(let vt of tc.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()[tg]=1,Jt({recordId:vt.key,tableId:tc.tableId,type:"put",getValue(){return vt.value},encoded:tc.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()[tg]=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>gm?await new Promise(Fr=>{yt=Fr}):await new Promise(setImmediate),nn.startTime=Mt,tt=!0}tt&&Jt({type:"end_txn"},Me),Rr()[tg]=0,await xk(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)==rg){b.position++,A=D=b.readFloat64(),h[AO]=A,h[RO]=Date.now(),ue.trace?.("received remote sequence update",A,u);break}let U=b.position,L=wt(T,U,U+O),I=Ul[L.tableId];I||ue.error?.(`No table found with an id of ${L.tableId}`);let B;L.residencyId&&(B=qd[L.residencyId],ue.trace?.(s,"received residency list",B,L.type,L.recordId));try{$A(()=>{y={table:I.name,id:L.recordId,type:L.type,nodeId:Bl.get(L.nodeId),residencyList:B,timestamp:L.version,value:L.getValue(I),user:L.user,beginTxn:w,expiresAt:L.expiresAt}},G=>{let J=up(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 SO.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[AO]=L.version,h[RO]=Date.now(),m.send(y),b.position=U+O}while(b.position<T.byteLength);$d++,rr(T.byteLength,"bytes-received",`${E}.${u}.${y?.table||"unknown_table"}`,"replication","ingest"),$d>Em&&!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")}$d--,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)([yk,N])),ue.trace?.(s,"sent confirmation of a commit at",N),N=null},nse)),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,Qc({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"),Vd&&Vd.end();for(let[w,{reject:y}]of g)y(new Error(`Connection closed ${b?.toString()} ${T}`));ue.debug?.(s,"closed",T,b?.toString())});function Kd(){}a(Kd,"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&&$E(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&&$E(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)([Ek,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 Hl(T,b){if(!T)return;let w=VT[T];return w||(w=b.getResidencyRecord(T),VT[T]=w),w}a(Hl,"getResidence");function kl(T){return!(Sa&&Sa!="*"&&!Sa[T]&&!Sa.includes?.(T)&&!Sa.some?.(b=>b.name===T))}a(kl,"checkDatabaseAccess");function Go(T){if(m=m||f.get(T),!kl(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 Tm(b,T),!0}a(Go,"setDatabase");function Tm(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)([gk,T,b,y]))}a(Tm,"sendNodeDBName");function qo(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)([bk,w,T]))}a(qo,"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 $o=1,Yd=[];return{end(){Vd&&Vd.end(),nn&&nn.emit("close")},getRecord(T){let b=$o++;return new Promise((w,y)=>{let D=[Ak,b,T.table.tableId,T.id];Yd[T.table.tableId]||(D.push(T.table.tableName),Yd[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=$o++;return T.requestId=b,e.send((0,Qe.encode)([TO,T])),new Promise((w,y)=>{g.set(b,{resolve:w,reject:y})})}};function Fl(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 Za(T,b=0,w=T.length){let y=w-b;V(y),T.copy(o,c,b,w),c+=y}function ec(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 Ik,Qe,Ck,Pk,ue,yO,Dk,Lk,Jc,Mk,SO,Ek,gk,Sk,Fu,Tk,EO,Ak,JE,TO,XE,Rk,yk,bk,ZE,vk,AO,RO,tg,rse,bO,Ta,eg,Ok,nse,Nk,gO,wk,F_,OO=be(()=>{ve();eo();tO();wO();fs();Ik=M(ce());H();su();Qe=require("msgpackr"),Ck=require("ws"),Pk=require("worker_threads"),ue=M(mi());B_();yO=require("events"),Dk=M(js()),Lk=M(require("node:tls"));zc();Jc=M(require("node:process")),Mk=require("node:net");wi();cs();SO=require("node:stream"),Ek=129,gk=140,Sk=141,Fu=142,Tk=130,EO=132,Ak=133,JE=134,TO=136,XE=137,Rk=143,yk=144,bk=145,ZE=146,vk=0,AO=1,RO=2,tg=3,rse=Jc.env.HDB_LEADER_URL||Jc.argv.includes("--HDB_LEADER_URL"),bO=new Map,Ta=new Map,eg=!0,Ok=300,nse=2,Nk=3e4;a(ng,"createWebSocket");wk=1e3,F_=class extends yO.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=wk;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await ng(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=wk,Qc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=G_(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&&(xu({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(G_,"replicateOverWS")});var ga={};Ue(ga,{clearThisNodeName:()=>dse,disableReplication:()=>ase,enabled_databases:()=>Sa,forEachReplicatedDatabase:()=>fa,getThisNodeId:()=>sg,getThisNodeName:()=>Ze,getThisNodeUrl:()=>_a,hostnameToUrl:()=>cg,lastTimeInAuditStore:()=>v_,monitorNodeCAs:()=>Vk,replicateOperation:()=>_se,replication_certificate_authorities:()=>Xc,sendOperationToNode:()=>V_,servers:()=>ise,setReplicator:()=>Yk,start:()=>ose,startOnMainThread:()=>sO,subscribeToNode:()=>Uu,unsubscribeFromNode:()=>WE,urlToNodeName:()=>Ws});function ose(e){if(e.port||(e.port=ms.default.get(x.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=ms.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 x_(e))t.set(Ws(n.url),n);cse(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(),G_(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(Xc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=ag.createSecureContext(l)}catch(c){ir.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),Vk(s),ms.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function Vk(e){let t=0;Mu(r=>{r?.ca&&(Xc.add(r.ca),Xc.size!==t&&(t=Xc.size,e?.()))})}function ase(e=!0){$k=e}function cse(e){$k||(Xe(),Sa=e.databases,fa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ta;for(let[s,i]of $_){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];Yk(r,s,e),bO.get(s)?.forEach(i=>i(s))}}))}function Yk(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 Kk extends $r{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ta,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 _=lse(h,Kk.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Gk.ServerError("No connection to any other nodes are available",502);let d={requestId:sse++,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",og,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Wk(e,t,r,n,s){let i=$_.get(e);i||$_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new F_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function lse(e,t,r){let n=Bk.get(e)?.get(r);if(n)return n;let s=nr().primaryStore.get(e);return s?.url&&(n=Wk(s.url,t,r,e,s.authorization),Bk.set(e,$_.get(s.url))),n}async function V_(e,t,r){r||(r={}),r.serverName=e.name;let n=await ng(e.url,r),s=G_(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 Uu(e){try{qk.isMainThread&&ir.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ta.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,Ta.set(e.database,t)}let r=Wk(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=>U_(n,e.database)),e.replicateByDefault)}catch(t){ir.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function WE({name:e,url:t,database:r}){ir.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(nr().primaryStore.getRange({})));let n=$_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function use(){if(IO!==void 0)return IO;let e=ms.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||ms.default.get(x.TLS_CERTIFICATE);if(e)return IO=new kk.X509Certificate((0,Fk.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Ze(){return og||(og=ms.default.get("replication_hostname")??Ws(ms.default.get("replication_url"))??use()??Hk("operationsapi_network_secureport")??Hk("operationsapi_network_port")??"127.0.0.1")}function dse(){og=void 0}function Hk(e){let t=ms.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function ig(e){let t=ms.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function sg(e){return M_(e)?.[Ze()]}function _a(){let e=ms.default.get("replication_url");return e||cg(Ze())}function cg(e){let t=ig("replication_port");if(t)return`ws://${e}:${t}`;if(t=ig("replication_secureport"),t)return`wss://${e}:${t}`;if(t=ig("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=ig("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ws(e){if(e)return new URL(e).hostname}function fa(e,t){for(let n of Object.getOwnPropertyNames($e))r(n);return q_(n=>{r(n)}),el((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):fse(n)&&t(s,n,!1)}a(r,"forDatabase")}function fse(e){let t=$e[e];for(let r in t)if(t[r].replicate)return!0}function v_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function _se(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=>V_(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 ms,ir,kk,Fk,ag,Gk,qk,$k,sse,ise,Xc,Sa,$_,Bk,IO,og,fs=be(()=>{ve();Zo();Yl();OO();Gr();ms=M(ce()),ir=M(j()),kk=require("crypto"),Fk=require("fs");B_();zc();H();tO();ag=M(require("node:tls")),Gk=M(he()),qk=require("worker_threads"),sse=1,ise=[],Xc=ms.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ag.rootCertificates):new Set;a(ose,"start");a(Vk,"monitorNodeCAs");a(ase,"disableReplication");a(cse,"assignReplicationSource");a(Yk,"setReplicator");$_=new Map;a(Wk,"getConnection");Bk=new Map;a(lse,"getConnectionByName");a(V_,"sendOperationToNode");a(Uu,"subscribeToNode");a(WE,"unsubscribeFromNode");a(use,"getCommonNameFromCert");a(Ze,"getThisNodeName");a(dse,"clearThisNodeName");Object.defineProperty(We,"hostname",{get(){return Ze()}});a(Hk,"getHostFromListeningPort");a(ig,"getPortFromListeningPort");a(sg,"getThisNodeId");We.replication={getThisNodeId:sg,exportIdMapping:M_};a(_a,"getThisNodeUrl");a(cg,"hostnameToUrl");a(Ws,"urlToNodeName");a(fa,"forEachReplicatedDatabase");a(fse,"hasExplicitlyReplicatedTable");a(v_,"lastTimeInAuditStore");a(_se,"replicateOperation")});var _g=C((AIe,Xk)=>{"use strict";var Gu=aH(),{validateBySchema:K_}=rt(),{common_validators:qu,schema_regex:CO}=Ti(),or=require("joi"),hse=j(),mse=require("uuid").v4,dg=co(),$u=(H(),P($)),pse=require("util"),Aa=kn(),{handleHDBError:po,hdb_errors:Ese,ClientError:Y_}=he(),{HDB_ERROR_MSGS:lg,HTTP_STATUS_CODES:Eo}=Ese,{SchemaEventMsg:fg}=qs(),zk=Er(),{getDatabases:gse}=(ve(),P(it)),{transformReq:Vu}=ae(),{replicateOperation:Qk}=(fs(),P(ga)),ug=or.string().min(1).max(qu.schema_length.maximum).pattern(CO).messages({"string.pattern.base":"{:#label} "+qu.schema_format.message}),Sse=or.string().min(1).max(qu.schema_length.maximum).pattern(CO).messages({"string.pattern.base":"{:#label} "+qu.schema_format.message}).required(),Tse=or.string().min(1).max(qu.schema_length.maximum).pattern(CO).messages({"string.pattern.base":"{:#label} "+qu.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();Xk.exports={createSchema:Ase,createSchemaStructure:jk,createTable:Rse,createTableStructure:Jk,createAttribute:wse,dropSchema:yse,dropTable:bse,dropAttribute:Ose,getBackup:Ise};async function Ase(e){let t=await jk(e);return dg.signalSchemaChange(new fg(process.pid,e.operation,e.schema)),t}a(Ase,"createSchema");async function jk(e){let t=K_(e,or.object({database:ug,schema:ug}));if(t)throw new Y_(t.message);if(Vu(e),!await Gu.checkSchemaExists(e.schema))throw po(new Error,lg.SCHEMA_EXISTS_ERR(e.schema),Eo.BAD_REQUEST,$u.LOG_LEVELS.ERROR,lg.SCHEMA_EXISTS_ERR(e.schema),!0);return await Aa.createSchema(e),`database '${e.schema}' successfully created`}a(jk,"createSchemaStructure");async function Rse(e){return Vu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Jk(e)}a(Rse,"createTable");async function Jk(e){let t=K_(e,or.object({database:ug,schema:ug,table:Sse,residence:or.array().items(or.string().min(1)).optional(),hash_attribute:Tse}));if(t)throw new Y_(t.message);if(!await Gu.checkSchemaTableExists(e.schema,e.table))throw po(new Error,lg.TABLE_EXISTS_ERR(e.schema,e.table),Eo.BAD_REQUEST,$u.LOG_LEVELS.ERROR,lg.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:mse(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Aa.createTable(n,e);else throw po(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Eo.BAD_REQUEST);else await Aa.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(Jk,"createTableStructure");async function yse(e){let t=K_(e,or.object({database:or.string(),schema:or.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Y_(t.message);Vu(e);let r=await Gu.checkSchemaExists(e.schema);if(r)throw po(new Error,r,Eo.NOT_FOUND,$u.LOG_LEVELS.ERROR,r,!0);let n=await Gu.schema_describe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Aa.dropSchema(e),dg.signalSchemaChange(new fg(process.pid,e.operation,e.schema)),await zk.purgeSchemaTableStreams(e.schema,s);let i=await Qk(e);return i.message=`successfully deleted '${e.schema}'`,i}a(yse,"dropSchema");async function bse(e){let t=K_(e,or.object({database:or.string(),schema:or.string(),table:or.string().required()}));if(t)throw new Y_(t.message);Vu(e);let r=await Gu.checkSchemaTableExists(e.schema,e.table);if(r)throw po(new Error,r,Eo.NOT_FOUND,$u.LOG_LEVELS.ERROR,r,!0);await Aa.dropTable(e),await zk.purgeTableStream(e.schema,e.table);let n=await Qk(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(bse,"dropTable");async function Ose(e){let t=K_(e,or.object({database:or.string(),schema:or.string(),table:or.string().required(),attribute:or.string().required()}));if(t)throw new Y_(t.message);Vu(e);let r=await Gu.checkSchemaTableExists(e.schema,e.table);if(r)throw po(new Error,r,Eo.NOT_FOUND,$u.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw po(new Error,"You cannot drop a hash attribute",Eo.BAD_REQUEST,void 0,void 0,!0);if($u.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw po(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Eo.BAD_REQUEST,void 0,void 0,!0);try{return await Aa.dropAttribute(e),Nse(e),dg.signalSchemaChange(new fg(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw hse.error(`Got an error deleting attribute ${pse.inspect(e)}.`),n}}a(Ose,"dropAttribute");function Nse(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(Nse,"dropAttributeFromGlobal");async function wse(e){Vu(e);let t=gse()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw po(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Eo.BAD_REQUEST,void 0,void 0,!0);return await Aa.createAttribute(e),dg.signalSchemaChange(new fg(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(wse,"createAttribute");function Ise(e){return Aa.getBackup(e)}a(Ise,"getBackup")});var eF=C((yIe,Zk)=>{"use strict";var{OPERATIONS_ENUM:Cse}=(H(),P($)),PO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Cse.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};Zk.exports=PO});var DO=C((NIe,iF)=>{"use strict";var Pse=kn(),OIe=eF(),hg=ae(),mg=(H(),P($)),Dse=ce(),{handleHDBError:tF,hdb_errors:Lse}=he(),{HDB_ERROR_MSGS:rF,HTTP_STATUS_CODES:nF}=Lse,Mse=Object.values(mg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),sF="To use this operation audit log must be enabled in harperdb-config.yaml";iF.exports=vse;async function vse(e){if(hg.isEmpty(e.schema))throw new Error(rF.SCHEMA_REQUIRED_ERR);if(hg.isEmpty(e.table))throw new Error(rF.TABLE_REQUIRED_ERR);if(!Dse.get(mg.CONFIG_PARAMS.LOGGING_AUDITLOG))throw tF(new Error,sF,nF.BAD_REQUEST,mg.LOG_LEVELS.ERROR,sF,!0);let t=hg.checkSchemaTableExist(e.schema,e.table);if(t)throw tF(new Error,t,nF.NOT_FOUND,mg.LOG_LEVELS.ERROR,t,!0);if(!hg.isEmpty(e.search_type)&&Mse.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Pse.readAuditLog(e)}a(vse,"readAuditLog")});var aF=C((IIe,oF)=>{"use strict";var{OPERATIONS_ENUM:Use}=(H(),P($)),LO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Use.GET_BACKUP,this.schema=t,this.table=r}};oF.exports=LO});var uF=C((LIe,lF)=>{"use strict";var xse=kn(),PIe=aF(),MO=ae(),Bse=(H(),P($)),DIe=ce(),{handleHDBError:Hse,hdb_errors:kse}=he(),{HDB_ERROR_MSGS:cF,HTTP_STATUS_CODES:Fse}=kse;lF.exports=Gse;async function Gse(e){if(MO.isEmpty(e.schema))throw new Error(cF.SCHEMA_REQUIRED_ERR);if(MO.isEmpty(e.table))throw new Error(cF.TABLE_REQUIRED_ERR);let t=MO.checkSchemaTableExist(e.schema,e.table);if(t)throw Hse(new Error,t,Fse.NOT_FOUND,Bse.LOG_LEVELS.ERROR,t,!0);return await xse.getBackup(read_audit_log_object)}a(Gse,"getBackup")});var hF=C((vIe,_F)=>{"use strict";var qse=ce(),Ra=require("joi"),$se=rt(),dF=require("moment"),Vse=require("fs-extra"),vO=require("path"),Kse=require("lodash"),W_=(H(),P($)),{LOG_LEVELS:tl}=(H(),P($)),Yse="YYYY-MM-DD hh:mm:ss",Wse=vO.resolve(__dirname,"../logs");_F.exports=function(e){return $se.validateBySchema(e,zse)};var zse=Ra.object({from:Ra.custom(fF),until:Ra.custom(fF),level:Ra.valid(tl.NOTIFY,tl.FATAL,tl.ERROR,tl.WARN,tl.INFO,tl.DEBUG,tl.TRACE),order:Ra.valid("asc","desc"),limit:Ra.number().min(1),start:Ra.number().min(0),log_name:Ra.custom(Qse)});function fF(e,t){if(dF(e,dF.ISO_8601).format(Yse)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(fF,"validateDatetime");function Qse(e,t){if(Kse.invert(W_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=qse.get(W_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?W_.LOG_NAMES.HDB:e,i=s===W_.LOG_NAMES.INSTALL?vO.join(Wse,W_.LOG_NAMES.INSTALL):vO.join(n,s);return Vse.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Qse,"validateReadLogPath")});var xO=C((xIe,pF)=>{"use strict";var pg=(H(),P($)),jse=j(),Jse=ce(),Xse=hF(),UO=require("path"),mF=require("fs-extra"),{once:Zse}=require("events"),{handleHDBError:eie,hdb_errors:tie}=he(),{PACKAGE_ROOT:rie}=pt(),nie=UO.join(rie,"logs"),sie=1e3,iie=200;pF.exports=oie;async function oie(e){let t=Xse(e);if(t)throw eie(t,t.message,tie.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Jse.get(pg.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?pg.LOG_NAMES.HDB:e.log_name,s=n===pg.LOG_NAMES.INSTALL?UO.join(nie,pg.LOG_NAMES.INSTALL):UO.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?sie: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(mF.statSync(s).size-(m+5)*iie,0));let g=mF.createReadStream(s,{start:S});g.on("error",F=>{jse.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&&(ya(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&&(ya(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&&(ya(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&&(ya(F,h,E),R++,R===m&&g.destroy());break;case i:F.level===o&&R<_?R++:F.level===o&&(ya(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>=_&&(ya(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>=_&&(ya(F,h,E),R++,R===m&&g.destroy());break;default:R<_?R++:(ya(F,h,E),R++,R===m&&g.destroy())}}return a(v,"onLogMessage"),await Zse(g,"close"),E}a(oie,"readLog");function ya(e,t,r){t==="desc"?aie(e,r):t==="asc"?cie(e,r):r.push(e)}a(ya,"pushLineToResult");function aie(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(aie,"insertDescending");function cie(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(cie,"insertAscending")});var Eg=C((qIe,TF)=>{"use strict";var BO=require("joi"),{string:Ku,boolean:EF,date:lie}=BO.types(),uie=rt(),{validateSchemaExists:HIe,validateTableExists:kIe,validateSchemaName:FIe}=Ti(),die=(H(),P($)),fie=It(),gF=ce();gF.initSync();var GIe=Ku.invalid(gF.get(die.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(fie.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),SF={operation:Ku.valid("add_node","update_node","set_node_replication"),node_name:Ku.optional(),subscriptions:BO.array().items({table:Ku.optional(),schema:Ku.optional(),database:Ku.optional(),subscribe:EF.required(),publish:EF.required().custom(hie),start_time:lie.iso()})};function _ie(e){return uie.validateBySchema(e,BO.object(SF))}a(_ie,"addUpdateNodeValidator");function hie(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(hie,"checkForFalsy");TF.exports={addUpdateNodeValidator:_ie,validation_schema:SF}});var Yu=C((VIe,AF)=>{"use strict";var HO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},kO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};AF.exports={Node:HO,NodeSubscription:kO}});var yF=C((YIe,RF)=>{"use strict";var mie=(H(),P($)).OPERATIONS_ENUM,FO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=mie.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};RF.exports=FO});var z_=C((zIe,bF)=>{"use strict";var GO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},qO=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)}};bF.exports={RemotePayloadObject:GO,RemotePayloadSubscription:qO}});var NF=C((jIe,OF)=>{"use strict";var $O=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}};OF.exports=$O});var IF=C((rCe,wF)=>{"use strict";var pie=NF(),XIe=Ut(),ZIe=dt(),Eie=j(),{getSchemaPath:eCe,getTransactionAuditStorePath:tCe}=Et(),{getDatabases:gie}=(ve(),P(it));wF.exports=Sie;async function Sie(e){let t=new pie;try{let r=gie()[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){Eie.warn(`unable to stat table dbi due to ${r}`)}return t}a(Sie,"lmdbGetTableSize")});var PF=C((sCe,CF)=>{"use strict";var VO=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}};CF.exports=VO});var zu=C((uCe,vF)=>{"use strict";var Tie=require("fs-extra"),Aie=require("path"),jr=require("systeminformation"),ba=j(),DF=Er(),oCe=It(),Wu=(H(),P($)),Rie=IF(),yie=oo(),{getThreadInfo:LF}=nt(),Q_=ce();Q_.initSync();var bie=PF(),{openEnvironment:aCe}=dt(),{getSchemaPath:cCe}=Et(),{database:lCe,databases:KO}=(ve(),P(it)),gg;vF.exports={getHDBProcessInfo:QO,getNetworkInfo:JO,getDiskInfo:jO,getMemoryInfo:zO,getCPUInfo:WO,getTimeInfo:YO,getSystemInformation:XO,systemInformation:Oie,getTableSize:ZO,getMetrics:eN};function YO(){return jr.time()}a(YO,"getTimeInfo");async function WO(){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 ba.error(`error in getCPUInfo: ${e}`),{}}}a(WO,"getCPUInfo");async function zO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ba.error(`error in getMemoryInfo: ${e}`),{}}}a(zO,"getMemoryInfo");async function QO(){let e={core:[],clustering:[]};try{let t=await jr.processes(),r;try{r=Number.parseInt(await Tie.readFile(Aie.join(Q_.get(Wu.CONFIG_PARAMS.ROOTPATH),Wu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Wu.NODE_ERROR_CODES.ENOENT)ba.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 ba.error(`error in getHDBProcessInfo: ${t}`),e}}a(QO,"getHDBProcessInfo");async function jO(){let e={};try{if(!Q_.get(Wu.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 ba.error(`error in getDiskInfo: ${t}`),e}}a(jO,"getDiskInfo");async function JO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Q_.get(Wu.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 ba.error(`error in getNetworkInfo: ${t}`),e}}a(JO,"getNetworkInfo");async function XO(){if(gg!==void 0)return gg;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,gg=e,gg}catch(t){return ba.error(`error in getSystemInformation: ${t}`),e}}a(XO,"getSystemInformation");async function ZO(){let e=[],t=await yie.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Rie(n));return e}a(ZO,"getTableSize");async function eN(){let e={};for(let t in KO){let r=e[t]={},n=r.tables={};for(let s in KO[t])try{let i=KO[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){ba.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(eN,"getMetrics");async function MF(){if(Q_.get(Wu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await DF.getNATSReferences(),t=await DF.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(MF,"getNatsStreamInfo");async function Oie(e){let t=new bie;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await XO(),t.time=YO(),t.cpu=await WO(),t.memory=await zO(),t.disk=await jO(),t.network=await JO(),t.harperdb_processes=await QO(),t.table_size=await ZO(),t.metrics=await eN(),t.threads=await LF(),t.replication=await MF(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await XO();break;case"time":t.time=YO();break;case"cpu":t.cpu=await WO();break;case"memory":t.memory=await zO();break;case"disk":t.disk=await jO();break;case"network":t.network=await JO();break;case"harperdb_processes":t.harperdb_processes=await QO();break;case"table_size":t.table_size=await ZO();break;case"database_metrics":case"metrics":t.metrics=await eN();break;case"threads":t.threads=await LF();break;case"replication":t.replication=await MF();break;default:break}return t}a(Oie,"systemInformation")});var Li=C((mCe,HF)=>{"use strict";var Nie=En(),tN=ae(),wie=require("util"),rl=(H(),P($)),UF=ce();UF.initSync();var Iie=vb(),xF=Kr(),{Node:fCe,NodeSubscription:_Ce}=Yu(),Cie=mu(),Pie=yF(),{RemotePayloadObject:Die,RemotePayloadSubscription:Lie}=z_(),{handleHDBError:Mie,hdb_errors:vie}=he(),{HTTP_STATUS_CODES:Uie,HDB_ERROR_MSGS:xie}=vie,Bie=$s(),Hie=zu(),{packageJson:kie}=pt(),{getDatabases:Fie}=(ve(),P(it)),hCe=wie.promisify(Iie.authorize),Gie=xF.searchByHash,qie=xF.searchByValue;HF.exports={isEmpty:$ie,getNodeRecord:Vie,upsertNodeRecord:Kie,buildNodePayloads:Yie,checkClusteringEnabled:Wie,getAllNodeRecords:zie,getSystemInfo:Qie,reverseSubscription:BF};function $ie(e){return e==null}a($ie,"isEmpty");async function Vie(e){let t=new Cie(rl.SYSTEM_SCHEMA_NAME,rl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Gie(t)}a(Vie,"getNodeRecord");async function Kie(e){let t=new Pie(rl.SYSTEM_SCHEMA_NAME,rl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Nie.upsert(t)}a(Kie,"upsertNodeRecord");function BF(e){if(tN.isEmpty(e.subscribe)||tN.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(BF,"reverseSubscription");function Yie(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=tN.getTableHashAttribute(l,u),{subscribe:d,publish:h}=BF(c),_=Fie()[l]?.[u],m=new Lie(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(m)}return new Die(r,t,s,n)}a(Yie,"buildNodePayloads");function Wie(){if(!UF.get(rl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mie(new Error,xie.CLUSTERING_NOT_ENABLED,Uie.BAD_REQUEST,void 0,void 0,!0)}a(Wie,"checkClusteringEnabled");async function zie(){let e=new Bie(rl.SYSTEM_SCHEMA_NAME,rl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await qie(e))}a(zie,"getAllNodeRecords");async function Qie(){let e=await Hie.getSystemInformation();return{hdb_version:kie.version,node_version:e.node_version,platform:e.platform}}a(Qie,"getSystemInfo")});var rN=C((ECe,YF)=>{"use strict";var Sg=Er(),kF=ae(),FF=It(),GF=(H(),P($)),Tg=j(),qF=_g(),jie=c_(),{RemotePayloadObject:Jie}=z_(),{handleHDBError:$F,hdb_errors:Xie}=he(),{HTTP_STATUS_CODES:VF}=Xie,{NodeSubscription:KF}=Yu();YF.exports=Zie;async function Zie(e,t){let r;try{r=await Sg.request(`${t}.${FF.REQUEST_SUFFIX}`,new Jie(GF.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Tg.trace("Response from remote describe all request:",r)}catch(o){Tg.error(`addNode received error from describe all request to remote node: ${o}`);let c=Sg.requestErrorHandler(o,"add_node",t);throw $F(new Error,c,VF.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===FF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw $F(new Error,o,VF.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===GF.SYSTEM_SCHEMA_NAME){await Sg.createLocalTableStream(l,c);let m=new KF(l,c,o.publish,o.subscribe);m.start_time=o.start_time,i.push(m);continue}let u=kF.doesSchemaExist(l),f=n[l]!==void 0,d=c?kF.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(Tg.trace(`addNode creating schema: ${l}`),await qF.createSchema({operation:"create_schema",schema:l})),!d&&h){Tg.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let m=new jie(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(m.attributes=n[l][c].attributes),await qF.createTable(m)}await Sg.createLocalTableStream(l,c);let _=new KF(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(Zie,"reviewSubscriptions")});var nl={};Ue(nl,{addNodeBack:()=>soe,removeNodeBack:()=>ioe,setNode:()=>noe});async function noe(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=cg(r);let n=(0,zF.validateBySchema)(e,roe);if(n)throw(0,go.handleHDBError)(n,n.message,toe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new go.ClientError("url or hostname is required for remove_node operation");let _=r,m=nr(),S=await m.get(_);if(!S)throw new go.ClientError(_+" does not exist");try{await V_({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 go.ClientError("url required for this operation");let s=_a();if(s==null)throw new go.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ps.getReplicationCert)();let _=await(0,ps.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,ps.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,Na.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Na.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Na.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(WF):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=WF(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 V_({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,ps.setCertTable)({name:eoe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ps.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,Na.get)(x.REPLICATION_SHARD)!==void 0&&(_.shard=(0,Na.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await ho(Ze(),_)}await ho(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 soe(e){Yn.trace("addNodeBack received request:",e);let t=await(0,ps.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,ps.getReplicationCertAuth)();if(n.replicates){let i={url:_a(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Na.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Na.get)(x.REPLICATION_SHARD)),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ho(Ze(),i)}return await ho(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 ioe(e){Yn.trace("removeNodeBack received request:",e),await nr().delete(e.name)}function WF(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ps,zF,Oa,Na,Yn,go,eoe,toe,roe,sl=be(()=>{ps=M(js()),zF=M(rt()),Oa=M(require("joi")),Na=M(ce());H();B_();zc();fs();Yn=M(j()),go=M(he()),{pki:eoe}=require("node-forge"),{HTTP_STATUS_CODES:toe}=go.hdb_errors,roe=Oa.default.object({hostname:Oa.default.string(),verify_tls:Oa.default.boolean(),replicates:Oa.default.boolean(),subscriptions:Oa.default.array(),revoked_certificates:Oa.default.array(),shard:Oa.default.number()});a(noe,"setNode");a(soe,"addNodeBack");a(ioe,"removeNodeBack");a(WF,"reverseSubscription")});var X_=C((NCe,jF)=>{"use strict";var{handleHDBError:Ag,hdb_errors:ooe}=he(),{HTTP_STATUS_CODES:Rg}=ooe,{addUpdateNodeValidator:aoe}=Eg(),yg=j(),bg=(H(),P($)),QF=It(),coe=ae(),j_=Er(),J_=Li(),nN=ce(),loe=rN(),{Node:uoe,NodeSubscription:doe}=Yu(),{broadcast:foe}=nt(),{setNode:_oe}=(sl(),P(nl)),bCe=ce(),OCe=(H(),P($)),hoe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",moe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",poe=nN.get(bg.CONFIG_PARAMS.CLUSTERING_NODENAME);jF.exports=Eoe;async function Eoe(e,t=!1){if(yg.trace("addNode called with:",e),nN.get(bg.CONFIG_PARAMS.REPLICATION_URL)||nN.get(bg.CONFIG_PARAMS.REPLICATION_HOSTNAME))return _oe(e);J_.checkClusteringEnabled();let r=aoe(e);if(r)throw Ag(r,r.message,Rg.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await J_.getNodeRecord(n);if(!coe.isEmptyOrZeroLength(d))throw Ag(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Rg.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await loe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=hoe,o;let c=J_.buildNodePayloads(s,poe,bg.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 doe(_.schema,_.table,_.publish,_.subscribe))}yg.trace("addNode sending remote payload:",c);let u;try{u=await j_.request(`${n}.${QF.REQUEST_SUFFIX}`,c)}catch(d){yg.error(`addNode received error from request: ${d}`);for(let _=0,m=s.length;_<m;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await j_.updateRemoteConsumer(S,n)}let h=j_.requestErrorHandler(d,"add_node",n);throw Ag(new Error,h,Rg.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===QF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Ag(new Error,d,Rg.INTERNAL_SERVER_ERROR,"error",d)}yg.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await j_.updateRemoteConsumer(_,n),_.subscribe===!0&&await j_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new uoe(n,l,u.system_info);return await J_.upsertNodeRecord(f),foe({type:"nats_update"}),i.length>0?o.message=moe:o.message=`Successfully added '${n}' to manifest`,o}a(Eoe,"addNode")});var aN=C((CCe,XF)=>{"use strict";var{handleHDBError:sN,hdb_errors:goe}=he(),{HTTP_STATUS_CODES:iN}=goe,{addUpdateNodeValidator:Soe}=Eg(),Z_=j(),Og=(H(),P($)),JF=It(),ICe=ae(),eh=Er(),th=Li(),oN=ce(),{cloneDeep:Toe}=require("lodash"),Aoe=rN(),{Node:Roe,NodeSubscription:yoe}=Yu(),{broadcast:boe}=nt(),{setNode:Ooe}=(sl(),P(nl)),Noe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",woe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ioe=oN.get(Og.CONFIG_PARAMS.CLUSTERING_NODENAME);XF.exports=Coe;async function Coe(e){if(Z_.trace("updateNode called with:",e),oN.get(Og.CONFIG_PARAMS.REPLICATION_URL)??oN.get(Og.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ooe(e);th.checkClusteringEnabled();let t=Soe(e);if(t)throw sN(t,t.message,iN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await th.getNodeRecord(r);s.length>0&&(n=Toe(s));let{added:i,skipped:o}=await Aoe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Noe,c;let l=th.buildNodePayloads(i,Ioe,Og.OPERATIONS_ENUM.UPDATE_NODE,await th.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];Z_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}Z_.trace("updateNode sending remote payload:",l);let u;try{u=await eh.request(`${r}.${JF.REQUEST_SUFFIX}`,l)}catch(f){Z_.error(`updateNode received error from request: ${f}`);let d=eh.requestErrorHandler(f,"update_node",r);throw sN(new Error,d,iN.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 sN(new Error,f,iN.INTERNAL_SERVER_ERROR,"error",f)}Z_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await eh.updateRemoteConsumer(h,r),h.subscribe===!0?await eh.updateConsumerIterator(h.schema,h.table,r,"start"):await eh.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new Roe(r,[],u.system_info)]),await Poe(n[0],i,u.system_info),o.length>0?c.message=woe:c.message=`Successfully updated '${r}'`,c}a(Coe,"updateNode");async function Poe(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 yoe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await th.upsertNodeRecord(n),boe({type:"nats_update"})}a(Poe,"updateNodeTable")});var nG=C((DCe,rG)=>{"use strict";var tG=require("joi"),{string:ZF}=tG.types(),Doe=rt(),eG=(H(),P($)),Loe=ce(),Moe=It();rG.exports=voe;function voe(e){let t=ZF.invalid(Loe.get(eG.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Moe.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=tG.object({operation:ZF.valid(eG.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Doe.validateBySchema(e,r)}a(voe,"removeNodeValidator")});var nh=C((MCe,cG)=>{"use strict";var{handleHDBError:sG,hdb_errors:Uoe}=he(),{HTTP_STATUS_CODES:iG}=Uoe,xoe=nG(),rh=j(),oG=Li(),Boe=ae(),Qu=(H(),P($)),aG=It(),cN=Er(),lN=ce(),{RemotePayloadObject:Hoe}=z_(),{NodeSubscription:koe}=Yu(),Foe=a_(),Goe=Dc(),{broadcast:qoe}=nt(),{setNode:$oe}=(sl(),P(nl)),Voe=lN.get(Qu.CONFIG_PARAMS.CLUSTERING_NODENAME);cG.exports=Koe;async function Koe(e){if(rh.trace("removeNode called with:",e),lN.get(Qu.CONFIG_PARAMS.REPLICATION_URL)??lN.get(Qu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return $oe(e);oG.checkClusteringEnabled();let t=xoe(e);if(t)throw sG(t,t.message,iG.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oG.getNodeRecord(r);if(Boe.isEmptyOrZeroLength(n))throw sG(new Error,`Node '${r}' was not found.`,iG.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Hoe(Qu.OPERATIONS_ENUM.REMOVE_NODE,Voe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await cN.updateConsumerIterator(f.schema,f.table,r,"stop");try{await cN.updateRemoteConsumer(new koe(f.schema,f.table,!1,!1),r)}catch(d){rh.error(d)}}try{i=await cN.request(`${r}.${aG.REQUEST_SUFFIX}`,s),rh.trace("Remove node reply from remote node:",r,i)}catch(l){rh.error("removeNode received error from request:",l),o=!0}let c=new Foe(Qu.SYSTEM_SCHEMA_NAME,Qu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Goe.deleteRecord(c),qoe({type:"nats_update"}),i?.status===aG.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(rh.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(Koe,"removeNode")});var dG=C((UCe,uG)=>{"use strict";var lG=require("joi"),{string:Yoe,array:Woe}=lG.types(),zoe=rt(),Qoe=Eg();uG.exports=joe;function joe(e){let t=lG.object({operation:Yoe.valid("configure_cluster").required(),connections:Woe.items(Qoe.validation_schema).required()});return zoe.validateBySchema(e,t)}a(joe,"configureClusterValidator")});var uN=C((BCe,pG)=>{"use strict";var fG=(H(),P($)),Ng=j(),Joe=ae(),Xoe=ce(),Zoe=nh(),eae=X_(),tae=Li(),rae=dG(),{handleHDBError:_G,hdb_errors:nae}=he(),{HTTP_STATUS_CODES:hG}=nae,sae="Configure cluster complete.",iae="Failed to configure the cluster. Check the logs for more details.",oae="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";pG.exports=aae;async function aae(e){Ng.trace("configure cluster called with:",e);let t=rae(e);if(t)throw _G(t,t.message,hG.BAD_REQUEST,void 0,void 0,!0);let r=await tae.getAllNodeRecords(),n=[];if(Xoe.get(fG.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await mG(Zoe,{operation:fG.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}Ng.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 mG(eae,d,d.node_name);s.push(h)}Ng.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"&&(Ng.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(Joe.isEmptyOrZeroLength(o))return{message:sae,connections:c};if(l)return{message:oae,failed_nodes:o,connections:c};throw _G(new Error,iae,hG.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(aae,"configureCluster");async function mG(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(mG,"functionWrapper")});var TG=C((kCe,SG)=>{"use strict";var sh=require("joi"),cae=rt(),{validateSchemaExists:EG,validateTableExists:lae,validateSchemaName:gG}=Ti(),uae=sh.object({operation:sh.string().valid("purge_stream"),schema:sh.string().custom(EG).custom(gG).optional(),database:sh.string().custom(EG).custom(gG).optional(),table:sh.string().custom(lae).required()});function dae(e){return cae.validateBySchema(e,uae)}a(dae,"purgeStreamValidator");SG.exports=dae});var dN=C((GCe,AG)=>{"use strict";var{handleHDBError:fae,hdb_errors:_ae}=he(),{HTTP_STATUS_CODES:hae}=_ae,mae=TG(),pae=Er(),Eae=Li();AG.exports=gae;async function gae(e){e.schema=e.schema??e.database;let t=mae(e);if(t)throw fae(t,t.message,hae.BAD_REQUEST,void 0,void 0,!0);Eae.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await pae.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(gae,"purgeStream")});var Cg=C(($Ce,IG)=>{"use strict";var _N=Li(),Sae=Er(),Ig=ce(),ju=(H(),P($)),il=It(),Tae=ae(),fN=j(),{RemotePayloadObject:Aae}=z_(),{ErrorCode:RG}=require("nats"),{parentPort:yG}=require("worker_threads"),{onMessageByType:Rae}=nt(),{getThisNodeName:yae}=(fs(),P(ga)),{requestClusterStatus:bae}=(B_(),P(WH)),{getReplicationSharedStatus:Oae,getHDBNodeTable:Nae}=(zc(),P(rO)),{CONFIRMATION_STATUS_POSITION:wae,RECEIVED_VERSION_POSITION:Iae,RECEIVED_TIME_POSITION:Cae,SENDING_TIME_POSITION:Pae}=(OO(),P(Uk)),bG=Ig.get(ju.CONFIG_PARAMS.CLUSTERING_ENABLED),OG=Ig.get(ju.CONFIG_PARAMS.CLUSTERING_NODENAME);IG.exports={clusterStatus:Dae,buildNodeStatus:wG};var NG;Rae("cluster-status",async e=>{NG(e)});async function Dae(){if(Ig.get(ju.CONFIG_PARAMS.REPLICATION_URL)||Ig.get(ju.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(yG){yG.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{NG=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=Oae(u,l,o);c.lastCommitConfirmed=wg(f[wae]),c.lastReceivedRemoteTime=wg(f[Iae]),c.lastReceivedLocalTime=wg(f[Cae]),c.sendingMessage=wg(f[Pae])}}}else n=bae();n.node_name=yae();let s=Nae().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:OG,is_enabled:bG,connections:[]};if(!bG)return e;let t=await _N.getAllNodeRecords();if(Tae.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(wG(t[n],e.connections));return await Promise.allSettled(r),e}a(Dae,"clusterStatus");function wg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(wg,"asDate");async function wG(e,t){let r=e.name,n=new Aae(ju.OPERATIONS_ENUM.CLUSTER_STATUS,OG,void 0,await _N.getSystemInfo()),s,i,o=il.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Sae.request(il.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===il.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=il.CLUSTER_STATUS_STATUSES.CLOSED,fN.error(`Error getting node status from ${r} `,s))}catch(l){fN.warn(`Error getting node status from ${r}`,l),l.code===RG.NoResponders?o=il.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===RG.Timeout?o=il.CLUSTER_STATUS_STATUSES.TIMEOUT:o=il.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Lae(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!==ju.PRE_4_0_0_VERSION&&await _N.upsertNodeRecord(l)}catch(l){fN.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(wG,"buildNodeStatus");function Lae(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(Lae,"NodeStatusObject")});var mN=C((KCe,CG)=>{"use strict";var{handleHDBError:Mae,hdb_errors:vae}=he(),{HTTP_STATUS_CODES:Uae}=vae,xae=Er(),Bae=Li(),hN=ae(),Pg=require("joi"),Hae=rt(),kae=2e3,Fae=Pg.object({timeout:Pg.number().min(1),connected_nodes:Pg.boolean(),routes:Pg.boolean()});CG.exports=Gae;async function Gae(e){Bae.checkClusteringEnabled();let t=Hae.validateBySchema(e,Fae);if(t)throw Mae(t,t.message,Uae.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||hN.autoCastBoolean(n),o=s===void 0||hN.autoCastBoolean(s),c={nodes:[]},l=await xae.getServerList(r??kae),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:hN.autoCast(S.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(Gae,"clusterNetwork")});var MG=C((WCe,LG)=>{"use strict";var pN=require("joi"),PG=rt(),{route_constraints:DG}=mA();LG.exports={setRoutesValidator:qae,deleteRoutesValidator:$ae};function qae(e){let t=pN.object({server:pN.valid("hub","leaf"),routes:DG.required()});return PG.validateBySchema(e,t)}a(qae,"setRoutesValidator");function $ae(e){let t=pN.object({routes:DG.required()});return PG.validateBySchema(e,t)}a($ae,"deleteRoutesValidator")});var Dg=C((QCe,FG)=>{"use strict";var So=Ot(),EN=ae(),Es=(H(),P($)),Ju=ce(),vG=MG(),{handleHDBError:UG,hdb_errors:Vae}=he(),{HTTP_STATUS_CODES:xG}=Vae,BG="cluster routes successfully set",HG="cluster routes successfully deleted";FG.exports={setRoutes:Yae,getRoutes:Wae,deleteRoutes:zae};function Kae(e){let t=So.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=EN.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"?So.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):So.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:BG,set:i,skipped:s}}a(Kae,"setRoutesNats");function Yae(e){let t=vG.setRoutesValidator(e);if(t)throw UG(t,t.message,xG.BAD_REQUEST,void 0,void 0,!0);if(Ju.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED))return Kae(e);let r=[],n=[],s=Ju.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{kG(s,i)?n.push(i):(s.push(i),r.push(i))}),So.updateConfigValue(Es.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:BG,set:r,skipped:n}}a(Yae,"setRoutes");function kG(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(kG,"existsInArray");function Wae(){if(Ju.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=So.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Ju.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Wae,"getRoutes");function zae(e){let t=vG.deleteRoutesValidator(e);if(t)throw UG(t,t.message,xG.BAD_REQUEST,void 0,void 0,!0);if(Ju.get(Es.CONFIG_PARAMS.CLUSTERING_ENABLED))return Qae(e);let r=[],n=[],s=Ju.get(Es.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{kG(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),So.updateConfigValue(Es.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:HG,deleted:r,skipped:n}}a(zae,"deleteRoutes");function Qae(e){let t=So.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=EN.isEmptyOrZeroLength(r)?null:r,So.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=EN.isEmptyOrZeroLength(n)?null:n,So.updateConfigValue(Es.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:HG,deleted:s,skipped:i}}a(Qae,"deleteRoutesNats")});var qG=C((JCe,GG)=>{"use strict";var ih=require("alasql"),ol=require("recursive-iterator"),Js=j(),jae=ae(),oh=(H(),P($)),gN=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,Xae(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=>oh.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=>!oh.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][oh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Jae(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=>!oh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new ih.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 Jae(e){return e.filter(t=>t[oh.PERMS_CRUD_ENUM.READ])}a(Jae,"filterReadRestrictedAttrs");function Xae(e,t,r,n,s){Zae(e,t,r,n,s)}a(Xae,"interpretAST");function ah(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(ah,"addSchemaTableToMap");function Zae(e,t,r,n,s){if(!e){Js.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ih.yy.Insert?nce(e,t,r):e instanceof ih.yy.Select?ece(e,t,r,n,s):e instanceof ih.yy.Update?tce(e,t,r):e instanceof ih.yy.Delete?rce(e,t,r):Js.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Zae,"getRecordAttributesAST");function ece(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(jae.isEmptyOrZeroLength(i)){Js.error("No schema specified");return}e.from.forEach(c=>{ah(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ah(c.table,t,r,n,s)});let o=new ol(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 ol(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 ol(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 ol(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(ece,"getSelectAttributes");function tce(e,t,r){if(!e){Js.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ol(e.columns),s=e.table.databaseid;ah(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&SN(e.table.tableid,s,i.columnid,t,r)}a(tce,"getUpdateAttributes");function rce(e,t,r){if(!e){Js.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ol(e.where),s=e.table.databaseid;ah(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&SN(e.table.tableid,s,i.columnid,t,r)}a(rce,"getDeleteAttributes");function nce(e,t,r){if(!e){Js.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ol(e.columns),s=e.into.databaseid;ah(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&SN(e.into.tableid,s,i.columnid,t,r)}a(nce,"getInsertAttributes");function SN(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(SN,"pushAttribute");GG.exports=gN});var VG=C((ZCe,$G)=>{"use strict";var Lg=(H(),P($)),Mg=class{static{a(this,"BaseLicense")}constructor(t=0,r=Lg.RAM_ALLOCATION_ENUM.DEFAULT,n=Lg.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},TN=class extends Mg{static{a(this,"ExtendedLicense")}constructor(t=0,r=Lg.RAM_ALLOCATION_ENUM.DEFAULT,n=Lg.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};$G.exports={BaseLicense:Mg,ExtendedLicense:TN}});var ed=C((tPe,jG)=>{"use strict";var Zu=require("fs-extra"),vg=(Gp(),P(Fp)),YG=require("crypto"),sce=require("moment"),ice=require("uuid").v4,Jr=j(),RN=require("path"),oce=ae(),al=(H(),P($)),{totalmem:KG}=require("os"),ace=VG().ExtendedLicense,Xu="invalid license key format",cce="061183",lce="mofi25",uce="aes-256-cbc",dce=16,fce=32,WG=ce(),{resolvePath:zG}=Ot();WG.initSync();var AN;jG.exports={validateLicense:QG,generateFingerPrint:hce,licenseSearch:ON,getLicense:Ece,checkMemoryLimit:gce};function yN(){return RN.join(WG.getHdbBasePath(),al.LICENSE_KEY_DIR_NAME,al.LICENSE_FILE_NAME)}a(yN,"getLicenseDirPath");function _ce(){let e=yN();return zG(RN.join(e,al.LICENSE_FILE_NAME))}a(_ce,"getLicenseFilePath");function bN(){let e=yN();return zG(RN.join(e,al.REG_KEY_FILE_NAME))}a(bN,"getFingerPrintFilePath");async function hce(){let e=bN();try{return await Zu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await mce();throw Jr.error(`Error writing fingerprint file to ${e}`),Jr.error(t),new Error("There was an error generating the fingerprint")}}a(hce,"generateFingerPrint");async function mce(){let e=ice(),t=vg.hash(e,vg.HASH_FUNCTION.MD5),r=bN();try{await Zu.mkdirp(yN()),await Zu.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(mce,"writeFingerprint");function QG(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:al.RAM_ALLOCATION_ENUM.DEFAULT,version:al.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Jr.error("empty license key passed to validate."),r;let n=bN(),s=!1;try{s=Zu.statSync(n)}catch(i){Jr.error(i)}if(s){let i;try{i=Zu.readFileSync(n,"utf8")}catch{Jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(lce),c=o[1];c=Buffer.concat([Buffer.from(c)],dce);let l=Buffer.concat([Buffer.from(i)],fce),u=YG.createDecipheriv(uce,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 _=pce(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Xu),Jr.error(Xu),new Error(Xu)}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(Xu),Jr.error(Xu),new Error(Xu)}else r.exp_date=f;r.exp_date<sce().valueOf()&&(r.valid_date=!1),vg.validate(o[1],`${cce}${i}${t}`,vg.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(QG,"validateLicense");function pce(e,t){try{let r=YG.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(pce,"checkOldLicense");function ON(){let e=new ace,t=[];try{t=Zu.readFileSync(_ce(),"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(oce.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=QG(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=al.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return AN=e,e}a(ON,"licenseSearch");async function Ece(){return AN||await ON(),AN}a(Ece,"getLicense");function gce(){let e=ON().ram_allocation,t=process.constrainedMemory?.()||KG();if(t=Math.round(Math.min(t,KG())/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(gce,"checkMemoryLimit")});var IN=C((nPe,eq)=>{var Ug=ed(),JG=require("chalk"),Wn=j(),XG=require("prompt"),{promisify:Sce}=require("util"),NN=(H(),P($)),Tce=require("fs-extra"),Ace=require("path"),Rce=ae(),{packageJson:yce}=pt(),ZG=ce();ZG.initSync();var bce=require("moment"),Oce=Sce(XG.get),Nce=Ace.join(ZG.getHdbBasePath(),NN.LICENSE_KEY_DIR_NAME,NN.LICENSE_FILE_NAME,NN.LICENSE_FILE_NAME);eq.exports={getFingerprint:Ice,setLicense:wce,parseLicense:wN,register:Cce,getRegistrationInfo:Dce};async function wce(e){if(e&&e.key&&e.company){try{Wn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await wN(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(wce,"setLicense");async function Ice(){let e={};try{e=await Ug.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Wn.error(r),Wn.error(t),new Error(r)}return e}a(Ice,"getFingerprint");async function wN(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Wn.info("Validating license input...");let r=Ug.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 Tce.writeFile(Nce,JSON.stringify({license_key:e,company:t}))}catch(n){throw Wn.error("Failed to write License"),n}return"Registration successful."}a(wN,"parseLicense");async function Cce(){let e=await Pce();return wN(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Cce,"register");async function Pce(){let e=await Ug.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{XG.start()}catch(n){Wn.error(n)}let r;try{r=await Oce(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Pce,"promptForRegistration");async function Dce(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ug.getLicense()}catch(r){throw Wn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Rce.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=yce.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=bce.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Dce,"getRegistrationInfo")});var rq=C((iPe,tq)=>{"use strict";var Lce=It(),CN=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+Lce.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"}};tq.exports=CN});var iq=C((aPe,sq)=>{"use strict";var nq=It(),PN=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+nq.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+nq.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"}};sq.exports=PN});var aq=C((lPe,oq)=>{"use strict";var DN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};oq.exports=DN});var lq=C((dPe,cq)=>{"use strict";var Mce=It(),LN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Mce.SERVER_SUFFIX.ADMIN,this.password=r}};cq.exports=LN});var kg=C((_Pe,fq)=>{"use strict";var cl=require("path"),ll=require("fs-extra"),vce=rq(),Uce=iq(),xce=aq(),Bce=lq(),MN=Fn(),rd=ae(),An=Ot(),Bg=(H(),P($)),ch=It(),{CONFIG_PARAMS:Wt}=Bg,nd=j(),lh=ce(),uq=io(),vN=Er(),Hce=js(),td="clustering",kce=1e4,dq=50;fq.exports={generateNatsConfig:Gce,removeNatsConfig:qce,getHubConfigPath:Fce};function Fce(){let e=lh.get(Wt.ROOTPATH);return cl.join(e,td,ch.NATS_CONFIG_FILES.HUB_SERVER)}a(Fce,"getHubConfigPath");async function Gce(e=!1,t=void 0){let r=lh.get(Wt.ROOTPATH);ll.ensureDirSync(cl.join(r,"clustering","leaf")),lh.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 ll.exists(i)&&!await ll.exists(!n)&&await Hce.createNatsCerts();let o=cl.join(r,td,ch.PID_FILES.HUB),c=cl.join(r,td,ch.PID_FILES.LEAF),l=An.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=cl.join(r,td,ch.NATS_CONFIG_FILES.HUB_SERVER),f=cl.join(r,td,ch.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 vN.checkNATSServerInstalled()||Hg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await MN.listUsers(),g=An.getConfigFromFile(Wt.CLUSTERING_USER),R=await MN.getClusterUser();(rd.isEmpty(R)||R.active!==!0)&&Hg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await xg(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await xg(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await xg(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),await xg(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],A=[];for(let[oe,z]of S.entries())z.role?.role===Bg.ROLE_TYPES_ENUM.CLUSTER_USER&&z.active&&(E.push(new Bce(z.username,uq.decrypt(z.hash))),A.push(new xce(z.username,uq.decrypt(z.hash))));let N=[],{hub_routes:v}=An.getClusteringRoutes();if(!rd.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 vce(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=rd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Bg.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ll.writeJson(u,F),nd.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 Uce(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===Bg.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ll.writeJson(f,ee),nd.trace(`Leaf server config written to ${f}`))}a(Gce,"generateNatsConfig");async function xg(e){let t=lh.get(e);return rd.isEmpty(t)&&Hg(`port undefined for '${e}'`),await rd.isPortTaken(t)&&Hg(`'${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(xg,"isPortAvailable");function Hg(e){let t=`Error generating clustering config: ${e}`;nd.error(t),console.error(t),process.exit(1)}a(Hg,"generateNatsConfigError");async function qce(e){let{port:t,config_file:r}=vN.getServerConfig(e),{username:n,decrypt_hash:s}=await MN.getClusterUser(),i=0,o=2e3;for(;i<dq;){try{let f=await vN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){nd.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=dq)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&&nd.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await rd.async_set_timeout(u)}let c="0".repeat(kce),l=cl.join(lh.get(Wt.ROOTPATH),td,r);await ll.writeFile(l,c),await ll.remove(l),nd.notify(e,"started.")}a(qce,"removeNatsConfig")});var gq=C((mPe,Eq)=>{"use strict";var zn=ce(),$ce=ed(),Ge=(H(),P($)),uh=It(),To=require("path"),{PACKAGE_ROOT:Gg}=pt(),_q=ce(),Fg=ae(),sd="/dev/null",Vce=To.join(Gg,"launchServiceScripts"),hq=To.join(Gg,"utility/scripts"),Kce=To.join(hq,Ge.HDB_RESTART_SCRIPT),mq=To.resolve(Gg,"dependencies",`${process.platform}-${process.arch}`,uh.NATS_BINARY_NAME);function pq(){let t=$ce.licenseSearch().ram_allocation||Ge.RAM_ALLOCATION_ENUM.DEFAULT,r=Ge.MEM_SETTING_KEY+t,n={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Fg.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Fg.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Gg}}a(pq,"generateMainServerConfig");var Yce=9930;function Wce(){zn.initSync(!0);let e=zn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=To.join(e,"clustering",uh.NATS_CONFIG_FILES.HUB_SERVER),r=To.join(zn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=_q.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=uh.LOG_LEVEL_FLAGS[zn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Yce?"-"+n:""),script:mq,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return zn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=sd,i.error_file=sd),i}a(Wce,"generateNatsHubServerConfig");var zce=9940;function Qce(){zn.initSync(!0);let e=zn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=To.join(e,"clustering",uh.NATS_CONFIG_FILES.LEAF_SERVER),r=To.join(zn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=_q.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=uh.LOG_LEVEL_FLAGS[zn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==zce?"-"+n:""),script:mq,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return zn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=sd,i.error_file=sd),i}a(Qce,"generateNatsLeafServerConfig");function jce(){zn.initSync();let e=To.join(zn.get(Ge.CONFIG_PARAMS.LOGGING_ROOT),Ge.LOG_NAMES.HDB),t={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Vce,autorestart:!1};return zn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=sd,t.error_file=sd),t}a(jce,"generateClusteringUpgradeV4ServiceConfig");function Jce(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return Fg.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Fg.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:hq},script:Kce}}a(Jce,"generateRestart");function Xce(){return{apps:[pq()]}}a(Xce,"generateAllServiceConfigs");Eq.exports={generateAllServiceConfigs:Xce,generateMainServerConfig:pq,generateRestart:Jce,generateNatsHubServerConfig:Wce,generateNatsLeafServerConfig:Qce,generateClusteringUpgradeV4ServiceConfig:jce}});var id=C((gPe,Lq)=>{"use strict";var et=(H(),P($)),Zce=ae(),Ro=kg(),qg=Er(),Ao=It(),wa=gq(),$g=ce(),ul=j(),ele=Li(),{startWorker:Sq,onMessageFromWorkers:tle}=nt(),rle=zu(),EPe=require("util"),nle=require("child_process"),sle=require("fs"),{execFile:ile}=nle,Ye;Lq.exports={enterPM2Mode:ole,start:Ia,stop:UN,reload:Aq,restart:Rq,list:xN,describe:Oq,connect:yo,kill:dle,startAllServices:fle,startService:BN,getUniqueServicesList:Nq,restartAllServices:_le,isServiceRegistered:wq,reloadStopStart:Iq,restartHdb:bq,deleteProcess:lle,startClusteringProcesses:Pq,startClusteringThreads:Dq,isHdbRestartRunning:ule,isClusteringRunning:mle,stopClustering:hle,reloadClustering:ple,expectedRestartOfChildren:yq};var dh=!1;tle(e=>{e.type==="restart"&&$g.initSync(!0)});function ole(){dh=!0}a(ole,"enterPM2Mode");function yo(){return Ye||(Ye=require("pm2")),new Promise((e,t)=>{Ye.connect((r,n)=>{r&&t(r),e(n)})})}a(yo,"connect");var Xr,ale=10,Tq;function Ia(e,t=!1){if(dh)return cle(e);let r=ile(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Xr.indexOf(r);o>-1&&Xr.splice(o,1),!Tq&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<ale&&(sle.existsSync(Ro.getHubConfigPath())?Ia(e):(await Ro.generateNatsConfig(!0),Ia(e),await new Promise(c=>setTimeout(c,3e3)),await Ro.removeNatsConfig(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ro.removeNatsConfig(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=$g.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&Ao.LOG_LEVEL_HIERARCHY[o]>=Ao.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===Ao.LOG_LEVELS.ERR||f===Ao.LOG_LEVELS.WRN?ul.OUTPUTS.STDERR:ul.OUTPUTS.STDOUT;ul.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=Ao.LOG_LEVELS[h]}if(Ao.LOG_LEVEL_HIERARCHY[o]>=Ao.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===Ao.LOG_LEVELS.ERR||f===Ao.LOG_LEVELS.WRN?ul.OUTPUTS.STDERR:ul.OUTPUTS.STDOUT;ul.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Xr&&(Xr=[],!t)){let i=a(()=>{Tq=!0,Xr&&(Xr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Xr.push(r)}a(Ia,"start");function cle(e){return new Promise(async(t,r)=>{try{await yo()}catch(n){r(n)}Ye.start(e,(n,s)=>{n&&(Ye.disconnect(),r(n)),Ye.disconnect(),t(s)})})}a(cle,"startWithPM2");function UN(e){if(!dh){for(let t of Xr||[])t.name===e&&(Xr.splice(Xr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yo()}catch(n){r(n)}Ye.stop(e,async(n,s)=>{n&&(Ye.disconnect(),r(n)),Ye.delete(e,(i,o)=>{i&&(Ye.disconnect(),r(n)),Ye.disconnect(),t(o)})})})}a(UN,"stop");function Aq(e){return new Promise(async(t,r)=>{try{await yo()}catch(n){r(n)}Ye.reload(e,(n,s)=>{n&&(Ye.disconnect(),r(n)),Ye.disconnect(),t(s)})})}a(Aq,"reload");function Rq(e){if(!dh){yq();for(let t of Xr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await yo()}catch(n){r(n)}Ye.restart(e,(n,s)=>{Ye.disconnect(),t(s)})})}a(Rq,"restart");function yq(){for(let e of Xr||[])e.config&&(e.config.restarts=0)}a(yq,"expectedRestartOfChildren");function lle(e){return new Promise(async(t,r)=>{try{await yo()}catch(n){r(n)}Ye.delete(e,(n,s)=>{n&&(Ye.disconnect(),r(n)),Ye.disconnect(),t(s)})})}a(lle,"deleteProcess");async function bq(){await Ia(wa.generateRestart())}a(bq,"restartHdb");async function ule(){let e=await xN();for(let t in e)if(e[t].name===et.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(ule,"isHdbRestartRunning");function xN(){return new Promise(async(e,t)=>{try{await yo()}catch(r){t(r)}Ye.list((r,n)=>{r&&(Ye.disconnect(),t(r)),Ye.disconnect(),e(n)})})}a(xN,"list");function Oq(e){return new Promise(async(t,r)=>{try{await yo()}catch(n){r(n)}Ye.describe(e,(n,s)=>{n&&(Ye.disconnect(),r(n)),Ye.disconnect(),t(s)})})}a(Oq,"describe");function dle(){if(!dh){for(let e of Xr||[])e.kill();Xr=[];return}return new Promise(async(e,t)=>{try{await yo()}catch(r){t(r)}Ye.killDaemon((r,n)=>{r&&(Ye.disconnect(),t(r)),Ye.disconnect(),e(n)})})}a(dle,"kill");async function fle(){try{await Pq(),await Dq(),await Ia(wa.generateAllServiceConfigs())}catch(e){throw Ye?.disconnect(),e}}a(fle,"startAllServices");async function BN(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case et.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=wa.generateMainServerConfig();break;case et.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=wa.generateNatsIngestServiceConfig();break;case et.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=wa.generateNatsReplyServiceConfig();break;case et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=wa.generateNatsHubServerConfig(),await Ia(r,t),await Ro.removeNatsConfig(e);return;case et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=wa.generateNatsLeafServerConfig(),await Ia(r,t),await Ro.removeNatsConfig(e);return;case et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=wa.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ia(r)}catch(r){throw Ye?.disconnect(),r}}a(BN,"startService");async function Nq(){try{let e=await xN(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ye?.disconnect(),e}}a(Nq,"getUniqueServicesList");async function _le(e=[]){try{let t=!1,r=await Nq();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===et.PROCESS_DESCRIPTORS.HDB?t=!0:await Rq(o))}t&&await Iq(et.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ye?.disconnect(),t}}a(_le,"restartAllServices");async function wq(e){if(Xr?.find(r=>r.name===e))return!0;let t=await rle.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(wq,"isServiceRegistered");async function Iq(e){let t=$g.get(et.CONFIG_PARAMS.THREADS_COUNT)??$g.get(et.CONFIG_PARAMS.THREADS),r=await Oq(e),n=Zce.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await UN(e),await BN(e)):e===et.PROCESS_DESCRIPTORS.HDB?await bq():await Aq(e)}a(Iq,"reloadStopStart");var Cq;async function Pq(e=!1){for(let t in et.CLUSTERING_PROCESSES){let r=et.CLUSTERING_PROCESSES[t];await BN(r,e)}}a(Pq,"startClusteringProcesses");async function Dq(){Cq=Sq(et.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:et.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await qg.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await qg.updateLocalStreams();let e=await ele.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===et.PRE_4_0_0_VERSION){ul.info("Starting clustering upgrade 4.0.0 process"),Sq(et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Dq,"startClusteringThreads");async function hle(){for(let e in et.CLUSTERING_PROCESSES)if(e!==et.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===et.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Cq.terminate();else{let t=et.CLUSTERING_PROCESSES[e];await UN(t)}}a(hle,"stopClustering");async function mle(){for(let e in et.CLUSTERING_PROCESSES){let t=et.CLUSTERING_PROCESSES[e];if(await wq(t)===!1)return!1}return!0}a(mle,"isClusteringRunning");async function ple(){await Ro.generateNatsConfig(!0),await qg.reloadNATSHub(),await qg.reloadNATSLeaf(),await Ro.removeNatsConfig(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ro.removeNatsConfig(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(ple,"reloadClustering")});var FN={};Ue(FN,{compactOnStart:()=>Ele,copyDb:()=>Hq});async function Ele(){Ca.notify("Running compact on start"),console.log("Running compact on start");let e=(0,HN.get)(x.ROOTPATH),t=new Map,r=Xe();(0,kN.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,Vg.join)(e,"backup",n+".mdb"),o=(0,Vg.join)(e,sc,n+"-copy.mdb"),c=0;try{c=await Mq(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Ca.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 Hq(n,o),console.log("Backing up",n,"to",i),await(0,dl.move)(s,i,{overwrite:!0})}try{od()}catch(n){Ca.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,dl.move)(i,s,{overwrite:!0}),await(0,dl.remove)((0,Vg.join)(e,sc,`${n}-copy.mdb-lock`));try{od()}catch(n){Ca.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Ca.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,kN.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,dl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw od(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await Mq(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}.