harperdb 4.3.0-beta.8 → 4.3.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/bin/lite.js +1 -1
- package/dependencies/linux-x64/nats-server +0 -0
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/npm-shrinkwrap.json +44 -43
- package/package.json +4 -7
- package/server/jobs/jobProcess.js +16 -16
- package/server/threads/threadServer.js +2 -2
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.dbbf05d9.js → main.925ae583.js} +2 -2
- package/utility/scripts/restartHdb.js +2 -2
- /package/studio/build-local/static/js/{main.dbbf05d9.js.LICENSE.txt → main.925ae583.js.LICENSE.txt} +0 -0
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Pk.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(xk,"findPs")});var dt=g((xae,BO)=>{"use strict";var qk="__dbis__",Gk="__txns__",Fk="__environment_name__",kk="__dbi_defintion__",Vk={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},$k=["__createdtime__","__updatedtime__"],Yk="\uFFFF",vO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Kk=Object.values(vO);BO.exports={AUDIT_STORE_NAME:Gk,INTERNAL_DBIS_NAME:qk,DBI_DEFINITION_NAME:kk,SEARCH_TYPES:Vk,TIMESTAMP_NAMES:$k,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Fk,TRANSACTIONS_DBI_NAMES_ENUM:vO,TRANSACTIONS_DBIS:Kk,OVERFLOW_MARKER:Yk}});var yr=g((qae,YO)=>{"use strict";var HO=M(),xO=dt(),qO={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},GO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),FO={500:GO("There was an error processing your request."),400:"Invalid request"},Wk=FO[qO.INTERNAL_SERVER_ERROR],Qk={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},zk={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Jk={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},jk={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${xO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${xO.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},Xk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${HO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${HO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},kO={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},Zk={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},eV={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},tV={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},rV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},sV={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},VO={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},$O={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},nV={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},iV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},oV={...kO,...Jk,...Qk,...Zk,...eV,...tV,...rV,...sV,...Xk,...VO,...$O,...nV,...iV,...zk};YO.exports={CHECK_LOGS_WRAPPER:GO,HDB_ERROR_MSGS:oV,DEFAULT_ERROR_MSGS:FO,DEFAULT_ERROR_RESP:Wk,HTTP_STATUS_CODES:qO,LMDB_ERRORS_ENUM:jk,AUTHENTICATION_ERROR_MSGS:kO,VALIDATION_ERROR_MSGS:VO,ITC_ERRORS:$O}});var se=g((Fae,QO)=>{"use strict";var xo=yr(),aV=$(),cV=M(),jl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,KO),this.statusCode=s||xo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(xo.DEFAULT_ERROR_MSGS[s]?xo.DEFAULT_ERROR_MSGS[s]:xo.DEFAULT_ERROR_MSGS[xo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&aV[n](i)}},Mh=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Uh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function KO(e,t,r,s=cV.LOG_LEVELS.ERROR,n=null,i=!1){if(WO(e))return e;let o=new jl(e,t,r,s,n);return i&&delete o.stack,o}a(KO,"handleHDBError");function WO(e){return e.__proto__.constructor.name===jl.name}a(WO,"isHDBError");QO.exports={isHDBError:WO,handleHDBError:KO,ClientError:Mh,ServerError:Uh,hdb_errors:xo}});var Je=g((Vae,tb)=>{"use strict";var hc=M(),uV=Q(),sr=ee(),mc=require("path"),lV=require("minimist"),zO=require("fs-extra"),JO=require("lodash");sr.initSync();var{CONFIG_PARAMS:Jn,DATABASES_PARAM_CONFIG:_c,SYSTEM_SCHEMA_NAME:Xl}=hc,dc,fc,Ec;function jO(){if(dc!==void 0)return dc;if(sr.getHdbBasePath()!==void 0)return dc=sr.get(Jn.STORAGE_PATH)||mc.join(sr.getHdbBasePath(),hc.DATABASES_DIR_NAME),dc}a(jO,"getBaseSchemaPath");function XO(){if(fc!==void 0)return fc;if(sr.getHdbBasePath()!==void 0)return fc=eb(Xl),fc}a(XO,"getSystemSchemaPath");function ZO(){if(Ec!==void 0)return Ec;if(sr.getHdbBasePath()!==void 0)return Ec=sr.get(hc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||mc.join(sr.getHdbBasePath(),hc.TRANSACTIONS_DIR_NAME),Ec}a(ZO,"getTransactionAuditStoreBasePath");function _V(e,t){let r=sr.get(Jn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||mc.join(ZO(),e.toString())}a(_V,"getTransactionAuditStorePath");function eb(e,t){e=e.toString(),t=t&&t.toString();let r=sr.get(hc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||mc.join(jO(),e)}a(eb,"getSchemaPath");function dV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,lV(process.argv));let s=r[Jn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!uV.isObject(s))throw o;i=s}for(let o of i){let c=o[Xl];if(!c)continue;let u=sr.get(Jn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[_c.PATH];if(_)return JO.set(u,[Xl,_c.TABLES,t,_c.PATH],_),sr.setProperty(Jn.DATABASES,u),_;let l=c?.[_c.PATH];if(l)return JO.set(u,[Xl,_c.PATH],l),sr.setProperty(Jn.DATABASES,u),l}}let n=r[Jn.STORAGE_PATH.toUpperCase()];if(n){if(!zO.pathExistsSync(n))throw new Error(n+" does not exist");let i=mc.join(n,e);return zO.mkdirsSync(i),sr.setProperty(Jn.STORAGE_PATH,n),i}return XO()}a(dV,"initSystemSchemaPaths");function fV(){dc=void 0,fc=void 0,Ec=void 0}a(fV,"resetPaths");tb.exports={getBaseSchemaPath:jO,getSystemSchemaPath:XO,getTransactionAuditStorePath:_V,getTransactionAuditStoreBasePath:ZO,getSchemaPath:eb,initSystemSchemaPaths:dV,resetPaths:fV}});var wr=g((Wae,ob)=>{"use strict";var EV=yr().LMDB_ERRORS_ENUM,Yae=require("lmdb"),hV=dt(),Kae=require("buffer").Buffer,{OVERFLOW_MARKER:rb,MAX_SEARCH_KEY_LENGTH:Zl}=hV,sb=["number","string","symbol","boolean","bigint"];function mV(e){if(e=e?.primaryStore||e,!e)throw new Error(EV.ENV_REQUIRED)}a(mV,"validateEnv");function pV(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(pV,"stringifyData");function SV(e){return e instanceof Date?e.valueOf():e}a(SV,"convertKeyValueToWrite");function TV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(sb.includes(typeof e))return e.length>Zl?[e.slice(0,Zl)+rb]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(sb.includes(typeof i))i.length>Zl?r.push(i.slice(0,Zl)+rb):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(TV,"getIndexedValues");var e_=0,nb=0;function ib(){nb=Date.now()-performance.now()}a(ib,"adjustStartTime");ib();var gV=6e4;setInterval(ib,gV).unref();function RV(){let e=performance.now()+nb;return e>e_?(e_=e,e):(e_+=488e-6,e_)}a(RV,"getNextMonotonicTime");ob.exports={validateEnv:mV,stringifyData:pV,convertKeyValueToWrite:SV,getNextMonotonicTime:RV,getIndexedValues:TV}});var ab,As,Ph,pc=Re(()=>{ab=require("events"),As=class extends ab.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Ph;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Ph=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Pi={};Ye(Pi,{server:()=>tt});var cb,tt,nr=Re(()=>{cb=require("../index"),tt={};(0,cb._assignPackageExport)("server",tt)});var Hh={};Ye(Hh,{loadGQLSchema:()=>bV,start:()=>Bh,startOnMainThread:()=>OV});function Bh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let z of B.arguments)J[z.name.value]=z.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&J.push(z.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):AV.includes(S.type)||(0,ub.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,vh.dirname)(s),S.tableClass):i.set((0,vh.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass))}}var vh,ub,AV,OV,bV,lb=Re(()=>{vh=require("path");Ae();ub=x(Ke()),AV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Bh,"start");OV=Bh,bV=Bh({ensureTable:ct}).handleFile});async function t_(e){return NV?(Sc||(Sc=yV(IV)),(await(await Sc).import(e)).namespace):import(e)}async function yV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Sc=new Compartment({console,Math,Date,fetch:wV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,db.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:qt,tables:Ir,databases:rt})}};let s=await(0,_b.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Sc}function wV(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 IV(){return{Resource:qt,tables:Ir}}var _b,db,NV,Sc,xh=Re(()=>{Os();Ae();_b=require("fs/promises"),db=require("path"),NV=!1;a(t_,"secureImport");a(yV,"getCompartment");a(wV,"secureOnlyFetch");a(IV,"getGlobalVars")});var Gh={};Ye(Gh,{handleFile:()=>CV});async function CV(e,t,r,s){let n=new Map,i=(0,fb.pathToFileURL)(r).toString(),o=await t_(i);u(o.default)&&s.set((0,qh.dirname)(t),o.default),c(o,(0,qh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var fb,qh,Eb=Re(()=>{fb=require("url");xh();qh=require("path");a(CV,"handleFile")});var kh={};Ye(kh,{start:()=>DV});function DV({resources:e}){e.set("login",Fh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Fh,hb=Re(()=>{Os();a(DV,"start");Fh=class extends qt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var Ab={};Ye(Ab,{parse:()=>$h,streamAsJSON:()=>Tc,stringify:()=>vi});function Tc(e){return new Vh({value:e})}function mb(e){return console.error(e),JSON.stringify(e.toString())}function pb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function vi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===gb)return Rb(e);if(t.resolution)return t.resolution.then(()=>vi(e));throw t}}function Rb(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let s=0;s<e.length;s++)s>0&&(r+=","),r+=Rb(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+vi(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function $h(e){return UV.test(e)?LV.parse(e):JSON.parse(e)}var Sb,Tb,LV,MV,gb,Vh,UV,Yh=Re(()=>{Sb=require("stream"),Tb=x(require("json-bigint-fixes")),LV=(0,Tb.default)({useNativeBigInt:!0}),MV=1e4,gb={};BigInt.prototype.toJSON=function(){throw gb};a(Tc,"streamAsJSON");Vh=class extends Sb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),mb)}catch(n){yield mb(n)}else yield vi(t)}else yield vi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);pb(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>MV?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return pb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(mb,"handleError");a(pb,"when");a(vi,"stringify");a(Rb,"jsStringify");UV=/-?\d{16,}/;a($h,"parse")});var vb=g((uce,Pb)=>{"use strict";var Kh=require("recursive-iterator"),PV=require("alasql"),Wh=require("clone"),Ob=Q(),{handleHDBError:bb,hdb_errors:vV}=se(),{HDB_ERROR_MSGS:Nb,HTTP_STATUS_CODES:yb}=vV,{getDatabases:BV}=(Ae(),ne(Ge)),HV=["DISTINCT_ARRAY"],wb=Symbol("validateTables"),Qh=Symbol("validateTable"),cce=Symbol("getAllColumns"),Ib=Symbol("validateAllColumns"),r_=Symbol("findColumn"),Cb=Symbol("validateOrderBy"),gc=Symbol("validateSegment"),zh=Symbol("validateColumn"),Db=Symbol("setColumnsForTable"),Lb=Symbol("checkColumnsForAsterisk"),Mb=Symbol("validateGroupBy"),Ub=Symbol("hasColumns"),Jh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[wb](),this[Lb](),this[Ib]()}[wb](){if(this[Ub]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Qh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Qh](t.table)})}}[Ub](){let t=!1,r=new Kh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Qh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=BV();if(!r[t.databaseid])throw bb(new Error,Nb.SCHEMA_NOT_FOUND(t.databaseid),yb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw bb(new Error,Nb.TABLE_NOT_FOUND(t.databaseid,t.tableid),yb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Wh(n);i.table=Wh(t),this.attributes.push(i)})}[r_](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)}[Lb](){let t=new Kh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Db](r.tableid)}[Db](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new PV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Ib](){this[gc](this.statement.columns,!1),this[gc](this.statement.joins,!1),this[gc](this.statement.where,!1),this[Mb](this.statement.group,!1),this[gc](this.statement.order,!0)}[gc](t,r){if(!t)return;let s=new Kh(t),n=[];for(let{node:i,path:o}of s)!Ob.isEmpty(i)&&!Ob.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Cb](i):n.push(this[zh](i)));return n}[Mb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&HV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Wh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[r_](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[r_](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.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`}[Cb](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[zh](t)}[zh](t){let r=this[r_](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Pb.exports=Jh});var Hb=g((_ce,Bb)=>{"use strict";var jh=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")}};Bb.exports=jh});var qb=g((fce,xb)=>{"use strict";var Xh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};xb.exports=Xh});var Vb={};Ye(Vb,{HAS_EXPIRATION:()=>om,LAST_TIMESTAMP_PLACEHOLDER:()=>Oc,LOCAL_TIMESTAMP:()=>xV,METADATA:()=>Rc,NO_TIMESTAMP:()=>em,PENDING_LOCAL_TIME:()=>am,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>im,RecordEncoder:()=>sm,TIMESTAMP_ASSIGN_LAST:()=>GV,TIMESTAMP_ASSIGN_NEW:()=>Fb,TIMESTAMP_ASSIGN_PREVIOUS:()=>kb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>tm,fromResource:()=>a_,getUpdateRecord:()=>cm,handleLocalTimeForGets:()=>c_});function kV(){return Ac[0]=Ac[0]^64,qV.getFloat64(0)}function a_(e){nm=!0;try{return e()}finally{nm=!1}}function c_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Rc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,Bi.push(new WeakRef(this))),!nm)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Bi.length;u++){let _=Bi[u].deref();(!_||_.isDone||_.isCommitted)&&Bi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function cm(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?qo=i?.localTime?tm|kb:em:qo=u?i?.localTime?tm|16384:Fb|16384:em,l>0&&(c|=om),i_=c,rm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:qo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(u){let T=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Dt(R).previousLocalTime;return r.put(b,o_(o,t,s,L,T,d,n_),{ifVersion:p}),S}}r.put(Oc,o_(o,t,s,i?.localTime?1:0,T,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var Gb,Zh,s_,Oc,im,xV,Rc,Ac,qV,em,Fb,GV,kb,tm,om,am,FV,n_,qo,i_,rm,sm,mce,nm,Bi,Go=Re(()=>{Gb=require("msgpackr");Hi();Zh=x($()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),Oc=new Uint8Array([1,1,1,1,1,0,0,0]),im=new Uint8Array([1,1,1,1,3,64,0,0]),xV=Symbol("local-timestamp"),Rc=Symbol("metadata"),Ac=new Uint8Array(8),qV=new DataView(Ac.buffer,0,8),em=0,Fb=0,GV=1,kb=3,tm=4,om=16,am=1,qo=0,i_=-1,rm=0,sm=class extends Gb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(qo||i_>=0){let i=0,o=qo;o&&(i+=8,qo=0);let c=i_,u=rm;c>=0&&(i+=2,i_=-1,u&&(i+=8,rm=0));let _=FV=r.call(this,s,n|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Ac,0,c),c+=8;else for(let d=0;d<8;d++)Ac[d]=t[c++];u=kV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&om&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[Rc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(kV,"getTimestamp");mce=Map.prototype.get;a(a_,"fromResource");a(c_,"handleLocalTimeForGets");Bi=[];setInterval(()=>{for(let e=0;e<Bi.length;e++){let t=Bi[e].deref();!t||t.isDone||t.isCommitted?Bi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Zh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Zh.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(cm,"getUpdateRecord")});var u_=g((Sce,$b)=>{"use strict";var lm=ee(),_m=M(),{RecordEncoder:VV}=(Go(),ne(Vb));lm.initSync();var $V=lm.get(_m.CONFIG_PARAMS.STORAGE_COMPRESSION),YV=lm.get(_m.CONFIG_PARAMS.STORAGE_CACHING)!==!1,KV=_m.UPDATES_PROPERTY,um=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=$V&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=YV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:VV},this.alwaysLazyProperty=s=>s===KV)}};$b.exports=um});var __=g((gce,Kb)=>{"use strict";var Fo=ee(),bc=M();Fo.initSync();var WV=Fo.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Fo.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Fo.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Yb=Fo.get(bc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),QV=Fo.get(bc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),l_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=WV,this.noFSAccess=!0,Yb!==void 0&&(this.overlappingSync=Yb),this.noReadAhead=QV}};Kb.exports=l_;l_.MAX_DBS=1e4});var We=g((Ace,rN)=>{"use strict";var fm=require("lmdb"),bs=require("fs-extra"),Cr=require("path"),d_=wr(),zb=$(),ir=yr().LMDB_ERRORS_ENUM,f_=qb(),Em=u_(),Jb=__(),jn=dt(),Wb=M(),{table:zV,resetDatabases:JV}=(Ae(),ne(Ge)),Qb=ee(),Ns=jn.INTERNAL_DBIS_NAME,jb=jn.DBI_DEFINITION_NAME,jV="data.mdb",XV="lock.mdb",Nc=".mdb",ZV="-lock",dm=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=rs(t,r),this.key_type=this.dbi[jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new fm.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function E_(e,t){if(e===void 0)throw new Error(ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ir.ENV_NAME_REQUIRED)}a(E_,"pathEnvNameValidation");async function hm(e,t,r=!0){try{await bs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ir.INVALID_BASE_PATH):s}try{let s=Cr.join(e,t+Nc);return await bs.access(s,bs.constants.R_OK|bs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bs.access(Cr.join(e,t,jV),bs.constants.R_OK|bs.constants.F_OK),Cr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ir.INVALID_ENVIRONMENT)}else throw new Error(ir.INVALID_ENVIRONMENT);throw s}}a(hm,"validateEnvironmentPath");function h_(e,t){if(d_.validateEnv(e),t===void 0)throw new Error(ir.DBI_NAME_REQUIRED)}a(h_,"validateEnvDBIName");async function e$(e,t,r=!1,s=!1){E_(e,t);let n=Cr.basename(e);t=t.toString();let i=Qb.get(Wb.CONFIG_PARAMS.DATABASES);i||Qb.setProperty(Wb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await hm(e,t,s),Xb(e,t,r)}catch(o){if(o.message===ir.INVALID_ENVIRONMENT){let c=Cr.join(e,t);await bs.mkdirp(s?c:e);let u=new Jb(s?c:c+Nc,!1),_=fm.open(u);_.dbis=Object.create(null);let l=new Em(!1);_.openDB(Ns,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=mm(e,t,r);return _[jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(e$,"createEnvironment");async function t$(e,t,r,s=!0){E_(e,t),t=t.toString();let n=Cr.join(e,t);return zV({table:t,database:Cr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(t$,"copyEnvironment");async function Xb(e,t,r=!1){E_(e,t),t=t.toString();let s=mm(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await hm(e,t),i=Cr.join(e,t+Nc),o=n!=i,c=new Jb(n,o),u=fm.open(c);u.dbis=Object.create(null);let _=eN(u);for(let l=0;l<_.length;l++)rs(u,_[l]);return u[jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Xb,"openEnvironment");async function r$(e,t,r=!1){E_(e,t),t=t.toString();let s=Cr.join(e,t+Nc),n=await hm(e,t);if(global.lmdb_map!==void 0){let i=mm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Zb(o),delete global.lmdb_map[i]}}await bs.remove(n),await bs.remove(n===s?n+ZV:Cr.join(Cr.dirname(n),XV))}a(r$,"deleteEnvironment");async function Zb(e){d_.validateEnv(e);let t=e[jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Zb,"closeEnvironment");function mm(e,t,r=!1){let n=`${Cr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(mm,"getCachedEnvironmentName");function s$(e){d_.validateEnv(e);let t=Object.create(null),r=rs(e,Ns);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ns)try{t[s]=Object.assign(new f_,n)}catch{zb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(s$,"listDBIDefinitions");function eN(e){d_.validateEnv(e);let t=[],r=rs(e,Ns);for(let{key:s}of r.getRange({start:!1}))s!==Ns&&t.push(s);return t}a(eN,"listDBIs");function n$(e,t){let s=rs(e,Ns).getEntry(t),n=new f_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{zb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(n$,"getDBIDefinition");function tN(e,t,r,s=!r){if(h_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rs(e,t)}catch(n){if(n.message===ir.DBI_DOES_NOT_EXIST){let i=new Em(r,s===!0),o=e.openDB(t,i),c=new f_(r===!0,s);return o[jb]=c,rs(e,Ns).putSync(t,c),e.dbis[t]=o,o}throw n}}a(tN,"createDBI");function rs(e,t){if(h_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ns?r=n$(e,t):r=new f_,r===void 0)throw new Error(ir.DBI_DOES_NOT_EXIST);let s;try{let n=new Em(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ir.DBI_DOES_NOT_EXIST):n}return s[jb]=r,e.dbis[t]=s,s}a(rs,"openDBI");function i$(e,t){h_(e,t),t=t.toString();let r=rs(e,t),s=r.getStats();return r[jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(i$,"statDBI");async function o$(e,t){try{let r=Cr.join(e,t+Nc);return(await bs.stat(r)).size}catch{throw new Error(ir.INVALID_ENVIRONMENT)}}a(o$,"environmentDataSize");function a$(e,t){if(h_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_DROP_INTERNAL_DBIS_NAME);rs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rs(e,Ns).removeSync(t)}a(a$,"dropDBI");function c$(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{rs(e,i)}catch(o){if(o.message===ir.DBI_DOES_NOT_EXIST)tN(e,i,i!==t,i===t),s=!0;else throw o}}s&&JV()}a(c$,"initializeDBIs");rN.exports={openDBI:rs,openEnvironment:Xb,createEnvironment:e$,listDBIs:eN,listDBIDefinitions:s$,createDBI:tN,dropDBI:a$,statDBI:i$,deleteEnvironment:r$,initializeDBIs:c$,TransactionCursor:dm,environmentDataSize:o$,copyEnvironment:t$,closeEnvironment:Zb}});var nN=g((bce,sN)=>{"use strict";var pm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};sN.exports=pm});var oN=g((yce,iN)=>{"use strict";var Sm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};iN.exports=Sm});var cN=g((Ice,aN)=>{"use strict";var Tm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};aN.exports=Tm});var ko=g((Uce,_N)=>{"use strict";var u$=We(),l$=nN(),_$=oN(),d$=cN(),Ks=wr(),yc=yr().LMDB_ERRORS_ENUM,f$=dt(),pn=M(),E$=Q(),h$=require("uuid"),Dce=require("lmdb"),{handleHDBError:m$,hdb_errors:p$}=se(),{OVERFLOW_MARKER:Lce,MAX_SEARCH_KEY_LENGTH:Mce}=f$,uN=ee();uN.initSync();var m_=uN.get(pn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gm=pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,xi=pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function S$(e,t,r,s,n=Ks.getNextMonotonicTime()){bm(e,t,r,s),Rm(e,t,r);let i=new l$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];lN(_,!0,n);let l=T$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Am(o,c,s,i,n)}a(S$,"insertRecords");function T$(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][pn.FUNC_VAL],s[o]=c)}let u=Ks.getIndexedValues(c),_=e.dbis[o];if(u){m_&&_.prefetch(u.map(l=>({key:l,value:n})),p_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}m_&&e.dbis[t].prefetch([n],p_),e.dbis[t].put(n,s,s[xi])})}a(T$,"insertRecord");function g$(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(g$,"removeSkippedRecords");function lN(e,t,r){let s=r>0;(s||!Number.isInteger(e[xi]))&&(e[xi]=r||(r=Ks.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[gm]))&&(e[gm]=r||Ks.getNextMonotonicTime()):delete e[gm]}a(lN,"setTimestamps");function Rm(e,t,r){r.indexOf(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),u$.initializeDBIs(e,t,r)}a(Rm,"initializeTransaction");async function R$(e,t,r,s,n=Ks.getNextMonotonicTime()){bm(e,t,r,s),Rm(e,t,r);let i=new _$,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Om(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Am(c,u,s,i,n,o)}a(R$,"updateRecords");async function A$(e,t,r,s,n=Ks.getNextMonotonicTime()){try{bm(e,t,r,s)}catch(u){throw m$(u,u.message,p$.HTTP_STATUS_CODES.BAD_REQUEST)}Rm(e,t,r);let i=new d$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;E$.isEmpty(_[t])?(l=h$.v4(),_[t]=l):l=_[t];let d=Om(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Am(o,c,s,i,n)}a(A$,"upsertRecords");async function Am(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ks.getNextMonotonicTime(),g$(r,i),s}a(Am,"finalizeWrite");function Om(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(lN(r,!l,o),Number.isInteger(r[xi])&&_[xi]>r[xi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][pn.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Ks.getIndexedValues(T);if(b){m_&&S.prefetch(b.map(R=>({key:R,value:s})),p_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],s)}if(b=Ks.getIndexedValues(p),b){m_&&S.prefetch(b.map(R=>({key:R,value:s})),p_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],s)}}let E=Object.assign({},_,r);c.put(s,E,E[xi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Om(e,t,r,s,n,i,o))}a(Om,"updateUpsertRecord");function O$(e,t,r){if(Ks.validateEnv(e),t===void 0)throw new Error(yc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yc.WRITE_ATTRIBUTES_REQUIRED):new Error(yc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(O$,"validateBasic");function bm(e,t,r,s){if(O$(e,t,r),!Array.isArray(s))throw s===void 0?new Error(yc.RECORDS_REQUIRED):new Error(yc.RECORDS_MUST_BE_ARRAY)}a(bm,"validateWrite");function p_(){}a(p_,"noop");_N.exports={insertRecords:S$,updateRecords:R$,upsertRecords:A$}});var qi=g((vce,b$)=>{b$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},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:"__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:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},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 Qs=g((Bce,EN)=>{"use strict";var fN=Q(),dN=M(),Vo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ws=require("joi"),Xn={schema_format:{pattern:Vo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},N$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number(),Ws.array()).required(),y$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()),w$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()).required();function I$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:Vo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(I$,"checkValidTable");function C$(e,t){return fN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(C$,"validateSchemaExists");function D$(e,t){let r=t.state.ancestors[0].schema;return fN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(D$,"validateTableExists");function L$(e,t){return e.toLowerCase()===dN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${dN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(L$,"validateSchemaName");EN.exports={common_validators:Xn,schema_regex:Vo,hdb_schema_table:N$,validateSchemaExists:C$,validateTableExists:D$,validateSchemaName:L$,checkValidTable:I$,hdb_database:y$,hdb_table:w$}});var je=g((xce,hN)=>{"use strict";var or=require("validate.js");or.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||or.validators.type.checks[t](e)?null:` must be a '${t}' value`};or.validators.type.checks={Object:function(e){return or.isObject(e)&&!or.isArray(e)},Array:or.isArray,Integer:or.isInteger,Number:or.isNumber,String:or.isString,Date:or.isDate,Boolean:function(e){return typeof e=="boolean"}};or.validators.hasValidFileExt=function(e,t){return or.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};hN.exports={validateObject:M$,validateObjectAsync:U$,validateBySchema:P$};function M$(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=or(e,t,{format:"flat"});return r?new Error(r):null}a(M$,"validateObject");async function U$(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await or.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(U$,"validateObjectAsync");function P$(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(P$,"validateBySchema")});var S_=g((Gce,mN)=>{var{common_validators:zs}=Qs(),Ic=je(),wc="is required",ft={database:{presence:!1,format:zs.schema_format,length:zs.schema_length},schema:{presence:!1,format:zs.schema_format,length:zs.schema_length},table:{presence:!0,format:zs.schema_format,length:zs.schema_length},attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length},hash_attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length}};function Cc(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Cc,"makeAttributesStrings");function v$(e){return e=Cc(e),ft.table.presence=!1,ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(v$,"schema_object");function B$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(B$,"table_object");function H$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,Ic.validateObject(e,ft)}a(H$,"create_table_object");function x$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence={message:wc},ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(x$,"attribute_object");function q$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(q$,"describe_table");function G$(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(G$,"validateTableResidence");mN.exports={schema_object:v$,create_table_object:H$,table_object:B$,attribute_object:x$,describe_table:q$,validateTableResidence:G$}});var SN=g((kce,pN)=>{"use strict";var F$=require("uuid"),Nm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||F$.v4(),this.schema_table=`${this.schema}.${this.table}`}};pN.exports=Nm});var T_=g(($ce,TN)=>{"use strict";var k$=SN(),ym=class extends k${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};TN.exports=ym});var RN=g((Kce,gN)=>{"use strict";gN.exports=$$;var V$="inserted";function $$(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===V$?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a($$,"returnObject")});var g_=g((Qce,yN)=>{"use strict";var Y$=M(),wm=We(),K$=ko(),{getSystemSchemaPath:W$,getSchemaPath:Q$}=Je(),z$=qi(),J$=S_(),j$=T_(),X$=RN(),{handleHDBError:AN,hdb_errors:bN}=se(),ON=Q(),{HTTP_STATUS_CODES:Z$}=bN,Im=z$.hdb_attribute,NN=[];for(let e=0;e<Im.attributes.length;e++)NN.push(Im.attributes[e].attribute);var e1="inserted";yN.exports=t1;async function t1(e){let t=J$.attribute_object(e);if(t)throw AN(new Error,t.message,bN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ON.checkGlobalSchemaTable(e.schema,e.table);if(r)throw AN(new Error,r,Z$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ON.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new j$(e.schema,e.table,e.attribute,e.id);try{let i=await wm.openEnvironment(Q$(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}`);wm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await wm.openEnvironment(W$(),Y$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await K$.insertRecords(o,Im.hash_attribute,NN,[n]);return X$(e1,c,{records:[n]},u)}catch(i){throw i}}a(t1,"lmdbCreateAttribute")});var Dm=g((Jce,IN)=>{var{hdb_table:r1,hdb_database:wN}=Qs(),s1=je(),Cm=require("joi"),n1={undefined:"undefined",null:"null"},i1=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||n1[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),o1=Cm.object({database:wN,schema:wN,table:r1,records:Cm.array().items(Cm.object().custom(i1)).required()});IN.exports=function(e){return s1.validateBySchema(e,o1)}});var Dc=g((Zce,DN)=>{"use strict";var Sn=Q(),CN=$(),Xce=Dm(),{getDatabases:a1}=(Ae(),ne(Ge)),{ClientError:Gi}=se();DN.exports=c1;function c1(e){if(Sn.isEmpty(e))throw new Gi("invalid update parameters defined.");if(Sn.isEmptyOrZeroLength(e.schema))throw new Gi("invalid schema specified.");if(Sn.isEmptyOrZeroLength(e.table))throw new Gi("invalid table specified.");if(!Array.isArray(e.records))throw new Gi("records must be an array");let t=a1()[e.schema]?.[e.table];if(Sn.isEmpty(t))throw new Gi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Sn.isEmptyOrZeroLength(o[r]))throw CN.error("a valid hash attribute must be provided with update record:",o),new Gi("a valid hash attribute must be provided with update record, check log for more info");if(!Sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Gi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Sn.isEmpty(o[r])&&o[r]!==""&&s.has(Sn.autoCast(o[r]))&&(o.skip=!0),s.add(Sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(c1,"insertUpdateValidate")});var Lc=g((tue,LN)=>{"use strict";var u1=M().OPERATIONS_ENUM,Lm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=u1.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};LN.exports=Lm});var Mc=g((nue,UN)=>{"use strict";var sue=Lc(),R_=M(),Mm=Q(),MN=$(),l1=require("uuid"),{handleHDBError:A_,hdb_errors:_1}=se(),{HDB_ERROR_MSGS:O_,HTTP_STATUS_CODES:b_}=_1;UN.exports=d1;function d1(e,t,r){for(let n=0;n<t.length;n++)f1(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];E1(i,r,e.operation)}}a(d1,"processRows");function f1(e){if(Buffer.byteLength(String(e))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw A_(new Error,O_.ATTR_NAME_LENGTH_ERR(e),b_.BAD_REQUEST,void 0,void 0,!0);if(Mm.isEmptyOrZeroLength(e)||Mm.isEmpty(e.trim()))throw A_(new Error,O_.ATTR_NAME_NULLISH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(f1,"validateAttribute");function E1(e,t,r){if(!e.hasOwnProperty(t)||Mm.isEmptyOrZeroLength(e[t])){if(r===R_.OPERATIONS_ENUM.INSERT||r===R_.OPERATIONS_ENUM.UPSERT){e[t]=l1.v4();return}throw MN.error("Update transaction aborted due to record with no hash value:",e),A_(new Error,O_.RECORD_MISSING_HASH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw MN.error(e),A_(new Error,O_.HASH_VAL_LENGTH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(E1,"validateHash")});var vN=g((oue,PN)=>{"use strict";var Um=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};PN.exports=Um});var xN=g((cue,HN)=>{"use strict";var Pm=We(),h1=$(),BN=yr().LMDB_ERRORS_ENUM;HN.exports=m1;async function m1(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 Pm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==BN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Pm.closeEnvironment(global.lmdb_map[s]),await Pm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==BN.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){h1.error(t)}}a(m1,"cleanLMDBMap")});var Tn=g((lue,kN)=>{"use strict";var Uc=require("crypto"),p1=ee(),{CONFIG_PARAMS:S1}=M(),GN="aes-256-cbc",T1=32,g1=16,vm=64,FN=32,R1=vm+FN,qN=new Map;kN.exports={encrypt:A1,decrypt:O1,createNatsTableStreamName:b1};function A1(e){let t=Uc.randomBytes(T1),r=Uc.randomBytes(g1),s=Uc.createCipheriv(GN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(A1,"encrypt");function O1(e){let t=e.substr(0,vm),r=e.substr(vm,FN),s=e.substr(R1,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Uc.createDecipheriv(GN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(O1,"decrypt");function b1(e,t){let r=p1.get(S1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=qN.get(r);return s||(s=Uc.createHash("md5").update(r).digest("hex"),qN.set(r,s)),s}a(b1,"createNatsTableStreamName")});var Zn=g((fue,$N)=>{"use strict";var due=Dr(),N_=$(),VN=S_(),N1=Tn(),y_=Q(),{handleHDBError:w_,hdb_errors:y1}=se(),{HDB_ERROR_MSGS:I_,HTTP_STATUS_CODES:Bm}=y1,w1=ee();w1.initSync();var{getDatabases:Hm}=(Ae(),ne(Ge));$N.exports={describeAll:I1,describeTable:C_,describeSchema:C1};async function I1(e){try{let t=y_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Hm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await C_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await C_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){N_.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return N_.error("Got an error in describeAll"),N_.error(t),w_(new Error,I_.DESCRIBE_ALL_ERR)}}a(I1,"describeAll");async function C_(e,t){y_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=VN.describe_table(e);if(i)throw i;let c=Hm()[r];if(!c)throw w_(new Error,I_.SCHEMA_NOT_FOUND(e.schema),Bm.NOT_FOUND);let u=c[s];if(!u)throw w_(new Error,I_.TABLE_NOT_FOUND(e.schema,e.table),Bm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=N1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){N_.warn(`unable to stat table dbi due to ${f}`)}return d}a(C_,"descTable");async function C1(e){y_.transformReq(e);let t=VN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Hm()[s];if(!i)throw w_(new Error,I_.SCHEMA_NOT_FOUND(e.schema),Bm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),y_.isEmpty(u)||u.describe){let _=await C_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(C1,"describeSchema")});var gn=g((pue,zN)=>{var D1=qi(),{callbackify:KN,promisify:L1}=require("util"),{getDatabases:WN}=(Ae(),ne(Ge));zN.exports={setSchemaDataToGlobal:YN,getTableSchema:M1,getSystemSchema:U1,setSchemaDataToGlobalAsync:L1(YN)};var QN=Zn(),hue=KN(QN.describeAll),mue=KN(QN.describeTable);function YN(e){global.hdb_schema=WN(),e&&e()}a(YN,"setSchemaDataToGlobal");function M1(e,t,r){let s=WN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(M1,"getTableSchema");function U1(){return D1}a(U1,"getSystemSchema")});var Lr=g((Tue,ZN)=>{"use strict";var L_=Dm(),Gt=Q(),P1=require("util"),M_=ys(),v1=gn(),JN=$(),{handleHDBError:Fi,hdb_errors:B1}=se(),{HTTP_STATUS_CODES:ki}=B1,H1=P1.promisify(v1.getTableSchema),x1="updated",jN="inserted",XN="upserted";ZN.exports={insert:G1,update:F1,upsert:k1,validation:q1,flush:V1};async function q1(e){if(Gt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Gt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Gt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await H1(e.schema,e.table),r=L_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Gt.isEmptyOrZeroLength(c[s]))throw JN.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(!Gt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw JN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Gt.isEmpty(c[s])&&c[s]!==""&&n.has(Gt.autoCast(c[s]))&&(c.skip=!0),n.add(Gt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(q1,"validation");async function G1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=L_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await M_.createRecords(e);return D_(jN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(G1,"insertData");async function F1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=L_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await M_.updateRecords(e);return Gt.isEmpty(s.existing_rows)?D_(x1,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):D_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(F1,"updateData");async function k1(e){if(e.operation!=="upsert")throw Fi(new Error,"invalid operation, must be upsert",ki.INTERNAL_SERVER_ERROR);let t=L_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await M_.upsertRecords(e);return D_(XN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(k1,"upsertData");function D_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===jN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===XN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(D_,"returnObject");function V1(e){return Gt.transformReq(e),M_.flush(e.schema,e.table)}a(V1,"flush")});var qm=g((Rue,ry)=>{var $1=je(),xm=require("joi"),{hdb_table:Y1,hdb_database:ey}=Qs(),ty={schema:ey,database:ey,table:Y1},K1={date:xm.date().iso().required()},W1={timestamp:xm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ry.exports=function(e,t){let r=t==="timestamp"?{...ty,...W1}:{...ty,...K1},s=xm.object(r);return $1.validateBySchema(e,s)}});var iy=g((Aue,ny)=>{var Q1=je(),Gm=require("joi"),{hdb_table:z1,hdb_database:sy}=Qs(),J1=Gm.object({schema:sy,database:sy,table:z1,hash_values:Gm.array().required(),ids:Gm.array()});ny.exports=function(e){return Q1.validateBySchema(e,J1)}});var ay=g((Oue,oy)=>{"use strict";var Fm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},km=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Vm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};oy.exports={InsertObject:Fm,NoSQLSeachObject:km,DeleteResponseObject:Vm}});var ri=g((Nue,dy)=>{"use strict";var uy=qm(),j1=iy(),Vi=Q(),cy=require("moment"),ly=$(),{promisify:X1,callbackify:Z1}=require("util"),$i=M(),eY=gn(),$m=X1(eY.getTableSchema),Ym=ys(),{DeleteResponseObject:tY}=ay(),{handleHDBError:ei,hdb_errors:rY}=se(),{HDB_ERROR_MSGS:U_,HTTP_STATUS_CODES:ti}=rY,sY="records successfully deleted",nY=Z1(_y);dy.exports={delete:nY,deleteRecord:_y,deleteFilesBefore:iY,deleteAuditLogsBefore:oY};async function iY(e){let t=uy(e,"date");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),!cy(e.date,cy.ISO_8601).isValid())throw ei(new Error,U_.INVALID_DATE,ti.BAD_REQUEST,$i.LOG_LEVELS.ERROR,U_.INVALID_DATE,!0);let s=Vi.checkSchemaTableExist(e.schema,e.table);if(s)throw ei(new Error,s,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,s,!0);let n=await Ym.deleteRecordsBefore(e);if(await $m(e.schema,e.table),ly.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(iY,"deleteFilesBefore");async function oY(e){let t=uy(e,"timestamp");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),isNaN(e.timestamp))throw ei(new Error,U_.INVALID_VALUE("Timestamp"),ti.BAD_REQUEST,$i.LOG_LEVELS.ERROR,U_.INVALID_VALUE("Timestamp"),!0);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);let s=await Ym.deleteAuditLogsBefore(e);return await $m(e.schema,e.table),ly.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(oY,"deleteAuditLogsBefore");async function _y(e){e.ids&&(e.hash_values=e.ids);let t=j1(e);if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);Vi.transformReq(e);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);try{await $m(e.schema,e.table);let s=await Ym.deleteRecords(e);return Vi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${sY}`),s}catch(s){if(s.message===$i.SEARCH_NOT_FOUND_MESSAGE){let n=new tY;return n.message=$i.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(_y,"deleteRecord")});var P_=g((wue,hy)=>{var aY=require("crypto"),fy=9;function cY(e){let t=lY(fy),r=Ey(e+t);return t+r}a(cY,"createHash");function uY(e,t){let r=e?.substr(0,fy),s=r+Ey(t+r);return e===s}a(uY,"validateHash");function lY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(lY,"generateSalt");function Ey(e){return aY.createHash("md5").update(e).digest("hex")}a(Ey,"md5");hy.exports={hash:cY,validate:uY}});var py=g((Cue,my)=>{var Km=je(),Kt={username:{presence:!0,format:"[\\w\\-\\_]+",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 _Y(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,Km.validateObject(e,Kt)}a(_Y,"addUserValidation");function dY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,Km.validateObject(e,Kt)}a(dY,"alterUserValidation");function fY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,Km.validateObject(e,Kt)}a(fY,"dropUserValidation");my.exports={addUserValidation:_Y,alterUserValidation:dY,dropUserValidation:fY}});var Fe=g((Mue,Ty)=>{"use strict";var{platform:Lue}=require("os"),EY="nats-server.zip",Wm="nats-server",hY=process.platform==="win32"?`${Wm}.exe`:Wm,mY=/^[^\s.,*>]+$/,Sy="__request__",pY=a(e=>`${e}.${Sy}`,"REQUEST_SUBJECT"),SY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},TY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},gY={HUB:"hub.pid",LEAF:"leaf.pid"},RY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},AY={SUCCESS:"success",ERROR:"error"},OY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},bY={TXN:"txn",MSGID:"msgid"},$o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},NY={[$o.ERR]:1,[$o.WRN]:2,[$o.INF]:3,[$o.DBG]:4,[$o.TRC]:5},yY={debug:"-D",trace:"-DVV"};Ty.exports={NATS_SERVER_ZIP:EY,NATS_SERVER_NAME:Wm,NATS_BINARY_NAME:hY,PID_FILES:gY,NATS_CONFIG_FILES:TY,SERVER_SUFFIX:RY,NATS_TERM_CONSTRAINTS_RX:mY,REQUEST_SUFFIX:Sy,UPDATE_REMOTE_RESPONSE_STATUSES:AY,CLUSTER_STATUS_STATUSES:OY,REQUEST_SUBJECT:pY,SUBJECT_PREFIXES:bY,MSG_HEADERS:SY,LOG_LEVELS:$o,LOG_LEVEL_FLAGS:yY,LOG_LEVEL_HIERARCHY:NY}});var Ry=g((Pue,gy)=>{"use strict";var wY={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
5
5
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
6
6
|
`)},IY="certificate.pem",CY="privateKey.pem",DY="ca.pem";gy.exports={CERTIFICATE_VALUES:wY,CERTIFICATE_PEM_NAME:IY,PRIVATEKEY_PEM_NAME:CY,CA_PEM_NAME:DY}});var zm=g((Bue,yy)=>{"use strict";var Ny=require("fs-extra"),ie=require("joi"),LY=require("os"),{boolean:Ne,string:ar,number:At,array:Qm}=ie.types(),{totalmem:Ay}=require("os"),Yi=require("path"),MY=$(),v_=Q(),vue=Ry(),Oy=M(),UY=je(),by="log",PY="components",vY="Invalid logging.rotation.maxSize unit. Available units are G, M or K",BY="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",HY="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",xY="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",qY="rootPath config parameter is undefined",GY="clustering.enabled config parameter is undefined",Ki=At.min(0).required(),B_=Qm.items({host:ar.required(),port:Ki}).empty(null),Js;yy.exports={configValidator:FY,routesValidator:WY,route_constraints:B_};function FY(e){if(Js=e.rootPath,v_.isEmpty(Js))throw qY;let t=Ne.required(),r=At.min(0).max(1e3).empty(null).default(KY),s=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Pc),n=ar.optional().empty(null),i=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(Pc),c=ie.custom(VY).empty(null).default(Pc),u=e.clustering?.enabled;if(v_.isEmpty(u))throw GY;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Ki,routes:B_}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Ki}).required()}).required(),network:ie.object({port:Ki}).required()}).required(),leafServer:ie.object({network:ie.object({port:Ki,routes:B_}).required(),streams:ie.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ne.optional(),databaseLevel:Ne.optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required(),verify:Ne.optional()}),user:ar.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:Ne,cacheTTL:At.required(),enableSessions:Ne}),analytics:ie.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:Ne,logSuccessful:Ne}),file:Ne.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:Ne.optional(),compress:Ne.optional(),interval:ar.custom(YY).optional().empty(null),maxSize:ar.custom($Y).optional().empty(null),path:ar.optional().empty(null).default(Pc)}).required(),root:s,stdStreams:Ne.required(),auditLog:Ne.required()}).required(),operationsApi:ie.object({network:ie.object({cors:Ne.optional(),corsAccessList:Qm.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(Pc),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Ki,securePort:Ki,mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),webSocket:Ne.optional(),requireAuthentication:Ne.optional()}),http:ie.object({compressionThreshold:At.optional(),cors:Ne.optional(),corsAccessList:Qm.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null),mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(Ne.optional(),ie.object({startingPort:At.min(1).optional(),host:ar.optional(),waitForDebugger:Ne.optional()})),maxHeapMemory:At.min(0).optional()})),storage:ie.object({writeAsync:Ne.required(),overlappingSync:Ne.optional(),caching:Ne.optional(),compression:Ne.optional(),noReadAhead:Ne.optional(),path:c,prefetchWrites:Ne.optional()}).required(),ignoreScripts:Ne.optional(),tls:ie.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(FY,"configValidator");function kY(e){return Ny.existsSync(e)?null:`Specified path ${e} does not exist.`}a(kY,"doesPathExist");function VY(e,t){ie.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=kY(e);if(r)return t.message(r)}a(VY,"validatePath");function $Y(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(vY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(HY):e}a($Y,"validateRotationMaxSize");function YY(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(BY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(xY):e}a(YY,"validateRotationInterval");function KY(e,t){let r=t.state.path.join("."),s=LY.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Ay();return i=Math.round(Math.min(i,Ay())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),MY.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(KY,"setDefaultThreads");function Pc(e,t){let r=t.state.path.join(".");if(!v_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(v_.isEmpty(Js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Yi.join(Js,PY);case"logging.root":return Yi.join(Js,by);case"clustering.leafServer.streams.path":return Yi.join(Js,"clustering","leaf");case"storage.path":let s=Yi.join(Js,Oy.LEGACY_DATABASES_DIR_NAME);return Ny.existsSync(s)?s:Yi.join(Js,Oy.DATABASES_DIR_NAME);case"logging.rotation.path":return Yi.join(Js,by);case"operationsApi.network.domainSocket":return r==null?null:Yi.join(Js,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Pc,"setDefaultRoot");function WY(e){let t=ie.object({routes:B_});return UY.validateBySchema({routes:e},t)}a(WY,"routesValidator")});var Pr=g((que,vy)=>{"use strict";var Ur=M(),Lt=Q(),Ot=$(),{configValidator:QY,routesValidator:wy}=zm(),cr=require("fs-extra"),zY=require("yaml"),ws=require("path"),JY=require("is-number"),Cy=require("properties-reader"),jY=require("lodash"),{handleHDBError:XY}=se(),{HTTP_STATUS_CODES:ZY,HDB_ERROR_MSGS:H_}=yr(),xue=require("minimist"),{server:eK}=(nr(),ne(Pi)),{DATABASES_PARAM_CONFIG:vc,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:Is}=Ur,tK="Unable to get config value because config is uninitialized",rK="Config successfully initialized",sK="Error backing up config file",nK="Empty parameter sent to getConfigValue",Dy=ws.join(Ur.PACKAGE_ROOT,"config","yaml",Ur.HDB_DEFAULT_CONFIG_FILE),iK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Iy={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},x_,bt,q_;vy.exports={createConfigFile:oK,getDefaultConfig:aK,getConfigValue:My,initConfig:jm,flattenConfig:Yo,updateConfigValue:Uy,updateConfigObject:uK,getConfiguration:dK,setConfiguration:fK,readConfigFile:Zm,getClusteringRoutes:EK,initOldConfig:Py,getConfigFromFile:hK,getConfigFilePath:Wi,addConfig:mK,deleteConfigFromFile:pK,getConfigObj:SK};function oK(e){let t=si(Dy);x_=Yo(t.toJSON());let r;for(let o in e){let c=Is[o.toLowerCase()];if(c===Mr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Jm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Ot.error(l)}}}r&&Ly(t,r),Xm(t);let s=t.toJSON();bt=Yo(s);let n=t.getIn(["rootPath"]),i=ws.join(n,Ur.HDB_CONFIG_FILE);cr.createFileSync(i),cr.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(oK,"createConfigFile");function Ly(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(vc.TABLES))for(let i in s[n][vc.TABLES])for(let o in s[n][vc.TABLES][i]){let c=s[n][vc.TABLES][i][o],u=[Mr.DATABASES,n,vc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Ot.error("Error parsing schemas CLI/env config arguments",s)}}a(Ly,"setSchemasConfig");function aK(e){if(x_===void 0){let r=si(Dy);x_=Yo(r.toJSON())}let t=Is[e.toLowerCase()];if(t!==void 0)return x_[t.toLowerCase()]}a(aK,"getDefaultConfig");function My(e){if(e==null){Ot.error(nK);return}if(bt===void 0){Ot.trace(tK);return}let t=Is[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(My,"getConfigValue");function Wi(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?ws.join(t,Ur.HDB_CONFIG_FILE):Cy(e).get(Ur.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Wi,"getConfigFilePath");function jm(e=!1){if(bt===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{cr.accessSync(t,cr.constants.F_OK|cr.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Wi(t),s;if(r.includes("config/settings.js"))try{Py(r);return}catch(i){if(i.code!==Ur.NODE_ERROR_CODES.ENOENT)throw i}try{s=si(r)}catch(i){if(i.code===Ur.NODE_ERROR_CODES.ENOENT){Ot.trace(`HarperDB config file not found at ${r}.
|
|
7
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}cK(s,r),Xm(s);let n=s.toJSON();if(eK.config=n,bt=Yo(n),bt.logging_rotation_rotate)for(let i in Iy)bt[i]&&Ot.error(`Config ${Iy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(rK)}}a(jm,"initConfig");function cK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ws.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ws.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ws.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Ot.trace("Updating config file with missing config params"),cr.writeFileSync(t,String(e)))}a(cK,"checkForUpdatedConfig");function Xm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=QY(t);if(r.error)throw H_.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Xm,"validateConfig");function uK(e,t){bt===void 0&&(bt={});let r=Is[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(uK,"updateConfigObject");function Uy(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&jm();let o=My(Is.hdb_root),c=ws.join(o,Ur.HDB_CONFIG_FILE),u=si(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Jm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Is[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===bt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Jm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Ot.error(T)}}}_&&Ly(u,_),Xm(u);let l=u.getIn(["rootPath"]),d=ws.join(l,Ur.HDB_CONFIG_FILE);s===!0&&lK(c,l),cr.writeFileSync(d,String(u)),n&&(bt=Yo(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Uy,"updateConfigValue");function lK(e,t){try{let r=ws.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(sK),Ot.error(r)}}a(lK,"backupConfigFile");var _K=["databases"];function Yo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),q_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i)){if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!_K.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Is[u]&&(n[Is[u].toLowerCase()]=o[c]),n[u]=o[c]}}s[i]!==void 0&&(n[i.toLowerCase()]=s[i])}return n}a(r,"squashObj")}a(Yo,"flattenConfig");function Jm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(JY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Lt.autoCast(t)}a(Jm,"castConfigValue");function dK(){let e=Lt.getPropsFilePath(),t=Wi(e);return si(t).toJSON()}a(dK,"getConfiguration");async function fK(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Uy(void 0,void 0,n,!0),iK}catch(i){throw typeof i=="string"||i instanceof String?XY(i,i,ZY.BAD_REQUEST,void 0,void 0,!0):i}}a(fK,"setConfiguration");function Zm(){let e=Lt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!Lt.noBootFile())throw Ot.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Wi(e);return si(t).toJSON()}a(Zm,"readConfigFile");function si(e){return zY.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(si,"parseYamlDoc");function EK(){let e=Zm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=wy(t);if(r)throw H_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Lt.isEmptyOrZeroLength(s)?[]:s;let n=wy(s);if(n)throw H_.CONFIG_VALIDATION(n.message);if(!Lt.isEmptyOrZeroLength(s)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw H_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(EK,"getClusteringRoutes");function Py(e){let t=Cy(e);bt={};for(let r in Is){let s=t.get(r.toUpperCase());if(Lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Is[r].toLowerCase();n===Mr.LOGGING_ROOT?bt[n]=ws.dirname(s):bt[n]=s}return bt}a(Py,"initOldConfig");function hK(e){let t=Zm();return jY.get(t,e.replaceAll("_","."))}a(hK,"getConfigFromFile");async function mK(e,t){let r=si(Wi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(Wi(),String(r))}a(mK,"addConfig");function pK(e){let t=Wi(Lt.getPropsFilePath()),r=si(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ws.join(s,Ur.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(pK,"deleteConfigFromFile");function SK(){return q_||(jm(),q_)}a(SK,"getConfigObj")});var Hy=g((Fue,By)=>{"use strict";var G_=M(),F_=class{static{a(this,"BaseLicense")}constructor(t=0,r=G_.RAM_ALLOCATION_ENUM.DEFAULT,s=G_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},ep=class extends F_{static{a(this,"ExtendedLicense")}constructor(t=0,r=G_.RAM_ALLOCATION_ENUM.DEFAULT,s=G_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};By.exports={BaseLicense:F_,ExtendedLicense:ep}});var Qi=g((Vue,Vy)=>{"use strict";var Wo=require("fs-extra"),qy=P_(),Gy=require("crypto"),TK=require("moment"),gK=require("uuid").v4,Wt=$(),rp=require("path"),RK=Q(),ni=M(),{totalmem:xy}=require("os"),AK=Hy().ExtendedLicense,Ko="invalid license key format",OK="061183",bK="mofi25",NK="aes-256-cbc",yK=16,wK=32,Fy=ee();Fy.initSync();var tp;Vy.exports={validateLicense:ky,generateFingerPrint:CK,licenseSearch:ip,getLicense:MK,checkMemoryLimit:UK};function sp(){return rp.join(Fy.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(sp,"getLicenseDirPath");function IK(){let e=sp();return rp.join(e,ni.LICENSE_FILE_NAME)}a(IK,"getLicenseFilePath");function np(){let e=sp();return rp.join(e,ni.REG_KEY_FILE_NAME)}a(np,"getFingerPrintFilePath");async function CK(){let e=np();try{return await Wo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await DK();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(CK,"generateFingerPrint");async function DK(){let e=gK(),t=qy.hash(e),r=np();try{await Wo.mkdirp(sp()),await Wo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(DK,"writeFingerprint");function ky(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let s=np(),n=!1;try{n=Wo.statSync(s)}catch(i){Wt.error(i)}if(n){let i;try{i=Wo.readFileSync(s,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(bK),c=o[1];c=Buffer.concat([Buffer.from(c)],yK);let u=Buffer.concat([Buffer.from(i)],wK),_=Gy.createDecipheriv(NK,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=LK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ko),Wt.error(Ko),new Error(Ko)}let d;if(isNaN(l))try{d=JSON.parse(l),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(Ko),Wt.error(Ko),new Error(Ko)}else r.exp_date=l;r.exp_date<TK().valueOf()&&(r.valid_date=!1),qy.validate(o[1],`${OK}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wt.error("Invalid licence"),r}a(ky,"validateLicense");function LK(e,t){try{let r=Gy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Wt.warn("Check old license failed")}}a(LK,"checkOldLicense");function ip(){let e=new AK,t=[];try{t=Wo.readFileSync(IK(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(RK.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ky(n.license_key,n.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(n){Wt.error("There was an error parsing the license string."),Wt.error(n),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return tp=e,e}a(ip,"licenseSearch");async function MK(){return tp||await ip(),tp}a(MK,"getLicense");function UK(){let e=ip().ram_allocation,t=process.constrainedMemory?.()||xy();if(t=Math.round(Math.min(t,xy())/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(UK,"checkMemoryLimit")});var ss=g((Que,iw)=>{"use strict";var Wy="username is required",Qy="nothing to update, must supply active, role or password to update",zy="password cannot be an empty string",Jy="If role is specified, it cannot be empty.",jy="active must be true or false";iw.exports={addUser:kK,alterUser:VK,dropUser:YK,getSuperUser:zK,userInfo:KK,listUsers:V_,listUsersExternal:WK,setUsersToGlobal:zo,findAndValidateUser:sw,getClusterUser:JK,USERNAME_REQUIRED:Wy,ALTERUSER_NOTHING_TO_UPDATE:Qy,EMPTY_PASSWORD:zy,EMPTY_ROLE:Jy,ACTIVE_BOOLEAN:jy};var Xy=Lr(),PK=ri(),cp=P_(),Zy=py(),ew=Dr(),up=Rn(),vr=Q(),tw=require("validate.js"),Se=$(),{promisify:vK}=require("util"),lp=Tn(),$y=M(),Yy=Fe(),BK=Pr(),Yue=ee(),Kue=Qi(),HK=qi(),{table:Wue}=(Ae(),ne(Ge)),{handleHDBError:js,hdb_errors:xK}=se(),{HTTP_STATUS_CODES:Xs,AUTHENTICATION_ERROR_MSGS:op,HDB_ERROR_MSGS:Qo}=xK,{UserEventMsg:_p}=Cs(),ap=require("lodash"),{server:dp}=(nr(),ne(Pi)),qK=$();dp.getUser=(e,t)=>sw(e,t,t!=null);var rw={username:!0,active:!0,role:!0,password:!0},Ky=new Map,k_=ew.searchByValue,GK=ew.searchByHash,FK=vK(PK.delete);async function kK(e){let t=tw.cleanAttributes(e,rw),r=Zy.addUserValidation(t);if(r)throw js(new Error,r.message,Xs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await k_(s),n=n&&Array.from(n)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!n||n.length<1)throw js(new Error,Qo.ROLE_NAME_NOT_FOUND(t.role),Xs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw js(new Error,Qo.DUP_ROLES_FOUND(t.role),Xs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=lp.encrypt(t.password)),t.password=cp.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Xy.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await zo()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw js(new Error,Qo.USER_ALREADY_EXISTS(t.username),Xs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],up.signalUserChange(new _p(process.pid)),`${c.username} successfully added`}a(kK,"addUser");async function VK(e){let t=tw.cleanAttributes(e,rw);if(vr.isEmptyOrZeroLength(t.username))throw new Error(Wy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Qy);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(zy);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(jy);let r=$K(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=lp.encrypt(t.password)),t.password=cp.hash(t.password)),t.role==="")throw new Error(Jy);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await k_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Qo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),js(new Error,c,Xs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Qo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),js(new Error,c,Xs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Xy.update(s)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await zo()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return up.signalUserChange(new _p(process.pid)),n}a(VK,"alterUser");function $K(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a($K,"isClusterUser");async function YK(e){try{let t=Zy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw js(new Error,Qo.USER_NOT_EXIST(e.username),Xs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await FK(r)}catch(n){throw Se.error("Got an error deleting a user."),Se.error(n),n}Se.debug(s);try{await zo()}catch(n){throw Se.error("Got an error setting users to global."),Se.error(n),n}return up.signalUserChange(new _p(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(YK,"dropUser");async function KK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ap.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await GK(r)}catch(n){throw Se.error("Got an error searching for a role."),Se.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(KK,"userInfo");async function WK(){let e;try{e=await V_()}catch(t){throw Se.error("Got an error listing users."),Se.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(WK,"listUsersExternal");async function V_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await k_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=ap.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await k_(s)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of n)o=ap.cloneDeep(o),o.role=r[o.role],QK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),vr.errorizeMessage(e)}return null}a(V_,"listUsers");function QK(e){try{if(!e){Se.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(HK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(QK,"appendSystemTablesToRole");async function zo(){try{let e=await V_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(zo,"setUsersToGlobal");async function sw(e,t,r=!0){global.hdb_users||await zo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw js(new Error,op.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw js(new Error,op.USER_INACTIVE,Xs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ky.get(t)===s.password)return n;if(cp.validate(s.password,t))Ky.set(t,s.password);else throw js(new Error,op.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sw,"findAndValidateUser");async function zK(){global.hdb_users||await zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(zK,"getSuperUser");async function JK(){let e=await V_(),t=BK.getConfigFromFile($y.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===$y.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=lp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yy.SERVER_SUFFIX.ADMIN,r}a(JK,"getClusterUser");var nw=[];dp.invalidateUser=function(e){for(let t of nw)try{t(e)}catch(r){qK.error("Error invalidating user",r)}};dp.onInvalidatedUser=function(e){nw.push(e)}});var Hc=g((Xue,uw)=>{"use strict";var zi=$(),Br=M(),jK=xN(),Jue=gn(),jue=Zn(),XK=ss(),{validateEvent:ow}=Cs(),Bc=ys(),ZK=require("process"),{resetDatabases:eW}=(Ae(),ne(Ge)),tW={[Br.ITC_EVENT_TYPES.SCHEMA]:rW,[Br.ITC_EVENT_TYPES.USER]:cw};async function rW(e){let t=ow(e);if(t){zi.error(t);return}zi.trace("ITC schemaHandler received schema event:",e),await jK(e.message),await sW(e.message)}a(rW,"schemaHandler");async function sW(e){try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=eW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){zi.error(t)}}a(sW,"syncSchemaMetadata");var aw=[];async function cw(e){try{try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){zi.warn(r)}let t=ow(e);if(t){zi.error(t);return}zi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${ZK.pid} received user event:`,e),await XK.setUsersToGlobal();for(let r of aw)r()}catch(t){zi.error(t)}}a(cw,"userHandler");cw.addListener=function(e){aw.push(e)};uw.exports=tW});var Cs=g((nle,_w)=>{"use strict";var ele=$(),fp=Q(),nW=M(),{ITC_ERRORS:xc}=yr(),{parentPort:tle,threadId:iW,isMainThread:oW,workerData:rle}=require("worker_threads"),{onMessageFromWorkers:aW,broadcast:sle,broadcastWithAcknowledgement:cW}=Ke();_w.exports={sendItcEvent:uW,validateEvent:lw,SchemaEventMsg:lW,UserEventMsg:_W};var $_;aW(async(e,t)=>{$_=$_||Hc(),lw(e),$_[e.type]&&await $_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function uW(e){return!oW&&e.message&&(e.message.originator=iW),cW(e)}a(uW,"sendItcEvent");function lw(e){if(typeof e!="object")return xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||fp.isEmpty(e.type))return xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||fp.isEmpty(e.message))return xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||fp.isEmpty(e.message.originator))return xc.MISSING_ORIGIN;if(nW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return xc.INVALID_EVENT(e.type)}a(lw,"validateEvent");function lW(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(lW,"SchemaEventMsg");function _W(e){this.originator=e}a(_W,"UserEventMsg")});var Rn=g((ale,hw)=>{"use strict";var dw=M(),ole=Q(),Y_=$(),fw=vN(),Jo,{sendItcEvent:Ew}=Cs();function dW(e){try{Y_.trace("signalSchemaChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.SCHEMA,e);return Jo.schema(t),Ew(t)}catch(t){Y_.error(t)}}a(dW,"signalSchemaChange");function fW(e){try{Y_.trace("signalUserChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.USER,e);return Jo.user(t),Ew(t)}catch(t){Y_.error(t)}}a(fW,"signalUserChange");hw.exports={signalSchemaChange:dW,signalUserChange:fW}});var K_=g((ule,pw)=>{"use strict";var mw=Q(),EW=M(),hW=$(),mW=g_(),pW=T_(),SW=Rn(),{SchemaEventMsg:TW}=Cs(),gW="already exists in";pw.exports=RW;async function RW(e,t,r){if(mw.isEmptyOrZeroLength(r))return r;let s=[];mw.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await AW(e,t.schema,t.name,i)})),n}a(RW,"lmdbCheckForNewAttributes");async function AW(e,t,r,s){let n=new pW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await OW(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(gW))hW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(AW,"createNewAttribute");async function OW(e){let t;return t=await mW(e),SW.signalSchemaChange(new TW(process.pid,EW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(OW,"createAttribute")});var jo=g((_le,Sw)=>{"use strict";var Ep=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Sw.exports=Ep});var gw=g((fle,Tw)=>{"use strict";var bW=jo(),NW=M().OPERATIONS_ENUM,hp=class extends bW{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(NW.INSERT,r,s,n,i),this.records=t}};Tw.exports=hp});var Aw=g((hle,Rw)=>{"use strict";var yW=jo(),wW=M().OPERATIONS_ENUM,mp=class extends yW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(wW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Rw.exports=mp});var bw=g((ple,Ow)=>{"use strict";var IW=jo(),CW=M().OPERATIONS_ENUM,pp=class extends IW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(CW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Ow.exports=pp});var yw=g((Tle,Nw)=>{"use strict";var DW=jo(),LW=M().OPERATIONS_ENUM,Sp=class extends DW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(LW.DELETE,s,n,t,i),this.original_records=r}};Nw.exports=Sp});var qc=g((Ale,Dw)=>{"use strict";var Rle=require("path"),ww=We(),MW=gw(),UW=Aw(),PW=bw(),vW=yw(),Xo=dt(),Iw=Q(),{CONFIG_PARAMS:BW}=M(),Cw=ee();Cw.initSync();var W_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:HW}=Je();Dw.exports=xW;async function xW(e,t){if(Cw.get(BW.LOGGING_AUDITLOG)===!1)return;let r=HW(e.schema,e.table),s=await ww.openEnvironment(r,e.table,!0),n=qW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){ww.initializeDBIs(s,Xo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Iw.isEmpty(n.user_name)||s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(xW,"writeTransaction");function qW(e,t){let r=Iw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===W_.INSERT)return new MW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===W_.UPDATE)return new UW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===W_.UPSERT)return new PW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===W_.DELETE)return new vW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(qW,"createTransactionObject")});var Tp=g((Nle,Lw)=>{"use strict";var GW=Dc(),ble=Lc(),Gc=M(),FW=Mc(),kW=ko().insertRecords,VW=We(),$W=$(),YW=K_(),{getSchemaPath:KW}=Je(),WW=qc();Lw.exports=QW;async function QW(e){try{let{schema_table:t,attributes:r}=GW(e);FW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await YW(e.hdb_auth_header,t,r),n=KW(e.schema,e.table),i=await VW.openEnvironment(n,e.table),o=await kW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await WW(e,o)}catch(c){$W.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(QW,"lmdbCreateRecords")});var Pw=g((wle,Uw)=>{"use strict";var Mw=M(),zW=Tp(),JW=Lc(),jW=require("fs-extra"),{getSchemaPath:XW}=Je();Uw.exports=ZW;async function ZW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new JW(Mw.SYSTEM_SCHEMA_NAME,Mw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await zW(r),await jW.mkdirp(XW(e.schema))}a(ZW,"lmdbCreateSchema")});var Bw=g((Cle,vw)=>{"use strict";var gp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};vw.exports=gp});var Gw=g((Ple,qw)=>{"use strict";var Hw=We(),Rp=wr(),Ap=yr().LMDB_ERRORS_ENUM,eQ=dt(),xw=$(),Lle=Q(),tQ=require("lmdb"),rQ=Bw(),sQ=M(),{OVERFLOW_MARKER:Mle,MAX_SEARCH_KEY_LENGTH:Ule}=eQ,nQ=sQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function iQ(e,t,r,s){if(Rp.validateEnv(e),t===void 0)throw new Error(Ap.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ap.IDS_REQUIRED):new Error(Ap.IDS_MUST_BE_ITERABLE);try{let n=Hw.listDBIs(e);Hw.initializeDBIs(e,t,n);let i=new rQ,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[nQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,tQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let T=n[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=Rp.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{xw.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){xw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Rp.getNextMonotonicTime(),i}catch(n){throw n}}a(iQ,"deleteRecords");qw.exports={deleteRecords:iQ}});var Fc=g((Ble,kw)=>{"use strict";var Zo=Q(),oQ=Gw(),aQ=We(),{getSchemaPath:cQ}=Je(),uQ=qc(),lQ=$();kw.exports=_Q;async function _Q(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Zo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Zo.isEmptyOrZeroLength(e.hash_values)&&!Zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Zo.isEmpty(u)||e.hash_values.push(u)}}if(Zo.isEmptyOrZeroLength(e.hash_values))return Fw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Zo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=cQ(e.schema,e.table),i=await aQ.openEnvironment(n,e.table),o=await oQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await uQ(e,o)}catch(c){lQ.error(`unable to write transaction due to ${c.message}`)}return Fw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(_Q,"lmdbDeleteRecords");function Fw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Fw,"createDeleteResponse")});var bp=g((qle,Vw)=>{"use strict";var dQ=M(),xle=wr();function Op(e,t){let r=Object.create(null);if(t.length===1&&dQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Op,"parseRow");function fQ(e,t,r,s){let n=Op(r,e);s.push(n)}a(fQ,"searchAll");function EQ(e,t,r,s){let n=Op(r,e);s[t]=n}a(EQ,"searchAllToMap");function hQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(hQ,"iterateDBI");function Ji(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ji,"pushResults");function mQ(e,t,r,s,n,i){t.toString().endsWith(e)&&Ji(t,r,s,n,i)}a(mQ,"endsWith");function pQ(e,t,r,s,n,i){t.toString().includes(e)&&Ji(t,r,s,n,i)}a(pQ,"contains");function SQ(e,t,r,s,n,i){t>e&&Ji(t,r,s,n,i)}a(SQ,"greaterThanCompare");function TQ(e,t,r,s,n,i){t>=e&&Ji(t,r,s,n,i)}a(TQ,"greaterThanEqualCompare");function gQ(e,t,r,s,n,i){t<e&&Ji(t,r,s,n,i)}a(gQ,"lessThanCompare");function RQ(e,t,r,s,n,i){t<=e&&Ji(t,r,s,n,i)}a(RQ,"lessThanEqualCompare");Vw.exports={parseRow:Op,searchAll:fQ,searchAllToMap:EQ,iterateDBI:hQ,endsWith:mQ,contains:pQ,greaterThanCompare:SQ,greaterThanEqualCompare:TQ,lessThanCompare:gQ,lessThanEqualCompare:RQ,pushResults:Ji}});var ea=g(($le,Jw)=>{"use strict";var ii=We(),Fle=$(),Hr=wr(),Q_=dt(),ut=yr().LMDB_ERRORS_ENUM,kle=Q(),AQ=M(),z_=bp(),{parseRow:OQ}=z_,Vle=require("lmdb"),{OVERFLOW_MARKER:$w,MAX_SEARCH_KEY_LENGTH:bQ}=Q_;function Yw(e,t,r,s=!1,n=void 0,i=void 0){return ji(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Yw,"iterateFullIndex");function kc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return ji(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(kc,"iterateRangeBetween");function ji(e,t,r,s){let n=e.database||e,i=ii.openDBI(n,r);i[Q_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ii.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ji,"setupTransaction");function Kw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith($w)){if(!n)if(r)n=ii.openDBI(e,r);else{let u=ii.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ii.openDBI(e,u[_]),!n[Q_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Kw,"getOverflowCheck");function NQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ji(e,t,t,(o,c,u)=>(J_(r),r=Vc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>OQ(_.value,r))))}a(NQ,"searchAll");function yQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);J_(r),r=Vc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Yw(e,t,t,s,n,i))o.set(c,z_.parseRow(u,r));return o}a(yQ,"searchAllToMap");function wQ(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Yw(e,void 0,t,r,s,n),c=o.transaction,u=Kw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(wQ,"iterateDBI");function IQ(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ii.statDBI(e,t).entryCount}a(IQ,"countAll");function CQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(CQ,"equals");function DQ(e,t,r){return oi(e,t,r),ii.openDBI(e,t).getValuesCount(r)}a(DQ,"count");function LQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(LQ,"startsWith");function MQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Ww(e,t,r,s,n,i,o,!0)}a(MQ,"endsWith");function Ww(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return oi(e,r,s),ji(e,null,r,(u,_,l,d)=>{let f=Kw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith($w)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[Q_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ww,"contains");function UQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!0,!1)}a(UQ,"greaterThan");function PQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!1,!1)}a(PQ,"greaterThanEqual");function vQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!0)}a(vQ,"lessThan");function BQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!1)}a(BQ,"lessThanEqual");function HQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return kc(e,t,r,s,n,i,o,c)}a(HQ,"between");function xQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(J_(r),r=Vc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=z_.parseRow(c,r)),o}a(xQ,"searchByHash");function qQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(qQ,"checkHashExists");function GQ(e,t,r,s,n=[]){return zw(e,t,r,s,n),Qw(e,t,r,s,n).map(i=>i[1])}a(GQ,"batchSearchByHash");function FQ(e,t,r,s,n=[]){zw(e,t,r,s,n);let i=new Map;for(let[o,c]of Qw(e,t,r,s,n))i.set(o,c);return i}a(FQ,"batchSearchByHashToMap");function Qw(e,t,r,s,n=[]){return ji(e,t,t,(i,o,c)=>{r=Vc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,z_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Qw,"batchHashSearch");function zw(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(J_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(zw,"initializeBatchSearchByHash");function J_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(J_,"validateFetchAttributes");function oi(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>bQ)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(oi,"validateComparisonFunctions");function Vc(e,t){return t.length===1&&AQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ii.listDBIs(e)),t}a(Vc,"setGetWholeRowAttributes");Jw.exports={searchAll:NQ,searchAllToMap:yQ,count:DQ,countAll:IQ,equals:CQ,startsWith:LQ,endsWith:MQ,contains:Ww,searchByHash:xQ,setGetWholeRowAttributes:Vc,batchSearchByHash:GQ,batchSearchByHashToMap:FQ,checkHashExists:qQ,iterateDBI:wQ,greaterThan:UQ,greaterThanEqual:PQ,lessThan:vQ,lessThanEqual:BQ,between:HQ}});var ta=g((Kle,tI)=>{var jw=require("lodash"),Xw=je(),fe=require("joi"),kQ=Q(),{hdb_schema_table:$c,checkValidTable:Zw,hdb_table:eI,hdb_database:j_}=Qs(),{handleHDBError:VQ,hdb_errors:$Q}=se(),{getDatabases:YQ}=(Ae(),ne(Ge)),{HTTP_STATUS_CODES:KQ}=$Q,WQ=fe.object({database:j_,schema:j_,table:eI,search_attribute:$c,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),QQ=fe.object({database:j_,schema:j_,table:eI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives($c,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives($c,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});tI.exports=function(e,t){let r=null;switch(t){case"value":r=Xw.validateBySchema(e,WQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Zw("database",e.schema)),i(Zw("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=Xw.validateBySchema(e,QQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=kQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return VQ(new Error,n,KQ.NOT_FOUND);let o=YQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=jw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!jw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Np=g((Qle,rI)=>{"use strict";var zQ=We(),JQ=ta(),{getSchemaPath:jQ}=Je();rI.exports=XQ;function XQ(e){let t=JQ(e,"hashes");if(t)throw t;let r=jQ(e.schema,e.table);return zQ.openEnvironment(r,e.table)}a(XQ,"initialize")});var yp=g((Jle,sI)=>{"use strict";var ZQ=ea(),ez=Np();sI.exports=tz;async function tz(e){let t=await ez(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return ZQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(tz,"lmdbGetDataByHash")});var ra=g((Xle,nI)=>{"use strict";var wp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};nI.exports=wp});var oI=g((t_e,iI)=>{"use strict";var e_e=ra(),rz=ea(),sz=Np();iI.exports=nz;async function nz(e){let t=await sz(e),r=global.hdb_schema[e.schema][e.table];return rz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(nz,"lmdbSearchByHash")});var Zs=g((s_e,aI)=>{"use strict";var Ip=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};aI.exports=Ip});var X_=g((i_e,fI)=>{"use strict";var Qt=ea(),iz=We(),oz=Q(),Ee=dt(),Xi=M(),az=qi(),cI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:cz}=Je(),An=Xi.SEARCH_WILDCARDS;async function uz(e,t,r){let s;e.schema===Xi.SYSTEM_SCHEMA_NAME?s=az[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dI(e,s.hash_attribute,r,t);return lI(e,n,s.hash_attribute,r)}a(uz,"prepSearch");async function lI(e,t,r,s){let n=cz(e.schema,e.table),i=await iz.openEnvironment(n,e.table),o=_I(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(lz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?uI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?uI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(lI,"executeSearch");function _I(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(_I,"searchByType");function uI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(uI,"createMapFromIterable");function lz(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(lz,"checkToFetchMore");function dI(e,t,r,s){if(oz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(cI.UNKNOWN_SEARCH_TYPE)}else switch(s){case Xi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Xi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Xi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(cI.UNKNOWN_SEARCH_TYPE)}}a(dI,"createSearchTypeFromSearchObject");fI.exports={executeSearch:lI,createSearchTypeFromSearchObject:dI,prepSearch:uz,searchByType:_I}});var hI=g((c_e,EI)=>{"use strict";var a_e=Zs(),_z=ta(),dz=Q(),fz=M(),Ez=X_();EI.exports=hz;function hz(e,t){if(!dz.isEmpty(t)&&fz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=_z(e,"value");if(s)throw s;return Ez.prepSearch(e,t,!0)}a(hz,"lmdbGetDataByValue")});var Yc=g((__e,mI)=>{"use strict";var l_e=Zs(),mz=ta(),pz=Q(),Sz=M(),Tz=X_();mI.exports=gz;async function gz(e,t){if(!pz.isEmpty(t)&&Sz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=mz(e,"value");if(s)throw s;return Tz.prepSearch(e,t,!1)}a(gz,"lmdbSearchByValue")});var SI=g((E_e,pI)=>{"use strict";var f_e=dt(),Cp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Dp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Lp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};pI.exports={SearchByConditionsObject:Cp,SearchCondition:Dp,SortAttribute:Lp}});var OI=g((S_e,AI)=>{"use strict";var m_e=SI().SearchByConditionsObject,Rz=Zs(),Az=ta(),Mp=ea(),Z_=dt(),{Resource:p_e}=(Os(),ne(Up)),RI=X_(),Oz=bp(),bz=require("lodash"),{getSchemaPath:Nz}=Je(),TI=We(),{handleHDBError:yz,hdb_errors:wz}=se(),{HTTP_STATUS_CODES:Iz}=wz,Cz=1e8;AI.exports=Dz;async function Dz(e){let t=Az(e,"conditions");if(t)throw yz(t,t.message,Iz.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=Nz(e.schema,e.table),s=await TI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)TI.openDBI(s,_.search_attribute);let i=bz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Z_.SEARCH_TYPES.EQUALS?_.estimated_count=Mp.count(s,_.search_attribute,_.search_value):l===Z_.SEARCH_TYPES.CONTAINS||l===Z_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Cz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await gI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(RI.filterByType),d=l.length,f=Mp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>Oz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await gI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Mp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(Dz,"lmdbSearchByConditions");async function gI(e,t,r,s){let n=new Rz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Z_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RI.searchByType(e,n,i,s).map(o=>o.value)}a(gI,"executeConditionSearch")});var sa=g((g_e,bI)=>{"use strict";var Lz=M().OPERATIONS_ENUM,Pp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Lz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};bI.exports=Pp});var vp=g((A_e,MI)=>{"use strict";var II=Zs(),CI=sa(),DI=Yc(),LI=Fc(),ur=M(),NI=Q(),yI=We(),{getTransactionAuditStorePath:Mz,getSchemaPath:Uz}=Je(),wI=$();MI.exports=Pz;async function Pz(e){try{if(NI.isEmpty(global.hdb_schema[e.schema])||NI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await vz(e),await Bz(e);let t=Uz(e.schema,e.table);try{await yI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Mz(e.schema,e.table);await yI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Pz,"lmdbDropTable");async function vz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await DI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await LI(n)}a(vz,"deleteAttributesFromSystem");async function Bz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await DI(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await LI(n)}catch(i){throw i}}a(Bz,"dropTableFromSystem")});var PI=g((b_e,UI)=>{"use strict";var Hz=require("fs-extra"),xz=Zs(),qz=ra(),Gz=sa(),Fz=vp(),kz=Fc(),Vz=yp(),$z=Yc(),On=M(),{getSchemaPath:Yz}=Je(),{handleHDBError:Kz,hdb_errors:Wz}=se(),{HDB_ERROR_MSGS:Qz,HTTP_STATUS_CODES:zz}=Wz;UI.exports=Jz;async function Jz(e){let t;try{t=await jz(e.schema);let r=new xz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await $z(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Fz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new Gz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kz(n);let i=Yz(t);await Hz.remove(i)}catch(r){throw r}}a(Jz,"lmdbDropSchema");async function jz(e){let t=new qz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Vz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Kz(new Error,Qz.SCHEMA_NOT_FOUND(e),zz.NOT_FOUND,void 0,void 0,!0);return s}a(jz,"validateDropSchema")});var ed=g((y_e,vI)=>{"use strict";var Bp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};vI.exports=Bp});var HI=g((C_e,BI)=>{"use strict";var Xz=require("fs-extra"),td=We(),{getTransactionAuditStorePath:Zz}=Je(),Hp=dt(),I_e=ed();BI.exports=e2;async function e2(e){let t;try{let r=Zz(e.schema,e.table);await Xz.mkdirp(r),t=await td.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{td.createDBI(t,Hp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),td.createDBI(t,Hp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),td.createDBI(t,Hp.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(e2,"createTransactionsAuditEnvironment")});var FI=g((L_e,GI)=>{"use strict";var xp=M(),xI=We(),t2=ko(),{getSystemSchemaPath:r2,getSchemaPath:s2}=Je(),n2=qi(),i2=g_(),qp=T_(),o2=$(),a2=HI(),Fp=n2.hdb_table,qI=[];for(let e=0;e<Fp.attributes.length;e++)qI.push(Fp.attributes[e].attribute);GI.exports=c2;async function c2(e,t){let r=s2(t.schema,t.table),s=new qp(t.schema,t.table,xp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new qp(t.schema,t.table,xp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new qp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xI.createEnvironment(r,t.table),e!==void 0){let o=await xI.openEnvironment(r2(),xp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await t2.insertRecords(o,Fp.hash_attribute,qI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Gp(s),await Gp(n),await Gp(i)}await a2(t)}catch(o){throw o}}a(c2,"lmdbCreateTable");async function Gp(e){try{await i2(e)}catch(t){o2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Gp,"createAttribute")});var VI=g((U_e,kI)=>{"use strict";var u2=Dc(),l2=Mc(),_2=K_(),Kc=M(),d2=ko().updateRecords,f2=We(),{getSchemaPath:E2}=Je(),h2=qc(),m2=$();kI.exports=p2;async function p2(e){try{let{schema_table:t,attributes:r}=u2(e);l2(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _2(e.hdb_auth_header,t,r),n=E2(e.schema,e.table),i=await f2.openEnvironment(n,e.table),o=await d2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await h2(e,o)}catch(c){m2.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(p2,"lmdbUpdateRecords")});var YI=g((v_e,$I)=>{"use strict";var S2=M().OPERATIONS_ENUM,kp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=S2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$I.exports=kp});var WI=g((x_e,KI)=>{"use strict";var H_e=YI(),T2=Dc(),g2=Mc(),R2=K_(),Wc=M(),A2=ko().upsertRecords,O2=We(),{getSchemaPath:b2}=Je(),N2=qc(),y2=$(),{handleHDBError:w2,hdb_errors:I2}=se();KI.exports=C2;async function C2(e){let t;try{t=T2(e)}catch(u){throw w2(u,u.message,I2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;g2(e,s,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(s.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await R2(e.hdb_auth_header,r,s),i=b2(e.schema,e.table),o=await O2.openEnvironment(i,e.table),c=await A2(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await N2(e,c)}catch(u){y2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(C2,"lmdbUpsertRecords")});var zI=g((G_e,QI)=>{"use strict";var Vp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};QI.exports=Vp});var jI=g((k_e,JI)=>{"use strict";var $p=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};JI.exports=$p});var eC=g((Y_e,ZI)=>{"use strict";var Yp=We(),{getTransactionAuditStorePath:D2}=Je(),$_e=zI(),Qc=dt(),L2=Q(),XI=jI(),M2=require("util").promisify,U2=M2(setTimeout),P2=1e4,v2=100;ZI.exports=B2;async function B2(e){let t=D2(e.schema,e.table),r=await Yp.openEnvironment(t,e.table,!0),s=Yp.listDBIs(r);Yp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new XI;do n=await H2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await U2(v2);while(n.transactions_deleted>0);return i}a(B2,"deleteAuditLogsBefore");async function H2(e,t){let r=new XI;try{let s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];L2.isEmpty(c)||(n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>P2)break}return await n,r}catch(s){throw s}}a(H2,"deleteTransactions")});var rC=g((W_e,tC)=>{"use strict";var Kp=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};tC.exports=Kp});var nC=g((J_e,sC)=>{"use strict";var x2=Zs(),q2=sa(),z_e=rC(),en=M(),G2=Q(),Wp=We(),F2=qi(),k2=Yc(),V2=Fc(),{getSchemaPath:$2}=Je();sC.exports=Y2;async function Y2(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=F2[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await W2(e),n=$2(e.schema,e.table),i=await Wp.openEnvironment(n,e.table);return t===!0&&await K2(e,i,r.hash_attribute),Wp.dropDBI(i,e.attribute),s}a(Y2,"lmdbDropAttribute");async function K2(e,t,r){let s=Wp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(K2,"removeAttributeFromAllObjects");async function W2(e){let t=new x2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await k2(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(G2.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new q2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return V2(i)}a(W2,"dropAttributeFromSystem")});var lC=g((Z_e,uC)=>{"use strict";var Qp=We(),na=dt(),X_e=wr(),zp=M(),iC=Q(),{getTransactionAuditStorePath:Q2}=Je(),z2=ea(),rd=jo(),J2=$();uC.exports=j2;async function j2(e){let t=Q2(e.schema,e.table),r=await Qp.openEnvironment(t,e.table,!0),s=Qp.listDBIs(r);Qp.initializeDBIs(r,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case zp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return oC(r,e.search_values);case zp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Z2(r,e.search_values,n);case zp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return X2(r,e.search_values);default:return oC(r)}}a(j2,"readAuditLog");function oC(e,t=[0,Date.now()]){iC.isEmpty(t[0])&&(t[0]=0),iC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new rd,n))}a(oC,"searchTransactionsByTimestamp");function X2(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,cC(e,i))}return Object.fromEntries(r)}a(X2,"searchTransactionsByUsername");function Z2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=z2.equals(e,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=cC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);aC(u,"records",r,l,o),aC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Z2,"searchTransactionsByHashValues");function aC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new rd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new rd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(aC,"loopRecords");function cC(e,t){let r=[];try{let s=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new rd,i);r.push(o)}}catch(i){J2.warn(i)}return r}catch(s){throw s}}a(cC,"batchSearchTransactions")});var dC=g((sde,_C)=>{"use strict";var{getSchemaPath:tde}=Je(),rde=We(),{database:eJ}=(Ae(),ne(Ge));_C.exports={writeTransaction:tJ};async function tJ(e,t,r){return eJ({database:e,table:t}).transaction(r)}a(tJ,"writeTransaction")});var mC=g((ide,hC)=>{"use strict";var{getSchemaPath:fC}=Je(),EC=We();hC.exports={flush:rJ,resetReadTxn:sJ};async function rJ(e,t){return(await EC.openEnvironment(fC(e,t),t.toString())).flushed}a(rJ,"flush");async function sJ(e,t){try{(await EC.openEnvironment(fC(e,t),t.toString())).resetReadTxn()}catch{}}a(sJ,"resetReadTxn")});var gC=g((ade,TC)=>{"use strict";var{Readable:nJ}=require("stream"),{getDatabases:iJ}=(Ae(),ne(Ge)),{readSync:oJ,openSync:aJ,createReadStream:pC}=require("fs"),{open:cJ}=require("lmdb"),SC=u_(),uJ=__(),{AUDIT_STORE_OPTIONS:lJ}=(Hi(),ne(RC)),{INTERNAL_DBIS_NAME:_J,AUDIT_STORE_NAME:dJ}=dt();TC.exports=EJ;var Jp=32768,fJ=100;async function EJ(e){let t=e.database||e.schema||"data",r=iJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=cJ({noSync:!0,maxDbs:uJ.MAX_DBS}),f,E=d.openDB(_J,new SC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%fJ===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(n.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new SC(!H,H);await S(b,P)}e.include_audit&&await S(dJ,Object.assign({},lJ)),await f;let T=pC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=aJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Jp);oJ(c,_,0,Jp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=pC(null,{fd:c,start:Jp}),f=new nJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(EJ,"getBackup")});var bC=g((ude,OC)=>{"use strict";var hJ=$(),{handleHDBError:mJ}=se(),pJ=Hb(),SJ=g_(),TJ=Tp(),gJ=Pw(),RJ=Fc(),AJ=yp(),OJ=oI(),bJ=hI(),NJ=Yc(),yJ=OI(),wJ=PI(),IJ=FI(),CJ=VI(),DJ=WI(),LJ=eC(),MJ=vp(),UJ=nC(),PJ=lC(),vJ=dC(),AC=mC(),BJ=gC(),jp=class extends pJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return yJ(t)}async getDataByHash(t){return await AJ(t)}async searchByHash(t){return await OJ(t)}async getDataByValue(t,r){return await bJ(t,r)}async searchByValue(t){return await NJ(t)}async createSchema(t){return await gJ(t)}async dropSchema(t){return await wJ(t)}async createTable(t,r){return await IJ(t,r)}async dropTable(t){return await MJ(t)}async createAttribute(t){return await SJ(t)}async createRecords(t){return await TJ(t)}async updateRecords(t){return await CJ(t)}async upsertRecords(t){try{return await DJ(t)}catch(r){throw mJ(r,null,null,hJ.ERR,r)}}async deleteRecords(t){return await RJ(t)}async dropAttribute(t){return await UJ(t)}async deleteAuditLogsBefore(t){return await LJ(t)}async readAuditLog(t){return await PJ(t)}writeTransaction(t,r,s){return vJ.writeTransaction(t,r,s)}flush(t,r){return AC.flush(t,r)}resetReadTxn(t,r){return AC.resetReadTxn(t,r)}getBackup(t){return BJ(t)}};OC.exports=jp});function FJ(){GJ=setInterval(function(){for(let e of Xp)if(e.stale){let t=e[Oe]?.url;wC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},qJ).unref()}var Zp,yC,wC,HJ,Xp,xJ,zc,NC,Zi,sd,qJ,GJ,eS=Re(()=>{Zp=x(wr()),yC=x(se()),wC=x($());Os();Go();HJ=100,Xp=new Set,xJ=25e3,Zi=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,a_(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Xp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),a_(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Xp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-NC>xJ)throw new yC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Zp.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}s||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<HJ>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return zc||(zc=n,NC=performance.now(),zc.then(()=>{zc=null})),n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},sd=class extends Zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Zp.getNextMonotonicTime)())}getReadTxn(){}},qJ=3e4;a(FJ,"startMonitoringTxns");FJ()});function Xe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new Zi;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var IC,eo=Re(()=>{IC=require("../index");Os();eS();a(Xe,"transaction");(0,IC._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var HC={};Ye(HC,{ResourceBridge:()=>sS});function nS({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 DC(e,t){let r=tn(e),s=nS(e,r);if(!r)throw new Ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Xe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&id(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function tn(e){let t=e.database||e.schema||VJ,r=Ls()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,kJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function LC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*MC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var UC,nd,Ds,PC,vC,Ms,tS,rS,BC,kJ,VJ,$J,YJ,CC,sS,xC=Re(()=>{"use strict";UC=x(bC()),nd=x(ta()),Ds=x(se());Ae();PC=x(Dc()),vC=x(Mc()),Ms=x(M()),tS=x(Rn()),rS=x(Cs()),BC=x(Q());eo();od();({HDB_ERROR_MSGS:kJ}=Ds.hdb_errors),VJ="data",$J=1e4,YJ=10,sS=class extends UC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),CC=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,nd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ds.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:nS(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await iS(t.schema),tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,CC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,PC.default)(t);(0,vC.default)(t,s,r.primaryKey);let n,i=Ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=id(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ls()[t.schema][t.table],s={user:t.hdb_user};return Xe(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return LC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,BC.async_set_timeout)(YJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%$J===0&&await _();return u.length>0&&await _(),n?LC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,nd.default)(t,"hashes");if(r)throw r;return DC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of DC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[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 s=(0,nd.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ds.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===Ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:nS(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of MC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return MC(r,t.search_values?.[0],t.search_values?.[1])}}};a(nS,"getSelect");a(DC,"getRecords");a(tn,"getTable");a(LC,"createDeleteResponse");a(MC,"groupRecordsInHistory")});var ys=g((Nde,qC)=>{"use strict";var{ResourceBridge:KJ}=(xC(),ne(HC)),WJ=ee();WJ.initSync();var ad;function QJ(){return ad||(ad=new KJ,ad)}a(QJ,"getBridge");qC.exports=QJ()});var VC=g((wde,kC)=>{"use strict";var GC=require("lodash"),jc=require("mathjs"),zJ=require("jsonata"),FC=Q();kC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GC.uniqWith(e,GC.isEqual):e,searchJSON:JJ,mad:Xc.bind(null,jc.mad),mean:Xc.bind(null,jc.mean),mode:Xc.bind(null,jc.mode),prod:Xc.bind(null,jc.prod),median:Xc.bind(null,jc.median)};function Xc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Xc,"aggregateFunction");function JJ(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(FC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FC.isEmpty(this.__ala__.res[r])){let s=zJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(JJ,"searchJSON")});var YC=g((Cde,$C)=>{"use strict";var Et=require("moment"),oS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Et.suppressDeprecationWarnings=!0;$C.exports={current_date:()=>Et().utc().format("YYYY-MM-DD"),current_time:()=>Et().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Et(e).utc().format("YYYY");case"month":return Et(e).utc().format("MM");case"day":return Et(e).utc().format("DD");case"hour":return Et(e).utc().format("HH");case"minute":return Et(e).utc().format("mm");case"second":return Et(e).utc().format("ss");case"millisecond":return Et(e).utc().format("SSS");default:break}},date:e=>Et(e).utc().format(oS),date_format:(e,t)=>Et(e).utc().format(t),date_add:(e,t,r)=>Et(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Et(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Et(e).utc(),n=Et(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Et().utc().valueOf(),get_server_time:()=>Et().format(oS),offset_utc:(e,t)=>Et(e).utc().utcOffset(t).format(oS)}});var zC=g((Dde,QC)=>{"use strict";var jJ=require("@turf/area"),XJ=require("@turf/length"),ZJ=require("@turf/circle"),e4=require("@turf/difference"),t4=require("@turf/distance"),r4=require("@turf/boolean-contains"),s4=require("@turf/boolean-equal"),n4=require("@turf/boolean-disjoint"),i4=require("@turf/helpers"),KC=M(),me=Q(),bn=$();QC.exports={geoArea:o4,geoLength:a4,geoCircle:c4,geoDifference:u4,geoDistance:WC,geoNear:l4,geoContains:_4,geoEqual:d4,geoCrosses:f4,geoConvert:E4};function o4(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return jJ.default(e)}catch(t){return bn.trace(t,e),NaN}}a(o4,"geoArea");function a4(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return XJ.default(e,{units:t||"kilometers"})}catch(r){return bn.trace(r,e),NaN}}a(a4,"geoLength");function c4(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return ZJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(c4,"geoCircle");function u4(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return e4(e,t)}catch(r){return bn.trace(r,e,t),NaN}}a(u4,"geoDifference");function WC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return t4.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(WC,"geoDistance");function l4(e,t,r,s){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return WC(e,t,s)<=r}catch(n){return bn.trace(n,e,t),!1}}a(l4,"geoNear");function _4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return r4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(_4,"geoContains");function d4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return s4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(d4,"geoEqual");function f4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!n4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(f4,"geoCrosses");function E4(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(KC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),i4[t](e,r)}a(E4,"geoConvert")});var cd=g((Mde,JC)=>{var to=VC(),xr=YC(),rn=zC();JC.exports=e=>{e.aggr.mad=e.aggr.MAD=to.mad,e.aggr.mean=e.aggr.MEAN=to.mean,e.aggr.mode=e.aggr.MODE=to.mode,e.aggr.prod=e.aggr.PROD=to.prod,e.aggr.median=e.aggr.MEDIAN=to.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=to.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=to.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var eD=g((Ude,ZC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var h4=cd(),jC=require("clone"),ud=require("recursive-iterator"),le=$(),Ie=Q(),ia=ys(),m4=M(),{hdb_errors:p4}=se(),{getDatabases:XC}=(Ae(),ne(Ge)),S4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";h4(lr);var aS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw le.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(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return le.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(s),new Error(Us)}}_getColumns(){let t=new ud(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(jC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=XC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ud(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ud(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(m4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.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(Ie.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"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(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,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Zc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(jC(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.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(S4)>-1&&this.tables.forEach(n=>{let i={columnid:XC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Zc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ia.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ia.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ia.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ia.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Us)}}}_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 lr.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.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 n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new ud(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Zc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Us)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ia.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.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 s;try{let n=this._buildSQL();le.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),le.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return le.error(p4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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 u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ia.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ZC.exports=aS});var Dr=g((vde,tD)=>{"use strict";var T4=vb();tD.exports={searchByConditions:R4,searchByHash:A4,searchByValue:O4,search:b4};var cS=ys(),{transformReq:uS}=Q(),g4=eD();async function R4(e){return uS(e),cS.searchByConditions(e)}a(R4,"searchByConditions");async function A4(e){uS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of cS.searchByHash(e))r&&t.push(r);return t}a(A4,"searchByHash");async function O4(e){uS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of cS.searchByValue(e))t.push(r);return t}a(O4,"searchByValue");function b4(e,t){try{let r=new T4(e);r.validate(),new g4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(b4,"search")});var ld=g((Hde,rD)=>{"use strict";var N4=ys();rD.exports={writeTransaction:y4};function y4(e,t,r){return N4.writeTransaction(e,t,r)}a(y4,"writeTransaction")});var oD=g((Gde,iD)=>{"use strict";var w4=Dr(),I4=gn(),sD=$(),C4=Lr(),qde=ld(),D4=require("clone"),_S=require("alasql"),L4=cd(),nD=require("util"),M4=nD.promisify(I4.getTableSchema),U4=nD.promisify(w4.search),P4=M(),lS=Q();L4(_S);iD.exports={update:B4};var v4="There was a problem performing this update. Please check the logs and try again.";async function B4({statement:e,hdb_user:t}){let r=await M4(e.table.databaseid,e.table.tableid),s=H4(e.columns);lS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=D4(n),c=lS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=_S.parse(u).statements[0],l=await U4(_),d=x4(s,l);return q4(o,d,t)}a(B4,"update");function H4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=_S.compile(`SELECT ${r.expression.toString()} AS [${P4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sD.error(t),new Error(v4)}}a(H4,"createUpdateRecord");function x4(e,t){return lS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(x4,"buildUpdateRecords");async function q4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await C4.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sD.error(`Error delete new_attributes from update response: ${i}`)}return n}a(q4,"updateRecords")});var cD=g(($de,aD)=>{var G4=require("alasql"),F4=Dr(),k4=$(),V4=ys(),fS=require("util"),dS=Q(),$4=M(),Y4=gn(),kde=ld(),Vde=Lr(),K4="record",W4="successfully deleted",Q4=fS.callbackify(X4),z4=fS.promisify(F4.search),J4=fS.promisify(Y4.getTableSchema);aD.exports={convertDelete:Q4};function j4(e){return`${e.deleted_hashes.length} ${K4}${e.deleted_hashes.length===1?"":"s"} ${W4}`}a(j4,"generateReturnMessage");async function X4({statement:e,hdb_user:t}){let r=await J4(e.table.databaseid,e.table.tableid);dS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=dS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=G4.parse(o).statements[0],u={operation:$4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await z4(c);let _=await V4.deleteRecords(u);return dS.isEmptyOrZeroLength(_.message)&&(_.message=j4(_)),delete _.txn_time,_}catch(_){throw k4.error(_),_.hdb_code?_.message:_}}a(X4,"convertDelete")});var fD=g((Kde,dD)=>{"use strict";var Z4=Zn(),{hdb_errors:uD}=se(),{getDatabases:lD}=(Ae(),ne(Ge));dD.exports={checkSchemaExists:_D,checkSchemaTableExists:e3,schema_describe:Z4};async function _D(e){if(!lD()[e])return uD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_D,"checkSchemaExists");async function e3(e,t){let r=await _D(e);if(r)return r;if(!lD()[e][t])return uD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(e3,"checkSchemaTableExists")});var eu=g((Qde,t3)=>{t3.exports={name:"harperdb",version:"4.3.0-beta.8",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.6","nats-server":"2.10.10"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.4",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var iu={};Ye(iu,{addAnalyticsListener:()=>nu,recordAction:()=>qr,recordActionBinary:()=>ns,setAnalyticsEnabled:()=>r3});function r3(e){AD=e}function qr(e,t,r,s,n){if(!AD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=fd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},fd.set(i,o)}_d||s3()}function ns(e,t,r,s,n){qr(!!e,t,r,s,n)}function nu(e){ND.push(e)}function s3(){_d=performance.now(),setTimeout(async()=>{let e=performance.now()-_d;_d=0;let t=[],r={time:Date.now(),period:e,threadId:ro.threadId,metrics:t};for(let[n,i]of fd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of yD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,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 wD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:ro.threadId,byThread:!0,...s});for(let n of ND)n(t);fd=new Map,ro.parentPort?ro.parentPort.postMessage({type:bD,report:r}):DD({report:r})},OD).unref()}async function n3(e,t=6e4){let r=mS(),s=ID(),n=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),s.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:j,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await wD()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let j of k){let Te=j[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of yD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let ql=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-ql.value)*(L-Ct)/P.count)}let[k,B,J,z,j,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:j,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,dd.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||s.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,dd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-ED,active:h-hD,taskQueueLatency:await n,time:f,...process.memoryUsage()};s.primaryStore.put(p,S,{append:!0}).then(T=>{T||s.primaryStore.put(p,S)})}ED=E,hD=h}async function mD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function mS(){return pD||(pD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ID(){return SD||(SD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function a3(){CD=!0;let e=(0,su.get)(hS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await n3(OD,e),await mD(mS(),i3),await mD(ID(),o3)},Math.min(e/2,2147483647)).unref()}function DD(e,t){let r=e.report;r.threadId=t?.threadId||ro.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(TD+=s.mean*s.count);r.totalBytesProcessed=TD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(gD.get(t))}),gD.set(t,t.performance.eventLoopUtilization())),r.id=(0,dd.getNextMonotonicTime)(),mS().primaryStore.put(r.id,r),CD||a3(),c3&&(LD=l3(r))}async function l3(e){if(await LD,!ai){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{ai=await(0,ES.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{ai=await(0,ES.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await ai.stat()).size;if(t>u3){let r=Buffer.alloc(t);await ai.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ai.write(r,{position:0}),await ai.truncate(r.length),t=r.length}await ai.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var ro,RD,tu,ru,ES,dd,su,hS,fd,AD,_d,OD,bD,ND,yD,ED,hD,wD,i3,o3,pD,SD,CD,TD,gD,c3,LD,ai,u3,Nn=Re(()=>{ro=require("worker_threads"),RD=x(Ke());Ae();tu=x($()),ru=require("path"),ES=require("fs/promises"),dd=x(wr()),su=x(ee()),hS=x(M());nr();(0,su.initSync)();fd=new Map,AD=(0,su.get)(hS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(r3,"setAnalyticsEnabled");a(qr,"recordAction");tt.recordAnalytics=qr;a(ns,"recordActionBinary");_d=0,OD=1e3,bD="analytics-report",ND=[];a(nu,"addAnalyticsListener");yD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(s3,"sendAnalytics");a(n3,"aggregation");ED=0,hD=0,wD=a(()=>new Promise(setImmediate),"rest");a(mD,"cleanup");i3=36e5,o3=31536e6;a(mS,"getRawAnalyticsTable");a(ID,"getAnalyticsTable");(0,RD.setChildListenerByType)(bD,DD);a(a3,"startScheduledTasks");TD=0,gD=new Map,c3=!1;a(DD,"recordAnalytics");u3=1e6;a(l3,"logAnalytics")});var AS=g((ofe,FD)=>{"use strict";var{decode:_3}=require("msgpackr"),{isMainThread:nfe,parentPort:d3,threadId:ife}=require("worker_threads"),ou=st(),oa=Fe(),TS=M(),zt=$(),SS=ee(),UD=M(),{onMessageByType:f3}=Ke(),PD=Tn(),{recordAction:E3,recordActionBinary:h3}=(Nn(),ne(iu)),{publishToStream:m3}=ou,{ConsumerEvents:p3}=require("nats"),S3=Dr(),{promisify:T3}=require("util"),vD=T3(setTimeout),md=1e4,pd,hd,g3,R3,BD,au=new Map,aa=new Map;FD.exports={initialize:gS,ingestConsumer:RS,setSubscription:A3,setIgnoreOrigin:N3,getDatabaseSubscriptions:b3,updateConsumer:HD};async function gS(){f3(TS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async s=>{await HD(s)}),BD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();pd=e,hd=e.info.server_name,g3=t,R3=r}a(gS,"initialize");async function HD(e){if(e.status==="start"){let{js:t,jsm:r}=await xD(e.node_domain_name);RS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),aa.get(e.node_domain_name)==="failed"&&aa.set(e.node_domain_name,"close")}}a(HD,"updateConsumer");var Sd=new Map;function A3(e,t,r){let s=Sd.get(e);s||Sd.set(e,s=new Map),s.set(t,r),BD||gS().then(O3)}a(A3,"setSubscription");async function O3(){let e=await S3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+oa.SERVER_SUFFIX.LEAF,{js:s,jsm:n}=await xD(r);if(n){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=PD.createNatsTableStreamName(o,c);RS(u,s,n,r)}}}}a(O3,"accessConsumers");async function xD(e){let t,r,s=1;for(;!r;)try{t=await pd.jetstream({domain:e,timeout:6e4}),r=await pd.jetstreamManager({domain:e,timeout:6e4})}catch(n){if(aa.get(e)==="close")break;aa.set(e,"failed"),s%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",n.message);let i=s++*100<md?s++*100:md;await vD(i)}return{js:t,jsm:r}}a(xD,"connectToRemoteJS");function b3(){return Sd}a(b3,"getDatabaseSubscriptions");var qD;function N3(e){qD=e}a(N3,"setIgnoreOrigin");var GD=100,MD=new Array(GD),Ed=0;async function RS(e,t,r,s){let{connection:n}=await ou.getNATSReferences();pd=n,hd=n.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,hd),zt.notify("Initializing ingest consumer for node:",s,"stream:",e)}catch(_){if(aa.get(s)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",s,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",s,"stream:",e),i=await ou.createConsumer(r,e,hd,new Date(Date.now()).toISOString()));let l=o++*100<md?o++*100:md;await vD(l)}let c=!1,u;for(d3?.on("message",async _=>{let{type:l}=_;l===UD.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(au.get(e+s)==="close"||aa.get(s)==="close"){au.delete(e+s),c=!0;continue}u=await i.consume({max_messages:SS.get(TS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+s,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===p3.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${s} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${s} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await MD[Ed],MD[Ed]=y3(l).catch(d=>{zt.error(d)}),++Ed>=GD&&(Ed=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",s,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await gS()}}a(RS,"ingestConsumer");async function y3(e){let t=_3(e.data);E3(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,s=!1,n=SS.get(TS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(oa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(oa.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(oa.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!qD),h3(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(oa.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(oa.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=Sd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,R.send(t);else if(l.length===1&&!u)R.send({type:pS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:pS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:pS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}SS.get(UD.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&m3(e.subject.split(".").slice(0,-1).join("."),PD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a(y3,"messageProcessor");function pS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(pS,"convertOperation")});var st=g((ffe,nL)=>{"use strict";var Mt=ee();Mt.initSync();var w3=require("fs-extra"),I3=require("semver"),lu=require("path"),{monotonicFactory:C3}=require("ulidx"),VD=C3(),D3=require("util"),$D=require("child_process"),L3=D3.promisify($D.exec),M3=$D.spawn,Ft=Fe(),Ce=M(),Td=Q(),Ps=$(),gd=Tn(),U3=ld(),cu=Pr(),{broadcast:P3,onMessageByType:v3,getWorkerIndex:B3}=Ke(),{isMainThread:YD}=require("worker_threads"),{Encoder:H3,decode:yS}=require("msgpackr"),KD=new H3,{isEmpty:oo}=Td,WD=ss(),cfe=48*36e11;YD&&v3(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,io=void 0});var{connect:x3,StorageType:q3,RetentionPolicy:G3,AckPolicy:wS,DeliverPolicy:IS,DiscardPolicy:F3,NatsConnection:ufe,JetStreamManager:lfe,JetStreamClient:_fe,StringCodec:dfe,JSONCodec:k3,createInbox:CS,headers:V3,ErrorCode:kD}=require("nats"),{PACKAGE_ROOT:$3}=M(),Y3=eu(),{recordAction:K3}=(Nn(),ne(iu)),QD=k3(),W3="clustering",Q3=Y3.engines[Ft.NATS_SERVER_NAME],z3=lu.join($3,"dependencies"),NS=lu.join(z3,`${process.platform}-${process.arch}`,Ft.NATS_BINARY_NAME),OS,bS,uu,so,no;nL.exports={runCommand:zD,checkNATSServerInstalled:J3,createConnection:DS,getConnection:Rd,getJetStreamManager:_u,getJetStream:jD,getNATSReferences:vs,getServerList:X3,createLocalStream:LS,listStreams:XD,deleteLocalStream:Z3,getServerConfig:du,listRemoteStreams:ej,viewStream:tj,viewStreamIterator:rj,publishToStream:sj,request:oj,reloadNATS:MS,reloadNATSHub:aj,reloadNATSLeaf:cj,extractServerName:ij,requestErrorHandler:uj,createLocalTableStream:rL,createTableStreams:dj,purgeTableStream:sL,purgeSchemaTableStreams:fj,getStreamInfo:Ej,updateLocalStreams:mj,closeConnection:j3,getJsmServerName:Ad,addNatsMsgHeader:ZD,clearClientCache:JD,updateRemoteConsumer:lj,createConsumer:eL,updateConsumerIterator:_j};async function zD(e,t=void 0){let{stdout:r,stderr:s}=await L3(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}cK(s,r),Xm(s);let n=s.toJSON();if(eK.config=n,bt=Yo(n),bt.logging_rotation_rotate)for(let i in Iy)bt[i]&&Ot.error(`Config ${Iy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(rK)}}a(jm,"initConfig");function cK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ws.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ws.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ws.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Ot.trace("Updating config file with missing config params"),cr.writeFileSync(t,String(e)))}a(cK,"checkForUpdatedConfig");function Xm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=QY(t);if(r.error)throw H_.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Xm,"validateConfig");function uK(e,t){bt===void 0&&(bt={});let r=Is[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(uK,"updateConfigObject");function Uy(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&jm();let o=My(Is.hdb_root),c=ws.join(o,Ur.HDB_CONFIG_FILE),u=si(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Jm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Is[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===bt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Jm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Ot.error(T)}}}_&&Ly(u,_),Xm(u);let l=u.getIn(["rootPath"]),d=ws.join(l,Ur.HDB_CONFIG_FILE);s===!0&&lK(c,l),cr.writeFileSync(d,String(u)),n&&(bt=Yo(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Uy,"updateConfigValue");function lK(e,t){try{let r=ws.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(sK),Ot.error(r)}}a(lK,"backupConfigFile");var _K=["databases"];function Yo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),q_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i)){if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!_K.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Is[u]&&(n[Is[u].toLowerCase()]=o[c]),n[u]=o[c]}}s[i]!==void 0&&(n[i.toLowerCase()]=s[i])}return n}a(r,"squashObj")}a(Yo,"flattenConfig");function Jm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(JY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Lt.autoCast(t)}a(Jm,"castConfigValue");function dK(){let e=Lt.getPropsFilePath(),t=Wi(e);return si(t).toJSON()}a(dK,"getConfiguration");async function fK(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Uy(void 0,void 0,n,!0),iK}catch(i){throw typeof i=="string"||i instanceof String?XY(i,i,ZY.BAD_REQUEST,void 0,void 0,!0):i}}a(fK,"setConfiguration");function Zm(){let e=Lt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!Lt.noBootFile())throw Ot.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Wi(e);return si(t).toJSON()}a(Zm,"readConfigFile");function si(e){return zY.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(si,"parseYamlDoc");function EK(){let e=Zm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=wy(t);if(r)throw H_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Lt.isEmptyOrZeroLength(s)?[]:s;let n=wy(s);if(n)throw H_.CONFIG_VALIDATION(n.message);if(!Lt.isEmptyOrZeroLength(s)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw H_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(EK,"getClusteringRoutes");function Py(e){let t=Cy(e);bt={};for(let r in Is){let s=t.get(r.toUpperCase());if(Lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Is[r].toLowerCase();n===Mr.LOGGING_ROOT?bt[n]=ws.dirname(s):bt[n]=s}return bt}a(Py,"initOldConfig");function hK(e){let t=Zm();return jY.get(t,e.replaceAll("_","."))}a(hK,"getConfigFromFile");async function mK(e,t){let r=si(Wi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(Wi(),String(r))}a(mK,"addConfig");function pK(e){let t=Wi(Lt.getPropsFilePath()),r=si(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ws.join(s,Ur.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(pK,"deleteConfigFromFile");function SK(){return q_||(jm(),q_)}a(SK,"getConfigObj")});var Hy=g((Fue,By)=>{"use strict";var G_=M(),F_=class{static{a(this,"BaseLicense")}constructor(t=0,r=G_.RAM_ALLOCATION_ENUM.DEFAULT,s=G_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},ep=class extends F_{static{a(this,"ExtendedLicense")}constructor(t=0,r=G_.RAM_ALLOCATION_ENUM.DEFAULT,s=G_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};By.exports={BaseLicense:F_,ExtendedLicense:ep}});var Qi=g((Vue,Vy)=>{"use strict";var Wo=require("fs-extra"),qy=P_(),Gy=require("crypto"),TK=require("moment"),gK=require("uuid").v4,Wt=$(),rp=require("path"),RK=Q(),ni=M(),{totalmem:xy}=require("os"),AK=Hy().ExtendedLicense,Ko="invalid license key format",OK="061183",bK="mofi25",NK="aes-256-cbc",yK=16,wK=32,Fy=ee();Fy.initSync();var tp;Vy.exports={validateLicense:ky,generateFingerPrint:CK,licenseSearch:ip,getLicense:MK,checkMemoryLimit:UK};function sp(){return rp.join(Fy.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(sp,"getLicenseDirPath");function IK(){let e=sp();return rp.join(e,ni.LICENSE_FILE_NAME)}a(IK,"getLicenseFilePath");function np(){let e=sp();return rp.join(e,ni.REG_KEY_FILE_NAME)}a(np,"getFingerPrintFilePath");async function CK(){let e=np();try{return await Wo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await DK();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(CK,"generateFingerPrint");async function DK(){let e=gK(),t=qy.hash(e),r=np();try{await Wo.mkdirp(sp()),await Wo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(DK,"writeFingerprint");function ky(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let s=np(),n=!1;try{n=Wo.statSync(s)}catch(i){Wt.error(i)}if(n){let i;try{i=Wo.readFileSync(s,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(bK),c=o[1];c=Buffer.concat([Buffer.from(c)],yK);let u=Buffer.concat([Buffer.from(i)],wK),_=Gy.createDecipheriv(NK,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=LK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ko),Wt.error(Ko),new Error(Ko)}let d;if(isNaN(l))try{d=JSON.parse(l),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(Ko),Wt.error(Ko),new Error(Ko)}else r.exp_date=l;r.exp_date<TK().valueOf()&&(r.valid_date=!1),qy.validate(o[1],`${OK}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wt.error("Invalid licence"),r}a(ky,"validateLicense");function LK(e,t){try{let r=Gy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Wt.warn("Check old license failed")}}a(LK,"checkOldLicense");function ip(){let e=new AK,t=[];try{t=Wo.readFileSync(IK(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(RK.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ky(n.license_key,n.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(n){Wt.error("There was an error parsing the license string."),Wt.error(n),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return tp=e,e}a(ip,"licenseSearch");async function MK(){return tp||await ip(),tp}a(MK,"getLicense");function UK(){let e=ip().ram_allocation,t=process.constrainedMemory?.()||xy();if(t=Math.round(Math.min(t,xy())/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(UK,"checkMemoryLimit")});var ss=g((Que,iw)=>{"use strict";var Wy="username is required",Qy="nothing to update, must supply active, role or password to update",zy="password cannot be an empty string",Jy="If role is specified, it cannot be empty.",jy="active must be true or false";iw.exports={addUser:kK,alterUser:VK,dropUser:YK,getSuperUser:zK,userInfo:KK,listUsers:V_,listUsersExternal:WK,setUsersToGlobal:zo,findAndValidateUser:sw,getClusterUser:JK,USERNAME_REQUIRED:Wy,ALTERUSER_NOTHING_TO_UPDATE:Qy,EMPTY_PASSWORD:zy,EMPTY_ROLE:Jy,ACTIVE_BOOLEAN:jy};var Xy=Lr(),PK=ri(),cp=P_(),Zy=py(),ew=Dr(),up=Rn(),vr=Q(),tw=require("validate.js"),Se=$(),{promisify:vK}=require("util"),lp=Tn(),$y=M(),Yy=Fe(),BK=Pr(),Yue=ee(),Kue=Qi(),HK=qi(),{table:Wue}=(Ae(),ne(Ge)),{handleHDBError:js,hdb_errors:xK}=se(),{HTTP_STATUS_CODES:Xs,AUTHENTICATION_ERROR_MSGS:op,HDB_ERROR_MSGS:Qo}=xK,{UserEventMsg:_p}=Cs(),ap=require("lodash"),{server:dp}=(nr(),ne(Pi)),qK=$();dp.getUser=(e,t)=>sw(e,t,t!=null);var rw={username:!0,active:!0,role:!0,password:!0},Ky=new Map,k_=ew.searchByValue,GK=ew.searchByHash,FK=vK(PK.delete);async function kK(e){let t=tw.cleanAttributes(e,rw),r=Zy.addUserValidation(t);if(r)throw js(new Error,r.message,Xs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await k_(s),n=n&&Array.from(n)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!n||n.length<1)throw js(new Error,Qo.ROLE_NAME_NOT_FOUND(t.role),Xs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw js(new Error,Qo.DUP_ROLES_FOUND(t.role),Xs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=lp.encrypt(t.password)),t.password=cp.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Xy.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await zo()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw js(new Error,Qo.USER_ALREADY_EXISTS(t.username),Xs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],up.signalUserChange(new _p(process.pid)),`${c.username} successfully added`}a(kK,"addUser");async function VK(e){let t=tw.cleanAttributes(e,rw);if(vr.isEmptyOrZeroLength(t.username))throw new Error(Wy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Qy);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(zy);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(jy);let r=$K(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=lp.encrypt(t.password)),t.password=cp.hash(t.password)),t.role==="")throw new Error(Jy);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await k_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Qo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),js(new Error,c,Xs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Qo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),js(new Error,c,Xs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Xy.update(s)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await zo()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return up.signalUserChange(new _p(process.pid)),n}a(VK,"alterUser");function $K(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a($K,"isClusterUser");async function YK(e){try{let t=Zy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw js(new Error,Qo.USER_NOT_EXIST(e.username),Xs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await FK(r)}catch(n){throw Se.error("Got an error deleting a user."),Se.error(n),n}Se.debug(s);try{await zo()}catch(n){throw Se.error("Got an error setting users to global."),Se.error(n),n}return up.signalUserChange(new _p(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(YK,"dropUser");async function KK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ap.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await GK(r)}catch(n){throw Se.error("Got an error searching for a role."),Se.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(KK,"userInfo");async function WK(){let e;try{e=await V_()}catch(t){throw Se.error("Got an error listing users."),Se.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(WK,"listUsersExternal");async function V_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await k_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=ap.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await k_(s)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of n)o=ap.cloneDeep(o),o.role=r[o.role],QK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),vr.errorizeMessage(e)}return null}a(V_,"listUsers");function QK(e){try{if(!e){Se.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(HK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(QK,"appendSystemTablesToRole");async function zo(){try{let e=await V_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(zo,"setUsersToGlobal");async function sw(e,t,r=!0){global.hdb_users||await zo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw js(new Error,op.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw js(new Error,op.USER_INACTIVE,Xs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ky.get(t)===s.password)return n;if(cp.validate(s.password,t))Ky.set(t,s.password);else throw js(new Error,op.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sw,"findAndValidateUser");async function zK(){global.hdb_users||await zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(zK,"getSuperUser");async function JK(){let e=await V_(),t=BK.getConfigFromFile($y.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===$y.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=lp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yy.SERVER_SUFFIX.ADMIN,r}a(JK,"getClusterUser");var nw=[];dp.invalidateUser=function(e){for(let t of nw)try{t(e)}catch(r){qK.error("Error invalidating user",r)}};dp.onInvalidatedUser=function(e){nw.push(e)}});var Hc=g((Xue,uw)=>{"use strict";var zi=$(),Br=M(),jK=xN(),Jue=gn(),jue=Zn(),XK=ss(),{validateEvent:ow}=Cs(),Bc=ys(),ZK=require("process"),{resetDatabases:eW}=(Ae(),ne(Ge)),tW={[Br.ITC_EVENT_TYPES.SCHEMA]:rW,[Br.ITC_EVENT_TYPES.USER]:cw};async function rW(e){let t=ow(e);if(t){zi.error(t);return}zi.trace("ITC schemaHandler received schema event:",e),await jK(e.message),await sW(e.message)}a(rW,"schemaHandler");async function sW(e){try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=eW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){zi.error(t)}}a(sW,"syncSchemaMetadata");var aw=[];async function cw(e){try{try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){zi.warn(r)}let t=ow(e);if(t){zi.error(t);return}zi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${ZK.pid} received user event:`,e),await XK.setUsersToGlobal();for(let r of aw)r()}catch(t){zi.error(t)}}a(cw,"userHandler");cw.addListener=function(e){aw.push(e)};uw.exports=tW});var Cs=g((nle,_w)=>{"use strict";var ele=$(),fp=Q(),nW=M(),{ITC_ERRORS:xc}=yr(),{parentPort:tle,threadId:iW,isMainThread:oW,workerData:rle}=require("worker_threads"),{onMessageFromWorkers:aW,broadcast:sle,broadcastWithAcknowledgement:cW}=Ke();_w.exports={sendItcEvent:uW,validateEvent:lw,SchemaEventMsg:lW,UserEventMsg:_W};var $_;aW(async(e,t)=>{$_=$_||Hc(),lw(e),$_[e.type]&&await $_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function uW(e){return!oW&&e.message&&(e.message.originator=iW),cW(e)}a(uW,"sendItcEvent");function lw(e){if(typeof e!="object")return xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||fp.isEmpty(e.type))return xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||fp.isEmpty(e.message))return xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||fp.isEmpty(e.message.originator))return xc.MISSING_ORIGIN;if(nW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return xc.INVALID_EVENT(e.type)}a(lw,"validateEvent");function lW(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(lW,"SchemaEventMsg");function _W(e){this.originator=e}a(_W,"UserEventMsg")});var Rn=g((ale,hw)=>{"use strict";var dw=M(),ole=Q(),Y_=$(),fw=vN(),Jo,{sendItcEvent:Ew}=Cs();function dW(e){try{Y_.trace("signalSchemaChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.SCHEMA,e);return Jo.schema(t),Ew(t)}catch(t){Y_.error(t)}}a(dW,"signalSchemaChange");function fW(e){try{Y_.trace("signalUserChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.USER,e);return Jo.user(t),Ew(t)}catch(t){Y_.error(t)}}a(fW,"signalUserChange");hw.exports={signalSchemaChange:dW,signalUserChange:fW}});var K_=g((ule,pw)=>{"use strict";var mw=Q(),EW=M(),hW=$(),mW=g_(),pW=T_(),SW=Rn(),{SchemaEventMsg:TW}=Cs(),gW="already exists in";pw.exports=RW;async function RW(e,t,r){if(mw.isEmptyOrZeroLength(r))return r;let s=[];mw.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await AW(e,t.schema,t.name,i)})),n}a(RW,"lmdbCheckForNewAttributes");async function AW(e,t,r,s){let n=new pW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await OW(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(gW))hW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(AW,"createNewAttribute");async function OW(e){let t;return t=await mW(e),SW.signalSchemaChange(new TW(process.pid,EW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(OW,"createAttribute")});var jo=g((_le,Sw)=>{"use strict";var Ep=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Sw.exports=Ep});var gw=g((fle,Tw)=>{"use strict";var bW=jo(),NW=M().OPERATIONS_ENUM,hp=class extends bW{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(NW.INSERT,r,s,n,i),this.records=t}};Tw.exports=hp});var Aw=g((hle,Rw)=>{"use strict";var yW=jo(),wW=M().OPERATIONS_ENUM,mp=class extends yW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(wW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Rw.exports=mp});var bw=g((ple,Ow)=>{"use strict";var IW=jo(),CW=M().OPERATIONS_ENUM,pp=class extends IW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(CW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Ow.exports=pp});var yw=g((Tle,Nw)=>{"use strict";var DW=jo(),LW=M().OPERATIONS_ENUM,Sp=class extends DW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(LW.DELETE,s,n,t,i),this.original_records=r}};Nw.exports=Sp});var qc=g((Ale,Dw)=>{"use strict";var Rle=require("path"),ww=We(),MW=gw(),UW=Aw(),PW=bw(),vW=yw(),Xo=dt(),Iw=Q(),{CONFIG_PARAMS:BW}=M(),Cw=ee();Cw.initSync();var W_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:HW}=Je();Dw.exports=xW;async function xW(e,t){if(Cw.get(BW.LOGGING_AUDITLOG)===!1)return;let r=HW(e.schema,e.table),s=await ww.openEnvironment(r,e.table,!0),n=qW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){ww.initializeDBIs(s,Xo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Iw.isEmpty(n.user_name)||s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Xo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(xW,"writeTransaction");function qW(e,t){let r=Iw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===W_.INSERT)return new MW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===W_.UPDATE)return new UW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===W_.UPSERT)return new PW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===W_.DELETE)return new vW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(qW,"createTransactionObject")});var Tp=g((Nle,Lw)=>{"use strict";var GW=Dc(),ble=Lc(),Gc=M(),FW=Mc(),kW=ko().insertRecords,VW=We(),$W=$(),YW=K_(),{getSchemaPath:KW}=Je(),WW=qc();Lw.exports=QW;async function QW(e){try{let{schema_table:t,attributes:r}=GW(e);FW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await YW(e.hdb_auth_header,t,r),n=KW(e.schema,e.table),i=await VW.openEnvironment(n,e.table),o=await kW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await WW(e,o)}catch(c){$W.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(QW,"lmdbCreateRecords")});var Pw=g((wle,Uw)=>{"use strict";var Mw=M(),zW=Tp(),JW=Lc(),jW=require("fs-extra"),{getSchemaPath:XW}=Je();Uw.exports=ZW;async function ZW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new JW(Mw.SYSTEM_SCHEMA_NAME,Mw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await zW(r),await jW.mkdirp(XW(e.schema))}a(ZW,"lmdbCreateSchema")});var Bw=g((Cle,vw)=>{"use strict";var gp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};vw.exports=gp});var Gw=g((Ple,qw)=>{"use strict";var Hw=We(),Rp=wr(),Ap=yr().LMDB_ERRORS_ENUM,eQ=dt(),xw=$(),Lle=Q(),tQ=require("lmdb"),rQ=Bw(),sQ=M(),{OVERFLOW_MARKER:Mle,MAX_SEARCH_KEY_LENGTH:Ule}=eQ,nQ=sQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function iQ(e,t,r,s){if(Rp.validateEnv(e),t===void 0)throw new Error(Ap.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ap.IDS_REQUIRED):new Error(Ap.IDS_MUST_BE_ITERABLE);try{let n=Hw.listDBIs(e);Hw.initializeDBIs(e,t,n);let i=new rQ,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[nQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,tQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let T=n[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=Rp.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{xw.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){xw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Rp.getNextMonotonicTime(),i}catch(n){throw n}}a(iQ,"deleteRecords");qw.exports={deleteRecords:iQ}});var Fc=g((Ble,kw)=>{"use strict";var Zo=Q(),oQ=Gw(),aQ=We(),{getSchemaPath:cQ}=Je(),uQ=qc(),lQ=$();kw.exports=_Q;async function _Q(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Zo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Zo.isEmptyOrZeroLength(e.hash_values)&&!Zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Zo.isEmpty(u)||e.hash_values.push(u)}}if(Zo.isEmptyOrZeroLength(e.hash_values))return Fw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Zo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=cQ(e.schema,e.table),i=await aQ.openEnvironment(n,e.table),o=await oQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await uQ(e,o)}catch(c){lQ.error(`unable to write transaction due to ${c.message}`)}return Fw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(_Q,"lmdbDeleteRecords");function Fw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Fw,"createDeleteResponse")});var bp=g((qle,Vw)=>{"use strict";var dQ=M(),xle=wr();function Op(e,t){let r=Object.create(null);if(t.length===1&&dQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Op,"parseRow");function fQ(e,t,r,s){let n=Op(r,e);s.push(n)}a(fQ,"searchAll");function EQ(e,t,r,s){let n=Op(r,e);s[t]=n}a(EQ,"searchAllToMap");function hQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(hQ,"iterateDBI");function Ji(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ji,"pushResults");function mQ(e,t,r,s,n,i){t.toString().endsWith(e)&&Ji(t,r,s,n,i)}a(mQ,"endsWith");function pQ(e,t,r,s,n,i){t.toString().includes(e)&&Ji(t,r,s,n,i)}a(pQ,"contains");function SQ(e,t,r,s,n,i){t>e&&Ji(t,r,s,n,i)}a(SQ,"greaterThanCompare");function TQ(e,t,r,s,n,i){t>=e&&Ji(t,r,s,n,i)}a(TQ,"greaterThanEqualCompare");function gQ(e,t,r,s,n,i){t<e&&Ji(t,r,s,n,i)}a(gQ,"lessThanCompare");function RQ(e,t,r,s,n,i){t<=e&&Ji(t,r,s,n,i)}a(RQ,"lessThanEqualCompare");Vw.exports={parseRow:Op,searchAll:fQ,searchAllToMap:EQ,iterateDBI:hQ,endsWith:mQ,contains:pQ,greaterThanCompare:SQ,greaterThanEqualCompare:TQ,lessThanCompare:gQ,lessThanEqualCompare:RQ,pushResults:Ji}});var ea=g(($le,Jw)=>{"use strict";var ii=We(),Fle=$(),Hr=wr(),Q_=dt(),ut=yr().LMDB_ERRORS_ENUM,kle=Q(),AQ=M(),z_=bp(),{parseRow:OQ}=z_,Vle=require("lmdb"),{OVERFLOW_MARKER:$w,MAX_SEARCH_KEY_LENGTH:bQ}=Q_;function Yw(e,t,r,s=!1,n=void 0,i=void 0){return ji(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Yw,"iterateFullIndex");function kc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return ji(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(kc,"iterateRangeBetween");function ji(e,t,r,s){let n=e.database||e,i=ii.openDBI(n,r);i[Q_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ii.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ji,"setupTransaction");function Kw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith($w)){if(!n)if(r)n=ii.openDBI(e,r);else{let u=ii.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ii.openDBI(e,u[_]),!n[Q_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Kw,"getOverflowCheck");function NQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ji(e,t,t,(o,c,u)=>(J_(r),r=Vc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>OQ(_.value,r))))}a(NQ,"searchAll");function yQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);J_(r),r=Vc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Yw(e,t,t,s,n,i))o.set(c,z_.parseRow(u,r));return o}a(yQ,"searchAllToMap");function wQ(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Yw(e,void 0,t,r,s,n),c=o.transaction,u=Kw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(wQ,"iterateDBI");function IQ(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ii.statDBI(e,t).entryCount}a(IQ,"countAll");function CQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(CQ,"equals");function DQ(e,t,r){return oi(e,t,r),ii.openDBI(e,t).getValuesCount(r)}a(DQ,"count");function LQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(LQ,"startsWith");function MQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Ww(e,t,r,s,n,i,o,!0)}a(MQ,"endsWith");function Ww(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return oi(e,r,s),ji(e,null,r,(u,_,l,d)=>{let f=Kw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith($w)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[Q_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ww,"contains");function UQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!0,!1)}a(UQ,"greaterThan");function PQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!1,!1)}a(PQ,"greaterThanEqual");function vQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!0)}a(vQ,"lessThan");function BQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!1)}a(BQ,"lessThanEqual");function HQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return kc(e,t,r,s,n,i,o,c)}a(HQ,"between");function xQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(J_(r),r=Vc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=z_.parseRow(c,r)),o}a(xQ,"searchByHash");function qQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(qQ,"checkHashExists");function GQ(e,t,r,s,n=[]){return zw(e,t,r,s,n),Qw(e,t,r,s,n).map(i=>i[1])}a(GQ,"batchSearchByHash");function FQ(e,t,r,s,n=[]){zw(e,t,r,s,n);let i=new Map;for(let[o,c]of Qw(e,t,r,s,n))i.set(o,c);return i}a(FQ,"batchSearchByHashToMap");function Qw(e,t,r,s,n=[]){return ji(e,t,t,(i,o,c)=>{r=Vc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,z_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Qw,"batchHashSearch");function zw(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(J_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(zw,"initializeBatchSearchByHash");function J_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(J_,"validateFetchAttributes");function oi(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>bQ)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(oi,"validateComparisonFunctions");function Vc(e,t){return t.length===1&&AQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ii.listDBIs(e)),t}a(Vc,"setGetWholeRowAttributes");Jw.exports={searchAll:NQ,searchAllToMap:yQ,count:DQ,countAll:IQ,equals:CQ,startsWith:LQ,endsWith:MQ,contains:Ww,searchByHash:xQ,setGetWholeRowAttributes:Vc,batchSearchByHash:GQ,batchSearchByHashToMap:FQ,checkHashExists:qQ,iterateDBI:wQ,greaterThan:UQ,greaterThanEqual:PQ,lessThan:vQ,lessThanEqual:BQ,between:HQ}});var ta=g((Kle,tI)=>{var jw=require("lodash"),Xw=je(),fe=require("joi"),kQ=Q(),{hdb_schema_table:$c,checkValidTable:Zw,hdb_table:eI,hdb_database:j_}=Qs(),{handleHDBError:VQ,hdb_errors:$Q}=se(),{getDatabases:YQ}=(Ae(),ne(Ge)),{HTTP_STATUS_CODES:KQ}=$Q,WQ=fe.object({database:j_,schema:j_,table:eI,search_attribute:$c,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),QQ=fe.object({database:j_,schema:j_,table:eI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives($c,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives($c,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});tI.exports=function(e,t){let r=null;switch(t){case"value":r=Xw.validateBySchema(e,WQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Zw("database",e.schema)),i(Zw("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=Xw.validateBySchema(e,QQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=kQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return VQ(new Error,n,KQ.NOT_FOUND);let o=YQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=jw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!jw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Np=g((Qle,rI)=>{"use strict";var zQ=We(),JQ=ta(),{getSchemaPath:jQ}=Je();rI.exports=XQ;function XQ(e){let t=JQ(e,"hashes");if(t)throw t;let r=jQ(e.schema,e.table);return zQ.openEnvironment(r,e.table)}a(XQ,"initialize")});var yp=g((Jle,sI)=>{"use strict";var ZQ=ea(),ez=Np();sI.exports=tz;async function tz(e){let t=await ez(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return ZQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(tz,"lmdbGetDataByHash")});var ra=g((Xle,nI)=>{"use strict";var wp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};nI.exports=wp});var oI=g((t_e,iI)=>{"use strict";var e_e=ra(),rz=ea(),sz=Np();iI.exports=nz;async function nz(e){let t=await sz(e),r=global.hdb_schema[e.schema][e.table];return rz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(nz,"lmdbSearchByHash")});var Zs=g((s_e,aI)=>{"use strict";var Ip=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};aI.exports=Ip});var X_=g((i_e,fI)=>{"use strict";var Qt=ea(),iz=We(),oz=Q(),Ee=dt(),Xi=M(),az=qi(),cI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:cz}=Je(),An=Xi.SEARCH_WILDCARDS;async function uz(e,t,r){let s;e.schema===Xi.SYSTEM_SCHEMA_NAME?s=az[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dI(e,s.hash_attribute,r,t);return lI(e,n,s.hash_attribute,r)}a(uz,"prepSearch");async function lI(e,t,r,s){let n=cz(e.schema,e.table),i=await iz.openEnvironment(n,e.table),o=_I(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(lz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?uI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?uI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(lI,"executeSearch");function _I(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(_I,"searchByType");function uI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(uI,"createMapFromIterable");function lz(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(lz,"checkToFetchMore");function dI(e,t,r,s){if(oz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(cI.UNKNOWN_SEARCH_TYPE)}else switch(s){case Xi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Xi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Xi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(cI.UNKNOWN_SEARCH_TYPE)}}a(dI,"createSearchTypeFromSearchObject");fI.exports={executeSearch:lI,createSearchTypeFromSearchObject:dI,prepSearch:uz,searchByType:_I}});var hI=g((c_e,EI)=>{"use strict";var a_e=Zs(),_z=ta(),dz=Q(),fz=M(),Ez=X_();EI.exports=hz;function hz(e,t){if(!dz.isEmpty(t)&&fz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=_z(e,"value");if(s)throw s;return Ez.prepSearch(e,t,!0)}a(hz,"lmdbGetDataByValue")});var Yc=g((__e,mI)=>{"use strict";var l_e=Zs(),mz=ta(),pz=Q(),Sz=M(),Tz=X_();mI.exports=gz;async function gz(e,t){if(!pz.isEmpty(t)&&Sz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=mz(e,"value");if(s)throw s;return Tz.prepSearch(e,t,!1)}a(gz,"lmdbSearchByValue")});var SI=g((E_e,pI)=>{"use strict";var f_e=dt(),Cp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Dp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Lp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};pI.exports={SearchByConditionsObject:Cp,SearchCondition:Dp,SortAttribute:Lp}});var OI=g((S_e,AI)=>{"use strict";var m_e=SI().SearchByConditionsObject,Rz=Zs(),Az=ta(),Mp=ea(),Z_=dt(),{Resource:p_e}=(Os(),ne(Up)),RI=X_(),Oz=bp(),bz=require("lodash"),{getSchemaPath:Nz}=Je(),TI=We(),{handleHDBError:yz,hdb_errors:wz}=se(),{HTTP_STATUS_CODES:Iz}=wz,Cz=1e8;AI.exports=Dz;async function Dz(e){let t=Az(e,"conditions");if(t)throw yz(t,t.message,Iz.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=Nz(e.schema,e.table),s=await TI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)TI.openDBI(s,_.search_attribute);let i=bz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Z_.SEARCH_TYPES.EQUALS?_.estimated_count=Mp.count(s,_.search_attribute,_.search_value):l===Z_.SEARCH_TYPES.CONTAINS||l===Z_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Cz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await gI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(RI.filterByType),d=l.length,f=Mp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>Oz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await gI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Mp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(Dz,"lmdbSearchByConditions");async function gI(e,t,r,s){let n=new Rz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Z_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RI.searchByType(e,n,i,s).map(o=>o.value)}a(gI,"executeConditionSearch")});var sa=g((g_e,bI)=>{"use strict";var Lz=M().OPERATIONS_ENUM,Pp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Lz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};bI.exports=Pp});var vp=g((A_e,MI)=>{"use strict";var II=Zs(),CI=sa(),DI=Yc(),LI=Fc(),ur=M(),NI=Q(),yI=We(),{getTransactionAuditStorePath:Mz,getSchemaPath:Uz}=Je(),wI=$();MI.exports=Pz;async function Pz(e){try{if(NI.isEmpty(global.hdb_schema[e.schema])||NI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await vz(e),await Bz(e);let t=Uz(e.schema,e.table);try{await yI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Mz(e.schema,e.table);await yI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Pz,"lmdbDropTable");async function vz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await DI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await LI(n)}a(vz,"deleteAttributesFromSystem");async function Bz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await DI(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await LI(n)}catch(i){throw i}}a(Bz,"dropTableFromSystem")});var PI=g((b_e,UI)=>{"use strict";var Hz=require("fs-extra"),xz=Zs(),qz=ra(),Gz=sa(),Fz=vp(),kz=Fc(),Vz=yp(),$z=Yc(),On=M(),{getSchemaPath:Yz}=Je(),{handleHDBError:Kz,hdb_errors:Wz}=se(),{HDB_ERROR_MSGS:Qz,HTTP_STATUS_CODES:zz}=Wz;UI.exports=Jz;async function Jz(e){let t;try{t=await jz(e.schema);let r=new xz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await $z(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Fz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new Gz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kz(n);let i=Yz(t);await Hz.remove(i)}catch(r){throw r}}a(Jz,"lmdbDropSchema");async function jz(e){let t=new qz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Vz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Kz(new Error,Qz.SCHEMA_NOT_FOUND(e),zz.NOT_FOUND,void 0,void 0,!0);return s}a(jz,"validateDropSchema")});var ed=g((y_e,vI)=>{"use strict";var Bp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};vI.exports=Bp});var HI=g((C_e,BI)=>{"use strict";var Xz=require("fs-extra"),td=We(),{getTransactionAuditStorePath:Zz}=Je(),Hp=dt(),I_e=ed();BI.exports=e2;async function e2(e){let t;try{let r=Zz(e.schema,e.table);await Xz.mkdirp(r),t=await td.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{td.createDBI(t,Hp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),td.createDBI(t,Hp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),td.createDBI(t,Hp.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(e2,"createTransactionsAuditEnvironment")});var FI=g((L_e,GI)=>{"use strict";var xp=M(),xI=We(),t2=ko(),{getSystemSchemaPath:r2,getSchemaPath:s2}=Je(),n2=qi(),i2=g_(),qp=T_(),o2=$(),a2=HI(),Fp=n2.hdb_table,qI=[];for(let e=0;e<Fp.attributes.length;e++)qI.push(Fp.attributes[e].attribute);GI.exports=c2;async function c2(e,t){let r=s2(t.schema,t.table),s=new qp(t.schema,t.table,xp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new qp(t.schema,t.table,xp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new qp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xI.createEnvironment(r,t.table),e!==void 0){let o=await xI.openEnvironment(r2(),xp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await t2.insertRecords(o,Fp.hash_attribute,qI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Gp(s),await Gp(n),await Gp(i)}await a2(t)}catch(o){throw o}}a(c2,"lmdbCreateTable");async function Gp(e){try{await i2(e)}catch(t){o2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Gp,"createAttribute")});var VI=g((U_e,kI)=>{"use strict";var u2=Dc(),l2=Mc(),_2=K_(),Kc=M(),d2=ko().updateRecords,f2=We(),{getSchemaPath:E2}=Je(),h2=qc(),m2=$();kI.exports=p2;async function p2(e){try{let{schema_table:t,attributes:r}=u2(e);l2(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _2(e.hdb_auth_header,t,r),n=E2(e.schema,e.table),i=await f2.openEnvironment(n,e.table),o=await d2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await h2(e,o)}catch(c){m2.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(p2,"lmdbUpdateRecords")});var YI=g((v_e,$I)=>{"use strict";var S2=M().OPERATIONS_ENUM,kp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=S2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$I.exports=kp});var WI=g((x_e,KI)=>{"use strict";var H_e=YI(),T2=Dc(),g2=Mc(),R2=K_(),Wc=M(),A2=ko().upsertRecords,O2=We(),{getSchemaPath:b2}=Je(),N2=qc(),y2=$(),{handleHDBError:w2,hdb_errors:I2}=se();KI.exports=C2;async function C2(e){let t;try{t=T2(e)}catch(u){throw w2(u,u.message,I2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;g2(e,s,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(s.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await R2(e.hdb_auth_header,r,s),i=b2(e.schema,e.table),o=await O2.openEnvironment(i,e.table),c=await A2(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await N2(e,c)}catch(u){y2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(C2,"lmdbUpsertRecords")});var zI=g((G_e,QI)=>{"use strict";var Vp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};QI.exports=Vp});var jI=g((k_e,JI)=>{"use strict";var $p=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};JI.exports=$p});var eC=g((Y_e,ZI)=>{"use strict";var Yp=We(),{getTransactionAuditStorePath:D2}=Je(),$_e=zI(),Qc=dt(),L2=Q(),XI=jI(),M2=require("util").promisify,U2=M2(setTimeout),P2=1e4,v2=100;ZI.exports=B2;async function B2(e){let t=D2(e.schema,e.table),r=await Yp.openEnvironment(t,e.table,!0),s=Yp.listDBIs(r);Yp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new XI;do n=await H2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await U2(v2);while(n.transactions_deleted>0);return i}a(B2,"deleteAuditLogsBefore");async function H2(e,t){let r=new XI;try{let s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];L2.isEmpty(c)||(n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>P2)break}return await n,r}catch(s){throw s}}a(H2,"deleteTransactions")});var rC=g((W_e,tC)=>{"use strict";var Kp=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};tC.exports=Kp});var nC=g((J_e,sC)=>{"use strict";var x2=Zs(),q2=sa(),z_e=rC(),en=M(),G2=Q(),Wp=We(),F2=qi(),k2=Yc(),V2=Fc(),{getSchemaPath:$2}=Je();sC.exports=Y2;async function Y2(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=F2[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await W2(e),n=$2(e.schema,e.table),i=await Wp.openEnvironment(n,e.table);return t===!0&&await K2(e,i,r.hash_attribute),Wp.dropDBI(i,e.attribute),s}a(Y2,"lmdbDropAttribute");async function K2(e,t,r){let s=Wp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(K2,"removeAttributeFromAllObjects");async function W2(e){let t=new x2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await k2(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(G2.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new q2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return V2(i)}a(W2,"dropAttributeFromSystem")});var lC=g((Z_e,uC)=>{"use strict";var Qp=We(),na=dt(),X_e=wr(),zp=M(),iC=Q(),{getTransactionAuditStorePath:Q2}=Je(),z2=ea(),rd=jo(),J2=$();uC.exports=j2;async function j2(e){let t=Q2(e.schema,e.table),r=await Qp.openEnvironment(t,e.table,!0),s=Qp.listDBIs(r);Qp.initializeDBIs(r,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case zp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return oC(r,e.search_values);case zp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Z2(r,e.search_values,n);case zp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return X2(r,e.search_values);default:return oC(r)}}a(j2,"readAuditLog");function oC(e,t=[0,Date.now()]){iC.isEmpty(t[0])&&(t[0]=0),iC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new rd,n))}a(oC,"searchTransactionsByTimestamp");function X2(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,cC(e,i))}return Object.fromEntries(r)}a(X2,"searchTransactionsByUsername");function Z2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=z2.equals(e,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=cC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);aC(u,"records",r,l,o),aC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Z2,"searchTransactionsByHashValues");function aC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new rd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new rd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(aC,"loopRecords");function cC(e,t){let r=[];try{let s=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new rd,i);r.push(o)}}catch(i){J2.warn(i)}return r}catch(s){throw s}}a(cC,"batchSearchTransactions")});var dC=g((sde,_C)=>{"use strict";var{getSchemaPath:tde}=Je(),rde=We(),{database:eJ}=(Ae(),ne(Ge));_C.exports={writeTransaction:tJ};async function tJ(e,t,r){return eJ({database:e,table:t}).transaction(r)}a(tJ,"writeTransaction")});var mC=g((ide,hC)=>{"use strict";var{getSchemaPath:fC}=Je(),EC=We();hC.exports={flush:rJ,resetReadTxn:sJ};async function rJ(e,t){return(await EC.openEnvironment(fC(e,t),t.toString())).flushed}a(rJ,"flush");async function sJ(e,t){try{(await EC.openEnvironment(fC(e,t),t.toString())).resetReadTxn()}catch{}}a(sJ,"resetReadTxn")});var gC=g((ade,TC)=>{"use strict";var{Readable:nJ}=require("stream"),{getDatabases:iJ}=(Ae(),ne(Ge)),{readSync:oJ,openSync:aJ,createReadStream:pC}=require("fs"),{open:cJ}=require("lmdb"),SC=u_(),uJ=__(),{AUDIT_STORE_OPTIONS:lJ}=(Hi(),ne(RC)),{INTERNAL_DBIS_NAME:_J,AUDIT_STORE_NAME:dJ}=dt();TC.exports=EJ;var Jp=32768,fJ=100;async function EJ(e){let t=e.database||e.schema||"data",r=iJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=cJ({noSync:!0,maxDbs:uJ.MAX_DBS}),f,E=d.openDB(_J,new SC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%fJ===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(n.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new SC(!H,H);await S(b,P)}e.include_audit&&await S(dJ,Object.assign({},lJ)),await f;let T=pC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=aJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Jp);oJ(c,_,0,Jp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=pC(null,{fd:c,start:Jp}),f=new nJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(EJ,"getBackup")});var bC=g((ude,OC)=>{"use strict";var hJ=$(),{handleHDBError:mJ}=se(),pJ=Hb(),SJ=g_(),TJ=Tp(),gJ=Pw(),RJ=Fc(),AJ=yp(),OJ=oI(),bJ=hI(),NJ=Yc(),yJ=OI(),wJ=PI(),IJ=FI(),CJ=VI(),DJ=WI(),LJ=eC(),MJ=vp(),UJ=nC(),PJ=lC(),vJ=dC(),AC=mC(),BJ=gC(),jp=class extends pJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return yJ(t)}async getDataByHash(t){return await AJ(t)}async searchByHash(t){return await OJ(t)}async getDataByValue(t,r){return await bJ(t,r)}async searchByValue(t){return await NJ(t)}async createSchema(t){return await gJ(t)}async dropSchema(t){return await wJ(t)}async createTable(t,r){return await IJ(t,r)}async dropTable(t){return await MJ(t)}async createAttribute(t){return await SJ(t)}async createRecords(t){return await TJ(t)}async updateRecords(t){return await CJ(t)}async upsertRecords(t){try{return await DJ(t)}catch(r){throw mJ(r,null,null,hJ.ERR,r)}}async deleteRecords(t){return await RJ(t)}async dropAttribute(t){return await UJ(t)}async deleteAuditLogsBefore(t){return await LJ(t)}async readAuditLog(t){return await PJ(t)}writeTransaction(t,r,s){return vJ.writeTransaction(t,r,s)}flush(t,r){return AC.flush(t,r)}resetReadTxn(t,r){return AC.resetReadTxn(t,r)}getBackup(t){return BJ(t)}};OC.exports=jp});function FJ(){GJ=setInterval(function(){for(let e of Xp)if(e.stale){let t=e[Oe]?.url;wC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},qJ).unref()}var Zp,yC,wC,HJ,Xp,xJ,zc,NC,Zi,sd,qJ,GJ,eS=Re(()=>{Zp=x(wr()),yC=x(se()),wC=x($());Os();Go();HJ=100,Xp=new Set,xJ=25e3,Zi=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,a_(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Xp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),a_(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Xp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-NC>xJ)throw new yC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Zp.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}s||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<HJ>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return zc||(zc=n,NC=performance.now(),zc.then(()=>{zc=null})),n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},sd=class extends Zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Zp.getNextMonotonicTime)())}getReadTxn(){}},qJ=3e4;a(FJ,"startMonitoringTxns");FJ()});function Xe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new Zi;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var IC,eo=Re(()=>{IC=require("../index");Os();eS();a(Xe,"transaction");(0,IC._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var HC={};Ye(HC,{ResourceBridge:()=>sS});function nS({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 DC(e,t){let r=tn(e),s=nS(e,r);if(!r)throw new Ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Xe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&id(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function tn(e){let t=e.database||e.schema||VJ,r=Ls()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,kJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function LC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*MC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var UC,nd,Ds,PC,vC,Ms,tS,rS,BC,kJ,VJ,$J,YJ,CC,sS,xC=Re(()=>{"use strict";UC=x(bC()),nd=x(ta()),Ds=x(se());Ae();PC=x(Dc()),vC=x(Mc()),Ms=x(M()),tS=x(Rn()),rS=x(Cs()),BC=x(Q());eo();od();({HDB_ERROR_MSGS:kJ}=Ds.hdb_errors),VJ="data",$J=1e4,YJ=10,sS=class extends UC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),CC=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,nd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ds.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:nS(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await iS(t.schema),tS.signalSchemaChange(new rS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,CC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,PC.default)(t);(0,vC.default)(t,s,r.primaryKey);let n,i=Ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=id(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ls()[t.schema][t.table],s={user:t.hdb_user};return Xe(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return LC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,BC.async_set_timeout)(YJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%$J===0&&await _();return u.length>0&&await _(),n?LC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,nd.default)(t,"hashes");if(r)throw r;return DC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of DC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[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 s=(0,nd.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ds.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===Ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:nS(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of MC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return MC(r,t.search_values?.[0],t.search_values?.[1])}}};a(nS,"getSelect");a(DC,"getRecords");a(tn,"getTable");a(LC,"createDeleteResponse");a(MC,"groupRecordsInHistory")});var ys=g((Nde,qC)=>{"use strict";var{ResourceBridge:KJ}=(xC(),ne(HC)),WJ=ee();WJ.initSync();var ad;function QJ(){return ad||(ad=new KJ,ad)}a(QJ,"getBridge");qC.exports=QJ()});var VC=g((wde,kC)=>{"use strict";var GC=require("lodash"),jc=require("mathjs"),zJ=require("jsonata"),FC=Q();kC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GC.uniqWith(e,GC.isEqual):e,searchJSON:JJ,mad:Xc.bind(null,jc.mad),mean:Xc.bind(null,jc.mean),mode:Xc.bind(null,jc.mode),prod:Xc.bind(null,jc.prod),median:Xc.bind(null,jc.median)};function Xc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Xc,"aggregateFunction");function JJ(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(FC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FC.isEmpty(this.__ala__.res[r])){let s=zJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(JJ,"searchJSON")});var YC=g((Cde,$C)=>{"use strict";var Et=require("moment"),oS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Et.suppressDeprecationWarnings=!0;$C.exports={current_date:()=>Et().utc().format("YYYY-MM-DD"),current_time:()=>Et().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Et(e).utc().format("YYYY");case"month":return Et(e).utc().format("MM");case"day":return Et(e).utc().format("DD");case"hour":return Et(e).utc().format("HH");case"minute":return Et(e).utc().format("mm");case"second":return Et(e).utc().format("ss");case"millisecond":return Et(e).utc().format("SSS");default:break}},date:e=>Et(e).utc().format(oS),date_format:(e,t)=>Et(e).utc().format(t),date_add:(e,t,r)=>Et(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Et(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Et(e).utc(),n=Et(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Et().utc().valueOf(),get_server_time:()=>Et().format(oS),offset_utc:(e,t)=>Et(e).utc().utcOffset(t).format(oS)}});var zC=g((Dde,QC)=>{"use strict";var jJ=require("@turf/area"),XJ=require("@turf/length"),ZJ=require("@turf/circle"),e4=require("@turf/difference"),t4=require("@turf/distance"),r4=require("@turf/boolean-contains"),s4=require("@turf/boolean-equal"),n4=require("@turf/boolean-disjoint"),i4=require("@turf/helpers"),KC=M(),me=Q(),bn=$();QC.exports={geoArea:o4,geoLength:a4,geoCircle:c4,geoDifference:u4,geoDistance:WC,geoNear:l4,geoContains:_4,geoEqual:d4,geoCrosses:f4,geoConvert:E4};function o4(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return jJ.default(e)}catch(t){return bn.trace(t,e),NaN}}a(o4,"geoArea");function a4(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return XJ.default(e,{units:t||"kilometers"})}catch(r){return bn.trace(r,e),NaN}}a(a4,"geoLength");function c4(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return ZJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(c4,"geoCircle");function u4(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return e4(e,t)}catch(r){return bn.trace(r,e,t),NaN}}a(u4,"geoDifference");function WC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return t4.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(WC,"geoDistance");function l4(e,t,r,s){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return WC(e,t,s)<=r}catch(n){return bn.trace(n,e,t),!1}}a(l4,"geoNear");function _4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return r4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(_4,"geoContains");function d4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return s4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(d4,"geoEqual");function f4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!n4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(f4,"geoCrosses");function E4(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(KC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),i4[t](e,r)}a(E4,"geoConvert")});var cd=g((Mde,JC)=>{var to=VC(),xr=YC(),rn=zC();JC.exports=e=>{e.aggr.mad=e.aggr.MAD=to.mad,e.aggr.mean=e.aggr.MEAN=to.mean,e.aggr.mode=e.aggr.MODE=to.mode,e.aggr.prod=e.aggr.PROD=to.prod,e.aggr.median=e.aggr.MEDIAN=to.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=to.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=to.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var eD=g((Ude,ZC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var h4=cd(),jC=require("clone"),ud=require("recursive-iterator"),le=$(),Ie=Q(),ia=ys(),m4=M(),{hdb_errors:p4}=se(),{getDatabases:XC}=(Ae(),ne(Ge)),S4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";h4(lr);var aS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw le.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(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return le.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(s),new Error(Us)}}_getColumns(){let t=new ud(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(jC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=XC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ud(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ud(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(m4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.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(Ie.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"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(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,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Zc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(jC(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.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(S4)>-1&&this.tables.forEach(n=>{let i={columnid:XC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Zc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ia.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ia.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ia.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ia.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Us)}}}_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 lr.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.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 n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new ud(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Zc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Us)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ia.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.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 s;try{let n=this._buildSQL();le.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),le.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return le.error(p4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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 u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ia.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ZC.exports=aS});var Dr=g((vde,tD)=>{"use strict";var T4=vb();tD.exports={searchByConditions:R4,searchByHash:A4,searchByValue:O4,search:b4};var cS=ys(),{transformReq:uS}=Q(),g4=eD();async function R4(e){return uS(e),cS.searchByConditions(e)}a(R4,"searchByConditions");async function A4(e){uS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of cS.searchByHash(e))r&&t.push(r);return t}a(A4,"searchByHash");async function O4(e){uS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of cS.searchByValue(e))t.push(r);return t}a(O4,"searchByValue");function b4(e,t){try{let r=new T4(e);r.validate(),new g4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(b4,"search")});var ld=g((Hde,rD)=>{"use strict";var N4=ys();rD.exports={writeTransaction:y4};function y4(e,t,r){return N4.writeTransaction(e,t,r)}a(y4,"writeTransaction")});var oD=g((Gde,iD)=>{"use strict";var w4=Dr(),I4=gn(),sD=$(),C4=Lr(),qde=ld(),D4=require("clone"),_S=require("alasql"),L4=cd(),nD=require("util"),M4=nD.promisify(I4.getTableSchema),U4=nD.promisify(w4.search),P4=M(),lS=Q();L4(_S);iD.exports={update:B4};var v4="There was a problem performing this update. Please check the logs and try again.";async function B4({statement:e,hdb_user:t}){let r=await M4(e.table.databaseid,e.table.tableid),s=H4(e.columns);lS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=D4(n),c=lS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=_S.parse(u).statements[0],l=await U4(_),d=x4(s,l);return q4(o,d,t)}a(B4,"update");function H4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=_S.compile(`SELECT ${r.expression.toString()} AS [${P4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sD.error(t),new Error(v4)}}a(H4,"createUpdateRecord");function x4(e,t){return lS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(x4,"buildUpdateRecords");async function q4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await C4.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sD.error(`Error delete new_attributes from update response: ${i}`)}return n}a(q4,"updateRecords")});var cD=g(($de,aD)=>{var G4=require("alasql"),F4=Dr(),k4=$(),V4=ys(),fS=require("util"),dS=Q(),$4=M(),Y4=gn(),kde=ld(),Vde=Lr(),K4="record",W4="successfully deleted",Q4=fS.callbackify(X4),z4=fS.promisify(F4.search),J4=fS.promisify(Y4.getTableSchema);aD.exports={convertDelete:Q4};function j4(e){return`${e.deleted_hashes.length} ${K4}${e.deleted_hashes.length===1?"":"s"} ${W4}`}a(j4,"generateReturnMessage");async function X4({statement:e,hdb_user:t}){let r=await J4(e.table.databaseid,e.table.tableid);dS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=dS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=G4.parse(o).statements[0],u={operation:$4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await z4(c);let _=await V4.deleteRecords(u);return dS.isEmptyOrZeroLength(_.message)&&(_.message=j4(_)),delete _.txn_time,_}catch(_){throw k4.error(_),_.hdb_code?_.message:_}}a(X4,"convertDelete")});var fD=g((Kde,dD)=>{"use strict";var Z4=Zn(),{hdb_errors:uD}=se(),{getDatabases:lD}=(Ae(),ne(Ge));dD.exports={checkSchemaExists:_D,checkSchemaTableExists:e3,schema_describe:Z4};async function _D(e){if(!lD()[e])return uD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_D,"checkSchemaExists");async function e3(e,t){let r=await _D(e);if(r)return r;if(!lD()[e][t])return uD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(e3,"checkSchemaTableExists")});var eu=g((Qde,t3)=>{t3.exports={name:"harperdb",version:"4.3.0-beta.9",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.5",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var iu={};Ye(iu,{addAnalyticsListener:()=>nu,recordAction:()=>qr,recordActionBinary:()=>ns,setAnalyticsEnabled:()=>r3});function r3(e){AD=e}function qr(e,t,r,s,n){if(!AD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=fd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},fd.set(i,o)}_d||s3()}function ns(e,t,r,s,n){qr(!!e,t,r,s,n)}function nu(e){ND.push(e)}function s3(){_d=performance.now(),setTimeout(async()=>{let e=performance.now()-_d;_d=0;let t=[],r={time:Date.now(),period:e,threadId:ro.threadId,metrics:t};for(let[n,i]of fd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of yD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,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 wD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:ro.threadId,byThread:!0,...s});for(let n of ND)n(t);fd=new Map,ro.parentPort?ro.parentPort.postMessage({type:bD,report:r}):DD({report:r})},OD).unref()}async function n3(e,t=6e4){let r=mS(),s=ID(),n=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),s.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:j,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await wD()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let j of k){let Te=j[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of yD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let ql=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-ql.value)*(L-Ct)/P.count)}let[k,B,J,z,j,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:j,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,dd.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||s.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,dd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-ED,active:h-hD,taskQueueLatency:await n,time:f,...process.memoryUsage()};s.primaryStore.put(p,S,{append:!0}).then(T=>{T||s.primaryStore.put(p,S)})}ED=E,hD=h}async function mD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function mS(){return pD||(pD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ID(){return SD||(SD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function a3(){CD=!0;let e=(0,su.get)(hS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await n3(OD,e),await mD(mS(),i3),await mD(ID(),o3)},Math.min(e/2,2147483647)).unref()}function DD(e,t){let r=e.report;r.threadId=t?.threadId||ro.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(TD+=s.mean*s.count);r.totalBytesProcessed=TD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(gD.get(t))}),gD.set(t,t.performance.eventLoopUtilization())),r.id=(0,dd.getNextMonotonicTime)(),mS().primaryStore.put(r.id,r),CD||a3(),c3&&(LD=l3(r))}async function l3(e){if(await LD,!ai){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{ai=await(0,ES.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{ai=await(0,ES.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await ai.stat()).size;if(t>u3){let r=Buffer.alloc(t);await ai.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ai.write(r,{position:0}),await ai.truncate(r.length),t=r.length}await ai.write(JSON.stringify(e)+`
|
|
8
|
+
`,t)}var ro,RD,tu,ru,ES,dd,su,hS,fd,AD,_d,OD,bD,ND,yD,ED,hD,wD,i3,o3,pD,SD,CD,TD,gD,c3,LD,ai,u3,Nn=Re(()=>{ro=require("worker_threads"),RD=x(Ke());Ae();tu=x($()),ru=require("path"),ES=require("fs/promises"),dd=x(wr()),su=x(ee()),hS=x(M());nr();(0,su.initSync)();fd=new Map,AD=(0,su.get)(hS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(r3,"setAnalyticsEnabled");a(qr,"recordAction");tt.recordAnalytics=qr;a(ns,"recordActionBinary");_d=0,OD=1e3,bD="analytics-report",ND=[];a(nu,"addAnalyticsListener");yD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(s3,"sendAnalytics");a(n3,"aggregation");ED=0,hD=0,wD=a(()=>new Promise(setImmediate),"rest");a(mD,"cleanup");i3=36e5,o3=31536e6;a(mS,"getRawAnalyticsTable");a(ID,"getAnalyticsTable");(0,RD.setChildListenerByType)(bD,DD);a(a3,"startScheduledTasks");TD=0,gD=new Map,c3=!1;a(DD,"recordAnalytics");u3=1e6;a(l3,"logAnalytics")});var AS=g((ofe,FD)=>{"use strict";var{decode:_3}=require("msgpackr"),{isMainThread:nfe,parentPort:d3,threadId:ife}=require("worker_threads"),ou=st(),oa=Fe(),TS=M(),zt=$(),SS=ee(),UD=M(),{onMessageByType:f3}=Ke(),PD=Tn(),{recordAction:E3,recordActionBinary:h3}=(Nn(),ne(iu)),{publishToStream:m3}=ou,{ConsumerEvents:p3}=require("nats"),S3=Dr(),{promisify:T3}=require("util"),vD=T3(setTimeout),md=1e4,pd,hd,g3,R3,BD,au=new Map,aa=new Map;FD.exports={initialize:gS,ingestConsumer:RS,setSubscription:A3,setIgnoreOrigin:N3,getDatabaseSubscriptions:b3,updateConsumer:HD};async function gS(){f3(TS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async s=>{await HD(s)}),BD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();pd=e,hd=e.info.server_name,g3=t,R3=r}a(gS,"initialize");async function HD(e){if(e.status==="start"){let{js:t,jsm:r}=await xD(e.node_domain_name);RS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),aa.get(e.node_domain_name)==="failed"&&aa.set(e.node_domain_name,"close")}}a(HD,"updateConsumer");var Sd=new Map;function A3(e,t,r){let s=Sd.get(e);s||Sd.set(e,s=new Map),s.set(t,r),BD||gS().then(O3)}a(A3,"setSubscription");async function O3(){let e=await S3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+oa.SERVER_SUFFIX.LEAF,{js:s,jsm:n}=await xD(r);if(n){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=PD.createNatsTableStreamName(o,c);RS(u,s,n,r)}}}}a(O3,"accessConsumers");async function xD(e){let t,r,s=1;for(;!r;)try{t=await pd.jetstream({domain:e,timeout:6e4}),r=await pd.jetstreamManager({domain:e,timeout:6e4})}catch(n){if(aa.get(e)==="close")break;aa.set(e,"failed"),s%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",n.message);let i=s++*100<md?s++*100:md;await vD(i)}return{js:t,jsm:r}}a(xD,"connectToRemoteJS");function b3(){return Sd}a(b3,"getDatabaseSubscriptions");var qD;function N3(e){qD=e}a(N3,"setIgnoreOrigin");var GD=100,MD=new Array(GD),Ed=0;async function RS(e,t,r,s){let{connection:n}=await ou.getNATSReferences();pd=n,hd=n.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,hd),zt.notify("Initializing ingest consumer for node:",s,"stream:",e)}catch(_){if(aa.get(s)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",s,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",s,"stream:",e),i=await ou.createConsumer(r,e,hd,new Date(Date.now()).toISOString()));let l=o++*100<md?o++*100:md;await vD(l)}let c=!1,u;for(d3?.on("message",async _=>{let{type:l}=_;l===UD.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(au.get(e+s)==="close"||aa.get(s)==="close"){au.delete(e+s),c=!0;continue}u=await i.consume({max_messages:SS.get(TS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+s,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===p3.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${s} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${s} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await MD[Ed],MD[Ed]=y3(l).catch(d=>{zt.error(d)}),++Ed>=GD&&(Ed=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",s,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await gS()}}a(RS,"ingestConsumer");async function y3(e){let t=_3(e.data);E3(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,s=!1,n=SS.get(TS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(oa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(oa.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(oa.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!qD),h3(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(oa.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(oa.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=Sd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:pS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:pS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:pS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}SS.get(UD.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&m3(e.subject.split(".").slice(0,-1).join("."),PD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a(y3,"messageProcessor");function pS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(pS,"convertOperation")});var st=g((ffe,nL)=>{"use strict";var Mt=ee();Mt.initSync();var w3=require("fs-extra"),I3=require("semver"),lu=require("path"),{monotonicFactory:C3}=require("ulidx"),VD=C3(),D3=require("util"),$D=require("child_process"),L3=D3.promisify($D.exec),M3=$D.spawn,Ft=Fe(),Ce=M(),Td=Q(),Ps=$(),gd=Tn(),U3=ld(),cu=Pr(),{broadcast:P3,onMessageByType:v3,getWorkerIndex:B3}=Ke(),{isMainThread:YD}=require("worker_threads"),{Encoder:H3,decode:yS}=require("msgpackr"),KD=new H3,{isEmpty:oo}=Td,WD=ss(),cfe=48*36e11;YD&&v3(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,io=void 0});var{connect:x3,StorageType:q3,RetentionPolicy:G3,AckPolicy:wS,DeliverPolicy:IS,DiscardPolicy:F3,NatsConnection:ufe,JetStreamManager:lfe,JetStreamClient:_fe,StringCodec:dfe,JSONCodec:k3,createInbox:CS,headers:V3,ErrorCode:kD}=require("nats"),{PACKAGE_ROOT:$3}=M(),Y3=eu(),{recordAction:K3}=(Nn(),ne(iu)),QD=k3(),W3="clustering",Q3=Y3.engines[Ft.NATS_SERVER_NAME],z3=lu.join($3,"dependencies"),NS=lu.join(z3,`${process.platform}-${process.arch}`,Ft.NATS_BINARY_NAME),OS,bS,uu,so,no;nL.exports={runCommand:zD,checkNATSServerInstalled:J3,createConnection:DS,getConnection:Rd,getJetStreamManager:_u,getJetStream:jD,getNATSReferences:vs,getServerList:X3,createLocalStream:LS,listStreams:XD,deleteLocalStream:Z3,getServerConfig:du,listRemoteStreams:ej,viewStream:tj,viewStreamIterator:rj,publishToStream:sj,request:oj,reloadNATS:MS,reloadNATSHub:aj,reloadNATSLeaf:cj,extractServerName:ij,requestErrorHandler:uj,createLocalTableStream:rL,createTableStreams:dj,purgeTableStream:sL,purgeSchemaTableStreams:fj,getStreamInfo:Ej,updateLocalStreams:mj,closeConnection:j3,getJsmServerName:Ad,addNatsMsgHeader:ZD,clearClientCache:JD,updateRemoteConsumer:lj,createConsumer:eL,updateConsumerIterator:_j};async function zD(e,t=void 0){let{stdout:r,stderr:s}=await L3(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
10
|
`,"")}a(zD,"runCommand");async function J3(){try{await w3.access(NS)}catch{return!1}let e=await zD(`${NS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return I3.eq(t,Q3)}a(J3,"checkNATSServerInstalled");async function DS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await WD.getClusterUser();if(oo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ps.trace("create nats connection called");let i=await x3({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ps.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ps.error("Error with Nats client connection, connection closed",o),JD()}),i}a(DS,"createConnection");function JD(){_r=void 0,so=void 0,no=void 0,io=void 0}a(JD,"clearClientCache");async function j3(){_r&&(await _r.drain(),_r=void 0,so=void 0,no=void 0,io=void 0)}a(j3,"closeConnection");var _r,io;async function Rd(){return io||(io=DS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_r=await io),_r||io}a(Rd,"getConnection");async function _u(){if(so)return so;oo(_r)&&await Rd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=await _r.jetstreamManager({domain:e,timeout:6e4}),so}a(_u,"getJetStreamManager");async function jD(){if(no)return no;oo(_r)&&await Rd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=_r.jetstream({domain:e,timeout:6e4}),no}a(jD,"getJetStream");async function vs(){let e=_r||await Rd(),t=so||await _u(),r=no||await jD();return{connection:e,jsm:t,js:r}}a(vs,"getNATSReferences");async function X3(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await WD.getClusterUser(),n=await DS(t,r,s),i=CS(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=QD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Td.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(X3,"getServerList");async function LS(e,t){let{jsm:r}=await vs(),s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:q3.File,retention:G3.Limits,subjects:t,discard:F3.Old,max_msgs:n,max_bytes:i,max_age:s})}a(LS,"createLocalStream");async function XD(){let{jsm:e}=await vs(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(XD,"listStreams");async function Z3(e){let{jsm:t}=await vs();await t.streams.delete(e)}a(Z3,"deleteLocalStream");async function ej(e){let{connection:t}=await vs(),r=[],s=CS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(QD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(ej,"listRemoteStreams");async function tj(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=VD(),o={durable_name:i,ack_policy:wS.Explicit};t&&(o.deliver_policy=IS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=yS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ft.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(tj,"viewStream");async function*rj(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=VD(),o={durable_name:i,ack_policy:wS.Explicit};t&&(o.deliver_policy=IS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=yS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Ft.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(rj,"viewStreamIterator");async function sj(e,t,r,s){Ps.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=ZD(s,r);let{js:n}=await vs(),i=await Ad(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:KD.encode(s);try{Ps.trace(`publishToStream publishing to subject: ${o}`),K3(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return tL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Ps.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await LS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(sj,"publishToStream");function ZD(e,t){t===void 0&&(t=V3());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ft.MSG_HEADERS.ORIGIN)&&r&&t.append(Ft.MSG_HEADERS.ORIGIN,r),t}a(ZD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),W3);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return oo(bS)&&(bS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.HUB,config_file:Ft.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,Ft.PID_FILES.HUB),hdb_nats_path:t}),bS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return oo(OS)&&(OS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,config_file:Ft.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,Ft.PID_FILES.LEAF),hdb_nats_path:t}),OS;Ps.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function eL(e,t,r,s){try{await e.consumers.add(t,{ack_policy:wS.Explicit,durable_name:r,deliver_policy:IS.StartTime,opt_start_time:s})}catch(n){if(n.message!=="consumer already exists")throw n}}a(eL,"createConsumer");async function nj(e,t,r){await e.consumers.delete(t,r)}a(nj,"removeConsumer");function ij(e){return e.split(".")[1]}a(ij,"extractServerName");async function oj(e,t,r=6e4,s=CS()){if(!Td.isObject(t))throw new Error("data param must be an object");let n=KD.encode(t),{connection:i}=await vs(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return yS(c.data)}a(oj,"request");function MS(e){return new Promise(async(t,r)=>{let s=M3(NS,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(MS,"reloadNATS");async function aj(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await MS(e)}a(aj,"reloadNATSHub");async function cj(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await MS(e)}a(cj,"reloadNATSLeaf");function uj(e,t,r){let s;switch(e.code){case kD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case kD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(uj,"requestErrorHandler");async function lj(e,t){let r=t+Ft.SERVER_SUFFIX.LEAF,{connection:s}=await vs(),{jsm:n}=await Sj(r),{schema:i,table:o}=e,c=gd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await tL(async()=>{if(e.subscribe===!0)await eL(n,c,s.info.server_name,u);else try{await nj(n,c,s.info.server_name)}catch(_){Ps.trace(_)}})}a(lj,"updateRemoteConsumer");async function _j(e,t,r,s){let n=gd.createNatsTableStreamName(e,t),i=r+Ft.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:s,stream_name:n,node_domain_name:i};if(!YD&&B3()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=AS();await c(o)}await P3(o),s==="stop"&&await Td.async_set_timeout(1e3)}a(_j,"updateConsumerIterator");function tL(e){return U3.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(tL,"exclusiveLock");async function rL(e,t){let r=gd.createNatsTableStreamName(e,t),s=await Ad(),n=hj(e,t,s);await LS(r,[n])}a(rL,"createLocalTableStream");async function dj(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await rL(s,n)}}a(dj,"createTableStreams");async function sL(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=gd.createNatsTableStreamName(e,t),{jsm:s}=await vs();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Ps.warn(r);else throw r}}a(sL,"purgeTableStream");async function fj(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await sL(e,t[r])}a(fj,"purgeSchemaTableStreams");async function Ej(e){return(await _u()).streams.info(e)}a(Ej,"getStreamInfo");function hj(e,t,r){return`${Ft.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(hj,"createSubjectName");async function Ad(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(Ad,"getJsmServerName");async function mj(){let e=await _u(),t=await Ad(),r=await XD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=pj(s),c=i.split(".");if(c[c.length-1]===t&&!o||n.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Ps.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l,await e.streams.update(n.name,n)}}a(mj,"updateLocalStreams");function pj(e){let{config:t}=e,r=!1,s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(pj,"updateStreamLimits");async function Sj(e){let t,r;try{t=await _r.jetstream({domain:e,timeout:6e4}),r=await _r.jetstreamManager({domain:e,timeout:6e4})}catch(s){throw Ps.error("Unable to connect to:",e),s}return{js:t,jsm:r}}a(Sj,"connectToRemoteJS")});var fu=g((mfe,cL)=>{"use strict";var ca=S_(),ua=fD(),Tj=$(),gj=require("uuid").v4,hfe=require("clone"),bd=Rn(),la=M(),Rj=require("util"),ci=ys(),{handleHDBError:dr,hdb_errors:Aj}=se(),{HDB_ERROR_MSGS:Od,HTTP_STATUS_CODES:fr}=Aj,{SchemaEventMsg:Nd}=Cs(),iL=st(),{getDatabases:Oj}=(Ae(),ne(Ge)),{transformReq:_a}=Q();cL.exports={createSchema:bj,createSchemaStructure:oL,createTable:Nj,createTableStructure:aL,createAttribute:Dj,dropSchema:yj,dropTable:wj,dropAttribute:Ij,getBackup:Lj};async function bj(e){let t=await oL(e);return bd.signalSchemaChange(new Nd(process.pid,e.operation,e.schema)),t}a(bj,"createSchema");async function oL(e){let t=ca.schema_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(_a(e),!await ua.checkSchemaExists(e.schema))throw dr(new Error,Od.SCHEMA_EXISTS_ERR(e.schema),fr.BAD_REQUEST,la.LOG_LEVELS.ERROR,Od.SCHEMA_EXISTS_ERR(e.schema),!0);return await ci.createSchema(e),`database '${e.schema}' successfully created`}a(oL,"createSchemaStructure");async function Nj(e){return _a(e),e.hash_attribute=e.primary_key??e.hash_attribute,await aL(e)}a(Nj,"createTable");async function aL(e){let t=ca.create_table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(ca.validateTableResidence(e.residence),!await ua.checkSchemaTableExists(e.schema,e.table))throw dr(new Error,Od.TABLE_EXISTS_ERR(e.schema,e.table),fr.BAD_REQUEST,la.LOG_LEVELS.ERROR,Od.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:gj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ci.createTable(s,e);else throw dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fr.BAD_REQUEST);else await ci.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(aL,"createTableStructure");async function yj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ca.schema_object(e),s=t??r;if(s)throw dr(s,s.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let n=await ua.checkSchemaExists(e.schema);if(n)throw dr(new Error,n,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,n,!0);let i=await ua.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ci.dropSchema(e),bd.signalSchemaChange(new Nd(process.pid,e.operation,e.schema)),await iL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(yj,"dropSchema");async function wj(e){let t=ca.table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let r=await ua.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,r,!0);return await ci.dropTable(e),await iL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(wj,"dropTable");async function Ij(e){let t=ca.attribute_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let r=await ua.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw dr(new Error,"You cannot drop a hash attribute",fr.BAD_REQUEST,void 0,void 0,!0);if(la.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fr.BAD_REQUEST,void 0,void 0,!0);try{return await ci.dropAttribute(e),Cj(e),bd.signalSchemaChange(new Nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Tj.error(`Got an error deleting attribute ${Rj.inspect(e)}.`),s}}a(Ij,"dropAttribute");function Cj(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(Cj,"dropAttributeFromGlobal");async function Dj(e){_a(e);let t=Oj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fr.BAD_REQUEST,void 0,void 0,!0);return await ci.createAttribute(e),bd.signalSchemaChange(new Nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Dj,"createAttribute");function Lj(e){return ci.getBackup(e)}a(Lj,"getBackup")});var lL=g((Sfe,uL)=>{"use strict";var{OPERATIONS_ENUM:Mj}=M(),US=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Mj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};uL.exports=US});var PS=g((Rfe,hL)=>{"use strict";var Uj=ys(),gfe=lL(),yd=Q(),wd=M(),Pj=ee(),{handleHDBError:_L,hdb_errors:vj}=se(),{HDB_ERROR_MSGS:dL,HTTP_STATUS_CODES:fL}=vj,Bj=Object.values(wd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),EL="To use this operation audit log must be enabled in harperdb-config.yaml";hL.exports=Hj;async function Hj(e){if(yd.isEmpty(e.schema))throw new Error(dL.SCHEMA_REQUIRED_ERR);if(yd.isEmpty(e.table))throw new Error(dL.TABLE_REQUIRED_ERR);if(!Pj.get(wd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw _L(new Error,EL,fL.BAD_REQUEST,wd.LOG_LEVELS.ERROR,EL,!0);let t=yd.checkSchemaTableExist(e.schema,e.table);if(t)throw _L(new Error,t,fL.NOT_FOUND,wd.LOG_LEVELS.ERROR,t,!0);if(!yd.isEmpty(e.search_type)&&Bj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Uj.readAuditLog(e)}a(Hj,"readAuditLog")});var pL=g((Ofe,mL)=>{"use strict";var{OPERATIONS_ENUM:xj}=M(),vS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=xj.GET_BACKUP,this.schema=t,this.table=r}};mL.exports=vS});var gL=g((wfe,TL)=>{"use strict";var qj=ys(),Nfe=pL(),BS=Q(),Gj=M(),yfe=ee(),{handleHDBError:Fj,hdb_errors:kj}=se(),{HDB_ERROR_MSGS:SL,HTTP_STATUS_CODES:Vj}=kj;TL.exports=$j;async function $j(e){if(BS.isEmpty(e.schema))throw new Error(SL.SCHEMA_REQUIRED_ERR);if(BS.isEmpty(e.table))throw new Error(SL.TABLE_REQUIRED_ERR);let t=BS.checkSchemaTableExist(e.schema,e.table);if(t)throw Fj(new Error,t,Vj.NOT_FOUND,Gj.LOG_LEVELS.ERROR,t,!0);return await qj.getBackup(read_audit_log_object)}a($j,"getBackup")});var yL=g((Cfe,NL)=>{var ui=require("validate.js"),AL=je(),da=M(),{handleHDBError:Yj,hdb_errors:Kj}=se(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:Wj}=Kj,HS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Qj={STRUCTURE_USER:"structure_user"},RL=Object.values(da.ROLE_TYPES_ENUM),zj="attribute_permissions",Jj="attribute_name",{PERMS_CRUD_ENUM:fa}=da,jj=[zj,...Object.values(fa)],OL=[fa.READ,fa.INSERT,fa.UPDATE],Xj=[Jj,...OL];function Zj(e){let t=HS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,bL(e,t)}a(Zj,"addRoleValidation");function eX(e){let t=HS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,bL(e,t)}a(eX,"alterRoleValidation");function tX(e){let t=HS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,AL.validateObject(e,t)}a(tX,"dropRoleValidation");var rX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function bL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)rX.includes(s[o])||n.push(s[o]);n.length>0&&ht(lt.INVALID_ROLE_JSON_KEYS(n),r);let i=AL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ht(o,r)}),e.permission){let o=sX(e);o&&ht(o,r),RL.forEach(c=>{e.permission[c]&&!ui.isBoolean(e.permission[c])&&ht(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(RL.indexOf(o)<0){if(o===Qj.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ht(lt.SCHEMA_NOT_FOUND(d),r)}continue}ht(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ht(lt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ht(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{jj.includes(l)||ht(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(fa).forEach(l=>{ui.isDefined(_[l])?ui.isBoolean(_[l])||ht(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ht(lt.TABLE_PERM_MISSING(l),r,o,u)}),ui.isDefined(_.attribute_permissions)){if(!ui.isArray(_.attribute_permissions)){ht(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ht(lt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!Xj.includes(p)&&p!==fa.DELETE&&ht(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ui.isDefined(E.attribute_name)){ht(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ht(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}OL.forEach(p=>{ui.isDefined(E[p])?ui.isBoolean(E[p])||ht(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ht(lt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;ht(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return nX(r)}a(bL,"customValidate");NL.exports={addRoleValidation:Zj,alterRoleValidation:eX,dropRoleValidation:tX};function sX(e){let{operation:t,permission:r}=e;if(t===da.OPERATIONS_ENUM.ADD_ROLE||t===da.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?da.ROLE_TYPES_ENUM.SUPER_USER:da.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(sX,"validateNoSUPerms");function nX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:lt.ROLE_PERMS_ERROR,...e};return Yj(new Error,s,Wj.BAD_REQUEST)}else return null}a(nX,"generateRolePermResponse");function ht(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ht,"addPermError")});var VS=g((Lfe,DL)=>{"use strict";var wL=Lr(),IL=Dr(),iX=ri(),qS=yL(),GS=Rn(),oX=require("uuid").v4,aX=require("util"),Id=M(),cX=Q(),FS=IL.searchByValue,uX=IL.searchByHash,lX=aX.promisify(iX.delete),_X=Zs(),dX=ra(),{hdb_errors:fX,handleHDBError:ao}=se(),{HDB_ERROR_MSGS:CL,HTTP_STATUS_CODES:Eu}=fX,{UserEventMsg:kS}=Cs();DL.exports={addRole:EX,alterRole:hX,dropRole:mX,listRoles:pX};function xS(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(xS,"scrubRoleDetails");async function EX(e){let t=qS.addRoleValidation(e);if(t)throw t;e=xS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await FS(r)||[])}catch(i){throw ao(i)}if(s&&s.length>0)throw ao(new Error,CL.ROLE_ALREADY_EXISTS(e.role),Eu.CONFLICT,void 0,void 0,!0);e.id||(e.id=oX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await wL.insert(n),GS.signalUserChange(new kS(process.pid)),e=xS(e),e}a(EX,"addRole");async function hX(e){let t=qS.alterRoleValidation(e);if(t)throw t;e=xS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await wL.update(r)}catch(n){throw ao(n)}if(s&&s?.message==="updated 0 of 1 records")throw ao(new Error,"Invalid role id",Eu.BAD_REQUEST,void 0,void 0,!0);return await GS.signalUserChange(new kS(process.pid)),e}a(hX,"alterRole");async function mX(e){let t=qS.dropRoleValidation(e);if(t)throw ao(new Error,t,Eu.BAD_REQUEST,void 0,void 0,!0);let r=new dX(Id.SYSTEM_SCHEMA_NAME,Id.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await uX(r));if(s.length===0)throw ao(new Error,CL.ROLE_NOT_FOUND,Eu.NOT_FOUND,void 0,void 0,!0);let n=new _X(Id.SYSTEM_SCHEMA_NAME,Id.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await FS(n)),o=!1;if(cX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ao(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,Eu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await lX(c),GS.signalUserChange(new kS(process.pid)),`${s[0].role} successfully deleted`}a(mX,"dropRole");async function pX(){return FS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(pX,"listRoles")});var PL=g((Ufe,UL)=>{"use strict";var SX=ee(),li=require("joi"),TX=je(),LL=require("moment"),gX=require("fs-extra"),$S=require("path"),RX=require("lodash"),hu=M(),{LOG_LEVELS:co}=M(),AX="YYYY-MM-DD hh:mm:ss",OX=$S.resolve(__dirname,"../logs");UL.exports=function(e){return TX.validateBySchema(e,bX)};var bX=li.object({from:li.custom(ML),until:li.custom(ML),level:li.valid(co.NOTIFY,co.FATAL,co.ERROR,co.WARN,co.INFO,co.DEBUG,co.TRACE),order:li.valid("asc","desc"),limit:li.number().min(1),start:li.number().min(0),log_name:li.custom(NX)});function ML(e,t){if(LL(e,LL.ISO_8601).format(AX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(ML,"validateDatetime");function NX(e,t){if(RX.invert(hu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=SX.get(hu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?hu.LOG_NAMES.HDB:e,i=n===hu.LOG_NAMES.INSTALL?$S.join(OX,hu.LOG_NAMES.INSTALL):$S.join(s,n);return gX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(NX,"validateReadLogPath")});var KS=g((vfe,BL)=>{"use strict";var Cd=M(),yX=$(),wX=ee(),IX=PL(),YS=require("path"),vL=require("fs-extra"),{once:CX}=require("events"),{handleHDBError:DX,hdb_errors:LX}=se(),{PACKAGE_ROOT:MX}=M(),UX=YS.join(MX,"logs"),PX=1e3,vX=200;BL.exports=BX;async function BX(e){let t=IX(e);if(t)throw DX(t,t.message,LX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=wX.get(Cd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Cd.LOG_NAMES.HDB:e.log_name,n=s===Cd.LOG_NAMES.INSTALL?YS.join(UX,Cd.LOG_NAMES.INSTALL):YS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?PX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(vL.statSync(n).size-(h+5)*vX,0));let S=vL.createReadStream(n,{start:p});S.on("error",P=>{yX.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[z,j,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:j,thread:de,level:Le,tags:ce,message:""},B=J.index+z.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(_i(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(_i(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(_i(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(_i(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await CX(S,"close"),b}a(BX,"readLog");function _i(e,t,r){t==="desc"?HX(e,r):t==="asc"?xX(e,r):r.push(e)}a(_i,"pushLineToResult");function HX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(HX,"insertDescending");function xX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(xX,"insertAscending")});var Dd=g((Gfe,GL)=>{"use strict";var WS=require("joi"),{string:mu,boolean:HL,date:qX}=WS.types(),GX=je(),{validateSchemaExists:Hfe,validateTableExists:xfe,validateSchemaName:qfe}=Qs(),FX=M(),kX=Fe(),xL=ee();xL.initSync();var VX=mu.invalid(xL.get(FX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(kX.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).required(),qL={operation:mu.valid("add_node","update_node","set_node_replication"),node_name:VX,subscriptions:WS.array().items({table:mu.optional(),schema:mu.optional(),database:mu.optional(),subscribe:HL.required(),publish:HL.required().custom(YX),start_time:qX.iso()}).min(1).required()};function $X(e){return GX.validateBySchema(e,WS.object(qL))}a($X,"addUpdateNodeValidator");function YX(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(YX,"checkForFalsy");GL.exports={addUpdateNodeValidator:$X,validation_schema:qL}});var kL=g((kfe,FL)=>{var KX=je(),WX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};FL.exports=function(e){return KX.validateObject(e,WX)}});var Ld=g((Vfe,VL)=>{"use strict";var QX=M().OPERATIONS_ENUM,QS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=QX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};VL.exports=QS});var YL=g((Yfe,$L)=>{"use strict";var zX={OPERATION:"operation",REFRESH:"refresh"},zS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},JS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};$L.exports={JWTTokens:zS,TOKEN_TYPE_ENUM:zX,JWTRSAKeys:JS}});var Tu=g((Wfe,zL)=>{"use strict";var Su=require("jsonwebtoken"),jS=require("fs-extra"),XS=Q(),is=M(),{handleHDBError:Er,hdb_errors:JX}=se(),{HTTP_STATUS_CODES:hr,AUTHENTICATION_ERROR_MSGS:mr}=JX,pu=$(),KL=P_(),tT=ss(),jX=Lr().update,XX=Ld(),ZX=Rn(),{UserEventMsg:eZ}=Cs(),di=ee();di.initSync();var ZS=require("path"),{JWTTokens:tZ,JWTRSAKeys:rZ,TOKEN_TYPE_ENUM:Md}=YL(),sZ=di.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?di.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",nZ=di.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?di.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ud="RS256",eT;zL.exports={createTokens:iZ,validateOperationToken:aZ,refreshOperationToken:oZ,validateRefreshToken:QL};async function iZ(e){if(XS.isEmpty(e)||typeof e!="object")throw Er(new Error,mr.INVALID_AUTH_OBJECT,hr.BAD_REQUEST,void 0,void 0,!0);if(XS.isEmpty(e.username))throw Er(new Error,mr.USERNAME_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);if(XS.isEmpty(e.password))throw Er(new Error,mr.PASSWORD_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await tT.findAndValidateUser(e.username,e.password),!t)throw Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw pu.error(f),Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Pd(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await WL(i,r.private_key,r.passphrase),c=await Su.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:nZ,algorithm:Ud,subject:Md.REFRESH}),u=KL.hash(c),_=new XX(is.SYSTEM_SCHEMA_NAME,is.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await jX(_)}catch(f){pu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Er(new Error,mr.REFRESH_TOKEN_SAVE_FAILED,hr.INTERNAL_SERVER_ERROR);return ZX.signalUserChange(new eZ(process.pid)),new tZ(o,c)}a(iZ,"createTokens");async function WL(e,t,r){return await Su.sign(e,{key:t,passphrase:r},{expiresIn:sZ,algorithm:Ud,subject:Md.OPERATION})}a(WL,"signOperationToken");async function Pd(){if(eT===void 0)try{let e=ZS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PASSPHRASE_NAME),t=ZS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=ZS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await jS.readFile(e)).toString(),n=(await jS.readFile(t)).toString(),i=(await jS.readFile(r)).toString();eT=new rZ(i,n,s)}catch(e){throw pu.error(e),Er(new Error,mr.NO_ENCRYPTION_KEYS,hr.INTERNAL_SERVER_ERROR)}return eT}a(Pd,"getJWTRSAKeys");async function oZ(e){if(!e)throw Er(new Error,mr.INVALID_BODY,hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Er(new Error,mr.REFRESH_TOKEN_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);await QL(e.refresh_token);let t=await Pd(),r=await Su.decode(e.refresh_token);return{operation_token:await WL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(oZ,"refreshOperationToken");async function aZ(e){try{let t=await Pd(),r=await Su.verify(e,t.public_key,{algorithms:Ud,subject:Md.OPERATION});return await tT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw pu.warn(t),t.name&&t.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}}a(aZ,"validateOperationToken");async function QL(e){let t;try{let r=await Pd(),s=await Su.verify(e,r.public_key,{algorithms:Ud,subject:Md.REFRESH});t=await tT.findAndValidateUser(s.username,void 0,!1)}catch(r){throw pu.warn(r),r.name&&r.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}if(!KL.validate(t.refresh_token,e))throw Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED);return t}a(QL,"validateRefreshToken")});var rT=g((Jfe,XL)=>{"use strict";var cZ=kL(),Ea=require("passport"),uZ=require("passport-local").Strategy,lZ=require("passport-http").BasicStrategy,_Z=require("util"),dZ=ss(),jL=_Z.callbackify(dZ.findAndValidateUser),zfe=yr(),fZ=M(),JL=Tu();Ea.use(new uZ(function(e,t,r){jL(e,t,r)}));Ea.use(new lZ(function(e,t,r){jL(e,t,r)}));Ea.serializeUser(function(e,t){t(null,e)});Ea.deserializeUser(function(e,t){t(null,e)});function EZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Ea.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===fZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?JL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):JL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ea.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(EZ,"authorize");function hZ(e,t){let r=cZ(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(hZ,"checkPermissions");XL.exports={authorize:EZ,checkPermissions:hZ}});var fi=g((Xfe,ZL)=>{"use strict";var sT=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},nT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};ZL.exports={Node:sT,NodeSubscription:nT}});var tM=g((eEe,eM)=>{"use strict";var mZ=M().OPERATIONS_ENUM,iT=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=mZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};eM.exports=iT});var gu=g((rEe,rM)=>{"use strict";var oT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},aT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};rM.exports={RemotePayloadObject:oT,RemotePayloadSubscription:aT}});var nM=g((nEe,sM)=>{"use strict";var cT=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};sM.exports=cT});var aM=g((uEe,oM)=>{"use strict";var pZ=nM(),oEe=dt(),iM=We(),SZ=$(),{getSchemaPath:aEe,getTransactionAuditStorePath:cEe}=Je(),{getDatabases:TZ}=(Ae(),ne(Ge));oM.exports=gZ;async function gZ(e){let t=new pZ;try{let r=TZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await iM.environmentDataSize(schema_path,e.name),o=await iM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){SZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(gZ,"lmdbGetTableSize")});var uM=g((_Ee,cM)=>{"use strict";var uT=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};cM.exports=uT});var ha=g((mEe,EM)=>{"use strict";var RZ=require("fs-extra"),AZ=require("path"),Jt=require("systeminformation"),Ei=$(),lM=st(),fEe=Fe(),Bd=M(),OZ=aM(),fM=Zn(),{getThreadInfo:_M}=Ke(),TT=ee();TT.initSync();var bZ=uM(),{openEnvironment:EEe}=We(),{getSchemaPath:hEe}=Je(),{database:NZ}=(Ae(),ne(Ge)),vd;EM.exports={getHDBProcessInfo:fT,getNetworkInfo:hT,getDiskInfo:ET,getMemoryInfo:dT,getCPUInfo:_T,getTimeInfo:lT,getSystemInformation:mT,systemInformation:yZ,getTableSize:pT,getMetrics:ST};function lT(){return Jt.time()}a(lT,"getTimeInfo");async function _T(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...b}=await Jt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return Ei.error(`error in getCPUInfo: ${e}`),{}}}a(_T,"getCPUInfo");async function dT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ei.error(`error in getMemoryInfo: ${e}`),{}}}a(dT,"getMemoryInfo");async function fT(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await RZ.readFile(AZ.join(TT.get(Bd.CONFIG_PARAMS.ROOTPATH),Bd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Bd.NODE_ERROR_CODES.ENOENT)Ei.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Ei.error(`error in getHDBProcessInfo: ${t}`),e}}a(fT,"getHDBProcessInfo");async function ET(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return Ei.error(`error in getDiskInfo: ${t}`),e}}a(ET,"getDiskInfo");async function hT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ei.error(`error in getNetworkInfo: ${t}`),e}}a(hT,"getNetworkInfo");async function mT(){if(vd!==void 0)return vd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,vd=e,vd}catch(t){return Ei.error(`error in getSystemInformation: ${t}`),e}}a(mT,"getSystemInformation");async function pT(){let e=[],t=await fM.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await OZ(s));return e}a(pT,"getTableSize");async function ST(){let e=await fM.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=NZ({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Ei.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(ST,"getMetrics");async function dM(){if(TT.get(Bd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await lM.getNATSReferences(),t=await lM.listStreams(),r=[];for(let s of t){let n=[],i=await e.consumers.list(s.config.name);for await(let c of i)n.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:s.config.name,database:s.config.subjects[0].split(".")[1],table:s.config.subjects[0].split(".")[2],state:s.state,consumers:n};r.push(o)}return r}}a(dM,"getNatsStreamInfo");async function yZ(e){let t=new bZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await mT(),t.time=lT(),t.cpu=await _T(),t.memory=await dT(),t.disk=await ET(),t.network=await hT(),t.harperdb_processes=await fT(),t.table_size=await pT(),t.metrics=await ST(),t.threads=await _M(),t.replication=await dM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await mT();break;case"time":t.time=lT();break;case"cpu":t.cpu=await _T();break;case"memory":t.memory=await dT();break;case"disk":t.disk=await ET();break;case"network":t.network=await hT();break;case"harperdb_processes":t.harperdb_processes=await fT();break;case"table_size":t.table_size=await pT();break;case"database_metrics":case"metrics":t.metrics=await ST();break;case"threads":t.threads=await _M();break;case"replication":t.replication=await dM();break;default:break}return t}a(yZ,"systemInformation")});var xd=g((SEe,hM)=>{"use strict";hM.exports={version:wZ,printVersion:IZ};var Hd=eu();function wZ(){if(Hd)return Hd.version}a(wZ,"version");function IZ(){Hd&&console.log(`HarperDB Version ${Hd.version}`)}a(IZ,"printVersion")});var os=g((AEe,TM)=>{"use strict";var CZ=Lr(),gT=Q(),DZ=require("util"),uo=M(),mM=ee();mM.initSync();var LZ=rT(),pM=Dr(),{Node:gEe,NodeSubscription:REe}=fi(),MZ=ra(),UZ=tM(),{RemotePayloadObject:PZ,RemotePayloadSubscription:vZ}=gu(),{handleHDBError:BZ,hdb_errors:HZ}=se(),{HTTP_STATUS_CODES:xZ,HDB_ERROR_MSGS:qZ}=HZ,GZ=Zs(),FZ=ha(),kZ=xd(),{getDatabases:VZ}=(Ae(),ne(Ge)),$Z=DZ.promisify(LZ.authorize),YZ=pM.searchByHash,KZ=pM.searchByValue;TM.exports={authHeaderToUser:WZ,isEmpty:QZ,getNodeRecord:zZ,upsertNodeRecord:JZ,buildNodePayloads:jZ,checkClusteringEnabled:XZ,getAllNodeRecords:ZZ,getSystemInfo:e5,reverseSubscription:SM};async function WZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await $Z(t,null),e}a(WZ,"authHeaderToUser");function QZ(e){return e==null}a(QZ,"isEmpty");async function zZ(e){let t=new MZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return YZ(t)}a(zZ,"getNodeRecord");async function JZ(e){let t=new UZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return CZ.upsert(t)}a(JZ,"upsertNodeRecord");function SM(e){if(gT.isEmpty(e.subscribe)||gT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(SM,"reverseSubscription");function jZ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=gT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=SM(c),E=VZ()[u]?.[_],h=new vZ(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new PZ(r,t,n,s)}a(jZ,"buildNodePayloads");function XZ(){if(!mM.get(uo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw BZ(new Error,qZ.CLUSTERING_NOT_ENABLED,xZ.BAD_REQUEST,void 0,void 0,!0)}a(XZ,"checkClusteringEnabled");async function ZZ(){let e=new GZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await KZ(e))}a(ZZ,"getAllNodeRecords");async function e5(){let e=await FZ.getSystemInformation();return{hdb_version:kZ.version(),node_version:e.node_version,platform:e.platform}}a(e5,"getSystemInfo")});var RT=g((bEe,wM)=>{"use strict";var qd=st(),gM=Q(),RM=Fe(),AM=M(),Gd=$(),OM=fu(),t5=ed(),{RemotePayloadObject:r5}=gu(),{handleHDBError:bM,hdb_errors:s5}=se(),{HTTP_STATUS_CODES:NM}=s5,{NodeSubscription:yM}=fi();wM.exports=n5;async function n5(e,t){let r;try{r=await qd.request(`${t}.${RM.REQUEST_SUFFIX}`,new r5(AM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Gd.trace("Response from remote describe all request:",r)}catch(o){Gd.error(`addNode received error from describe all request to remote node: ${o}`);let c=qd.requestErrorHandler(o,"add_node",t);throw bM(new Error,c,NM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===RM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw bM(new Error,o,NM.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===AM.SYSTEM_SCHEMA_NAME){await qd.createLocalTableStream(u,c);let h=new yM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=gM.doesSchemaExist(u),l=s[u]!==void 0,d=c?gM.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Gd.trace(`addNode creating schema: ${u}`),await OM.createSchema({operation:"create_schema",schema:u})),!d&&f){Gd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new t5(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await OM.createTable(h)}await qd.createLocalTableStream(u,c);let E=new yM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(n5,"reviewSubscriptions")});var $d=g((yEe,DM)=>{"use strict";var{handleHDBError:Fd,hdb_errors:i5}=se(),{HTTP_STATUS_CODES:kd}=i5,{addUpdateNodeValidator:o5}=Dd(),Vd=$(),CM=M(),IM=Fe(),a5=Q(),Ru=st(),Au=os(),c5=ee(),u5=RT(),{Node:l5,NodeSubscription:_5}=fi(),{broadcast:d5}=Ke(),f5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",E5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",h5=c5.get(CM.CONFIG_PARAMS.CLUSTERING_NODENAME);DM.exports=m5;async function m5(e,t=!1){Vd.trace("addNode called with:",e),Au.checkClusteringEnabled();let r=o5(e);if(r)throw Fd(r,r.message,kd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Au.getNodeRecord(s);if(!a5.isEmptyOrZeroLength(d))throw Fd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,kd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await u5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=f5,o;let c=Au.buildNodePayloads(n,h5,CM.OPERATIONS_ENUM.ADD_NODE,await Au.getSystemInfo()),u=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];n[d].start_time===void 0&&delete n[d].start_time,u.push(new _5(E.schema,E.table,E.publish,E.subscribe))}Vd.trace("addNode sending remote payload:",c);let _;try{_=await Ru.request(`${s}.${IM.REQUEST_SUFFIX}`,c)}catch(d){Vd.error(`addNode received error from request: ${d}`);for(let E=0,h=n.length;E<h;E++){let p=n[E];p.publish=!1,p.subscribe=!1,await Ru.updateRemoteConsumer(p,s)}let f=Ru.requestErrorHandler(d,"add_node",s);throw Fd(new Error,f,kd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===IM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${_.message}`;throw Fd(new Error,d,kd.INTERNAL_SERVER_ERROR,"error",d)}Vd.trace(_);for(let d=0,f=n.length;d<f;d++){let E=n[d];await Ru.updateRemoteConsumer(E,s),E.subscribe===!0&&await Ru.updateConsumerIterator(E.schema,E.table,s,"start")}let l=new l5(s,u,_.system_info);return await Au.upsertNodeRecord(l),d5({type:"nats_update"}),i.length>0?o.message=E5:o.message=`Successfully added '${s}' to manifest`,o}a(m5,"addNode")});var bT=g((CEe,UM)=>{"use strict";var{handleHDBError:AT,hdb_errors:p5}=se(),{HTTP_STATUS_CODES:OT}=p5,{addUpdateNodeValidator:S5}=Dd(),Ou=$(),MM=M(),LM=Fe(),IEe=Q(),bu=st(),Nu=os(),T5=ee(),{cloneDeep:g5}=require("lodash"),R5=RT(),{Node:A5,NodeSubscription:O5}=fi(),{broadcast:b5}=Ke(),N5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",y5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",w5=T5.get(MM.CONFIG_PARAMS.CLUSTERING_NODENAME);UM.exports=I5;async function I5(e){Ou.trace("updateNode called with:",e),Nu.checkClusteringEnabled();let t=S5(e);if(t)throw AT(t,t.message,OT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await Nu.getNodeRecord(r);n.length>0&&(s=g5(n));let{added:i,skipped:o}=await R5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=N5,c;let u=Nu.buildNodePayloads(i,w5,MM.OPERATIONS_ENUM.UPDATE_NODE,await Nu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Ou.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Ou.trace("updateNode sending remote payload:",u);let _;try{_=await bu.request(`${r}.${LM.REQUEST_SUFFIX}`,u)}catch(l){Ou.error(`updateNode received error from request: ${l}`);let d=bu.requestErrorHandler(l,"update_node",r);throw AT(new Error,d,OT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===LM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw AT(new Error,l,OT.INTERNAL_SERVER_ERROR,"error",l)}Ou.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await bu.updateRemoteConsumer(f,r),f.subscribe===!0?await bu.updateConsumerIterator(f.schema,f.table,r,"start"):await bu.updateConsumerIterator(f.schema,f.table,r,"stop")}return s||(s=[new A5(r,[],_.system_info)]),await C5(s[0],i,_.system_info),o.length>0?c.message=y5:c.message=`Successfully updated '${r}'`,c}a(I5,"updateNode");async function C5(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new O5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Nu.upsertNodeRecord(s),b5({type:"nats_update"})}a(C5,"updateNodeTable")});var xM=g((LEe,HM)=>{"use strict";var BM=require("joi"),{string:PM}=BM.types(),D5=je(),vM=M(),L5=ee(),M5=Fe();HM.exports=U5;function U5(e){let t=PM.invalid(L5.get(vM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(M5.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=BM.object({operation:PM.valid(vM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return D5.validateBySchema(e,r)}a(U5,"removeNodeValidator")});var Kd=g((UEe,VM)=>{"use strict";var{handleHDBError:qM,hdb_errors:P5}=se(),{HTTP_STATUS_CODES:GM}=P5,v5=xM(),yu=$(),FM=os(),B5=Q(),Yd=M(),kM=Fe(),NT=st(),H5=ee(),{RemotePayloadObject:x5}=gu(),{NodeSubscription:q5}=fi(),G5=sa(),F5=ri(),{broadcast:k5}=Ke(),V5=H5.get(Yd.CONFIG_PARAMS.CLUSTERING_NODENAME);VM.exports=$5;async function $5(e){yu.trace("removeNode called with:",e),FM.checkClusteringEnabled();let t=v5(e);if(t)throw qM(t,t.message,GM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await FM.getNodeRecord(r);if(B5.isEmptyOrZeroLength(s))throw qM(new Error,`Node '${r}' was not found.`,GM.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new x5(Yd.OPERATIONS_ENUM.REMOVE_NODE,V5,[]),i,o=!1;for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];l.subscribe===!0&&await NT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await NT.updateRemoteConsumer(new q5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await NT.request(`${r}.${kM.REQUEST_SUFFIX}`,n),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new G5(Yd.SYSTEM_SCHEMA_NAME,Yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await F5.deleteRecord(c),k5({type:"nats_update"}),i?.status===kM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.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($5,"removeNode")});var KM=g((vEe,YM)=>{"use strict";var $M=require("joi"),{string:Y5,array:K5}=$M.types(),W5=je(),Q5=Dd();YM.exports=z5;function z5(e){let t=$M.object({operation:Y5.valid("configure_cluster").required(),connections:K5.items(Q5.validation_schema).required()});return W5.validateBySchema(e,t)}a(z5,"configureClusterValidator")});var yT=g((HEe,jM)=>{"use strict";var J5=M(),Wd=$(),j5=Q(),X5=Kd(),Z5=$d(),WM=os(),e8=KM(),{handleHDBError:QM,hdb_errors:t8}=se(),{HTTP_STATUS_CODES:zM}=t8,r8="Configure cluster complete.",s8="Failed to configure the cluster. Check the logs for more details.",n8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";jM.exports=i8;async function i8(e){Wd.trace("configure cluster called with:",e),WM.checkClusteringEnabled();let t=e8(e);if(t)throw QM(t,t.message,zM.BAD_REQUEST,void 0,void 0,!0);let r=await WM.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(JM(X5,{operation:J5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Wd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(JM(Z5,E,E.node_name))}let c=await Promise.allSettled(i);Wd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Wd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(j5.isEmptyOrZeroLength(u))return{message:r8,connections:_};if(l)return{message:n8,failed_nodes:u,connections:_};throw QM(new Error,s8,zM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(i8,"configureCluster");async function JM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(JM,"functionWrapper")});var ZM=g((qEe,XM)=>{"use strict";var Qd=require("joi"),o8=je(),{validateSchemaExists:a8,validateTableExists:c8,validateSchemaName:u8}=Qs(),l8=Qd.object({operation:Qd.string().valid("purge_stream"),schema:Qd.string().custom(a8).custom(u8).required(),table:Qd.string().custom(c8).required()});function _8(e){return o8.validateBySchema(e,l8)}a(_8,"purgeStreamValidator");XM.exports=_8});var wT=g((FEe,eU)=>{"use strict";var{handleHDBError:d8,hdb_errors:f8}=se(),{HTTP_STATUS_CODES:E8}=f8,h8=ZM(),m8=st(),p8=os();eU.exports=S8;async function S8(e){if(e.purge_ingest!==!0){let n=h8(e);if(n)throw d8(n,n.message,E8.BAD_REQUEST,void 0,void 0,!0)}p8.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await m8.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(S8,"purgeStream")});var DT=g((VEe,oU)=>{"use strict";var CT=os(),T8=st(),sU=ee(),zd=M(),lo=Fe(),g8=Q(),IT=$(),{RemotePayloadObject:R8}=gu(),{ErrorCode:tU}=require("nats"),rU=sU.get(zd.CONFIG_PARAMS.CLUSTERING_ENABLED),nU=sU.get(zd.CONFIG_PARAMS.CLUSTERING_NODENAME);oU.exports={clusterStatus:A8,buildNodeStatus:iU};async function A8(){let e={node_name:nU,is_enabled:rU,connections:[]};if(!rU)return e;let t=await CT.getAllNodeRecords();if(g8.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(iU(t[s],e.connections));return await Promise.allSettled(r),e}a(A8,"clusterStatus");async function iU(e,t){let r=e.name,s=new R8(zd.OPERATIONS_ENUM.CLUSTER_STATUS,nU,void 0,await CT.getSystemInfo()),n,i,o=lo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await T8.request(lo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===lo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=lo.CLUSTER_STATUS_STATUSES.CLOSED,IT.error(`Error getting node status from ${r} `,n))}catch(u){IT.warn(`Error getting node status from ${r}`,u),u.code===tU.NoResponders?o=lo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===tU.Timeout?o=lo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=lo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new O8(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==zd.PRE_4_0_0_VERSION&&await CT.upsertNodeRecord(u)}catch(u){IT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(iU,"buildNodeStatus");function O8(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(O8,"NodeStatusObject")});var MT=g((YEe,aU)=>{"use strict";var{handleHDBError:b8,hdb_errors:N8}=se(),{HTTP_STATUS_CODES:y8}=N8,w8=st(),I8=os(),LT=Q(),Jd=require("joi"),C8=je(),D8=2e3,L8=Jd.object({timeout:Jd.number().min(1),connected_nodes:Jd.boolean(),routes:Jd.boolean()});aU.exports=M8;async function M8(e){I8.checkClusteringEnabled();let t=C8.validateBySchema(e,L8);if(t)throw b8(t,t.message,y8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||LT.autoCastBoolean(s),o=n===void 0||LT.autoCastBoolean(n),c={nodes:[]},u=await w8.getServerList(r??D8),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:LT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(M8,"clusterNetwork")});var _U=g((WEe,lU)=>{"use strict";var UT=require("joi"),cU=je(),{route_constraints:uU}=zm();lU.exports={setRoutesValidator:U8,deleteRoutesValidator:P8};function U8(e){let t=UT.object({server:UT.valid("hub","leaf").required(),routes:uU.required()});return cU.validateBySchema(e,t)}a(U8,"setRoutesValidator");function P8(e){let t=UT.object({routes:uU.required()});return cU.validateBySchema(e,t)}a(P8,"deleteRoutesValidator")});var vT=g((zEe,hU)=>{"use strict";var _o=Pr(),PT=Q(),jd=M(),dU=_U(),{handleHDBError:fU,hdb_errors:v8}=se(),{HTTP_STATUS_CODES:EU}=v8,B8="cluster routes successfully set",H8="cluster routes successfully deleted";hU.exports={setRoutes:x8,getRoutes:q8,deleteRoutes:G8};function x8(e){let t=dU.setRoutesValidator(e);if(t)throw fU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=PT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?_o.updateConfigValue(jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_o.updateConfigValue(jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:B8,set:o,skipped:i}}a(x8,"setRoutes");function q8(){let e=_o.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(q8,"getRoutes");function G8(e){let t=dU.deleteRoutesValidator(e);if(t)throw fU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=PT.isEmptyOrZeroLength(s)?null:s,_o.updateConfigValue(jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=PT.isEmptyOrZeroLength(n)?null:n,_o.updateConfigValue(jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:H8,deleted:i,skipped:o}}a(G8,"deleteRoutes")});var pU=g((jEe,mU)=>{"use strict";var wu=require("alasql"),fo=require("recursive-iterator"),Bs=$(),F8=Q(),Iu=M(),BT=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,V8(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(n=>Iu.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Iu.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=k8(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new wu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function k8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(k8,"filterReadRestrictedAttrs");function V8(e,t,r,s,n){$8(e,t,r,s,n)}a(V8,"interpretAST");function Cu(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Cu,"addSchemaTableToMap");function $8(e,t,r,s,n){if(!e){Bs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wu.yy.Insert?Q8(e,t,r):e instanceof wu.yy.Select?Y8(e,t,r,s,n):e instanceof wu.yy.Update?K8(e,t,r):e instanceof wu.yy.Delete?W8(e,t,r):Bs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a($8,"getRecordAttributesAST");function Y8(e,t,r,s,n){if(!e){Bs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(F8.isEmptyOrZeroLength(i)){Bs.error("No schema specified");return}e.from.forEach(c=>{Cu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Cu(c.table,t,r,s,n)});let o=new fo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Bs.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new fo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new fo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new fo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Bs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(Y8,"getSelectAttributes");function K8(e,t,r){if(!e){Bs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&HT(e.table.tableid,n,i.columnid,t,r)}a(K8,"getUpdateAttributes");function W8(e,t,r){if(!e){Bs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new fo(e.where),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&HT(e.table.tableid,n,i.columnid,t,r)}a(W8,"getDeleteAttributes");function Q8(e,t,r){if(!e){Bs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.into.databaseid;Cu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&HT(e.into.tableid,n,i.columnid,t,r)}a(Q8,"getInsertAttributes");function HT(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(HT,"pushAttribute");mU.exports=BT});var GT=g((ZEe,RU)=>{var Xd=Qi(),SU=require("chalk"),Gr=$(),TU=require("prompt"),{promisify:z8}=require("util"),xT=M(),J8=require("fs-extra"),j8=require("path"),X8=Q(),Z8=xd(),gU=ee();gU.initSync();var e6=require("moment"),t6=z8(TU.get),r6=j8.join(gU.getHdbBasePath(),xT.LICENSE_KEY_DIR_NAME,xT.LICENSE_FILE_NAME,xT.LICENSE_FILE_NAME);RU.exports={getFingerprint:n6,setLicense:s6,parseLicense:qT,register:i6,getRegistrationInfo:a6};async function s6(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await qT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(s6,"setLicense");async function n6(){let e={};try{e=await Xd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(n6,"getFingerprint");async function qT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Xd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await J8.writeFile(r6,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gr.error("Failed to write License"),s}return"Registration successful."}a(qT,"parseLicense");async function i6(){let e=await o6();return qT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(i6,"register");async function o6(){let e=await Xd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:SU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:SU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{TU.start()}catch(s){Gr.error(s)}let r;try{r=await t6(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(o6,"promptForRegistration");async function a6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Xd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(X8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Z8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=e6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(a6,"getRegistrationInfo")});var OU=g((the,AU)=>{"use strict";var c6=Fe(),FT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+c6.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};AU.exports=FT});var yU=g((she,NU)=>{"use strict";var bU=Fe(),kT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+bU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+bU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,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:u,jetstream:"enabled"}},this.system_account="SYS"}};NU.exports=kT});var IU=g((ihe,wU)=>{"use strict";var VT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wU.exports=VT});var DU=g((ahe,CU)=>{"use strict";var u6=Fe(),$T=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+u6.SERVER_SUFFIX.ADMIN,this.password=r}};CU.exports=$T});var WT=g((uhe,UU)=>{"use strict";var ma=require("path"),tf=require("fs-extra"),l6=OU(),_6=yU(),d6=IU(),f6=DU(),YT=ss(),Sa=Q(),pr=Pr(),ef=M(),Du=Fe(),{CONFIG_PARAMS:_t}=ef,Lu=$(),Mu=ee(),LU=Tn(),KT=st(),pa="clustering",E6=1e4,MU=5;UU.exports={generateNatsConfig:m6,removeNatsConfig:p6,getHubConfigPath:h6};function h6(){let e=Mu.get(_t.ROOTPATH);return ma.join(e,pa,Du.NATS_CONFIG_FILES.HUB_SERVER)}a(h6,"getHubConfigPath");async function m6(e=!1,t=void 0){Mu.initSync();let r=Mu.get(_t.ROOTPATH),s=ma.join(r,pa,Du.PID_FILES.HUB),n=ma.join(r,pa,Du.PID_FILES.LEAF),i=pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ma.join(r,pa,Du.NATS_CONFIG_FILES.HUB_SERVER),c=ma.join(r,pa,Du.NATS_CONFIG_FILES.LEAF_SERVER),u=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=pr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=pr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=pr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=pr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await KT.checkNATSServerInstalled()||rf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await YT.listUsers(),S=pr.getConfigFromFile(_t.CLUSTERING_USER),T=await YT.getClusterUser();(Sa.isEmpty(T)||T.active!==!0)&&rf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Zd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Zd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Zd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await Zd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,j]of p.entries())j.role.role===ef.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(b.push(new f6(j.username,LU.decrypt(j.hash))),R.push(new d6(j.username,LU.decrypt(j.hash))));let L=[],{hub_routes:H}=pr.getClusteringRoutes();if(!Sa.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new l6(pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=Sa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ef.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await tf.writeJson(o,P),Lu.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new _6(pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===ef.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await tf.writeJson(c,J),Lu.trace(`Leaf server config written to ${c}`))}a(m6,"generateNatsConfig");async function Zd(e){let t=Mu.get(e);return Sa.isEmpty(t)&&rf(`port undefined for '${e}'`),await Sa.isPortTaken(t)&&rf(`'${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(Zd,"isPortAvailable");function rf(e){let t=`Error generating clustering config: ${e}`;Lu.error(t),console.error(t),process.exit(1)}a(rf,"generateNatsConfigError");async function p6(e){let{port:t,config_file:r}=KT.getServerConfig(e),{username:s,decrypt_hash:n}=await YT.getClusterUser(),i=0,o=2e3;for(;i<MU;){try{let _=await KT.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Lu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=MU)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.`);await Sa.async_set_timeout(o*(i*2))}let c="0".repeat(E6),u=ma.join(Mu.get(_t.ROOTPATH),pa,r);await tf.writeFile(u,c),await tf.remove(u),Lu.notify(e,"started.")}a(p6,"removeNatsConfig")});var qU=g((_he,xU)=>{"use strict";var Fr=ee(),S6=Qi(),he=M(),Uu=Fe(),yn=require("path"),{PACKAGE_ROOT:nf}=M(),PU=ee(),sf=Q(),Ta="/dev/null",T6=yn.join(nf,"launchServiceScripts"),vU=yn.join(nf,"utility/scripts"),g6=yn.join(vU,he.HDB_RESTART_SCRIPT),BU=yn.resolve(nf,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME);function HU(){let t=S6.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,s={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return sf.noBootFile()&&(s[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=sf.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:nf}}a(HU,"generateMainServerConfig");var R6=9930;function A6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=PU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==R6?"-"+s:""),script:BU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ta,i.error_file=Ta),i}a(A6,"generateNatsHubServerConfig");var O6=9940;function b6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=PU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==O6?"-"+s:""),script:BU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ta,i.error_file=Ta),i}a(b6,"generateNatsLeafServerConfig");function N6(){Fr.initSync();let e=yn.join(Fr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:T6,autorestart:!1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ta,t.error_file=Ta),t}a(N6,"generateClusteringUpgradeV4ServiceConfig");function y6(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return sf.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=sf.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:vU},script:g6}}a(y6,"generateRestart");function w6(){return{apps:[HU()]}}a(w6,"generateAllServiceConfigs");xU.exports={generateAllServiceConfigs:w6,generateMainServerConfig:HU,generateRestart:y6,generateNatsHubServerConfig:A6,generateNatsLeafServerConfig:b6,generateClusteringUpgradeV4ServiceConfig:N6}});var ZU=g((Ehe,XU)=>{"use strict";var ve=M(),I6=Q(),In=WT(),of=st(),wn=Fe(),hi=qU(),af=ee(),mi=$(),C6=os(),{startWorker:GU,onMessageFromWorkers:D6}=Ke(),L6=ha(),fhe=require("util"),M6=require("child_process"),U6=require("fs"),{execFile:P6}=M6,ye;XU.exports={enterPM2Mode:v6,start:pi,stop:QT,reload:kU,restart:VU,list:zT,describe:YU,connect:Cn,kill:G6,startAllServices:F6,startService:JT,getUniqueServicesList:KU,restartAllServices:k6,isServiceRegistered:WU,reloadStopStart:QU,restartHdb:$U,deleteProcess:x6,startClusteringProcesses:JU,startClusteringThreads:jU,isHdbRestartRunning:q6,isClusteringRunning:$6,stopClustering:V6,reloadClustering:Y6};var Pu=!1;D6(e=>{e.type==="restart"&&af.initSync(!0)});function v6(){Pu=!0}a(v6,"enterPM2Mode");function Cn(){return ye||(ye=require("pm2")),new Promise((e,t)=>{ye.connect((r,s)=>{mi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var Sr,B6=10,FU;function pi(e,t=!1){if(Pu)return H6(e);let r=P6(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Sr.indexOf(r);o>-1&&Sr.splice(o,1),!FU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<B6&&(U6.existsSync(In.getHubConfigPath())?pi(e):(await In.generateNatsConfig(!0),pi(e),await new Promise(c=>setTimeout(c,3e3)),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=af.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=wn.LOG_LEVELS[f]}if(wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Sr=[],!Sr&&!t){let i=a(()=>{FU=!0,Sr&&(Sr.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)}Sr.push(r)}a(pi,"start");function H6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.start(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(H6,"startWithPM2");function QT(e){if(!Pu){for(let t of Sr||[])t.name===e&&(Sr.splice(Sr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.stop(e,async(s,n)=>{s&&(ye.disconnect(),r(s)),ye.delete(e,(i,o)=>{i&&(ye.disconnect(),r(s)),ye.disconnect(),t(o)})})})}a(QT,"stop");function kU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.reload(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(kU,"reload");function VU(e){if(!Pu)for(let t of Sr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.restart(e,(s,n)=>{ye.disconnect(),t(n)})})}a(VU,"restart");function x6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.delete(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(x6,"deleteProcess");async function $U(){await pi(hi.generateRestart())}a($U,"restartHdb");async function q6(){let e=await zT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(q6,"isHdbRestartRunning");function zT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.list((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(zT,"list");function YU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.describe(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(YU,"describe");function G6(){if(!Pu){for(let e of Sr||[])e.kill();Sr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.killDaemon((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(G6,"kill");async function F6(){try{await JU(),await jU(),await pi(hi.generateAllServiceConfigs())}catch(e){throw ye?.disconnect(),e}}a(F6,"startAllServices");async function JT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=hi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=hi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=hi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=hi.generateNatsHubServerConfig(),await pi(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=hi.generateNatsLeafServerConfig(),await pi(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=hi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await pi(r)}catch(r){throw ye?.disconnect(),r}}a(JT,"startService");async function KU(){try{let e=await zT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw ye?.disconnect(),e}}a(KU,"getUniqueServicesList");async function k6(e=[]){try{let t=!1,r=await KU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await VU(o))}t&&await QU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw ye?.disconnect(),t}}a(k6,"restartAllServices");async function WU(e){if(Sr?.find(r=>r.name===e))return!0;let t=await L6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(WU,"isServiceRegistered");async function QU(e){let t=af.get(ve.CONFIG_PARAMS.THREADS_COUNT)??af.get(ve.CONFIG_PARAMS.THREADS),r=await YU(e),s=I6.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await QT(e),await JT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await $U():await kU(e)}a(QU,"reloadStopStart");var zU;async function JU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await JT(r,e)}}a(JU,"startClusteringProcesses");async function jU(){zU=GU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await of.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await of.updateLocalStreams();let e=await C6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){mi.info("Starting clustering upgrade 4.0.0 process"),GU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(jU,"startClusteringThreads");async function V6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await zU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await QT(t)}}a(V6,"stopClustering");async function $6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await WU(t)===!1)return!1}return!0}a($6,"isClusteringRunning");async function Y6(){await In.generateNatsConfig(!0),await of.reloadNATSHub(),await of.reloadNATSLeaf(),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Y6,"reloadClustering")});var df=g((phe,oP)=>{"use strict";var K6=require("minimist"),{isMainThread:XT,parentPort:rP}=require("worker_threads"),nt=M(),{PROCESS_DESCRIPTORS_VALIDATE:vu}=nt,sn=$(),ZT=Q(),uf=WT(),cf=st(),mhe=Fe(),sP=Pr(),nn=ZU(),eP=ha(),W6=bh(),{restartWorkers:lf,onMessageByType:Q6}=Ke(),{handleHDBError:z6,hdb_errors:J6}=se(),{HTTP_STATUS_CODES:j6}=J6,_f=ee();_f.initSync();var Bu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,X6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",tP="Clustering is not enabled so cannot be restarted",Z6="Invalid service",ga,as;oP.exports={restart:nP,restartService:eg};XT&&Q6(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?eg({service:e.workerType}):nP({operation:"restart"})});async function nP(e){as=Object.keys(e).length===0,ga=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=K6(process.argv);if(t.service){await eg(t);return}if(as&&!ga){console.error(X6);return}if(as&&console.log(Bu),ga){nn.enterPM2Mode(),sn.notify(Bu);let r=W6(Object.keys(nt.CONFIG_PARAM_MAP),!0);return ZT.isEmptyOrZeroLength(Object.keys(r))||sP.updateConfigValue(void 0,void 0,r,!0,!0),e9(),Bu}return XT?(sn.notify(Bu),setTimeout(()=>{lf()},50)):rP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Bu}a(nP,"restart");async function eg(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw z6(new Error,Z6,j6.BAD_REQUEST,void 0,void 0,!0);if(ga=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!XT)return rP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case vu.clustering:if(!_f.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tP;break}as&&console.log("Restarting clustering"),sn.notify("Restarting clustering"),await iP();break;case vu.clustering_config:case vu["clustering config"]:if(!_f.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tP;break}as&&console.log("Restarting clustering_config"),sn.notify("Restarting clustering_config"),await nn.reloadClustering();break;case"custom_functions":case"custom functions":case vu.harperdb:case vu.http_workers:if(as&&!ga){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}as&&console.log("Restarting http_workers"),sn.notify("Restarting http_workers"),as?await nn.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{lf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(sn.error(r),as&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(eg,"restartService");async function e9(){await iP(),await nn.restart(nt.HDB_PROC_DESCRIPTOR),await ZT.async_set_timeout(2e3),_f.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await jT(),as&&(await cf.closeConnection(),process.exit(0))}a(e9,"restartPM2Mode");async function iP(){if(!sP.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await eP.getHDBProcessInfo()).clustering.length===0)sn.trace("Clustering not running, restart will start clustering services"),await uf.generateNatsConfig(!0),await nn.startClusteringProcesses(),await nn.startClusteringThreads(),await jT(),as&&await cf.closeConnection();else{await uf.generateNatsConfig(!0),ga?(sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await eP.getHDBProcessInfo()).clustering.forEach(n=>{sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await ZT.async_set_timeout(3e3),await jT(),await cf.updateLocalStreams(),as&&await cf.closeConnection(),sn.trace("Restart clustering restarting ingest and reply service threads");let t=lf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=lf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(iP,"restartClustering");async function jT(){await uf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await uf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(jT,"removeNatsConfig")});var pP=g((ghe,mP)=>{"use strict";var The=require("lodash"),Tr=M(),{handleHDBError:aP,hdb_errors:t9}=se(),{HDB_ERROR_MSGS:r9,HTTP_STATUS_CODES:s9}=t9,tg=$();mP.exports={getRolePermissions:i9};var Eo=Object.create(null),n9=a(e=>({key:e,perms:{}}),"perms_template_obj"),_P=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),dP=a((e=!1,t=!1,r=!1,s=!1)=>({[Tr.PERMS_CRUD_ENUM.READ]:e,[Tr.PERMS_CRUD_ENUM.INSERT]:t,[Tr.PERMS_CRUD_ENUM.UPDATE]:r,[Tr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),rg=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...dP(t,r,s,n)}),"table_perms_template"),cP=a((e,t=dP())=>({attribute_name:e,describe:hP(t),[Hu]:t[Hu],[sg]:t[sg],[ng]:t[ng]}),"attr_perms_template"),uP=a((e,t=!1)=>({attribute_name:e,describe:t,[Hu]:t}),"timestamp_attr_perms_template"),{READ:Hu,INSERT:sg,UPDATE:ng}=Tr.PERMS_CRUD_ENUM,fP=Object.values(Tr.PERMS_CRUD_ENUM),EP=[Hu,sg,ng];function i9(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Tr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Eo[t]&&Eo[t].key===s)return Eo[t].perms;let n=o9(e,r);return Eo[t]?Eo[t].key=s:Eo[t]=n9(s),Eo[t].perms=n,n}catch(r){if(!e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Tr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw tg.error(s),tg.debug(r),aP(new Error,r9.OUTDATED_PERMS_TRANSLATION_ERROR,s9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
11
|
${r.stack}`;throw tg.error(s),aP(new Error)}}}a(i9,"getRolePermissions");function o9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Tr.SYSTEM_SCHEMA_NAME]=s[Tr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=a9(t[i]);return}r[i]=_P(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=c9(c,u);r[i].describe||fP.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=rg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=rg()})}),r}a(o9,"translateRolePermissions");function a9(e){let t=_P(!0);return Object.keys(e).forEach(r=>{t.tables[r]=rg(!0,!0,!0,!0,!0)}),t}a(a9,"createStructureUserPermissions");function c9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Tr.TIME_STAMP_NAMES.includes(d)&&(f=uP(d,l[Hu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=cP(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=hP(l),n.attribute_permissions.push(l),c||u9(l,u)}else if(_!==o){let l;Tr.TIME_STAMP_NAMES.includes(_)?l=uP(_):l=cP(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=lP(n),n}else return e.describe=lP(e),e}a(c9,"getTableAttrPerms");function lP(e){return fP.filter(t=>e[t]).length>0}a(lP,"getSchemaTableDescribePerm");function hP(e){return EP.filter(t=>e[t]).length>0}a(hP,"getAttributeDescribePerm");function u9(e,t){EP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(u9,"checkForHashPerms")});var SP={};Ye(SP,{Resources:()=>ff,keyArrayToString:()=>Ra,resetResources:()=>l9,resources:()=>Si});function l9(){return Si=new ff}function Ra(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ff,Si,xu=Re(()=>{eo();ff=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(l9,"resetResources");a(Ra,"keyArrayToString")});var TP={};Ye(TP,{Headers:()=>Ti,appendHeader:()=>ig});function ig(e,t,r,s){if(e.append)e.append(t,r,s);else if(e.set){let n=e.get(t);if(n)if(s)r=(typeof n=="string"?n:n.join(", "))+", "+r;else if(typeof n=="string")r=[n,r];else{n.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ti,qu=Re(()=>{Ti=class extends Map{static{a(this,"Headers")}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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];if(s)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(ig,"appendHeader")});var Gu={};Ye(Gu,{authentication:()=>wP,bypassAuth:()=>p9,login:()=>T9,logout:()=>g9,start:()=>S9});function p9(){yP=!0}async function wP(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?E9?f9:[]:d9?_9:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ti([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ef&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ef&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Ef){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await RP.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Aa.AuthAuditLog(E,h,Ut.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ut.AUTH_AUDIT_STATUS.SUCCESS?gP.notify(S):gP.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await tt.getUser(E,null,null),l(E,Ut.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Aa.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(s){if(d=ho.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await tt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,hf.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,hf.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return m9&&(ho.get(h)||(ho.set(h,h),l(p,Ut.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:gi({error:T.message},e)})}ho.set(s,d),h9&&l(d.username,Ut.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await tt.getUser(_.user,null,e):(yP&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,OP.getSuperUser)());Ef&&(e.session.update=function(E){if(!u){u=(0,bP.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,RP.put(E)},e.login=async function(E,h){e.user=await tt.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Si.loginPath?(f.status=302,f.headers.set("Location",Si.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ti);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function S9({server:e,port:t}){e.request(wP,{port:t||"all"}),AP||(AP=!0,setInterval(()=>{ho=new Map},cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),NP.user.addListener(()=>{ho=new Map}))}async function T9(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function g9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var OP,hf,bP,cs,Ut,Aa,NP,gP,_9,d9,f9,E9,RP,Ef,yP,h9,m9,ho,AP,mf=Re(()=>{OP=x(ss());nr();xu();hf=x(Tu());Ae();bP=require("uuid"),cs=x(ee()),Ut=x(M()),Aa=x($()),NP=x(Hc());qu();Oa();gP=(0,Aa.loggerWithTag)("auth-event");cs.initSync();_9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORSACCESSLIST),d9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORS),f9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),E9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),RP=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ef=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,yP=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,h9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,m9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ho=new Map;tt.onInvalidatedUser(()=>{ho=new Map});a(p9,"bypassAuth");a(wP,"authentication");a(S9,"start");a(T9,"login");a(g9,"logout")});var PP=g((Lhe,UP)=>{"use strict";var we=require("joi"),IP=require("fs-extra"),CP=require("path"),Ln=je(),DP=ee(),LP=M(),MP=$(),{hdb_errors:R9}=se(),{HDB_ERROR_MSGS:jt}=R9,Dn=/^[a-zA-Z0-9-_]+$/;UP.exports={getDropCustomFunctionValidator:O9,setCustomFunctionValidator:b9,addComponentValidator:I9,dropCustomFunctionProjectValidator:C9,packageComponentValidator:D9,deployComponentValidator:L9,setComponentFileValidator:N9,getComponentFileValidator:w9,dropComponentFileValidator:y9};function pf(e,t,r){try{let s=DP.get(LP.CONFIG_PARAMS.COMPONENTSROOT),n=CP.join(s,t);return IP.existsSync(n)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(s){return MP.error(s),r.message(jt.VALIDATION_ERR)}}a(pf,"checkProjectExists");function Fu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Fu,"checkFilePath");function A9(e,t,r,s){try{let n=DP.get(LP.CONFIG_PARAMS.COMPONENTSROOT),i=CP.join(n,e,t,r+".js");return IP.existsSync(i)?r:s.message(jt.NO_FILE)}catch(n){return MP.error(n),s.message(jt.VALIDATION_ERR)}}a(A9,"checkFileExists");function O9(e){let t=we.object({project:we.string().pattern(Dn).custom(pf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(Dn).custom(A9.bind(null,e.project,e.type)).custom(Fu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(O9,"getDropCustomFunctionValidator");function b9(e){let t=we.object({project:we.string().pattern(Dn).custom(pf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Fu).required(),function_content:we.string().required()});return Ln.validateBySchema(e,t)}a(b9,"setCustomFunctionValidator");function N9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(N9,"setComponentFileValidator");function y9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).optional()});return Ln.validateBySchema(e,t)}a(y9,"dropComponentFileValidator");function w9(e){let t=we.object({project:we.string().required(),file:we.string().custom(Fu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(w9,"getComponentFileValidator");function I9(e){let t=we.object({project:we.string().pattern(Dn).custom(pf.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(I9,"addComponentValidator");function C9(e){let t=we.object({project:we.string().pattern(Dn).custom(pf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(C9,"dropCustomFunctionProjectValidator");function D9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Ln.validateBySchema(e,t)}a(D9,"packageComponentValidator");function L9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:we.string().optional()});return Ln.validateBySchema(e,t)}a(L9,"deployComponentValidator")});var Rf=g((Uhe,FP)=>{"use strict";var Sf=require("joi"),Tf=require("path"),vP=require("fs-extra"),{exec:M9}=require("child_process"),U9=require("util"),BP=U9.promisify(M9),ku=M(),{handleHDBError:ba,hdb_errors:P9}=se(),{HTTP_STATUS_CODES:Na}=P9,Vu=ee(),v9=je(),ya=$();Vu.initSync();var og=Vu.get(ku.CONFIG_PARAMS.COMPONENTSROOT),HP="npm install --omit=dev --json",B9=`${HP} --dry-run`;FP.exports={installModules:G9,auditModules:F9,installAllRootModules:H9,uninstallRootModule:x9,linkHarperdb:q9};async function H9(e=!1){await gf(),await $u(e?"npm install --ignore-scripts":"npm install",Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(H9,"installAllRootModules");async function x9(e){await $u(`npm uninstall ${e}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(x9,"uninstallRootModule");async function q9(){await gf(),await $u(`npm link ${ku.PACKAGE_ROOT}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(q9,"linkHarperdb");async function $u(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await BP(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|