harperdb 4.3.40 → 4.3.41

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.
@@ -6,7 +6,7 @@ Caused by:`));else if(typeof _=="object")try{n+=JSON.stringify(_)}catch{n+="Obje
6
6
  `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:TV.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(OV,"findPs")});var ft=g((Ace,JO)=>{"use strict";var bV="__dbis__",yV="__txns__",NV="__environment_name__",IV="__dbi_defintion__",wV={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"},CV=["__createdtime__","__updatedtime__"],DV="\uFFFF",zO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},LV=Object.values(zO);JO.exports={AUDIT_STORE_NAME:yV,INTERNAL_DBIS_NAME:bV,DBI_DEFINITION_NAME:IV,SEARCH_TYPES:wV,TIMESTAMP_NAMES:CV,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:NV,TRANSACTIONS_DBI_NAMES_ENUM:zO,TRANSACTIONS_DBIS:LV,OVERFLOW_MARKER:DV}});var vr=g((Oce,ib)=>{"use strict";var XO=P(),jO=ft(),ZO={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},eb=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tb={500:eb("There was an error processing your request."),400:"Invalid request"},MV=tb[ZO.INTERNAL_SERVER_ERROR],PV={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.`},UV={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},vV={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"},BV={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 ${jO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${jO.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"},xV={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${XO.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 ${XO.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"},rb={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"},HV={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."},GV={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`},qV={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"},FV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},kV={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`},nb={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.`},sb={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}`},VV={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."},$V={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},YV={...rb,...vV,...PV,...HV,...GV,...qV,...FV,...kV,...xV,...nb,...sb,...VV,...$V,...UV};ib.exports={CHECK_LOGS_WRAPPER:eb,HDB_ERROR_MSGS:YV,DEFAULT_ERROR_MSGS:tb,DEFAULT_ERROR_RESP:MV,HTTP_STATUS_CODES:ZO,LMDB_ERRORS_ENUM:BV,AUTHENTICATION_ERROR_MSGS:rb,VALIDATION_ERROR_MSGS:nb,ITC_ERRORS:sb}});var se=g((yce,cb)=>{"use strict";var Yo=vr(),KV=$(),WV=P(),m_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,ob),this.statusCode=n||Yo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Yo.DEFAULT_ERROR_MSGS[n]?Yo.DEFAULT_ERROR_MSGS[n]:Yo.DEFAULT_ERROR_MSGS[Yo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&KV[s](i)}},Xh=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}},jh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function ob(e,t,r,n=WV.LOG_LEVELS.ERROR,s=null,i=!1){if(ab(e))return e;let o=new m_(e,t,r,n,s);return i&&delete o.stack,o}a(ob,"handleHDBError");function ab(e){return e.__proto__.constructor.name===m_.name}a(ab,"isHDBError");cb.exports={isHDBError:ab,handleHDBError:ob,ClientError:Xh,ServerError:jh,hdb_errors:Yo}});var Xe=g((Ice,hb)=>{"use strict";var Ic=P(),QV=J(),dr=ee(),wc=require("path"),zV=require("minimist"),ub=require("fs-extra"),lb=require("lodash");dr.initSync();var{CONFIG_PARAMS:ri,DATABASES_PARAM_CONFIG:Oc,SYSTEM_SCHEMA_NAME:p_}=Ic,bc,yc,Nc;function _b(){if(bc!==void 0)return bc;if(dr.getHdbBasePath()!==void 0)return bc=dr.get(ri.STORAGE_PATH)||wc.join(dr.getHdbBasePath(),Ic.DATABASES_DIR_NAME),bc}a(_b,"getBaseSchemaPath");function db(){if(yc!==void 0)return yc;if(dr.getHdbBasePath()!==void 0)return yc=Eb(p_),yc}a(db,"getSystemSchemaPath");function fb(){if(Nc!==void 0)return Nc;if(dr.getHdbBasePath()!==void 0)return Nc=dr.get(Ic.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||wc.join(dr.getHdbBasePath(),Ic.TRANSACTIONS_DIR_NAME),Nc}a(fb,"getTransactionAuditStoreBasePath");function JV(e,t){let r=dr.get(ri.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||wc.join(fb(),e.toString())}a(JV,"getTransactionAuditStorePath");function Eb(e,t){e=e.toString(),t=t&&t.toString();let r=dr.get(Ic.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||wc.join(_b(),e)}a(Eb,"getSchemaPath");function XV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,zV(process.argv));let n=r[ri.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!QV.isObject(n))throw o;i=n}for(let o of i){let c=o[p_];if(!c)continue;let u=dr.get(ri.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Oc.PATH];if(_)return lb.set(u,[p_,Oc.TABLES,t,Oc.PATH],_),dr.setProperty(ri.DATABASES,u),_;let l=c?.[Oc.PATH];if(l)return lb.set(u,[p_,Oc.PATH],l),dr.setProperty(ri.DATABASES,u),l}}let s=r[ri.STORAGE_PATH.toUpperCase()];if(s){if(!ub.pathExistsSync(s))throw new Error(s+" does not exist");let i=wc.join(s,e);return ub.mkdirsSync(i),dr.setProperty(ri.STORAGE_PATH,s),i}return db()}a(XV,"initSystemSchemaPaths");function jV(){bc=void 0,yc=void 0,Nc=void 0}a(jV,"resetPaths");hb.exports={getBaseSchemaPath:_b,getSystemSchemaPath:db,getTransactionAuditStorePath:JV,getTransactionAuditStoreBasePath:fb,getSchemaPath:Eb,initSystemSchemaPaths:XV,resetPaths:jV}});var Br=g((Lce,gb)=>{"use strict";var ZV=vr().LMDB_ERRORS_ENUM,Cce=require("lmdb"),e$=ft(),Dce=require("buffer").Buffer,{OVERFLOW_MARKER:mb,MAX_SEARCH_KEY_LENGTH:S_}=e$,pb=["number","string","symbol","boolean","bigint"];function t$(e){if(e=e?.primaryStore||e,!e)throw new Error(ZV.ENV_REQUIRED)}a(t$,"validateEnv");function r$(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(r$,"stringifyData");function n$(e){return e instanceof Date?e.valueOf():e}a(n$,"convertKeyValueToWrite");function s$(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(pb.includes(typeof e))return e.length>S_?[e.slice(0,S_)+mb]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(pb.includes(typeof i))i.length>S_?r.push(i.slice(0,S_)+mb):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(s$,"getIndexedValues");var T_=0,Sb=0;function Tb(){Sb=Date.now()-performance.now()}a(Tb,"adjustStartTime");Tb();var i$=6e4;setInterval(Tb,i$).unref();function o$(){let e=performance.now()+Sb;return e>T_?(T_=e,e):(T_+=488e-6,T_)}a(o$,"getNextMonotonicTime");gb.exports={validateEnv:t$,stringifyData:r$,convertKeyValueToWrite:n$,getNextMonotonicTime:o$,getIndexedValues:s$}});var Cc=g((Pce,Rb)=>{"use strict";var a$=P().OPERATIONS_ENUM,Zh=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=a$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Rb.exports=Zh});var Dc=g((Bce,yb)=>{"use strict";var vce=Cc(),g_=P(),em=J(),Ab=$(),c$=require("uuid"),{handleHDBError:R_,hdb_errors:u$}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=u$;yb.exports=Ob;function Ob(e,t,r){for(let s=0;s<t.length;s++)bb(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];l$(i,r,e.operation)}}a(Ob,"processRows");Ob.validateAttribute=bb;function bb(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(em.isEmptyOrZeroLength(e)||em.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(bb,"validateAttribute");function l$(e,t,r){if(!e.hasOwnProperty(t)||em.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=c$.v4();return}throw Ab.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ab.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(l$,"validateHash")});var Nb,In,tm,Lc=Re(()=>{Nb=require("events"),In=class extends Nb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new tm;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},tm=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 qi={};Fe(qi,{server:()=>at});var Ib,at,fr=Re(()=>{Ib=require("../index"),at={};(0,Ib._assignPackageExport)("server",at)});var sm={};Fe(sm,{loadGQLSchema:()=>f$,start:()=>nm,startOnMainThread:()=>d$});function nm({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let v=function(U){if(U.kind==="NonNullType"){let Q=v(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:v(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(v,"getProperty");let T=S.name.value,A=[],N={table:null,database:null,properties:A};E.set(T,N);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)N[F.name.value]=F.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,f.push(N)}if(U.name.value==="sealed"&&(N.sealed=!0),U.name.value==="export"){N.export=!0;for(let F of U.arguments)F.name.value==="name"&&(N.export={name:F.value.value})}}let b=!1;for(let U of S.fields){let F=v(U.type);F.name=U.name.value,A.push(F);for(let M of U.directives)if(M.name.value==="primaryKey")b?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,b=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let z of M.arguments)Q[z.name.value]=z.value.value;F.relationship=Q}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let Q=F.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&Q.push(z.value.value)}}N.type=T,T==="Query"&&(h=N)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):_$.includes(S.type)||(0,wb.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,rm.dirname)(n),S.tableClass):i.set((0,rm.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var rm,wb,_$,d$,f$,Cb=Re(()=>{rm=require("path");Ae();wb=H(Qe()),_$=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(nm,"start");d$=nm,f$=nm({ensureTable:Et}).handleFile});async function b_(e){let t=(0,Mb.pathToFileURL)(e).toString();return E$?(Mc||(Mc=h$(p$)),(await(await Mc).import(t)).namespace):import(t)}async function h$(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Mc=new Compartment({console,Math,Date,fetch:m$,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Lb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yt,tables:xr,databases:ct})}};let n=await(0,Db.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Mc}function m$(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 p$(){return{Resource:Yt,tables:xr}}var Db,Lb,Mb,E$,Mc,im=Re(()=>{cn();Ae();Db=require("fs/promises"),Lb=require("path"),Mb=require("url"),E$=!1;a(b_,"secureImport");a(h$,"getCompartment");a(m$,"secureOnlyFetch");a(p$,"getGlobalVars")});var am={};Fe(am,{handleFile:()=>S$});async function S$(e,t,r,n){let s=new Map,i=await b_(r);c(i.default)&&n.set((0,om.dirname)(t),i.default),o(i,(0,om.dirname)(t));function o(u,_){for(let l in u){let d=u[l];c(d)?n.set(_+"/"+l,d):typeof d=="object"&&o(d,_+"/"+l)}}a(o,"recurseForResources");function c(u){return typeof u=="function"&&(u.get||u.put||u.post||u.delete)}return a(c,"isResource"),s}var om,Pb=Re(()=>{im();om=require("path");a(S$,"handleFile")});var um={};Fe(um,{start:()=>T$});function T$({resources:e}){e.set("login",cm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var cm,Ub=Re(()=>{cn();a(T$,"start");cm=class extends Yt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var Fb={};Fe(Fb,{parse:()=>_m,streamAsJSON:()=>Pc,stringify:()=>Fi});function Pc(e){return new lm({value:e})}function vb(e){return console.error(e),JSON.stringify(e.toString())}function Bb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Fi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Gb)return qb(e);if(t.resolution)return t.resolution.then(()=>Fi(e));throw t}}function qb(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 n=0;n<e.length;n++)n>0&&(r+=","),r+=qb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Fi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function _m(e){return A$.test(e)?g$.parse(e):JSON.parse(e)}var xb,Hb,g$,R$,Gb,lm,A$,dm=Re(()=>{xb=require("stream"),Hb=H(require("json-bigint-fixes")),g$=(0,Hb.default)({useNativeBigInt:!0}),R$=1e4,Gb={};BigInt.prototype.toJSON=function(){throw Gb};a(Pc,"streamAsJSON");lm=class extends xb.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],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(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 s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),vb)}catch(s){yield vb(s)}else yield Fi(t)}else yield Fi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Bb(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>R$?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 Bb(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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 n of this.activeIterators)t?n.throw(t):n.return();r()}};a(vb,"handleError");a(Bb,"when");a(Fi,"stringify");a(qb,"jsStringify");A$=/[[,:]\s*-?\d{16,}/;a(_m,"parse")});var ey=g((jce,Zb)=>{"use strict";var fm=require("recursive-iterator"),O$=require("alasql"),Em=require("clone"),kb=J(),{handleHDBError:Vb,hdb_errors:b$}=se(),{HDB_ERROR_MSGS:$b,HTTP_STATUS_CODES:Yb}=b$,{getDatabases:y$}=(Ae(),ie(ke)),N$=["DISTINCT_ARRAY"],Kb=Symbol("validateTables"),hm=Symbol("validateTable"),Xce=Symbol("getAllColumns"),Wb=Symbol("validateAllColumns"),y_=Symbol("findColumn"),Qb=Symbol("validateOrderBy"),Uc=Symbol("validateSegment"),mm=Symbol("validateColumn"),zb=Symbol("setColumnsForTable"),Jb=Symbol("checkColumnsForAsterisk"),Xb=Symbol("validateGroupBy"),jb=Symbol("hasColumns"),pm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Kb](),this[Jb](),this[Wb]()}[Kb](){if(this[jb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[hm](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[hm](t.table)})}}[jb](){let t=!1,r=new fm(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[hm](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=y$();if(!r[t.databaseid])throw Vb(new Error,$b.SCHEMA_NOT_FOUND(t.databaseid),Yb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Vb(new Error,$b.TABLE_NOT_FOUND(t.databaseid,t.tableid),Yb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Em(s);i.table=Em(t),this.attributes.push(i)})}[y_](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)}[Jb](){let t=new fm(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[zb](r.tableid)}[zb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new O$.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Wb](){this[Uc](this.statement.columns,!1),this[Uc](this.statement.joins,!1),this[Uc](this.statement.where,!1),this[Xb](this.statement.group,!1),this[Uc](this.statement.order,!0)}[Uc](t,r){if(!t)return;let n=new fm(t),s=[];for(let{node:i,path:o}of n)!kb.isEmpty(i)&&!kb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Qb](i):s.push(this[mm](i)));return s}[Xb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&N$.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Em(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[y_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[y_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Qb](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[mm](t)}[mm](t){let r=this[y_](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Zb.exports=pm});var ry=g((eue,ty)=>{"use strict";var Sm=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")}};ty.exports=Sm});var sy=g((rue,ny)=>{"use strict";var Tm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ny.exports=Tm});var cy={};Fe(cy,{HAS_EXPIRATION:()=>Nm,LAST_TIMESTAMP_PLACEHOLDER:()=>xc,LOCAL_TIMESTAMP:()=>I$,METADATA:()=>vc,NO_TIMESTAMP:()=>Rm,PENDING_LOCAL_TIME:()=>Im,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>ym,RecordEncoder:()=>bm,TIMESTAMP_ASSIGN_LAST:()=>C$,TIMESTAMP_ASSIGN_NEW:()=>oy,TIMESTAMP_ASSIGN_PREVIOUS:()=>ay,TIMESTAMP_PLACEHOLDER:()=>N_,TIMESTAMP_RECORD_PREVIOUS:()=>Am,getUpdateRecord:()=>wm,handleLocalTimeForGets:()=>D_});function L$(){return Bc[0]=Bc[0]^64,w$.getFloat64(0)}function D_(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?.[vc];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?.[vc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.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[vc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,ki.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<ki.length;u++){let _=ki[u].deref();(!_||_.isDone||_.isCommitted)&&ki.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function wm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",E,f){if(E||u==null?Ko=i?.localTime?Am|ay:Rm:Ko=u?i?.localTime?Am|16384:oy|16384:Rm,l>0&&(c|=Nm),w_=c,Om=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ko>0},p;try{E&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(f&&(I_=e.encoder.encode(f)),E&&i?.localTime){let A=i?.localTime,N=r.get(A);if(N){let b=Bt(N).previousLocalTime;return r.put(A,C_(o,t,n,b,T,d,I_),{ifVersion:p}),S}}r.put(xc,C_(o,t,n,i?.localTime?1:0,T,d,I_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var iy,gm,N_,xc,ym,I$,vc,Bc,w$,Rm,oy,C$,ay,Am,Nm,Im,D$,I_,Ko,w_,Om,bm,ki,Hc=Re(()=>{iy=require("msgpackr");ni();gm=H($()),N_=new Uint8Array([1,1,1,1,4,64,0,0]),xc=new Uint8Array([1,1,1,1,1,0,0,0]),ym=new Uint8Array([1,1,1,1,3,64,0,0]),I$=Symbol("local-timestamp"),vc=Symbol("metadata"),Bc=new Uint8Array(8),w$=new DataView(Bc.buffer,0,8),Rm=0,oy=0,C$=1,ay=3,Am=4,Nm=16,Im=1,Ko=0,w_=-1,Om=0,bm=class extends iy.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Ko||w_>=0){let i=0,o=Ko;o&&(i+=8,Ko=0);let c=w_,u=Om;c>=0&&(i+=2,w_=-1,u&&(i+=8,Om=0));let _=D$=r.call(this,n,s|2048|i);I_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(N_[4]=o,N_[5]=o>>8,_.set(N_,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,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Bc,0,c),c+=8;else for(let d=0;d<8;d++)Bc[d]=t[c++];u=L$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Nm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[vc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(L$,"getTimestamp");a(D_,"handleLocalTimeForGets");ki=[];setInterval(()=>{for(let e=0;e<ki.length;e++){let t=ki[e].deref();!t||t.isDone||t.isCommitted?ki.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(gm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):gm.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(wm,"getUpdateRecord")});var Gc=g((aue,ly)=>{"use strict";var uy=ee(),M$=P(),{RecordEncoder:P$}=(Hc(),ie(cy)),oue=require("fs");uy.initSync();var U$=uy.get(M$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Cm=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=U$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:P$})}};ly.exports=Cm});var qc=g((uue,_y)=>{"use strict";var Hr=ee(),un=P();Hr.initSync();var L_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Hr.get(un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};_y.exports=L_;L_.MAX_DBS=1e4});var ze=g((_ue,Ry)=>{"use strict";var Lm=require("lmdb"),wn=require("fs-extra"),Gr=require("path"),M_=Br(),Ey=$(),Er=vr().LMDB_ERRORS_ENUM,P_=sy(),Mm=Gc(),hy=qc(),si=ft(),dy=P(),{table:v$,resetDatabases:B$}=(Ae(),ie(ke)),fy=ee(),Cn=si.INTERNAL_DBIS_NAME,my=si.DBI_DEFINITION_NAME,x$="data.mdb",H$="lock.mdb",Fc=".mdb",G$="-lock",Dm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ln(t,r),this.key_type=this.dbi[si.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[si.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Lm.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function U_(e,t){if(e===void 0)throw new Error(Er.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Er.ENV_NAME_REQUIRED)}a(U_,"pathEnvNameValidation");async function Pm(e,t,r=!0){try{await wn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Er.INVALID_BASE_PATH):n}try{let n=Gr.join(e,t+Fc);return await wn.access(n,wn.constants.R_OK|wn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await wn.access(Gr.join(e,t,x$),wn.constants.R_OK|wn.constants.F_OK),Gr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Er.INVALID_ENVIRONMENT)}else throw new Error(Er.INVALID_ENVIRONMENT);throw n}}a(Pm,"validateEnvironmentPath");function v_(e,t){if(M_.validateEnv(e),t===void 0)throw new Error(Er.DBI_NAME_REQUIRED)}a(v_,"validateEnvDBIName");async function q$(e,t,r=!1,n=!1){U_(e,t);let s=Gr.basename(e);t=t.toString();let i=fy.get(dy.CONFIG_PARAMS.DATABASES);i||fy.setProperty(dy.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Pm(e,t,n),py(e,t,r)}catch(o){if(o.message===Er.INVALID_ENVIRONMENT){let c=Gr.join(e,t);await wn.mkdirp(n?c:e);let u=new hy(n?c:c+Fc,!1),_=Lm.open(u);_.dbis=Object.create(null);let l=new Mm(!1);_.openDB(Cn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Um(e,t,r);return _[si.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(q$,"createEnvironment");async function F$(e,t,r,n=!0){U_(e,t),t=t.toString();let s=Gr.join(e,t);return v$({table:t,database:Gr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(F$,"copyEnvironment");async function py(e,t,r=!1){U_(e,t),t=t.toString();let n=Um(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Pm(e,t),i=Gr.join(e,t+Fc),o=s!=i,c=new hy(s,o),u=Lm.open(c);u.dbis=Object.create(null);let _=Ty(u);for(let l=0;l<_.length;l++)ln(u,_[l]);return u[si.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(py,"openEnvironment");async function k$(e,t,r=!1){U_(e,t),t=t.toString();let n=Gr.join(e,t+Fc),s=await Pm(e,t);if(global.lmdb_map!==void 0){let i=Um(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Sy(o),delete global.lmdb_map[i]}}await wn.remove(s),await wn.remove(s===n?s+G$:Gr.join(Gr.dirname(s),H$))}a(k$,"deleteEnvironment");async function Sy(e){M_.validateEnv(e);let t=e[si.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Sy,"closeEnvironment");function Um(e,t,r=!1){let s=`${Gr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Um,"getCachedEnvironmentName");function V$(e){M_.validateEnv(e);let t=Object.create(null),r=ln(e,Cn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Cn)try{t[n]=Object.assign(new P_,s)}catch{Ey.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(V$,"listDBIDefinitions");function Ty(e){M_.validateEnv(e);let t=[],r=ln(e,Cn);for(let{key:n}of r.getRange({start:!1}))n!==Cn&&t.push(n);return t}a(Ty,"listDBIs");function $$(e,t){let n=ln(e,Cn).getEntry(t),s=new P_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Ey.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a($$,"getDBIDefinition");function gy(e,t,r,n=!r){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(Er.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ln(e,t)}catch(s){if(s.message===Er.DBI_DOES_NOT_EXIST){let i=new Mm(r,n===!0),o=e.openDB(t,i),c=new P_(r===!0,n);return o[my]=c,ln(e,Cn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(gy,"createDBI");function ln(e,t){if(v_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cn?r=$$(e,t):r=new P_,r===void 0)throw new Error(Er.DBI_DOES_NOT_EXIST);let n;try{let s=new Mm(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Er.DBI_DOES_NOT_EXIST):s}return n[my]=r,e.dbis[t]=n,n}a(ln,"openDBI");function Y$(e,t){v_(e,t),t=t.toString();let r=ln(e,t),n=r.getStats();return r[si.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(Y$,"statDBI");async function K$(e,t){try{let r=Gr.join(e,t+Fc);return(await wn.stat(r)).size}catch{throw new Error(Er.INVALID_ENVIRONMENT)}}a(K$,"environmentDataSize");function W$(e,t){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(Er.CANNOT_DROP_INTERNAL_DBIS_NAME);ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ln(e,Cn).removeSync(t)}a(W$,"dropDBI");function Q$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ln(e,i)}catch(o){if(o.message===Er.DBI_DOES_NOT_EXIST)gy(e,i,i!==t,i===t),n=!0;else throw o}}n&&B$()}a(Q$,"initializeDBIs");Ry.exports={openDBI:ln,openEnvironment:py,createEnvironment:q$,listDBIs:Ty,listDBIDefinitions:V$,createDBI:gy,dropDBI:W$,statDBI:Y$,deleteEnvironment:k$,initializeDBIs:Q$,TransactionCursor:Dm,environmentDataSize:K$,copyEnvironment:F$,closeEnvironment:Sy}});var Oy=g((fue,Ay)=>{"use strict";var vm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Ay.exports=vm});var yy=g((hue,by)=>{"use strict";var Bm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};by.exports=Bm});var Iy=g((pue,Ny)=>{"use strict";var xm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Ny.exports=xm});var Wo=g((Aue,Dy)=>{"use strict";var z$=ze(),J$=Oy(),X$=yy(),j$=Iy(),Jn=Br(),kc=vr().LMDB_ERRORS_ENUM,Z$=ft(),Rs=P(),e1=J(),t1=require("uuid"),Tue=require("lmdb"),{handleHDBError:r1,hdb_errors:n1}=se(),{OVERFLOW_MARKER:gue,MAX_SEARCH_KEY_LENGTH:Rue}=Z$,wy=ee();wy.initSync();var B_=wy.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Hm=Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Vi=Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function s1(e,t,r,n,s=Jn.getNextMonotonicTime()){km(e,t,r,n),Gm(e,t,r);let i=new J$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Cy(_,!0,s);let l=i1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return qm(o,c,n,i,s)}a(s1,"insertRecords");function i1(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Rs.FUNC_VAL],n[o]=c)}let u=Jn.getIndexedValues(c),_=e.dbis[o];if(u){B_&&_.prefetch(u.map(l=>({key:l,value:s})),x_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}B_&&e.dbis[t].prefetch([s],x_),e.dbis[t].put(s,n,n[Vi])})}a(i1,"insertRecord");function o1(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(o1,"removeSkippedRecords");function Cy(e,t,r){let n=r>0;(n||!Number.isInteger(e[Vi]))&&(e[Vi]=r||(r=Jn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Hm]))&&(e[Hm]=r||Jn.getNextMonotonicTime()):delete e[Hm]}a(Cy,"setTimestamps");function Gm(e,t,r){r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),z$.initializeDBIs(e,t,r)}a(Gm,"initializeTransaction");async function a1(e,t,r,n,s=Jn.getNextMonotonicTime()){km(e,t,r,n),Gm(e,t,r);let i=new X$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],E;try{E=Fm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),u.push(d)}return qm(c,u,n,i,s,o)}a(a1,"updateRecords");async function c1(e,t,r,n,s=Jn.getNextMonotonicTime()){try{km(e,t,r,n)}catch(u){throw r1(u,u.message,n1.HTTP_STATUS_CODES.BAD_REQUEST)}Gm(e,t,r);let i=new j$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;e1.isEmpty(_[t])?(l=t1.v4(),_[t]=l):l=_[t];let d=Fm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return qm(o,c,n,i,s)}a(c1,"upsertRecords");async function qm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Jn.getNextMonotonicTime(),o1(r,i),n}a(qm,"finalizeWrite");function Fm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Cy(r,!l,o),Number.isInteger(r[Vi])&&_[Vi]>r[Vi])return!1;l&&s.original_records.push(_);let d,E=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 N=p([[_]]);Array.isArray(N)&&(p=N[0][Rs.FUNC_VAL],r[h]=p)}if(p===T)continue;let A=Jn.getIndexedValues(T);if(A){B_&&S.prefetch(A.map(N=>({key:N,value:n})),x_);for(let N=0,b=A.length;N<b;N++)S.remove(A[N],n)}if(A=Jn.getIndexedValues(p),A){B_&&S.prefetch(A.map(N=>({key:N,value:n})),x_);for(let N=0,b=A.length;N<b;N++)S.put(A[N],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Vi])},"do_put");return u?d=c.ifVersion(n,u.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:Fm(e,t,r,n,s,i,o))}a(Fm,"updateUpsertRecord");function u1(e,t,r){if(Jn.validateEnv(e),t===void 0)throw new Error(kc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(kc.WRITE_ATTRIBUTES_REQUIRED):new Error(kc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(u1,"validateBasic");function km(e,t,r,n){if(u1(e,t,r),!Array.isArray(n))throw n===void 0?new Error(kc.RECORDS_REQUIRED):new Error(kc.RECORDS_MUST_BE_ARRAY)}a(km,"validateWrite");function x_(){}a(x_,"noop");Dy.exports={insertRecords:s1,updateRecords:a1,upsertRecords:c1}});var $i=g((bue,l1)=>{l1.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"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var jn=g((yue,Py)=>{"use strict";var My=J(),Ly=P(),Qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Xn=require("joi"),ii={schema_format:{pattern:Qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},_1=Xn.alternatives(Xn.string().min(1).max(ii.schema_length.maximum).pattern(Qo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Xn.number(),Xn.array()).required(),d1=Xn.alternatives(Xn.string().min(1).max(ii.schema_length.maximum).pattern(Qo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Xn.number()),f1=Xn.alternatives(Xn.string().min(1).max(ii.schema_length.maximum).pattern(Qo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Xn.number()).required();function E1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ii.schema_length.maximum?`'${e}' maximum of 250 characters`:Qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(E1,"checkValidTable");function h1(e,t){return My.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(h1,"validateSchemaExists");function m1(e,t){let r=t.state.ancestors[0].schema;return My.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(m1,"validateTableExists");function p1(e,t){return e.toLowerCase()===Ly.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Ly.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(p1,"validateSchemaName");Py.exports={common_validators:ii,schema_regex:Qo,hdb_schema_table:_1,validateSchemaExists:h1,validateTableExists:m1,validateSchemaName:p1,checkValidTable:E1,hdb_database:d1,hdb_table:f1}});var je=g((Iue,Uy)=>{"use strict";var hr=require("validate.js");hr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||hr.validators.type.checks[t](e)?null:` must be a '${t}' value`};hr.validators.type.checks={Object:function(e){return hr.isObject(e)&&!hr.isArray(e)},Array:hr.isArray,Integer:hr.isInteger,Number:hr.isNumber,String:hr.isString,Date:hr.isDate,Boolean:function(e){return typeof e=="boolean"}};hr.validators.hasValidFileExt=function(e,t){return hr.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};Uy.exports={validateObject:S1,validateObjectAsync:T1,validateBySchema:g1};function S1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=hr(e,t,{format:"flat"});return r?new Error(r):null}a(S1,"validateObject");async function T1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await hr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(T1,"validateObjectAsync");function g1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(g1,"validateBySchema")});var H_=g((Cue,vy)=>{var{common_validators:Zn}=jn(),$c=je(),Vc="is required",gt={database:{presence:!1,format:Zn.schema_format,length:Zn.schema_length},schema:{presence:!1,format:Zn.schema_format,length:Zn.schema_length},table:{presence:!0,format:Zn.schema_format,length:Zn.schema_length},attribute:{presence:!0,format:Zn.schema_format,length:Zn.schema_length},hash_attribute:{presence:!0,format:Zn.schema_format,length:Zn.schema_length}};function Yc(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(Yc,"makeAttributesStrings");function R1(e){return e=Yc(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,$c.validateObject(e,gt)}a(R1,"schema_object");function A1(e){return e=Yc(e),gt.table.presence={message:Vc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,$c.validateObject(e,gt)}a(A1,"table_object");function O1(e){return e=Yc(e),gt.table.presence={message:Vc},gt.attribute.presence=!1,$c.validateObject(e,gt)}a(O1,"create_table_object");function b1(e){return e=Yc(e),gt.table.presence={message:Vc},gt.attribute.presence={message:Vc},gt.hash_attribute.presence=!1,$c.validateObject(e,gt)}a(b1,"attribute_object");function y1(e){return e=Yc(e),gt.table.presence={message:Vc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,$c.validateObject(e,gt)}a(y1,"describe_table");function N1(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(N1,"validateTableResidence");vy.exports={schema_object:R1,create_table_object:O1,table_object:A1,attribute_object:b1,describe_table:y1,validateTableResidence:N1}});var xy=g((Lue,By)=>{"use strict";var I1=require("uuid"),Vm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||I1.v4(),this.schema_table=`${this.schema}.${this.table}`}};By.exports=Vm});var G_=g((Pue,Hy)=>{"use strict";var w1=xy(),$m=class extends w1{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Hy.exports=$m});var qy=g((vue,Gy)=>{"use strict";Gy.exports=D1;var C1="inserted";function D1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===C1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(D1,"returnObject")});var q_=g((xue,Yy)=>{"use strict";var L1=P(),Ym=ze(),M1=Wo(),{getSystemSchemaPath:P1,getSchemaPath:U1}=Xe(),v1=$i(),B1=H_(),x1=G_(),H1=qy(),{handleHDBError:Fy,hdb_errors:Vy}=se(),ky=J(),{HTTP_STATUS_CODES:G1}=Vy,Km=v1.hdb_attribute,$y=[];for(let e=0;e<Km.attributes.length;e++)$y.push(Km.attributes[e].attribute);var q1="inserted";Yy.exports=F1;async function F1(e){let t=B1.attribute_object(e);if(t)throw Fy(new Error,t.message,Vy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ky.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Fy(new Error,r,G1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ky.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new x1(e.schema,e.table,e.attribute,e.id);try{let i=await Ym.openEnvironment(U1(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}`);Ym.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ym.openEnvironment(P1(),L1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await M1.insertRecords(o,Km.hash_attribute,$y,[s]);return H1(q1,c,{records:[s]},u)}catch(i){throw i}}a(F1,"lmdbCreateAttribute")});var Qm=g((Gue,Wy)=>{var{hdb_table:k1,hdb_database:Ky}=jn(),V1=je(),Wm=require("joi"),$1={undefined:"undefined",null:"null"},Y1=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||$1[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),K1=Wm.object({database:Ky,schema:Ky,table:k1,records:Wm.array().items(Wm.object().custom(Y1)).required()});Wy.exports=function(e){return V1.validateBySchema(e,K1)}});var Kc=g((kue,zy)=>{"use strict";var As=J(),Qy=$(),Fue=Qm(),{getDatabases:W1}=(Ae(),ie(ke)),{ClientError:Yi}=se();zy.exports=Q1;function Q1(e){if(As.isEmpty(e))throw new Yi("invalid update parameters defined.");if(As.isEmptyOrZeroLength(e.schema))throw new Yi("invalid schema specified.");if(As.isEmptyOrZeroLength(e.table))throw new Yi("invalid table specified.");if(!Array.isArray(e.records))throw new Yi("records must be an array");let t=W1()[e.schema]?.[e.table];if(As.isEmpty(t))throw new Yi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&As.isEmptyOrZeroLength(o[r]))throw Qy.error("a valid hash attribute must be provided with update record:",o),new Yi("a valid hash attribute must be provided with update record, check log for more info");if(!As.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Qy.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Yi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!As.isEmpty(o[r])&&o[r]!==""&&n.has(As.autoCast(o[r]))&&(o.skip=!0),n.add(As.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Q1,"insertUpdateValidate")});var Xy=g(($ue,Jy)=>{"use strict";var zm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Jy.exports=zm});var eN=g((Kue,Zy)=>{"use strict";var Jm=ze(),z1=$(),jy=vr().LMDB_ERRORS_ENUM;Zy.exports=J1;async function J1(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 Jm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==jy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Jm.closeEnvironment(global.lmdb_map[n]),await Jm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==jy.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){z1.error(t)}}a(J1,"cleanLMDBMap")});var Os=g((Que,sN)=>{"use strict";var Wc=require("crypto"),X1=ee(),{CONFIG_PARAMS:j1}=P(),rN="aes-256-cbc",Z1=32,eY=16,Xm=64,nN=32,tY=Xm+nN,tN=new Map;sN.exports={encrypt:rY,decrypt:nY,createNatsTableStreamName:sY};function rY(e){let t=Wc.randomBytes(Z1),r=Wc.randomBytes(eY),n=Wc.createCipheriv(rN,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(rY,"encrypt");function nY(e){let t=e.substr(0,Xm),r=e.substr(Xm,nN),n=e.substr(tY,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Wc.createDecipheriv(rN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(nY,"decrypt");function sY(e,t){let r=X1.get(j1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=tN.get(r);return n||(n=Wc.createHash("md5").update(r).digest("hex"),tN.set(r,n)),n}a(sY,"createNatsTableStreamName")});var bs=g((Xue,oN)=>{"use strict";var Jue=qr(),Qc=$(),iN=H_(),iY=Os(),F_=J(),{handleHDBError:k_,hdb_errors:oY}=se(),{HDB_ERROR_MSGS:V_,HTTP_STATUS_CODES:jm}=oY,aY=ee();aY.initSync();var{getDatabases:Zm}=(Ae(),ie(ke)),cY=require("fs-extra");oN.exports={describeAll:uY,describeTable:$_,describeSchema:lY};async function uY(e={}){try{let t=F_.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=Zm(),o={},c={},u=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await $_({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let p=n[d].tables[f].attribute_permissions;h=await $_({schema:d,table:f,exact_count:_},p)}h&&u.push(h)}catch(h){Qc.error(h)}}let l={};for(let d in u)t||s||r?(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]):c[u[d].schema]&&(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]);for(let d in o)t||s||r?l[d]={}:c[d]&&(l[d]={});return l}catch(t){return Qc.error("Got an error in describeAll"),Qc.error(t),k_(new Error,V_.DESCRIBE_ALL_ERR)}}a(uY,"describeAll");async function $_(e,t){F_.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=iN.describe_table(e);if(i)throw i;let c=Zm()[r];if(!c)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),jm.NOT_FOUND);let u=c[n];if(!u)throw k_(new Error,V_.TABLE_NOT_FOUND(e.schema,e.table),jm.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(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),u.attributes.forEach(h=>{f[h.name]&&_(h)})}else u.attributes?.forEach(f=>_(f));let d;try{d=(await cY.stat(u.primaryStore.env.path)).size}catch(f){Qc.warn("unable to get database size",f)}let E={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,db_size:d};E.clustering_stream_name=iY.createNatsTableStreamName(E.schema,E.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=u.auditStore;if(h)for(let p of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=p[0];if(!E.last_updated_record&&u.indices.__updatedtime__)for(let p of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=p}catch(f){Qc.warn(`unable to stat table dbi due to ${f}`)}return E}a($_,"descTable");async function lY(e){F_.transformReq(e);let t=iN.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 n=e.schema.toString(),i=Zm()[n];if(!i)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),jm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),F_.isEmpty(u)||u.describe){let _=await $_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(lY,"describeSchema")});var ys=g((tle,_N)=>{var _Y=$i(),{callbackify:cN,promisify:dY}=require("util"),{getDatabases:uN}=(Ae(),ie(ke));_N.exports={setSchemaDataToGlobal:aN,getTableSchema:fY,getSystemSchema:EY,setSchemaDataToGlobalAsync:dY(aN)};var lN=bs(),Zue=cN(lN.describeAll),ele=cN(lN.describeTable);function aN(e){global.hdb_schema=uN(),e&&e()}a(aN,"setSchemaDataToGlobal");function fY(e,t,r){let n=uN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(fY,"getTableSchema");function EY(){return _Y}a(EY,"getSystemSchema")});var Fr=g((nle,hN)=>{"use strict";var K_=Qm(),Kt=J(),hY=require("util"),W_=Dn(),mY=ys(),dN=$(),{handleHDBError:Ki,hdb_errors:pY}=se(),{HTTP_STATUS_CODES:Wi}=pY,SY=hY.promisify(mY.getTableSchema),TY="updated",fN="inserted",EN="upserted";hN.exports={insert:RY,update:AY,upsert:OY,validation:gY,flush:bY};async function gY(e){if(Kt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Kt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await SY(e.schema,e.table),r=K_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Kt.isEmptyOrZeroLength(c[n]))throw dN.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(!Kt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw dN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Kt.isEmpty(c[n])&&c[n]!==""&&s.has(Kt.autoCast(c[n]))&&(c.skip=!0),s.add(Kt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(gY,"validation");async function RY(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=K_(e);if(t)throw Ki(new Error,t.message,Wi.BAD_REQUEST);Kt.transformReq(e);let r=Kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ki(new Error,r,Wi.BAD_REQUEST);let n=await W_.createRecords(e);return Y_(fN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(RY,"insertData");async function AY(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=K_(e);if(t)throw Ki(new Error,t.message,Wi.BAD_REQUEST);Kt.transformReq(e);let r=Kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ki(new Error,r,Wi.BAD_REQUEST);let n=await W_.updateRecords(e);return Kt.isEmpty(n.existing_rows)?Y_(TY,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Y_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(AY,"updateData");async function OY(e){if(e.operation!=="upsert")throw Ki(new Error,"invalid operation, must be upsert",Wi.INTERNAL_SERVER_ERROR);let t=K_(e);if(t)throw Ki(new Error,t.message,Wi.BAD_REQUEST);Kt.transformReq(e);let r=Kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ki(new Error,r,Wi.BAD_REQUEST);let n=await W_.upsertRecords(e);return Y_(EN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(OY,"upsertData");function Y_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===fN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===EN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Y_,"returnObject");function bY(e){return Kt.transformReq(e),W_.flush(e.schema,e.table)}a(bY,"flush")});var tp=g((ile,SN)=>{var yY=je(),ep=require("joi"),{hdb_table:NY,hdb_database:mN}=jn(),pN={schema:mN,database:mN,table:NY},IY={date:ep.date().iso().required()},wY={timestamp:ep.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};SN.exports=function(e,t){let r=t==="timestamp"?{...pN,...wY}:{...pN,...IY},n=ep.object(r);return yY.validateBySchema(e,n)}});var RN=g((ole,gN)=>{var CY=je(),rp=require("joi"),{hdb_table:DY,hdb_database:TN}=jn(),LY=rp.object({schema:TN,database:TN,table:DY,hash_values:rp.array().required(),ids:rp.array()});gN.exports=function(e){return CY.validateBySchema(e,LY)}});var ON=g((ale,AN)=>{"use strict";var np=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},sp=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},ip=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};AN.exports={InsertObject:np,NoSQLSeachObject:sp,DeleteResponseObject:ip}});var ci=g((ule,wN)=>{"use strict";var yN=tp(),MY=RN(),Qi=J(),bN=require("moment"),NN=$(),{promisify:PY,callbackify:UY}=require("util"),zi=P(),vY=ys(),op=PY(vY.getTableSchema),ap=Dn(),{DeleteResponseObject:BY}=ON(),{handleHDBError:oi,hdb_errors:xY}=se(),{HDB_ERROR_MSGS:Q_,HTTP_STATUS_CODES:ai}=xY,HY="records successfully deleted",GY=UY(IN);wN.exports={delete:GY,deleteRecord:IN,deleteFilesBefore:qY,deleteAuditLogsBefore:FY};async function qY(e){let t=yN(e,"date");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Qi.transformReq(e),!bN(e.date,bN.ISO_8601).isValid())throw oi(new Error,Q_.INVALID_DATE,ai.BAD_REQUEST,zi.LOG_LEVELS.ERROR,Q_.INVALID_DATE,!0);let n=Qi.checkSchemaTableExist(e.schema,e.table);if(n)throw oi(new Error,n,ai.NOT_FOUND,zi.LOG_LEVELS.ERROR,n,!0);let s=await ap.deleteRecordsBefore(e);if(await op(e.schema,e.table),NN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(qY,"deleteFilesBefore");async function FY(e){let t=yN(e,"timestamp");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Qi.transformReq(e),isNaN(e.timestamp))throw oi(new Error,Q_.INVALID_VALUE("Timestamp"),ai.BAD_REQUEST,zi.LOG_LEVELS.ERROR,Q_.INVALID_VALUE("Timestamp"),!0);let r=Qi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,zi.LOG_LEVELS.ERROR,r,!0);let n=await ap.deleteAuditLogsBefore(e);return await op(e.schema,e.table),NN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(FY,"deleteAuditLogsBefore");async function IN(e){e.ids&&(e.hash_values=e.ids);let t=MY(e);if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);Qi.transformReq(e);let r=Qi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,zi.LOG_LEVELS.ERROR,r,!0);try{await op(e.schema,e.table);let n=await ap.deleteRecords(e);return Qi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${HY}`),n}catch(n){if(n.message===zi.SEARCH_NOT_FOUND_MESSAGE){let s=new BY;return s.message=zi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(IN,"deleteRecord")});var z_=g((_le,LN)=>{var kY=require("crypto"),CN=9;function VY(e){let t=YY(CN),r=DN(e+t);return t+r}a(VY,"createHash");function $Y(e,t){let r=e?.substr(0,CN),n=r+DN(t+r);return e===n}a($Y,"validateHash");function YY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(YY,"generateSalt");function DN(e){return kY.createHash("md5").update(e).digest("hex")}a(DN,"md5");LN.exports={hash:VY,validate:$Y}});var PN=g((fle,MN)=>{var cp=je(),Zt={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 KY(e){return Zt.password.presence=!0,Zt.username.presence=!0,Zt.role.presence=!0,Zt.active.presence=!0,cp.validateObject(e,Zt)}a(KY,"addUserValidation");function WY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,cp.validateObject(e,Zt)}a(WY,"alterUserValidation");function QY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,cp.validateObject(e,Zt)}a(QY,"dropUserValidation");MN.exports={addUserValidation:KY,alterUserValidation:WY,dropUserValidation:QY}});var Ve=g((mle,vN)=>{"use strict";var{platform:hle}=require("os"),zY="nats-server.zip",up="nats-server",JY=process.platform==="win32"?`${up}.exe`:up,XY=/^[^\s.,*>]+$/,UN="__request__",jY=a(e=>`${e}.${UN}`,"REQUEST_SUBJECT"),ZY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},eK={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},tK={HUB:"hub.pid",LEAF:"leaf.pid"},rK={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},nK={SUCCESS:"success",ERROR:"error"},sK={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},iK={TXN:"txn",MSGID:"msgid"},zo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},oK={[zo.ERR]:1,[zo.WRN]:2,[zo.INF]:3,[zo.DBG]:4,[zo.TRC]:5},aK={debug:"-D",trace:"-DVV"};vN.exports={NATS_SERVER_ZIP:zY,NATS_SERVER_NAME:up,NATS_BINARY_NAME:JY,PID_FILES:tK,NATS_CONFIG_FILES:eK,SERVER_SUFFIX:rK,NATS_TERM_CONSTRAINTS_RX:XY,REQUEST_SUFFIX:UN,UPDATE_REMOTE_RESPONSE_STATUSES:nK,CLUSTER_STATUS_STATUSES:sK,REQUEST_SUBJECT:jY,SUBJECT_PREFIXES:iK,MSG_HEADERS:ZY,LOG_LEVELS:zo,LOG_LEVEL_FLAGS:aK,LOG_LEVEL_HIERARCHY:oK}});var xN=g((Sle,BN)=>{"use strict";var cK={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
7
7
  `),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
8
8
  `)},uK="certificate.pem",lK="privateKey.pem",_K="ca.pem";BN.exports={CERTIFICATE_VALUES:cK,CERTIFICATE_PEM_NAME:uK,PRIVATEKEY_PEM_NAME:lK,CA_PEM_NAME:_K}});var lp=g((gle,VN)=>{"use strict";var FN=require("fs-extra"),ae=require("joi"),dK=require("os"),{boolean:be,string:er,number:tt,array:J_}=ae.types(),{totalmem:HN}=require("os"),Ji=require("path"),fK=$(),X_=J(),Tle=xN(),GN=P(),EK=je(),qN="log",hK="components",mK="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pK="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",SK="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",TK="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",gK="rootPath config parameter is undefined",RK="clustering.enabled config parameter is undefined",Xi=tt.min(0).required(),j_=J_.items({host:er.required(),port:Xi}).empty(null),es,kN=!1;VN.exports={configValidator:AK,routesValidator:wK,route_constraints:j_};function AK(e,t=!1){if(kN=t,es=e.rootPath,X_.isEmpty(es))throw gK;let r=be.required(),n=tt.min(0).max(1e3).empty(null).default(IK),s=er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(zc),i=er.optional().empty(null),o=er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ae.string().empty(null).default(zc),u=ae.custom(bK).empty(null).default(zc),_=e.clustering?.enabled;if(X_.isEmpty(_))throw RK;let l=ae.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=ae.object({enabled:r,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:Xi,routes:j_}).required()}).required(),leafNodes:ae.object({network:ae.object({port:Xi}).required()}).required(),network:ae.object({port:Xi}).required()}).required(),leafServer:ae.object({network:ae.object({port:Xi,routes:j_}).required(),streams:ae.object({maxAge:tt.min(120).allow(null).optional(),maxBytes:tt.min(1).allow(null).optional(),maxMsgs:tt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:be.optional(),databaseLevel:be.optional(),tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required(),verify:be.optional()}),user:er.optional().empty(null)}).required():d=ae.object({enabled:r,tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:be,cacheTTL:tt.required(),enableSessions:be}),analytics:ae.object({aggregatePeriod:tt}),componentsRoot:s.optional(),clustering:d,localStudio:ae.object({enabled:r}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:be,logSuccessful:be}),file:be.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:be.optional(),compress:be.optional(),interval:er.custom(NK).optional().empty(null),maxSize:er.custom(yK).optional().empty(null),path:er.optional().empty(null).default(zc)}).required(),root:s,stdStreams:be.required(),auditLog:be.required()}).required(),operationsApi:ae.object({network:ae.object({cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),keepAliveTimeout:tt.min(1).optional(),port:tt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(zc),securePort:tt.optional().empty(null),timeout:tt.min(1).optional()}).optional(),tls:ae.alternatives([ae.array().items(l),l])}).required(),rootPath:er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:Xi,securePort:Xi,mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})])}).required(),webSocket:be.optional(),requireAuthentication:be.optional()}),http:ae.object({compressionThreshold:tt.optional(),cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),port:tt.min(0).optional().empty(null),securePort:tt.min(0).optional().empty(null),maxHeaderSize:tt.optional(),mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})]),threadRange:ae.alternatives([J_.optional(),er.optional()])}).required(),threads:ae.alternatives(n.optional(),ae.object({count:n.optional(),debug:ae.alternatives(be.optional(),ae.object({startingPort:tt.min(1).optional(),host:er.optional(),waitForDebugger:be.optional()})),maxHeapMemory:tt.min(0).optional()})),storage:ae.object({writeAsync:be.required(),overlappingSync:be.optional(),caching:be.optional(),compression:ae.alternatives([be.optional(),ae.object({dictionary:er.optional(),threshold:tt.optional()})]),compactOnStart:be.optional(),compactOnStartKeepBackup:be.optional(),noReadAhead:be.optional(),path:u,prefetchWrites:be.optional(),maxFreeSpaceToLoad:tt.optional(),maxFreeSpaceToRetain:tt.optional()}).required(),ignoreScripts:be.optional(),tls:ae.alternatives([ae.array().items(l),l])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(AK,"configValidator");function OK(e){return kN||FN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(OK,"doesPathExist");function bK(e,t){ae.assert(e,er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=OK(e);if(r)return t.message(r)}a(bK,"validatePath");function yK(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(SK):e}a(yK,"validateRotationMaxSize");function NK(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(TK):e}a(NK,"validateRotationInterval");function IK(e,t){let r=t.state.path.join("."),n=dK.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||HN();return i=Math.round(Math.min(i,HN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),fK.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(IK,"setDefaultThreads");function zc(e,t){let r=t.state.path.join(".");if(!X_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(X_.isEmpty(es))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ji.join(es,hK);case"logging.root":return Ji.join(es,qN);case"clustering.leafServer.streams.path":return Ji.join(es,"clustering","leaf");case"storage.path":let n=Ji.join(es,GN.LEGACY_DATABASES_DIR_NAME);return FN.existsSync(n)?n:Ji.join(es,GN.DATABASES_DIR_NAME);case"logging.rotation.path":return Ji.join(es,qN);case"operationsApi.network.domainSocket":return r==null?null:Ji.join(es,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(zc,"setDefaultRoot");function wK(e){let t=ae.object({routes:j_});return EK.validateBySchema({routes:e},t)}a(wK,"routesValidator")});var pr=g((Ole,jN)=>{"use strict";var Vr=P(),xt=J(),It=$(),{configValidator:CK,routesValidator:$N}=lp(),mr=require("fs-extra"),DK=require("yaml"),Ln=require("path"),LK=require("is-number"),KN=require("properties-reader"),MK=require("lodash"),{handleHDBError:PK}=se(),{HTTP_STATUS_CODES:UK,HDB_ERROR_MSGS:Z_}=vr(),Ale=require("minimist"),{server:vK}=(fr(),ie(qi)),{DATABASES_PARAM_CONFIG:Jc,CONFIG_PARAMS:kr,CONFIG_PARAM_MAP:Mn}=Vr,BK="Unable to get config value because config is uninitialized",xK="Config successfully initialized",HK="Error backing up config file",GK="Empty parameter sent to getConfigValue",WN=Ln.join(Vr.PACKAGE_ROOT,"config","yaml",Vr.HDB_DEFAULT_CONFIG_FILE),qK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",YN={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"},ed,wt,td;jN.exports={createConfigFile:FK,getDefaultConfig:kK,getConfigValue:zN,initConfig:dp,flattenConfig:Jo,updateConfigValue:JN,updateConfigObject:$K,getConfiguration:WK,setConfiguration:QK,readConfigFile:Ep,getClusteringRoutes:zK,initOldConfig:XN,getConfigFromFile:JK,getConfigFilePath:ji,addConfig:XK,deleteConfigFromFile:jK,getConfigObj:ZK};function FK(e,t=!1){let r=ui(WN);ed=Jo(r.toJSON());let n;for(let c in e){let u=Mn[c.toLowerCase()];if(u===kr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=_p(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){It.error(d)}}}n&&QN(r,n),fp(r,t);let s=r.toJSON();wt=Jo(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,Vr.HDB_CONFIG_FILE);mr.createFileSync(o),mr.writeFileSync(o,String(r)),It.trace(`Config file written to ${o}`)}a(FK,"createConfigFile");function QN(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!xt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Jc.TABLES))for(let i in n[s][Jc.TABLES])for(let o in n[s][Jc.TABLES][i]){let c=n[s][Jc.TABLES][i][o],u=[kr.DATABASES,s,Jc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[kr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){It.error("Error parsing schemas CLI/env config arguments",n)}}a(QN,"setSchemasConfig");function kK(e){if(ed===void 0){let r=ui(WN);ed=Jo(r.toJSON())}let t=Mn[e.toLowerCase()];if(t!==void 0)return ed[t.toLowerCase()]}a(kK,"getDefaultConfig");function zN(e){if(e==null){It.error(GK);return}if(wt===void 0){It.trace(BK);return}let t=Mn[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(zN,"getConfigValue");function ji(e=xt.getPropsFilePath()){let t=xt.getEnvCliRootPath();return t?Ln.join(t,Vr.HDB_CONFIG_FILE):KN(e).get(Vr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ji,"getConfigFilePath");function dp(e=!1){if(wt===void 0||e){let t;if(!xt.noBootFile()){t=xt.getPropsFilePath();try{mr.accessSync(t,mr.constants.F_OK|mr.constants.R_OK)}catch(i){throw It.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ji(t),n;if(r.includes("config/settings.js"))try{XN(r);return}catch(i){if(i.code!==Vr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===Vr.NODE_ERROR_CODES.ENOENT){It.trace(`HarperDB config file not found at ${r}.
9
- This can occur during early stages of install where the config file has not yet been created`);return}else throw It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}VK(n,r),fp(n);let s=n.toJSON();if(vK.config=s,wt=Jo(s),wt.logging_rotation_rotate)for(let i in YN)wt[i]&&It.error(`Config ${YN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(xK)}}a(dp,"initConfig");function VK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),mr.writeFileSync(t,String(e)))}a(VK,"checkForUpdatedConfig");function fp(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=CK(r,t);if(n.error)throw Z_.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(fp,"validateConfig");function $K(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a($K,"updateConfigObject");function JN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&dp();let o=zN(Mn.hdb_root),c=Ln.join(o,Vr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=_p(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===kr.HTTP_SECUREPORT&&r[E]===wt[kr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Vr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=_p(f,r[E]);f==="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){It.error(T)}}}_&&QN(u,_),fp(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,Vr.HDB_CONFIG_FILE);n===!0&&YK(c,l),mr.writeFileSync(d,String(u)),s&&(wt=Jo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(JN,"updateConfigValue");function YK(e,t){try{let r=Ln.join(t,"backup",`${Vr.HDB_CONFIG_FILE}.bak`);mr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(HK),It.error(r)}}a(YK,"backupConfigFile");var KK=["databases"];function Jo(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)),td=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!KK.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!kr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Jo,"flattenConfig");function _p(e,t){if(e===kr.CLUSTERING_NODENAME||e===kr.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(LK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||xt.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 xt.autoCast(t)}a(_p,"castConfigValue");function WK(){let e=xt.getPropsFilePath(),t=ji(e);return ui(t).toJSON()}a(WK,"getConfiguration");async function QK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return JN(void 0,void 0,s,!0),qK}catch(i){throw typeof i=="string"||i instanceof String?PK(i,i,UK.BAD_REQUEST,void 0,void 0,!0):i}}a(QK,"setConfiguration");function Ep(){let e=xt.getPropsFilePath();try{mr.accessSync(e,mr.constants.F_OK|mr.constants.R_OK)}catch(n){if(!xt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ui(t).toJSON()}a(Ep,"readConfigFile");function ui(e){return DK.parseDocument(mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function zK(){let e=Ep(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=xt.isEmptyOrZeroLength(t)?[]:t;let r=$N(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=xt.isEmptyOrZeroLength(n)?[]:n;let s=$N(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!xt.isEmptyOrZeroLength(n)&&!xt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!xt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(zK,"getClusteringRoutes");function XN(e){let t=KN(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(xt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===kr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(XN,"initOldConfig");function JK(e){let t=Ep();return MK.get(t,e.replaceAll("_","."))}a(JK,"getConfigFromFile");async function XK(e,t){let r=ui(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await mr.writeFile(ji(),String(r))}a(XK,"addConfig");function jK(e){let t=ji(xt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,Vr.HDB_CONFIG_FILE);mr.writeFileSync(s,String(r))}a(jK,"deleteConfigFromFile");function ZK(){return td||(dp(),td)}a(ZK,"getConfigObj")});var eI=g((yle,ZN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},hp=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ZN.exports={BaseLicense:nd,ExtendedLicense:hp}});var Zi=g((Ile,oI)=>{"use strict";var jo=require("fs-extra"),rI=z_(),nI=require("crypto"),eW=require("moment"),tW=require("uuid").v4,tr=$(),pp=require("path"),rW=J(),li=P(),{totalmem:tI}=require("os"),nW=eI().ExtendedLicense,Xo="invalid license key format",sW="061183",iW="mofi25",oW="aes-256-cbc",aW=16,cW=32,sI=ee();sI.initSync();var mp;oI.exports={validateLicense:iI,generateFingerPrint:lW,licenseSearch:gp,getLicense:fW,checkMemoryLimit:EW};function Sp(){return pp.join(sI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Sp,"getLicenseDirPath");function uW(){let e=Sp();return pp.join(e,li.LICENSE_FILE_NAME)}a(uW,"getLicenseFilePath");function Tp(){let e=Sp();return pp.join(e,li.REG_KEY_FILE_NAME)}a(Tp,"getFingerPrintFilePath");async function lW(){let e=Tp();try{return await jo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await _W();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(lW,"generateFingerPrint");async function _W(){let e=tW(),t=rI.hash(e),r=Tp();try{await jo.mkdirp(Sp()),await jo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(_W,"writeFingerprint");function iI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=Tp(),s=!1;try{s=jo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=jo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(iW),c=o[1];c=Buffer.concat([Buffer.from(c)],aW);let u=Buffer.concat([Buffer.from(i)],cW),_=nI.createDecipheriv(oW,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 f=dW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Xo),tr.error(Xo),new Error(Xo)}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(Xo),tr.error(Xo),new Error(Xo)}else r.exp_date=l;r.exp_date<eW().valueOf()&&(r.valid_date=!1),rI.validate(o[1],`${sW}${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||tr.error("Invalid licence"),r}a(iI,"validateLicense");function dW(e,t){try{let r=nI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(dW,"checkOldLicense");function gp(){let e=new nW,t=[];try{t=jo.readFileSync(uW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(rW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=iI(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return mp=e,e}a(gp,"licenseSearch");async function fW(){return mp||await gp(),mp}a(fW,"getLicense");function EW(){let e=gp().ram_allocation,t=process.constrainedMemory?.()||tI();if(t=Math.round(Math.min(t,tI())/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(EW,"checkMemoryLimit")});var _n=g((Mle,AI)=>{"use strict";var lI="username is required",_I="nothing to update, must supply active, role or password to update",dI="password cannot be an empty string",fI="If role is specified, it cannot be empty.",EI="active must be true or false";AI.exports={addUser:OW,alterUser:bW,dropUser:NW,getSuperUser:DW,userInfo:IW,listUsers:id,listUsersExternal:wW,setUsersToGlobal:ea,findAndValidateUser:gI,getClusterUser:LW,USERNAME_REQUIRED:lI,ALTERUSER_NOTHING_TO_UPDATE:_I,EMPTY_PASSWORD:dI,EMPTY_ROLE:fI,ACTIVE_BOOLEAN:EI};var hI=Fr(),hW=ci(),Op=z_(),mI=PN(),pI=qr(),bp=Ns(),$r=J(),SI=require("validate.js"),Oe=$(),{promisify:mW}=require("util"),yp=Os(),aI=P(),cI=Ve(),pW=pr(),Cle=ee(),Dle=Zi(),SW=$i(),{table:Lle}=(Ae(),ie(ke)),{handleHDBError:ts,hdb_errors:TW}=se(),{HTTP_STATUS_CODES:rs,AUTHENTICATION_ERROR_MSGS:Rp,HDB_ERROR_MSGS:Zo}=TW,{UserEventMsg:Np}=Pn(),Ap=require("lodash"),{server:Ip}=(fr(),ie(qi)),gW=$();Ip.getUser=(e,t)=>gI(e,t,t!=null);var TI={username:!0,active:!0,role:!0,password:!0},uI=new Map,sd=pI.searchByValue,RW=pI.searchByHash,AW=mW(hW.delete);async function OW(e){let t=SI.cleanAttributes(e,TI),r=mI.addUserValidation(t);if(r)throw ts(new Error,r.message,rs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw ts(new Error,Zo.ROLE_NAME_NOT_FOUND(t.role),rs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw ts(new Error,Zo.DUP_ROLES_FOUND(t.role),rs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=yp.encrypt(t.password)),t.password=Op.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await hI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await ea()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw ts(new Error,Zo.USER_ALREADY_EXISTS(t.username),rs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],bp.signalUserChange(new Np(process.pid)),`${c.username} successfully added`}a(OW,"addUser");async function bW(e){let t=SI.cleanAttributes(e,TI);if($r.isEmptyOrZeroLength(t.username))throw new Error(lI);if($r.isEmptyOrZeroLength(t.password)&&$r.isEmptyOrZeroLength(t.role)&&$r.isEmptyOrZeroLength(t.active))throw new Error(_I);if(!$r.isEmpty(t.password)&&$r.isEmptyOrZeroLength(t.password.trim()))throw new Error(dI);if(!$r.isEmpty(t.active)&&!$r.isBoolean(t.active))throw new Error(EI);let r=yW(t.username);if(!$r.isEmpty(t.password)&&!$r.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=yp.encrypt(t.password)),t.password=Op.hash(t.password)),t.role==="")throw new Error(fI);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 sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Zo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),ts(new Error,c,rs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Zo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),ts(new Error,c,rs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await hI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await ea()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return bp.signalUserChange(new Np(process.pid)),s}a(bW,"alterUser");function yW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yW,"isClusterUser");async function NW(e){try{let t=mI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($r.isEmpty(global.hdb_users.get(e.username)))throw ts(new Error,Zo.USER_NOT_EXIST(e.username),rs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await AW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await ea()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return bp.signalUserChange(new Np(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(NW,"dropUser");async function IW(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:["*"]},n;try{n=await RW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(IW,"userInfo");async function wW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(wW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.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 n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Ap.cloneDeep(o),o.role=r[o.role],CW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),$r.errorizeMessage(e)}return null}a(id,"listUsers");function CW(e){try{if(!e){Oe.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(SW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(CW,"appendSystemTablesToRole");async function ea(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(ea,"setUsersToGlobal");async function gI(e,t,r=!0){global.hdb_users||await ea();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw ts(new Error,Rp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw ts(new Error,Rp.USER_INACTIVE,rs.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(uI.get(t)===n.password)return s;if(Op.validate(n.password,t))uI.set(t,n.password);else throw ts(new Error,Rp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(gI,"findAndValidateUser");async function DW(){global.hdb_users||await ea();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(DW,"getSuperUser");async function LW(){let e=await id(),t=pW.getConfigFromFile(aI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$r.isEmpty(r)&&r?.role?.role===aI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=yp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+cI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+cI.SERVER_SUFFIX.ADMIN,r}a(LW,"getClusterUser");var RI=[];Ip.invalidateUser=function(e){for(let t of RI)try{t(e)}catch(r){gW.error("Error invalidating user",r)}};Ip.onInvalidatedUser=function(e){RI.push(e)}});var jc=g((Ble,NI)=>{"use strict";var eo=$(),Yr=P(),MW=eN(),Ule=ys(),vle=bs(),PW=_n(),{validateEvent:OI}=Pn(),Xc=Dn(),UW=require("process"),{resetDatabases:vW}=(Ae(),ie(ke)),BW={[Yr.ITC_EVENT_TYPES.SCHEMA]:xW,[Yr.ITC_EVENT_TYPES.USER]:yI};async function xW(e){let t=OI(e);if(t){eo.error(t);return}eo.trace("ITC schemaHandler received schema event:",e),await MW(e.message),await HW(e.message)}a(xW,"schemaHandler");async function HW(e){try{Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=vW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){eo.error(t)}}a(HW,"syncSchemaMetadata");var bI=[];async function yI(e){try{try{Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){eo.warn(r)}let t=OI(e);if(t){eo.error(t);return}eo.trace(`ITC userHandler ${Yr.HDB_ITC_CLIENT_PREFIX}${UW.pid} received user event:`,e),await PW.setUsersToGlobal();for(let r of bI)r()}catch(t){eo.error(t)}}a(yI,"userHandler");yI.addListener=function(e){bI.push(e)};NI.exports=BW});var Pn=g((kle,wI)=>{"use strict";var Hle=$(),wp=J(),GW=P(),{ITC_ERRORS:Zc}=vr(),{parentPort:Gle,threadId:qW,isMainThread:FW,workerData:qle}=require("worker_threads"),{onMessageFromWorkers:kW,broadcast:Fle,broadcastWithAcknowledgement:VW}=Qe();wI.exports={sendItcEvent:$W,validateEvent:II,SchemaEventMsg:YW,UserEventMsg:KW};var od;kW(async(e,t)=>{od=od||jc(),II(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function $W(e){return!FW&&e.message&&(e.message.originator=qW),VW(e)}a($W,"sendItcEvent");function II(e){if(typeof e!="object")return Zc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||wp.isEmpty(e.type))return Zc.MISSING_TYPE;if(!e.hasOwnProperty("message")||wp.isEmpty(e.message))return Zc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||wp.isEmpty(e.message.originator))return Zc.MISSING_ORIGIN;if(GW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Zc.INVALID_EVENT(e.type)}a(II,"validateEvent");function YW(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(YW,"SchemaEventMsg");function KW(e){this.originator=e}a(KW,"UserEventMsg")});var Ns=g((Yle,MI)=>{"use strict";var CI=P(),$le=J(),ad=$(),DI=Xy(),ta,{sendItcEvent:LI}=Pn();function WW(e){try{ad.trace("signalSchemaChange called with message:",e),ta=ta||jc();let t=new DI(CI.ITC_EVENT_TYPES.SCHEMA,e);return ta.schema(t),LI(t)}catch(t){ad.error(t)}}a(WW,"signalSchemaChange");function QW(e){try{ad.trace("signalUserChange called with message:",e),ta=ta||jc();let t=new DI(CI.ITC_EVENT_TYPES.USER,e);return ta.user(t),LI(t)}catch(t){ad.error(t)}}a(QW,"signalUserChange");MI.exports={signalSchemaChange:WW,signalUserChange:QW}});var cd=g((Wle,UI)=>{"use strict";var PI=J(),zW=P(),JW=$(),XW=q_(),jW=G_(),ZW=Ns(),{SchemaEventMsg:eQ}=Pn(),tQ="already exists in";UI.exports=rQ;async function rQ(e,t,r){if(PI.isEmptyOrZeroLength(r))return r;let n=[];PI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await nQ(e,t.schema,t.name,i)})),s}a(rQ,"lmdbCheckForNewAttributes");async function nQ(e,t,r,n){let s=new jW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await sQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(tQ))JW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(nQ,"createNewAttribute");async function sQ(e){let t;return t=await XW(e),ZW.signalSchemaChange(new eQ(process.pid,zW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(sQ,"createAttribute")});var ra=g((zle,vI)=>{"use strict";var Cp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};vI.exports=Cp});var xI=g((Xle,BI)=>{"use strict";var iQ=ra(),oQ=P().OPERATIONS_ENUM,Dp=class extends iQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(oQ.INSERT,r,n,s,i),this.records=t}};BI.exports=Dp});var GI=g((Zle,HI)=>{"use strict";var aQ=ra(),cQ=P().OPERATIONS_ENUM,Lp=class extends aQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=Lp});var FI=g((t_e,qI)=>{"use strict";var uQ=ra(),lQ=P().OPERATIONS_ENUM,Mp=class extends uQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(lQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};qI.exports=Mp});var VI=g((n_e,kI)=>{"use strict";var _Q=ra(),dQ=P().OPERATIONS_ENUM,Pp=class extends _Q{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(dQ.DELETE,n,s,t,i),this.original_records=r}};kI.exports=Pp});var eu=g((o_e,WI)=>{"use strict";var i_e=require("path"),$I=ze(),fQ=xI(),EQ=GI(),hQ=FI(),mQ=VI(),na=ft(),YI=J(),{CONFIG_PARAMS:pQ}=P(),KI=ee();KI.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:SQ}=Xe();WI.exports=TQ;async function TQ(e,t){if(KI.get(pQ.LOGGING_AUDITLOG)===!1)return;let r=SQ(e.schema,e.table),n=await $I.openEnvironment(r,e.table,!0),s=gQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){$I.initializeDBIs(n,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),YI.isEmpty(s.user_name)||n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(TQ,"writeTransaction");function gQ(e,t){let r=YI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new fQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new EQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new hQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new mQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(gQ,"createTransactionObject")});var Up=g((u_e,QI)=>{"use strict";var RQ=Kc(),c_e=Cc(),tu=P(),AQ=Dc(),OQ=Wo().insertRecords,bQ=ze(),yQ=$(),NQ=cd(),{getSchemaPath:IQ}=Xe(),wQ=eu();QI.exports=CQ;async function CQ(e){try{let{schema_table:t,attributes:r}=RQ(e);AQ(e,r,t.hash_attribute),e.schema!==tu.SYSTEM_SCHEMA_NAME&&(r.includes(tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await NQ(e.hdb_auth_header,t,r),s=IQ(e.schema,e.table),i=await bQ.openEnvironment(s,e.table),o=await OQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await wQ(e,o)}catch(c){yQ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(CQ,"lmdbCreateRecords")});var XI=g((__e,JI)=>{"use strict";var zI=P(),DQ=Up(),LQ=Cc(),MQ=require("fs-extra"),{getSchemaPath:PQ}=Xe();JI.exports=UQ;async function UQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new LQ(zI.SYSTEM_SCHEMA_NAME,zI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await DQ(r),await MQ.mkdirp(PQ(e.schema))}a(UQ,"lmdbCreateSchema")});var ZI=g((f_e,jI)=>{"use strict";var vp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};jI.exports=vp});var nw=g((S_e,rw)=>{"use strict";var ew=ze(),Bp=Br(),xp=vr().LMDB_ERRORS_ENUM,vQ=ft(),tw=$(),h_e=J(),BQ=require("lmdb"),xQ=ZI(),HQ=P(),{OVERFLOW_MARKER:m_e,MAX_SEARCH_KEY_LENGTH:p_e}=vQ,GQ=HQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function qQ(e,t,r,n){if(Bp.validateEnv(e),t===void 0)throw new Error(xp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xp.IDS_REQUIRED):new Error(xp.IDS_MUST_BE_ITERABLE);try{let s=ew.listDBIs(e);ew.initializeDBIs(e,t,s);let i=new xQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[GQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,BQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],N=h[T];if(N!=null)try{let b=Bp.getIndexedValues(N);if(b)for(let v=0,U=b.length;v<U;v++)A.remove(b[v],o)}catch{tw.warn(`cannot delete from attribute: ${T}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){tw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Bp.getNextMonotonicTime(),i}catch(s){throw s}}a(qQ,"deleteRecords");rw.exports={deleteRecords:qQ}});var ru=g((g_e,iw)=>{"use strict";var sa=J(),FQ=nw(),kQ=ze(),{getSchemaPath:VQ}=Xe(),$Q=eu(),YQ=$();iw.exports=KQ;async function KQ(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(sa.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(sa.isEmptyOrZeroLength(e.hash_values)&&!sa.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];sa.isEmpty(u)||e.hash_values.push(u)}}if(sa.isEmptyOrZeroLength(e.hash_values))return sw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(sa.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=VQ(e.schema,e.table),i=await kQ.openEnvironment(s,e.table),o=await FQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await $Q(e,o)}catch(c){YQ.error(`unable to write transaction due to ${c.message}`)}return sw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(KQ,"lmdbDeleteRecords");function sw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(sw,"createDeleteResponse")});var Gp=g((O_e,ow)=>{"use strict";var WQ=P(),A_e=Br();function Hp(e,t){let r=Object.create(null);if(t.length===1&&WQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Hp,"parseRow");function QQ(e,t,r,n){let s=Hp(r,e);n.push(s)}a(QQ,"searchAll");function zQ(e,t,r,n){let s=Hp(r,e);n[t]=s}a(zQ,"searchAllToMap");function JQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(JQ,"iterateDBI");function to(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(to,"pushResults");function XQ(e,t,r,n,s,i){t.toString().endsWith(e)&&to(t,r,n,s,i)}a(XQ,"endsWith");function jQ(e,t,r,n,s,i){t.toString().includes(e)&&to(t,r,n,s,i)}a(jQ,"contains");function ZQ(e,t,r,n,s,i){t>e&&to(t,r,n,s,i)}a(ZQ,"greaterThanCompare");function ez(e,t,r,n,s,i){t>=e&&to(t,r,n,s,i)}a(ez,"greaterThanEqualCompare");function tz(e,t,r,n,s,i){t<e&&to(t,r,n,s,i)}a(tz,"lessThanCompare");function rz(e,t,r,n,s,i){t<=e&&to(t,r,n,s,i)}a(rz,"lessThanEqualCompare");ow.exports={parseRow:Hp,searchAll:QQ,searchAllToMap:zQ,iterateDBI:JQ,endsWith:XQ,contains:jQ,greaterThanCompare:ZQ,greaterThanEqualCompare:ez,lessThanCompare:tz,lessThanEqualCompare:rz,pushResults:to}});var ia=g((w_e,fw)=>{"use strict";var _i=ze(),y_e=$(),Kr=Br(),ld=ft(),ht=vr().LMDB_ERRORS_ENUM,N_e=J(),nz=P(),_d=Gp(),{parseRow:sz}=_d,I_e=require("lmdb"),{OVERFLOW_MARKER:aw,MAX_SEARCH_KEY_LENGTH:iz}=ld;function cw(e,t,r,n=!1,s=void 0,i=void 0){return ro(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(cw,"iterateFullIndex");function nu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return ro(e,t,r,(l,d,E,f)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(A.values=!1,d.getRange(A).map(N=>({value:N}))):d.getRange(A)})}a(nu,"iterateRangeBetween");function ro(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ro,"setupTransaction");function uw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(aw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(uw,"getOverflowCheck");function oz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return ro(e,t,t,(o,c,u)=>(dd(r),r=su(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>sz(_.value,r))))}a(oz,"searchAll");function az(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=su(e.database||e,r);let o=new Map;for(let{key:c,value:u}of cw(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(az,"searchAllToMap");function cz(e,t,r=!1,n=void 0,s=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=cw(e,void 0,t,r,n,s),c=o.transaction,u=uw(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(cz,"iterateDBI");function uz(e,t){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(uz,"countAll");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),ro(e,t,r,(c,u,_,l)=>(n=Kr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(lz,"equals");function _z(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(_z,"count");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),ro(e,null,r,(c,u)=>{n=Kr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(dz,"startsWith");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){return lw(e,t,r,n,s,i,o,!0)}a(fz,"endsWith");function lw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),ro(e,null,r,(u,_,l,d)=>{let E=uw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(aw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(lw,"contains");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),nu(e,t,r,n,u,s,i,o,!0,!1)}a(Ez,"greaterThan");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),nu(e,t,r,n,u,s,i,o,!1,!1)}a(hz,"greaterThanEqual");function mz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),nu(e,t,r,u,n,s,i,o,!1,!0)}a(mz,"lessThan");function pz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),nu(e,t,r,u,n,s,i,o,!1,!1)}a(pz,"lessThanEqual");function Sz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Kr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Kr.convertKeyValueToWrite(n),s=Kr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return nu(e,t,r,n,s,i,o,c)}a(Sz,"between");function Tz(e,t,r,n){Kr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=su(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(Tz,"searchByHash");function gz(e,t,r){Kr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(gz,"checkHashExists");function Rz(e,t,r,n,s=[]){return dw(e,t,r,n,s),_w(e,t,r,n,s).map(i=>i[1])}a(Rz,"batchSearchByHash");function Az(e,t,r,n,s=[]){dw(e,t,r,n,s);let i=new Map;for(let[o,c]of _w(e,t,r,n,s))i.set(o,c);return i}a(Az,"batchSearchByHashToMap");function _w(e,t,r,n,s=[]){return ro(e,t,t,(i,o,c)=>{r=su(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(_w,"batchHashSearch");function dw(e,t,r,n,s){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(dw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>iz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function su(e,t){return t.length===1&&nz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(su,"setGetWholeRowAttributes");fw.exports={searchAll:oz,searchAllToMap:az,count:_z,countAll:uz,equals:lz,startsWith:dz,endsWith:fz,contains:lw,searchByHash:Tz,setGetWholeRowAttributes:su,batchSearchByHash:Rz,batchSearchByHashToMap:Az,checkHashExists:gz,iterateDBI:cz,greaterThan:Ez,greaterThanEqual:hz,lessThan:mz,lessThanEqual:pz,between:Sz}});var oa=g((D_e,Sw)=>{var Ew=require("lodash"),hw=je(),he=require("joi"),Oz=J(),{hdb_schema_table:iu,checkValidTable:mw,hdb_table:pw,hdb_database:fd}=jn(),{handleHDBError:bz,hdb_errors:yz}=se(),{getDatabases:Nz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:Iz}=yz,wz=he.object({database:fd,schema:fd,table:pw,search_attribute:iu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(iu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Cz=he.object({database:fd,schema:fd,table:pw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(iu,he.object())).optional(),sort:he.object({attribute:he.alternatives(iu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(iu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});Sw.exports=function(e,t){let r=null;switch(t){case"value":r=hw.validateBySchema(e,wz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(mw("database",e.schema)),i(mw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=hw.validateBySchema(e,Cz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Oz.checkGlobalSchemaTable(e.schema,e.table);if(s)return bz(new Error,s,Iz.NOT_FOUND);let o=Nz()[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,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Ew.filter(c,l=>l!=="*"&&!l.startsWith?.("$")&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!Ew.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 qp=g((M_e,Tw)=>{"use strict";var Dz=ze(),Lz=oa(),{getSchemaPath:Mz}=Xe();Tw.exports=Pz;function Pz(e){let t=Lz(e,"hashes");if(t)throw t;let r=Mz(e.schema,e.table);return Dz.openEnvironment(r,e.table)}a(Pz,"initialize")});var Fp=g((U_e,gw)=>{"use strict";var Uz=ia(),vz=qp();gw.exports=Bz;async function Bz(e){let t=await vz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Uz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Bz,"lmdbGetDataByHash")});var aa=g((B_e,Rw)=>{"use strict";var kp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Rw.exports=kp});var Ow=g((G_e,Aw)=>{"use strict";var H_e=aa(),xz=ia(),Hz=qp();Aw.exports=Gz;async function Gz(e){let t=await Hz(e),r=global.hdb_schema[e.schema][e.table];return xz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Gz,"lmdbSearchByHash")});var ns=g((F_e,bw)=>{"use strict";var Vp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};bw.exports=Vp});var Ed=g((V_e,Dw)=>{"use strict";var rr=ia(),qz=ze(),Fz=J(),me=ft(),no=P(),kz=$i(),yw=vr().LMDB_ERRORS_ENUM,{getSchemaPath:Vz}=Xe(),Is=no.SEARCH_WILDCARDS;async function $z(e,t,r){let n;e.schema===no.SYSTEM_SCHEMA_NAME?n=kz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Cw(e,n.hash_attribute,r,t);return Iw(e,s,n.hash_attribute,r)}a($z,"prepSearch");async function Iw(e,t,r,n){let s=Vz(e.schema,e.table),i=await qz.openEnvironment(s,e.table),o=ww(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Yz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Nw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?Nw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(Iw,"executeSearch");function ww(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(ww,"searchByType");function Nw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Nw,"createMapFromIterable");function Yz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Yz,"checkToFetchMore");function Cw(e,t,r,n){if(Fz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(yw.UNKNOWN_SEARCH_TYPE)}else switch(n){case no.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case no.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case no.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case no.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case no.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(yw.UNKNOWN_SEARCH_TYPE)}}a(Cw,"createSearchTypeFromSearchObject");Dw.exports={executeSearch:Iw,createSearchTypeFromSearchObject:Cw,prepSearch:$z,searchByType:ww}});var Mw=g((K_e,Lw)=>{"use strict";var Y_e=ns(),Kz=oa(),Wz=J(),Qz=P(),zz=Ed();Lw.exports=Jz;function Jz(e,t){if(!Wz.isEmpty(t)&&Qz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kz(e,"value");if(n)throw n;return zz.prepSearch(e,t,!0)}a(Jz,"lmdbGetDataByValue")});var ou=g((z_e,Pw)=>{"use strict";var Q_e=ns(),Xz=oa(),jz=J(),Zz=P(),e2=Ed();Pw.exports=t2;async function t2(e,t){if(!jz.isEmpty(t)&&Zz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Xz(e,"value");if(n)throw n;return e2.prepSearch(e,t,!1)}a(t2,"lmdbSearchByValue")});var vw=g((j_e,Uw)=>{"use strict";var X_e=ft(),$p=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Yp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Uw.exports={SearchByConditionsObject:$p,SearchCondition:Yp,SortAttribute:Kp}});var qw=g((rde,Gw)=>{"use strict";var ede=vw().SearchByConditionsObject,r2=ns(),n2=oa(),Wp=ia(),hd=ft(),{Resource:tde}=(cn(),ie(Qp)),Hw=Ed(),s2=Gp(),i2=require("lodash"),{getSchemaPath:o2}=Xe(),Bw=ze(),{handleHDBError:a2,hdb_errors:c2}=se(),{HTTP_STATUS_CODES:u2}=c2,l2=1e8;Gw.exports=_2;async function _2(e){let t=n2(e,"conditions");if(t)throw a2(t,t.message,u2.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=o2(e.schema,e.table),n=await Bw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Bw.openDBI(n,_.search_attribute);let i=i2.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Wp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=l2}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await xw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Hw.filterByType),d=l.length,E=Wp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))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(f=>s2.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await xw(o,e,E,s.hash_attribute);c=c.concat(f)}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=Wp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(_2,"lmdbSearchByConditions");async function xw(e,t,r,n){let s=new r2(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Hw.searchByType(e,s,i,n).map(o=>o.value)}a(xw,"executeConditionSearch")});var ca=g((sde,Fw)=>{"use strict";var d2=P().OPERATIONS_ENUM,zp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=d2.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Fw.exports=zp});var Jp=g((ode,zw)=>{"use strict";var Yw=ns(),Kw=ca(),Ww=ou(),Qw=ru(),Sr=P(),kw=J(),Vw=ze(),{getTransactionAuditStorePath:f2,getSchemaPath:E2}=Xe(),$w=$();zw.exports=h2;async function h2(e){try{if(kw.isEmpty(global.hdb_schema[e.schema])||kw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await m2(e),await p2(e);let t=E2(e.schema,e.table);try{await Vw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$w.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=f2(e.schema,e.table);await Vw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$w.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(h2,"lmdbDropTable");async function m2(e){let t=new Yw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Ww(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new Kw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Qw(s)}a(m2,"deleteAttributesFromSystem");async function p2(e){let t=new Yw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Ww(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Kw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Qw(s)}catch(i){throw i}}a(p2,"dropTableFromSystem")});var Xw=g((cde,Jw)=>{"use strict";var S2=require("fs-extra"),T2=ns(),g2=aa(),R2=ca(),A2=Jp(),O2=ru(),b2=Fp(),y2=ou(),ws=P(),{getSchemaPath:N2}=Xe(),{handleHDBError:I2,hdb_errors:w2}=se(),{HDB_ERROR_MSGS:C2,HTTP_STATUS_CODES:D2}=w2;Jw.exports=L2;async function L2(e){let t;try{t=await M2(e.schema);let r=new T2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await y2(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await A2(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new R2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await O2(s);let i=N2(t);await S2.remove(i)}catch(r){throw r}}a(L2,"lmdbDropSchema");async function M2(e){let t=new g2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await b2(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw I2(new Error,C2.SCHEMA_NOT_FOUND(e),D2.NOT_FOUND,void 0,void 0,!0);return n}a(M2,"validateDropSchema")});var md=g((lde,jw)=>{"use strict";var Xp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};jw.exports=Xp});var eC=g((fde,Zw)=>{"use strict";var P2=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:U2}=Xe(),jp=ft(),dde=md();Zw.exports=v2;async function v2(e){let t;try{let r=U2(e.schema,e.table);await P2.mkdirp(r),t=await pd.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{pd.createDBI(t,jp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,jp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,jp.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(v2,"createTransactionsAuditEnvironment")});var sC=g((hde,nC)=>{"use strict";var Zp=P(),tC=ze(),B2=Wo(),{getSystemSchemaPath:x2,getSchemaPath:H2}=Xe(),G2=$i(),q2=q_(),eS=G_(),F2=$(),k2=eC(),rS=G2.hdb_table,rC=[];for(let e=0;e<rS.attributes.length;e++)rC.push(rS.attributes[e].attribute);nC.exports=V2;async function V2(e,t){let r=H2(t.schema,t.table),n=new eS(t.schema,t.table,Zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new eS(t.schema,t.table,Zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new eS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await tC.createEnvironment(r,t.table),e!==void 0){let o=await tC.openEnvironment(x2(),Zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await B2.insertRecords(o,rS.hash_attribute,rC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await tS(n),await tS(s),await tS(i)}await k2(t)}catch(o){throw o}}a(V2,"lmdbCreateTable");async function tS(e){try{await q2(e)}catch(t){F2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(tS,"createAttribute")});var oC=g((pde,iC)=>{"use strict";var $2=Kc(),Y2=Dc(),K2=cd(),au=P(),W2=Wo().updateRecords,Q2=ze(),{getSchemaPath:z2}=Xe(),J2=eu(),X2=$();iC.exports=j2;async function j2(e){try{let{schema_table:t,attributes:r}=$2(e);Y2(e,r,t.hash_attribute),e.schema!==au.SYSTEM_SCHEMA_NAME&&(r.includes(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await K2(e.hdb_auth_header,t,r),s=z2(e.schema,e.table),i=await Q2.openEnvironment(s,e.table),o=await W2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await J2(e,o)}catch(c){X2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(j2,"lmdbUpdateRecords")});var cC=g((Tde,aC)=>{"use strict";var Z2=P().OPERATIONS_ENUM,nS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Z2.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};aC.exports=nS});var lC=g((Ade,uC)=>{"use strict";var Rde=cC(),eJ=Kc(),tJ=Dc(),rJ=cd(),cu=P(),nJ=Wo().upsertRecords,sJ=ze(),{getSchemaPath:iJ}=Xe(),oJ=eu(),aJ=$(),{handleHDBError:cJ,hdb_errors:uJ}=se();uC.exports=lJ;async function lJ(e){let t;try{t=eJ(e)}catch(u){throw cJ(u,u.message,uJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;tJ(e,n,r.hash_attribute),e.schema!==cu.SYSTEM_SCHEMA_NAME&&(n.includes(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rJ(e.hdb_auth_header,r,n),i=iJ(e.schema,e.table),o=await sJ.openEnvironment(i,e.table),c=await nJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await oJ(e,c)}catch(u){aJ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(lJ,"lmdbUpsertRecords")});var dC=g((bde,_C)=>{"use strict";var sS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};_C.exports=sS});var EC=g((Nde,fC)=>{"use strict";var iS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};fC.exports=iS});var pC=g((Cde,mC)=>{"use strict";var oS=ze(),{getTransactionAuditStorePath:_J}=Xe(),wde=dC(),uu=ft(),dJ=J(),hC=EC(),fJ=require("util").promisify,EJ=fJ(setTimeout),hJ=1e4,mJ=100;mC.exports=pJ;async function pJ(e){let t=_J(e.schema,e.table),r=await oS.openEnvironment(t,e.table,!0),n=oS.listDBIs(r);oS.initializeDBIs(r,uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new hC;do s=await SJ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await EJ(mJ);while(s.transactions_deleted>0);return i}a(pJ,"deleteAuditLogsBefore");async function SJ(e,t){let r=new hC;try{let n=e.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[uu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];dJ.isEmpty(c)||(s=e.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>hJ)break}return await s,r}catch(n){throw n}}a(SJ,"deleteTransactions")});var TC=g((Lde,SC)=>{"use strict";var aS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};SC.exports=aS});var RC=g((Ude,gC)=>{"use strict";var TJ=ns(),gJ=ca(),Pde=TC(),ss=P(),RJ=J(),cS=ze(),AJ=$i(),OJ=ou(),bJ=ru(),{getSchemaPath:yJ}=Xe();gC.exports=NJ;async function NJ(e,t=!0){let r;e.schema===ss.SYSTEM_SCHEMA_NAME?r=AJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await wJ(e),s=yJ(e.schema,e.table),i=await cS.openEnvironment(s,e.table);return t===!0&&await IJ(e,i,r.hash_attribute),cS.dropDBI(i,e.attribute),n}a(NJ,"lmdbDropAttribute");async function IJ(e,t,r){let n=cS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(IJ,"removeAttributeFromAllObjects");async function wJ(e){let t=new TJ(ss.SYSTEM_SCHEMA_NAME,ss.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await OJ(t)).filter(o=>o[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(RJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new gJ(ss.SYSTEM_SCHEMA_NAME,ss.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return bJ(i)}a(wJ,"dropAttributeFromSystem")});var IC=g((xde,NC)=>{"use strict";var uS=ze(),ua=ft(),Bde=Br(),lS=P(),AC=J(),{getTransactionAuditStorePath:CJ}=Xe(),DJ=ia(),Sd=ra(),LJ=$();NC.exports=MJ;async function MJ(e){let t=CJ(e.schema,e.table),r=await uS.openEnvironment(t,e.table,!0),n=uS.listDBIs(r);uS.initializeDBIs(r,ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return OC(r,e.search_values);case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,UJ(r,e.search_values,s);case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return PJ(r,e.search_values);default:return OC(r)}}a(MJ,"readAuditLog");function OC(e,t=[0,Date.now()]){AC.isEmpty(t[0])&&(t[0]=0),AC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Sd,s))}a(OC,"searchTransactionsByTimestamp");function PJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ua.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,yC(e,i))}return Object.fromEntries(r)}a(PJ,"searchTransactionsByUsername");function UJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=DJ.equals(e,ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ua.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=yC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);bC(u,"records",r,l,o),bC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(UJ,"searchTransactionsByHashValues");function bC(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(bC,"loopRecords");function yC(e,t){let r=[];try{let n=e.dbis[ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Sd,i);r.push(o)}}catch(i){LJ.warn(i)}return r}catch(n){throw n}}a(yC,"batchSearchTransactions")});var CC=g((Fde,wC)=>{"use strict";var{getSchemaPath:Gde}=Xe(),qde=ze(),{database:vJ}=(Ae(),ie(ke));wC.exports={writeTransaction:BJ};async function BJ(e,t,r){return vJ({database:e,table:t}).transaction(r)}a(BJ,"writeTransaction")});var PC=g((Vde,MC)=>{"use strict";var{getSchemaPath:DC}=Xe(),LC=ze();MC.exports={flush:xJ,resetReadTxn:HJ};async function xJ(e,t){return(await LC.openEnvironment(DC(e,t),t.toString())).flushed}a(xJ,"flush");async function HJ(e,t){try{(await LC.openEnvironment(DC(e,t),t.toString())).resetReadTxn()}catch{}}a(HJ,"resetReadTxn")});var xC=g((Yde,BC)=>{"use strict";var{Readable:GJ}=require("stream"),{getDatabases:qJ}=(Ae(),ie(ke)),{readSync:FJ,openSync:kJ,createReadStream:UC}=require("fs"),{open:VJ}=require("lmdb"),vC=Gc(),$J=qc(),{AUDIT_STORE_OPTIONS:YJ}=(ni(),ie(HC)),{INTERNAL_DBIS_NAME:KJ,AUDIT_STORE_NAME:WJ}=ft();BC.exports=zJ;var _S=32768,QJ=100;async function zJ(e){let t=e.database||e.schema||"data",r=qJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=VJ({noSync:!0,maxDbs:$J.MAX_DBS}),E,f=d.openDB(KJ,new vC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,N){N.encoding="binary",N.encoder=void 0;let b=d.openDB(A,N),v=l.openDB(A,N);for(let{key:U,version:F,value:M}of v.getRange({start:null,transaction:h,versions:v.useVersions}))E=b.put(U,M,F),p++%QJ===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:N}of l.getRange({transaction:h,start:!1}))if(s.some(b=>A.startsWith?.(b+"/"))){f.put(A,N);let[,b]=A.split("/"),v=!b,U=new vC(!v,v);await S(A,U)}e.include_audit&&await S(WJ,Object.assign({},YJ)),await E;let T=UC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=kJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(_S);FJ(c,_,0,_S),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=UC(null,{fd:c,start:_S}),E=new GJ.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(zJ,"getBackup")});var FC=g((Wde,qC)=>{"use strict";var JJ=$(),{handleHDBError:XJ}=se(),jJ=ry(),ZJ=q_(),e4=Up(),t4=XI(),r4=ru(),n4=Fp(),s4=Ow(),i4=Mw(),o4=ou(),a4=qw(),c4=Xw(),u4=sC(),l4=oC(),_4=lC(),d4=pC(),f4=Jp(),E4=RC(),h4=IC(),m4=CC(),GC=PC(),p4=xC(),dS=class extends jJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return a4(t)}async getDataByHash(t){return await n4(t)}async searchByHash(t){return await s4(t)}async getDataByValue(t,r){return await i4(t,r)}async searchByValue(t){return await o4(t)}async createSchema(t){return await t4(t)}async dropSchema(t){return await c4(t)}async createTable(t,r){return await u4(t,r)}async dropTable(t){return await f4(t)}async createAttribute(t){return await ZJ(t)}async createRecords(t){return await e4(t)}async updateRecords(t){return await l4(t)}async upsertRecords(t){try{return await _4(t)}catch(r){throw XJ(r,null,null,JJ.ERR,r)}}async deleteRecords(t){return await r4(t)}async dropAttribute(t){return await E4(t)}async deleteAuditLogsBefore(t){return await d4(t)}async readAuditLog(t){return await h4(t)}writeTransaction(t,r,n){return m4.writeTransaction(t,r,n)}flush(t,r){return GC.flush(t,r)}resetReadTxn(t,r){return GC.resetReadTxn(t,r)}getBackup(t){return p4(t)}};qC.exports=dS});function R4(){g4=setInterval(function(){for(let e of fS)if(e.stale){let t=e[ye]?.url;YC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},T4).unref()}var ES,$C,YC,KC,WC,QC,kC,fS,S4,lu,VC,so,Td,T4,g4,hS=Re(()=>{ES=H(Br()),$C=H(se()),YC=H($());cn();KC=H(ee()),WC=H(P()),QC=H(J()),kC=100,fS=new Set,S4=(0,QC.convertToMS)(KC.get(WC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,so=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;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.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),fS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(fS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(lu&&!this.overloadChecked&&performance.now()-VC>S4)throw new $C.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}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||(0,ES.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let A=T();h?h.push?h.push(A):h=[h,A]:h=A}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<kC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return lu||(lu=s,VC=performance.now(),lu.then(()=>{lu=null})),s.then(d=>d?(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}))):(_&&(_.retryRisk=(_.retryRisk||0)+kC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends so{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,ES.getNextMonotonicTime)())}getReadTxn(){}},T4=3e4;a(R4,"startMonitoringTxns");R4()});function rt(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 n=e.transaction=new so;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var zC,io=Re(()=>{zC=require("../index");cn();hS();a(rt,"transaction");(0,zC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var nD={};Fe(nD,{ResourceBridge:()=>SS});function TS({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 XC(e,t){let r=is(e),n=TS(e,r);if(!r)throw new Un.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;rt(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;try{l=await r.get({id:_,lazy:s,select:n},i),l=l&&Rd(l)}catch(d){l={message:d.toString()}}return t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function is(e){let t=e.database||e.schema||O4,r=Tr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,A4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function jC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*ZC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var eD,gd,Un,tD,vn,mS,pS,rD,A4,O4,b4,y4,JC,SS,sD=Re(()=>{"use strict";eD=H(FC()),gd=H(oa()),Un=H(se());Ae();tD=H(Kc()),vn=H(P()),mS=H(Ns()),pS=H(Pn()),rD=H(J());io();Ad();({HDB_ERROR_MSGS:A4}=Un.hdb_errors),O4="data",b4=1e4,y4=10,SS=class extends eD.default{static{a(this,"ResourceBridge")}constructor(t){super(t),JC=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,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=is(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:TS(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await is(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=is(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],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}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){is(t).dropTable()}createSchema(t){return la({database:t.schema,table:null}),mS.signalSchemaChange(new pS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await gS(t.schema),mS.signalSchemaChange(new pS.SchemaEventMsg(process.pid,vn.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,JC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,tD.default)(t),s,i=Tr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Tr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return jC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Tr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!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,rD.async_set_timeout)(y4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%b4===0&&await _();return u.length>0&&await _(),s?jC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return XC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of XC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.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 n=(0,gd.default)(t,"value");if(n)throw n;let s=is(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:TS(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=is(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){is({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return is(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=is(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[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 n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of ZC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return ZC(r,t.search_values?.[0],t.search_values?.[1])}}};a(TS,"getSelect");a(XC,"getRecords");a(is,"getTable");a(jC,"createDeleteResponse");a(ZC,"groupRecordsInHistory")});var Dn=g((cfe,iD)=>{"use strict";var{ResourceBridge:N4}=(sD(),ie(nD)),I4=ee();I4.initSync();var Od;function w4(){return Od||(Od=new N4,Od)}a(w4,"getBridge");iD.exports=w4()});var uD=g((lfe,cD)=>{"use strict";var oD=require("lodash"),_u=require("mathjs"),C4=require("jsonata"),aD=J();cD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?oD.uniqWith(e,oD.isEqual):e,searchJSON:D4,mad:du.bind(null,_u.mad),mean:du.bind(null,_u.mean),mode:du.bind(null,_u.mode),prod:du.bind(null,_u.prod),median:du.bind(null,_u.median)};function du(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(du,"aggregateFunction");function D4(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(aD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),aD.isEmpty(this.__ala__.res[r])){let n=C4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(D4,"searchJSON")});var _D=g((dfe,lD)=>{"use strict";var Rt=require("moment"),RS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;lD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(RS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(RS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(RS)}});var hD=g((ffe,ED)=>{"use strict";var L4=require("@turf/area"),M4=require("@turf/length"),P4=require("@turf/circle"),U4=require("@turf/difference"),v4=require("@turf/distance"),B4=require("@turf/boolean-contains"),x4=require("@turf/boolean-equal"),H4=require("@turf/boolean-disjoint"),G4=require("@turf/helpers"),dD=P(),Te=J(),Cs=$();ED.exports={geoArea:q4,geoLength:F4,geoCircle:k4,geoDifference:V4,geoDistance:fD,geoNear:$4,geoContains:Y4,geoEqual:K4,geoCrosses:W4,geoConvert:Q4};function q4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(q4,"geoArea");function F4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return M4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(F4,"geoLength");function k4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return P4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(k4,"geoCircle");function V4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(V4,"geoDifference");function fD(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(fD,"geoDistance");function $4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return fD(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a($4,"geoNear");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoContains");function K4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return x4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(K4,"geoEqual");function W4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!H4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(W4,"geoCrosses");function Q4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(dD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(dD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),G4[t](e,r)}a(Q4,"geoConvert")});var bd=g((hfe,mD)=>{var oo=uD(),Wr=_D(),os=hD();mD.exports=e=>{e.aggr.mad=e.aggr.MAD=oo.mad,e.aggr.mean=e.aggr.MEAN=oo.mean,e.aggr.mode=e.aggr.MODE=oo.mode,e.aggr.prod=e.aggr.PROD=oo.prod,e.aggr.median=e.aggr.MEDIAN=oo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=oo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=oo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Wr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Wr.current_time,e.fn.extract=e.fn.EXTRACT=Wr.extract,e.fn.date=e.fn.DATE=Wr.date,e.fn.date_format=e.fn.DATE_FORMAT=Wr.date_format,e.fn.date_add=e.fn.DATE_ADD=Wr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Wr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Wr.date_diff,e.fn.now=e.fn.NOW=Wr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Wr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Wr.get_server_time,e.fn.getdate=e.fn.GETDATE=Wr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Wr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=os.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=os.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=os.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=os.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=os.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=os.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=os.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=os.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=os.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=os.geoNear}});var gD=g((mfe,TD)=>{"use strict";var fu=require("lodash"),gr=require("alasql");gr.options.cache=!1;var z4=bd(),pD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=J(),_a=Dn(),J4=P(),{hdb_errors:X4}=se(),{getDatabases:SD}=(Ae(),ie(ke)),j4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";z4(gr);var AS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new yd(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(pD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=fu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=SD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new gr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new gr.yy.LogicValue({value:i}):n instanceof gr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new gr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(J4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.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)n.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,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&fu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await gr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(pD(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.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(j4)>-1&&this.tables.forEach(s=>{let i={columnid:SD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=fu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await _a.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await _a.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await _a.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await _a.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 gr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new gr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new gr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new gr.yy.FuncValue:new gr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.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 E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await gr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=fu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await _a.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await gr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(X4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await _a.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};TD.exports=AS});var qr=g((Sfe,RD)=>{"use strict";var Z4=ey();RD.exports={searchByConditions:t3,searchByHash:r3,searchByValue:n3,search:s3};var OS=Dn(),{transformReq:bS}=J(),e3=gD();async function t3(e){return bS(e),OS.searchByConditions(e)}a(t3,"searchByConditions");async function r3(e){bS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of OS.searchByHash(e))r&&t.push(r);return t}a(r3,"searchByHash");async function n3(e){bS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of OS.searchByValue(e))t.push(r);return t}a(n3,"searchByValue");function s3(e,t){try{let r=new Z4(e);r.validate(),new e3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(s3,"search")});var Nd=g((gfe,AD)=>{"use strict";var i3=Dn();AD.exports={writeTransaction:o3};function o3(e,t,r){return i3.writeTransaction(e,t,r)}a(o3,"writeTransaction")});var ND=g((Ofe,yD)=>{"use strict";var a3=qr(),c3=ys(),OD=$(),u3=Fr(),Afe=Nd(),l3=require("clone"),NS=require("alasql"),_3=bd(),bD=require("util"),d3=bD.promisify(c3.getTableSchema),f3=bD.promisify(a3.search),E3=P(),yS=J();_3(NS);yD.exports={update:m3};var h3="There was a problem performing this update. Please check the logs and try again.";async function m3({statement:e,hdb_user:t}){let r=await d3(e.table.databaseid,e.table.tableid),n=p3(e.columns);yS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=l3(s),c=yS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=NS.parse(u).statements[0],l=await f3(_),d=S3(n,l);return T3(o,d,t)}a(m3,"update");function p3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=NS.compile(`SELECT ${r.expression.toString()} AS [${E3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw OD.error(t),new Error(h3)}}a(p3,"createUpdateRecord");function S3(e,t){return yS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(S3,"buildUpdateRecords");async function T3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await u3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){OD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(T3,"updateRecords")});var wD=g((Ife,ID)=>{var g3=require("alasql"),R3=qr(),A3=$(),O3=Dn(),wS=require("util"),IS=J(),b3=P(),y3=ys(),yfe=Nd(),Nfe=Fr(),N3="record",I3="successfully deleted",w3=wS.callbackify(M3),C3=wS.promisify(R3.search),D3=wS.promisify(y3.getTableSchema);ID.exports={convertDelete:w3};function L3(e){return`${e.deleted_hashes.length} ${N3}${e.deleted_hashes.length===1?"":"s"} ${I3}`}a(L3,"generateReturnMessage");async function M3({statement:e,hdb_user:t}){let r=await D3(e.table.databaseid,e.table.tableid);IS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=IS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=g3.parse(o).statements[0],u={operation:b3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await C3(c);let _=await O3.deleteRecords(u);return IS.isEmptyOrZeroLength(_.message)&&(_.message=L3(_)),delete _.txn_time,_}catch(_){throw A3.error(_),_.hdb_code?_.message:_}}a(M3,"convertDelete")});var PD=g((Cfe,MD)=>{"use strict";var P3=bs(),{hdb_errors:CD}=se(),{getDatabases:DD}=(Ae(),ie(ke));MD.exports={checkSchemaExists:LD,checkSchemaTableExists:U3,schema_describe:P3};async function LD(e){if(!DD()[e])return CD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(LD,"checkSchemaExists");async function U3(e,t){let r=await LD(e);if(r)return r;if(!DD()[e][t])return CD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(U3,"checkSchemaTableExists")});var Eu=g((Lfe,v3)=>{v3.exports={name:"harperdb",version:"4.3.40",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],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/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@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.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","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.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","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.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.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.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},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.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",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.4.2","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 Tu={};Fe(Tu,{addAnalyticsListener:()=>Su,recordAction:()=>nr,recordActionBinary:()=>Qr,setAnalyticsEnabled:()=>B3});function B3(e){kD=e}function nr(e,t,r,n,s){if(!kD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.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:n,type:s},Cd.set(i,o)}Id||x3()}function Qr(e,t,r,n,s){nr(!!e,t,r,n,s)}function Su(e){YD.push(e)}function x3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:ao.threadId,metrics:t};for(let[s,i]of Cd){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 KD){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}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 n=process.memoryUsage();t.push({metric:"memory",threadId:ao.threadId,byThread:!0,...n});for(let s of YD)s(t);Cd=new Map,ao.parentPort?ao.parentPort.postMessage({type:$D,report:r}):JD({report:r})},VD).unref()}async function H3(e,t=6e4){let r=LS(),n=QD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,hu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,hu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.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:A}=S;for(let N of T||[]){let{path:b,method:v,type:U,metric:F,count:M,total:Q,distribution:z,threads:j,...oe}=N;M||(M=1);let ue=F+(b?"-"+b:"");v!==void 0&&(ue+="-"+v),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[A];if(Ne)le=Ne;else{le.threads[A]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},N),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[A]=Object.assign({},oe),_.push(le));if(z){z=z.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...z):u.set(ue,z)}}await WD()}for(let p of _){let{path:S,method:T,type:A,metric:N,count:b,total:v,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let z=0;for(let j of F){let oe=j[Q];typeof oe=="number"&&(z+=oe)}p[Q]=z}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let A=T.count-1,N=[],b=0,v=0,U;for(let Ne of KD){let xe=A*Ne;for(;b<xe;)U=S[v++],b+=U.count,v===1&&b--;let n_=S[v>1?v-2:0];U||(U=S[0]),N.push(U.value-(U.value-n_.value)*(b-xe)/U.count)}let[F,M,Q,z,j,oe,ue,le,Be]=N;Object.assign(T,{p1:F,p10:M,p25:Q,median:z,p75:j,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-UD,active:h-vD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}UD=f,vD=h}async function BD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function LS(){return xD||(xD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function QD(){return HD||(HD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function F3(){zD=!0;let e=(0,pu.get)(DS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await H3(VD,e),await BD(LS(),G3),await BD(QD(),q3)},Math.min(e/2,2147483647)).unref()}function JD(e,t){let r=e.report;r.threadId=t?.threadId||ao.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(GD+=n.mean*n.count);r.totalBytesProcessed=GD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(qD.get(t))}),qD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),LS().primaryStore.put(r.id,r),zD||F3(),k3&&(XD=$3(r))}async function $3(e){if(await XD,!fi){let r=(0,mu.dirname)((0,hu.getLogFilePath)());try{fi=await(0,CS.open)((0,mu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,CS.open)((0,mu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>V3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
9
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}VK(n,r),fp(n);let s=n.toJSON();if(vK.config=s,wt=Jo(s),wt.logging_rotation_rotate)for(let i in YN)wt[i]&&It.error(`Config ${YN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(xK)}}a(dp,"initConfig");function VK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),mr.writeFileSync(t,String(e)))}a(VK,"checkForUpdatedConfig");function fp(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=CK(r,t);if(n.error)throw Z_.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(fp,"validateConfig");function $K(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a($K,"updateConfigObject");function JN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&dp();let o=zN(Mn.hdb_root),c=Ln.join(o,Vr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=_p(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===kr.HTTP_SECUREPORT&&r[E]===wt[kr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Vr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=_p(f,r[E]);f==="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){It.error(T)}}}_&&QN(u,_),fp(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,Vr.HDB_CONFIG_FILE);n===!0&&YK(c,l),mr.writeFileSync(d,String(u)),s&&(wt=Jo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(JN,"updateConfigValue");function YK(e,t){try{let r=Ln.join(t,"backup",`${Vr.HDB_CONFIG_FILE}.bak`);mr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(HK),It.error(r)}}a(YK,"backupConfigFile");var KK=["databases"];function Jo(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)),td=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!KK.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!kr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Jo,"flattenConfig");function _p(e,t){if(e===kr.CLUSTERING_NODENAME||e===kr.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(LK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||xt.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 xt.autoCast(t)}a(_p,"castConfigValue");function WK(){let e=xt.getPropsFilePath(),t=ji(e);return ui(t).toJSON()}a(WK,"getConfiguration");async function QK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return JN(void 0,void 0,s,!0),qK}catch(i){throw typeof i=="string"||i instanceof String?PK(i,i,UK.BAD_REQUEST,void 0,void 0,!0):i}}a(QK,"setConfiguration");function Ep(){let e=xt.getPropsFilePath();try{mr.accessSync(e,mr.constants.F_OK|mr.constants.R_OK)}catch(n){if(!xt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ui(t).toJSON()}a(Ep,"readConfigFile");function ui(e){return DK.parseDocument(mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function zK(){let e=Ep(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=xt.isEmptyOrZeroLength(t)?[]:t;let r=$N(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=xt.isEmptyOrZeroLength(n)?[]:n;let s=$N(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!xt.isEmptyOrZeroLength(n)&&!xt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!xt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(zK,"getClusteringRoutes");function XN(e){let t=KN(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(xt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===kr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(XN,"initOldConfig");function JK(e){let t=Ep();return MK.get(t,e.replaceAll("_","."))}a(JK,"getConfigFromFile");async function XK(e,t){let r=ui(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await mr.writeFile(ji(),String(r))}a(XK,"addConfig");function jK(e){let t=ji(xt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,Vr.HDB_CONFIG_FILE);mr.writeFileSync(s,String(r))}a(jK,"deleteConfigFromFile");function ZK(){return td||(dp(),td)}a(ZK,"getConfigObj")});var eI=g((yle,ZN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},hp=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ZN.exports={BaseLicense:nd,ExtendedLicense:hp}});var Zi=g((Ile,oI)=>{"use strict";var jo=require("fs-extra"),rI=z_(),nI=require("crypto"),eW=require("moment"),tW=require("uuid").v4,tr=$(),pp=require("path"),rW=J(),li=P(),{totalmem:tI}=require("os"),nW=eI().ExtendedLicense,Xo="invalid license key format",sW="061183",iW="mofi25",oW="aes-256-cbc",aW=16,cW=32,sI=ee();sI.initSync();var mp;oI.exports={validateLicense:iI,generateFingerPrint:lW,licenseSearch:gp,getLicense:fW,checkMemoryLimit:EW};function Sp(){return pp.join(sI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Sp,"getLicenseDirPath");function uW(){let e=Sp();return pp.join(e,li.LICENSE_FILE_NAME)}a(uW,"getLicenseFilePath");function Tp(){let e=Sp();return pp.join(e,li.REG_KEY_FILE_NAME)}a(Tp,"getFingerPrintFilePath");async function lW(){let e=Tp();try{return await jo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await _W();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(lW,"generateFingerPrint");async function _W(){let e=tW(),t=rI.hash(e),r=Tp();try{await jo.mkdirp(Sp()),await jo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(_W,"writeFingerprint");function iI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=Tp(),s=!1;try{s=jo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=jo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(iW),c=o[1];c=Buffer.concat([Buffer.from(c)],aW);let u=Buffer.concat([Buffer.from(i)],cW),_=nI.createDecipheriv(oW,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 f=dW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Xo),tr.error(Xo),new Error(Xo)}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(Xo),tr.error(Xo),new Error(Xo)}else r.exp_date=l;r.exp_date<eW().valueOf()&&(r.valid_date=!1),rI.validate(o[1],`${sW}${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||tr.error("Invalid licence"),r}a(iI,"validateLicense");function dW(e,t){try{let r=nI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(dW,"checkOldLicense");function gp(){let e=new nW,t=[];try{t=jo.readFileSync(uW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(rW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=iI(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return mp=e,e}a(gp,"licenseSearch");async function fW(){return mp||await gp(),mp}a(fW,"getLicense");function EW(){let e=gp().ram_allocation,t=process.constrainedMemory?.()||tI();if(t=Math.round(Math.min(t,tI())/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(EW,"checkMemoryLimit")});var _n=g((Mle,AI)=>{"use strict";var lI="username is required",_I="nothing to update, must supply active, role or password to update",dI="password cannot be an empty string",fI="If role is specified, it cannot be empty.",EI="active must be true or false";AI.exports={addUser:OW,alterUser:bW,dropUser:NW,getSuperUser:DW,userInfo:IW,listUsers:id,listUsersExternal:wW,setUsersToGlobal:ea,findAndValidateUser:gI,getClusterUser:LW,USERNAME_REQUIRED:lI,ALTERUSER_NOTHING_TO_UPDATE:_I,EMPTY_PASSWORD:dI,EMPTY_ROLE:fI,ACTIVE_BOOLEAN:EI};var hI=Fr(),hW=ci(),Op=z_(),mI=PN(),pI=qr(),bp=Ns(),$r=J(),SI=require("validate.js"),Oe=$(),{promisify:mW}=require("util"),yp=Os(),aI=P(),cI=Ve(),pW=pr(),Cle=ee(),Dle=Zi(),SW=$i(),{table:Lle}=(Ae(),ie(ke)),{handleHDBError:ts,hdb_errors:TW}=se(),{HTTP_STATUS_CODES:rs,AUTHENTICATION_ERROR_MSGS:Rp,HDB_ERROR_MSGS:Zo}=TW,{UserEventMsg:Np}=Pn(),Ap=require("lodash"),{server:Ip}=(fr(),ie(qi)),gW=$();Ip.getUser=(e,t)=>gI(e,t,t!=null);var TI={username:!0,active:!0,role:!0,password:!0},uI=new Map,sd=pI.searchByValue,RW=pI.searchByHash,AW=mW(hW.delete);async function OW(e){let t=SI.cleanAttributes(e,TI),r=mI.addUserValidation(t);if(r)throw ts(new Error,r.message,rs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw ts(new Error,Zo.ROLE_NAME_NOT_FOUND(t.role),rs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw ts(new Error,Zo.DUP_ROLES_FOUND(t.role),rs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=yp.encrypt(t.password)),t.password=Op.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await hI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await ea()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw ts(new Error,Zo.USER_ALREADY_EXISTS(t.username),rs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],bp.signalUserChange(new Np(process.pid)),`${c.username} successfully added`}a(OW,"addUser");async function bW(e){let t=SI.cleanAttributes(e,TI);if($r.isEmptyOrZeroLength(t.username))throw new Error(lI);if($r.isEmptyOrZeroLength(t.password)&&$r.isEmptyOrZeroLength(t.role)&&$r.isEmptyOrZeroLength(t.active))throw new Error(_I);if(!$r.isEmpty(t.password)&&$r.isEmptyOrZeroLength(t.password.trim()))throw new Error(dI);if(!$r.isEmpty(t.active)&&!$r.isBoolean(t.active))throw new Error(EI);let r=yW(t.username);if(!$r.isEmpty(t.password)&&!$r.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=yp.encrypt(t.password)),t.password=Op.hash(t.password)),t.role==="")throw new Error(fI);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 sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Zo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),ts(new Error,c,rs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Zo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),ts(new Error,c,rs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await hI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await ea()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return bp.signalUserChange(new Np(process.pid)),s}a(bW,"alterUser");function yW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yW,"isClusterUser");async function NW(e){try{let t=mI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($r.isEmpty(global.hdb_users.get(e.username)))throw ts(new Error,Zo.USER_NOT_EXIST(e.username),rs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await AW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await ea()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return bp.signalUserChange(new Np(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(NW,"dropUser");async function IW(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:["*"]},n;try{n=await RW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(IW,"userInfo");async function wW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(wW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.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 n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Ap.cloneDeep(o),o.role=r[o.role],CW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),$r.errorizeMessage(e)}return null}a(id,"listUsers");function CW(e){try{if(!e){Oe.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(SW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(CW,"appendSystemTablesToRole");async function ea(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(ea,"setUsersToGlobal");async function gI(e,t,r=!0){global.hdb_users||await ea();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw ts(new Error,Rp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw ts(new Error,Rp.USER_INACTIVE,rs.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(uI.get(t)===n.password)return s;if(Op.validate(n.password,t))uI.set(t,n.password);else throw ts(new Error,Rp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(gI,"findAndValidateUser");async function DW(){global.hdb_users||await ea();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(DW,"getSuperUser");async function LW(){let e=await id(),t=pW.getConfigFromFile(aI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$r.isEmpty(r)&&r?.role?.role===aI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=yp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+cI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+cI.SERVER_SUFFIX.ADMIN,r}a(LW,"getClusterUser");var RI=[];Ip.invalidateUser=function(e){for(let t of RI)try{t(e)}catch(r){gW.error("Error invalidating user",r)}};Ip.onInvalidatedUser=function(e){RI.push(e)}});var jc=g((Ble,NI)=>{"use strict";var eo=$(),Yr=P(),MW=eN(),Ule=ys(),vle=bs(),PW=_n(),{validateEvent:OI}=Pn(),Xc=Dn(),UW=require("process"),{resetDatabases:vW}=(Ae(),ie(ke)),BW={[Yr.ITC_EVENT_TYPES.SCHEMA]:xW,[Yr.ITC_EVENT_TYPES.USER]:yI};async function xW(e){let t=OI(e);if(t){eo.error(t);return}eo.trace("ITC schemaHandler received schema event:",e),await MW(e.message),await HW(e.message)}a(xW,"schemaHandler");async function HW(e){try{Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=vW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){eo.error(t)}}a(HW,"syncSchemaMetadata");var bI=[];async function yI(e){try{try{Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Xc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){eo.warn(r)}let t=OI(e);if(t){eo.error(t);return}eo.trace(`ITC userHandler ${Yr.HDB_ITC_CLIENT_PREFIX}${UW.pid} received user event:`,e),await PW.setUsersToGlobal();for(let r of bI)r()}catch(t){eo.error(t)}}a(yI,"userHandler");yI.addListener=function(e){bI.push(e)};NI.exports=BW});var Pn=g((kle,wI)=>{"use strict";var Hle=$(),wp=J(),GW=P(),{ITC_ERRORS:Zc}=vr(),{parentPort:Gle,threadId:qW,isMainThread:FW,workerData:qle}=require("worker_threads"),{onMessageFromWorkers:kW,broadcast:Fle,broadcastWithAcknowledgement:VW}=Qe();wI.exports={sendItcEvent:$W,validateEvent:II,SchemaEventMsg:YW,UserEventMsg:KW};var od;kW(async(e,t)=>{od=od||jc(),II(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function $W(e){return!FW&&e.message&&(e.message.originator=qW),VW(e)}a($W,"sendItcEvent");function II(e){if(typeof e!="object")return Zc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||wp.isEmpty(e.type))return Zc.MISSING_TYPE;if(!e.hasOwnProperty("message")||wp.isEmpty(e.message))return Zc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||wp.isEmpty(e.message.originator))return Zc.MISSING_ORIGIN;if(GW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Zc.INVALID_EVENT(e.type)}a(II,"validateEvent");function YW(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(YW,"SchemaEventMsg");function KW(e){this.originator=e}a(KW,"UserEventMsg")});var Ns=g((Yle,MI)=>{"use strict";var CI=P(),$le=J(),ad=$(),DI=Xy(),ta,{sendItcEvent:LI}=Pn();function WW(e){try{ad.trace("signalSchemaChange called with message:",e),ta=ta||jc();let t=new DI(CI.ITC_EVENT_TYPES.SCHEMA,e);return ta.schema(t),LI(t)}catch(t){ad.error(t)}}a(WW,"signalSchemaChange");function QW(e){try{ad.trace("signalUserChange called with message:",e),ta=ta||jc();let t=new DI(CI.ITC_EVENT_TYPES.USER,e);return ta.user(t),LI(t)}catch(t){ad.error(t)}}a(QW,"signalUserChange");MI.exports={signalSchemaChange:WW,signalUserChange:QW}});var cd=g((Wle,UI)=>{"use strict";var PI=J(),zW=P(),JW=$(),XW=q_(),jW=G_(),ZW=Ns(),{SchemaEventMsg:eQ}=Pn(),tQ="already exists in";UI.exports=rQ;async function rQ(e,t,r){if(PI.isEmptyOrZeroLength(r))return r;let n=[];PI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await nQ(e,t.schema,t.name,i)})),s}a(rQ,"lmdbCheckForNewAttributes");async function nQ(e,t,r,n){let s=new jW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await sQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(tQ))JW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(nQ,"createNewAttribute");async function sQ(e){let t;return t=await XW(e),ZW.signalSchemaChange(new eQ(process.pid,zW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(sQ,"createAttribute")});var ra=g((zle,vI)=>{"use strict";var Cp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};vI.exports=Cp});var xI=g((Xle,BI)=>{"use strict";var iQ=ra(),oQ=P().OPERATIONS_ENUM,Dp=class extends iQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(oQ.INSERT,r,n,s,i),this.records=t}};BI.exports=Dp});var GI=g((Zle,HI)=>{"use strict";var aQ=ra(),cQ=P().OPERATIONS_ENUM,Lp=class extends aQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=Lp});var FI=g((t_e,qI)=>{"use strict";var uQ=ra(),lQ=P().OPERATIONS_ENUM,Mp=class extends uQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(lQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};qI.exports=Mp});var VI=g((n_e,kI)=>{"use strict";var _Q=ra(),dQ=P().OPERATIONS_ENUM,Pp=class extends _Q{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(dQ.DELETE,n,s,t,i),this.original_records=r}};kI.exports=Pp});var eu=g((o_e,WI)=>{"use strict";var i_e=require("path"),$I=ze(),fQ=xI(),EQ=GI(),hQ=FI(),mQ=VI(),na=ft(),YI=J(),{CONFIG_PARAMS:pQ}=P(),KI=ee();KI.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:SQ}=Xe();WI.exports=TQ;async function TQ(e,t){if(KI.get(pQ.LOGGING_AUDITLOG)===!1)return;let r=SQ(e.schema,e.table),n=await $I.openEnvironment(r,e.table,!0),s=gQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){$I.initializeDBIs(n,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),YI.isEmpty(s.user_name)||n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(TQ,"writeTransaction");function gQ(e,t){let r=YI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new fQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new EQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new hQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new mQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(gQ,"createTransactionObject")});var Up=g((u_e,QI)=>{"use strict";var RQ=Kc(),c_e=Cc(),tu=P(),AQ=Dc(),OQ=Wo().insertRecords,bQ=ze(),yQ=$(),NQ=cd(),{getSchemaPath:IQ}=Xe(),wQ=eu();QI.exports=CQ;async function CQ(e){try{let{schema_table:t,attributes:r}=RQ(e);AQ(e,r,t.hash_attribute),e.schema!==tu.SYSTEM_SCHEMA_NAME&&(r.includes(tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await NQ(e.hdb_auth_header,t,r),s=IQ(e.schema,e.table),i=await bQ.openEnvironment(s,e.table),o=await OQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await wQ(e,o)}catch(c){yQ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(CQ,"lmdbCreateRecords")});var XI=g((__e,JI)=>{"use strict";var zI=P(),DQ=Up(),LQ=Cc(),MQ=require("fs-extra"),{getSchemaPath:PQ}=Xe();JI.exports=UQ;async function UQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new LQ(zI.SYSTEM_SCHEMA_NAME,zI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await DQ(r),await MQ.mkdirp(PQ(e.schema))}a(UQ,"lmdbCreateSchema")});var ZI=g((f_e,jI)=>{"use strict";var vp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};jI.exports=vp});var nw=g((S_e,rw)=>{"use strict";var ew=ze(),Bp=Br(),xp=vr().LMDB_ERRORS_ENUM,vQ=ft(),tw=$(),h_e=J(),BQ=require("lmdb"),xQ=ZI(),HQ=P(),{OVERFLOW_MARKER:m_e,MAX_SEARCH_KEY_LENGTH:p_e}=vQ,GQ=HQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function qQ(e,t,r,n){if(Bp.validateEnv(e),t===void 0)throw new Error(xp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xp.IDS_REQUIRED):new Error(xp.IDS_MUST_BE_ITERABLE);try{let s=ew.listDBIs(e);ew.initializeDBIs(e,t,s);let i=new xQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[GQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,BQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],N=h[T];if(N!=null)try{let b=Bp.getIndexedValues(N);if(b)for(let v=0,U=b.length;v<U;v++)A.remove(b[v],o)}catch{tw.warn(`cannot delete from attribute: ${T}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){tw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Bp.getNextMonotonicTime(),i}catch(s){throw s}}a(qQ,"deleteRecords");rw.exports={deleteRecords:qQ}});var ru=g((g_e,iw)=>{"use strict";var sa=J(),FQ=nw(),kQ=ze(),{getSchemaPath:VQ}=Xe(),$Q=eu(),YQ=$();iw.exports=KQ;async function KQ(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(sa.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(sa.isEmptyOrZeroLength(e.hash_values)&&!sa.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];sa.isEmpty(u)||e.hash_values.push(u)}}if(sa.isEmptyOrZeroLength(e.hash_values))return sw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(sa.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=VQ(e.schema,e.table),i=await kQ.openEnvironment(s,e.table),o=await FQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await $Q(e,o)}catch(c){YQ.error(`unable to write transaction due to ${c.message}`)}return sw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(KQ,"lmdbDeleteRecords");function sw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(sw,"createDeleteResponse")});var Gp=g((O_e,ow)=>{"use strict";var WQ=P(),A_e=Br();function Hp(e,t){let r=Object.create(null);if(t.length===1&&WQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Hp,"parseRow");function QQ(e,t,r,n){let s=Hp(r,e);n.push(s)}a(QQ,"searchAll");function zQ(e,t,r,n){let s=Hp(r,e);n[t]=s}a(zQ,"searchAllToMap");function JQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(JQ,"iterateDBI");function to(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(to,"pushResults");function XQ(e,t,r,n,s,i){t.toString().endsWith(e)&&to(t,r,n,s,i)}a(XQ,"endsWith");function jQ(e,t,r,n,s,i){t.toString().includes(e)&&to(t,r,n,s,i)}a(jQ,"contains");function ZQ(e,t,r,n,s,i){t>e&&to(t,r,n,s,i)}a(ZQ,"greaterThanCompare");function ez(e,t,r,n,s,i){t>=e&&to(t,r,n,s,i)}a(ez,"greaterThanEqualCompare");function tz(e,t,r,n,s,i){t<e&&to(t,r,n,s,i)}a(tz,"lessThanCompare");function rz(e,t,r,n,s,i){t<=e&&to(t,r,n,s,i)}a(rz,"lessThanEqualCompare");ow.exports={parseRow:Hp,searchAll:QQ,searchAllToMap:zQ,iterateDBI:JQ,endsWith:XQ,contains:jQ,greaterThanCompare:ZQ,greaterThanEqualCompare:ez,lessThanCompare:tz,lessThanEqualCompare:rz,pushResults:to}});var ia=g((w_e,fw)=>{"use strict";var _i=ze(),y_e=$(),Kr=Br(),ld=ft(),ht=vr().LMDB_ERRORS_ENUM,N_e=J(),nz=P(),_d=Gp(),{parseRow:sz}=_d,I_e=require("lmdb"),{OVERFLOW_MARKER:aw,MAX_SEARCH_KEY_LENGTH:iz}=ld;function cw(e,t,r,n=!1,s=void 0,i=void 0){return ro(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(cw,"iterateFullIndex");function nu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return ro(e,t,r,(l,d,E,f)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(A.values=!1,d.getRange(A).map(N=>({value:N}))):d.getRange(A)})}a(nu,"iterateRangeBetween");function ro(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ro,"setupTransaction");function uw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(aw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(uw,"getOverflowCheck");function oz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return ro(e,t,t,(o,c,u)=>(dd(r),r=su(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>sz(_.value,r))))}a(oz,"searchAll");function az(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=su(e.database||e,r);let o=new Map;for(let{key:c,value:u}of cw(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(az,"searchAllToMap");function cz(e,t,r=!1,n=void 0,s=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=cw(e,void 0,t,r,n,s),c=o.transaction,u=uw(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(cz,"iterateDBI");function uz(e,t){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(uz,"countAll");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),ro(e,t,r,(c,u,_,l)=>(n=Kr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(lz,"equals");function _z(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(_z,"count");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),ro(e,null,r,(c,u)=>{n=Kr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(dz,"startsWith");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){return lw(e,t,r,n,s,i,o,!0)}a(fz,"endsWith");function lw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),ro(e,null,r,(u,_,l,d)=>{let E=uw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(aw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(lw,"contains");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),nu(e,t,r,n,u,s,i,o,!0,!1)}a(Ez,"greaterThan");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),nu(e,t,r,n,u,s,i,o,!1,!1)}a(hz,"greaterThanEqual");function mz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),nu(e,t,r,u,n,s,i,o,!1,!0)}a(mz,"lessThan");function pz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),nu(e,t,r,u,n,s,i,o,!1,!1)}a(pz,"lessThanEqual");function Sz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Kr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Kr.convertKeyValueToWrite(n),s=Kr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return nu(e,t,r,n,s,i,o,c)}a(Sz,"between");function Tz(e,t,r,n){Kr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=su(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(Tz,"searchByHash");function gz(e,t,r){Kr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(gz,"checkHashExists");function Rz(e,t,r,n,s=[]){return dw(e,t,r,n,s),_w(e,t,r,n,s).map(i=>i[1])}a(Rz,"batchSearchByHash");function Az(e,t,r,n,s=[]){dw(e,t,r,n,s);let i=new Map;for(let[o,c]of _w(e,t,r,n,s))i.set(o,c);return i}a(Az,"batchSearchByHashToMap");function _w(e,t,r,n,s=[]){return ro(e,t,t,(i,o,c)=>{r=su(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(_w,"batchHashSearch");function dw(e,t,r,n,s){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(dw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>iz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function su(e,t){return t.length===1&&nz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(su,"setGetWholeRowAttributes");fw.exports={searchAll:oz,searchAllToMap:az,count:_z,countAll:uz,equals:lz,startsWith:dz,endsWith:fz,contains:lw,searchByHash:Tz,setGetWholeRowAttributes:su,batchSearchByHash:Rz,batchSearchByHashToMap:Az,checkHashExists:gz,iterateDBI:cz,greaterThan:Ez,greaterThanEqual:hz,lessThan:mz,lessThanEqual:pz,between:Sz}});var oa=g((D_e,Sw)=>{var Ew=require("lodash"),hw=je(),he=require("joi"),Oz=J(),{hdb_schema_table:iu,checkValidTable:mw,hdb_table:pw,hdb_database:fd}=jn(),{handleHDBError:bz,hdb_errors:yz}=se(),{getDatabases:Nz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:Iz}=yz,wz=he.object({database:fd,schema:fd,table:pw,search_attribute:iu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(iu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Cz=he.object({database:fd,schema:fd,table:pw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(iu,he.object())).optional(),sort:he.object({attribute:he.alternatives(iu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(iu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});Sw.exports=function(e,t){let r=null;switch(t){case"value":r=hw.validateBySchema(e,wz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(mw("database",e.schema)),i(mw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=hw.validateBySchema(e,Cz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Oz.checkGlobalSchemaTable(e.schema,e.table);if(s)return bz(new Error,s,Iz.NOT_FOUND);let o=Nz()[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,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Ew.filter(c,l=>l!=="*"&&!l.startsWith?.("$")&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!Ew.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 qp=g((M_e,Tw)=>{"use strict";var Dz=ze(),Lz=oa(),{getSchemaPath:Mz}=Xe();Tw.exports=Pz;function Pz(e){let t=Lz(e,"hashes");if(t)throw t;let r=Mz(e.schema,e.table);return Dz.openEnvironment(r,e.table)}a(Pz,"initialize")});var Fp=g((U_e,gw)=>{"use strict";var Uz=ia(),vz=qp();gw.exports=Bz;async function Bz(e){let t=await vz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Uz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Bz,"lmdbGetDataByHash")});var aa=g((B_e,Rw)=>{"use strict";var kp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Rw.exports=kp});var Ow=g((G_e,Aw)=>{"use strict";var H_e=aa(),xz=ia(),Hz=qp();Aw.exports=Gz;async function Gz(e){let t=await Hz(e),r=global.hdb_schema[e.schema][e.table];return xz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Gz,"lmdbSearchByHash")});var ns=g((F_e,bw)=>{"use strict";var Vp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};bw.exports=Vp});var Ed=g((V_e,Dw)=>{"use strict";var rr=ia(),qz=ze(),Fz=J(),me=ft(),no=P(),kz=$i(),yw=vr().LMDB_ERRORS_ENUM,{getSchemaPath:Vz}=Xe(),Is=no.SEARCH_WILDCARDS;async function $z(e,t,r){let n;e.schema===no.SYSTEM_SCHEMA_NAME?n=kz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Cw(e,n.hash_attribute,r,t);return Iw(e,s,n.hash_attribute,r)}a($z,"prepSearch");async function Iw(e,t,r,n){let s=Vz(e.schema,e.table),i=await qz.openEnvironment(s,e.table),o=ww(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Yz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Nw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?Nw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(Iw,"executeSearch");function ww(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(ww,"searchByType");function Nw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Nw,"createMapFromIterable");function Yz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Yz,"checkToFetchMore");function Cw(e,t,r,n){if(Fz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(yw.UNKNOWN_SEARCH_TYPE)}else switch(n){case no.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case no.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case no.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case no.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case no.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(yw.UNKNOWN_SEARCH_TYPE)}}a(Cw,"createSearchTypeFromSearchObject");Dw.exports={executeSearch:Iw,createSearchTypeFromSearchObject:Cw,prepSearch:$z,searchByType:ww}});var Mw=g((K_e,Lw)=>{"use strict";var Y_e=ns(),Kz=oa(),Wz=J(),Qz=P(),zz=Ed();Lw.exports=Jz;function Jz(e,t){if(!Wz.isEmpty(t)&&Qz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kz(e,"value");if(n)throw n;return zz.prepSearch(e,t,!0)}a(Jz,"lmdbGetDataByValue")});var ou=g((z_e,Pw)=>{"use strict";var Q_e=ns(),Xz=oa(),jz=J(),Zz=P(),e2=Ed();Pw.exports=t2;async function t2(e,t){if(!jz.isEmpty(t)&&Zz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Xz(e,"value");if(n)throw n;return e2.prepSearch(e,t,!1)}a(t2,"lmdbSearchByValue")});var vw=g((j_e,Uw)=>{"use strict";var X_e=ft(),$p=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Yp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Uw.exports={SearchByConditionsObject:$p,SearchCondition:Yp,SortAttribute:Kp}});var qw=g((rde,Gw)=>{"use strict";var ede=vw().SearchByConditionsObject,r2=ns(),n2=oa(),Wp=ia(),hd=ft(),{Resource:tde}=(cn(),ie(Qp)),Hw=Ed(),s2=Gp(),i2=require("lodash"),{getSchemaPath:o2}=Xe(),Bw=ze(),{handleHDBError:a2,hdb_errors:c2}=se(),{HTTP_STATUS_CODES:u2}=c2,l2=1e8;Gw.exports=_2;async function _2(e){let t=n2(e,"conditions");if(t)throw a2(t,t.message,u2.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=o2(e.schema,e.table),n=await Bw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Bw.openDBI(n,_.search_attribute);let i=i2.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Wp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=l2}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await xw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Hw.filterByType),d=l.length,E=Wp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))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(f=>s2.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await xw(o,e,E,s.hash_attribute);c=c.concat(f)}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=Wp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(_2,"lmdbSearchByConditions");async function xw(e,t,r,n){let s=new r2(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Hw.searchByType(e,s,i,n).map(o=>o.value)}a(xw,"executeConditionSearch")});var ca=g((sde,Fw)=>{"use strict";var d2=P().OPERATIONS_ENUM,zp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=d2.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Fw.exports=zp});var Jp=g((ode,zw)=>{"use strict";var Yw=ns(),Kw=ca(),Ww=ou(),Qw=ru(),Sr=P(),kw=J(),Vw=ze(),{getTransactionAuditStorePath:f2,getSchemaPath:E2}=Xe(),$w=$();zw.exports=h2;async function h2(e){try{if(kw.isEmpty(global.hdb_schema[e.schema])||kw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await m2(e),await p2(e);let t=E2(e.schema,e.table);try{await Vw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$w.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=f2(e.schema,e.table);await Vw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$w.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(h2,"lmdbDropTable");async function m2(e){let t=new Yw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Ww(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new Kw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Qw(s)}a(m2,"deleteAttributesFromSystem");async function p2(e){let t=new Yw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Ww(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Kw(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Qw(s)}catch(i){throw i}}a(p2,"dropTableFromSystem")});var Xw=g((cde,Jw)=>{"use strict";var S2=require("fs-extra"),T2=ns(),g2=aa(),R2=ca(),A2=Jp(),O2=ru(),b2=Fp(),y2=ou(),ws=P(),{getSchemaPath:N2}=Xe(),{handleHDBError:I2,hdb_errors:w2}=se(),{HDB_ERROR_MSGS:C2,HTTP_STATUS_CODES:D2}=w2;Jw.exports=L2;async function L2(e){let t;try{t=await M2(e.schema);let r=new T2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await y2(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await A2(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new R2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await O2(s);let i=N2(t);await S2.remove(i)}catch(r){throw r}}a(L2,"lmdbDropSchema");async function M2(e){let t=new g2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await b2(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw I2(new Error,C2.SCHEMA_NOT_FOUND(e),D2.NOT_FOUND,void 0,void 0,!0);return n}a(M2,"validateDropSchema")});var md=g((lde,jw)=>{"use strict";var Xp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};jw.exports=Xp});var eC=g((fde,Zw)=>{"use strict";var P2=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:U2}=Xe(),jp=ft(),dde=md();Zw.exports=v2;async function v2(e){let t;try{let r=U2(e.schema,e.table);await P2.mkdirp(r),t=await pd.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{pd.createDBI(t,jp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,jp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,jp.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(v2,"createTransactionsAuditEnvironment")});var sC=g((hde,nC)=>{"use strict";var Zp=P(),tC=ze(),B2=Wo(),{getSystemSchemaPath:x2,getSchemaPath:H2}=Xe(),G2=$i(),q2=q_(),eS=G_(),F2=$(),k2=eC(),rS=G2.hdb_table,rC=[];for(let e=0;e<rS.attributes.length;e++)rC.push(rS.attributes[e].attribute);nC.exports=V2;async function V2(e,t){let r=H2(t.schema,t.table),n=new eS(t.schema,t.table,Zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new eS(t.schema,t.table,Zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new eS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await tC.createEnvironment(r,t.table),e!==void 0){let o=await tC.openEnvironment(x2(),Zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await B2.insertRecords(o,rS.hash_attribute,rC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await tS(n),await tS(s),await tS(i)}await k2(t)}catch(o){throw o}}a(V2,"lmdbCreateTable");async function tS(e){try{await q2(e)}catch(t){F2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(tS,"createAttribute")});var oC=g((pde,iC)=>{"use strict";var $2=Kc(),Y2=Dc(),K2=cd(),au=P(),W2=Wo().updateRecords,Q2=ze(),{getSchemaPath:z2}=Xe(),J2=eu(),X2=$();iC.exports=j2;async function j2(e){try{let{schema_table:t,attributes:r}=$2(e);Y2(e,r,t.hash_attribute),e.schema!==au.SYSTEM_SCHEMA_NAME&&(r.includes(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await K2(e.hdb_auth_header,t,r),s=z2(e.schema,e.table),i=await Q2.openEnvironment(s,e.table),o=await W2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await J2(e,o)}catch(c){X2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(j2,"lmdbUpdateRecords")});var cC=g((Tde,aC)=>{"use strict";var Z2=P().OPERATIONS_ENUM,nS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Z2.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};aC.exports=nS});var lC=g((Ade,uC)=>{"use strict";var Rde=cC(),eJ=Kc(),tJ=Dc(),rJ=cd(),cu=P(),nJ=Wo().upsertRecords,sJ=ze(),{getSchemaPath:iJ}=Xe(),oJ=eu(),aJ=$(),{handleHDBError:cJ,hdb_errors:uJ}=se();uC.exports=lJ;async function lJ(e){let t;try{t=eJ(e)}catch(u){throw cJ(u,u.message,uJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;tJ(e,n,r.hash_attribute),e.schema!==cu.SYSTEM_SCHEMA_NAME&&(n.includes(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rJ(e.hdb_auth_header,r,n),i=iJ(e.schema,e.table),o=await sJ.openEnvironment(i,e.table),c=await nJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await oJ(e,c)}catch(u){aJ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(lJ,"lmdbUpsertRecords")});var dC=g((bde,_C)=>{"use strict";var sS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};_C.exports=sS});var EC=g((Nde,fC)=>{"use strict";var iS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};fC.exports=iS});var pC=g((Cde,mC)=>{"use strict";var oS=ze(),{getTransactionAuditStorePath:_J}=Xe(),wde=dC(),uu=ft(),dJ=J(),hC=EC(),fJ=require("util").promisify,EJ=fJ(setTimeout),hJ=1e4,mJ=100;mC.exports=pJ;async function pJ(e){let t=_J(e.schema,e.table),r=await oS.openEnvironment(t,e.table,!0),n=oS.listDBIs(r);oS.initializeDBIs(r,uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new hC;do s=await SJ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await EJ(mJ);while(s.transactions_deleted>0);return i}a(pJ,"deleteAuditLogsBefore");async function SJ(e,t){let r=new hC;try{let n=e.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[uu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];dJ.isEmpty(c)||(s=e.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[uu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>hJ)break}return await s,r}catch(n){throw n}}a(SJ,"deleteTransactions")});var TC=g((Lde,SC)=>{"use strict";var aS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};SC.exports=aS});var RC=g((Ude,gC)=>{"use strict";var TJ=ns(),gJ=ca(),Pde=TC(),ss=P(),RJ=J(),cS=ze(),AJ=$i(),OJ=ou(),bJ=ru(),{getSchemaPath:yJ}=Xe();gC.exports=NJ;async function NJ(e,t=!0){let r;e.schema===ss.SYSTEM_SCHEMA_NAME?r=AJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await wJ(e),s=yJ(e.schema,e.table),i=await cS.openEnvironment(s,e.table);return t===!0&&await IJ(e,i,r.hash_attribute),cS.dropDBI(i,e.attribute),n}a(NJ,"lmdbDropAttribute");async function IJ(e,t,r){let n=cS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(IJ,"removeAttributeFromAllObjects");async function wJ(e){let t=new TJ(ss.SYSTEM_SCHEMA_NAME,ss.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await OJ(t)).filter(o=>o[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(RJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new gJ(ss.SYSTEM_SCHEMA_NAME,ss.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return bJ(i)}a(wJ,"dropAttributeFromSystem")});var IC=g((xde,NC)=>{"use strict";var uS=ze(),ua=ft(),Bde=Br(),lS=P(),AC=J(),{getTransactionAuditStorePath:CJ}=Xe(),DJ=ia(),Sd=ra(),LJ=$();NC.exports=MJ;async function MJ(e){let t=CJ(e.schema,e.table),r=await uS.openEnvironment(t,e.table,!0),n=uS.listDBIs(r);uS.initializeDBIs(r,ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return OC(r,e.search_values);case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,UJ(r,e.search_values,s);case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return PJ(r,e.search_values);default:return OC(r)}}a(MJ,"readAuditLog");function OC(e,t=[0,Date.now()]){AC.isEmpty(t[0])&&(t[0]=0),AC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Sd,s))}a(OC,"searchTransactionsByTimestamp");function PJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ua.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,yC(e,i))}return Object.fromEntries(r)}a(PJ,"searchTransactionsByUsername");function UJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=DJ.equals(e,ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ua.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=yC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);bC(u,"records",r,l,o),bC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(UJ,"searchTransactionsByHashValues");function bC(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(bC,"loopRecords");function yC(e,t){let r=[];try{let n=e.dbis[ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Sd,i);r.push(o)}}catch(i){LJ.warn(i)}return r}catch(n){throw n}}a(yC,"batchSearchTransactions")});var CC=g((Fde,wC)=>{"use strict";var{getSchemaPath:Gde}=Xe(),qde=ze(),{database:vJ}=(Ae(),ie(ke));wC.exports={writeTransaction:BJ};async function BJ(e,t,r){return vJ({database:e,table:t}).transaction(r)}a(BJ,"writeTransaction")});var PC=g((Vde,MC)=>{"use strict";var{getSchemaPath:DC}=Xe(),LC=ze();MC.exports={flush:xJ,resetReadTxn:HJ};async function xJ(e,t){return(await LC.openEnvironment(DC(e,t),t.toString())).flushed}a(xJ,"flush");async function HJ(e,t){try{(await LC.openEnvironment(DC(e,t),t.toString())).resetReadTxn()}catch{}}a(HJ,"resetReadTxn")});var xC=g((Yde,BC)=>{"use strict";var{Readable:GJ}=require("stream"),{getDatabases:qJ}=(Ae(),ie(ke)),{readSync:FJ,openSync:kJ,createReadStream:UC}=require("fs"),{open:VJ}=require("lmdb"),vC=Gc(),$J=qc(),{AUDIT_STORE_OPTIONS:YJ}=(ni(),ie(HC)),{INTERNAL_DBIS_NAME:KJ,AUDIT_STORE_NAME:WJ}=ft();BC.exports=zJ;var _S=32768,QJ=100;async function zJ(e){let t=e.database||e.schema||"data",r=qJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=VJ({noSync:!0,maxDbs:$J.MAX_DBS}),E,f=d.openDB(KJ,new vC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,N){N.encoding="binary",N.encoder=void 0;let b=d.openDB(A,N),v=l.openDB(A,N);for(let{key:U,version:F,value:M}of v.getRange({start:null,transaction:h,versions:v.useVersions}))E=b.put(U,M,F),p++%QJ===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:N}of l.getRange({transaction:h,start:!1}))if(s.some(b=>A.startsWith?.(b+"/"))){f.put(A,N);let[,b]=A.split("/"),v=!b,U=new vC(!v,v);await S(A,U)}e.include_audit&&await S(WJ,Object.assign({},YJ)),await E;let T=UC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=kJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(_S);FJ(c,_,0,_S),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=UC(null,{fd:c,start:_S}),E=new GJ.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(zJ,"getBackup")});var FC=g((Wde,qC)=>{"use strict";var JJ=$(),{handleHDBError:XJ}=se(),jJ=ry(),ZJ=q_(),e4=Up(),t4=XI(),r4=ru(),n4=Fp(),s4=Ow(),i4=Mw(),o4=ou(),a4=qw(),c4=Xw(),u4=sC(),l4=oC(),_4=lC(),d4=pC(),f4=Jp(),E4=RC(),h4=IC(),m4=CC(),GC=PC(),p4=xC(),dS=class extends jJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return a4(t)}async getDataByHash(t){return await n4(t)}async searchByHash(t){return await s4(t)}async getDataByValue(t,r){return await i4(t,r)}async searchByValue(t){return await o4(t)}async createSchema(t){return await t4(t)}async dropSchema(t){return await c4(t)}async createTable(t,r){return await u4(t,r)}async dropTable(t){return await f4(t)}async createAttribute(t){return await ZJ(t)}async createRecords(t){return await e4(t)}async updateRecords(t){return await l4(t)}async upsertRecords(t){try{return await _4(t)}catch(r){throw XJ(r,null,null,JJ.ERR,r)}}async deleteRecords(t){return await r4(t)}async dropAttribute(t){return await E4(t)}async deleteAuditLogsBefore(t){return await d4(t)}async readAuditLog(t){return await h4(t)}writeTransaction(t,r,n){return m4.writeTransaction(t,r,n)}flush(t,r){return GC.flush(t,r)}resetReadTxn(t,r){return GC.resetReadTxn(t,r)}getBackup(t){return p4(t)}};qC.exports=dS});function R4(){g4=setInterval(function(){for(let e of fS)if(e.stale){let t=e[ye]?.url;YC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},T4).unref()}var ES,$C,YC,KC,WC,QC,kC,fS,S4,lu,VC,so,Td,T4,g4,hS=Re(()=>{ES=H(Br()),$C=H(se()),YC=H($());cn();KC=H(ee()),WC=H(P()),QC=H(J()),kC=100,fS=new Set,S4=(0,QC.convertToMS)(KC.get(WC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,so=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;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.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),fS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(fS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(lu&&!this.overloadChecked&&performance.now()-VC>S4)throw new $C.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}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||(0,ES.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let A=T();h?h.push?h.push(A):h=[h,A]:h=A}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<kC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return lu||(lu=s,VC=performance.now(),lu.then(()=>{lu=null})),s.then(d=>d?(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}))):(_&&(_.retryRisk=(_.retryRisk||0)+kC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends so{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,ES.getNextMonotonicTime)())}getReadTxn(){}},T4=3e4;a(R4,"startMonitoringTxns");R4()});function rt(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 n=e.transaction=new so;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var zC,io=Re(()=>{zC=require("../index");cn();hS();a(rt,"transaction");(0,zC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var nD={};Fe(nD,{ResourceBridge:()=>SS});function TS({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 XC(e,t){let r=is(e),n=TS(e,r);if(!r)throw new Un.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;rt(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;try{l=await r.get({id:_,lazy:s,select:n},i),l=l&&Rd(l)}catch(d){l={message:d.toString()}}return t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function is(e){let t=e.database||e.schema||O4,r=Tr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,A4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function jC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*ZC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var eD,gd,Un,tD,vn,mS,pS,rD,A4,O4,b4,y4,JC,SS,sD=Re(()=>{"use strict";eD=H(FC()),gd=H(oa()),Un=H(se());Ae();tD=H(Kc()),vn=H(P()),mS=H(Ns()),pS=H(Pn()),rD=H(J());io();Ad();({HDB_ERROR_MSGS:A4}=Un.hdb_errors),O4="data",b4=1e4,y4=10,SS=class extends eD.default{static{a(this,"ResourceBridge")}constructor(t){super(t),JC=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,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=is(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:TS(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await is(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=is(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],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}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){is(t).dropTable()}createSchema(t){return la({database:t.schema,table:null}),mS.signalSchemaChange(new pS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await gS(t.schema),mS.signalSchemaChange(new pS.SchemaEventMsg(process.pid,vn.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,JC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,tD.default)(t),s,i=Tr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Tr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return jC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Tr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!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,rD.async_set_timeout)(y4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%b4===0&&await _();return u.length>0&&await _(),s?jC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return XC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of XC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.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 n=(0,gd.default)(t,"value");if(n)throw n;let s=is(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:TS(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=is(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){is({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return is(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=is(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[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 n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of ZC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return ZC(r,t.search_values?.[0],t.search_values?.[1])}}};a(TS,"getSelect");a(XC,"getRecords");a(is,"getTable");a(jC,"createDeleteResponse");a(ZC,"groupRecordsInHistory")});var Dn=g((cfe,iD)=>{"use strict";var{ResourceBridge:N4}=(sD(),ie(nD)),I4=ee();I4.initSync();var Od;function w4(){return Od||(Od=new N4,Od)}a(w4,"getBridge");iD.exports=w4()});var uD=g((lfe,cD)=>{"use strict";var oD=require("lodash"),_u=require("mathjs"),C4=require("jsonata"),aD=J();cD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?oD.uniqWith(e,oD.isEqual):e,searchJSON:D4,mad:du.bind(null,_u.mad),mean:du.bind(null,_u.mean),mode:du.bind(null,_u.mode),prod:du.bind(null,_u.prod),median:du.bind(null,_u.median)};function du(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(du,"aggregateFunction");function D4(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(aD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),aD.isEmpty(this.__ala__.res[r])){let n=C4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(D4,"searchJSON")});var _D=g((dfe,lD)=>{"use strict";var Rt=require("moment"),RS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;lD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(RS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(RS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(RS)}});var hD=g((ffe,ED)=>{"use strict";var L4=require("@turf/area"),M4=require("@turf/length"),P4=require("@turf/circle"),U4=require("@turf/difference"),v4=require("@turf/distance"),B4=require("@turf/boolean-contains"),x4=require("@turf/boolean-equal"),H4=require("@turf/boolean-disjoint"),G4=require("@turf/helpers"),dD=P(),Te=J(),Cs=$();ED.exports={geoArea:q4,geoLength:F4,geoCircle:k4,geoDifference:V4,geoDistance:fD,geoNear:$4,geoContains:Y4,geoEqual:K4,geoCrosses:W4,geoConvert:Q4};function q4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(q4,"geoArea");function F4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return M4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(F4,"geoLength");function k4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return P4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(k4,"geoCircle");function V4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(V4,"geoDifference");function fD(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(fD,"geoDistance");function $4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return fD(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a($4,"geoNear");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoContains");function K4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return x4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(K4,"geoEqual");function W4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!H4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(W4,"geoCrosses");function Q4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(dD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(dD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),G4[t](e,r)}a(Q4,"geoConvert")});var bd=g((hfe,mD)=>{var oo=uD(),Wr=_D(),os=hD();mD.exports=e=>{e.aggr.mad=e.aggr.MAD=oo.mad,e.aggr.mean=e.aggr.MEAN=oo.mean,e.aggr.mode=e.aggr.MODE=oo.mode,e.aggr.prod=e.aggr.PROD=oo.prod,e.aggr.median=e.aggr.MEDIAN=oo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=oo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=oo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Wr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Wr.current_time,e.fn.extract=e.fn.EXTRACT=Wr.extract,e.fn.date=e.fn.DATE=Wr.date,e.fn.date_format=e.fn.DATE_FORMAT=Wr.date_format,e.fn.date_add=e.fn.DATE_ADD=Wr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Wr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Wr.date_diff,e.fn.now=e.fn.NOW=Wr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Wr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Wr.get_server_time,e.fn.getdate=e.fn.GETDATE=Wr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Wr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=os.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=os.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=os.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=os.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=os.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=os.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=os.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=os.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=os.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=os.geoNear}});var gD=g((mfe,TD)=>{"use strict";var fu=require("lodash"),gr=require("alasql");gr.options.cache=!1;var z4=bd(),pD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=J(),_a=Dn(),J4=P(),{hdb_errors:X4}=se(),{getDatabases:SD}=(Ae(),ie(ke)),j4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";z4(gr);var AS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new yd(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(pD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=fu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=SD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new gr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new gr.yy.LogicValue({value:i}):n instanceof gr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new gr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(J4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.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)n.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,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&fu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await gr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(pD(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.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(j4)>-1&&this.tables.forEach(s=>{let i={columnid:SD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=fu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await _a.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await _a.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await _a.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await _a.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 gr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new gr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new gr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new gr.yy.FuncValue:new gr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.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 E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await gr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=fu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await _a.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await gr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(X4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await _a.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};TD.exports=AS});var qr=g((Sfe,RD)=>{"use strict";var Z4=ey();RD.exports={searchByConditions:t3,searchByHash:r3,searchByValue:n3,search:s3};var OS=Dn(),{transformReq:bS}=J(),e3=gD();async function t3(e){return bS(e),OS.searchByConditions(e)}a(t3,"searchByConditions");async function r3(e){bS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of OS.searchByHash(e))r&&t.push(r);return t}a(r3,"searchByHash");async function n3(e){bS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of OS.searchByValue(e))t.push(r);return t}a(n3,"searchByValue");function s3(e,t){try{let r=new Z4(e);r.validate(),new e3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(s3,"search")});var Nd=g((gfe,AD)=>{"use strict";var i3=Dn();AD.exports={writeTransaction:o3};function o3(e,t,r){return i3.writeTransaction(e,t,r)}a(o3,"writeTransaction")});var ND=g((Ofe,yD)=>{"use strict";var a3=qr(),c3=ys(),OD=$(),u3=Fr(),Afe=Nd(),l3=require("clone"),NS=require("alasql"),_3=bd(),bD=require("util"),d3=bD.promisify(c3.getTableSchema),f3=bD.promisify(a3.search),E3=P(),yS=J();_3(NS);yD.exports={update:m3};var h3="There was a problem performing this update. Please check the logs and try again.";async function m3({statement:e,hdb_user:t}){let r=await d3(e.table.databaseid,e.table.tableid),n=p3(e.columns);yS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=l3(s),c=yS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=NS.parse(u).statements[0],l=await f3(_),d=S3(n,l);return T3(o,d,t)}a(m3,"update");function p3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=NS.compile(`SELECT ${r.expression.toString()} AS [${E3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw OD.error(t),new Error(h3)}}a(p3,"createUpdateRecord");function S3(e,t){return yS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(S3,"buildUpdateRecords");async function T3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await u3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){OD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(T3,"updateRecords")});var wD=g((Ife,ID)=>{var g3=require("alasql"),R3=qr(),A3=$(),O3=Dn(),wS=require("util"),IS=J(),b3=P(),y3=ys(),yfe=Nd(),Nfe=Fr(),N3="record",I3="successfully deleted",w3=wS.callbackify(M3),C3=wS.promisify(R3.search),D3=wS.promisify(y3.getTableSchema);ID.exports={convertDelete:w3};function L3(e){return`${e.deleted_hashes.length} ${N3}${e.deleted_hashes.length===1?"":"s"} ${I3}`}a(L3,"generateReturnMessage");async function M3({statement:e,hdb_user:t}){let r=await D3(e.table.databaseid,e.table.tableid);IS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=IS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=g3.parse(o).statements[0],u={operation:b3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await C3(c);let _=await O3.deleteRecords(u);return IS.isEmptyOrZeroLength(_.message)&&(_.message=L3(_)),delete _.txn_time,_}catch(_){throw A3.error(_),_.hdb_code?_.message:_}}a(M3,"convertDelete")});var PD=g((Cfe,MD)=>{"use strict";var P3=bs(),{hdb_errors:CD}=se(),{getDatabases:DD}=(Ae(),ie(ke));MD.exports={checkSchemaExists:LD,checkSchemaTableExists:U3,schema_describe:P3};async function LD(e){if(!DD()[e])return CD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(LD,"checkSchemaExists");async function U3(e,t){let r=await LD(e);if(r)return r;if(!DD()[e][t])return CD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(U3,"checkSchemaTableExists")});var Eu=g((Lfe,v3)=>{v3.exports={name:"harperdb",version:"4.3.41",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],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/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@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.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","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.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.5",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","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.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.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.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},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.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",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.4.2","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 Tu={};Fe(Tu,{addAnalyticsListener:()=>Su,recordAction:()=>nr,recordActionBinary:()=>Qr,setAnalyticsEnabled:()=>B3});function B3(e){kD=e}function nr(e,t,r,n,s){if(!kD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.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:n,type:s},Cd.set(i,o)}Id||x3()}function Qr(e,t,r,n,s){nr(!!e,t,r,n,s)}function Su(e){YD.push(e)}function x3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:ao.threadId,metrics:t};for(let[s,i]of Cd){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 KD){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}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 n=process.memoryUsage();t.push({metric:"memory",threadId:ao.threadId,byThread:!0,...n});for(let s of YD)s(t);Cd=new Map,ao.parentPort?ao.parentPort.postMessage({type:$D,report:r}):JD({report:r})},VD).unref()}async function H3(e,t=6e4){let r=LS(),n=QD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,hu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,hu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.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:A}=S;for(let N of T||[]){let{path:b,method:v,type:U,metric:F,count:M,total:Q,distribution:z,threads:j,...oe}=N;M||(M=1);let ue=F+(b?"-"+b:"");v!==void 0&&(ue+="-"+v),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[A];if(Ne)le=Ne;else{le.threads[A]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},N),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[A]=Object.assign({},oe),_.push(le));if(z){z=z.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...z):u.set(ue,z)}}await WD()}for(let p of _){let{path:S,method:T,type:A,metric:N,count:b,total:v,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let z=0;for(let j of F){let oe=j[Q];typeof oe=="number"&&(z+=oe)}p[Q]=z}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let A=T.count-1,N=[],b=0,v=0,U;for(let Ne of KD){let xe=A*Ne;for(;b<xe;)U=S[v++],b+=U.count,v===1&&b--;let n_=S[v>1?v-2:0];U||(U=S[0]),N.push(U.value-(U.value-n_.value)*(b-xe)/U.count)}let[F,M,Q,z,j,oe,ue,le,Be]=N;Object.assign(T,{p1:F,p10:M,p25:Q,median:z,p75:j,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-UD,active:h-vD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}UD=f,vD=h}async function BD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function LS(){return xD||(xD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function QD(){return HD||(HD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function F3(){zD=!0;let e=(0,pu.get)(DS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await H3(VD,e),await BD(LS(),G3),await BD(QD(),q3)},Math.min(e/2,2147483647)).unref()}function JD(e,t){let r=e.report;r.threadId=t?.threadId||ao.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(GD+=n.mean*n.count);r.totalBytesProcessed=GD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(qD.get(t))}),qD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),LS().primaryStore.put(r.id,r),zD||F3(),k3&&(XD=$3(r))}async function $3(e){if(await XD,!fi){let r=(0,mu.dirname)((0,hu.getLogFilePath)());try{fi=await(0,CS.open)((0,mu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,CS.open)((0,mu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>V3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
10
10
  `,t)}var ao,FD,hu,mu,CS,wd,pu,DS,Cd,kD,Id,VD,$D,YD,KD,UD,vD,WD,G3,q3,xD,HD,zD,GD,qD,k3,XD,fi,V3,Ds=Re(()=>{ao=require("worker_threads"),FD=H(Qe());Ae();hu=H($()),mu=require("path"),CS=require("fs/promises"),wd=H(Br()),pu=H(ee()),DS=H(P());fr();(0,pu.initSync)();Cd=new Map,kD=(0,pu.get)(DS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(B3,"setAnalyticsEnabled");a(nr,"recordAction");at.recordAnalytics=nr;a(Qr,"recordActionBinary");Id=0,VD=1e3,$D="analytics-report",YD=[];a(Su,"addAnalyticsListener");KD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(x3,"sendAnalytics");a(H3,"aggregation");UD=0,vD=0,WD=a(()=>new Promise(setImmediate),"rest");a(BD,"cleanup");G3=36e5,q3=31536e6;a(LS,"getRawAnalyticsTable");a(QD,"getAnalyticsTable");(0,FD.setChildListenerByType)($D,JD);a(F3,"startScheduledTasks");GD=0,qD=new Map,k3=!1;a(JD,"recordAnalytics");V3=1e6;a($3,"logAnalytics")});var BS=g(($fe,uL)=>{"use strict";var{decode:Y3}=require("msgpackr"),{isMainThread:Ffe,parentPort:kfe,threadId:Vfe}=require("worker_threads"),Md=ut(),da=Ve(),US=P(),sr=$(),PS=ee(),K3=P(),{onMessageByType:W3}=Qe(),tL=Os(),{recordAction:jD,recordActionBinary:Q3}=(Ds(),ie(Tu)),{publishToStream:z3}=Md,{ConsumerEvents:ZD}=require("nats"),J3=qr(),{promisify:X3}=require("util"),rL=X3(setTimeout),Pd=1e4,Ud,Ld,j3,Z3,nL,gu=new Map,fa=new Map;uL.exports={initialize:sL,ingestConsumer:vS,setSubscription:eX,setIgnoreOrigin:nX,getDatabaseSubscriptions:rX,updateConsumer:iL};async function sL(){W3(US.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await iL(n)}),nL=!0,sr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Md.getNATSReferences();Ud=e,Ld=e.info.server_name,j3=t,Z3=r}a(sL,"initialize");async function iL(e){if(e.status==="start"){let{js:t,jsm:r}=await oL(e.node_domain_name);vS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=gu.get(e.stream_name+e.node_domain_name);t&&(sr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),gu.set(e.stream_name+e.node_domain_name,"close")),fa.get(e.node_domain_name)==="failed"&&fa.set(e.node_domain_name,"close")}}a(iL,"updateConsumer");var vd=new Map;function eX(e,t,r){let n=vd.get(e);n||vd.set(e,n=new Map),n.set(t,r),nL||sL().then(tX)}a(eX,"setSubscription");async function tX(){let e=await J3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+da.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await oL(r),!n))break;let{schema:o,table:c}=i,u=tL.createNatsTableStreamName(o,c);vS(u,n,s,r)}}}a(tX,"accessConsumers");async function oL(e){let t,r,n=1;for(;!r;)try{t=await Ud.jetstream({domain:e}),r=await Ud.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(fa.get(e)==="close")break;fa.set(e,"failed"),n%10===1&&sr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Pd?n++*100:Pd;await rL(i)}return{js:t,jsm:r}}a(oL,"connectToRemoteJS");function rX(){return vd}a(rX,"getDatabaseSubscriptions");var aL;function nX(e){aL=e}a(nX,"setIgnoreOrigin");var cL=100,eL=new Array(cL),Dd=0;async function vS(e,t,r,n){let{connection:s}=await Md.getNATSReferences();Ud=s,Ld=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ld),sr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(fa.get(n)==="close")break;o%10===1&&sr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(sr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Md.createConsumer(r,e,Ld,new Date(Date.now()).toISOString()));let l=o++*100<Pd?o++*100:Pd;await rL(l)}let c=!1,u;for(;!c;){if(gu.get(e+n)==="close"||fa.get(n)==="close"){gu.delete(e+n),c=!0;continue}u=await i.consume({max_messages:PS.get(US.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),gu.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===ZD.ConsumerDeleted&&(await u.close(),c=!0),l.type===ZD.HeartbeatsMissed){let d=l.data;sr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===100&&(sr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await eL[Dd],eL[Dd]=sX(l).catch(d=>{sr.error(d)}),++Dd>=cL&&(Dd=0)}catch(l){l.message==="consumer deleted"?(sr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):sr.error("Error consuming clustering ingest, restarting consumer",l)}}}a(vS,"ingestConsumer");async function sX(e){let t=Y3(e.data);jD(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),sr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=PS.get(US.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(da.MSG_HEADERS.TRANSACTED_NODES)&&r.values(da.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(da.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!aL),Q3(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(da.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:E,expiresAt:f}=t;sr.trace("processing message:",o,c,_,(l?"records: "+l.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),sr.trace(`messageProcessor nats msg id: ${e.headers.get(da.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(v=>h=v),{timestamp:S,user:T,node_name:A}=E||{},N=vd.get(c)?.get(_);if(!N)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,N.send(t);else if(l.length===1&&!u)N.send({type:MS(o),value:l[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:A});else{let v=l.map((U,F)=>({type:MS(o),value:U,expiresAt:f,id:d?.[F],table:_}));for(;u;)v.push({type:MS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;N.send({type:"transaction",writes:v,table:_,timestamp:S,onCommit:h,user:T,nodeName:A})}PS.get(K3.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&z3(e.subject.split(".").slice(0,-1).join("."),tL.createNatsTableStreamName(c,_),e.headers,e.data),await p;let b=Date.now()-S;S&&jD(b,"replication-latency",e.subject,o,"ingest")}catch(o){sr.error(o)}e.ack()}a(sX,"messageProcessor");function MS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(MS,"convertOperation")});var ut=g((Xfe,NL)=>{"use strict";var Ht=ee();Ht.initSync();var iX=require("fs-extra"),oX=require("semver"),Ou=require("path"),{monotonicFactory:aX}=require("ulidx"),_L=aX(),cX=require("util"),dL=require("child_process"),uX=cX.promisify(dL.exec),lX=dL.spawn,Wt=Ve(),Ie=P(),Bd=J(),xn=$(),xd=Os(),_X=Nd(),Ru=pr(),{broadcast:dX,onMessageByType:fX,getWorkerIndex:EX}=Qe(),{isMainThread:fL}=require("worker_threads"),{Encoder:hX,decode:qS}=require("msgpackr"),EL=new hX,{isEmpty:_o}=Bd,hL=_n(),Kfe=48*36e11;fL&&fX(Ie.ITC_EVENT_TYPES.RESTART,()=>{ir=void 0,lo=void 0});var{connect:mX,StorageType:pX,RetentionPolicy:SX,AckPolicy:FS,DeliverPolicy:kS,DiscardPolicy:TX,NatsConnection:Wfe,JetStreamManager:Qfe,JetStreamClient:zfe,StringCodec:Jfe,JSONCodec:gX,createInbox:VS,headers:RX,ErrorCode:lL}=require("nats"),{PACKAGE_ROOT:AX}=P(),OX=Eu(),{recordAction:bX}=(Ds(),ie(Tu)),mL=gX(),yX="clustering",NX=OX.engines[Wt.NATS_SERVER_NAME],IX=Ou.join(AX,"dependencies"),GS=Ou.join(IX,`${process.platform}-${process.arch}`,Wt.NATS_BINARY_NAME),xS,HS,Au,co,uo;NL.exports={runCommand:pL,checkNATSServerInstalled:wX,createConnection:$S,getConnection:bu,getJetStreamManager:yu,getJetStream:TL,getNATSReferences:as,getServerList:DX,createLocalStream:YS,listStreams:gL,deleteLocalStream:LX,getServerConfig:Ea,listRemoteStreams:MX,viewStream:PX,viewStreamIterator:UX,publishToStream:vX,request:HX,reloadNATS:KS,reloadNATSHub:GX,reloadNATSLeaf:qX,extractServerName:xX,requestErrorHandler:FX,createLocalTableStream:bL,createTableStreams:$X,purgeTableStream:yL,purgeSchemaTableStreams:YX,getStreamInfo:KX,updateLocalStreams:QX,closeConnection:CX,getJsmServerName:Hd,addNatsMsgHeader:RL,clearClientCache:SL,updateRemoteConsumer:kX,createConsumer:AL,updateConsumerIterator:VX};async function pL(e,t=void 0){let{stdout:r,stderr:n}=await uX(e,{cwd:t});if(n)throw new Error(n.replace(`
11
11
  `,""));return r.replace(`
12
12
  `,"")}a(pL,"runCommand");async function wX(){try{await iX.access(GS)}catch{return!1}let e=await pL(`${GS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return oX.eq(t,NX)}a(wX,"checkNATSServerInstalled");async function $S(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await hL.getClusterUser();if(_o(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xn.trace("create nats connection called");let i=await mX({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),xn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&xn.error("Error with Nats client connection, connection closed",o),i===ir&&SL()}),i}a($S,"createConnection");function SL(){ir=void 0,co=void 0,uo=void 0,lo=void 0}a(SL,"clearClientCache");async function CX(){ir&&(await ir.drain(),ir=void 0,co=void 0,uo=void 0,lo=void 0)}a(CX,"closeConnection");var ir,lo;async function bu(){return lo||(lo=$S(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ir=await lo),ir||lo}a(bu,"getConnection");async function yu(){if(co)return co;_o(ir)&&await bu();let{domain:e}=Ea(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_o(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=await ir.jetstreamManager({domain:e,timeout:6e4}),co}a(yu,"getJetStreamManager");async function TL(){if(uo)return uo;_o(ir)&&await bu();let{domain:e}=Ea(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_o(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return uo=ir.jetstream({domain:e,timeout:6e4}),uo}a(TL,"getJetStream");async function as(){let e=ir||await bu(),t=co||await yu(),r=uo||await TL();return{connection:e,jsm:t,js:r}}a(as,"getNATSReferences");async function DX(e){let t=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await hL.getClusterUser(),s=await $S(t,r,n),i=VS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=mL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Bd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(DX,"getServerList");async function YS(e,t){let{jsm:r}=await as(),n=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:pX.File,retention:SX.Limits,subjects:t,discard:TX.Old,max_msgs:s,max_bytes:i,max_age:n})}a(YS,"createLocalStream");async function gL(){let{jsm:e}=await as(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(gL,"listStreams");async function LX(e){let{jsm:t}=await as();await t.streams.delete(e)}a(LX,"deleteLocalStream");async function MX(e){let{connection:t}=await as(),r=[],n=VS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(mL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(MX,"listRemoteStreams");async function PX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await as(),i=_L(),o={durable_name:i,ack_policy:FS.Explicit};t&&(o.deliver_policy=kS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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=qS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Wt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(PX,"viewStream");async function*UX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await as(),i=_L(),o={durable_name:i,ack_policy:FS.Explicit};t&&(o.deliver_policy=kS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.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=qS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Wt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(UX,"viewStreamIterator");async function vX(e,t,r,n){xn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=RL(n,r);let{js:s}=await as(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:EL.encode(n);try{xn.trace(`publishToStream publishing to subject: ${o}`),bX(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return OL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await YS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(vX,"publishToStream");function RL(e,t){t===void 0&&(t=RX());let r=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Wt.MSG_HEADERS.ORIGIN)&&r&&t.append(Wt.MSG_HEADERS.ORIGIN,r),t}a(RL,"addNatsMsgHeader");function Ea(e){e=e.toLowerCase();let t=Ou.join(Ht.get(Ie.CONFIG_PARAMS.ROOTPATH),yX);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return _o(HS)&&(HS={port:Ru.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ru.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.HUB,config_file:Wt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ou.join(t,Wt.PID_FILES.HUB),hdb_nats_path:t}),HS;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return _o(xS)&&(xS={port:Ru.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ru.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.LEAF,config_file:Wt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ru.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.LEAF,pid_file_path:Ou.join(t,Wt.PID_FILES.LEAF),hdb_nats_path:t}),xS;xn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ea,"getServerConfig");async function AL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:FS.Explicit,durable_name:r,deliver_policy:kS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(AL,"createConsumer");async function BX(e,t,r){await e.consumers.delete(t,r)}a(BX,"removeConsumer");function xX(e){return e.split(".")[1]}a(xX,"extractServerName");async function HX(e,t,r=6e4,n=VS()){if(!Bd.isObject(t))throw new Error("data param must be an object");let s=EL.encode(t),{connection:i}=await as(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return qS(c.data)}a(HX,"request");function KS(e){return new Promise(async(t,r)=>{let n=lX(GS,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(KS,"reloadNATS");async function GX(){let{pid_file_path:e}=Ea(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await KS(e)}a(GX,"reloadNATSHub");async function qX(){let{pid_file_path:e}=Ea(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await KS(e)}a(qX,"reloadNATSLeaf");function FX(e,t,r){let n;switch(e.code){case lL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case lL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(FX,"requestErrorHandler");async function kX(e,t){let r=t+Wt.SERVER_SUFFIX.LEAF,{connection:n}=await as(),{jsm:s}=await JX(r),{schema:i,table:o}=e,c=xd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await OL(async()=>{if(e.subscribe===!0)await AL(s,c,n.info.server_name,u);else try{await BX(s,c,n.info.server_name)}catch(_){xn.trace(_)}})}a(kX,"updateRemoteConsumer");async function VX(e,t,r,n){let s=xd.createNatsTableStreamName(e,t),i=r+Wt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!fL&&EX()<Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=BS();await c(o)}await dX(o),n==="stop"&&await Bd.async_set_timeout(1e3)}a(VX,"updateConsumerIterator");function OL(e){return _X.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(OL,"exclusiveLock");async function bL(e,t){let r=xd.createNatsTableStreamName(e,t),n=await Hd(),s=WX(e,t,n);await YS(r,[s])}a(bL,"createLocalTableStream");async function $X(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await bL(n,s)}}a($X,"createTableStreams");async function yL(e,t,r=void 0){if(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xd.createNatsTableStreamName(e,t),{domain:s}=Ea(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await bu()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")xn.warn(n);else throw n}}a(yL,"purgeTableStream");async function YX(e,t){if(Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await yL(e,t[r])}a(YX,"purgeSchemaTableStreams");async function KX(e){return(await yu()).streams.info(e)}a(KX,"getStreamInfo");function WX(e,t,r){return`${Wt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(WX,"createSubjectName");async function Hd(){if(Au)return Au;if(Au=(await yu())?.nc?.info?.server_name,Au===void 0)throw new Error("Unable to get jetstream manager server name");return Au}a(Hd,"getJsmServerName");async function QX(){let e=await yu(),t=await Hd(),r=await gL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=zX(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(QX,"updateLocalStreams");function zX(e){let{config:t}=e,r=!1,n=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ht.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(zX,"updateStreamLimits");async function JX(e){let t,r;try{t=await ir.jetstream({domain:e}),r=await ir.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw xn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(JX,"connectToRemoteJS")});var Nu=g((eEe,DL)=>{"use strict";var ha=H_(),ma=PD(),XX=$(),jX=require("uuid").v4,Zfe=require("clone"),qd=Ns(),pa=P(),ZX=require("util"),Ei=Dn(),{handleHDBError:Rr,hdb_errors:ej}=se(),{HDB_ERROR_MSGS:Gd,HTTP_STATUS_CODES:Ar}=ej,{SchemaEventMsg:Fd}=Pn(),IL=ut(),{getDatabases:tj}=(Ae(),ie(ke)),{transformReq:Sa}=J();DL.exports={createSchema:rj,createSchemaStructure:wL,createTable:nj,createTableStructure:CL,createAttribute:cj,dropSchema:sj,dropTable:ij,dropAttribute:oj,getBackup:uj};async function rj(e){let t=await wL(e);return qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),t}a(rj,"createSchema");async function wL(e){let t=ha.schema_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);if(Sa(e),!await ma.checkSchemaExists(e.schema))throw Rr(new Error,Gd.SCHEMA_EXISTS_ERR(e.schema),Ar.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Gd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(wL,"createSchemaStructure");async function nj(e){return Sa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await CL(e)}a(nj,"createTable");async function CL(e){let t=ha.create_table_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);if(ha.validateTableResidence(e.residence),!await ma.checkSchemaTableExists(e.schema,e.table))throw Rr(new Error,Gd.TABLE_EXISTS_ERR(e.schema,e.table),Ar.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Gd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:jX(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw Rr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ar.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(CL,"createTableStructure");async function sj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ha.schema_object(e),n=t??r;if(n)throw Rr(n,n.message,Ar.BAD_REQUEST,void 0,void 0,!0);Sa(e);let s=await ma.checkSchemaExists(e.schema);if(s)throw Rr(new Error,s,Ar.NOT_FOUND,pa.LOG_LEVELS.ERROR,s,!0);let i=await ma.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),await IL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(sj,"dropSchema");async function ij(e){let t=ha.table_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw Rr(new Error,r,Ar.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await IL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(ij,"dropTable");async function oj(e){let t=ha.attribute_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw Rr(new Error,r,Ar.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Rr(new Error,"You cannot drop a hash attribute",Ar.BAD_REQUEST,void 0,void 0,!0);if(pa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Rr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ar.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),aj(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw XX.error(`Got an error deleting attribute ${ZX.inspect(e)}.`),n}}a(oj,"dropAttribute");function aj(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(aj,"dropAttributeFromGlobal");async function cj(e){Sa(e);let t=tj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Rr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Ar.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(cj,"createAttribute");function uj(e){return Ei.getBackup(e)}a(uj,"getBackup")});var ML=g((rEe,LL)=>{"use strict";var{OPERATIONS_ENUM:lj}=P(),WS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=lj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};LL.exports=WS});var QS=g((iEe,xL)=>{"use strict";var _j=Dn(),sEe=ML(),kd=J(),Vd=P(),dj=ee(),{handleHDBError:PL,hdb_errors:fj}=se(),{HDB_ERROR_MSGS:UL,HTTP_STATUS_CODES:vL}=fj,Ej=Object.values(Vd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),BL="To use this operation audit log must be enabled in harperdb-config.yaml";xL.exports=hj;async function hj(e){if(kd.isEmpty(e.schema))throw new Error(UL.SCHEMA_REQUIRED_ERR);if(kd.isEmpty(e.table))throw new Error(UL.TABLE_REQUIRED_ERR);if(!dj.get(Vd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw PL(new Error,BL,vL.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,BL,!0);let t=kd.checkSchemaTableExist(e.schema,e.table);if(t)throw PL(new Error,t,vL.NOT_FOUND,Vd.LOG_LEVELS.ERROR,t,!0);if(!kd.isEmpty(e.search_type)&&Ej.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await _j.readAuditLog(e)}a(hj,"readAuditLog")});var GL=g((aEe,HL)=>{"use strict";var{OPERATIONS_ENUM:mj}=P(),zS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=mj.GET_BACKUP,this.schema=t,this.table=r}};HL.exports=zS});var kL=g((_Ee,FL)=>{"use strict";var pj=Dn(),uEe=GL(),JS=J(),Sj=P(),lEe=ee(),{handleHDBError:Tj,hdb_errors:gj}=se(),{HDB_ERROR_MSGS:qL,HTTP_STATUS_CODES:Rj}=gj;FL.exports=Aj;async function Aj(e){if(JS.isEmpty(e.schema))throw new Error(qL.SCHEMA_REQUIRED_ERR);if(JS.isEmpty(e.table))throw new Error(qL.TABLE_REQUIRED_ERR);let t=JS.checkSchemaTableExist(e.schema,e.table);if(t)throw Tj(new Error,t,Rj.NOT_FOUND,Sj.LOG_LEVELS.ERROR,t,!0);return await pj.getBackup(read_audit_log_object)}a(Aj,"getBackup")});var QL=g((fEe,WL)=>{var hi=require("validate.js"),$L=je(),Ta=P(),{handleHDBError:Oj,hdb_errors:bj}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:yj}=bj,XS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Nj={STRUCTURE_USER:"structure_user"},VL=Object.values(Ta.ROLE_TYPES_ENUM),Ij="attribute_permissions",wj="attribute_name",{PERMS_CRUD_ENUM:ga}=Ta,Cj=[Ij,...Object.values(ga)],YL=[ga.READ,ga.INSERT,ga.UPDATE],Dj=[wj,...YL];function Lj(e){let t=XS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,KL(e,t)}a(Lj,"addRoleValidation");function Mj(e){let t=XS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,KL(e,t)}a(Mj,"alterRoleValidation");function Pj(e){let t=XS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,$L.validateObject(e,t)}a(Pj,"dropRoleValidation");var Uj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function KL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Uj.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=$L.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=vj(e);o&&At(o,r),VL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(VL.indexOf(o)<0){if(o===Nj.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]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.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]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{Cj.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ga).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!Dj.includes(p)&&p!==ga.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}YL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return Bj(r)}a(KL,"customValidate");WL.exports={addRoleValidation:Lj,alterRoleValidation:Mj,dropRoleValidation:Pj};function vj(e){let{operation:t,permission:r}=e;if(t===Ta.OPERATIONS_ENUM.ADD_ROLE||t===Ta.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ta.ROLE_TYPES_ENUM.SUPER_USER:Ta.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(vj,"validateNoSUPerms");function Bj(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return Oj(new Error,n,yj.BAD_REQUEST)}else return null}a(Bj,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var nT=g((hEe,jL)=>{"use strict";var zL=Fr(),JL=qr(),xj=ci(),ZS=QL(),eT=Ns(),Hj=require("uuid").v4,Gj=require("util"),$d=P(),qj=J(),tT=JL.searchByValue,Fj=JL.searchByHash,kj=Gj.promisify(xj.delete),Vj=ns(),$j=aa(),{hdb_errors:Yj,handleHDBError:fo}=se(),{HDB_ERROR_MSGS:XL,HTTP_STATUS_CODES:Iu}=Yj,{UserEventMsg:rT}=Pn();jL.exports={addRole:Kj,alterRole:Wj,dropRole:Qj,listRoles:zj};function jS(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(jS,"scrubRoleDetails");async function Kj(e){let t=ZS.addRoleValidation(e);if(t)throw t;e=jS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await tT(r)||[])}catch(i){throw fo(i)}if(n&&n.length>0)throw fo(new Error,XL.ROLE_ALREADY_EXISTS(e.role),Iu.CONFLICT,void 0,void 0,!0);e.id||(e.id=Hj());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await zL.insert(s),eT.signalUserChange(new rT(process.pid)),e=jS(e),e}a(Kj,"addRole");async function Wj(e){let t=ZS.alterRoleValidation(e);if(t)throw t;e=jS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await zL.update(r)}catch(s){throw fo(s)}if(n&&n?.message==="updated 0 of 1 records")throw fo(new Error,"Invalid role id",Iu.BAD_REQUEST,void 0,void 0,!0);return await eT.signalUserChange(new rT(process.pid)),e}a(Wj,"alterRole");async function Qj(e){let t=ZS.dropRoleValidation(e);if(t)throw fo(new Error,t,Iu.BAD_REQUEST,void 0,void 0,!0);let r=new $j($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Fj(r));if(n.length===0)throw fo(new Error,XL.ROLE_NOT_FOUND,Iu.NOT_FOUND,void 0,void 0,!0);let s=new Vj($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tT(s)),o=!1;if(qj.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw fo(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Iu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await kj(c),eT.signalUserChange(new rT(process.pid)),`${n[0].role} successfully deleted`}a(Qj,"dropRole");async function zj(){return tT({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(zj,"listRoles")});var rM=g((pEe,tM)=>{"use strict";var Jj=ee(),mi=require("joi"),Xj=je(),ZL=require("moment"),jj=require("fs-extra"),sT=require("path"),Zj=require("lodash"),wu=P(),{LOG_LEVELS:Eo}=P(),eZ="YYYY-MM-DD hh:mm:ss",tZ=sT.resolve(__dirname,"../logs");tM.exports=function(e){return Xj.validateBySchema(e,rZ)};var rZ=mi.object({from:mi.custom(eM),until:mi.custom(eM),level:mi.valid(Eo.NOTIFY,Eo.FATAL,Eo.ERROR,Eo.WARN,Eo.INFO,Eo.DEBUG,Eo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(nZ)});function eM(e,t){if(ZL(e,ZL.ISO_8601).format(eZ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(eM,"validateDatetime");function nZ(e,t){if(Zj.invert(wu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Jj.get(wu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?wu.LOG_NAMES.HDB:e,i=s===wu.LOG_NAMES.INSTALL?sT.join(tZ,wu.LOG_NAMES.INSTALL):sT.join(n,s);return jj.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(nZ,"validateReadLogPath")});var oT=g((TEe,sM)=>{"use strict";var Yd=P(),sZ=$(),iZ=ee(),oZ=rM(),iT=require("path"),nM=require("fs-extra"),{once:aZ}=require("events"),{handleHDBError:cZ,hdb_errors:uZ}=se(),{PACKAGE_ROOT:lZ}=P(),_Z=iT.join(lZ,"logs"),dZ=1e3,fZ=200;sM.exports=EZ;async function EZ(e){let t=oZ(e);if(t)throw cZ(t,t.message,uZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=iZ.get(Yd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Yd.LOG_NAMES.HDB:e.log_name,s=n===Yd.LOG_NAMES.INSTALL?iT.join(_Z,Yd.LOG_NAMES.INSTALL):iT.join(r,n),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?dZ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!l&&(p=Math.max(nM.statSync(s).size-(h+5)*fZ,0));let S=nM.createReadStream(s,{start:p});S.on("error",U=>{sZ.error(U)});let T=0,A=[],N="",b;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=N+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){b&&(b.message=U.slice(M,Q.index),v(b));let[z,j,oe]=Q,ue=oe.split("] ["),le=ue[0],Be=ue[1];ue.splice(0,2),b={timestamp:j,thread:le,level:Be,tags:ue,message:""},M=Q.index+z.length}N=U.slice(M)}),S.on("end",U=>{S.destroyed||b&&(b.message=N.trim(),v(b))}),S.resume();function v(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,A),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,A),T++,T===h&&S.destroy())}}return a(v,"onLogMessage"),await aZ(S,"close"),A}a(EZ,"readLog");function pi(e,t,r){t==="desc"?hZ(e,r):t==="asc"?mZ(e,r):r.push(e)}a(pi,"pushLineToResult");function hZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(hZ,"insertDescending");function mZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(mZ,"insertAscending")});var Kd=g((bEe,cM)=>{"use strict";var aT=require("joi"),{string:Cu,boolean:iM,date:pZ}=aT.types(),SZ=je(),{validateSchemaExists:REe,validateTableExists:AEe,validateSchemaName:OEe}=jn(),TZ=P(),gZ=Ve(),oM=ee();oM.initSync();var RZ=Cu.invalid(oM.get(TZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(gZ.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(),aM={operation:Cu.valid("add_node","update_node","set_node_replication"),node_name:RZ,subscriptions:aT.array().items({table:Cu.optional(),schema:Cu.optional(),database:Cu.optional(),subscribe:iM.required(),publish:iM.required().custom(OZ),start_time:pZ.iso()}).min(1).required()};function AZ(e){return SZ.validateBySchema(e,aT.object(aM))}a(AZ,"addUpdateNodeValidator");function OZ(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(OZ,"checkForFalsy");cM.exports={addUpdateNodeValidator:AZ,validation_schema:aM}});var lM=g((NEe,uM)=>{var bZ=je(),yZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};uM.exports=function(e){return bZ.validateObject(e,yZ)}});var Wd=g((IEe,_M)=>{"use strict";var NZ=P().OPERATIONS_ENUM,cT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=NZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};_M.exports=cT});var fM=g((CEe,dM)=>{"use strict";var IZ={OPERATION:"operation",REFRESH:"refresh"},uT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},lT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};dM.exports={JWTTokens:uT,TOKEN_TYPE_ENUM:IZ,JWTRSAKeys:lT}});var Mu=g((LEe,pM)=>{"use strict";var Lu=require("jsonwebtoken"),_T=require("fs-extra"),dT=J(),dn=P(),{handleHDBError:Or,hdb_errors:wZ}=se(),{HTTP_STATUS_CODES:br,AUTHENTICATION_ERROR_MSGS:yr}=wZ,Du=$(),EM=z_(),hT=_n(),CZ=Fr().update,DZ=Wd(),LZ=Ns(),{UserEventMsg:MZ}=Pn(),Si=ee();Si.initSync();var fT=require("path"),{JWTTokens:PZ,JWTRSAKeys:UZ,TOKEN_TYPE_ENUM:Qd}=fM(),vZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",BZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",zd="RS256",ET;pM.exports={createTokens:xZ,validateOperationToken:GZ,refreshOperationToken:HZ,validateRefreshToken:mM};async function xZ(e){if(dT.isEmpty(e)||typeof e!="object")throw Or(new Error,yr.INVALID_AUTH_OBJECT,br.BAD_REQUEST,void 0,void 0,!0);if(dT.isEmpty(e.username))throw Or(new Error,yr.USERNAME_REQUIRED,br.BAD_REQUEST,void 0,void 0,!0);if(dT.isEmpty(e.password))throw Or(new Error,yr.PASSWORD_REQUIRED,br.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await hT.findAndValidateUser(e.username,e.password),!t)throw Or(new Error,yr.INVALID_CREDENTIALS,br.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Du.error(E),Or(new Error,yr.INVALID_CREDENTIALS,br.UNAUTHORIZED,void 0,void 0,!0)}let r=await Jd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await hM(i,r.private_key,r.passphrase),c=await Lu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:BZ,algorithm:zd,subject:Qd.REFRESH}),u=EM.hash(c),_=new DZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await CZ(_)}catch(E){Du.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Or(new Error,yr.REFRESH_TOKEN_SAVE_FAILED,br.INTERNAL_SERVER_ERROR);return LZ.signalUserChange(new MZ(process.pid)),new PZ(o,c)}a(xZ,"createTokens");async function hM(e,t,r){return await Lu.sign(e,{key:t,passphrase:r},{expiresIn:vZ,algorithm:zd,subject:Qd.OPERATION})}a(hM,"signOperationToken");async function Jd(){if(ET===void 0)try{let e=fT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=fT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=fT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await _T.readFile(e)).toString(),s=(await _T.readFile(t)).toString(),i=(await _T.readFile(r)).toString();ET=new UZ(i,s,n)}catch(e){throw Du.error(e),Or(new Error,yr.NO_ENCRYPTION_KEYS,br.INTERNAL_SERVER_ERROR)}return ET}a(Jd,"getJWTRSAKeys");async function HZ(e){if(!e)throw Or(new Error,yr.INVALID_BODY,br.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Or(new Error,yr.REFRESH_TOKEN_REQUIRED,br.BAD_REQUEST,void 0,void 0,!0);await mM(e.refresh_token);let t=await Jd(),r=await Lu.decode(e.refresh_token);return{operation_token:await hM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(HZ,"refreshOperationToken");async function GZ(e){try{let t=await Jd(),r=await Lu.verify(e,t.public_key,{algorithms:zd,subject:Qd.OPERATION});return await hT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Du.warn(t),t.name&&t.name==="TokenExpiredError"?Or(new Error,yr.TOKEN_EXPIRED,br.FORBIDDEN):Or(new Error,yr.INVALID_TOKEN,br.UNAUTHORIZED)}}a(GZ,"validateOperationToken");async function mM(e){let t;try{let r=await Jd(),n=await Lu.verify(e,r.public_key,{algorithms:zd,subject:Qd.REFRESH});t=await hT.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Du.warn(r),r.name&&r.name==="TokenExpiredError"?Or(new Error,yr.TOKEN_EXPIRED,br.FORBIDDEN):Or(new Error,yr.INVALID_TOKEN,br.UNAUTHORIZED)}if(!EM.validate(t.refresh_token,e))throw Or(new Error,yr.INVALID_TOKEN,br.UNAUTHORIZED);return t}a(mM,"validateRefreshToken")});var mT=g((UEe,gM)=>{"use strict";var qZ=lM(),Ra=require("passport"),FZ=require("passport-local").Strategy,kZ=require("passport-http").BasicStrategy,VZ=require("util"),$Z=_n(),TM=VZ.callbackify($Z.findAndValidateUser),PEe=vr(),YZ=P(),SM=Mu();Ra.use(new FZ(function(e,t,r){TM(e,t,r)}));Ra.use(new kZ(function(e,t,r){TM(e,t,r)}));Ra.serializeUser(function(e,t){t(null,e)});Ra.deserializeUser(function(e,t){t(null,e)});function KZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Ra.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===YZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?SM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):SM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ra.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(KZ,"authorize");function WZ(e,t){let r=qZ(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(WZ,"checkPermissions");gM.exports={authorize:KZ,checkPermissions:WZ}});var Ti=g((BEe,RM)=>{"use strict";var pT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ST=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};RM.exports={Node:pT,NodeSubscription:ST}});var OM=g((HEe,AM)=>{"use strict";var QZ=P().OPERATIONS_ENUM,TT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=QZ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};AM.exports=TT});var Pu=g((qEe,bM)=>{"use strict";var gT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},RT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};bM.exports={RemotePayloadObject:gT,RemotePayloadSubscription:RT}});var NM=g((kEe,yM)=>{"use strict";var AT=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};yM.exports=AT});var CM=g((WEe,wM)=>{"use strict";var zZ=NM(),$Ee=ft(),IM=ze(),JZ=$(),{getSchemaPath:YEe,getTransactionAuditStorePath:KEe}=Xe(),{getDatabases:XZ}=(Ae(),ie(ke));wM.exports=jZ;async function jZ(e){let t=new zZ;try{let r=XZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=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=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){JZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(jZ,"lmdbGetTableSize")});var LM=g((zEe,DM)=>{"use strict";var OT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};DM.exports=OT});var Aa=g((the,vM)=>{"use strict";var ZZ=require("fs-extra"),e5=require("path"),or=require("systeminformation"),gi=$(),MM=ut(),XEe=Ve(),jd=P(),t5=CM(),r5=bs(),{getThreadInfo:PM}=Qe(),UT=ee();UT.initSync();var n5=LM(),{openEnvironment:jEe}=ze(),{getSchemaPath:ZEe}=Xe(),{database:ehe,databases:bT}=(Ae(),ie(ke)),Xd;vM.exports={getHDBProcessInfo:wT,getNetworkInfo:DT,getDiskInfo:CT,getMemoryInfo:IT,getCPUInfo:NT,getTimeInfo:yT,getSystemInformation:LT,systemInformation:s5,getTableSize:MT,getMetrics:PT};function yT(){return or.time()}a(yT,"getTimeInfo");async function NT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await or.cpu();l.cpu_speed=await or.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...A}=await or.currentLoad();return A.cpus=[],T.forEach(N=>{let{raw_load:b,raw_load_idle:v,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...z}=N;A.cpus.push(z)}),l.current_load=A,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(NT,"getCPUInfo");async function IT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await or.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(IT,"getMemoryInfo");async function wT(){let e={core:[],clustering:[]};try{let t=await or.processes(),r;try{r=Number.parseInt(await ZZ.readFile(e5.join(UT.get(jd.CONFIG_PARAMS.ROOTPATH),jd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jd.NODE_ERROR_CODES.ENOENT)gi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(wT,"getHDBProcessInfo");async function CT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await or.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await or.fsStats();return e.read_write=_,e.size=await or.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(CT,"getDiskInfo");async function DT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await or.networkInterfaceDefault(),e.latency=await or.inetChecksite("google.com"),(await or.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await or.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(DT,"getNetworkInfo");async function LT(){if(Xd!==void 0)return Xd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await or.osInfo();e=c;let u=await or.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Xd=e,Xd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(LT,"getSystemInformation");async function MT(){let e=[],t=await r5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await t5(n));return e}a(MT,"getTableSize");async function PT(){let e={};for(let t in bT){let r=e[t]={},n=r.tables={};for(let s in bT[t])try{let i=bT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(PT,"getMetrics");async function UM(){if(UT.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await MM.getNATSReferences(),t=await MM.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(UM,"getNatsStreamInfo");async function s5(e){let t=new n5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LT(),t.time=yT(),t.cpu=await NT(),t.memory=await IT(),t.disk=await CT(),t.network=await DT(),t.harperdb_processes=await wT(),t.table_size=await MT(),t.metrics=await PT(),t.threads=await PM(),t.replication=await UM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LT();break;case"time":t.time=yT();break;case"cpu":t.cpu=await NT();break;case"memory":t.memory=await IT();break;case"disk":t.disk=await CT();break;case"network":t.network=await DT();break;case"harperdb_processes":t.harperdb_processes=await wT();break;case"table_size":t.table_size=await MT();break;case"database_metrics":case"metrics":t.metrics=await PT();break;case"threads":t.threads=await PM();break;case"replication":t.replication=await UM();break;default:break}return t}a(s5,"systemInformation")});var ef=g((nhe,BM)=>{"use strict";BM.exports={version:i5,printVersion:o5};var Zd=Eu();function i5(){if(Zd)return Zd.version}a(i5,"version");function o5(){Zd&&console.log(`HarperDB Version ${Zd.version}`)}a(o5,"printVersion")});var fn=g((ahe,qM)=>{"use strict";var a5=Fr(),vT=J(),c5=require("util"),ho=P(),xM=ee();xM.initSync();var u5=mT(),HM=qr(),{Node:ihe,NodeSubscription:ohe}=Ti(),l5=aa(),_5=OM(),{RemotePayloadObject:d5,RemotePayloadSubscription:f5}=Pu(),{handleHDBError:E5,hdb_errors:h5}=se(),{HTTP_STATUS_CODES:m5,HDB_ERROR_MSGS:p5}=h5,S5=ns(),T5=Aa(),g5=ef(),{getDatabases:R5}=(Ae(),ie(ke)),A5=c5.promisify(u5.authorize),O5=HM.searchByHash,b5=HM.searchByValue;qM.exports={authHeaderToUser:y5,isEmpty:N5,getNodeRecord:I5,upsertNodeRecord:w5,buildNodePayloads:C5,checkClusteringEnabled:D5,getAllNodeRecords:L5,getSystemInfo:M5,reverseSubscription:GM};async function y5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await A5(t,null),e}a(y5,"authHeaderToUser");function N5(e){return e==null}a(N5,"isEmpty");async function I5(e){let t=new l5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return O5(t)}a(I5,"getNodeRecord");async function w5(e){let t=new _5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return a5.upsert(t)}a(w5,"upsertNodeRecord");function GM(e){if(vT.isEmpty(e.subscribe)||vT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(GM,"reverseSubscription");function C5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=vT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=GM(c),f=R5()[u]?.[_],h=new f5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new d5(r,t,s,n)}a(C5,"buildNodePayloads");function D5(){if(!xM.get(ho.CONFIG_PARAMS.CLUSTERING_ENABLED))throw E5(new Error,p5.CLUSTERING_NOT_ENABLED,m5.BAD_REQUEST,void 0,void 0,!0)}a(D5,"checkClusteringEnabled");async function L5(){let e=new S5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await b5(e))}a(L5,"getAllNodeRecords");async function M5(){let e=await T5.getSystemInformation();return{hdb_version:g5.version(),node_version:e.node_version,platform:e.platform}}a(M5,"getSystemInfo")});var BT=g((uhe,QM)=>{"use strict";var tf=ut(),FM=J(),kM=Ve(),VM=P(),rf=$(),$M=Nu(),P5=md(),{RemotePayloadObject:U5}=Pu(),{handleHDBError:YM,hdb_errors:v5}=se(),{HTTP_STATUS_CODES:KM}=v5,{NodeSubscription:WM}=Ti();QM.exports=B5;async function B5(e,t){let r;try{r=await tf.request(`${t}.${kM.REQUEST_SUFFIX}`,new U5(VM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),rf.trace("Response from remote describe all request:",r)}catch(o){rf.error(`addNode received error from describe all request to remote node: ${o}`);let c=tf.requestErrorHandler(o,"add_node",t);throw YM(new Error,c,KM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===kM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw YM(new Error,o,KM.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===VM.SYSTEM_SCHEMA_NAME){await tf.createLocalTableStream(u,c);let h=new WM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=FM.doesSchemaExist(u),l=n[u]!==void 0,d=c?FM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(rf.trace(`addNode creating schema: ${u}`),await $M.createSchema({operation:"create_schema",schema:u})),!d&&E){rf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new P5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await $M.createTable(h)}await tf.createLocalTableStream(u,c);let f=new WM(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(B5,"reviewSubscriptions")});var af=g((_he,XM)=>{"use strict";var{handleHDBError:nf,hdb_errors:x5}=se(),{HTTP_STATUS_CODES:sf}=x5,{addUpdateNodeValidator:H5}=Kd(),of=$(),JM=P(),zM=Ve(),G5=J(),Uu=ut(),vu=fn(),q5=ee(),F5=BT(),{Node:k5,NodeSubscription:V5}=Ti(),{broadcast:$5}=Qe(),Y5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",K5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",W5=q5.get(JM.CONFIG_PARAMS.CLUSTERING_NODENAME);XM.exports=Q5;async function Q5(e,t=!1){of.trace("addNode called with:",e),vu.checkClusteringEnabled();let r=H5(e);if(r)throw nf(r,r.message,sf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await vu.getNodeRecord(n);if(!G5.isEmptyOrZeroLength(d))throw nf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,sf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await F5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Y5,o;let c=vu.buildNodePayloads(s,W5,JM.OPERATIONS_ENUM.ADD_NODE,await vu.getSystemInfo()),u=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new V5(f.schema,f.table,f.publish,f.subscribe))}of.trace("addNode sending remote payload:",c);let _;try{_=await Uu.request(`${n}.${zM.REQUEST_SUFFIX}`,c)}catch(d){of.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Uu.updateRemoteConsumer(p,n)}let E=Uu.requestErrorHandler(d,"add_node",n);throw nf(new Error,E,sf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===zM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw nf(new Error,d,sf.INTERNAL_SERVER_ERROR,"error",d)}of.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Uu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Uu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new k5(n,u,_.system_info);return await vu.upsertNodeRecord(l),$5({type:"nats_update"}),i.length>0?o.message=K5:o.message=`Successfully added '${n}' to manifest`,o}a(Q5,"addNode")});var GT=g((Ehe,eP)=>{"use strict";var{handleHDBError:xT,hdb_errors:z5}=se(),{HTTP_STATUS_CODES:HT}=z5,{addUpdateNodeValidator:J5}=Kd(),Bu=$(),ZM=P(),jM=Ve(),fhe=J(),xu=ut(),Hu=fn(),X5=ee(),{cloneDeep:j5}=require("lodash"),Z5=BT(),{Node:e8,NodeSubscription:t8}=Ti(),{broadcast:r8}=Qe(),n8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",s8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",i8=X5.get(ZM.CONFIG_PARAMS.CLUSTERING_NODENAME);eP.exports=o8;async function o8(e){Bu.trace("updateNode called with:",e),Hu.checkClusteringEnabled();let t=J5(e);if(t)throw xT(t,t.message,HT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Hu.getNodeRecord(r);s.length>0&&(n=j5(s));let{added:i,skipped:o}=await Z5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=n8,c;let u=Hu.buildNodePayloads(i,i8,ZM.OPERATIONS_ENUM.UPDATE_NODE,await Hu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Bu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Bu.trace("updateNode sending remote payload:",u);let _;try{_=await xu.request(`${r}.${jM.REQUEST_SUFFIX}`,u)}catch(l){Bu.error(`updateNode received error from request: ${l}`);let d=xu.requestErrorHandler(l,"update_node",r);throw xT(new Error,d,HT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===jM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw xT(new Error,l,HT.INTERNAL_SERVER_ERROR,"error",l)}Bu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await xu.updateRemoteConsumer(E,r),E.subscribe===!0?await xu.updateConsumerIterator(E.schema,E.table,r,"start"):await xu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new e8(r,[],_.system_info)]),await a8(n[0],i,_.system_info),o.length>0?c.message=s8:c.message=`Successfully updated '${r}'`,c}a(o8,"updateNode");async function a8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new t8(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Hu.upsertNodeRecord(n),r8({type:"nats_update"})}a(a8,"updateNodeTable")});var iP=g((mhe,sP)=>{"use strict";var nP=require("joi"),{string:tP}=nP.types(),c8=je(),rP=P(),u8=ee(),l8=Ve();sP.exports=_8;function _8(e){let t=tP.invalid(u8.get(rP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(l8.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=nP.object({operation:tP.valid(rP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return c8.validateBySchema(e,r)}a(_8,"removeNodeValidator")});var uf=g((She,lP)=>{"use strict";var{handleHDBError:oP,hdb_errors:d8}=se(),{HTTP_STATUS_CODES:aP}=d8,f8=iP(),Gu=$(),cP=fn(),E8=J(),cf=P(),uP=Ve(),qT=ut(),h8=ee(),{RemotePayloadObject:m8}=Pu(),{NodeSubscription:p8}=Ti(),S8=ca(),T8=ci(),{broadcast:g8}=Qe(),R8=h8.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);lP.exports=A8;async function A8(e){Gu.trace("removeNode called with:",e),cP.checkClusteringEnabled();let t=f8(e);if(t)throw oP(t,t.message,aP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await cP.getNodeRecord(r);if(E8.isEmptyOrZeroLength(n))throw oP(new Error,`Node '${r}' was not found.`,aP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new m8(cf.OPERATIONS_ENUM.REMOVE_NODE,R8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await qT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await qT.updateRemoteConsumer(new p8(l.schema,l.table,!1,!1),r)}catch(d){Gu.error(d)}}try{i=await qT.request(`${r}.${uP.REQUEST_SUFFIX}`,s),Gu.trace("Remove node reply from remote node:",r,i)}catch(u){Gu.error("removeNode received error from request:",u),o=!0}let c=new S8(cf.SYSTEM_SCHEMA_NAME,cf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await T8.deleteRecord(c),g8({type:"nats_update"}),i?.status===uP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Gu.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(A8,"removeNode")});var fP=g((ghe,dP)=>{"use strict";var _P=require("joi"),{string:O8,array:b8}=_P.types(),y8=je(),N8=Kd();dP.exports=I8;function I8(e){let t=_P.object({operation:O8.valid("configure_cluster").required(),connections:b8.items(N8.validation_schema).required()});return y8.validateBySchema(e,t)}a(I8,"configureClusterValidator")});var FT=g((Ahe,SP)=>{"use strict";var w8=P(),lf=$(),C8=J(),D8=uf(),L8=af(),EP=fn(),M8=fP(),{handleHDBError:hP,hdb_errors:P8}=se(),{HTTP_STATUS_CODES:mP}=P8,U8="Configure cluster complete.",v8="Failed to configure the cluster. Check the logs for more details.",B8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";SP.exports=x8;async function x8(e){lf.trace("configure cluster called with:",e),EP.checkClusteringEnabled();let t=M8(e);if(t)throw hP(t,t.message,mP.BAD_REQUEST,void 0,void 0,!0);let r=await EP.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await pP(D8,{operation:w8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}lf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await pP(L8,d,d.node_name);s.push(E)}lf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(lf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(C8.isEmptyOrZeroLength(o))return{message:U8,connections:c};if(u)return{message:B8,failed_nodes:o,connections:c};throw hP(new Error,v8,mP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(x8,"configureCluster");async function pP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(pP,"functionWrapper")});var AP=g((bhe,RP)=>{"use strict";var qu=require("joi"),H8=je(),{validateSchemaExists:TP,validateTableExists:G8,validateSchemaName:gP}=jn(),q8=qu.object({operation:qu.string().valid("purge_stream"),schema:qu.string().custom(TP).custom(gP).optional(),database:qu.string().custom(TP).custom(gP).optional(),table:qu.string().custom(G8).required()});function F8(e){return H8.validateBySchema(e,q8)}a(F8,"purgeStreamValidator");RP.exports=F8});var kT=g((Nhe,OP)=>{"use strict";var{handleHDBError:k8,hdb_errors:V8}=se(),{HTTP_STATUS_CODES:$8}=V8,Y8=AP(),K8=ut(),W8=fn();OP.exports=Q8;async function Q8(e){e.schema=e.schema??e.database;let t=Y8(e);if(t)throw k8(t,t.message,$8.BAD_REQUEST,void 0,void 0,!0);W8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await K8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Q8,"purgeStream")});var YT=g((whe,CP)=>{"use strict";var $T=fn(),z8=ut(),NP=ee(),_f=P(),mo=Ve(),J8=J(),VT=$(),{RemotePayloadObject:X8}=Pu(),{ErrorCode:bP}=require("nats"),yP=NP.get(_f.CONFIG_PARAMS.CLUSTERING_ENABLED),IP=NP.get(_f.CONFIG_PARAMS.CLUSTERING_NODENAME);CP.exports={clusterStatus:j8,buildNodeStatus:wP};async function j8(){let e={node_name:IP,is_enabled:yP,connections:[]};if(!yP)return e;let t=await $T.getAllNodeRecords();if(J8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(wP(t[n],e.connections));return await Promise.allSettled(r),e}a(j8,"clusterStatus");async function wP(e,t){let r=e.name,n=new X8(_f.OPERATIONS_ENUM.CLUSTER_STATUS,IP,void 0,await $T.getSystemInfo()),s,i,o=mo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await z8.request(mo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===mo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=mo.CLUSTER_STATUS_STATUSES.CLOSED,VT.error(`Error getting node status from ${r} `,s))}catch(u){VT.warn(`Error getting node status from ${r}`,u),u.code===bP.NoResponders?o=mo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===bP.Timeout?o=mo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=mo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Z8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==_f.PRE_4_0_0_VERSION&&await $T.upsertNodeRecord(u)}catch(u){VT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(wP,"buildNodeStatus");function Z8(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Z8,"NodeStatusObject")});var WT=g((Dhe,DP)=>{"use strict";var{handleHDBError:e6,hdb_errors:t6}=se(),{HTTP_STATUS_CODES:r6}=t6,n6=ut(),s6=fn(),KT=J(),df=require("joi"),i6=je(),o6=2e3,a6=df.object({timeout:df.number().min(1),connected_nodes:df.boolean(),routes:df.boolean()});DP.exports=c6;async function c6(e){s6.checkClusteringEnabled();let t=i6.validateBySchema(e,a6);if(t)throw e6(t,t.message,r6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||KT.autoCastBoolean(n),o=s===void 0||KT.autoCastBoolean(s),c={nodes:[]},u=await n6.getServerList(r??o6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:KT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(c6,"clusterNetwork")});var UP=g((Mhe,PP)=>{"use strict";var QT=require("joi"),LP=je(),{route_constraints:MP}=lp();PP.exports={setRoutesValidator:u6,deleteRoutesValidator:l6};function u6(e){let t=QT.object({server:QT.valid("hub","leaf").required(),routes:MP.required()});return LP.validateBySchema(e,t)}a(u6,"setRoutesValidator");function l6(e){let t=QT.object({routes:MP.required()});return LP.validateBySchema(e,t)}a(l6,"deleteRoutesValidator")});var JT=g((Uhe,HP)=>{"use strict";var po=pr(),zT=J(),ff=P(),vP=UP(),{handleHDBError:BP,hdb_errors:_6}=se(),{HTTP_STATUS_CODES:xP}=_6,d6="cluster routes successfully set",f6="cluster routes successfully deleted";HP.exports={setRoutes:E6,getRoutes:h6,deleteRoutes:m6};function E6(e){let t=vP.setRoutesValidator(e);if(t)throw BP(t,t.message,xP.BAD_REQUEST,void 0,void 0,!0);let r=po.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=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=zT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?po.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):po.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:d6,set:o,skipped:i}}a(E6,"setRoutes");function h6(){let e=po.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(h6,"getRoutes");function m6(e){let t=vP.deleteRoutesValidator(e);if(t)throw BP(t,t.message,xP.BAD_REQUEST,void 0,void 0,!0);let r=po.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=zT.isEmptyOrZeroLength(n)?null:n,po.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=zT.isEmptyOrZeroLength(s)?null:s,po.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:f6,deleted:i,skipped:o}}a(m6,"deleteRoutes")});var qP=g((Bhe,GP)=>{"use strict";var Fu=require("alasql"),So=require("recursive-iterator"),Hn=$(),p6=J(),ku=P(),XT=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,T6(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>ku.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!ku.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][ku.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=S6(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(_=>!ku.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Fu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function S6(e){return e.filter(t=>t[ku.PERMS_CRUD_ENUM.READ])}a(S6,"filterReadRestrictedAttrs");function T6(e,t,r,n,s){g6(e,t,r,n,s)}a(T6,"interpretAST");function Vu(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Vu,"addSchemaTableToMap");function g6(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Fu.yy.Insert?b6(e,t,r):e instanceof Fu.yy.Select?R6(e,t,r,n,s):e instanceof Fu.yy.Update?A6(e,t,r):e instanceof Fu.yy.Delete?O6(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(g6,"getRecordAttributesAST");function R6(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(p6.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{Vu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Vu(c.table,t,r,n,s)});let o=new So(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.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 So(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{Hn.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 So(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.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 So(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(R6,"getSelectAttributes");function A6(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new So(e.columns),s=e.table.databaseid;Vu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&jT(e.table.tableid,s,i.columnid,t,r)}a(A6,"getUpdateAttributes");function O6(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new So(e.where),s=e.table.databaseid;Vu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&jT(e.table.tableid,s,i.columnid,t,r)}a(O6,"getDeleteAttributes");function b6(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new So(e.columns),s=e.into.databaseid;Vu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&jT(e.into.tableid,s,i.columnid,t,r)}a(b6,"getInsertAttributes");function jT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(jT,"pushAttribute");GP.exports=XT});var tg=g((Hhe,$P)=>{var Ef=Zi(),FP=require("chalk"),zr=$(),kP=require("prompt"),{promisify:y6}=require("util"),ZT=P(),N6=require("fs-extra"),I6=require("path"),w6=J(),C6=ef(),VP=ee();VP.initSync();var D6=require("moment"),L6=y6(kP.get),M6=I6.join(VP.getHdbBasePath(),ZT.LICENSE_KEY_DIR_NAME,ZT.LICENSE_FILE_NAME,ZT.LICENSE_FILE_NAME);$P.exports={getFingerprint:U6,setLicense:P6,parseLicense:eg,register:v6,getRegistrationInfo:x6};async function P6(e){if(e&&e.key&&e.company){try{zr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await eg(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw zr.error(r),zr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(P6,"setLicense");async function U6(){let e={};try{e=await Ef.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw zr.error(r),zr.error(t),new Error(r)}return e}a(U6,"getFingerprint");async function eg(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");zr.info("Validating license input...");let r=Ef.validateLicense(e,t);if(zr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(zr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(zr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{zr.info("writing license to disk"),await N6.writeFile(M6,JSON.stringify({license_key:e,company:t}))}catch(n){throw zr.error("Failed to write License"),n}return"Registration successful."}a(eg,"parseLicense");async function v6(){let e=await B6();return eg(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(v6,"register");async function B6(){let e=await Ef.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:FP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:FP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{kP.start()}catch(n){zr.error(n)}let r;try{r=await L6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(B6,"promptForRegistration");async function x6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ef.getLicense()}catch(r){throw zr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(w6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=C6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=D6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(x6,"getRegistrationInfo")});var KP=g((qhe,YP)=>{"use strict";var H6=Ve(),rg=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+H6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};YP.exports=rg});var zP=g((khe,QP)=>{"use strict";var WP=Ve(),ng=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+WP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+WP.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"}};QP.exports=ng});var XP=g(($he,JP)=>{"use strict";var sg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};JP.exports=sg});var ZP=g((Khe,jP)=>{"use strict";var G6=Ve(),ig=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+G6.SERVER_SUFFIX.ADMIN,this.password=r}};jP.exports=ig});var cg=g((Qhe,rU)=>{"use strict";var Oa=require("path"),pf=require("fs-extra"),q6=KP(),F6=zP(),k6=XP(),V6=ZP(),og=_n(),ya=J(),Nr=pr(),mf=P(),$u=Ve(),{CONFIG_PARAMS:pt}=mf,Na=$(),Yu=ee(),eU=Os(),ag=ut(),ba="clustering",$6=1e4,tU=50;rU.exports={generateNatsConfig:K6,removeNatsConfig:W6,getHubConfigPath:Y6};function Y6(){let e=Yu.get(pt.ROOTPATH);return Oa.join(e,ba,$u.NATS_CONFIG_FILES.HUB_SERVER)}a(Y6,"getHubConfigPath");async function K6(e=!1,t=void 0){Yu.initSync();let r=Yu.get(pt.ROOTPATH),n=Oa.join(r,ba,$u.PID_FILES.HUB),s=Oa.join(r,ba,$u.PID_FILES.LEAF),i=Nr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Oa.join(r,ba,$u.NATS_CONFIG_FILES.HUB_SERVER),c=Oa.join(r,ba,$u.NATS_CONFIG_FILES.LEAF_SERVER),u=Nr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=Nr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=Nr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=Nr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=Nr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=Nr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ag.checkNATSServerInstalled()||Sf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await og.listUsers(),S=Nr.getConfigFromFile(pt.CLUSTERING_USER),T=await og.getClusterUser();(ya.isEmpty(T)||T.active!==!0)&&Sf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await hf(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await hf(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],N=[];for(let[z,j]of p.entries())j.role?.role===mf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(A.push(new V6(j.username,eU.decrypt(j.hash))),N.push(new k6(j.username,eU.decrypt(j.hash))));let b=[],{hub_routes:v}=Nr.getClusteringRoutes();if(!ya.isEmptyOrZeroLength(v))for(let z of v)b.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let U=new q6(Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),b,A,N);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ya.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pf.writeJson(o,U),Na.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new F6(Nr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],A,N,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pf.writeJson(c,Q),Na.trace(`Leaf server config written to ${c}`))}a(K6,"generateNatsConfig");async function hf(e){let t=Yu.get(e);return ya.isEmpty(t)&&Sf(`port undefined for '${e}'`),await ya.isPortTaken(t)&&Sf(`'${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(hf,"isPortAvailable");function Sf(e){let t=`Error generating clustering config: ${e}`;Na.error(t),console.error(t),process.exit(1)}a(Sf,"generateNatsConfigError");async function W6(e){let{port:t,config_file:r}=ag.getServerConfig(e),{username:n,decrypt_hash:s}=await og.getClusterUser(),i=0,o=2e3;for(;i<tU;){try{let l=await ag.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Na.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=tU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&Na.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ya.async_set_timeout(_)}let c="0".repeat($6),u=Oa.join(Yu.get(pt.ROOTPATH),ba,r);await pf.writeFile(u,c),await pf.remove(u),Na.notify(e,"started.")}a(W6,"removeNatsConfig")});var cU=g((Jhe,aU)=>{"use strict";var Jr=ee(),Q6=Zi(),pe=P(),Ku=Ve(),Ls=require("path"),{PACKAGE_ROOT:gf}=P(),nU=ee(),Tf=J(),Ia="/dev/null",z6=Ls.join(gf,"launchServiceScripts"),sU=Ls.join(gf,"utility/scripts"),J6=Ls.join(sU,pe.HDB_RESTART_SCRIPT),iU=Ls.resolve(gf,"dependencies",`${process.platform}-${process.arch}`,Ku.NATS_BINARY_NAME);function oU(){let t=Q6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Tf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:gf}}a(oU,"generateMainServerConfig");var X6=9930;function j6(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",Ku.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=nU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ku.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==X6?"-"+n:""),script:iU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ia,i.error_file=Ia),i}a(j6,"generateNatsHubServerConfig");var Z6=9940;function e9(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",Ku.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=nU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ku.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Z6?"-"+n:""),script:iU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ia,i.error_file=Ia),i}a(e9,"generateNatsLeafServerConfig");function t9(){Jr.initSync();let e=Ls.join(Jr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:z6,autorestart:!1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ia,t.error_file=Ia),t}a(t9,"generateClusteringUpgradeV4ServiceConfig");function r9(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Tf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:sU},script:J6}}a(r9,"generateRestart");function n9(){return{apps:[oU()]}}a(n9,"generateAllServiceConfigs");aU.exports={generateAllServiceConfigs:n9,generateMainServerConfig:oU,generateRestart:r9,generateNatsHubServerConfig:j6,generateNatsLeafServerConfig:e9,generateClusteringUpgradeV4ServiceConfig:t9}});var OU=g((Zhe,AU)=>{"use strict";var ve=P(),s9=J(),Ps=cg(),Rf=ut(),Ms=Ve(),Ri=cU(),Af=ee(),Ai=$(),i9=fn(),{startWorker:uU,onMessageFromWorkers:o9}=Qe(),a9=Aa(),jhe=require("util"),c9=require("child_process"),u9=require("fs"),{execFile:l9}=c9,we;AU.exports={enterPM2Mode:_9,start:Oi,stop:ug,reload:_U,restart:dU,list:lg,describe:hU,connect:Us,kill:m9,startAllServices:p9,startService:_g,getUniqueServicesList:mU,restartAllServices:S9,isServiceRegistered:pU,reloadStopStart:SU,restartHdb:EU,deleteProcess:E9,startClusteringProcesses:gU,startClusteringThreads:RU,isHdbRestartRunning:h9,isClusteringRunning:g9,stopClustering:T9,reloadClustering:R9,expectedRestartOfChildren:fU};var Wu=!1;o9(e=>{e.type==="restart"&&Af.initSync(!0)});function _9(){Wu=!0}a(_9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var ar,d9=10,lU;function Oi(e,t=!1){if(Wu)return f9(e);let r=l9(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=ar.indexOf(r);o>-1&&ar.splice(o,1),!lU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<d9&&(u9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(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&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!ar&&(ar=[],!t)){let i=a(()=>{lU=!0,ar&&(ar.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)}ar.push(r)}a(Oi,"start");function f9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(f9,"startWithPM2");function ug(e){if(!Wu){for(let t of ar||[])t.name===e&&(ar.splice(ar.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ug,"stop");function _U(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_U,"reload");function dU(e){if(!Wu){fU();for(let t of ar||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(dU,"restart");function fU(){for(let e of ar||[])e.config&&(e.config.restarts=0)}a(fU,"expectedRestartOfChildren");function E9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(E9,"deleteProcess");async function EU(){await Oi(Ri.generateRestart())}a(EU,"restartHdb");async function h9(){let e=await lg();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(h9,"isHdbRestartRunning");function lg(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(lg,"list");function hU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(hU,"describe");function m9(){if(!Wu){for(let e of ar||[])e.kill();ar=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(m9,"kill");async function p9(){try{await gU(),await RU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(p9,"startAllServices");async function _g(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(_g,"startService");async function mU(){try{let e=await lg(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(mU,"getUniqueServicesList");async function S9(e=[]){try{let t=!1,r=await mU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await dU(o))}t&&await SU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(S9,"restartAllServices");async function pU(e){if(ar?.find(r=>r.name===e))return!0;let t=await a9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(pU,"isServiceRegistered");async function SU(e){let t=Af.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Af.get(ve.CONFIG_PARAMS.THREADS),r=await hU(e),n=s9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ug(e),await _g(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await EU():await _U(e)}a(SU,"reloadStopStart");var TU;async function gU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await _g(r,e)}}a(gU,"startClusteringProcesses");async function RU(){TU=uU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Rf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Rf.updateLocalStreams();let e=await i9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),uU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(RU,"startClusteringThreads");async function T9(){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 TU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ug(t)}}a(T9,"stopClustering");async function g9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await pU(t)===!1)return!1}return!0}a(g9,"isClusteringRunning");async function R9(){await Ps.generateNatsConfig(!0),await Rf.reloadNATSHub(),await Rf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(R9,"reloadClustering")});var DU={};Fe(DU,{compactOnStart:()=>A9,copyDb:()=>CU});async function A9(){bi.notify("Running compact on start"),console.log("Running compact on start");let e=(0,dg.get)(yi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Tr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Of.join)(e,"backup",n+".mdb"),o=(0,Of.join)(e,yi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await bU(n),console.log("Database",n,"before compact has a total record count of",c)}catch(u){bi.error("Error getting record count for database",n,u),console.error("Error getting record count for database",n,u)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await CU(n,o),console.log("Backing up",n,"to",i),await(0,To.move)(s,i,{overwrite:!0})}try{Qu()}catch(n){bi.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,To.move)(i,s,{overwrite:!0}),await(0,To.remove)((0,Of.join)(e,yi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{Qu()}catch(n){bi.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){bi.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,fg.updateConfigValue)(yi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,To.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Qu(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await bU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.