harperdb 4.1.2 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,6 @@
2
2
  `,UA={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},MA=["*","%"],DA="unauthorized_access",PA="func_val",HA={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},BA={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},vA={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},GA={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},FA={HTTP:"http"},qA={STOPPED:"stopped",ONLINE:"online"},xA="3.x.x";Hc.exports={LOCAL_HARPERDB_OPERATIONS:F,HDB_SUPPORT_ADDRESS:Ic,HDB_SUPPORT_URL:Cc,HDB_PRICING_URL:SR,SUPPORT_HELP_MSG:hR,LICENSE_HELP_MSG:Lc,HDB_PROC_NAME:pc,HDB_PROC_DESCRIPTOR:Ka,CLUSTERING_LEAF_PROC_DESCRIPTOR:hn,CLUSTERING_HUB_PROC_DESCRIPTOR:Sn,SYSTEM_SCHEMA_NAME:PR,HASH_FOLDER_NAME:HR,HDB_HOME_DIR_NAME:BR,UPDATE_FILE_NAME:qR,LICENSE_KEY_DIR_NAME:GR,BOOT_PROPS_FILE_NAME:FR,JOB_TYPE_ENUM:hA,JOB_STATUS_ENUM:oA,SYSTEM_TABLE_NAMES:tA,SYSTEM_TABLE_HASH_ATTRIBUTES:rA,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:_A,S3_BUCKET_AUTH_KEYS:cA,VALID_SQL_OPS_ENUM:uA,GEO_CONVERSION_ENUM:EA,HDB_SETTINGS_NAMES:Uc,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:dA,SERVICE_ACTIONS_ENUM:lA,CLUSTER_MESSAGE_TYPE_ENUM:TA,CLUSTER_CONNECTION_DIRECTION_ENUM:fA,CLUSTER_EVENTS_DEFS_ENUM:gA,PERIOD_REGEX:NR,DOUBLE_PERIOD_REGEX:pR,UNICODE_PERIOD:OR,FORWARD_SLASH_REGEX:IR,UNICODE_FORWARD_SLASH:bR,ESCAPED_FORWARD_SLASH_REGEX:CR,ESCAPED_PERIOD_REGEX:LR,ESCAPED_DOUBLE_PERIOD_REGEX:wR,REG_KEY_FILE_NAME:iA,RESTART_TIMEOUT_MS:kR,HDB_FILE_PERMISSIONS:YR,SCHEMA_DIR_NAME:WR,TRANSACTIONS_DIR_NAME:QR,LIMIT_COUNT_NAME:JR,ID_ATTRIBUTE_STRING:XR,INSERT_MODULE_ENUM:jR,UPGRADE_JSON_FIELD_NAMES_ENUM:eA,RESTART_CODE:xR,RESTART_CODE_NUM:VR,CLUSTER_OPERATIONS:Qr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:nA,HDB_INTERNAL_SC_CHANNEL_PREFIX:Oe,INTERNAL_SC_CHANNELS:sA,CLUSTERING_MESSAGE_TYPES:LA,HDB_FILE_SUFFIX:vR,BLOB_FOLDER_NAME:$R,HDB_TRASH_DIR:KR,ORIGINATOR_SET_VALUE:wA,LICENSE_VALUES:RA,RAM_ALLOCATION_ENUM:AA,STORAGE_TYPES_ENUM:mA,TIME_STAMP_NAMES_ENUM:Dc,TIME_STAMP_NAMES:IA,PERMS_UPDATE_RELEASE_TIMESTAMP:bA,SEARCH_NOT_FOUND_MESSAGE:TR,SEARCH_ATTRIBUTE_NOT_FOUND:fR,LICENSE_ROLE_DENIED_RESPONSE:mR,LICENSE_MAX_CONNS_REACHED:RR,BASIC_LICENSE_MAX_NON_CU_ROLES:bc,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:dR,VALUE_SEARCH_COMPARATORS:Pc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:CA,LICENSE_FILE_NAME:aA,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:NA,NEW_LINE:yA,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:gR,MOMENT_DAYS_TAG:yR,API_TURNOVER_SEC:UR,LOOPBACK:AR,CODE_EXTENSION:dn,WILDCARD_SEARCH_VALUE:MR,NODE_ERROR_CODES:pA,JAVASCRIPT_EXTENSION:Nc,PERMS_CRUD_ENUM:UA,UNAUTHORIZED_PERMISSION_NAME:DA,SEARCH_WILDCARDS:MA,FUNC_VAL:PA,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:HA,JWT_ENUM:BA,CLUSTERING_FLAG:OA,ITC_EVENT_TYPES:vA,CUSTOM_FUNCTION_PROC_NAME:Oc,CUSTOM_FUNCTION_PROC_DESCRIPTOR:En,SERVICES:GA,THREAD_TYPES:FA,MEM_SETTING_KEY:DR,HDB_RESTART_SCRIPT:jm,PROCESS_DESCRIPTORS:nR,SERVICE_SERVERS:cR,SERVICE_SERVERS_CWD:$a,PROCESS_DESCRIPTORS_VALIDATE:oR,LAUNCH_SERVICE_SCRIPTS:uR,LOG_LEVELS:aR,PROCESS_NAME_ENV_PROP:ZR,LOG_NAMES:iR,PM2_PROCESS_STATUSES:qA,CONFIG_PARAM_MAP:Mc,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Xm,HDB_DEFAULT_CONFIG_FILE:Zm,ROLE_TYPES_ENUM:lR,BOOT_PROP_PARAMS:wc,INSTALL_PROMPTS:zR,HDB_ROOT_DIR_NAME:zm,CLUSTERING_PROCESSES:_R,FOREGROUND_PID_FILE:rR,PACKAGE_ROOT:Nt,PRE_4_0_0_VERSION:xA,SCHEMAS_PARAM_CONFIG:SA,HDB_PID_FILE:sR}});var Fc=h((xB,Gc)=>{"use strict";var Bc=require("minimist");Gc.exports=VA;function VA(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=vc(process.env),s=vc(Bc(process.argv))):(r=process.env,s=Bc(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(VA,"assignCMDENVVariables");function vc(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(vc,"objKeysToLowerCase")});var N=h((kB,Zc)=>{"use strict";var mr=require("fs-extra"),{workerData:kA,threadId:YA}=require("worker_threads"),pt=require("path"),Vc=require("yaml"),kc=require("properties-reader"),j=f(),qc=Fc(),$A=require("os"),{PACKAGE_ROOT:Qa}=f(),Yc={};for(let e in console)Yc[e]=console[e];var de={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},$c={STDOUT:"stdOut",STDERR:"stdErr"},KA=pt.join(Qa,"logs"),WA=pt.join(Qa,"config/yaml/",j.HDB_DEFAULT_CONFIG_FILE),QA=1e4,ot,_t,Ee,Tn,fn,mn,Xr,Jr;Jr===void 0&&Kc();Zc.exports={notify:Jc,fatal:Xc,error:Zr,warn:za,info:Rn,debug:Za,trace:Xa,setLogLevel:tg,log_level:Ee,loggerWithTag:JA,suppressLogging:XA,initLogSettings:Kc,setupConsoleLogging:Wc,logCustomLevel:jA,closeLogFile:Ja,getLogFilePath:()=>mn,OUTPUTS:$c};function Kc(e=!1){try{if(Jr===void 0||e){Ja();let t=eg();Jr=kc(t);let r=qc(["ROOTPATH"]);({level:Ee,config_log_path:fn,to_file:ot,to_stream:_t}=rg(r.ROOTPATH?pt.join(r.ROOTPATH,j.HDB_CONFIG_FILE):Jr.get("settings_path"))),Tn=j.LOG_NAMES.HDB,mn=pt.join(fn,Tn)}}catch(t){if(Jr=void 0,t.code===j.NODE_ERROR_CODES.ENOENT){let r=qc(Object.keys(j.CONFIG_PARAM_MAP),!0);for(let o in r){let _=j.CONFIG_PARAM_MAP[o];_&&_.toLowerCase();let c=r[o];if(_===j.CONFIG_PARAMS.LOGGING_LEVEL){Ee=c;continue}if(_===j.CONFIG_PARAMS.LOGGING_STDSTREAMS){_t=c;continue}_===j.CONFIG_PARAMS.LOGGING_FILE&&(ot=_)}let{default_level:s,default_to_file:n,default_to_stream:i}=sg();ot=ot===void 0?n:ot,ot=xc(ot),_t=_t===void 0?i:_t,_t=xc(_t),Ee=Ee===void 0?s:Ee,fn=KA,Tn=j.LOG_NAMES.INSTALL,mn=pt.join(fn,Tn);return}throw Zr("Error initializing log settings"),Zr(t),t}Wc()}a(Kc,"initLogSettings");var Wa=!0;function Wc(){fr("error",Zr),fr("warn",za),fr("log",Rn),fr("info",Rn),fr("debug",Za),fr("trace",Xa)}a(Wc,"setupConsoleLogging");function fr(e,t){console[e]=function(...r){if(Wa&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Yc[e](...r)}}a(fr,"logConsole");function JA(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Jc),fatal:r(Xc),error:r(Zr),warn:r(za),info:r(Rn),debug:r(Za),trace:r(Xa)};function r(s){return function(...n){return s(t,...n)}}}a(JA,"loggerWithTag");function XA(e){try{Wa=!1,e()}finally{Wa=!0}}a(XA,"suppressLogging");var ZA=kA?.name?.replace(/ /g,"-")||"main";function ct(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],_=0,c;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),_++):t[0]?.serviceName&&(c=t[0]?.serviceName,_++)),o.unshift(c||ZA+"/"+YA);_<n;_++){let u=t[_];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,_<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
3
  `}a(ct,"createLogRecord");function zr(e){ot&&Qc(e),_t&&process.stdout.write(e)}a(zr,"logStdOut");function An(e){ot&&Qc(e),_t&&process.stderr.write(e)}a(An,"logStdErr");function Qc(e){zA(),mr.appendFileSync(Xr,e)}a(Qc,"logToFile");function Ja(){try{mr.closeSync(Xr)}catch{}Xr=null}a(Ja,"closeLogFile");function zA(){Xr||(Xr=mr.openSync(mn,"a"),setTimeout(()=>{Ja()},QA).unref())}a(zA,"openLogFile");function Rn(...e){de[Ee]<=de.info&&zr(ct("info",e))}a(Rn,"info");function Xa(...e){de[Ee]<=de.trace&&zr(ct("trace",e))}a(Xa,"trace");function Zr(...e){de[Ee]<=de.error&&An(ct("error",e))}a(Zr,"error");function Za(...e){de[Ee]<=de.debug&&zr(ct("debug",e))}a(Za,"debug");function Jc(...e){de[Ee]<=de.notify&&zr(ct("notify",e))}a(Jc,"notify");function Xc(...e){de[Ee]<=de.fatal&&An(ct("fatal",e))}a(Xc,"fatal");function za(...e){de[Ee]<=de.warn&&An(ct("warn",e))}a(za,"warn");function jA(e,t,...r){t===$c.STDERR?An(ct(e,r)):zr(ct(e,r))}a(jA,"logCustomLevel");function eg(){let e;try{e=$A.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=pt.join(e,j.HDB_HOME_DIR_NAME,j.BOOT_PROPS_FILE_NAME);return mr.existsSync(t)||(t=pt.join(Qa,"utility/hdb_boot_properties.file")),t}a(eg,"getPropsFilePath");function tg(e){Ee=e}a(tg,"setLogLevel");function xc(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(xc,"autoCastBoolean");function rg(e){try{if(e.includes("config/settings.js")){let o=kc(e);return{level:o.get(j.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:pt.dirname(o.get(j.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Vc.parseDocument(mr.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===j.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(rg,"getLogConfig");function sg(){try{let e=Vc.parseDocument(mr.readFileSync(WA,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(sg,"getDefaultConfig")});var jc=h(($B,zc)=>{"use strict";var ng=require("util"),ig=require("path"),ag=require("child_process"),og=ng.promisify(ag.execFile),_g=1e3*1e3*10;zc.exports={findPs:cg};async function cg(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await og("ps",["wwxo",`pid,${r}`],{maxBuffer:_g});for(let n of s.trim().split(`
4
4
  `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:ig.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(cg,"findPs")});var ne=h((WB,tu)=>{"use strict";var ug="__dbis__",lg="__environment_name__",Eg="__dbi_defintion__",dg={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"},Sg=["__createdtime__","__updatedtime__"],hg="\uFFFF",eu={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Tg=Object.values(eu);tu.exports={INTERNAL_DBIS_NAME:ug,DBI_DEFINITION_NAME:Eg,SEARCH_TYPES:dg,TIMESTAMP_NAMES:Sg,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:lg,TRANSACTIONS_DBI_NAMES_ENUM:eu,TRANSACTIONS_DBIS:Tg,OVERFLOW_MARKER:hg}});var He=h((QB,uu)=>{"use strict";var ru=f(),su=ne(),nu={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},iu=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),au={500:iu("There was an error processing your request."),400:"Invalid request"},fg=au[nu.INTERNAL_SERVER_ERROR],mg={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.`},Rg={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Ag={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"},gg={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 ${su.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${su.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"},Ng={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ru.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 ${ru.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"},ou={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"},pg={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema 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' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},Og={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 schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.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`},Ig={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=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},bg={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Cg={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`},_u={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.`},cu={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}`},Lg={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 customFunctions enabled to true in hdb/harperdb-config.yaml file."},wg={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},yg={...ou,...Ag,...mg,...pg,...Og,...Ig,...bg,...Cg,...Ng,..._u,...cu,...Lg,...wg,...Rg};uu.exports={CHECK_LOGS_WRAPPER:iu,HDB_ERROR_MSGS:yg,DEFAULT_ERROR_MSGS:au,DEFAULT_ERROR_RESP:fg,HTTP_STATUS_CODES:nu,LMDB_ERRORS_ENUM:gg,AUTHENTICATION_ERROR_MSGS:ou,VALIDATION_ERROR_MSGS:_u,ITC_ERRORS:cu}});var Y=h((XB,du)=>{"use strict";var Rr=He(),Ug=N(),Mg=f(),jr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,lu),this.http_resp_code=s||Rr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Rr.DEFAULT_ERROR_MSGS[s]?Rr.DEFAULT_ERROR_MSGS[s]:Rr.DEFAULT_ERROR_MSGS[Rr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&Ug[n](i)}};a(jr,"HdbError");function lu(e,t,r,s=Mg.LOG_LEVELS.ERROR,n=null,i=!1){if(Eu(e))return e;let o=new jr(e,t,r,s,n);return i&&delete o.stack,o}a(lu,"handleHDBError");function Eu(e){return e.__proto__.constructor.name===jr.name}a(Eu,"isHDBError");du.exports={isHDBError:Eu,handleHDBError:lu,hdb_errors:Rr}});var p=h((jB,Cu)=>{"use strict";var $t=require("path"),Dg=require("fs-extra"),ae=N(),Su=require("fs-extra"),es=require("os"),Pg=require("net"),Hg=require("recursive-iterator"),ie=f(),mu=jc(),hu=require("papaparse"),gn=require("moment"),{inspect:Bg}=require("util"),Tu=require("is-number"),zB=require("lodash"),{hdb_errors:Nn}=Y(),Ru=require("util").promisify(setTimeout),vg=100,Gg=5,Fg="",qg=4,fu={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Cu.exports={isEmpty:Ie,isEmptyOrZeroLength:ze,arrayHasEmptyValues:kg,arrayHasEmptyOrZeroLengthValues:Yg,buildFolderPath:$g,isBoolean:Au,errorizeMessage:xg,stripFileExtension:Wg,autoCast:Qg,autoCastJSON:gu,autoCastJSONDeep:ja,removeDir:Jg,compareVersions:Xg,isCompatibleDataVersion:Zg,escapeRawValue:zg,unescapeValue:jg,stringifyProps:eN,timeoutPromise:rN,isClusterOperation:nN,getClusterUser:aN,checkGlobalSchemaTable:iN,getHomeDir:pu,getPropsFilePath:tN,promisifyPapaParse:oN,removeBOM:Ou,createEventPromise:_N,checkProcessRunning:cN,checkSchemaTableExist:uN,checkSchemaExists:Iu,checkTableExists:bu,getStartOfTomorrowInSeconds:lN,getLimitKey:EN,isObject:Kg,isNotEmptyAndHasValue:Vg,autoCasterIsNumberCheck:Nu,backtickASTSchemaItems:dN,isPortTaken:sN,stopProcess:SN,createForkArgs:hN,autoCastBoolean:TN,async_set_timeout:Ru,getTableHashAttribute:fN,doesSchemaExist:mN,doesTableExist:RN,stringifyObj:AN,ms_to_time:gN,changeExtension:NN,PACKAGE_ROOT:ie.PACKAGE_ROOT};function xg(e){return e instanceof Error?e:new Error(e)}a(xg,"errorizeMessage");function Ie(e){return e==null}a(Ie,"isEmpty");function Vg(e){return!Ie(e)&&(e||e===0||e===""||Au(e))}a(Vg,"isNotEmptyAndHasValue");function ze(e){return Ie(e)||e.length===0||e.size===0}a(ze,"isEmptyOrZeroLength");function kg(e){if(Ie(e))return!0;for(let t=0;t<e.length;t++)if(Ie(e[t]))return!0;return!1}a(kg,"arrayHasEmptyValues");function Yg(e){if(ze(e))return!0;for(let t=0;t<e.length;t++)if(ze(e[t]))return!0;return!1}a(Yg,"arrayHasEmptyOrZeroLengthValues");function $g(...e){try{return e.join($t.sep)}catch{console.error(e)}}a($g,"buildFolderPath");function Au(e){return Ie(e)?!1:e===!0||e===!1}a(Au,"isBoolean");function Kg(e){return Ie(e)?!1:typeof e=="object"}a(Kg,"isObject");function Wg(e){return ze(e)?Fg:e.slice(0,-qg)}a(Wg,"stripFileExtension");function Qg(e){return Ie(e)||e===""||typeof e!="string"?e:fu[e]!==void 0?fu[e]:Nu(e)===!0?Number(e):e}a(Qg,"autoCast");function gu(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gu,"autoCastJSON");function ja(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=ja(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ja(r);s!==r&&(e[t]=s)}return e}else return gu(e)}a(ja,"autoCastJSONDeep");function Nu(e){if(e.startsWith("0.")&&Tu(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Tu(e))}a(Nu,"autoCasterIsNumberCheck");async function Jg(e){if(ze(e))throw new Error(`Directory path: ${e} does not exist`);try{await Su.emptyDir(e),await Su.remove(e)}catch(t){throw ae.error(`Error removing files in ${e} -- ${t}`),t}}a(Jg,"removeDir");function Xg(e,t){if(ze(e)){ae.info("Invalid current version sent as parameter.");return}if(ze(t)){ae.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(Xg,"compareVersions");function Zg(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Zg,"isCompatibleDataVersion");function zg(e){if(Ie(e))return e;let t=String(e);return t==="."?ie.UNICODE_PERIOD:t===".."?ie.UNICODE_PERIOD+ie.UNICODE_PERIOD:t.replace(ie.FORWARD_SLASH_REGEX,ie.UNICODE_FORWARD_SLASH)}a(zg,"escapeRawValue");function jg(e){if(Ie(e))return e;let t=String(e);return t===ie.UNICODE_PERIOD?".":t===ie.UNICODE_PERIOD+ie.UNICODE_PERIOD?"..":String(e).replace(ie.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(jg,"unescapeValue");function eN(e,t){if(Ie(e))return ae.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+es.EOL}!ze(s)&&s[0]===";"?r+=" "+s+n+es.EOL:ze(s)||(r+=s+"="+n+es.EOL)}catch{ae.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(eN,"stringifyProps");function pu(){let e;try{e=es.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(pu,"getHomeDir");function tN(){let e=$t.join(pu(),ie.HDB_HOME_DIR_NAME,ie.BOOT_PROPS_FILE_NAME);return Dg.existsSync(e)||(e=$t.join(__dirname,"../","hdb_boot_properties.file")),e}a(tN,"getPropsFilePath");function rN(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(rN,"timeoutPromise");async function sN(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Pg.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(sN,"isPortTaken");function nN(e){try{return ie.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ae.error(`Error checking operation against cluster ops ${t}`)}return!1}a(nN,"isClusterOperation");function iN(e,t){if(!global.hdb_schema[e])return Nn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Nn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iN,"checkGlobalSchemaTable");function aN(e,t){if(Ie(t)){ae.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ie(e)||ze(e)){ae.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){ae.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ae.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(aN,"getClusterUser");function oN(){hu.parsePromise=function(e,t){return new Promise(function(r,s){hu.parse(e,{header:!0,transformHeader:Ou,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(oN,"promisifyPapaParse");function Ou(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Ou,"removeBOM");function _N(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ae.info(`Got cluster status event response: ${Bg(n)}`);try{i.cancel()}catch{ae.error("Error trying to cancel timeout.")}s(n)})})}a(_N,"createEventPromise");async function cN(e){let t=!0,r=0;do await Ru(vg*r++),(await mu.findPs(e)).length>0&&(t=!1);while(t&&r<Gg);if(t)throw new Error(`process ${e} was not started`)}a(cN,"checkProcessRunning");function uN(e,t){let r=Iu(e);if(r)return r;let s=bu(e,t);if(s)return s}a(uN,"checkSchemaTableExist");function Iu(e){if(!global.hdb_schema[e])return Nn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Iu,"checkSchemaExists");function bu(e,t){if(!global.hdb_schema[e][t])return Nn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bu,"checkTableExists");function lN(){let e=gn().utc().add(1,ie.MOMENT_DAYS_TAG).startOf(ie.MOMENT_DAYS_TAG).unix(),t=gn().utc().unix();return e-t}a(lN,"getStartOfTomorrowInSeconds");function EN(){return gn().utc().format("DD-MM-YYYY")}a(EN,"getLimitKey");function dN(e){try{let t=new Hg(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){ae.error("Got an error back ticking items."),ae.error(t)}}a(dN,"backtickASTSchemaItems");async function SN(e){let t=es.userInfo();(await mu.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ae.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(SN,"stopProcess");function hN(e){return[e]}a(hN,"createForkArgs");function TN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(TN,"autoCastBoolean");function fN(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(fN,"getTableHashAttribute");function mN(e){return global?.hdb_schema?.[e]!==void 0}a(mN,"doesSchemaExist");function RN(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(RN,"doesTableExist");function AN(e){try{return JSON.stringify(e)}catch{return e}}a(AN,"stringifyObj");function gN(e){let t=gn.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(gN,"ms_to_time");function NN(e,t){let r=$t.basename(e,$t.extname(e));return $t.join($t.dirname(e),r+t)}a(NN,"changeExtension")});var Kt=h((tv,yu)=>{"use strict";var wu=p(),Lu=f(),On=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,eo=require("joi"),pn={schema_format:{pattern:On,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},pN=eo.alternatives(eo.string().min(1).max(pn.schema_length.maximum).pattern(On).messages({"string.pattern.base":"{:#label} "+pn.schema_format.message}),eo.number()).required();function ON(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>pn.schema_length.maximum?`'${e}' maximum of 250 characters`:On.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ON,"checkValidTable");function IN(e,t){return wu.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(IN,"validateSchemaExists");function bN(e,t){let r=t.state.ancestors[0].schema;return wu.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(bN,"validateTableExists");function CN(e,t){return e.toLowerCase()===Lu.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Lu.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(CN,"validateSchemaName");yu.exports={common_validators:pn,schema_regex:On,hdb_schema_table:pN,validateSchemaExists:IN,validateTableExists:bN,validateSchemaName:CN,checkValidTable:ON}});var ke=h((sv,Uu)=>{"use strict";var Se=require("validate.js");Se.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Se.validators.type.checks[t](e)?null:` must be a '${t}' value`};Se.validators.type.checks={Object:function(e){return Se.isObject(e)&&!Se.isArray(e)},Array:Se.isArray,Integer:Se.isInteger,Number:Se.isNumber,String:Se.isString,Date:Se.isDate,Boolean:function(e){return typeof e=="boolean"}};Se.validators.hasValidFileExt=function(e,t){return Se.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};Uu.exports={validateObject:LN,validateObjectAsync:wN,validateBySchema:yN};function LN(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Se(e,t,{format:"flat"});return r?new Error(r):null}a(LN,"validateObject");async function wN(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Se.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(wN,"validateObjectAsync");function yN(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(yN,"validateBySchema")});var ro=h((iv,Du)=>{var{hdb_schema_table:Mu}=Kt(),UN=ke(),to=require("joi"),MN={undefined:"undefined",null:"null"},DN=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||MN[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),PN=to.object({schema:Mu,table:Mu,records:to.array().items(to.object().custom(DN)).required()});Du.exports=function(e){return UN.validateBySchema(e,PN)}});var so=h((ov,Pu)=>{"use strict";var In=class{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")}};a(In,"BridgeMethods");Pu.exports=In});var Wt=h((lv,qu)=>{"use strict";var Hu=He().LMDB_ERRORS_ENUM,cv=require("lmdb"),HN=ne(),uv=require("buffer").Buffer,{OVERFLOW_MARKER:Bu,MAX_SEARCH_KEY_LENGTH:bn}=HN,vu=["number","string","symbol","boolean","bigint"];function BN(e){if(e=e?.database||e,!e)throw new Error(Hu.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Hu.INVALID_ENVIRONMENT)}a(BN,"validateEnv");function vN(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(vN,"stringifyData");function GN(e){return e instanceof Date?e.valueOf():e}a(GN,"convertKeyValueToWrite");function FN(e){if(e==null)return;if(vu.includes(typeof e))return e.length>bn?[e.slice(0,bn)+Bu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];vu.includes(typeof n)&&(n.length>bn?t.push(n.slice(0,bn)+Bu):t.push(n))}}return t}a(FN,"getIndexedValues");var Cn=0,Gu=0;function Fu(){Gu=Date.now()-performance.now()}a(Fu,"adjustStartTime");Fu();var qN=6e4;setInterval(Fu,qN).unref();function xN(){let e=performance.now()+Gu;return e>Cn?(Cn=e,e):(Cn+=488e-6,Cn)}a(xN,"getNextMonotonicTime");qu.exports={validateEnv:BN,stringifyData:vN,convertKeyValueToWrite:GN,getNextMonotonicTime:xN,getIndexedValues:FN}});var Vu=h((dv,xu)=>{"use strict";var Ln=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Ln,"DBIDefinition");xu.exports=Ln});var Yu=h((hv,ku)=>{"use strict";var VN={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},kN="certificate.pem",YN="privateKey.pem",$N="ca.pem";ku.exports={CERTIFICATE_VALUES:VN,CERTIFICATE_PEM_NAME:kN,PRIVATEKEY_PEM_NAME:YN,CA_PEM_NAME:$N}});var Ju=h((fv,Qu)=>{"use strict";var KN=require("fs-extra"),C=require("joi"),WN=require("os"),{boolean:Q,string:ut,number:Ye,array:no}=C.types(),{totalmem:$u}=require("os"),ts=require("path"),QN=N(),yn=p(),Tv=Yu(),JN=f(),XN=ke(),Ku="log",ZN="custom_functions",zN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",jN="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",ep="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",tp="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",rp="rootPath config parameter is undefined",sp="clustering.enabled config parameter is undefined",Qt=Ye.min(0).required(),Un=no.items({host:ut.required(),port:Qt}).empty(null),Ot;Qu.exports={configValidator:np,routesValidator:up,route_constraints:Un};function np(e){if(Ot=e.rootPath,yn.isEmpty(Ot))throw rp;let t=Q.required(),r=C.valid("production","development").required(),s=Ye.min(1).max(1e3).empty(null).default(cp),n=ut.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(wn),i=C.custom(ip).messages({"any.custom":"{:#label} {:#error}"}),o=ut.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),_=C.string().empty(null).default(wn),c=C.custom(ap).empty(null).default(wn),u=e.clustering?.enabled;if(yn.isEmpty(u))throw sp;let l;return u===!0?l=C.object({enabled:t,hubServer:C.object({cluster:C.object({name:C.required().empty(null),network:C.object({port:Qt,routes:Un}).required()}).required(),leafNodes:C.object({network:C.object({port:Qt}).required()}).required(),network:C.object({port:Qt}).required()}).required(),leafServer:C.object({network:C.object({port:Qt,routes:Un}).required(),streams:C.object({maxAge:Ye.min(120).allow(null).optional(),maxBytes:Ye.min(1).allow(null).optional(),maxMsgs:Ye.min(1).allow(null).optional(),path:_}).required()}).required(),logLevel:C.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Q.optional(),tls:C.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Q.required(),verify:Q.optional()}),user:ut.optional().empty(null)}).required():l=C.object({enabled:t,tls:C.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Q.required()})}).required(),C.object({clustering:l,customFunctions:C.object({enabled:t,network:C.object({cors:Q.required(),corsAccessList:no.required(),headersTimeout:Ye.min(1).required(),https:Q.required(),keepAliveTimeout:Ye.min(1).required(),port:Qt,timeout:Ye.min(1).required()}),nodeEnv:r,root:n,tls:C.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:C.object({enabled:t}).required(),logging:C.object({file:Q.required(),level:C.valid("notify","fatal","error","warn","info","debug","trace"),rotation:C.object({enabled:Q.optional(),compress:Q.optional(),interval:ut.custom(_p).optional().empty(null),maxSize:ut.custom(op).optional().empty(null),path:ut.optional().empty(null).default(wn)}).required(),root:n,stdStreams:Q.required(),auditLog:Q.required()}).required(),operationsApi:C.object({authentication:C.object({operationTokenTimeout:C.required(),refreshTokenTimeout:C.required()}).required(),foreground:Q.required(),network:C.object({cors:Q.required(),corsAccessList:no.required(),headersTimeout:Ye.min(1).required(),https:Q.required(),keepAliveTimeout:Ye.min(1).required(),port:Qt,timeout:Ye.min(1).required()}).required(),nodeEnv:r,tls:C.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:ut.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:C.object({threads:s}).required(),storage:C.object({writeAsync:Q.required(),overlappingSync:Q.optional(),caching:Q.optional(),compression:Q.optional(),noReadAhead:Q.optional(),path:c,prefetchWrites:Q.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(np,"configValidator");function Wu(e){return KN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Wu,"doesPathExist");function ip(e,t){if(e===null)return;let r=Wu(e);return r?t.message(r):e}a(ip,"validatePemFile");function ap(e,t){C.assert(e,ut.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Wu(e);if(r)return t.message(r)}a(ap,"validatePath");function op(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(zN);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(ep):e}a(op,"validateRotationMaxSize");function _p(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(jN);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(tp):e}a(_p,"validateRotationInterval");function cp(e,t){let r=t.state.path.join("."),s=WN.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||$u();return i=Math.round(Math.min(i,$u())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),QN.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(cp,"setDefaultThreads");function wn(e,t){if(!yn.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(yn.isEmpty(Ot))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return ts.join(Ot,ZN);case"logging.root":return ts.join(Ot,Ku);case"clustering.leafServer.streams.path":return ts.join(Ot,"clustering","leaf");case"storage.path":return ts.join(Ot,JN.SCHEMA_DIR_NAME);case"logging.rotation.path":return ts.join(Ot,Ku);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(wn,"setDefaultRoot");function up(e){let t=C.object({routes:Un});return XN.validateBySchema({routes:e},t)}a(up,"routesValidator")});var ss=h((Rv,il)=>{"use strict";var ve=f(),be=p(),z=N(),{configValidator:lp,routesValidator:Xu}=Ju(),Be=require("fs-extra"),Ep=require("yaml"),je=require("path"),dp=require("is-number"),zu=require("properties-reader"),Sp=require("lodash"),{handleHDBError:hp}=Y(),{HTTP_STATUS_CODES:Tp,HDB_ERROR_MSGS:Mn}=He(),fp=require("minimist"),{SCHEMAS_PARAM_CONFIG:rs,CONFIG_PARAMS:It,CONFIG_PARAM_MAP:lt}=ve,mp="Unable to get config value because config is uninitialized",Rp="Config successfully initialized",Ap="Error backing up config file",gp="Empty parameter sent to getConfigValue",ju=je.join(ve.PACKAGE_ROOT,"config","yaml",ve.HDB_DEFAULT_CONFIG_FILE),Np="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Zu={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"},Dn,te;il.exports={createConfigFile:pp,getDefaultConfig:Op,getConfigValue:tl,initConfig:rl,flattenConfig:Jt,updateConfigValue:sl,updateConfigObject:bp,getConfiguration:wp,setConfiguration:yp,readConfigFile:_o,getClusteringRoutes:Up,initOldConfig:nl,getConfigFromFile:Mp};function pp(e){let t=Ar(ju);Dn=Jt(t.toJSON());let r;for(let o in e){let _=lt[o.toLowerCase()];if(_===It.SCHEMAS){r=e[o];continue}if(_!==void 0){let c=_.split("_"),u=io(_,e[o]);try{t.setIn([...c],u)}catch(l){z.error(l)}}}r&&el(t,r),oo(t);let s=t.toJSON();te=Jt(s);let n=t.getIn(["rootPath"]),i=je.join(n,ve.HDB_CONFIG_FILE);Be.createFileSync(i),Be.writeFileSync(i,String(t)),z.trace(`Config file written to ${i}`)}a(pp,"createConfigFile");function el(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!be.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(rs.TABLES))for(let i in s[n][rs.TABLES])for(let o in s[n][rs.TABLES][i]){let _=s[n][rs.TABLES][i][o],c=[It.SCHEMAS,n,rs.TABLES,i,o];e.hasIn(c)?e.setIn(c,_):e.addIn(c,_)}else for(let i in s[n]){let o=s[n][i],_=[It.SCHEMAS,n,i];e.hasIn(_)?e.setIn(_,o):e.addIn(_,o)}}}catch(s){z.error("Error parsing schemas CLI/env config arguments",s)}}a(el,"setSchemasConfig");function Op(e){if(Dn===void 0){let r=Ar(ju);Dn=Jt(r.toJSON())}let t=lt[e.toLowerCase()];if(t!==void 0)return Dn[t.toLowerCase()]}a(Op,"getDefaultConfig");function tl(e){if(be.isEmpty(e)){z.error(gp);return}if(te===void 0){z.trace(mp);return}let t=lt[e.toLowerCase()];if(t!==void 0)return te[t.toLowerCase()]}a(tl,"getConfigValue");function ao(e){let t=fp(process.argv);return t.ROOTPATH?je.join(t.ROOTPATH,ve.HDB_CONFIG_FILE):zu(e).get(ve.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ao,"getConfigFilePath");function rl(e=!1){if(te===void 0||e){let t=be.getPropsFilePath();try{Be.accessSync(t,Be.constants.F_OK|Be.constants.R_OK)}catch(i){throw z.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=ao(t),s;if(r.includes("config/settings.js"))try{nl(r);return}catch(i){if(i.code!==ve.NODE_ERROR_CODES.ENOENT)throw i}try{s=Ar(r)}catch(i){if(i.code===ve.NODE_ERROR_CODES.ENOENT){z.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw z.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Ip(s,r),oo(s);let n=s.toJSON();if(te=Jt(n),te.logging_rotation_rotate)for(let i in Zu)te[i]&&z.error(`Config ${Zu[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);z.trace(Rp)}}a(rl,"initConfig");function Ip(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],je.join(r,ve.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],je.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],je.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(z.trace("Updating config file with missing config params"),Be.writeFileSync(t,String(e)))}a(Ip,"checkForUpdatedConfig");function oo(e){let t=e.toJSON(),r=lp(t);if(r.error)throw Mn.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}a(oo,"validateConfig");function bp(e,t){te===void 0&&(te={});let r=lt[e.toLowerCase()];if(r===void 0){z.trace(`Unable to update config object because config param '${e}' does not exist`);return}te[r.toLowerCase()]=t}a(bp,"updateConfigObject");function sl(e,t,r=void 0,s=!1,n=!1){te===void 0&&rl();let i=tl(lt.hdb_root),o=je.join(i,ve.HDB_CONFIG_FILE),_=Ar(o),c;if(r===void 0&&e.toLowerCase()===It.SCHEMAS)c=t;else if(r===void 0){let E=lt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let S=E.split("_"),d=io(E,t);_.setIn([...S],d)}else for(let E in r){let S=lt[E.toLowerCase()];if(S===It.SCHEMAS){c=r[E];continue}if(S!==void 0){let d=S.split("_"),m=io(S,r[E]);try{_.setIn([...d],m)}catch(g){z.error(g)}}}c&&el(_,c),oo(_);let u=_.getIn(["rootPath"]),l=je.join(u,ve.HDB_CONFIG_FILE);s===!0&&Cp(o,u),Be.writeFileSync(l,String(_)),n&&(te=Jt(_.toJSON())),z.trace(`Config parameter: ${e} updated with value: ${t}`)}a(sl,"updateConfigValue");function Cp(e,t){try{let r=je.join(t,"backup",`${ve.HDB_CONFIG_FILE}.bak`);Be.copySync(e,r),z.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){z.error(Ap),z.error(r)}}a(Cp,"backupConfigFile");var Lp=["schemas"];function Jt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Lp.includes(r)){let s=Jt(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Jt,"flattenConfig");function io(e,t){if(e===It.CLUSTERING_NODENAME||e===It.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(dp(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||be.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 be.autoCast(t)}a(io,"castConfigValue");function wp(){let e=be.getPropsFilePath(),t=ao(e);return Ar(t).toJSON()}a(wp,"getConfiguration");async function yp(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return sl(void 0,void 0,n,!0),Np}catch(i){throw typeof i=="string"||i instanceof String?hp(i,i,Tp.BAD_REQUEST,void 0,void 0,!0):i}}a(yp,"setConfiguration");function _o(){let e=be.getPropsFilePath();try{Be.accessSync(e,Be.constants.F_OK|Be.constants.R_OK)}catch(s){throw z.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ao(e);return Ar(t).toJSON()}a(_o,"readConfigFile");function Ar(e){return Ep.parseDocument(Be.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ar,"parseYamlDoc");function Up(){let e=_o(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=be.isEmptyOrZeroLength(t)?[]:t;let r=Xu(t);if(r)throw Mn.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=be.isEmptyOrZeroLength(s)?[]:s;let n=Xu(s);if(n)throw Mn.CONFIG_VALIDATION(n.message);if(!be.isEmptyOrZeroLength(s)&&!be.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!be.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Mn.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Up,"getClusteringRoutes");function nl(e){let t=zu(e);te={};for(let r in lt){let s=t.get(r.toUpperCase());if(be.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=lt[r].toLowerCase();n===It.LOGGING_ROOT?te[n]=je.dirname(s):te[n]=s}return te}a(nl,"initOldConfig");function Mp(e){let t=_o();return Sp.get(t,e.replaceAll("_","."))}a(Mp,"getConfigFromFile")});var $=h((gv,ol)=>{"use strict";var co=require("fs-extra"),et=require("path"),Dp=require("os"),Pp=require("properties-reader"),ns=N(),gr=p(),O=f(),Pn=ss(),Hp="Error initializing environment manager",Hn="BOOT_PROPS_FILE_PATH",al=!1,Bp={[O.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Et={};ol.exports={BOOT_PROPS_FILE_PATH:Hn,getHdbBasePath:vp,setHdbBasePath:Gp,get:Fp,initSync:xp,setProperty:D,initTestEnvironment:Vp};function vp(){return Et[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(vp,"getHdbBasePath");function Gp(e){Et[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Gp,"setHdbBasePath");function Fp(e){let t=Pn.getConfigValue(e);return t===void 0?Et[e]:t}a(Fp,"get");function D(e,t){Bp[e]&&(Et[e]=t),Pn.updateConfigObject(e,t)}a(D,"setProperty");function qp(){let e;try{e=gr.getPropsFilePath(),co.accessSync(e,co.constants.F_OK|co.constants.R_OK),al=!0;let t=Pp(e);return Et[O.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(O.HDB_SETTINGS_NAMES.INSTALL_USER),Et[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Et[Hn]=e,!0}catch{return ns.trace(`Environment manager found no properties file at ${e}`),!1}}a(qp,"doesPropFileExist");function xp(e=!1){try{(al||qp())&&(Pn.initConfig(e),Et[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Pn.getConfigValue(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ns.error(Hp),ns.error(t),console.error(t),process.exit(1)}}a(xp,"initSync");function Vp(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=et.join(__dirname,"../../","unitTests");Et[Hn]=et.join(c,"hdb_boot_properties.file"),D(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,et.join(c,"settings.test")),D(O.HDB_SETTINGS_NAMES.INSTALL_USER,Dp.userInfo().username),D(O.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,et.join(c,"envDir","utility","keys","privateKey.pem")),D(O.HDB_SETTINGS_NAMES.CERT_KEY,et.join(c,"envDir","utility","keys","certificate.pem")),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,et.join(c,"envDir","utility","keys","privateKey.pem")),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,et.join(c,"envDir","utility","keys","certificate.pem")),D(O.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),D(O.HDB_SETTINGS_NAMES.LOG_PATH_KEY,et.join(c,"envDir","log")),D(O.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),D(O.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),D(O.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),D(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,et.join(c,"envDir")),D(O.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,gr.isEmpty(n)?!0:n),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,gr.isEmpty(n)?!0:n),D(O.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),D(O.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,gr.isEmpty(i)?!1:i),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,gr.isEmpty(i)?!1:i),D(O.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),D(O.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),D(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),D(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),D(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,et.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),D(O.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,gr.isEmpty(_)?!1:_),o&&(D("CORS_ACCESSLIST",o),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(D(O.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(D(O.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(D(O.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Hn}. Please check your boot props and settings files`;ns.fatal(r),ns.error(t)}}a(Vp,"initTestEnvironment")});var ul=h((pv,cl)=>{"use strict";var uo=$(),_l=f();uo.initSync();var kp=uo.get(_l.CONFIG_PARAMS.STORAGE_COMPRESSION),Yp=uo.get(_l.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Bn=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=kp&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Yp&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Bn,"OpenDBIObject");cl.exports=Bn});var dl=h((Iv,El)=>{"use strict";var Nr=$(),is=f();Nr.initSync();var $p=Nr.get(is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Nr.get(is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Nr.get(is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ll=Nr.get(is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Kp=Nr.get(is.CONFIG_PARAMS.STORAGE_NOREADAHEAD),vn=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=$p,ll!==void 0&&(this.overlappingSync=ll),this.noReadAhead=Kp}};a(vn,"OpenEnvironmentObject");El.exports=vn});var q=h((Cv,Al)=>{"use strict";var lo=require("lmdb"),Ge=require("fs-extra"),$e=require("path"),Fn=Wt(),Sl=N(),re=He().LMDB_ERRORS_ENUM,qn=Vu(),Eo=ul(),hl=dl(),bt=ne(),Ke=bt.INTERNAL_DBIS_NAME,Tl=bt.DBI_DEFINITION_NAME,Wp="data.mdb",Qp="lock.mdb",as=".mdb",Jp="-lock",Gn=class{constructor(t,r,s=!1){this.dbi=Fe(t,r),this.key_type=this.dbi[bt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[bt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new lo.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Gn,"TransactionCursor");function So(e,t){if(e===void 0)throw new Error(re.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(re.ENV_NAME_REQUIRED)}a(So,"pathEnvNameValidation");async function ho(e,t,r=!0){try{await Ge.access(e)}catch(s){throw s.code==="ENOENT"?new Error(re.INVALID_BASE_PATH):s}try{let s=$e.join(e,t+as);return await Ge.access(s,Ge.constants.R_OK|Ge.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ge.access($e.join(e,t,Wp),Ge.constants.R_OK|Ge.constants.F_OK),$e.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(re.INVALID_ENVIRONMENT)}else throw new Error(re.INVALID_ENVIRONMENT);throw s}}a(ho,"validateEnvironmentPath");function xn(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(re.DBI_NAME_REQUIRED)}a(xn,"validateEnvDBIName");async function Xp(e,t,r=!1,s=!1){So(e,t),t=t.toString();try{return await ho(e,t,s),To(e,t,r)}catch(n){if(n.message===re.INVALID_ENVIRONMENT){let i=$e.join(e,t);await Ge.mkdirp(s?i:e);let o=new hl(s?i:i+as,!1),_=lo.open(o);_.dbis=Object.create(null);let c=new Eo(!1);_.openDB(Ke,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=fo(e,t,r);return _[bt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(Xp,"createEnvironment");async function Zp(e,t,r,s=!0){let n=await To(e,t);if(r===void 0)throw new Error(re.DESTINATION_PATH_REQUIRED);try{await Ge.access($e.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(re.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(Zp,"copyEnvironment");async function To(e,t,r=!1){So(e,t),t=t.toString();let s=fo(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await ho(e,t),i=$e.join(e,t+as),o=n!=i,_=new hl(n,o),c=lo.open(_);c.dbis=Object.create(null);let u=ml(c);for(let l=0;l<u.length;l++)Fe(c,u[l]);return c[bt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(To,"openEnvironment");async function zp(e,t,r=!1){So(e,t),t=t.toString();let s=$e.join(e,t+as),n=await ho(e,t);if(global.lmdb_map!==void 0){let i=fo(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fl(o),delete global.lmdb_map[i]}}await Ge.remove(n),await Ge.remove(n===s?n+Jp:$e.join($e.dirname(n),Qp))}a(zp,"deleteEnvironment");async function fl(e){Fn.validateEnv(e);let t=e[bt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fl,"closeEnvironment");function fo(e,t,r=!1){let n=`${$e.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(fo,"getCachedEnvironmentName");function jp(e){Fn.validateEnv(e);let t=Object.create(null),r=Fe(e,Ke);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ke)try{t[s]=Object.assign(new qn,n)}catch{Sl.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(jp,"listDBIDefinitions");function ml(e){Fn.validateEnv(e);let t=[],r=Fe(e,Ke);for(let{key:s}of r.getRange({start:!1}))s!==Ke&&t.push(s);return t}a(ml,"listDBIs");function eO(e,t){let s=Fe(e,Ke).getEntry(t),n=new qn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Sl.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(eO,"getDBIDefinition");function Rl(e,t,r,s=!1){if(xn(e,t),t=t.toString(),t===Ke)throw new Error(re.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fe(e,t)}catch(n){if(n.message===re.DBI_DOES_NOT_EXIST){let i=new Eo(r,s===!0),o=e.openDB(t,i),_=new qn(r===!0,s);return o[Tl]=_,Fe(e,Ke).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Rl,"createDBI");function Fe(e,t){if(xn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ke?r=eO(e,t):r=new qn,r===void 0)throw new Error(re.DBI_DOES_NOT_EXIST);let s;try{let n=new Eo(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(re.DBI_DOES_NOT_EXIST):n}return s[Tl]=r,e.dbis[t]=s,s}a(Fe,"openDBI");function tO(e,t){xn(e,t),t=t.toString();let r=Fe(e,t),s=r.getStats();return r[bt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(tO,"statDBI");async function rO(e,t){try{let r=$e.join(e,t+as);return(await Ge.stat(r)).size}catch{throw new Error(re.INVALID_ENVIRONMENT)}}a(rO,"environmentDataSize");function sO(e,t){if(xn(e,t),t=t.toString(),t===Ke)throw new Error(re.CANNOT_DROP_INTERNAL_DBIS_NAME);Fe(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fe(e,Ke).removeSync(t)}a(sO,"dropDBI");function nO(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Fe(e,n)}catch(i){if(i.message===re.DBI_DOES_NOT_EXIST)Rl(e,n,n!==t,n===t);else throw i}}}a(nO,"initializeDBIs");Al.exports={openDBI:Fe,openEnvironment:To,createEnvironment:Xp,listDBIs:ml,listDBIDefinitions:jp,createDBI:Rl,dropDBI:sO,statDBI:tO,deleteEnvironment:zp,initializeDBIs:nO,TransactionCursor:Gn,environmentDataSize:rO,copyEnvironment:Zp,closeEnvironment:fl}});var Nl=h((wv,gl)=>{"use strict";var Vn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Vn,"InsertRecordsResponseObject");gl.exports=Vn});var Ol=h((Uv,pl)=>{"use strict";var kn=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(kn,"UpdateRecordsResponseObject");pl.exports=kn});var bl=h((Dv,Il)=>{"use strict";var Yn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Yn,"UpsertRecordsResponseObject");Il.exports=Yn});var pr=h((Gv,wl)=>{"use strict";var iO=q(),aO=Nl(),oO=Ol(),_O=bl(),tt=Wt(),os=He().LMDB_ERRORS_ENUM,cO=ne(),dt=f(),uO=p(),lO=require("uuid"),Hv=require("lmdb"),{handleHDBError:EO,hdb_errors:dO}=Y(),{OVERFLOW_MARKER:Bv,MAX_SEARCH_KEY_LENGTH:vv}=cO,Cl=$();Cl.initSync();var $n=Cl.get(dt.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),mo=dt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xt=dt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function SO(e,t,r,s,n=tt.getNextMonotonicTime()){No(e,t,r,s),Ro(e,t,r);let i=new aO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Ll(u,!0,n);let l=hO(e,t,r,u),E=u[t];o.push(l),_.push(E)}return Ao(o,_,s,i,n)}a(SO,"insertRecords");function hO(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let l=_([[{}]]);Array.isArray(l)&&(_=l[0][dt.FUNC_VAL],s[o]=_)}let c=tt.getIndexedValues(_),u=e.dbis[o];if(c){$n&&u.prefetch(c.map(l=>({key:l,value:n})),Kn);for(let l=0,E=c.length;l<E;l++)u.put(c[l],n)}}$n&&e.dbis[t].prefetch([n],Kn),e.dbis[t].put(n,s,s[Xt])})}a(hO,"insertRecord");function TO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(TO,"removeSkippedRecords");function Ll(e,t,r){let s=r>0;(s||!Number.isInteger(e[Xt]))&&(e[Xt]=r||(r=tt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[mo]))&&(e[mo]=r||tt.getNextMonotonicTime()):delete e[mo]}a(Ll,"setTimestamps");function Ro(e,t,r){r.indexOf(dt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),iO.initializeDBIs(e,t,r)}a(Ro,"initializeTransaction");async function fO(e,t,r,s,n=tt.getNextMonotonicTime()){No(e,t,r,s),Ro(e,t,r);let i=new oO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],S;try{S=go(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}_.push(S),c.push(E)}return Ao(_,c,s,i,n,o)}a(fO,"updateRecords");async function mO(e,t,r,s,n=tt.getNextMonotonicTime()){try{No(e,t,r,s)}catch(c){throw EO(c,c.message,dO.HTTP_STATUS_CODES.BAD_REQUEST)}Ro(e,t,r);let i=new _O,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;uO.isEmpty(u[t])?(l=lO.v4(),u[t]=l):l=u[t];let E=go(e,t,u,l,i,!1,n);o.push(E),_.push(l)}return Ao(o,_,s,i,n)}a(mO,"upsertRecords");async function Ao(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||tt.getNextMonotonicTime(),TO(r,i),s}a(Ao,"finalizeWrite");function go(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(Ll(r,!l,o),Number.isInteger(r[Xt])&&u[Xt]>r[Xt])return!1;l&&n.original_records.push(u);let E,S=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let g=r[m],w=e.dbis[m];if(w===void 0)continue;let W=u[m];if(typeof g=="function"){let G=g([[u]]);Array.isArray(G)&&(g=G[0][dt.FUNC_VAL],r[m]=g)}if(g===W)continue;let x=tt.getIndexedValues(W);if(x){$n&&w.prefetch(x.map(G=>({key:G,value:s})),Kn);for(let G=0,Pe=x.length;G<Pe;G++)w.remove(x[G],s)}if(x=tt.getIndexedValues(g),x){$n&&w.prefetch(x.map(G=>({key:G,value:s})),Kn);for(let G=0,Pe=x.length;G<Pe;G++)w.put(x[G],s)}}let d=Object.assign({},u,r);_.put(s,d,d[Xt])},"do_put");return c?E=_.ifVersion(s,c.version,S):E=_.ifNoExists(s,S),E.then(d=>d?!0:go(e,t,r,s,n,i,o))}a(go,"updateUpsertRecord");function RO(e,t,r){if(tt.validateEnv(e),t===void 0)throw new Error(os.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(os.WRITE_ATTRIBUTES_REQUIRED):new Error(os.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(RO,"validateBasic");function No(e,t,r,s){if(RO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(os.RECORDS_REQUIRED):new Error(os.RECORDS_MUST_BE_ARRAY)}a(No,"validateWrite");function Kn(){}a(Kn,"noop");wl.exports={insertRecords:SO,updateRecords:fO,upsertRecords:mO}});var K=h((qv,Hl)=>{"use strict";var Es=f(),AO=p(),he=$(),ds=require("path"),gO=require("minimist"),yl=require("fs-extra"),Ul=require("lodash");he.initSync();var{CONFIG_PARAMS:Ct,SCHEMAS_PARAM_CONFIG:_s,SYSTEM_SCHEMA_NAME:Wn}=Es,cs,us,ls;function Ml(){if(cs!==void 0)return cs;if(he.getHdbBasePath()!==void 0)return cs=he.get(Ct.STORAGE_PATH)||ds.join(he.getHdbBasePath(),Es.SCHEMA_DIR_NAME),cs}a(Ml,"getBaseSchemaPath");function Dl(){if(us!==void 0)return us;if(he.getHdbBasePath()!==void 0)return us=Pl(Wn),us}a(Dl,"getSystemSchemaPath");function NO(){if(ls!==void 0)return ls;if(he.getHdbBasePath()!==void 0)return ls=he.get(Es.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ds.join(he.getHdbBasePath(),Es.TRANSACTIONS_DIR_NAME),ls}a(NO,"getTransactionAuditStoreBasePath");function pO(e,t){let r=he.get(Ct.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ds.join(NO(),e.toString())}a(pO,"getTransactionAuditStorePath");function Pl(e,t){e=e.toString(),t=t&&t.toString();let r=he.get(Es.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ds.join(Ml(),e)}a(Pl,"getSchemaPath");function OO(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,gO(process.argv));let s=r[Ct.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!AO.isObject(s))throw o;i=s}for(let o of i){let _=o[Wn];if(!_)continue;let c=he.get(Ct.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[_s.PATH];if(u)return Ul.set(c,[Wn,_s.TABLES,t,_s.PATH],u),he.setProperty(Ct.SCHEMAS,c),u;let l=_?.[_s.PATH];if(l)return Ul.set(c,[Wn,_s.PATH],l),he.setProperty(Ct.SCHEMAS,c),l}}let n=r[Ct.STORAGE_PATH.toUpperCase()];if(n){if(!yl.pathExistsSync(n))throw new Error(n+" does not exist");let i=ds.join(n,e);return yl.mkdirsSync(i),he.setProperty(Ct.STORAGE_PATH,n),i}return Dl()}a(OO,"initSystemSchemaPaths");function IO(){cs=void 0,us=void 0,ls=void 0}a(IO,"resetPaths");Hl.exports={getBaseSchemaPath:Ml,getSystemSchemaPath:Dl,getTransactionAuditStorePath:pO,getSchemaPath:Pl,initSystemSchemaPaths:OO,resetPaths:IO}});var Zt=h((Vv,bO)=>{bO.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_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Qn=h((kv,Bl)=>{var{common_validators:Lt}=Kt(),Ss=ke(),We="is required",V={schema:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},table:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},hash_attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length}};function hs(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(hs,"makeAttributesStrings");function CO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence=!1,V.attribute.presence=!1,V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(CO,"schema_object");function LO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence=!1,V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(LO,"table_object");function wO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence=!1,V.hash_attribute.presence={message:We},Ss.validateObject(e,V)}a(wO,"create_table_object");function yO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence={message:We},V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(yO,"attribute_object");function UO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence=!1,V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(UO,"describe_table");function MO(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(MO,"validateTableResidence");Bl.exports={schema_object:CO,create_table_object:wO,table_object:LO,attribute_object:yO,describe_table:UO,validateTableResidence:MO}});var Gl=h(($v,vl)=>{"use strict";var DO=require("uuid"),Jn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||DO.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Jn,"CreateAttributeObject");vl.exports=Jn});var Zn=h((Wv,Fl)=>{"use strict";var PO=Gl(),Xn=class extends PO{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Xn,"LMDBCreateAttributeObject");Fl.exports=Xn});var xl=h((Jv,ql)=>{"use strict";ql.exports=BO;var HO="inserted";function BO(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===HO?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(BO,"returnObject")});var zn=h((Zv,Kl)=>{"use strict";var vO=f(),po=q(),GO=pr(),{getSystemSchemaPath:FO,getSchemaPath:qO}=K(),xO=Zt(),VO=Qn(),kO=Zn(),YO=xl(),{handleHDBError:Vl,hdb_errors:Yl}=Y(),kl=p(),{HTTP_STATUS_CODES:$O}=Yl,Oo=xO.hdb_attribute,$l=[];for(let e=0;e<Oo.attributes.length;e++)$l.push(Oo.attributes[e].attribute);var KO="inserted";Kl.exports=WO;async function WO(e){let t=VO.attribute_object(e);if(t)throw Vl(new Error,t.message,Yl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&kl.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Vl(new Error,r,$O.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=kl.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new kO(e.schema,e.table,e.attribute,e.id);try{let i=await po.openEnvironment(qO(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}`);po.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await po.openEnvironment(FO(),vO.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await GO.insertRecords(o,Oo.hash_attribute,$l,[n]);return YO(KO,_,{records:[n]},c)}catch(i){throw i}}a(WO,"lmdbCreateAttribute")});var jn=h((eG,Ql)=>{"use strict";var St=p(),Wl=N(),jv=ro();Ql.exports=QO;function QO(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(St.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&St.isEmptyOrZeroLength(o[r]))throw Wl.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!St.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Wl.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!St.isEmpty(o[r])&&o[r]!==""&&s.has(St.autoCast(o[r]))&&(o.skip=!0),s.add(St.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(QO,"insertUpdateValidate")});var ti=h((rG,Jl)=>{"use strict";var JO=f().OPERATIONS_ENUM,ei=class{constructor(t,r,s,n,i=void 0){this.operation=JO.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(ei,"InsertObject");Jl.exports=ei});var si=h((iG,Xl)=>{"use strict";var nG=ti(),ri=f(),bo=p(),Io=N(),XO=require("uuid"),{handleHDBError:Ts,hdb_errors:ZO}=Y(),{HDB_ERROR_MSGS:fs,HTTP_STATUS_CODES:ms}=ZO;Xl.exports=zO;function zO(e,t,r){for(let n=0;n<t.length;n++)jO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];eI(i,r,e.operation)}}a(zO,"processRows");function jO(e){if(Buffer.byteLength(String(e))>ri.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ts(new Error,fs.ATTR_NAME_LENGTH_ERR(e),ms.BAD_REQUEST,void 0,void 0,!0);if(bo.isEmptyOrZeroLength(e)||bo.isEmpty(e.trim()))throw Ts(new Error,fs.ATTR_NAME_NULLISH_ERR,ms.BAD_REQUEST,void 0,void 0,!0)}a(jO,"validateAttribute");function eI(e,t,r){if(!e.hasOwnProperty(t)||bo.isEmptyOrZeroLength(e[t])){if(r===ri.OPERATIONS_ENUM.INSERT||r===ri.OPERATIONS_ENUM.UPSERT){e[t]=XO.v4();return}throw Io.error("Update transaction aborted due to record with no hash value:",e),Ts(new Error,fs.RECORD_MISSING_HASH_ERR,ms.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ri.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Io.error(e),Ts(new Error,fs.HASH_VAL_LENGTH_ERR,ms.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Io.error(e),Ts(new Error,fs.INVALID_FORWARD_SLASH_IN_HASH_ERR,ms.BAD_REQUEST,void 0,void 0,!0)}a(eI,"validateHash")});var zl=h((oG,Zl)=>{"use strict";var ni=class{constructor(t,r){this.type=t,this.message=r}};a(ni,"ITCEventObject");Zl.exports=ni});var ii=h((cG,tE)=>{var tI=require("crypto"),jl=9;function rI(e){let t=nI(jl),r=eE(e+t);return t+r}a(rI,"createHash");function sI(e,t){let r=e.substr(0,jl),s=r+eE(t+r);return e===s}a(sI,"validateHash");function nI(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(nI,"generateSalt");function eE(e){return tI.createHash("md5").update(e).digest("hex")}a(eE,"md5");tE.exports={hash:rI,validate:sI}});var sE=h((lG,rE)=>{"use strict";var wt=f(),Rs=class{constructor(t=0,r=wt.STORAGE_TYPES_ENUM.LMDB,s=wt.LICENSE_VALUES.API_CALL_DEFAULT,n=wt.RAM_ALLOCATION_ENUM.DEFAULT,i=wt.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Rs,"BaseLicense");var ai=class extends Rs{constructor(t=0,r=wt.STORAGE_TYPES_ENUM.LMDB,s=wt.LICENSE_VALUES.API_CALL_DEFAULT,n=wt.RAM_ALLOCATION_ENUM.DEFAULT,i=wt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(ai,"ExtendedLicense");rE.exports={BaseLicense:Rs,ExtendedLicense:ai}});var oi=h((dG,cE)=>{"use strict";var Ir=require("fs-extra"),nE=ii(),iE=require("crypto"),iI=require("moment"),aI=require("uuid").v4,oe=N(),Lo=require("path"),oI=p(),Ce=f(),_I=sE().ExtendedLicense,Or="invalid license key format",cI="061183",uI="mofi25",lI="aes-256-cbc",EI=16,dI=32,aE=$();aE.initSync();var Co;cE.exports={validateLicense:oE,generateFingerPrint:hI,licenseSearch:_E,getLicense:mI};function wo(){return Lo.join(aE.getHdbBasePath(),Ce.LICENSE_KEY_DIR_NAME,Ce.LICENSE_FILE_NAME)}a(wo,"getLicenseDirPath");function SI(){let e=wo();return Lo.join(e,Ce.LICENSE_FILE_NAME)}a(SI,"getLicenseFilePath");function yo(){let e=wo();return Lo.join(e,Ce.REG_KEY_FILE_NAME)}a(yo,"getFingerPrintFilePath");async function hI(){let e=yo();try{return await Ir.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await TI();throw oe.error(`Error writing fingerprint file to ${e}`),oe.error(t),new Error("There was an error generating the fingerprint")}}a(hI,"generateFingerPrint");async function TI(){let e=aI(),t=nE.hash(e),r=yo();try{await Ir.mkdirp(wo()),await Ir.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw oe.error(`Error writing fingerprint file to ${r}`),oe.error(s),new Error("There was an error generating the fingerprint")}return t}a(TI,"writeFingerprint");function oE(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Ce.STORAGE_TYPES_ENUM.LMDB,api_call:Ce.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Ce.RAM_ALLOCATION_ENUM.DEFAULT,version:Ce.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return oe.error("empty license key passed to validate."),r;let s=yo(),n=!1;try{n=Ir.statSync(s)}catch(i){oe.error(i)}if(n){let i;try{i=Ir.readFileSync(s,"utf8")}catch{oe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uI),_=o[1];_=Buffer.concat([Buffer.from(_)],EI);let c=Buffer.concat([Buffer.from(i)],dI),u=iE.createDecipheriv(lI,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let d=fI(o[0],i);if(d)l=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Or),oe.error(Or),new Error(Or)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Or),oe.error(Or),new Error(Or)}else r.exp_date=l;r.exp_date<iI().valueOf()&&(r.valid_date=!1),nE.validate(o[1],`${cI}${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||oe.error("Invalid licence"),r}a(oE,"validateLicense");function fI(e,t){try{let r=iE.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{oe.warn("Check old license failed")}}a(fI,"checkOldLicense");function _E(){let e=new _I;e.api_call=0;let t=[];try{t=Ir.readFileSync(SI(),"utf-8").split(Ce.NEW_LINE)}catch(r){r.code==="ENOENT"?oe.info("no license file found"):oe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(oI.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=oE(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){oe.error("There was an error parsing the license string."),oe.error(n),e.api_call=Ce.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Ce.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Ce.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Ce.LICENSE_VALUES.API_CALL_DEFAULT),Co=e,e}a(_E,"licenseSearch");async function mI(){return Co||await _E(),Co}a(mI,"getLicense")});var ui=h((hG,Bo)=>{"use strict";var{Worker:RI,MessageChannel:AI,parentPort:ht,isMainThread:EE,threadId:gI,workerData:NI}=require("worker_threads"),{PACKAGE_ROOT:pI}=f(),{join:OI,isAbsolute:II,extname:bI}=require("path"),{totalmem:uE}=require("os"),Po=f(),dE=$(),CI=oi(),_i=N(),LI=f();dE.initSync();var wI=dE.get(Po.CONFIG_PARAMS.HTTP_THREADS)||1,yI=1024*1024,yt=[],zt=[],UI=50,SE=1e4,hE="restart",TE="request_thread_info",fE="resource_report",mE="thread_info",RE="added-port",Uo;Bo.exports={startWorker:Mo,restartWorkers:Ho,shutdownWorkers:DI,workers:yt,setMonitorListener:GI,onMessageFromWorkers:PI,broadcast:HI};function Mo(e,t={}){let s=CI.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||uE();n=Math.min(n,uE());let i=Math.min(Math.max(Math.floor(n/yI/(1+wI/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of zt){let{port1:l,port2:E}=new AI;u.postMessage({type:RE,port:l},[l]),_.push(E)}bI(e)||(e+=".js");let c=new RI(II(e)?e:OI(pI,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return ci(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{Mo(e,t)},c.on("error",u=>{console.error("Worker error:",u),_i.error("Worker error:",u)}),c.on("exit",u=>{yt.splice(yt.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<UI?(t.unexpectedRestarts=c.unexpectedRestarts+1,Mo(e,t)):_i.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===hE&&Ho(u.workerType),u.type===TE&&BI(c),u.type===fE&&vI(c,u)}),yt.push(c),qI(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Mo,"startWorker");var MI=[Po.THREAD_TYPES.HTTP];async function Ho(e=null,t=2,r=!0){if(EE){t<1&&(t=t*yt.length);let s=[];for(let n of yt.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Po.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=MI.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),SE*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else ht.postMessage({type:hE,workerType:e})}a(Ho,"restartWorkers");function DI(e){return Ho(e,1/0,!1)}a(DI,"shutdownWorkers");var AE=[];function PI(e){AE.push(e)}a(PI,"onMessageFromWorkers");function HI(e){for(let t of zt)try{t.postMessage(e)}catch(r){_i.error("Unable to send message to worker",r)}}a(HI,"broadcast");function BI(e){e.postMessage({type:mE,workers:gE()})}a(BI,"sendThreadInfo");function gE(){let e=Date.now();return yt.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(gE,"getChildWorkerInfo");function vI(e,t){e.resources=t,e.resources.updated=Date.now()}a(vI,"recordResourceReport");var Do;function GI(e){Do=e}a(GI,"setMonitorListener");var FI=1e3,lE=!1;function qI(){lE||(lE=!0,setInterval(()=>{for(let e of yt){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Do&&Do()},FI).unref())}a(qI,"startMonitoring");var xI=1e3;if(ht){ci(ht);for(let e of NI.addPorts)ci(e);setInterval(()=>{let e=process.memoryUsage();ht.postMessage({type:fE,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},xI).unref(),Uo=a(()=>new Promise((e,t)=>{ht.on("message",r),ht.postMessage({type:TE});function r(s){s.type===mE&&(ht.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Uo=gE;Bo.exports.getThreadInfo=Uo;function ci(e,t){zt.push(e),e.on("message",r=>{if(r.type===RE)ci(r.port);else for(let s of AE)s(r)}).on("close",()=>{zt.splice(zt.indexOf(e),1)}).on("exit",()=>{zt.splice(zt.indexOf(e),1)}),t||e.unref()}a(ci,"addPort");EE||ht.on("message",async e=>{let{type:t}=e;t===LI.ITC_EVENT_TYPES.SHUTDOWN&&(ht.unref(),setTimeout(()=>{_i.warn("Thread did not voluntarily terminate",gI),process.exit(0)},SE).unref())})});var OE=h((fG,pE)=>{"use strict";var vo=q(),VI=N(),NE=He().LMDB_ERRORS_ENUM;pE.exports=kI;async function kI(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 vo.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==NE.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await vo.closeEnvironment(global.lmdb_map[s]),await vo.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==NE.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){VI.error(t)}}a(kI,"cleanLMDBMap")});var vE=h((AG,BE)=>{"use strict";var Go=require("recursive-iterator"),YI=require("alasql"),Fo=require("clone"),IE=p(),{handleHDBError:bE,hdb_errors:$I}=Y(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:LE}=$I,KI=["DISTINCT_ARRAY"],wE=Symbol("validateTables"),qo=Symbol("validateTable"),RG=Symbol("getAllColumns"),yE=Symbol("validateAllColumns"),li=Symbol("findColumn"),UE=Symbol("validateOrderBy"),As=Symbol("validateSegment"),xo=Symbol("validateColumn"),ME=Symbol("setColumnsForTable"),DE=Symbol("checkColumnsForAsterisk"),PE=Symbol("validateGroupBy"),HE=Symbol("hasColumns"),Ei=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[wE](),this[DE](),this[yE]()}[wE](){if(this[HE]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[qo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[qo](t.table)})}}[HE](){let t=!1,r=new Go(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[qo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw bE(new Error,CE.SCHEMA_NOT_FOUND(t.databaseid),LE.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw bE(new Error,CE.TABLE_NOT_FOUND(t.databaseid,t.tableid),LE.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Fo(s);n.table=Fo(t),this.attributes.push(n)})}[li](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)}[DE](){let t=new Go(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ME](r.tableid)}[ME](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new YI.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yE](){this[As](this.statement.columns,!1),this[As](this.statement.joins,!1),this[As](this.statement.where,!1),this[PE](this.statement.group,!1),this[As](this.statement.order,!0)}[As](t,r){if(!t)return;let s=new Go(t),n=[];for(let{node:i,path:o}of s)!IE.isEmpty(i)&&!IE.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[UE](i):n.push(this[xo](i)));return n}[PE](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&KI.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Fo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[li](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[li](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[UE](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[xo](t)}[xo](t){let r=this[li](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Ei,"SelectValidator");BE.exports=Ei});var xE=h((NG,qE)=>{"use strict";var GE=require("lodash"),gs=require("mathjs"),WI=require("jsonata"),FE=p();qE.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GE.uniqWith(e,GE.isEqual):e,searchJSON:QI,mad:Ns.bind(null,gs.mad),mean:Ns.bind(null,gs.mean),mode:Ns.bind(null,gs.mode),prod:Ns.bind(null,gs.prod),median:Ns.bind(null,gs.median)};function Ns(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ns,"aggregateFunction");function QI(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(FE.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FE.isEmpty(this.__ala__.res[r])){let s=WI(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(QI,"searchJSON")});var kE=h((OG,VE)=>{"use strict";var X=require("moment"),Vo="YYYY-MM-DDTHH:mm:ss.SSSZZ";X.suppressDeprecationWarnings=!0;VE.exports={current_date:()=>X().utc().format("YYYY-MM-DD"),current_time:()=>X().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return X(e).utc().format("YYYY");case"month":return X(e).utc().format("MM");case"day":return X(e).utc().format("DD");case"hour":return X(e).utc().format("HH");case"minute":return X(e).utc().format("mm");case"second":return X(e).utc().format("ss");case"millisecond":return X(e).utc().format("SSS");default:break}},date:e=>X(e).utc().format(Vo),date_format:(e,t)=>X(e).utc().format(t),date_add:(e,t,r)=>X(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>X(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=X(e).utc(),n=X(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>X().utc().valueOf(),get_server_time:()=>X().format(Vo),offset_utc:(e,t)=>X(e).utc().utcOffset(t).format(Vo)}});var WE=h((IG,KE)=>{"use strict";var JI=require("@turf/area"),XI=require("@turf/length"),ZI=require("@turf/circle"),zI=require("@turf/difference"),jI=require("@turf/distance"),eb=require("@turf/boolean-contains"),tb=require("@turf/boolean-equal"),rb=require("@turf/boolean-disjoint"),sb=require("@turf/helpers"),YE=f(),y=p();KE.exports={geoArea:nb,geoLength:ib,geoCircle:ab,geoDifference:ob,geoDistance:$E,geoNear:_b,geoContains:cb,geoEqual:ub,geoCrosses:lb,geoConvert:Eb};var ko="geo1 is required",Yo="geo2 is required";function nb(e){if(y.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),JI.default(e)}a(nb,"geoArea");function ib(e,t){if(y.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),XI.default(e,{units:t||"kilometers"})}a(ib,"geoLength");function ab(e,t,r){if(y.isEmpty(e))throw new Error("point is required");if(y.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),ZI.default(e,t,{units:r||"kilometers"})}a(ab,"geoCircle");function ob(e,t){if(y.isEmpty(e))throw new Error("poly1 is required");if(y.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),zI(e,t)}a(ob,"geoDifference");function $E(e,t,r){if(y.isEmpty(e))throw new Error("point1 is required");if(y.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),jI.default(e,t,{units:r||"kilometers"})}a($E,"geoDistance");function _b(e,t,r,s){if(y.isEmpty(e))throw new Error("point1 is required");if(y.isEmpty(t))throw new Error("point2 is required");if(y.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return $E(e,t,s)<=r}a(_b,"geoNear");function cb(e,t){if(y.isEmpty(e))throw new Error(ko);if(y.isEmpty(e))throw new Error(Yo);return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),eb.default(e,t)}a(cb,"geoContains");function ub(e,t){if(y.isEmpty(e))throw new Error(ko);if(y.isEmpty(e))throw new Error(Yo);return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),tb.default(e,t)}a(ub,"geoEqual");function lb(e,t){if(y.isEmpty(e))throw new Error(ko);if(y.isEmpty(e))throw new Error(Yo);return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),!rb.default(e,t)}a(lb,"geoCrosses");function Eb(e,t,r){if(y.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(y.isEmpty(t))throw new Error("geo_type is required");if(y.isEmpty(YE.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(YE.GEO_CONVERSION_ENUM).join(",")}`);return sb[t](e,r)}a(Eb,"geoConvert")});var JE=h((CG,QE)=>{var jt=xE(),Le=kE(),rt=WE();QE.exports=e=>{e.aggr.mad=e.aggr.MAD=jt.mad,e.aggr.mean=e.aggr.MEAN=jt.mean,e.aggr.mode=e.aggr.MODE=jt.mode,e.aggr.prod=e.aggr.PROD=jt.prod,e.aggr.median=e.aggr.MEDIAN=jt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=jt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=jt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Le.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Le.current_time,e.fn.extract=e.fn.EXTRACT=Le.extract,e.fn.date=e.fn.DATE=Le.date,e.fn.date_format=e.fn.DATE_FORMAT=Le.date_format,e.fn.date_add=e.fn.DATE_ADD=Le.date_add,e.fn.date_sub=e.fn.DATE_SUB=Le.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Le.date_diff,e.fn.now=e.fn.NOW=Le.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Le.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Le.get_server_time,e.fn.getdate=e.fn.GETDATE=Le.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Le.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rt.geoNear}});var zE=h((LG,ZE)=>{"use strict";var ps=require("lodash"),se=require("alasql");se.options.cache=!1;var db=JE(),XE=require("clone"),di=require("recursive-iterator"),I=N(),L=p(),br=Ut(),Sb=f(),{hdb_errors:hb}=Y(),Tb="IS NULL",Qe="There was a problem performing this search. Please check the logs and try again.";db(se);var Si=class{constructor(t,r){if(L.isEmpty(t))throw I.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(),L.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!L.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(Qe)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(Qe)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(Qe)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(Qe)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(Qe)}}_getColumns(){let t=new di(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(XE(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ps.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(L.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new di(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!L.isEmpty(r)&&r.right)if(L.isNotEmptyAndHasValue(r.right.value)){let s=L.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new se.yy.LogicValue({value:s}):r.right instanceof se.yy.StringValue&&!L.isEmpty(s)&&L.autoCasterIsNumberCheck(s.toString())&&(r.right=new se.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=L.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new se.yy.LogicValue({value:i}):s instanceof se.yy.StringValue&&L.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new se.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new di(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!L.isEmpty(Sb.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(L.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(L.isEmptyOrZeroLength(r.left.columnid)||L.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(L.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!L.isEmpty(r.right.value)||!L.isEmpty(r.left.value)?s.add(L.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from)&&L.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&ps.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(L.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);L.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(L.isEmptyOrZeroLength(this.all_table_attributes)&&!L.isEmptyOrZeroLength(this.columns.columns))return t;if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await se.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(XE(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(L.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(Tb)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ps.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!L.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await br.getDataByHash(_);for(let E of _.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(Qe)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let S=await br.getDataByValue(E);for(let[d,m]of S)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,m[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(d)))}))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(Qe)}else if(!L.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,S=l.length;E<S;E++){let d=l[E];_.search_attribute=d.attribute,_.search_value=d.search_value;let m=await br.getDataByValue(_,d.operation);if(c)for(let[g]of m)this.data[i].__merged_data[g]||(this.data[i].__merged_data[g]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(g)));else for(let[g,w]of m)this.data[i].__merged_data[g]?this._updateMergedAttribute(i,g,n.attribute,w[n.attribute]):(this.data[i].__merged_data[g]=[...s[i]],this._updateMergedAttribute(i,g,n.attribute,w[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(g)))}}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(l),new Error(Qe)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await br.getDataByValue(_);if(c)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(E)));else for(let[E,S]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,S[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(E)))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(l),new Error(Qe)}}}_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 se.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new se.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new se.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new se.yy.FuncValue:new se.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let m=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(m+=" ON "+d.on.toString()),i.push(m),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let m=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,g=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${g}.${m}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${m}\` AS "${g}.${m}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let S=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(d,n);S=await se.promise(m,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(S&&S.length>0){for(let d=0,m=S.length;d<m;d++){let g=S[d];o.forEach(w=>{g[w.key]!==null&&g[w.key]!==void 0&&w.keys.add(g[w.key])})}o.forEach(d=>{let m=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),g=ps.difference(m,[...d.keys].map(w=>w.toString()));for(let w=0,W=g.length;w<W;w++){let x=g[w];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:S?S.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new di(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=ps.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(Qe)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await br.getDataByHash(_),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let S=o[l],d=c.get(S);for(let m=0;m<u;m++){let g=n.columns[m],w=d[g]===void 0?null:d[g];this.data[s].__merged_data[S].push(w)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await se.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return I.error(hb.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await br.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(Qe)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Si,"SQLSearch");ZE.exports=Si});var hi=h((yG,ed)=>{"use strict";var fb=vE();ed.exports={searchByConditions:gb,searchByHash:Nb,searchByValue:pb,search:Ob};var $o=Ut(),jE=require("util"),mb=jE.callbackify($o.searchByHash),Rb=jE.callbackify($o.searchByValue),Ab=zE();async function gb(e){return $o.searchByConditions(e)}a(gb,"searchByConditions");function Nb(e,t){try{mb(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Nb,"searchByHash");function pb(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Rb(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(pb,"searchByValue");function Ob(e,t){try{let r=new fb(e);r.validate(),new Ab(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Ob,"search")});var Is=h((MG,nd)=>{"use strict";var Os=require("crypto"),rd="aes-256-cbc",Ib=32,bb=16,Ko=64,sd=32,Cb=Ko+sd,td=new Map;nd.exports={encrypt:Lb,decrypt:wb,createNatsTableStreamName:yb};function Lb(e){let t=Os.randomBytes(Ib),r=Os.randomBytes(bb),s=Os.createCipheriv(rd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(Lb,"encrypt");function wb(e){let t=e.substr(0,Ko),r=e.substr(Ko,sd),s=e.substr(Cb,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Os.createDecipheriv(rd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wb,"decrypt");function yb(e,t){let r=`${e}.${t}`,s=td.get(r);return s||(s=Os.createHash("md5").update(`${e}.${t}`).digest("hex"),td.set(r,s)),s}a(yb,"createNatsTableStreamName")});var Qo=h((HG,id)=>{"use strict";var Ub=f(),PG=Wt();function Wo(e,t){let r=Object.create(null);if(t.length===1&&Ub.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Wo,"parseRow");function Mb(e,t,r,s){let n=Wo(r,e);s.push(n)}a(Mb,"searchAll");function Db(e,t,r,s){let n=Wo(r,e);s[t]=n}a(Db,"searchAllToMap");function Pb(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Pb,"iterateDBI");function er(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(er,"pushResults");function Hb(e,t,r,s,n,i){t.toString().endsWith(e)&&er(t,r,s,n,i)}a(Hb,"endsWith");function Bb(e,t,r,s,n,i){t.toString().includes(e)&&er(t,r,s,n,i)}a(Bb,"contains");function vb(e,t,r,s,n,i){t>e&&er(t,r,s,n,i)}a(vb,"greaterThanCompare");function Gb(e,t,r,s,n,i){t>=e&&er(t,r,s,n,i)}a(Gb,"greaterThanEqualCompare");function Fb(e,t,r,s,n,i){t<e&&er(t,r,s,n,i)}a(Fb,"lessThanCompare");function qb(e,t,r,s,n,i){t<=e&&er(t,r,s,n,i)}a(qb,"lessThanEqualCompare");id.exports={parseRow:Wo,searchAll:Mb,searchAllToMap:Db,iterateDBI:Pb,endsWith:Hb,contains:Bb,greaterThanCompare:vb,greaterThanEqualCompare:Gb,lessThanCompare:Fb,lessThanEqualCompare:qb,pushResults:er}});var rr=h((qG,Ed)=>{"use strict";var Mt=q(),vG=N(),we=Wt(),Ti=ne(),J=He().LMDB_ERRORS_ENUM,GG=p(),xb=f(),fi=Qo(),{parseRow:Vb}=fi,FG=require("lmdb"),{OVERFLOW_MARKER:ad,MAX_SEARCH_KEY_LENGTH:kb}=Ti;function od(e,t,r,s=!1,n=void 0,i=void 0){return tr(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(od,"iterateFullIndex");function bs(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return tr(e,t,r,(l,E,S,d)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,E.getRange(x).map(G=>({value:G}))):E.getRange(x)})}a(bs,"iterateRangeBetween");function tr(e,t,r,s){let n=e.database||e,i=Mt.openDBI(n,r);i[Ti.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Mt.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(tr,"setupTransaction");function _d(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ad)){if(!n)if(r)n=Mt.openDBI(e,r);else{let c=Mt.listDBIs(e);for(let u=0,l=c.length;u<l&&(n=Mt.openDBI(e,c[u]),!n[Ti.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(_d,"getOverflowCheck");function Yb(e,t,r,s=!1,n=void 0,i=void 0){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return tr(e,t,t,(o,_,c)=>(mi(r),r=Cs(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>Vb(u.value,r))))}a(Yb,"searchAll");function $b(e,t,r,s=!1,n=void 0,i=void 0){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);mi(r),r=Cs(e.database||e,r);let o=new Map;for(let{key:_,value:c}of od(e,t,t,s,n,i))o.set(_,fi.parseRow(c,r));return o}a($b,"searchAllToMap");function Kb(e,t,r=!1,s=void 0,n=void 0){if(we.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=od(e,void 0,t,r,s,n),_=o.transaction,c=_d(_.database,_,void 0,t);for(let{key:u,value:l}of o){let E=c(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(Kb,"iterateDBI");function Wb(e,t){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Mt.statDBI(e,t).entryCount}a(Wb,"countAll");function Qb(e,t,r,s,n=!1,i=void 0,o=void 0){return Dt(e,r,s),tr(e,t,r,(_,c,u,l)=>(s=we.convertKeyValueToWrite(s),l===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(Qb,"equals");function Jb(e,t,r){return Dt(e,t,r),Mt.openDBI(e,t).getValuesCount(r)}a(Jb,"count");function Xb(e,t,r,s,n=!1,i=void 0,o=void 0){return Dt(e,r,s),tr(e,null,r,(_,c)=>{s=we.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let S of c.getKeys({transaction:_,start:s}))if(!S.startsWith(s)){E=S;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=c.getRange({transaction:_,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(S=>{let{key:d}=S;if(d!==E){if(d.toString().startsWith(s))return S;if(u===!0)return l.DONE}}),l.filter(S=>S)}else return l=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(Xb,"startsWith");function Zb(e,t,r,s,n=!1,i=void 0,o=void 0){return cd(e,t,r,s,n,i,o,!0)}a(Zb,"endsWith");function cd(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return Dt(e,r,s),tr(e,null,r,(c,u,l,E)=>{let S=_d(l,c,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let m=d.toString();return m.endsWith(ad)?u.getValues(d,{transaction:c}).map(g=>{let w=S(d,g);if(_?w.endsWith(s):w.includes(s))return{key:w,value:g}}).filter(g=>g):(_?m.endsWith(s):m.includes(s))?u[Ti.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(g=>({key:d,value:g})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cd,"contains");function zb(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),bs(e,t,r,s,c,n,i,o,!0,!1)}a(zb,"greaterThan");function jb(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),bs(e,t,r,s,c,n,i,o,!1,!1)}a(jb,"greaterThanEqual");function eC(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),bs(e,t,r,c,s,n,i,o,!1,!0)}a(eC,"lessThan");function tC(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),bs(e,t,r,c,s,n,i,o,!1,!1)}a(tC,"lessThanEqual");function rC(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(we.validateEnv(e),r===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(J.START_VALUE_REQUIRED);if(n===void 0)throw new Error(J.END_VALUE_REQUIRED);if(s=we.convertKeyValueToWrite(s),n=we.convertKeyValueToWrite(n),s>n)throw new Error(J.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return bs(e,t,r,s,n,i,o,_)}a(rC,"between");function sC(e,t,r,s){we.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(mi(r),r=Cs(n,r),s===void 0)throw new Error(J.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=fi.parseRow(_,r)),o}a(sC,"searchByHash");function nC(e,t,r){we.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(nC,"checkHashExists");function iC(e,t,r,s,n=[]){return ld(e,t,r,s,n),ud(e,t,r,s,n).map(i=>i[1])}a(iC,"batchSearchByHash");function aC(e,t,r,s,n=[]){ld(e,t,r,s,n);let i=new Map;for(let[o,_]of ud(e,t,r,s,n))i.set(o,_);return i}a(aC,"batchSearchByHashToMap");function ud(e,t,r,s,n=[]){return tr(e,t,t,(i,o,_)=>{r=Cs(_,r);let c=r.length<3;return s.map(u=>{let l=_.dbis[t].get(u,{transaction:i,lazy:c});if(l)return[u,fi.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(ud,"batchHashSearch");function ld(e,t,r,s,n){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(mi(r),s==null)throw new Error(J.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(J.IDS_MUST_BE_ITERABLE)}a(ld,"initializeBatchSearchByHash");function mi(e){if(!Array.isArray(e))throw e===void 0?new Error(J.FETCH_ATTRIBUTES_REQUIRED):new Error(J.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(mi,"validateFetchAttributes");function Dt(e,t,r){if(we.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.SEARCH_VALUE_REQUIRED);if(r?.length>kb)throw new Error(J.SEARCH_VALUE_TOO_LARGE)}a(Dt,"validateComparisonFunctions");function Cs(e,t){return t.length===1&&xb.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Mt.listDBIs(e)),t}a(Cs,"setGetWholeRowAttributes");Ed.exports={searchAll:Yb,searchAllToMap:$b,count:Jb,countAll:Wb,equals:Qb,startsWith:Xb,endsWith:Zb,contains:cd,searchByHash:sC,setGetWholeRowAttributes:Cs,batchSearchByHash:iC,batchSearchByHashToMap:aC,checkHashExists:nC,iterateDBI:Kb,greaterThan:zb,greaterThanEqual:jb,lessThan:eC,lessThanEqual:tC,between:rC}});var ws=h((VG,Ad)=>{"use strict";var Sd=hi(),Pt=N(),hd=Qn(),oC=require("lodash"),_C=Is(),Td=p(),{promisify:fd}=require("util"),k=f(),{handleHDBError:Ri,hdb_errors:cC}=Y(),{HDB_ERROR_MSGS:Ai,HTTP_STATUS_CODES:md}=cC,uC=$();uC.initSync();var dd=q(),lC=rr(),{getSchemaPath:EC}=K(),Ls=fd(Sd.searchByValue),dC=fd(Sd.searchByHash),Cr="name",Rd="hash_attribute",Jo="schema",SC="schema_table",hC="attribute";Ad.exports={describeAll:TC,describeTable:gi,describeSchema:mC};async function TC(e){try{let t=Td.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Cr,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Cr]},i=await Ls(n),o={},_={};for(let S of i)o[S.name]=!0,!t&&!s&&(_[S.name]=r[S.name].describe);let c={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:k.ID_ATTRIBUTE_STRING,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Rd,k.ID_ATTRIBUTE_STRING,Cr,Jo]},u=await Ls(c),l=[];for(let S of u)try{let d;if(t||s)d=await gi({schema:S.schema,table:S.name});else if(r&&r[S.schema].describe&&r[S.schema].tables[S.name].describe){let m=r[S.schema].tables[S.name].attribute_permissions;d=await gi({schema:S.schema,table:S.name},m)}d&&l.push(d)}catch(d){Pt.error(d)}let E={};for(let S in l)t||s?(E[l[S].schema]==null&&(E[l[S].schema]={}),E[l[S].schema][l[S].name]=l[S],o[l[S].schema]&&delete o[l[S].schema]):_[l[S].schema]&&(E[l[S].schema]==null&&(E[l[S].schema]={}),E[l[S].schema][l[S].name]=l[S],o[l[S].schema]&&delete o[l[S].schema]);for(let S in o)t||s?E[S]={}:_[S]&&(E[S]={});return E}catch(t){return Pt.error("Got an error in describeAll"),Pt.error(t),Ri(new Error,Ai.DESCRIBE_ALL_ERR)}}a(TC,"describeAll");async function gi(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=hd.describe_table(e);if(o)throw o;if(r===k.SYSTEM_SCHEMA_NAME)return global.hdb_schema[k.SYSTEM_SCHEMA_NAME][s];let _={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Cr,search_value:s,hash_values:[],get_attributes:[k.WILDCARD_SEARCH_VALUE]},c=Array.from(await Ls(_));if(!c||c.length===0)throw Ri(new Error,Ai.TABLE_NOT_FOUND(e.schema,e.table),md.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Ri(new Error,Ai.INVALID_TABLE_ERR(i));let l={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:SC,search_value:r+"."+s,get_attributes:[hC]},E=Array.from(await Ls(l));E=oC.uniqBy(E,S=>S.attribute),n&&n.length>0&&(E=fC(n)),i.attributes=E,i.clustering_stream_name=_C.createNatsTableStreamName(u.schema,u.name);try{let S=EC(i.schema,i.name),d=await dd.openEnvironment(S,i.name),m=dd.statDBI(d,i.hash_attribute);i.record_count=m.entryCount;for(let{key:g}of lC.lessThan(d,i.hash_attribute,k.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=g}catch(S){Pt.warn(`unable to stat table dbi due to ${S}`)}}catch(l){Pt.error(`There was an error getting attributes for table '${u.name}'`),Pt.error(l)}return i}a(gi,"descTable");function fC(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(fC,"getAttrsByPerms");async function mC(e){let t=hd.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Jo,search_value:s,hash_values:[],get_attributes:[Rd,k.ID_ATTRIBUTE_STRING,Cr,Jo]},i=Array.from(await Ls(n));if(i&&i.length<1){let o={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Cr]},_=Array.from(await dC(o));if(_&&_.length<1)throw Ri(new Error,Ai.SCHEMA_NOT_FOUND(e.schema),md.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Td.isEmpty(c)||c.describe){let u=await gi({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Pt.error(`Error describing schema table '${e.schema}.${_}'`),Pt.error(c)}})),o}}a(mC,"describeSchema")});var ys=h((YG,Id)=>{var Lr=Zt(),{callbackify:pd,promisify:RC}=require("util");Id.exports={setSchemaDataToGlobal:gd,getTableSchema:NC,getSystemSchema:OC,setSchemaDataToGlobalAsync:RC(gd)};var Od=ws(),AC=pd(Od.describeAll),gC=pd(Od.describeTable);function gd(e){AC(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Lr),global.hdb_schema=r,e(null,null)})}a(gd,"setSchemaDataToGlobal");function Nd(e,t){return e==="system"?Lr[t]:global.hdb_schema[e][t]}a(Nd,"returnSchema");function NC(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?pC(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,Nd(e,t))}):r(null,Nd(e,t))}a(NC,"getTableSchema");function pC(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Lr:global.hdb_schema={system:Lr},r();return}gC(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Lr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(pC,"setTableDataToGlobal");function OC(){return Lr}a(OC,"getSystemSchema")});var wd=h((KG,Ld)=>{var IC=ke(),Xo=require("joi"),{hdb_schema_table:bd}=Kt(),Cd={schema:bd,table:bd},bC={date:Xo.date().iso().required()},CC={timestamp:Xo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ld.exports=function(e,t){let r=t==="timestamp"?{...Cd,...CC}:{...Cd,...bC},s=Xo.object(r);return IC.validateBySchema(e,s)}});var Dd=h((WG,Md)=>{var LC=ke(),yd=require("joi"),{hdb_schema_table:Ud}=Kt(),wC=yd.object({schema:Ud,table:Ud,hash_values:yd.array().required()});Md.exports=function(e){return LC.validateBySchema(e,wC)}});var Hd=h((QG,Pd)=>{"use strict";var Ni=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Ni,"InsertObject");var pi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(pi,"NoSQLSeachObject");var Oi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Oi,"DeleteResponseObject");Pd.exports={InsertObject:Ni,NoSQLSeachObject:pi,DeleteResponseObject:Oi}});var jo=h((XG,qd)=>{"use strict";var vd=wd(),yC=Dd(),Ii=p(),Bd=require("moment"),Gd=N(),{promisify:UC,callbackify:MC}=require("util"),sr=f(),DC=ys(),Zo=UC(DC.getTableSchema),zo=Ut(),{DeleteResponseObject:PC}=Hd(),{handleHDBError:Ht,hdb_errors:HC}=Y(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Bt}=HC,BC="records successfully deleted",vC=MC(Fd);qd.exports={delete:vC,deleteRecord:Fd,deleteFilesBefore:GC,deleteAuditLogsBefore:FC};async function GC(e){let t=vd(e,"date");if(t)throw Ht(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(!Bd(e.date,Bd.ISO_8601).isValid())throw Ht(new Error,bi.INVALID_DATE,Bt.BAD_REQUEST,sr.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ii.checkSchemaTableExist(e.schema,e.table);if(s)throw Ht(new Error,s,Bt.NOT_FOUND,sr.LOG_LEVELS.ERROR,s,!0);let n=await zo.deleteRecordsBefore(e);if(await Zo(e.schema,e.table),Gd.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(GC,"deleteFilesBefore");async function FC(e){let t=vd(e,"timestamp");if(t)throw Ht(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Ht(new Error,bi.INVALID_VALUE("Timestamp"),Bt.BAD_REQUEST,sr.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ii.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,Bt.NOT_FOUND,sr.LOG_LEVELS.ERROR,r,!0);let s=await zo.deleteAuditLogsBefore(e);return await Zo(e.schema,e.table),Gd.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(FC,"deleteAuditLogsBefore");async function Fd(e){let t=yC(e);if(t)throw Ht(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);let r=Ii.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,Bt.NOT_FOUND,sr.LOG_LEVELS.ERROR,r,!0);try{await Zo(e.schema,e.table);let s=await zo.deleteRecords(e);return Ii.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${BC}`),s}catch(s){if(s.message===sr.SEARCH_NOT_FOUND_MESSAGE){let n=new PC;return n.message=sr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Fd,"deleteRecord")});var Vd=h((zG,xd)=>{var e_=ke(),_e={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 qC(e){return _e.password.presence=!0,_e.username.presence=!0,_e.role.presence=!0,_e.active.presence=!0,e_.validateObject(e,_e)}a(qC,"addUserValidation");function xC(e){return _e.password.presence=!1,_e.username.presence=!0,_e.role.presence=!1,_e.active.presence=!1,e_.validateObject(e,_e)}a(xC,"alterUserValidation");function VC(e){return _e.password.presence=!1,_e.username.presence=!0,_e.role.presence=!1,_e.active.presence=!1,e_.validateObject(e,_e)}a(VC,"dropUserValidation");xd.exports={addUserValidation:qC,alterUserValidation:xC,dropUserValidation:VC}});var ce=h((tF,Yd)=>{"use strict";var{platform:eF}=require("os"),kC="nats-server.zip",t_="nats-server",YC=process.platform==="win32"?`${t_}.exe`:t_,r_="HDB",$C=/^[^\s.,*>]+$/,kd="__request__",KC=a(e=>`${e}.${kd}`,"REQUEST_SUBJECT"),WC={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},QC={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},JC={HUB:"hub.pid",LEAF:"leaf.pid"},XC={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},ZC={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:r_,deliver_subject:"__HDB__.WORKQUEUE"},zC={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:r_,deliver_subject:"HDB.SCHEMAQUEUE"},jC={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:r_,deliver_subject:"HDB.USERQUEUE"},eL={SUCCESS:"success",ERROR:"error"},tL={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},rL={TXN:"txn",MSGID:"msgid"},wr={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sL={[wr.ERR]:1,[wr.WRN]:2,[wr.INF]:3,[wr.DBG]:4,[wr.TRC]:5},nL={debug:"-D",trace:"-DVV"};Yd.exports={NATS_SERVER_ZIP:kC,NATS_SERVER_NAME:t_,NATS_BINARY_NAME:YC,PID_FILES:JC,NATS_CONFIG_FILES:QC,SERVER_SUFFIX:XC,WORK_QUEUE_CONSUMER_NAMES:ZC,SCHEMA_QUEUE_CONSUMER_NAMES:zC,USER_QUEUE_CONSUMER_NAMES:jC,NATS_TERM_CONSTRAINTS_RX:$C,REQUEST_SUFFIX:kd,UPDATE_REMOTE_RESPONSE_STATUSES:eL,CLUSTER_STATUS_STATUSES:tL,REQUEST_SUBJECT:KC,SUBJECT_PREFIXES:rL,MSG_HEADERS:WC,LOG_LEVELS:wr,LOG_LEVEL_FLAGS:nL,LOG_LEVEL_HIERARCHY:sL}});var Ur=h((nF,iS)=>{"use strict";var Jd="username is required",Xd="nothing to update, must supply active, role or password to update",Zd="password cannot be an empty string",zd="If role is specified, it cannot be empty.",jd="active must be true or false";iS.exports={addUser:EL,alterUser:dL,dropUser:hL,userInfo:TL,listUsers:Li,listUsersExternal:fL,setUsersToGlobal:Us,findAndValidateUser:AL,getClusterUser:gL,USERNAME_REQUIRED:Jd,ALTERUSER_NOTHING_TO_UPDATE:Xd,EMPTY_PASSWORD:Zd,EMPTY_ROLE:zd,ACTIVE_BOOLEAN:jd};var eS=wi(),iL=jo(),n_=ii(),tS=Vd(),rS=hi(),i_=Ms(),ye=p(),sS=require("validate.js"),b=N(),{promisify:a_}=require("util"),o_=Is(),$d=f(),Kd=ce(),aL=ss(),sF=$(),oL=oi(),_L=Zt(),{handleHDBError:st,hdb_errors:cL}=Y(),{HTTP_STATUS_CODES:nt,AUTHENTICATION_ERROR_MSGS:s_,HDB_ERROR_MSGS:yr}=cL,{UserEventMsg:__}=nr(),Wd=require("lodash"),nS={username:!0,active:!0,role:!0,password:!0},Qd=new Map,Ci=a_(rS.searchByValue),uL=a_(rS.searchByHash),lL=a_(iL.delete);async function EL(e){let t=sS.cleanAttributes(e,nS),r=tS.addUserValidation(t);if(r)throw st(new Error,r.message,nt.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Ci(s),n=n&&Array.from(n)}catch(c){throw b.error("There was an error searching for a role in add user"),b.error(c),c}if(!n||n.length<1)throw st(new Error,yr.ROLE_NAME_NOT_FOUND(t.role),nt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw st(new Error,yr.DUP_ROLES_FOUND(t.role),nt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=o_.encrypt(t.password)),t.password=n_.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await eS.insert(i)}catch(c){throw b.error("There was an error searching for a user."),b.error(c),c}b.debug(o);try{await Us()}catch(c){throw b.error("Got an error setting users to global"),b.error(c),c}if(o.skipped_hashes.length===1)throw st(new Error,yr.USER_ALREADY_EXISTS(t.username),nt.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],i_.signalUserChange(new __(process.pid)),`${_.username} successfully added`}a(EL,"addUser");async function dL(e){let t=sS.cleanAttributes(e,nS);if(ye.isEmptyOrZeroLength(t.username))throw new Error(Jd);if(ye.isEmptyOrZeroLength(t.password)&&ye.isEmptyOrZeroLength(t.role)&&ye.isEmptyOrZeroLength(t.active))throw new Error(Xd);if(!ye.isEmpty(t.password)&&ye.isEmptyOrZeroLength(t.password.trim()))throw new Error(Zd);if(!ye.isEmpty(t.active)&&!ye.isBoolean(t.active))throw new Error(jd);let r=SL(t.username);if(!ye.isEmpty(t.password)&&!ye.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=o_.encrypt(t.password)),t.password=n_.hash(t.password)),t.role==="")throw new Error(zd);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 Ci(i)||[])}catch(_){throw b.error("Got an error searching for a role."),b.error(_),_}if(!o||o.length===0){let _=yr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw b.error(_),st(new Error,_,nt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=yr.ALTER_USER_DUP_ROLES(t.role);throw b.error(_),st(new Error,_,nt.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await eS.update(s)}catch(i){throw b.error("Error during update."),b.error(i),i}try{await Us()}catch(i){throw b.error("Got an error setting users to global"),b.error(i),i}return i_.signalUserChange(new __(process.pid)),n}a(dL,"alterUser");function SL(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(SL,"isClusterUser");async function hL(e){try{let t=tS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ye.isEmpty(global.hdb_users.get(e.username)))throw st(new Error,yr.USER_NOT_EXIST(e.username),nt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await lL(r)}catch(n){throw b.error("Got an error deleting a user."),b.error(n),n}b.debug(s);try{await Us()}catch(n){throw b.error("Got an error setting users to global."),b.error(n),n}return i_.signalUserChange(new __(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(hL,"dropUser");async function TL(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await uL(r)}catch(n){throw b.error("Got an error searching for a role."),b.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw b.error(r),r}return t}a(TL,"userInfo");async function fL(){let e;try{e=await Li()}catch(t){throw b.error("Got an error listing users."),b.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(fL,"listUsersExternal");async function Li(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ci(e)}catch(o){throw b.error("Got an error searching for roles."),b.error(o),o}let r={};for(let o of t)r[o.id]=Wd.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Ci(s)}catch(o){throw b.error("Got an error searching for users."),b.error(o),o}let i=new Map;for(let o of n)o=Wd.cloneDeep(o),o.role=r[o.role],mL(o.role),i.set(o.username,o);return(await oL.getLicense()).enterprise?i:RL(Array.from(i.values()))}catch(e){throw b.error("got an error listing users"),b.error(e),ye.errorizeMessage(e)}return null}a(Li,"listUsers");function mL(e){try{if(!e){b.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(_L)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){b.error("Got an error trying to set system permissions."),b.error(t)}}a(mL,"appendSystemTablesToRole");function RL(e){try{if(b.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1)?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(n.username,n)):r.set(n.username,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(b.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return b.error("error filtering users."),b.error(t),new Map}}a(RL,"nonEnterpriseFilter");async function Us(){try{let e=await Li();global.hdb_users=e}catch(e){throw b.error(e),e}}a(Us,"setUsersToGlobal");async function AL(e,t,r=!0){global.hdb_users||await Us();let s=global.hdb_users.get(e);if(!s)throw st(new Error,s_.GENERIC_AUTH_FAIL,nt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw st(new Error,s_.USER_INACTIVE,nt.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Qd.get(t)===s.password)return n;if(n_.validate(s.password,t))Qd.set(t,s.password);else throw st(new Error,s_.GENERIC_AUTH_FAIL,nt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(AL,"findAndValidateUser");async function gL(){let e=await Li(),t=aL.getConfigFromFile($d.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ye.isEmpty(r)&&r?.role?.role===$d.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=o_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Kd.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Kd.SERVER_SUFFIX.ADMIN,r}a(gL,"getClusterUser")});var yi=h((aF,cS)=>{"use strict";var ir=N(),Ue=f(),NL=OE(),aS=ys(),pL=ws(),OL=Ur(),{validateEvent:_S}=nr(),Ds=Ut(),IL=require("process"),bL={[Ue.ITC_EVENT_TYPES.SCHEMA]:CL,[Ue.ITC_EVENT_TYPES.USER]:wL};async function CL(e){let t=_S(e);if(t){ir.error(t);return}ir.trace("ITC schemaHandler received schema event:",e),await NL(e.message),await LL(e.message)}a(CL,"schemaHandler");async function LL(e){try{if(Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await pL.describeTable({schema:e.schema,table:e.table});break;default:aS.setSchemaDataToGlobal(oS);break}else aS.setSchemaDataToGlobal(oS)}catch(t){ir.error(t)}}a(LL,"syncSchemaMetadata");function oS(e){e&&ir.error(e)}a(oS,"handleErrorCallback");async function wL(e){try{Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=_S(e);if(t){ir.error(t);return}ir.trace(`ITC userHandler ${Ue.HDB_ITC_CLIENT_PREFIX}${IL.pid} received user event:`,e),await OL.setUsersToGlobal()}catch(t){ir.error(t)}}a(wL,"userHandler");cS.exports=bL});var nr=h((lF,lS)=>{"use strict";var _F=N(),c_=p(),yL=f(),{ITC_ERRORS:Ps}=He(),{parentPort:cF,threadId:UL,isMainThread:ML,workerData:uF}=require("worker_threads"),{onMessageFromWorkers:DL,broadcast:PL}=ui();lS.exports={sendItcEvent:HL,validateEvent:uS,SchemaEventMsg:BL,UserEventMsg:vL};var Ui;DL(e=>{Ui=Ui||yi(),uS(e),Ui[e.type]&&Ui[e.type](e)});function HL(e){!ML&&e.message&&(e.message.originator=UL),PL(e)}a(HL,"sendItcEvent");function uS(e){if(typeof e!="object")return Ps.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||c_.isEmpty(e.type))return Ps.MISSING_TYPE;if(!e.hasOwnProperty("message")||c_.isEmpty(e.message))return Ps.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||c_.isEmpty(e.message.originator))return Ps.MISSING_ORIGIN;if(yL.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ps.INVALID_EVENT(e.type)}a(uS,"validateEvent");function BL(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(BL,"SchemaEventMsg");function vL(e){this.originator=e}a(vL,"UserEventMsg")});var Ms=h((SF,hS)=>{"use strict";var ES=f(),dF=p(),Mi=N(),dS=zl(),Mr,{sendItcEvent:SS}=nr();function GL(e){try{Mi.trace("signalSchemaChange called with message:",e),Mr=Mr||yi();let t=new dS(ES.ITC_EVENT_TYPES.SCHEMA,e);Mr.schema(t),SS(t)}catch(t){Mi.error(t)}}a(GL,"signalSchemaChange");function FL(e){try{Mi.trace("signalUserChange called with message:",e),Mr=Mr||yi();let t=new dS(ES.ITC_EVENT_TYPES.USER,e);Mr.user(t),SS(t)}catch(t){Mi.error(t)}}a(FL,"signalUserChange");hS.exports={signalSchemaChange:GL,signalUserChange:FL}});var Di=h((TF,fS)=>{"use strict";var TS=p(),qL=f(),xL=N(),VL=zn(),kL=Zn(),YL=Ms(),{SchemaEventMsg:$L}=nr(),KL="already exists in";fS.exports=WL;async function WL(e,t,r){if(TS.isEmptyOrZeroLength(r))return r;let s=[];TS.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await QL(e,t.schema,t.name,i)})),n}a(WL,"lmdbCheckForNewAttributes");async function QL(e,t,r,s){let n=new kL(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await JL(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(KL))xL.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(QL,"createNewAttribute");async function JL(e){let t;return t=await VL(e),YL.signalSchemaChange(new $L(process.pid,qL.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(JL,"createAttribute")});var Dr=h((mF,mS)=>{"use strict";var Pi=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(Pi,"LMDBTransactionObject");mS.exports=Pi});var AS=h((AF,RS)=>{"use strict";var XL=Dr(),ZL=f().OPERATIONS_ENUM,Hi=class extends XL{constructor(t,r,s,n,i=void 0){super(ZL.INSERT,r,s,n,i),this.records=t}};a(Hi,"LMDBInsertTransactionObject");RS.exports=Hi});var NS=h((NF,gS)=>{"use strict";var zL=Dr(),jL=f().OPERATIONS_ENUM,Bi=class extends zL{constructor(t,r,s,n,i,o=void 0){super(jL.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Bi,"LMDBUpdateTransactionObject");gS.exports=Bi});var OS=h((OF,pS)=>{"use strict";var ew=Dr(),tw=f().OPERATIONS_ENUM,vi=class extends ew{constructor(t,r,s,n,i,o=void 0){super(tw.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(vi,"LMDBUpsertTransactionObject");pS.exports=vi});var bS=h((bF,IS)=>{"use strict";var rw=Dr(),sw=f().OPERATIONS_ENUM,Gi=class extends rw{constructor(t,r,s,n,i=void 0){super(sw.DELETE,s,n,t,i),this.original_records=r}};a(Gi,"LMDBDeleteTransactionObject");IS.exports=Gi});var Hs=h((wF,yS)=>{"use strict";var LF=require("path"),CS=q(),nw=AS(),iw=NS(),aw=OS(),ow=bS(),Pr=ne(),LS=p(),{CONFIG_PARAMS:_w}=f(),wS=$();wS.initSync();var Fi=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:cw}=K();yS.exports=uw;async function uw(e,t){if(wS.get(_w.LOGGING_AUDITLOG)===!1)return;let r=cw(e.schema,e.table),s=await CS.openEnvironment(r,e.table,!0),n=lw(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){CS.initializeDBIs(s,Pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Pr.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),LS.isEmpty(n.user_name)||s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(uw,"writeTransaction");function lw(e,t){let r=LS.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Fi.INSERT)return new nw(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Fi.UPDATE)return new iw(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Fi.UPSERT)return new aw(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Fi.DELETE)return new ow(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(lw,"createTransactionObject")});var u_=h((MF,US)=>{"use strict";var Ew=jn(),UF=ti(),Bs=f(),dw=si(),Sw=pr().insertRecords,hw=q(),Tw=N(),fw=Di(),{getSchemaPath:mw}=K(),Rw=Hs();US.exports=Aw;async function Aw(e){try{let{schema_table:t,attributes:r}=Ew(e);dw(e,r,t.hash_attribute),e.schema!==Bs.SYSTEM_SCHEMA_NAME&&(r.includes(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await fw(e.hdb_auth_header,t,r),n=mw(e.schema,e.table),i=await hw.openEnvironment(n,e.table),o=await Sw(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Rw(e,o)}catch(_){Tw.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Aw,"lmdbCreateRecords")});var PS=h((PF,DS)=>{"use strict";var MS=f(),gw=u_(),Nw=ti(),pw=require("fs-extra"),{getSchemaPath:Ow}=K();DS.exports=Iw;async function Iw(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Nw(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await gw(r),await pw.mkdirp(Ow(e.schema))}a(Iw,"lmdbCreateSchema")});var BS=h((BF,HS)=>{"use strict";var qi=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(qi,"DeleteRecordsResponseObject");HS.exports=qi});var d_=h((xF,FS)=>{"use strict";var vS=q(),l_=Wt(),E_=He().LMDB_ERRORS_ENUM,bw=ne(),GS=N(),GF=p(),Cw=require("lmdb"),Lw=BS(),ww=f(),{OVERFLOW_MARKER:FF,MAX_SEARCH_KEY_LENGTH:qF}=bw,yw=ww.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Uw(e,t,r,s){if(l_.validateEnv(e),t===void 0)throw new Error(E_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(E_.IDS_REQUIRED):new Error(E_.IDS_MUST_BE_ITERABLE);try{let n=vS.listDBIs(e);vS.initializeDBIs(e,t,n);let i=new Lw,o,_=[],c=[];for(let S=0,d=r.length;S<d;S++)try{o=r[S];let m=e.dbis[t].get(o);if(!m||s&&m[yw]>s){i.skipped.push(o);continue}let g=e.dbis[t].ifVersion(o,Cw.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let w=0;w<n.length;w++){let W=n[w];if(!m.hasOwnProperty(W)||W===t)continue;let x=e.dbis[W],G=m[W];if(G!=null)try{let Pe=l_.getIndexedValues(G);if(Pe)for(let Yt=0,hr=Pe.length;Yt<hr;Yt++)x.remove(Pe[Yt],o)}catch{GS.warn(`cannot delete from attribute: ${W}, ${G}:${o}`)}}});_.push(g),c.push(o),i.original_records.push(m)}catch(m){GS.warn(m),i.skipped.push(o)}let u=[],l=await Promise.all(_);for(let S=0,d=l.length;S<d;S++)l[S]===!0?i.deleted.push(c[S]):(i.skipped.push(c[S]),u.push(S));let E=0;for(let S=0;S<u.length;S++){let d=u[S];i.original_records.splice(d-E,1),E++}return i.txn_time=l_.getNextMonotonicTime(),i}catch(n){throw n}}a(Uw,"deleteRecords");FS.exports={deleteRecords:Uw}});var vs=h((kF,xS)=>{"use strict";var Hr=p(),Mw=d_(),Dw=q(),{getSchemaPath:Pw}=K(),Hw=Hs(),Bw=N();xS.exports=vw;async function vw(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Hr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Hr.isEmptyOrZeroLength(e.hash_values)&&!Hr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Hr.isEmpty(c)||e.hash_values.push(c)}}if(Hr.isEmptyOrZeroLength(e.hash_values))return qS([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Hr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Pw(e.schema,e.table),i=await Dw.openEnvironment(n,e.table),o=await Mw.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Hw(e,o)}catch(_){Bw.error(`unable to write transaction due to ${_.message}`)}return qS(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(vw,"lmdbDeleteRecords");function qS(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(qS,"createDeleteResponse")});var Gs=h((KF,$S)=>{var VS=require("lodash"),kS=ke(),B=require("joi"),Gw=p(),{hdb_schema_table:Je,checkValidTable:YS}=Kt(),{handleHDBError:Fw,hdb_errors:qw}=Y(),{HTTP_STATUS_CODES:xw}=qw,$F=B.object({schema:Je,table:Je,hash_values:B.array().min(0).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(Je).required()}),Vw=B.object({schema:Je,table:Je,search_attribute:Je,search_value:B.any().required(),get_attributes:B.array().min(1).items(Je).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),kw=B.object({schema:Je,table:Je,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(Je).required(),conditions:B.array().min(1).items(B.object({search_attribute:Je,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});$S.exports=function(e,t){let r=null;switch(t){case"value":r=kS.validateBySchema(e,Vw);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(YS("schema",e.schema)),i(YS("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=kS.validateBySchema(e,kw);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Gw.checkGlobalSchemaTable(e.schema,e.table);if(n)return Fw(new Error,n,xw.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=VS.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!VS.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var S_=h((QF,KS)=>{"use strict";var Yw=q(),$w=Gs(),{getSchemaPath:Kw}=K();KS.exports=Ww;function Ww(e){let t=$w(e,"hashes");if(t)throw t;let r=Kw(e.schema,e.table);return Yw.openEnvironment(r,e.table)}a(Ww,"initialize")});var h_=h((XF,WS)=>{"use strict";var Qw=rr(),Jw=S_();WS.exports=Xw;async function Xw(e){let t=await Jw(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Qw.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Xw,"lmdbGetDataByHash")});var Vi=h((zF,QS)=>{"use strict";var xi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(xi,"SearchByHashObject");QS.exports=xi});var XS=h((tq,JS)=>{"use strict";var eq=Vi(),Zw=rr(),zw=S_();JS.exports=jw;async function jw(e){let t=await zw(e),r=global.hdb_schema[e.schema][e.table];return Zw.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(jw,"lmdbSearchByHash")});var Tt=h((sq,ZS)=>{"use strict";var ki=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};a(ki,"SearchObject");ZS.exports=ki});var Yi=h((iq,sh)=>{"use strict";var ue=rr(),ey=q(),ty=p(),A=ne(),ar=f(),ry=Zt(),zS=He().LMDB_ERRORS_ENUM,{compareKeys:Br}=require("ordered-binary"),{getSchemaPath:sy}=K(),ft=ar.SEARCH_WILDCARDS;async function ny(e,t,r){let s;e.schema===ar.SYSTEM_SCHEMA_NAME?s=ry[e.table]:s=global.hdb_schema[e.schema][e.table];let n=rh(e,s.hash_attribute,r,t);return eh(e,n,s.hash_attribute,r)}a(ny,"prepSearch");async function eh(e,t,r,s){let n=sy(e.schema,e.table),i=await ey.openEnvironment(n,e.table),o=th(i,e,t,r),_=o.transaction||i;if([A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,A.SEARCH_TYPES.SEARCH_ALL,A.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(ay(e,r)===!1){let l=e.search_attribute;if(l===r)return s?jS(o,()=>!0):o.map(S=>({[r]:S.key}));let E=a(S=>({[r]:S.value,[l]:S.key}),"toObject");return s?jS(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ue.batchSearchByHashToMap(_,r,e.get_attributes,u):ue.batchSearchByHash(_,r,e.get_attributes,u)}a(eh,"executeSearch");function th(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case A.SEARCH_TYPES.EQUALS:n=ue.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.CONTAINS:n=ue.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.ENDS_WITH:case A.SEARCH_TYPES._ENDS_WITH:n=ue.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.STARTS_WITH:case A.SEARCH_TYPES._STARTS_WITH:n=ue.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ue.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ue.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case A.SEARCH_TYPES.SEARCH_ALL:return ue.searchAll(e,s,t.get_attributes,o,_,c);case A.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ue.searchAllToMap(e,s,t.get_attributes,o,_,c);case A.SEARCH_TYPES.BETWEEN:n=ue.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case A.SEARCH_TYPES.GREATER_THAN:case A.SEARCH_TYPES._GREATER_THAN:n=ue.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.GREATER_THAN_EQUAL:case A.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ue.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.LESS_THAN:case A.SEARCH_TYPES._LESS_THAN:n=ue.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.LESS_THAN_EQUAL:case A.SEARCH_TYPES._LESS_THAN_EQUAL:n=ue.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(th,"searchByType");function iy(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case A.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case A.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case A.SEARCH_TYPES.ENDS_WITH:case A.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case A.SEARCH_TYPES.STARTS_WITH:case A.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case A.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Br(i,s[0])>=0&&Br(i,s[1])<=0};case A.SEARCH_TYPES.GREATER_THAN:case A.SEARCH_TYPES._GREATER_THAN:return n=>Br(n[r],s)>0;case A.SEARCH_TYPES.GREATER_THAN_EQUAL:case A.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Br(n[r],s)>=0;case A.SEARCH_TYPES.LESS_THAN:case A.SEARCH_TYPES._LESS_THAN:return n=>Br(n[r],s)<0;case A.SEARCH_TYPES.LESS_THAN_EQUAL:case A.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Br(n[r],s)<=0;default:return Object.create(null)}}a(iy,"filterByType");function jS(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(jS,"createMapFromIterable");function ay(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(ay,"checkToFetchMore");function rh(e,t,r,s){if(ty.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),ft.indexOf(n)>-1)return r===!0?A.SEARCH_TYPES.SEARCH_ALL_TO_MAP:A.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ft[0])<0&&n.indexOf(ft[1])<0)return _===!0?r===!0?A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:A.SEARCH_TYPES.EQUALS;if(ft.indexOf(i)>=0&&ft.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),A.SEARCH_TYPES.CONTAINS;if(ft.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),A.SEARCH_TYPES.ENDS_WITH;if(ft.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),A.SEARCH_TYPES.STARTS_WITH;if(n.includes(ft[0])||n.includes(ft[1]))return A.SEARCH_TYPES.EQUALS;throw new Error(zS.UNKNOWN_SEARCH_TYPE)}else switch(s){case ar.VALUE_SEARCH_COMPARATORS.BETWEEN:return A.SEARCH_TYPES.BETWEEN;case ar.VALUE_SEARCH_COMPARATORS.GREATER:return A.SEARCH_TYPES.GREATER_THAN;case ar.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return A.SEARCH_TYPES.GREATER_THAN_EQUAL;case ar.VALUE_SEARCH_COMPARATORS.LESS:return A.SEARCH_TYPES.LESS_THAN;case ar.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return A.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(zS.UNKNOWN_SEARCH_TYPE)}}a(rh,"createSearchTypeFromSearchObject");sh.exports={executeSearch:eh,createSearchTypeFromSearchObject:rh,prepSearch:ny,searchByType:th,filterByType:iy}});var ih=h((_q,nh)=>{"use strict";var oq=Tt(),oy=Gs(),_y=p(),cy=f(),uy=Yi();nh.exports=ly;function ly(e,t){if(!_y.isEmpty(t)&&cy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=oy(e,"value");if(s)throw s;let n=!0;return uy.prepSearch(e,t,n)}a(ly,"lmdbGetDataByValue")});var vr=h((lq,ah)=>{"use strict";var uq=Tt(),Ey=Gs(),dy=p(),Sy=f(),hy=Yi();ah.exports=Ty;async function Ty(e,t){if(!dy.isEmpty(t)&&Sy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Ey(e,"value");if(s)throw s;return hy.prepSearch(e,t,!1)}a(Ty,"lmdbSearchByValue")});var _h=h((Sq,oh)=>{"use strict";var dq=ne(),$i=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a($i,"SearchByConditionsObject");var Ki=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Ki,"SearchCondition");var Wi=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Wi,"SortAttribute");oh.exports={SearchByConditionsObject:$i,SearchCondition:Ki,SortAttribute:Wi}});var dh=h((fq,Eh)=>{"use strict";var Tq=_h().SearchByConditionsObject,fy=Tt(),my=Gs(),T_=rr(),Qi=ne(),lh=Yi(),Ry=Qo(),Ay=require("lodash"),{getSchemaPath:gy}=K(),ch=q(),{handleHDBError:Ny,hdb_errors:py}=Y(),{HTTP_STATUS_CODES:Oy}=py,Iy=1e8;Eh.exports=by;async function by(e){let t=my(e,"conditions");if(t)throw Ny(t,t.message,Oy.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=gy(e.schema,e.table),s=await ch.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)ch.openDBI(s,u.search_attribute);let i=Ay.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Qi.SEARCH_TYPES.EQUALS?u.estimated_count=T_.count(s,u.search_attribute,u.search_value):l===Qi.SEARCH_TYPES.CONTAINS||l===Qi.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Iy}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await uh(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(lh.filterByType),E=l.length,S=T_.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),E>0&&(c=c.filter(d=>{for(let m=0;m<E;m++)if(!l[m](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>Ry.parseRow(d,S))}else{for(let E=1;E<i.length;E++){let S=i[E],d=await uh(o,e,S,n.hash_attribute);_=_.concat(d)}let u=new Set,l=e.offset||0;_=_.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),c=T_.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(by,"lmdbSearchByConditions");async function uh(e,t,r,s){let n=new fy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Qi.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,lh.searchByType(e,n,i,s).map(o=>o.value)}a(uh,"executeConditionSearch")});var Fs=h((Rq,Sh)=>{"use strict";var Cy=f().OPERATIONS_ENUM,Ji=class{constructor(t,r,s,n=void 0){this.operation=Cy.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ji,"DeleteObject");Sh.exports=Ji});var f_=h((gq,Nh)=>{"use strict";var mh=Tt(),Rh=Fs(),Ah=vr(),gh=vs(),Te=f(),hh=p(),Th=q(),{getTransactionAuditStorePath:Ly,getSchemaPath:wy}=K(),fh=N();Nh.exports=yy;async function yy(e){try{if(hh.isEmpty(global.hdb_schema[e.schema])||hh.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Uy(e),await My(e);let t=wy(e.schema,e.table);try{await Th.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Ly(e.schema,e.table);await Th.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(yy,"lmdbDropTable");async function Uy(e){let t=new mh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Ah(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Rh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await gh(n)}a(Uy,"deleteAttributesFromSystem");async function My(e){let t=new mh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Ah(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Rh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await gh(n)}catch(i){throw i}}a(My,"dropTableFromSystem")});var Oh=h((pq,ph)=>{"use strict";var Dy=require("fs-extra"),Py=Tt(),Hy=Vi(),By=Fs(),vy=f_(),Gy=vs(),Fy=h_(),qy=vr(),mt=f(),{getSchemaPath:xy}=K(),{handleHDBError:Vy,hdb_errors:ky}=Y(),{HDB_ERROR_MSGS:Yy,HTTP_STATUS_CODES:$y}=ky;ph.exports=Ky;async function Ky(e){let t;try{t=await Wy(e.schema);let r=new Py(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await qy(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await vy(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new By(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Gy(n);let i=xy(t);await Dy.remove(i)}catch(r){throw r}}a(Ky,"lmdbDropSchema");async function Wy(e){let t=new Hy(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Fy(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Vy(new Error,Yy.SCHEMA_NOT_FOUND(e),$y.NOT_FOUND,void 0,void 0,!0);return s}a(Wy,"validateDropSchema")});var m_=h((Iq,Ih)=>{"use strict";var Xi=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Xi,"CreateTableObject");Ih.exports=Xi});var Ch=h((Lq,bh)=>{"use strict";var Qy=require("fs-extra"),Zi=q(),{getTransactionAuditStorePath:Jy}=K(),R_=ne(),Cq=m_();bh.exports=Xy;async function Xy(e){let t;try{let r=Jy(e.schema,e.table);await Qy.mkdirp(r),t=await Zi.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{Zi.createDBI(t,R_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Zi.createDBI(t,R_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Zi.createDBI(t,R_.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(Xy,"createTransactionsAuditEnvironment")});var Uh=h((yq,yh)=>{"use strict";var A_=f(),Lh=q(),Zy=pr(),{getSystemSchemaPath:zy,getSchemaPath:jy}=K(),eU=Zt(),tU=zn(),g_=Zn(),rU=N(),sU=Ch(),p_=eU.hdb_table,wh=[];for(let e=0;e<p_.attributes.length;e++)wh.push(p_.attributes[e].attribute);yh.exports=nU;async function nU(e,t){let r=jy(t.schema,t.table),s=new g_(t.schema,t.table,A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new g_(t.schema,t.table,A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new g_(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Lh.createEnvironment(r,t.table),e!==void 0){let o=await Lh.openEnvironment(zy(),A_.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Zy.insertRecords(o,p_.hash_attribute,wh,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await N_(s),await N_(n),await N_(i)}await sU(t)}catch(o){throw o}}a(nU,"lmdbCreateTable");async function N_(e){try{await tU(e)}catch(t){rU.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(N_,"createAttribute")});var Dh=h((Mq,Mh)=>{"use strict";var iU=jn(),aU=si(),oU=Di(),qs=f(),_U=pr().updateRecords,cU=q(),{getSchemaPath:uU}=K(),lU=Hs(),EU=N();Mh.exports=dU;async function dU(e){try{let{schema_table:t,attributes:r}=iU(e);aU(e,r,t.hash_attribute),e.schema!==qs.SYSTEM_SCHEMA_NAME&&(r.includes(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await oU(e.hdb_auth_header,t,r),n=uU(e.schema,e.table),i=await cU.openEnvironment(n,e.table),o=await _U(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await lU(e,o)}catch(_){EU.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(dU,"lmdbUpdateRecords")});var Hh=h((Pq,Ph)=>{"use strict";var SU=f().OPERATIONS_ENUM,zi=class{constructor(t,r,s,n=void 0){this.operation=SU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(zi,"UpsertObject");Ph.exports=zi});var vh=h((vq,Bh)=>{"use strict";var Bq=Hh(),hU=jn(),TU=si(),fU=Di(),xs=f(),mU=pr().upsertRecords,RU=q(),{getSchemaPath:AU}=K(),gU=Hs(),NU=N(),{handleHDBError:pU,hdb_errors:OU}=Y();Bh.exports=IU;async function IU(e){let t;try{t=hU(e)}catch(c){throw pU(c,c.message,OU.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;TU(e,s,r.hash_attribute),e.schema!==xs.SYSTEM_SCHEMA_NAME&&(s.includes(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await fU(e.hdb_auth_header,r,s),i=AU(e.schema,e.table),o=await RU.openEnvironment(i,e.table),_=await mU(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await gU(e,_)}catch(c){NU.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(IU,"lmdbUpsertRecords")});var kh=h((Fq,Vh)=>{"use strict";var bU=Tt(),Gh=p(),Fh=N(),CU=vr(),qh=f(),LU=d_().deleteRecords,wU=q(),{getSchemaPath:yU}=K(),{promisify:UU}=require("util"),MU=UU(setTimeout),xh=1e4,DU=10;Vh.exports=PU;async function PU(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(Gh.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new bU(e.schema,e.table,qh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await CU(n,qh.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw Fh.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return Gh.isEmptyOrZeroLength(s)?(Fh.trace("No records found to delete"),{message:"No records found to delete"}):await HU(e,s,t)}a(PU,"lmdbDeleteRecordsBefore");async function HU(e,t,r){let s=yU(e.schema,e.table),n=await wU.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=xh){let c=t.slice(o,o+xh),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await LU(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await MU(DU)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(HU,"chunkDeletes")});var $h=h((xq,Yh)=>{"use strict";var ji=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ji,"DeleteBeforeObject");Yh.exports=ji});var Wh=h((kq,Kh)=>{"use strict";var ea=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ea,"DeleteAuditLogsBeforeResults");Kh.exports=ea});var Xh=h((Kq,Jh)=>{"use strict";var O_=q(),{getTransactionAuditStorePath:BU}=K(),$q=$h(),Vs=ne(),vU=p(),Qh=Wh(),GU=require("util").promisify,FU=GU(setTimeout),qU=1e4,xU=100;Jh.exports=VU;async function VU(e){let t=BU(e.schema,e.table),r=await O_.openEnvironment(t,e.table,!0),s=O_.listDBIs(r);O_.initializeDBIs(r,Vs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Qh;do n=await kU(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await FU(xU);while(n.transactions_deleted>0);return i}a(VU,"deleteAuditLogsBefore");async function kU(e,t){let r=new Qh;try{let s=e.dbis[Vs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[Vs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];vU.isEmpty(_)||(n=e.dbis[Vs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[Vs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>qU)break}return await n,r}catch(s){throw s}}a(kU,"deleteTransactions")});var zh=h((Qq,Zh)=>{"use strict";var ta=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ta,"DropAttributeObject");Zh.exports=ta});var eT=h((Zq,jh)=>{"use strict";var YU=Tt(),$U=Fs(),Xq=zh(),it=f(),KU=p(),I_=q(),WU=Zt(),QU=vr(),JU=vs(),{getSchemaPath:XU}=K();jh.exports=ZU;async function ZU(e,t=!0){let r;e.schema===it.SYSTEM_SCHEMA_NAME?r=WU[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await jU(e),n=XU(e.schema,e.table),i=await I_.openEnvironment(n,e.table);return t===!0&&await zU(e,i,r.hash_attribute),I_.dropDBI(i,e.attribute),s}a(ZU,"lmdbDropAttribute");async function zU(e,t,r){let s=I_.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(o,u,c)}await n}a(zU,"removeAttributeFromAllObjects");async function jU(e){let t=new YU(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await QU(t)).filter(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(KU.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new $U(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return JU(i)}a(jU,"dropAttributeFromSystem")});var aT=h((e0,iT)=>{"use strict";var b_=q(),Gr=ne(),jq=Wt(),C_=f(),tT=p(),{getTransactionAuditStorePath:eM}=K(),tM=rr(),ra=Dr(),rM=N();iT.exports=sM;async function sM(e){let t=eM(e.schema,e.table),r=await b_.openEnvironment(t,e.table,!0),s=b_.listDBIs(r);b_.initializeDBIs(r,Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case C_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rT(r,e.search_values);case C_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,iM(r,e.search_values,n);case C_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return nM(r,e.search_values);default:return rT(r)}}a(sM,"readAuditLog");function rT(e,t=[0,Date.now()]){tT.isEmpty(t[0])&&(t[0]=0),tT.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new ra,n))}a(rT,"searchTransactionsByTimestamp");function nM(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Gr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,nT(e,i))}return Object.fromEntries(r)}a(nM,"searchTransactionsByUsername");function iM(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=tM.equals(e,Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Gr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let S=Number(E);s.has(S)?s.get(S).push(u.toString()):s.set(S,[u.toString()])}}let n=Array.from(s.keys()),i=nT(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);sT(c,"records",r,l,o),sT(c,"original_records",r,l,o)}return Object.fromEntries(o)}a(iM,"searchTransactionsByHashValues");function sT(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new ra(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new ra(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(sT,"loopRecords");function nT(e,t){let r=[];try{let s=e.dbis[Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new ra,i);r.push(o)}}catch(i){rM.warn(i)}return r}catch(s){throw s}}a(nT,"batchSearchTransactions")});var _T=h((r0,oT)=>{"use strict";var{getSchemaPath:aM}=K(),oM=q();oT.exports={writeTransaction:_M};async function _M(e,t,r){let s=aM(e,t);return(await oM.openEnvironment(s,t)).transaction(r)}a(_M,"writeTransaction")});var ET=h((n0,lT)=>{"use strict";var{getSchemaPath:cT}=K(),uT=q();lT.exports={flush:cM,resetReadTxn:uM};async function cM(e,t){return(await uT.openEnvironment(cT(e,t),t.toString())).flushed}a(cM,"flush");async function uM(e,t){try{(await uT.openEnvironment(cT(e,t),t.toString())).resetReadTxn()}catch{}}a(uM,"resetReadTxn")});var hT=h((a0,ST)=>{"use strict";var lM=N(),{handleHDBError:EM}=Y(),dM=so(),SM=zn(),hM=u_(),TM=PS(),fM=vs(),mM=h_(),RM=XS(),AM=ih(),gM=vr(),NM=dh(),pM=Oh(),OM=Uh(),IM=Dh(),bM=vh(),CM=kh(),LM=Xh(),wM=f_(),yM=eT(),UM=aT(),MM=_T(),dT=ET(),sa=class extends dM{async searchByConditions(t){return NM(t)}async getDataByHash(t){return await mM(t)}async searchByHash(t){return await RM(t)}async getDataByValue(t,r){return await AM(t,r)}async searchByValue(t){return await gM(t)}async createSchema(t){return await TM(t)}async dropSchema(t){return await pM(t)}async createTable(t,r){return await OM(t,r)}async dropTable(t){return await wM(t)}async createAttribute(t){return await SM(t)}async createRecords(t){return await hM(t)}async updateRecords(t){return await IM(t)}async upsertRecords(t){try{return await bM(t)}catch(r){throw EM(r,null,null,lM.ERR,r)}}async deleteRecords(t){return await fM(t)}async deleteRecordsBefore(t){return await CM(t)}async dropAttribute(t){return await yM(t)}async deleteAuditLogsBefore(t){return await LM(t)}async readAuditLog(t){return await UM(t)}writeTransaction(t,r,s){return MM.writeTransaction(t,r,s)}flush(t,r){return dT.flush(t,r)}resetReadTxn(t,r){return dT.resetReadTxn(t,r)}};a(sa,"LMDBBridge");ST.exports=sa});var Ut=h((_0,fT)=>{"use strict";var DM=hT(),PM=so(),HM=$();HM.initSync();var TT;function BM(){return TT instanceof PM?TT:new DM}a(BM,"getBridge");fT.exports=BM()});var wi=h((u0,AT)=>{"use strict";var ia=ro(),qe=p(),vM=require("util"),aa=Ut(),GM=ys(),L_=N(),{handleHDBError:vt,hdb_errors:FM}=Y(),{HTTP_STATUS_CODES:or}=FM,qM=vM.promisify(GM.getTableSchema),xM="updated",mT="inserted",RT="upserted";AT.exports={insert:kM,update:YM,upsert:$M,validation:VM,flush:KM};async function VM(e){if(qe.isEmpty(e))throw new Error("invalid update parameters defined.");if(qe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(qe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await qM(e.schema,e.table),r=ia(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&qe.isEmptyOrZeroLength(_[s]))throw L_.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!qe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw L_.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!qe.isEmpty(_[s])&&_[s]!==""&&n.has(qe.autoCast(_[s]))&&(_.skip=!0),n.add(qe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(VM,"validation");async function kM(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ia(e);if(t)throw vt(new Error,t.message,or.BAD_REQUEST);let r=qe.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,or.BAD_REQUEST);let s=await aa.createRecords(e);return na(mT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(kM,"insertData");async function YM(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ia(e);if(t)throw vt(new Error,t.message,or.BAD_REQUEST);let r=qe.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,or.BAD_REQUEST);let s=await aa.updateRecords(e);return qe.isEmpty(s.existing_rows)?na(xM,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):na(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(YM,"updateData");async function $M(e){if(e.operation!=="upsert")throw vt(new Error,"invalid operation, must be upsert",or.INTERNAL_SERVER_ERROR);let t=ia(e);if(t)throw vt(new Error,t.message,or.BAD_REQUEST);let r=qe.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,or.BAD_REQUEST);try{let s=await aa.upsertRecords(e);return na(RT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw vt(s,null,null,L_.ERR,n)}}a($M,"upsertData");function na(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===mT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===RT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(na,"returnObject");function KM(e){return aa.flush(e.schema,e.table)}a(KM,"flush")});var NT=h((E0,gT)=>{var WM=ke(),QM={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};gT.exports=function(e){return WM.validateObject(e,QM)}});var OT=h((d0,pT)=>{"use strict";var JM=f().OPERATIONS_ENUM,oa=class{constructor(t,r,s,n=void 0){this.operation=JM.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(oa,"UpdateObject");pT.exports=oa});var bT=h((h0,IT)=>{"use strict";var XM={OPERATION:"operation",REFRESH:"refresh"},_a=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(_a,"JWTTokens");var ca=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(ca,"JWTRSAKeys");IT.exports={JWTTokens:_a,TOKEN_TYPE_ENUM:XM,JWTRSAKeys:ca}});var UT=h((f0,yT)=>{"use strict";var Ys=require("jsonwebtoken"),w_=require("fs-extra"),y_=p(),xe=f(),{handleHDBError:fe,hdb_errors:ZM}=Y(),{HTTP_STATUS_CODES:me,AUTHENTICATION_ERROR_MSGS:Re}=ZM,ks=N(),CT=ii(),D_=Ur(),zM=wi().update,jM=OT(),eD=Ms(),{UserEventMsg:tD}=nr(),Gt=$();Gt.initSync();var U_=require("path"),{JWTTokens:rD,JWTRSAKeys:sD,TOKEN_TYPE_ENUM:ua}=bT(),nD=Gt.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Gt.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",iD=Gt.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Gt.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",la="RS256",M_;yT.exports={createTokens:aD,validateOperationToken:_D,refreshOperationToken:oD,validateRefreshToken:wT};async function aD(e){if(y_.isEmpty(e)||typeof e!="object")throw fe(new Error,Re.INVALID_AUTH_OBJECT,me.BAD_REQUEST,void 0,void 0,!0);if(y_.isEmpty(e.username))throw fe(new Error,Re.USERNAME_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);if(y_.isEmpty(e.password))throw fe(new Error,Re.PASSWORD_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await D_.findAndValidateUser(e.username,e.password),!t)throw fe(new Error,Re.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}catch(S){throw ks.error(S),fe(new Error,Re.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ea(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await LT(i,r.private_key,r.passphrase),_=await Ys.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:iD,algorithm:la,subject:ua.REFRESH}),c=CT.hash(_),u=new jM(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await zM(u)}catch(S){ks.error(S),E=S}if(E!==void 0||l.skipped_hashes.length>0)throw fe(new Error,Re.REFRESH_TOKEN_SAVE_FAILED,me.INTERNAL_SERVER_ERROR);return eD.signalUserChange(new tD(process.pid)),new rD(o,_)}a(aD,"createTokens");async function LT(e,t,r){return await Ys.sign(e,{key:t,passphrase:r},{expiresIn:nD,algorithm:la,subject:ua.OPERATION})}a(LT,"signOperationToken");async function Ea(){if(M_===void 0)try{let e=U_.join(Gt.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PASSPHRASE_NAME),t=U_.join(Gt.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=U_.join(Gt.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await w_.readFile(e)).toString(),n=(await w_.readFile(t)).toString(),i=(await w_.readFile(r)).toString();M_=new sD(i,n,s)}catch(e){throw ks.error(e),fe(new Error,Re.NO_ENCRYPTION_KEYS,me.INTERNAL_SERVER_ERROR)}return M_}a(Ea,"getJWTRSAKeys");async function oD(e){if(!e)throw fe(new Error,Re.INVALID_BODY,me.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fe(new Error,Re.REFRESH_TOKEN_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);await wT(e.refresh_token);let t=await Ea(),r=await Ys.decode(e.refresh_token);return{operation_token:await LT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(oD,"refreshOperationToken");async function _D(e){try{let t=await Ea(),r=await Ys.verify(e,t.public_key,{algorithms:la,subject:ua.OPERATION});return await D_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ks.warn(t),t.name&&t.name==="TokenExpiredError"?fe(new Error,Re.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Re.INVALID_TOKEN,me.UNAUTHORIZED)}}a(_D,"validateOperationToken");async function wT(e){let t;try{let r=await Ea(),s=await Ys.verify(e,r.public_key,{algorithms:la,subject:ua.REFRESH});t=await D_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ks.warn(r),r.name&&r.name==="TokenExpiredError"?fe(new Error,Re.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Re.INVALID_TOKEN,me.UNAUTHORIZED)}if(!CT.validate(t.refresh_token,e))throw fe(new Error,Re.INVALID_TOKEN,me.UNAUTHORIZED);return t}a(wT,"validateRefreshToken")});var HT=h((A0,PT)=>{"use strict";var cD=NT(),Fr=require("passport"),uD=require("passport-local").Strategy,lD=require("passport-http").BasicStrategy,ED=require("util"),dD=Ur(),DT=ED.callbackify(dD.findAndValidateUser),R0=He(),SD=f(),MT=UT();Fr.use(new uD(function(e,t,r){DT(e,t,r)}));Fr.use(new lD(function(e,t,r){DT(e,t,r)}));Fr.serializeUser(function(e,t){t(null,e)});Fr.deserializeUser(function(e,t){t(null,e)});function hD(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Fr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===SD.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?MT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):MT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Fr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(hD,"authorize");function TD(e,t){let r=cD(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(TD,"checkPermissions");PT.exports={authorize:hD,checkPermissions:TD}});var $s=h((N0,BT)=>{"use strict";var da=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(da,"Node");var Sa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Sa,"NodeSubscription");BT.exports={Node:da,NodeSubscription:Sa}});var GT=h((O0,vT)=>{"use strict";var fD=f().OPERATIONS_ENUM,ha=class{constructor(t,r,s,n=void 0){this.operation=fD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(ha,"UpsertObject");vT.exports=ha});var Ks=h((b0,FT)=>{"use strict";var Ta=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Ta,"RemotePayloadObject");var fa=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(fa,"RemotePayloadSubscription");FT.exports={RemotePayloadObject:Ta,RemotePayloadSubscription:fa}});var xT=h((L0,qT)=>{"use strict";var ma=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(ma,"TableSizeObject");qT.exports=ma});var kT=h((y0,VT)=>{"use strict";var mD=xT(),RD=ne(),qr=q(),AD=N(),{getSchemaPath:gD,getTransactionAuditStorePath:ND}=K();VT.exports=pD;async function pD(e){let t=new mD;try{let r=gD(e.schema,e.name),s=await qr.openEnvironment(r,e.name),n=qr.statDBI(s,e.hash_attribute),i=ND(e.schema,e.name),o=await qr.openEnvironment(i,e.name,!0),_=qr.statDBI(o,RD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await qr.environmentDataSize(r,e.name),u=await qr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){AD.warn(`unable to stat table dbi due to ${r}`)}return t}a(pD,"lmdbGetTableSize")});var $T=h((M0,YT)=>{"use strict";var Ra=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(Ra,"SystemInformationObject");YT.exports=Ra});var Y_=h((P0,JT)=>{"use strict";var OD=require("fs-extra"),ID=require("path"),le=require("systeminformation"),Ft=N(),P_=f(),bD=kT(),WT=ws(),{getThreadInfo:KT}=ui(),QT=$();QT.initSync();var CD=$T(),{openEnvironment:LD}=q(),{getSchemaPath:wD}=K(),Aa;JT.exports={getHDBProcessInfo:G_,getNetworkInfo:q_,getDiskInfo:F_,getMemoryInfo:v_,getCPUInfo:B_,getTimeInfo:H_,getSystemInformation:x_,systemInformation:yD,getTableSize:V_,getMetrics:k_};function H_(){return le.time()}a(H_,"getTimeInfo");async function B_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...l}=await le.cpu();l.cpu_speed=await le.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:S,raw_currentload_irq:d,raw_currentload_nice:m,raw_currentload_system:g,raw_currentload_user:w,cpus:W,...x}=await le.currentLoad();return x.cpus=[],W.forEach(G=>{let{raw_load:Pe,raw_load_idle:Yt,raw_load_irq:hr,raw_load_nice:Ac,raw_load_system:gc,raw_load_user:Ya,...Wr}=G;x.cpus.push(Wr)}),l.current_load=x,l}catch(e){return Ft.error(`error in getCPUInfo: ${e}`),{}}}a(B_,"getCPUInfo");async function v_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await le.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ft.error(`error in getMemoryInfo: ${e}`),{}}}a(v_,"getMemoryInfo");async function G_(){let e={core:[],clustering:[]};try{let t=await le.processes(),r;try{r=Number.parseInt(await OD.readFile(ID.join(QT.get(P_.CONFIG_PARAMS.ROOTPATH),P_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===P_.NODE_ERROR_CODES.ENOENT)Ft.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}return t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)}),e}catch(t){return Ft.error(`error in getHDBProcessInfo: ${t}`),e}}a(G_,"getHDBProcessInfo");async function F_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await le.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await le.fsStats();return e.read_write=u,e.size=await le.fsSize(),e}catch(t){return Ft.error(`error in getDiskInfo: ${t}`),e}}a(F_,"getDiskInfo");async function q_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await le.networkInterfaceDefault(),e.latency=await le.inetChecksite("google.com"),(await le.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...S}=s;e.interfaces.push(S)}),(await le.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e}catch(t){return Ft.error(`error in getNetworkInfo: ${t}`),e}}a(q_,"getNetworkInfo");async function x_(){if(Aa!==void 0)return Aa;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await le.osInfo();e=_;let c=await le.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Aa=e,Aa}catch(t){return Ft.error(`error in getSystemInformation: ${t}`),e}}a(x_,"getSystemInformation");async function V_(){let e=[],t=await WT.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await bD(s));return e}a(V_,"getTableSize");async function k_(){let e=await WT.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=wD(r,n),_=(await LD(i,n)).getStats();s[n]={puts:_.puts,deletes:_.deletes,txns:_.txns,pageFlushes:_.pageFlushes,writes:_.writes,pagesWritten:_.pagesWritten,timeDuringTxns:_.timeDuringTxns,timeStartTxns:_.timeStartTxns,timePageFlushes:_.timePageFlushes,timeSync:_.timeSync}}catch(i){Ft.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(k_,"getMetrics");async function yD(e){let t=new CD;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await x_(),t.time=H_(),t.cpu=await B_(),t.memory=await v_(),t.disk=await F_(),t.network=await q_(),t.harperdb_processes=await G_(),t.table_size=await V_(),t.metrics=await k_(),t.threads=await KT(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await x_();break;case"time":t.time=H_();break;case"cpu":t.cpu=await B_();break;case"memory":t.memory=await v_();break;case"disk":t.disk=await F_();break;case"network":t.network=await q_();break;case"harperdb_processes":t.harperdb_processes=await G_();break;case"table_size":t.table_size=await V_();break;case"database_metrics":case"metrics":t.metrics=await k_();break;case"threads":t.threads=await KT();break;default:break}return t}a(yD,"systemInformation")});var $_=h((B0,UD)=>{UD.exports={name:"harperdb",version:"4.1.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},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/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../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.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.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:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.2",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",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"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var ZT=h((F0,XT)=>{"use strict";var v0=require("fs-extra"),G0=N();XT.exports={version:MD,printVersion:PD,nodeVersion:DD};var qt=$_();function MD(){if(qt)return qt.version}a(MD,"version");function DD(){if(qt&&qt.engines&&qt.engines["preferred-node"])return qt.engines["preferred-node"]}a(DD,"nodeVersion");function PD(){qt&&console.log(`HarperDB Version ${qt.version}`)}a(PD,"printVersion")});var xr=h((k0,tf)=>{"use strict";var HD=wi(),K_=p(),W_=require("util"),_r=f(),zT=$();zT.initSync();var BD=HT(),jT=hi(),{Node:x0,NodeSubscription:V0}=$s(),vD=Vi(),GD=GT(),{RemotePayloadObject:FD,RemotePayloadSubscription:qD}=Ks(),{handleHDBError:xD,hdb_errors:VD}=Y(),{HTTP_STATUS_CODES:kD,HDB_ERROR_MSGS:YD}=VD,$D=Tt(),KD=Y_(),WD=ZT(),QD=W_.promisify(BD.authorize),JD=W_.promisify(jT.searchByHash),XD=W_.promisify(jT.searchByValue);tf.exports={authHeaderToUser:ZD,isEmpty:zD,getNodeRecord:jD,upsertNodeRecord:eP,buildNodePayloads:tP,checkClusteringEnabled:rP,getAllNodeRecords:sP,getSystemInfo:nP,reverseSubscription:ef};async function ZD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await QD(t,null),e}a(ZD,"authHeaderToUser");function zD(e){return e==null}a(zD,"isEmpty");async function jD(e){let t=new vD(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return JD(t)}a(jD,"getNodeRecord");async function eP(e){let t=new GD(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return HD.upsert(t)}a(eP,"upsertNodeRecord");function ef(e){if(K_.isEmpty(e.subscribe)||K_.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(ef,"reverseSubscription");function tP(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,l=K_.getTableHashAttribute(c,u),{subscribe:E,publish:S}=ef(_),d=new qD(c,u,l,S,E,_.start_time);n.push(d)}return new FD(r,t,n,s)}a(tP,"buildNodePayloads");function rP(){if(!zT.get(_r.CONFIG_PARAMS.CLUSTERING_ENABLED))throw xD(new Error,YD.CLUSTERING_NOT_ENABLED,kD.BAD_REQUEST,void 0,void 0,!0)}a(rP,"checkClusteringEnabled");async function sP(){let e=new $D(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await XD(e))}a(sP,"getAllNodeRecords");async function nP(){let e=await KD.getSystemInformation();return{hdb_version:WD.version(),node_version:e.node_version,platform:e.platform}}a(nP,"getSystemInfo")});var sf=h(($0,rf)=>{"use strict";var iP=Ut();rf.exports={writeTransaction:aP};function aP(e,t,r){return iP.writeTransaction(e,t,r)}a(aP,"writeTransaction")});var Vt=h((tx,Nf)=>{"use strict";var ee=$();ee.initSync();var oP=require("fs-extra"),_P=require("semver"),Zs=require("path"),{monotonicFactory:cP}=require("ulidx"),z_=cP(),uP=require("util"),af=require("child_process"),lP=uP.promisify(af.exec),EP=af.spawn,M=ce(),v=f(),ga=p(),xt=N(),Na=Is(),dP=sf(),Ws=ss(),{encode:X_,decode:j_}=require("msgpackr"),{isEmpty:cr}=ga,of=Ur(),_f=12e10,{connect:SP,StorageType:cf,RetentionPolicy:uf,AckPolicy:ec,DeliverPolicy:zs,DiscardPolicy:hP,NatsConnection:W0,JetStreamManager:Q0,JetStreamClient:J0,StringCodec:X0,JSONCodec:TP,createInbox:tc,StreamSource:Z0,headers:fP,toJsMsg:lf,nuid:z0,JetStreamOptions:j0,ErrorCode:nf,nanos:ex}=require("nats"),{PACKAGE_ROOT:mP}=f(),RP=$_(),Ef=TP(),AP="clustering",gP=RP.engines[M.NATS_SERVER_NAME],NP=Zs.join(mP,"dependencies"),Z_=Zs.join(NP,`${process.platform}-${process.arch}`,M.NATS_BINARY_NAME),Q_,J_,Qs,Js,Xs,Xe;Nf.exports={runCommand:df,checkNATSServerInstalled:pP,createConnection:rc,getConnection:pa,getJetStreamManager:js,getJetStream:Sf,getNATSReferences:Me,getServerList:IP,createLocalStream:sc,listStreams:hf,deleteLocalStream:bP,getServerConfig:en,listRemoteStreams:CP,viewStream:LP,viewStreamIterator:wP,publishToStream:yP,createWorkQueueStream:UP,addSourceToWorkStream:ff,request:MP,removeSourceFromWorkStream:Rf,reloadNATS:nc,reloadNATSHub:DP,reloadNATSLeaf:PP,extractServerName:mf,requestErrorHandler:HP,updateWorkStream:BP,createLocalTableStream:Af,createTableStreams:vP,purgeTableStream:gf,purgeSchemaTableStreams:GP,getStreamInfo:FP,updateLocalStreams:xP,closeConnection:OP,getJsmServerName:tn,addNatsMsgHeader:Tf};async function df(e,t=void 0){let{stdout:r,stderr:s}=await lP(e,{cwd:t});if(s)throw new Error(s.replace(`
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw z.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Ip(s,r),oo(s);let n=s.toJSON();if(te=Jt(n),te.logging_rotation_rotate)for(let i in Zu)te[i]&&z.error(`Config ${Zu[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);z.trace(Rp)}}a(rl,"initConfig");function Ip(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],je.join(r,ve.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],je.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],je.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(z.trace("Updating config file with missing config params"),Be.writeFileSync(t,String(e)))}a(Ip,"checkForUpdatedConfig");function oo(e){let t=e.toJSON(),r=lp(t);if(r.error)throw Mn.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}a(oo,"validateConfig");function bp(e,t){te===void 0&&(te={});let r=lt[e.toLowerCase()];if(r===void 0){z.trace(`Unable to update config object because config param '${e}' does not exist`);return}te[r.toLowerCase()]=t}a(bp,"updateConfigObject");function sl(e,t,r=void 0,s=!1,n=!1){te===void 0&&rl();let i=tl(lt.hdb_root),o=je.join(i,ve.HDB_CONFIG_FILE),_=Ar(o),c;if(r===void 0&&e.toLowerCase()===It.SCHEMAS)c=t;else if(r===void 0){let E=lt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let S=E.split("_"),d=io(E,t);_.setIn([...S],d)}else for(let E in r){let S=lt[E.toLowerCase()];if(S===It.SCHEMAS){c=r[E];continue}if(S!==void 0){let d=S.split("_"),m=io(S,r[E]);try{_.setIn([...d],m)}catch(g){z.error(g)}}}c&&el(_,c),oo(_);let u=_.getIn(["rootPath"]),l=je.join(u,ve.HDB_CONFIG_FILE);s===!0&&Cp(o,u),Be.writeFileSync(l,String(_)),n&&(te=Jt(_.toJSON())),z.trace(`Config parameter: ${e} updated with value: ${t}`)}a(sl,"updateConfigValue");function Cp(e,t){try{let r=je.join(t,"backup",`${ve.HDB_CONFIG_FILE}.bak`);Be.copySync(e,r),z.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){z.error(Ap),z.error(r)}}a(Cp,"backupConfigFile");var Lp=["schemas"];function Jt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Lp.includes(r)){let s=Jt(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Jt,"flattenConfig");function io(e,t){if(e===It.CLUSTERING_NODENAME||e===It.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(dp(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||be.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 be.autoCast(t)}a(io,"castConfigValue");function wp(){let e=be.getPropsFilePath(),t=ao(e);return Ar(t).toJSON()}a(wp,"getConfiguration");async function yp(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return sl(void 0,void 0,n,!0),Np}catch(i){throw typeof i=="string"||i instanceof String?hp(i,i,Tp.BAD_REQUEST,void 0,void 0,!0):i}}a(yp,"setConfiguration");function _o(){let e=be.getPropsFilePath();try{Be.accessSync(e,Be.constants.F_OK|Be.constants.R_OK)}catch(s){throw z.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ao(e);return Ar(t).toJSON()}a(_o,"readConfigFile");function Ar(e){return Ep.parseDocument(Be.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ar,"parseYamlDoc");function Up(){let e=_o(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=be.isEmptyOrZeroLength(t)?[]:t;let r=Xu(t);if(r)throw Mn.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=be.isEmptyOrZeroLength(s)?[]:s;let n=Xu(s);if(n)throw Mn.CONFIG_VALIDATION(n.message);if(!be.isEmptyOrZeroLength(s)&&!be.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!be.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Mn.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Up,"getClusteringRoutes");function nl(e){let t=zu(e);te={};for(let r in lt){let s=t.get(r.toUpperCase());if(be.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=lt[r].toLowerCase();n===It.LOGGING_ROOT?te[n]=je.dirname(s):te[n]=s}return te}a(nl,"initOldConfig");function Mp(e){let t=_o();return Sp.get(t,e.replaceAll("_","."))}a(Mp,"getConfigFromFile")});var $=h((gv,ol)=>{"use strict";var co=require("fs-extra"),et=require("path"),Dp=require("os"),Pp=require("properties-reader"),ns=N(),gr=p(),O=f(),Pn=ss(),Hp="Error initializing environment manager",Hn="BOOT_PROPS_FILE_PATH",al=!1,Bp={[O.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Et={};ol.exports={BOOT_PROPS_FILE_PATH:Hn,getHdbBasePath:vp,setHdbBasePath:Gp,get:Fp,initSync:xp,setProperty:D,initTestEnvironment:Vp};function vp(){return Et[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(vp,"getHdbBasePath");function Gp(e){Et[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Gp,"setHdbBasePath");function Fp(e){let t=Pn.getConfigValue(e);return t===void 0?Et[e]:t}a(Fp,"get");function D(e,t){Bp[e]&&(Et[e]=t),Pn.updateConfigObject(e,t)}a(D,"setProperty");function qp(){let e;try{e=gr.getPropsFilePath(),co.accessSync(e,co.constants.F_OK|co.constants.R_OK),al=!0;let t=Pp(e);return Et[O.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(O.HDB_SETTINGS_NAMES.INSTALL_USER),Et[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Et[Hn]=e,!0}catch{return ns.trace(`Environment manager found no properties file at ${e}`),!1}}a(qp,"doesPropFileExist");function xp(e=!1){try{(al||qp())&&(Pn.initConfig(e),Et[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Pn.getConfigValue(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ns.error(Hp),ns.error(t),console.error(t),process.exit(1)}}a(xp,"initSync");function Vp(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=et.join(__dirname,"../../","unitTests");Et[Hn]=et.join(c,"hdb_boot_properties.file"),D(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,et.join(c,"settings.test")),D(O.HDB_SETTINGS_NAMES.INSTALL_USER,Dp.userInfo().username),D(O.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,et.join(c,"envDir","utility","keys","privateKey.pem")),D(O.HDB_SETTINGS_NAMES.CERT_KEY,et.join(c,"envDir","utility","keys","certificate.pem")),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,et.join(c,"envDir","utility","keys","privateKey.pem")),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,et.join(c,"envDir","utility","keys","certificate.pem")),D(O.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),D(O.HDB_SETTINGS_NAMES.LOG_PATH_KEY,et.join(c,"envDir","log")),D(O.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),D(O.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),D(O.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),D(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,et.join(c,"envDir")),D(O.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,gr.isEmpty(n)?!0:n),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,gr.isEmpty(n)?!0:n),D(O.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),D(O.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,gr.isEmpty(i)?!1:i),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,gr.isEmpty(i)?!1:i),D(O.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),D(O.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),D(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),D(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),D(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,et.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),D(O.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,gr.isEmpty(_)?!1:_),o&&(D("CORS_ACCESSLIST",o),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(D(O.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(D(O.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(D(O.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),D(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Hn}. Please check your boot props and settings files`;ns.fatal(r),ns.error(t)}}a(Vp,"initTestEnvironment")});var ul=h((pv,cl)=>{"use strict";var uo=$(),_l=f();uo.initSync();var kp=uo.get(_l.CONFIG_PARAMS.STORAGE_COMPRESSION),Yp=uo.get(_l.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Bn=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=kp&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Yp&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Bn,"OpenDBIObject");cl.exports=Bn});var dl=h((Iv,El)=>{"use strict";var Nr=$(),is=f();Nr.initSync();var $p=Nr.get(is.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Nr.get(is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Nr.get(is.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ll=Nr.get(is.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Kp=Nr.get(is.CONFIG_PARAMS.STORAGE_NOREADAHEAD),vn=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=$p,ll!==void 0&&(this.overlappingSync=ll),this.noReadAhead=Kp}};a(vn,"OpenEnvironmentObject");El.exports=vn});var q=h((Cv,Al)=>{"use strict";var lo=require("lmdb"),Ge=require("fs-extra"),$e=require("path"),Fn=Wt(),Sl=N(),re=He().LMDB_ERRORS_ENUM,qn=Vu(),Eo=ul(),hl=dl(),bt=ne(),Ke=bt.INTERNAL_DBIS_NAME,Tl=bt.DBI_DEFINITION_NAME,Wp="data.mdb",Qp="lock.mdb",as=".mdb",Jp="-lock",Gn=class{constructor(t,r,s=!1){this.dbi=Fe(t,r),this.key_type=this.dbi[bt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[bt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new lo.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Gn,"TransactionCursor");function So(e,t){if(e===void 0)throw new Error(re.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(re.ENV_NAME_REQUIRED)}a(So,"pathEnvNameValidation");async function ho(e,t,r=!0){try{await Ge.access(e)}catch(s){throw s.code==="ENOENT"?new Error(re.INVALID_BASE_PATH):s}try{let s=$e.join(e,t+as);return await Ge.access(s,Ge.constants.R_OK|Ge.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ge.access($e.join(e,t,Wp),Ge.constants.R_OK|Ge.constants.F_OK),$e.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(re.INVALID_ENVIRONMENT)}else throw new Error(re.INVALID_ENVIRONMENT);throw s}}a(ho,"validateEnvironmentPath");function xn(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(re.DBI_NAME_REQUIRED)}a(xn,"validateEnvDBIName");async function Xp(e,t,r=!1,s=!1){So(e,t),t=t.toString();try{return await ho(e,t,s),To(e,t,r)}catch(n){if(n.message===re.INVALID_ENVIRONMENT){let i=$e.join(e,t);await Ge.mkdirp(s?i:e);let o=new hl(s?i:i+as,!1),_=lo.open(o);_.dbis=Object.create(null);let c=new Eo(!1);_.openDB(Ke,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=fo(e,t,r);return _[bt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(Xp,"createEnvironment");async function Zp(e,t,r,s=!0){let n=await To(e,t);if(r===void 0)throw new Error(re.DESTINATION_PATH_REQUIRED);try{await Ge.access($e.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(re.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(Zp,"copyEnvironment");async function To(e,t,r=!1){So(e,t),t=t.toString();let s=fo(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await ho(e,t),i=$e.join(e,t+as),o=n!=i,_=new hl(n,o),c=lo.open(_);c.dbis=Object.create(null);let u=ml(c);for(let l=0;l<u.length;l++)Fe(c,u[l]);return c[bt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(To,"openEnvironment");async function zp(e,t,r=!1){So(e,t),t=t.toString();let s=$e.join(e,t+as),n=await ho(e,t);if(global.lmdb_map!==void 0){let i=fo(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fl(o),delete global.lmdb_map[i]}}await Ge.remove(n),await Ge.remove(n===s?n+Jp:$e.join($e.dirname(n),Qp))}a(zp,"deleteEnvironment");async function fl(e){Fn.validateEnv(e);let t=e[bt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fl,"closeEnvironment");function fo(e,t,r=!1){let n=`${$e.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(fo,"getCachedEnvironmentName");function jp(e){Fn.validateEnv(e);let t=Object.create(null),r=Fe(e,Ke);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ke)try{t[s]=Object.assign(new qn,n)}catch{Sl.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(jp,"listDBIDefinitions");function ml(e){Fn.validateEnv(e);let t=[],r=Fe(e,Ke);for(let{key:s}of r.getRange({start:!1}))s!==Ke&&t.push(s);return t}a(ml,"listDBIs");function eO(e,t){let s=Fe(e,Ke).getEntry(t),n=new qn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Sl.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(eO,"getDBIDefinition");function Rl(e,t,r,s=!1){if(xn(e,t),t=t.toString(),t===Ke)throw new Error(re.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fe(e,t)}catch(n){if(n.message===re.DBI_DOES_NOT_EXIST){let i=new Eo(r,s===!0),o=e.openDB(t,i),_=new qn(r===!0,s);return o[Tl]=_,Fe(e,Ke).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Rl,"createDBI");function Fe(e,t){if(xn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ke?r=eO(e,t):r=new qn,r===void 0)throw new Error(re.DBI_DOES_NOT_EXIST);let s;try{let n=new Eo(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(re.DBI_DOES_NOT_EXIST):n}return s[Tl]=r,e.dbis[t]=s,s}a(Fe,"openDBI");function tO(e,t){xn(e,t),t=t.toString();let r=Fe(e,t),s=r.getStats();return r[bt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(tO,"statDBI");async function rO(e,t){try{let r=$e.join(e,t+as);return(await Ge.stat(r)).size}catch{throw new Error(re.INVALID_ENVIRONMENT)}}a(rO,"environmentDataSize");function sO(e,t){if(xn(e,t),t=t.toString(),t===Ke)throw new Error(re.CANNOT_DROP_INTERNAL_DBIS_NAME);Fe(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fe(e,Ke).removeSync(t)}a(sO,"dropDBI");function nO(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Fe(e,n)}catch(i){if(i.message===re.DBI_DOES_NOT_EXIST)Rl(e,n,n!==t,n===t);else throw i}}}a(nO,"initializeDBIs");Al.exports={openDBI:Fe,openEnvironment:To,createEnvironment:Xp,listDBIs:ml,listDBIDefinitions:jp,createDBI:Rl,dropDBI:sO,statDBI:tO,deleteEnvironment:zp,initializeDBIs:nO,TransactionCursor:Gn,environmentDataSize:rO,copyEnvironment:Zp,closeEnvironment:fl}});var Nl=h((wv,gl)=>{"use strict";var Vn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Vn,"InsertRecordsResponseObject");gl.exports=Vn});var Ol=h((Uv,pl)=>{"use strict";var kn=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(kn,"UpdateRecordsResponseObject");pl.exports=kn});var bl=h((Dv,Il)=>{"use strict";var Yn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Yn,"UpsertRecordsResponseObject");Il.exports=Yn});var pr=h((Gv,wl)=>{"use strict";var iO=q(),aO=Nl(),oO=Ol(),_O=bl(),tt=Wt(),os=He().LMDB_ERRORS_ENUM,cO=ne(),dt=f(),uO=p(),lO=require("uuid"),Hv=require("lmdb"),{handleHDBError:EO,hdb_errors:dO}=Y(),{OVERFLOW_MARKER:Bv,MAX_SEARCH_KEY_LENGTH:vv}=cO,Cl=$();Cl.initSync();var $n=Cl.get(dt.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),mo=dt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xt=dt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function SO(e,t,r,s,n=tt.getNextMonotonicTime()){No(e,t,r,s),Ro(e,t,r);let i=new aO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Ll(u,!0,n);let l=hO(e,t,r,u),E=u[t];o.push(l),_.push(E)}return Ao(o,_,s,i,n)}a(SO,"insertRecords");function hO(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let l=_([[{}]]);Array.isArray(l)&&(_=l[0][dt.FUNC_VAL],s[o]=_)}let c=tt.getIndexedValues(_),u=e.dbis[o];if(c){$n&&u.prefetch(c.map(l=>({key:l,value:n})),Kn);for(let l=0,E=c.length;l<E;l++)u.put(c[l],n)}}$n&&e.dbis[t].prefetch([n],Kn),e.dbis[t].put(n,s,s[Xt])})}a(hO,"insertRecord");function TO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(TO,"removeSkippedRecords");function Ll(e,t,r){let s=r>0;(s||!Number.isInteger(e[Xt]))&&(e[Xt]=r||(r=tt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[mo]))&&(e[mo]=r||tt.getNextMonotonicTime()):delete e[mo]}a(Ll,"setTimestamps");function Ro(e,t,r){r.indexOf(dt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),iO.initializeDBIs(e,t,r)}a(Ro,"initializeTransaction");async function fO(e,t,r,s,n=tt.getNextMonotonicTime()){No(e,t,r,s),Ro(e,t,r);let i=new oO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],S;try{S=go(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}_.push(S),c.push(E)}return Ao(_,c,s,i,n,o)}a(fO,"updateRecords");async function mO(e,t,r,s,n=tt.getNextMonotonicTime()){try{No(e,t,r,s)}catch(c){throw EO(c,c.message,dO.HTTP_STATUS_CODES.BAD_REQUEST)}Ro(e,t,r);let i=new _O,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;uO.isEmpty(u[t])?(l=lO.v4(),u[t]=l):l=u[t];let E=go(e,t,u,l,i,!1,n);o.push(E),_.push(l)}return Ao(o,_,s,i,n)}a(mO,"upsertRecords");async function Ao(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||tt.getNextMonotonicTime(),TO(r,i),s}a(Ao,"finalizeWrite");function go(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(Ll(r,!l,o),Number.isInteger(r[Xt])&&u[Xt]>r[Xt])return!1;l&&n.original_records.push(u);let E,S=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let g=r[m],w=e.dbis[m];if(w===void 0)continue;let W=u[m];if(typeof g=="function"){let G=g([[u]]);Array.isArray(G)&&(g=G[0][dt.FUNC_VAL],r[m]=g)}if(g===W)continue;let x=tt.getIndexedValues(W);if(x){$n&&w.prefetch(x.map(G=>({key:G,value:s})),Kn);for(let G=0,Pe=x.length;G<Pe;G++)w.remove(x[G],s)}if(x=tt.getIndexedValues(g),x){$n&&w.prefetch(x.map(G=>({key:G,value:s})),Kn);for(let G=0,Pe=x.length;G<Pe;G++)w.put(x[G],s)}}let d=Object.assign({},u,r);_.put(s,d,d[Xt])},"do_put");return c?E=_.ifVersion(s,c.version,S):E=_.ifNoExists(s,S),E.then(d=>d?!0:go(e,t,r,s,n,i,o))}a(go,"updateUpsertRecord");function RO(e,t,r){if(tt.validateEnv(e),t===void 0)throw new Error(os.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(os.WRITE_ATTRIBUTES_REQUIRED):new Error(os.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(RO,"validateBasic");function No(e,t,r,s){if(RO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(os.RECORDS_REQUIRED):new Error(os.RECORDS_MUST_BE_ARRAY)}a(No,"validateWrite");function Kn(){}a(Kn,"noop");wl.exports={insertRecords:SO,updateRecords:fO,upsertRecords:mO}});var K=h((qv,Hl)=>{"use strict";var Es=f(),AO=p(),he=$(),ds=require("path"),gO=require("minimist"),yl=require("fs-extra"),Ul=require("lodash");he.initSync();var{CONFIG_PARAMS:Ct,SCHEMAS_PARAM_CONFIG:_s,SYSTEM_SCHEMA_NAME:Wn}=Es,cs,us,ls;function Ml(){if(cs!==void 0)return cs;if(he.getHdbBasePath()!==void 0)return cs=he.get(Ct.STORAGE_PATH)||ds.join(he.getHdbBasePath(),Es.SCHEMA_DIR_NAME),cs}a(Ml,"getBaseSchemaPath");function Dl(){if(us!==void 0)return us;if(he.getHdbBasePath()!==void 0)return us=Pl(Wn),us}a(Dl,"getSystemSchemaPath");function NO(){if(ls!==void 0)return ls;if(he.getHdbBasePath()!==void 0)return ls=he.get(Es.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ds.join(he.getHdbBasePath(),Es.TRANSACTIONS_DIR_NAME),ls}a(NO,"getTransactionAuditStoreBasePath");function pO(e,t){let r=he.get(Ct.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ds.join(NO(),e.toString())}a(pO,"getTransactionAuditStorePath");function Pl(e,t){e=e.toString(),t=t&&t.toString();let r=he.get(Es.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ds.join(Ml(),e)}a(Pl,"getSchemaPath");function OO(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,gO(process.argv));let s=r[Ct.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!AO.isObject(s))throw o;i=s}for(let o of i){let _=o[Wn];if(!_)continue;let c=he.get(Ct.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[_s.PATH];if(u)return Ul.set(c,[Wn,_s.TABLES,t,_s.PATH],u),he.setProperty(Ct.SCHEMAS,c),u;let l=_?.[_s.PATH];if(l)return Ul.set(c,[Wn,_s.PATH],l),he.setProperty(Ct.SCHEMAS,c),l}}let n=r[Ct.STORAGE_PATH.toUpperCase()];if(n){if(!yl.pathExistsSync(n))throw new Error(n+" does not exist");let i=ds.join(n,e);return yl.mkdirsSync(i),he.setProperty(Ct.STORAGE_PATH,n),i}return Dl()}a(OO,"initSystemSchemaPaths");function IO(){cs=void 0,us=void 0,ls=void 0}a(IO,"resetPaths");Hl.exports={getBaseSchemaPath:Ml,getSystemSchemaPath:Dl,getTransactionAuditStorePath:pO,getSchemaPath:Pl,initSystemSchemaPaths:OO,resetPaths:IO}});var Zt=h((Vv,bO)=>{bO.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_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Qn=h((kv,Bl)=>{var{common_validators:Lt}=Kt(),Ss=ke(),We="is required",V={schema:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},table:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},hash_attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length}};function hs(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(hs,"makeAttributesStrings");function CO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence=!1,V.attribute.presence=!1,V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(CO,"schema_object");function LO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence=!1,V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(LO,"table_object");function wO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence=!1,V.hash_attribute.presence={message:We},Ss.validateObject(e,V)}a(wO,"create_table_object");function yO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence={message:We},V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(yO,"attribute_object");function UO(e){return e=hs(e),V.schema.presence={message:We},V.table.presence={message:We},V.attribute.presence=!1,V.hash_attribute.presence=!1,Ss.validateObject(e,V)}a(UO,"describe_table");function MO(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(MO,"validateTableResidence");Bl.exports={schema_object:CO,create_table_object:wO,table_object:LO,attribute_object:yO,describe_table:UO,validateTableResidence:MO}});var Gl=h(($v,vl)=>{"use strict";var DO=require("uuid"),Jn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||DO.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Jn,"CreateAttributeObject");vl.exports=Jn});var Zn=h((Wv,Fl)=>{"use strict";var PO=Gl(),Xn=class extends PO{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Xn,"LMDBCreateAttributeObject");Fl.exports=Xn});var xl=h((Jv,ql)=>{"use strict";ql.exports=BO;var HO="inserted";function BO(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===HO?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(BO,"returnObject")});var zn=h((Zv,Kl)=>{"use strict";var vO=f(),po=q(),GO=pr(),{getSystemSchemaPath:FO,getSchemaPath:qO}=K(),xO=Zt(),VO=Qn(),kO=Zn(),YO=xl(),{handleHDBError:Vl,hdb_errors:Yl}=Y(),kl=p(),{HTTP_STATUS_CODES:$O}=Yl,Oo=xO.hdb_attribute,$l=[];for(let e=0;e<Oo.attributes.length;e++)$l.push(Oo.attributes[e].attribute);var KO="inserted";Kl.exports=WO;async function WO(e){let t=VO.attribute_object(e);if(t)throw Vl(new Error,t.message,Yl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&kl.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Vl(new Error,r,$O.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=kl.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new kO(e.schema,e.table,e.attribute,e.id);try{let i=await po.openEnvironment(qO(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}`);po.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await po.openEnvironment(FO(),vO.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await GO.insertRecords(o,Oo.hash_attribute,$l,[n]);return YO(KO,_,{records:[n]},c)}catch(i){throw i}}a(WO,"lmdbCreateAttribute")});var jn=h((eG,Ql)=>{"use strict";var St=p(),Wl=N(),jv=ro();Ql.exports=QO;function QO(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(St.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&St.isEmptyOrZeroLength(o[r]))throw Wl.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!St.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Wl.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!St.isEmpty(o[r])&&o[r]!==""&&s.has(St.autoCast(o[r]))&&(o.skip=!0),s.add(St.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(QO,"insertUpdateValidate")});var ti=h((rG,Jl)=>{"use strict";var JO=f().OPERATIONS_ENUM,ei=class{constructor(t,r,s,n,i=void 0){this.operation=JO.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(ei,"InsertObject");Jl.exports=ei});var si=h((iG,Xl)=>{"use strict";var nG=ti(),ri=f(),bo=p(),Io=N(),XO=require("uuid"),{handleHDBError:Ts,hdb_errors:ZO}=Y(),{HDB_ERROR_MSGS:fs,HTTP_STATUS_CODES:ms}=ZO;Xl.exports=zO;function zO(e,t,r){for(let n=0;n<t.length;n++)jO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];eI(i,r,e.operation)}}a(zO,"processRows");function jO(e){if(Buffer.byteLength(String(e))>ri.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ts(new Error,fs.ATTR_NAME_LENGTH_ERR(e),ms.BAD_REQUEST,void 0,void 0,!0);if(bo.isEmptyOrZeroLength(e)||bo.isEmpty(e.trim()))throw Ts(new Error,fs.ATTR_NAME_NULLISH_ERR,ms.BAD_REQUEST,void 0,void 0,!0)}a(jO,"validateAttribute");function eI(e,t,r){if(!e.hasOwnProperty(t)||bo.isEmptyOrZeroLength(e[t])){if(r===ri.OPERATIONS_ENUM.INSERT||r===ri.OPERATIONS_ENUM.UPSERT){e[t]=XO.v4();return}throw Io.error("Update transaction aborted due to record with no hash value:",e),Ts(new Error,fs.RECORD_MISSING_HASH_ERR,ms.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ri.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Io.error(e),Ts(new Error,fs.HASH_VAL_LENGTH_ERR,ms.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Io.error(e),Ts(new Error,fs.INVALID_FORWARD_SLASH_IN_HASH_ERR,ms.BAD_REQUEST,void 0,void 0,!0)}a(eI,"validateHash")});var zl=h((oG,Zl)=>{"use strict";var ni=class{constructor(t,r){this.type=t,this.message=r}};a(ni,"ITCEventObject");Zl.exports=ni});var ii=h((cG,tE)=>{var tI=require("crypto"),jl=9;function rI(e){let t=nI(jl),r=eE(e+t);return t+r}a(rI,"createHash");function sI(e,t){let r=e.substr(0,jl),s=r+eE(t+r);return e===s}a(sI,"validateHash");function nI(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(nI,"generateSalt");function eE(e){return tI.createHash("md5").update(e).digest("hex")}a(eE,"md5");tE.exports={hash:rI,validate:sI}});var sE=h((lG,rE)=>{"use strict";var wt=f(),Rs=class{constructor(t=0,r=wt.STORAGE_TYPES_ENUM.LMDB,s=wt.LICENSE_VALUES.API_CALL_DEFAULT,n=wt.RAM_ALLOCATION_ENUM.DEFAULT,i=wt.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Rs,"BaseLicense");var ai=class extends Rs{constructor(t=0,r=wt.STORAGE_TYPES_ENUM.LMDB,s=wt.LICENSE_VALUES.API_CALL_DEFAULT,n=wt.RAM_ALLOCATION_ENUM.DEFAULT,i=wt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(ai,"ExtendedLicense");rE.exports={BaseLicense:Rs,ExtendedLicense:ai}});var oi=h((dG,cE)=>{"use strict";var Ir=require("fs-extra"),nE=ii(),iE=require("crypto"),iI=require("moment"),aI=require("uuid").v4,oe=N(),Lo=require("path"),oI=p(),Ce=f(),_I=sE().ExtendedLicense,Or="invalid license key format",cI="061183",uI="mofi25",lI="aes-256-cbc",EI=16,dI=32,aE=$();aE.initSync();var Co;cE.exports={validateLicense:oE,generateFingerPrint:hI,licenseSearch:_E,getLicense:mI};function wo(){return Lo.join(aE.getHdbBasePath(),Ce.LICENSE_KEY_DIR_NAME,Ce.LICENSE_FILE_NAME)}a(wo,"getLicenseDirPath");function SI(){let e=wo();return Lo.join(e,Ce.LICENSE_FILE_NAME)}a(SI,"getLicenseFilePath");function yo(){let e=wo();return Lo.join(e,Ce.REG_KEY_FILE_NAME)}a(yo,"getFingerPrintFilePath");async function hI(){let e=yo();try{return await Ir.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await TI();throw oe.error(`Error writing fingerprint file to ${e}`),oe.error(t),new Error("There was an error generating the fingerprint")}}a(hI,"generateFingerPrint");async function TI(){let e=aI(),t=nE.hash(e),r=yo();try{await Ir.mkdirp(wo()),await Ir.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw oe.error(`Error writing fingerprint file to ${r}`),oe.error(s),new Error("There was an error generating the fingerprint")}return t}a(TI,"writeFingerprint");function oE(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Ce.STORAGE_TYPES_ENUM.LMDB,api_call:Ce.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Ce.RAM_ALLOCATION_ENUM.DEFAULT,version:Ce.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return oe.error("empty license key passed to validate."),r;let s=yo(),n=!1;try{n=Ir.statSync(s)}catch(i){oe.error(i)}if(n){let i;try{i=Ir.readFileSync(s,"utf8")}catch{oe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uI),_=o[1];_=Buffer.concat([Buffer.from(_)],EI);let c=Buffer.concat([Buffer.from(i)],dI),u=iE.createDecipheriv(lI,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let d=fI(o[0],i);if(d)l=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Or),oe.error(Or),new Error(Or)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Or),oe.error(Or),new Error(Or)}else r.exp_date=l;r.exp_date<iI().valueOf()&&(r.valid_date=!1),nE.validate(o[1],`${cI}${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||oe.error("Invalid licence"),r}a(oE,"validateLicense");function fI(e,t){try{let r=iE.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{oe.warn("Check old license failed")}}a(fI,"checkOldLicense");function _E(){let e=new _I;e.api_call=0;let t=[];try{t=Ir.readFileSync(SI(),"utf-8").split(Ce.NEW_LINE)}catch(r){r.code==="ENOENT"?oe.info("no license file found"):oe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(oI.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=oE(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){oe.error("There was an error parsing the license string."),oe.error(n),e.api_call=Ce.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Ce.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Ce.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Ce.LICENSE_VALUES.API_CALL_DEFAULT),Co=e,e}a(_E,"licenseSearch");async function mI(){return Co||await _E(),Co}a(mI,"getLicense")});var ui=h((hG,Bo)=>{"use strict";var{Worker:RI,MessageChannel:AI,parentPort:ht,isMainThread:EE,threadId:gI,workerData:NI}=require("worker_threads"),{PACKAGE_ROOT:pI}=f(),{join:OI,isAbsolute:II,extname:bI}=require("path"),{totalmem:uE}=require("os"),Po=f(),dE=$(),CI=oi(),_i=N(),LI=f();dE.initSync();var wI=dE.get(Po.CONFIG_PARAMS.HTTP_THREADS)||1,yI=1024*1024,yt=[],zt=[],UI=50,SE=1e4,hE="restart",TE="request_thread_info",fE="resource_report",mE="thread_info",RE="added-port",Uo;Bo.exports={startWorker:Mo,restartWorkers:Ho,shutdownWorkers:DI,workers:yt,setMonitorListener:GI,onMessageFromWorkers:PI,broadcast:HI};function Mo(e,t={}){let s=CI.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||uE();n=Math.min(n,uE());let i=Math.min(Math.max(Math.floor(n/yI/(1+wI/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of zt){let{port1:l,port2:E}=new AI;u.postMessage({type:RE,port:l},[l]),_.push(E)}bI(e)||(e+=".js");let c=new RI(II(e)?e:OI(pI,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return ci(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{Mo(e,t)},c.on("error",u=>{console.error("Worker error:",u),_i.error("Worker error:",u)}),c.on("exit",u=>{yt.splice(yt.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<UI?(t.unexpectedRestarts=c.unexpectedRestarts+1,Mo(e,t)):_i.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===hE&&Ho(u.workerType),u.type===TE&&BI(c),u.type===fE&&vI(c,u)}),yt.push(c),qI(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Mo,"startWorker");var MI=[Po.THREAD_TYPES.HTTP];async function Ho(e=null,t=2,r=!0){if(EE){t<1&&(t=t*yt.length);let s=[];for(let n of yt.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Po.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=MI.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),SE*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else ht.postMessage({type:hE,workerType:e})}a(Ho,"restartWorkers");function DI(e){return Ho(e,1/0,!1)}a(DI,"shutdownWorkers");var AE=[];function PI(e){AE.push(e)}a(PI,"onMessageFromWorkers");function HI(e){for(let t of zt)try{t.postMessage(e)}catch(r){_i.error("Unable to send message to worker",r)}}a(HI,"broadcast");function BI(e){e.postMessage({type:mE,workers:gE()})}a(BI,"sendThreadInfo");function gE(){let e=Date.now();return yt.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(gE,"getChildWorkerInfo");function vI(e,t){e.resources=t,e.resources.updated=Date.now()}a(vI,"recordResourceReport");var Do;function GI(e){Do=e}a(GI,"setMonitorListener");var FI=1e3,lE=!1;function qI(){lE||(lE=!0,setInterval(()=>{for(let e of yt){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Do&&Do()},FI).unref())}a(qI,"startMonitoring");var xI=1e3;if(ht){ci(ht);for(let e of NI.addPorts)ci(e);setInterval(()=>{let e=process.memoryUsage();ht.postMessage({type:fE,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},xI).unref(),Uo=a(()=>new Promise((e,t)=>{ht.on("message",r),ht.postMessage({type:TE});function r(s){s.type===mE&&(ht.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Uo=gE;Bo.exports.getThreadInfo=Uo;function ci(e,t){zt.push(e),e.on("message",r=>{if(r.type===RE)ci(r.port);else for(let s of AE)s(r)}).on("close",()=>{zt.splice(zt.indexOf(e),1)}).on("exit",()=>{zt.splice(zt.indexOf(e),1)}),t||e.unref()}a(ci,"addPort");EE||ht.on("message",async e=>{let{type:t}=e;t===LI.ITC_EVENT_TYPES.SHUTDOWN&&(ht.unref(),setTimeout(()=>{_i.warn("Thread did not voluntarily terminate",gI),process.exit(0)},SE).unref())})});var OE=h((fG,pE)=>{"use strict";var vo=q(),VI=N(),NE=He().LMDB_ERRORS_ENUM;pE.exports=kI;async function kI(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 vo.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==NE.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await vo.closeEnvironment(global.lmdb_map[s]),await vo.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==NE.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){VI.error(t)}}a(kI,"cleanLMDBMap")});var vE=h((AG,BE)=>{"use strict";var Go=require("recursive-iterator"),YI=require("alasql"),Fo=require("clone"),IE=p(),{handleHDBError:bE,hdb_errors:$I}=Y(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:LE}=$I,KI=["DISTINCT_ARRAY"],wE=Symbol("validateTables"),qo=Symbol("validateTable"),RG=Symbol("getAllColumns"),yE=Symbol("validateAllColumns"),li=Symbol("findColumn"),UE=Symbol("validateOrderBy"),As=Symbol("validateSegment"),xo=Symbol("validateColumn"),ME=Symbol("setColumnsForTable"),DE=Symbol("checkColumnsForAsterisk"),PE=Symbol("validateGroupBy"),HE=Symbol("hasColumns"),Ei=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[wE](),this[DE](),this[yE]()}[wE](){if(this[HE]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[qo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[qo](t.table)})}}[HE](){let t=!1,r=new Go(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[qo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw bE(new Error,CE.SCHEMA_NOT_FOUND(t.databaseid),LE.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw bE(new Error,CE.TABLE_NOT_FOUND(t.databaseid,t.tableid),LE.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Fo(s);n.table=Fo(t),this.attributes.push(n)})}[li](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)}[DE](){let t=new Go(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ME](r.tableid)}[ME](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new YI.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yE](){this[As](this.statement.columns,!1),this[As](this.statement.joins,!1),this[As](this.statement.where,!1),this[PE](this.statement.group,!1),this[As](this.statement.order,!0)}[As](t,r){if(!t)return;let s=new Go(t),n=[];for(let{node:i,path:o}of s)!IE.isEmpty(i)&&!IE.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[UE](i):n.push(this[xo](i)));return n}[PE](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&KI.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Fo(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[li](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[li](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[UE](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[xo](t)}[xo](t){let r=this[li](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Ei,"SelectValidator");BE.exports=Ei});var xE=h((NG,qE)=>{"use strict";var GE=require("lodash"),gs=require("mathjs"),WI=require("jsonata"),FE=p();qE.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GE.uniqWith(e,GE.isEqual):e,searchJSON:QI,mad:Ns.bind(null,gs.mad),mean:Ns.bind(null,gs.mean),mode:Ns.bind(null,gs.mode),prod:Ns.bind(null,gs.prod),median:Ns.bind(null,gs.median)};function Ns(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ns,"aggregateFunction");function QI(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(FE.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FE.isEmpty(this.__ala__.res[r])){let s=WI(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(QI,"searchJSON")});var kE=h((OG,VE)=>{"use strict";var X=require("moment"),Vo="YYYY-MM-DDTHH:mm:ss.SSSZZ";X.suppressDeprecationWarnings=!0;VE.exports={current_date:()=>X().utc().format("YYYY-MM-DD"),current_time:()=>X().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return X(e).utc().format("YYYY");case"month":return X(e).utc().format("MM");case"day":return X(e).utc().format("DD");case"hour":return X(e).utc().format("HH");case"minute":return X(e).utc().format("mm");case"second":return X(e).utc().format("ss");case"millisecond":return X(e).utc().format("SSS");default:break}},date:e=>X(e).utc().format(Vo),date_format:(e,t)=>X(e).utc().format(t),date_add:(e,t,r)=>X(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>X(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=X(e).utc(),n=X(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>X().utc().valueOf(),get_server_time:()=>X().format(Vo),offset_utc:(e,t)=>X(e).utc().utcOffset(t).format(Vo)}});var WE=h((IG,KE)=>{"use strict";var JI=require("@turf/area"),XI=require("@turf/length"),ZI=require("@turf/circle"),zI=require("@turf/difference"),jI=require("@turf/distance"),eb=require("@turf/boolean-contains"),tb=require("@turf/boolean-equal"),rb=require("@turf/boolean-disjoint"),sb=require("@turf/helpers"),YE=f(),y=p();KE.exports={geoArea:nb,geoLength:ib,geoCircle:ab,geoDifference:ob,geoDistance:$E,geoNear:_b,geoContains:cb,geoEqual:ub,geoCrosses:lb,geoConvert:Eb};var ko="geo1 is required",Yo="geo2 is required";function nb(e){if(y.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),JI.default(e)}a(nb,"geoArea");function ib(e,t){if(y.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),XI.default(e,{units:t||"kilometers"})}a(ib,"geoLength");function ab(e,t,r){if(y.isEmpty(e))throw new Error("point is required");if(y.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),ZI.default(e,t,{units:r||"kilometers"})}a(ab,"geoCircle");function ob(e,t){if(y.isEmpty(e))throw new Error("poly1 is required");if(y.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),zI(e,t)}a(ob,"geoDifference");function $E(e,t,r){if(y.isEmpty(e))throw new Error("point1 is required");if(y.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),jI.default(e,t,{units:r||"kilometers"})}a($E,"geoDistance");function _b(e,t,r,s){if(y.isEmpty(e))throw new Error("point1 is required");if(y.isEmpty(t))throw new Error("point2 is required");if(y.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return $E(e,t,s)<=r}a(_b,"geoNear");function cb(e,t){if(y.isEmpty(e))throw new Error(ko);if(y.isEmpty(e))throw new Error(Yo);return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),eb.default(e,t)}a(cb,"geoContains");function ub(e,t){if(y.isEmpty(e))throw new Error(ko);if(y.isEmpty(e))throw new Error(Yo);return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),tb.default(e,t)}a(ub,"geoEqual");function lb(e,t){if(y.isEmpty(e))throw new Error(ko);if(y.isEmpty(e))throw new Error(Yo);return typeof e=="string"&&(e=y.autoCastJSON(e)),typeof t=="string"&&(t=y.autoCastJSON(t)),!rb.default(e,t)}a(lb,"geoCrosses");function Eb(e,t,r){if(y.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(y.isEmpty(t))throw new Error("geo_type is required");if(y.isEmpty(YE.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(YE.GEO_CONVERSION_ENUM).join(",")}`);return sb[t](e,r)}a(Eb,"geoConvert")});var JE=h((CG,QE)=>{var jt=xE(),Le=kE(),rt=WE();QE.exports=e=>{e.aggr.mad=e.aggr.MAD=jt.mad,e.aggr.mean=e.aggr.MEAN=jt.mean,e.aggr.mode=e.aggr.MODE=jt.mode,e.aggr.prod=e.aggr.PROD=jt.prod,e.aggr.median=e.aggr.MEDIAN=jt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=jt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=jt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Le.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Le.current_time,e.fn.extract=e.fn.EXTRACT=Le.extract,e.fn.date=e.fn.DATE=Le.date,e.fn.date_format=e.fn.DATE_FORMAT=Le.date_format,e.fn.date_add=e.fn.DATE_ADD=Le.date_add,e.fn.date_sub=e.fn.DATE_SUB=Le.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Le.date_diff,e.fn.now=e.fn.NOW=Le.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Le.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Le.get_server_time,e.fn.getdate=e.fn.GETDATE=Le.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Le.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rt.geoNear}});var zE=h((LG,ZE)=>{"use strict";var ps=require("lodash"),se=require("alasql");se.options.cache=!1;var db=JE(),XE=require("clone"),di=require("recursive-iterator"),I=N(),L=p(),br=Ut(),Sb=f(),{hdb_errors:hb}=Y(),Tb="IS NULL",Qe="There was a problem performing this search. Please check the logs and try again.";db(se);var Si=class{constructor(t,r){if(L.isEmpty(t))throw I.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(),L.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!L.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(Qe)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(Qe)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(Qe)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(Qe)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(Qe)}}_getColumns(){let t=new di(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(XE(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ps.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(L.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new di(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!L.isEmpty(r)&&r.right)if(L.isNotEmptyAndHasValue(r.right.value)){let s=L.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new se.yy.LogicValue({value:s}):r.right instanceof se.yy.StringValue&&!L.isEmpty(s)&&L.autoCasterIsNumberCheck(s.toString())&&(r.right=new se.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=L.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new se.yy.LogicValue({value:i}):s instanceof se.yy.StringValue&&L.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new se.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new di(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!L.isEmpty(Sb.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(L.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(L.isEmptyOrZeroLength(r.left.columnid)||L.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(L.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!L.isEmpty(r.right.value)||!L.isEmpty(r.left.value)?s.add(L.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from)&&L.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&ps.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(L.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);L.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(L.isEmptyOrZeroLength(this.all_table_attributes)&&!L.isEmptyOrZeroLength(this.columns.columns))return t;if(L.isEmptyOrZeroLength(this.all_table_attributes)&&L.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await se.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(XE(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(L.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(Tb)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ps.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!L.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await br.getDataByHash(_);for(let E of _.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(Qe)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let S=await br.getDataByValue(E);for(let[d,m]of S)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,m[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(d)))}))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(Qe)}else if(!L.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!L.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,S=l.length;E<S;E++){let d=l[E];_.search_attribute=d.attribute,_.search_value=d.search_value;let m=await br.getDataByValue(_,d.operation);if(c)for(let[g]of m)this.data[i].__merged_data[g]||(this.data[i].__merged_data[g]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(g)));else for(let[g,w]of m)this.data[i].__merged_data[g]?this._updateMergedAttribute(i,g,n.attribute,w[n.attribute]):(this.data[i].__merged_data[g]=[...s[i]],this._updateMergedAttribute(i,g,n.attribute,w[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(g)))}}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(l),new Error(Qe)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await br.getDataByValue(_);if(c)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,L.autoCast(E)));else for(let[E,S]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,S[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,L.autoCast(E)))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(l),new Error(Qe)}}}_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 se.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new se.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new se.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new se.yy.FuncValue:new se.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let m=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(m+=" ON "+d.on.toString()),i.push(m),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let m=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,g=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${g}.${m}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${m}\` AS "${g}.${m}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let S=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(d,n);S=await se.promise(m,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(S&&S.length>0){for(let d=0,m=S.length;d<m;d++){let g=S[d];o.forEach(w=>{g[w.key]!==null&&g[w.key]!==void 0&&w.keys.add(g[w.key])})}o.forEach(d=>{let m=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),g=ps.difference(m,[...d.keys].map(w=>w.toString()));for(let w=0,W=g.length;w<W;w++){let x=g[w];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:S?S.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new di(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=ps.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(Qe)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await br.getDataByHash(_),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let S=o[l],d=c.get(S);for(let m=0;m<u;m++){let g=n.columns[m],w=d[g]===void 0?null:d[g];this.data[s].__merged_data[S].push(w)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await se.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return I.error(hb.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await br.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(Qe)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Si,"SQLSearch");ZE.exports=Si});var hi=h((yG,ed)=>{"use strict";var fb=vE();ed.exports={searchByConditions:gb,searchByHash:Nb,searchByValue:pb,search:Ob};var $o=Ut(),jE=require("util"),mb=jE.callbackify($o.searchByHash),Rb=jE.callbackify($o.searchByValue),Ab=zE();async function gb(e){return $o.searchByConditions(e)}a(gb,"searchByConditions");function Nb(e,t){try{mb(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Nb,"searchByHash");function pb(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Rb(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(pb,"searchByValue");function Ob(e,t){try{let r=new fb(e);r.validate(),new Ab(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Ob,"search")});var Is=h((MG,nd)=>{"use strict";var Os=require("crypto"),rd="aes-256-cbc",Ib=32,bb=16,Ko=64,sd=32,Cb=Ko+sd,td=new Map;nd.exports={encrypt:Lb,decrypt:wb,createNatsTableStreamName:yb};function Lb(e){let t=Os.randomBytes(Ib),r=Os.randomBytes(bb),s=Os.createCipheriv(rd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(Lb,"encrypt");function wb(e){let t=e.substr(0,Ko),r=e.substr(Ko,sd),s=e.substr(Cb,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Os.createDecipheriv(rd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wb,"decrypt");function yb(e,t){let r=`${e}.${t}`,s=td.get(r);return s||(s=Os.createHash("md5").update(`${e}.${t}`).digest("hex"),td.set(r,s)),s}a(yb,"createNatsTableStreamName")});var Qo=h((HG,id)=>{"use strict";var Ub=f(),PG=Wt();function Wo(e,t){let r=Object.create(null);if(t.length===1&&Ub.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Wo,"parseRow");function Mb(e,t,r,s){let n=Wo(r,e);s.push(n)}a(Mb,"searchAll");function Db(e,t,r,s){let n=Wo(r,e);s[t]=n}a(Db,"searchAllToMap");function Pb(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Pb,"iterateDBI");function er(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(er,"pushResults");function Hb(e,t,r,s,n,i){t.toString().endsWith(e)&&er(t,r,s,n,i)}a(Hb,"endsWith");function Bb(e,t,r,s,n,i){t.toString().includes(e)&&er(t,r,s,n,i)}a(Bb,"contains");function vb(e,t,r,s,n,i){t>e&&er(t,r,s,n,i)}a(vb,"greaterThanCompare");function Gb(e,t,r,s,n,i){t>=e&&er(t,r,s,n,i)}a(Gb,"greaterThanEqualCompare");function Fb(e,t,r,s,n,i){t<e&&er(t,r,s,n,i)}a(Fb,"lessThanCompare");function qb(e,t,r,s,n,i){t<=e&&er(t,r,s,n,i)}a(qb,"lessThanEqualCompare");id.exports={parseRow:Wo,searchAll:Mb,searchAllToMap:Db,iterateDBI:Pb,endsWith:Hb,contains:Bb,greaterThanCompare:vb,greaterThanEqualCompare:Gb,lessThanCompare:Fb,lessThanEqualCompare:qb,pushResults:er}});var rr=h((qG,Ed)=>{"use strict";var Mt=q(),vG=N(),we=Wt(),Ti=ne(),J=He().LMDB_ERRORS_ENUM,GG=p(),xb=f(),fi=Qo(),{parseRow:Vb}=fi,FG=require("lmdb"),{OVERFLOW_MARKER:ad,MAX_SEARCH_KEY_LENGTH:kb}=Ti;function od(e,t,r,s=!1,n=void 0,i=void 0){return tr(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(od,"iterateFullIndex");function bs(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return tr(e,t,r,(l,E,S,d)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,E.getRange(x).map(G=>({value:G}))):E.getRange(x)})}a(bs,"iterateRangeBetween");function tr(e,t,r,s){let n=e.database||e,i=Mt.openDBI(n,r);i[Ti.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Mt.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(tr,"setupTransaction");function _d(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ad)){if(!n)if(r)n=Mt.openDBI(e,r);else{let c=Mt.listDBIs(e);for(let u=0,l=c.length;u<l&&(n=Mt.openDBI(e,c[u]),!n[Ti.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(_d,"getOverflowCheck");function Yb(e,t,r,s=!1,n=void 0,i=void 0){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return tr(e,t,t,(o,_,c)=>(mi(r),r=Cs(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>Vb(u.value,r))))}a(Yb,"searchAll");function $b(e,t,r,s=!1,n=void 0,i=void 0){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);mi(r),r=Cs(e.database||e,r);let o=new Map;for(let{key:_,value:c}of od(e,t,t,s,n,i))o.set(_,fi.parseRow(c,r));return o}a($b,"searchAllToMap");function Kb(e,t,r=!1,s=void 0,n=void 0){if(we.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=od(e,void 0,t,r,s,n),_=o.transaction,c=_d(_.database,_,void 0,t);for(let{key:u,value:l}of o){let E=c(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(Kb,"iterateDBI");function Wb(e,t){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);return Mt.statDBI(e,t).entryCount}a(Wb,"countAll");function Qb(e,t,r,s,n=!1,i=void 0,o=void 0){return Dt(e,r,s),tr(e,t,r,(_,c,u,l)=>(s=we.convertKeyValueToWrite(s),l===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(Qb,"equals");function Jb(e,t,r){return Dt(e,t,r),Mt.openDBI(e,t).getValuesCount(r)}a(Jb,"count");function Xb(e,t,r,s,n=!1,i=void 0,o=void 0){return Dt(e,r,s),tr(e,null,r,(_,c)=>{s=we.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let S of c.getKeys({transaction:_,start:s}))if(!S.startsWith(s)){E=S;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=c.getRange({transaction:_,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(S=>{let{key:d}=S;if(d!==E){if(d.toString().startsWith(s))return S;if(u===!0)return l.DONE}}),l.filter(S=>S)}else return l=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(Xb,"startsWith");function Zb(e,t,r,s,n=!1,i=void 0,o=void 0){return cd(e,t,r,s,n,i,o,!0)}a(Zb,"endsWith");function cd(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return Dt(e,r,s),tr(e,null,r,(c,u,l,E)=>{let S=_d(l,c,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let m=d.toString();return m.endsWith(ad)?u.getValues(d,{transaction:c}).map(g=>{let w=S(d,g);if(_?w.endsWith(s):w.includes(s))return{key:w,value:g}}).filter(g=>g):(_?m.endsWith(s):m.includes(s))?u[Ti.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(g=>({key:d,value:g})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cd,"contains");function zb(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),bs(e,t,r,s,c,n,i,o,!0,!1)}a(zb,"greaterThan");function jb(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),bs(e,t,r,s,c,n,i,o,!1,!1)}a(jb,"greaterThanEqual");function eC(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),bs(e,t,r,c,s,n,i,o,!1,!0)}a(eC,"lessThan");function tC(e,t,r,s,n=!1,i=void 0,o=void 0){Dt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),bs(e,t,r,c,s,n,i,o,!1,!1)}a(tC,"lessThanEqual");function rC(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(we.validateEnv(e),r===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(J.START_VALUE_REQUIRED);if(n===void 0)throw new Error(J.END_VALUE_REQUIRED);if(s=we.convertKeyValueToWrite(s),n=we.convertKeyValueToWrite(n),s>n)throw new Error(J.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return bs(e,t,r,s,n,i,o,_)}a(rC,"between");function sC(e,t,r,s){we.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(mi(r),r=Cs(n,r),s===void 0)throw new Error(J.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=fi.parseRow(_,r)),o}a(sC,"searchByHash");function nC(e,t,r){we.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(nC,"checkHashExists");function iC(e,t,r,s,n=[]){return ld(e,t,r,s,n),ud(e,t,r,s,n).map(i=>i[1])}a(iC,"batchSearchByHash");function aC(e,t,r,s,n=[]){ld(e,t,r,s,n);let i=new Map;for(let[o,_]of ud(e,t,r,s,n))i.set(o,_);return i}a(aC,"batchSearchByHashToMap");function ud(e,t,r,s,n=[]){return tr(e,t,t,(i,o,_)=>{r=Cs(_,r);let c=r.length<3;return s.map(u=>{let l=_.dbis[t].get(u,{transaction:i,lazy:c});if(l)return[u,fi.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(ud,"batchHashSearch");function ld(e,t,r,s,n){if(we.validateEnv(e),t===void 0)throw new Error(J.HASH_ATTRIBUTE_REQUIRED);if(mi(r),s==null)throw new Error(J.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(J.IDS_MUST_BE_ITERABLE)}a(ld,"initializeBatchSearchByHash");function mi(e){if(!Array.isArray(e))throw e===void 0?new Error(J.FETCH_ATTRIBUTES_REQUIRED):new Error(J.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(mi,"validateFetchAttributes");function Dt(e,t,r){if(we.validateEnv(e),t===void 0)throw new Error(J.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(J.SEARCH_VALUE_REQUIRED);if(r?.length>kb)throw new Error(J.SEARCH_VALUE_TOO_LARGE)}a(Dt,"validateComparisonFunctions");function Cs(e,t){return t.length===1&&xb.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Mt.listDBIs(e)),t}a(Cs,"setGetWholeRowAttributes");Ed.exports={searchAll:Yb,searchAllToMap:$b,count:Jb,countAll:Wb,equals:Qb,startsWith:Xb,endsWith:Zb,contains:cd,searchByHash:sC,setGetWholeRowAttributes:Cs,batchSearchByHash:iC,batchSearchByHashToMap:aC,checkHashExists:nC,iterateDBI:Kb,greaterThan:zb,greaterThanEqual:jb,lessThan:eC,lessThanEqual:tC,between:rC}});var ws=h((VG,Ad)=>{"use strict";var Sd=hi(),Pt=N(),hd=Qn(),oC=require("lodash"),_C=Is(),Td=p(),{promisify:fd}=require("util"),k=f(),{handleHDBError:Ri,hdb_errors:cC}=Y(),{HDB_ERROR_MSGS:Ai,HTTP_STATUS_CODES:md}=cC,uC=$();uC.initSync();var dd=q(),lC=rr(),{getSchemaPath:EC}=K(),Ls=fd(Sd.searchByValue),dC=fd(Sd.searchByHash),Cr="name",Rd="hash_attribute",Jo="schema",SC="schema_table",hC="attribute";Ad.exports={describeAll:TC,describeTable:gi,describeSchema:mC};async function TC(e){try{let t=Td.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Cr,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Cr]},i=await Ls(n),o={},_={};for(let S of i)o[S.name]=!0,!t&&!s&&(_[S.name]=r[S.name].describe);let c={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:k.ID_ATTRIBUTE_STRING,search_value:k.WILDCARD_SEARCH_VALUE,get_attributes:[Rd,k.ID_ATTRIBUTE_STRING,Cr,Jo]},u=await Ls(c),l=[];for(let S of u)try{let d;if(t||s)d=await gi({schema:S.schema,table:S.name});else if(r&&r[S.schema].describe&&r[S.schema].tables[S.name].describe){let m=r[S.schema].tables[S.name].attribute_permissions;d=await gi({schema:S.schema,table:S.name},m)}d&&l.push(d)}catch(d){Pt.error(d)}let E={};for(let S in l)t||s?(E[l[S].schema]==null&&(E[l[S].schema]={}),E[l[S].schema][l[S].name]=l[S],o[l[S].schema]&&delete o[l[S].schema]):_[l[S].schema]&&(E[l[S].schema]==null&&(E[l[S].schema]={}),E[l[S].schema][l[S].name]=l[S],o[l[S].schema]&&delete o[l[S].schema]);for(let S in o)t||s?E[S]={}:_[S]&&(E[S]={});return E}catch(t){return Pt.error("Got an error in describeAll"),Pt.error(t),Ri(new Error,Ai.DESCRIBE_ALL_ERR)}}a(TC,"describeAll");async function gi(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=hd.describe_table(e);if(o)throw o;if(r===k.SYSTEM_SCHEMA_NAME)return global.hdb_schema[k.SYSTEM_SCHEMA_NAME][s];let _={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Cr,search_value:s,hash_values:[],get_attributes:[k.WILDCARD_SEARCH_VALUE]},c=Array.from(await Ls(_));if(!c||c.length===0)throw Ri(new Error,Ai.TABLE_NOT_FOUND(e.schema,e.table),md.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Ri(new Error,Ai.INVALID_TABLE_ERR(i));let l={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:SC,search_value:r+"."+s,get_attributes:[hC]},E=Array.from(await Ls(l));E=oC.uniqBy(E,S=>S.attribute),n&&n.length>0&&(E=fC(n)),i.attributes=E,i.clustering_stream_name=_C.createNatsTableStreamName(u.schema,u.name);try{let S=EC(i.schema,i.name),d=await dd.openEnvironment(S,i.name),m=dd.statDBI(d,i.hash_attribute);i.record_count=m.entryCount;for(let{key:g}of lC.lessThan(d,i.hash_attribute,k.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=g}catch(S){Pt.warn(`unable to stat table dbi due to ${S}`)}}catch(l){Pt.error(`There was an error getting attributes for table '${u.name}'`),Pt.error(l)}return i}a(gi,"descTable");function fC(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(fC,"getAttrsByPerms");async function mC(e){let t=hd.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Jo,search_value:s,hash_values:[],get_attributes:[Rd,k.ID_ATTRIBUTE_STRING,Cr,Jo]},i=Array.from(await Ls(n));if(i&&i.length<1){let o={schema:k.SYSTEM_SCHEMA_NAME,table:k.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:k.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Cr]},_=Array.from(await dC(o));if(_&&_.length<1)throw Ri(new Error,Ai.SCHEMA_NOT_FOUND(e.schema),md.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Td.isEmpty(c)||c.describe){let u=await gi({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Pt.error(`Error describing schema table '${e.schema}.${_}'`),Pt.error(c)}})),o}}a(mC,"describeSchema")});var ys=h((YG,Id)=>{var Lr=Zt(),{callbackify:pd,promisify:RC}=require("util");Id.exports={setSchemaDataToGlobal:gd,getTableSchema:NC,getSystemSchema:OC,setSchemaDataToGlobalAsync:RC(gd)};var Od=ws(),AC=pd(Od.describeAll),gC=pd(Od.describeTable);function gd(e){AC(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Lr),global.hdb_schema=r,e(null,null)})}a(gd,"setSchemaDataToGlobal");function Nd(e,t){return e==="system"?Lr[t]:global.hdb_schema[e][t]}a(Nd,"returnSchema");function NC(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?pC(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,Nd(e,t))}):r(null,Nd(e,t))}a(NC,"getTableSchema");function pC(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Lr:global.hdb_schema={system:Lr},r();return}gC(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Lr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(pC,"setTableDataToGlobal");function OC(){return Lr}a(OC,"getSystemSchema")});var wd=h((KG,Ld)=>{var IC=ke(),Xo=require("joi"),{hdb_schema_table:bd}=Kt(),Cd={schema:bd,table:bd},bC={date:Xo.date().iso().required()},CC={timestamp:Xo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ld.exports=function(e,t){let r=t==="timestamp"?{...Cd,...CC}:{...Cd,...bC},s=Xo.object(r);return IC.validateBySchema(e,s)}});var Dd=h((WG,Md)=>{var LC=ke(),yd=require("joi"),{hdb_schema_table:Ud}=Kt(),wC=yd.object({schema:Ud,table:Ud,hash_values:yd.array().required()});Md.exports=function(e){return LC.validateBySchema(e,wC)}});var Hd=h((QG,Pd)=>{"use strict";var Ni=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Ni,"InsertObject");var pi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(pi,"NoSQLSeachObject");var Oi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Oi,"DeleteResponseObject");Pd.exports={InsertObject:Ni,NoSQLSeachObject:pi,DeleteResponseObject:Oi}});var jo=h((XG,qd)=>{"use strict";var vd=wd(),yC=Dd(),Ii=p(),Bd=require("moment"),Gd=N(),{promisify:UC,callbackify:MC}=require("util"),sr=f(),DC=ys(),Zo=UC(DC.getTableSchema),zo=Ut(),{DeleteResponseObject:PC}=Hd(),{handleHDBError:Ht,hdb_errors:HC}=Y(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Bt}=HC,BC="records successfully deleted",vC=MC(Fd);qd.exports={delete:vC,deleteRecord:Fd,deleteFilesBefore:GC,deleteAuditLogsBefore:FC};async function GC(e){let t=vd(e,"date");if(t)throw Ht(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(!Bd(e.date,Bd.ISO_8601).isValid())throw Ht(new Error,bi.INVALID_DATE,Bt.BAD_REQUEST,sr.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ii.checkSchemaTableExist(e.schema,e.table);if(s)throw Ht(new Error,s,Bt.NOT_FOUND,sr.LOG_LEVELS.ERROR,s,!0);let n=await zo.deleteRecordsBefore(e);if(await Zo(e.schema,e.table),Gd.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(GC,"deleteFilesBefore");async function FC(e){let t=vd(e,"timestamp");if(t)throw Ht(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Ht(new Error,bi.INVALID_VALUE("Timestamp"),Bt.BAD_REQUEST,sr.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ii.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,Bt.NOT_FOUND,sr.LOG_LEVELS.ERROR,r,!0);let s=await zo.deleteAuditLogsBefore(e);return await Zo(e.schema,e.table),Gd.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(FC,"deleteAuditLogsBefore");async function Fd(e){let t=yC(e);if(t)throw Ht(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);let r=Ii.checkSchemaTableExist(e.schema,e.table);if(r)throw Ht(new Error,r,Bt.NOT_FOUND,sr.LOG_LEVELS.ERROR,r,!0);try{await Zo(e.schema,e.table);let s=await zo.deleteRecords(e);return Ii.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${BC}`),s}catch(s){if(s.message===sr.SEARCH_NOT_FOUND_MESSAGE){let n=new PC;return n.message=sr.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Fd,"deleteRecord")});var Vd=h((zG,xd)=>{var e_=ke(),_e={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 qC(e){return _e.password.presence=!0,_e.username.presence=!0,_e.role.presence=!0,_e.active.presence=!0,e_.validateObject(e,_e)}a(qC,"addUserValidation");function xC(e){return _e.password.presence=!1,_e.username.presence=!0,_e.role.presence=!1,_e.active.presence=!1,e_.validateObject(e,_e)}a(xC,"alterUserValidation");function VC(e){return _e.password.presence=!1,_e.username.presence=!0,_e.role.presence=!1,_e.active.presence=!1,e_.validateObject(e,_e)}a(VC,"dropUserValidation");xd.exports={addUserValidation:qC,alterUserValidation:xC,dropUserValidation:VC}});var ce=h((tF,Yd)=>{"use strict";var{platform:eF}=require("os"),kC="nats-server.zip",t_="nats-server",YC=process.platform==="win32"?`${t_}.exe`:t_,r_="HDB",$C=/^[^\s.,*>]+$/,kd="__request__",KC=a(e=>`${e}.${kd}`,"REQUEST_SUBJECT"),WC={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},QC={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},JC={HUB:"hub.pid",LEAF:"leaf.pid"},XC={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},ZC={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:r_,deliver_subject:"__HDB__.WORKQUEUE"},zC={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:r_,deliver_subject:"HDB.SCHEMAQUEUE"},jC={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:r_,deliver_subject:"HDB.USERQUEUE"},eL={SUCCESS:"success",ERROR:"error"},tL={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},rL={TXN:"txn",MSGID:"msgid"},wr={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sL={[wr.ERR]:1,[wr.WRN]:2,[wr.INF]:3,[wr.DBG]:4,[wr.TRC]:5},nL={debug:"-D",trace:"-DVV"};Yd.exports={NATS_SERVER_ZIP:kC,NATS_SERVER_NAME:t_,NATS_BINARY_NAME:YC,PID_FILES:JC,NATS_CONFIG_FILES:QC,SERVER_SUFFIX:XC,WORK_QUEUE_CONSUMER_NAMES:ZC,SCHEMA_QUEUE_CONSUMER_NAMES:zC,USER_QUEUE_CONSUMER_NAMES:jC,NATS_TERM_CONSTRAINTS_RX:$C,REQUEST_SUFFIX:kd,UPDATE_REMOTE_RESPONSE_STATUSES:eL,CLUSTER_STATUS_STATUSES:tL,REQUEST_SUBJECT:KC,SUBJECT_PREFIXES:rL,MSG_HEADERS:WC,LOG_LEVELS:wr,LOG_LEVEL_FLAGS:nL,LOG_LEVEL_HIERARCHY:sL}});var Ur=h((nF,iS)=>{"use strict";var Jd="username is required",Xd="nothing to update, must supply active, role or password to update",Zd="password cannot be an empty string",zd="If role is specified, it cannot be empty.",jd="active must be true or false";iS.exports={addUser:EL,alterUser:dL,dropUser:hL,userInfo:TL,listUsers:Li,listUsersExternal:fL,setUsersToGlobal:Us,findAndValidateUser:AL,getClusterUser:gL,USERNAME_REQUIRED:Jd,ALTERUSER_NOTHING_TO_UPDATE:Xd,EMPTY_PASSWORD:Zd,EMPTY_ROLE:zd,ACTIVE_BOOLEAN:jd};var eS=wi(),iL=jo(),n_=ii(),tS=Vd(),rS=hi(),i_=Ms(),ye=p(),sS=require("validate.js"),b=N(),{promisify:a_}=require("util"),o_=Is(),$d=f(),Kd=ce(),aL=ss(),sF=$(),oL=oi(),_L=Zt(),{handleHDBError:st,hdb_errors:cL}=Y(),{HTTP_STATUS_CODES:nt,AUTHENTICATION_ERROR_MSGS:s_,HDB_ERROR_MSGS:yr}=cL,{UserEventMsg:__}=nr(),Wd=require("lodash"),nS={username:!0,active:!0,role:!0,password:!0},Qd=new Map,Ci=a_(rS.searchByValue),uL=a_(rS.searchByHash),lL=a_(iL.delete);async function EL(e){let t=sS.cleanAttributes(e,nS),r=tS.addUserValidation(t);if(r)throw st(new Error,r.message,nt.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Ci(s),n=n&&Array.from(n)}catch(c){throw b.error("There was an error searching for a role in add user"),b.error(c),c}if(!n||n.length<1)throw st(new Error,yr.ROLE_NAME_NOT_FOUND(t.role),nt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw st(new Error,yr.DUP_ROLES_FOUND(t.role),nt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=o_.encrypt(t.password)),t.password=n_.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await eS.insert(i)}catch(c){throw b.error("There was an error searching for a user."),b.error(c),c}b.debug(o);try{await Us()}catch(c){throw b.error("Got an error setting users to global"),b.error(c),c}if(o.skipped_hashes.length===1)throw st(new Error,yr.USER_ALREADY_EXISTS(t.username),nt.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],i_.signalUserChange(new __(process.pid)),`${_.username} successfully added`}a(EL,"addUser");async function dL(e){let t=sS.cleanAttributes(e,nS);if(ye.isEmptyOrZeroLength(t.username))throw new Error(Jd);if(ye.isEmptyOrZeroLength(t.password)&&ye.isEmptyOrZeroLength(t.role)&&ye.isEmptyOrZeroLength(t.active))throw new Error(Xd);if(!ye.isEmpty(t.password)&&ye.isEmptyOrZeroLength(t.password.trim()))throw new Error(Zd);if(!ye.isEmpty(t.active)&&!ye.isBoolean(t.active))throw new Error(jd);let r=SL(t.username);if(!ye.isEmpty(t.password)&&!ye.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=o_.encrypt(t.password)),t.password=n_.hash(t.password)),t.role==="")throw new Error(zd);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 Ci(i)||[])}catch(_){throw b.error("Got an error searching for a role."),b.error(_),_}if(!o||o.length===0){let _=yr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw b.error(_),st(new Error,_,nt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=yr.ALTER_USER_DUP_ROLES(t.role);throw b.error(_),st(new Error,_,nt.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await eS.update(s)}catch(i){throw b.error("Error during update."),b.error(i),i}try{await Us()}catch(i){throw b.error("Got an error setting users to global"),b.error(i),i}return i_.signalUserChange(new __(process.pid)),n}a(dL,"alterUser");function SL(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(SL,"isClusterUser");async function hL(e){try{let t=tS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ye.isEmpty(global.hdb_users.get(e.username)))throw st(new Error,yr.USER_NOT_EXIST(e.username),nt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await lL(r)}catch(n){throw b.error("Got an error deleting a user."),b.error(n),n}b.debug(s);try{await Us()}catch(n){throw b.error("Got an error setting users to global."),b.error(n),n}return i_.signalUserChange(new __(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(hL,"dropUser");async function TL(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await uL(r)}catch(n){throw b.error("Got an error searching for a role."),b.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw b.error(r),r}return t}a(TL,"userInfo");async function fL(){let e;try{e=await Li()}catch(t){throw b.error("Got an error listing users."),b.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(fL,"listUsersExternal");async function Li(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ci(e)}catch(o){throw b.error("Got an error searching for roles."),b.error(o),o}let r={};for(let o of t)r[o.id]=Wd.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Ci(s)}catch(o){throw b.error("Got an error searching for users."),b.error(o),o}let i=new Map;for(let o of n)o=Wd.cloneDeep(o),o.role=r[o.role],mL(o.role),i.set(o.username,o);return(await oL.getLicense()).enterprise?i:RL(Array.from(i.values()))}catch(e){throw b.error("got an error listing users"),b.error(e),ye.errorizeMessage(e)}return null}a(Li,"listUsers");function mL(e){try{if(!e){b.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(_L)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){b.error("Got an error trying to set system permissions."),b.error(t)}}a(mL,"appendSystemTablesToRole");function RL(e){try{if(b.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1)?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(n.username,n)):r.set(n.username,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(b.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return b.error("error filtering users."),b.error(t),new Map}}a(RL,"nonEnterpriseFilter");async function Us(){try{let e=await Li();global.hdb_users=e}catch(e){throw b.error(e),e}}a(Us,"setUsersToGlobal");async function AL(e,t,r=!0){global.hdb_users||await Us();let s=global.hdb_users.get(e);if(!s)throw st(new Error,s_.GENERIC_AUTH_FAIL,nt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw st(new Error,s_.USER_INACTIVE,nt.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Qd.get(t)===s.password)return n;if(n_.validate(s.password,t))Qd.set(t,s.password);else throw st(new Error,s_.GENERIC_AUTH_FAIL,nt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(AL,"findAndValidateUser");async function gL(){let e=await Li(),t=aL.getConfigFromFile($d.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ye.isEmpty(r)&&r?.role?.role===$d.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=o_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Kd.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Kd.SERVER_SUFFIX.ADMIN,r}a(gL,"getClusterUser")});var yi=h((aF,cS)=>{"use strict";var ir=N(),Ue=f(),NL=OE(),aS=ys(),pL=ws(),OL=Ur(),{validateEvent:_S}=nr(),Ds=Ut(),IL=require("process"),bL={[Ue.ITC_EVENT_TYPES.SCHEMA]:CL,[Ue.ITC_EVENT_TYPES.USER]:wL};async function CL(e){let t=_S(e);if(t){ir.error(t);return}ir.trace("ITC schemaHandler received schema event:",e),await NL(e.message),await LL(e.message)}a(CL,"schemaHandler");async function LL(e){try{if(Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await pL.describeTable({schema:e.schema,table:e.table});break;default:aS.setSchemaDataToGlobal(oS);break}else aS.setSchemaDataToGlobal(oS)}catch(t){ir.error(t)}}a(LL,"syncSchemaMetadata");function oS(e){e&&ir.error(e)}a(oS,"handleErrorCallback");async function wL(e){try{Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ds.resetReadTxn(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=_S(e);if(t){ir.error(t);return}ir.trace(`ITC userHandler ${Ue.HDB_ITC_CLIENT_PREFIX}${IL.pid} received user event:`,e),await OL.setUsersToGlobal()}catch(t){ir.error(t)}}a(wL,"userHandler");cS.exports=bL});var nr=h((lF,lS)=>{"use strict";var _F=N(),c_=p(),yL=f(),{ITC_ERRORS:Ps}=He(),{parentPort:cF,threadId:UL,isMainThread:ML,workerData:uF}=require("worker_threads"),{onMessageFromWorkers:DL,broadcast:PL}=ui();lS.exports={sendItcEvent:HL,validateEvent:uS,SchemaEventMsg:BL,UserEventMsg:vL};var Ui;DL(e=>{Ui=Ui||yi(),uS(e),Ui[e.type]&&Ui[e.type](e)});function HL(e){!ML&&e.message&&(e.message.originator=UL),PL(e)}a(HL,"sendItcEvent");function uS(e){if(typeof e!="object")return Ps.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||c_.isEmpty(e.type))return Ps.MISSING_TYPE;if(!e.hasOwnProperty("message")||c_.isEmpty(e.message))return Ps.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||c_.isEmpty(e.message.originator))return Ps.MISSING_ORIGIN;if(yL.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ps.INVALID_EVENT(e.type)}a(uS,"validateEvent");function BL(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(BL,"SchemaEventMsg");function vL(e){this.originator=e}a(vL,"UserEventMsg")});var Ms=h((SF,hS)=>{"use strict";var ES=f(),dF=p(),Mi=N(),dS=zl(),Mr,{sendItcEvent:SS}=nr();function GL(e){try{Mi.trace("signalSchemaChange called with message:",e),Mr=Mr||yi();let t=new dS(ES.ITC_EVENT_TYPES.SCHEMA,e);Mr.schema(t),SS(t)}catch(t){Mi.error(t)}}a(GL,"signalSchemaChange");function FL(e){try{Mi.trace("signalUserChange called with message:",e),Mr=Mr||yi();let t=new dS(ES.ITC_EVENT_TYPES.USER,e);Mr.user(t),SS(t)}catch(t){Mi.error(t)}}a(FL,"signalUserChange");hS.exports={signalSchemaChange:GL,signalUserChange:FL}});var Di=h((TF,fS)=>{"use strict";var TS=p(),qL=f(),xL=N(),VL=zn(),kL=Zn(),YL=Ms(),{SchemaEventMsg:$L}=nr(),KL="already exists in";fS.exports=WL;async function WL(e,t,r){if(TS.isEmptyOrZeroLength(r))return r;let s=[];TS.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await QL(e,t.schema,t.name,i)})),n}a(WL,"lmdbCheckForNewAttributes");async function QL(e,t,r,s){let n=new kL(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await JL(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(KL))xL.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(QL,"createNewAttribute");async function JL(e){let t;return t=await VL(e),YL.signalSchemaChange(new $L(process.pid,qL.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(JL,"createAttribute")});var Dr=h((mF,mS)=>{"use strict";var Pi=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(Pi,"LMDBTransactionObject");mS.exports=Pi});var AS=h((AF,RS)=>{"use strict";var XL=Dr(),ZL=f().OPERATIONS_ENUM,Hi=class extends XL{constructor(t,r,s,n,i=void 0){super(ZL.INSERT,r,s,n,i),this.records=t}};a(Hi,"LMDBInsertTransactionObject");RS.exports=Hi});var NS=h((NF,gS)=>{"use strict";var zL=Dr(),jL=f().OPERATIONS_ENUM,Bi=class extends zL{constructor(t,r,s,n,i,o=void 0){super(jL.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Bi,"LMDBUpdateTransactionObject");gS.exports=Bi});var OS=h((OF,pS)=>{"use strict";var ew=Dr(),tw=f().OPERATIONS_ENUM,vi=class extends ew{constructor(t,r,s,n,i,o=void 0){super(tw.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(vi,"LMDBUpsertTransactionObject");pS.exports=vi});var bS=h((bF,IS)=>{"use strict";var rw=Dr(),sw=f().OPERATIONS_ENUM,Gi=class extends rw{constructor(t,r,s,n,i=void 0){super(sw.DELETE,s,n,t,i),this.original_records=r}};a(Gi,"LMDBDeleteTransactionObject");IS.exports=Gi});var Hs=h((wF,yS)=>{"use strict";var LF=require("path"),CS=q(),nw=AS(),iw=NS(),aw=OS(),ow=bS(),Pr=ne(),LS=p(),{CONFIG_PARAMS:_w}=f(),wS=$();wS.initSync();var Fi=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:cw}=K();yS.exports=uw;async function uw(e,t){if(wS.get(_w.LOGGING_AUDITLOG)===!1)return;let r=cw(e.schema,e.table),s=await CS.openEnvironment(r,e.table,!0),n=lw(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){CS.initializeDBIs(s,Pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Pr.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),LS.isEmpty(n.user_name)||s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(uw,"writeTransaction");function lw(e,t){let r=LS.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Fi.INSERT)return new nw(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Fi.UPDATE)return new iw(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Fi.UPSERT)return new aw(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Fi.DELETE)return new ow(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(lw,"createTransactionObject")});var u_=h((MF,US)=>{"use strict";var Ew=jn(),UF=ti(),Bs=f(),dw=si(),Sw=pr().insertRecords,hw=q(),Tw=N(),fw=Di(),{getSchemaPath:mw}=K(),Rw=Hs();US.exports=Aw;async function Aw(e){try{let{schema_table:t,attributes:r}=Ew(e);dw(e,r,t.hash_attribute),e.schema!==Bs.SYSTEM_SCHEMA_NAME&&(r.includes(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await fw(e.hdb_auth_header,t,r),n=mw(e.schema,e.table),i=await hw.openEnvironment(n,e.table),o=await Sw(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Rw(e,o)}catch(_){Tw.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Aw,"lmdbCreateRecords")});var PS=h((PF,DS)=>{"use strict";var MS=f(),gw=u_(),Nw=ti(),pw=require("fs-extra"),{getSchemaPath:Ow}=K();DS.exports=Iw;async function Iw(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Nw(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await gw(r),await pw.mkdirp(Ow(e.schema))}a(Iw,"lmdbCreateSchema")});var BS=h((BF,HS)=>{"use strict";var qi=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(qi,"DeleteRecordsResponseObject");HS.exports=qi});var d_=h((xF,FS)=>{"use strict";var vS=q(),l_=Wt(),E_=He().LMDB_ERRORS_ENUM,bw=ne(),GS=N(),GF=p(),Cw=require("lmdb"),Lw=BS(),ww=f(),{OVERFLOW_MARKER:FF,MAX_SEARCH_KEY_LENGTH:qF}=bw,yw=ww.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Uw(e,t,r,s){if(l_.validateEnv(e),t===void 0)throw new Error(E_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(E_.IDS_REQUIRED):new Error(E_.IDS_MUST_BE_ITERABLE);try{let n=vS.listDBIs(e);vS.initializeDBIs(e,t,n);let i=new Lw,o,_=[],c=[];for(let S=0,d=r.length;S<d;S++)try{o=r[S];let m=e.dbis[t].get(o);if(!m||s&&m[yw]>s){i.skipped.push(o);continue}let g=e.dbis[t].ifVersion(o,Cw.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let w=0;w<n.length;w++){let W=n[w];if(!m.hasOwnProperty(W)||W===t)continue;let x=e.dbis[W],G=m[W];if(G!=null)try{let Pe=l_.getIndexedValues(G);if(Pe)for(let Yt=0,hr=Pe.length;Yt<hr;Yt++)x.remove(Pe[Yt],o)}catch{GS.warn(`cannot delete from attribute: ${W}, ${G}:${o}`)}}});_.push(g),c.push(o),i.original_records.push(m)}catch(m){GS.warn(m),i.skipped.push(o)}let u=[],l=await Promise.all(_);for(let S=0,d=l.length;S<d;S++)l[S]===!0?i.deleted.push(c[S]):(i.skipped.push(c[S]),u.push(S));let E=0;for(let S=0;S<u.length;S++){let d=u[S];i.original_records.splice(d-E,1),E++}return i.txn_time=l_.getNextMonotonicTime(),i}catch(n){throw n}}a(Uw,"deleteRecords");FS.exports={deleteRecords:Uw}});var vs=h((kF,xS)=>{"use strict";var Hr=p(),Mw=d_(),Dw=q(),{getSchemaPath:Pw}=K(),Hw=Hs(),Bw=N();xS.exports=vw;async function vw(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Hr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Hr.isEmptyOrZeroLength(e.hash_values)&&!Hr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Hr.isEmpty(c)||e.hash_values.push(c)}}if(Hr.isEmptyOrZeroLength(e.hash_values))return qS([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Hr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Pw(e.schema,e.table),i=await Dw.openEnvironment(n,e.table),o=await Mw.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Hw(e,o)}catch(_){Bw.error(`unable to write transaction due to ${_.message}`)}return qS(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(vw,"lmdbDeleteRecords");function qS(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(qS,"createDeleteResponse")});var Gs=h((KF,$S)=>{var VS=require("lodash"),kS=ke(),B=require("joi"),Gw=p(),{hdb_schema_table:Je,checkValidTable:YS}=Kt(),{handleHDBError:Fw,hdb_errors:qw}=Y(),{HTTP_STATUS_CODES:xw}=qw,$F=B.object({schema:Je,table:Je,hash_values:B.array().min(0).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(Je).required()}),Vw=B.object({schema:Je,table:Je,search_attribute:Je,search_value:B.any().required(),get_attributes:B.array().min(1).items(Je).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),kw=B.object({schema:Je,table:Je,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(Je).required(),conditions:B.array().min(1).items(B.object({search_attribute:Je,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});$S.exports=function(e,t){let r=null;switch(t){case"value":r=kS.validateBySchema(e,Vw);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(YS("schema",e.schema)),i(YS("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=kS.validateBySchema(e,kw);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Gw.checkGlobalSchemaTable(e.schema,e.table);if(n)return Fw(new Error,n,xw.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=VS.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!VS.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var S_=h((QF,KS)=>{"use strict";var Yw=q(),$w=Gs(),{getSchemaPath:Kw}=K();KS.exports=Ww;function Ww(e){let t=$w(e,"hashes");if(t)throw t;let r=Kw(e.schema,e.table);return Yw.openEnvironment(r,e.table)}a(Ww,"initialize")});var h_=h((XF,WS)=>{"use strict";var Qw=rr(),Jw=S_();WS.exports=Xw;async function Xw(e){let t=await Jw(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Qw.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Xw,"lmdbGetDataByHash")});var Vi=h((zF,QS)=>{"use strict";var xi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(xi,"SearchByHashObject");QS.exports=xi});var XS=h((tq,JS)=>{"use strict";var eq=Vi(),Zw=rr(),zw=S_();JS.exports=jw;async function jw(e){let t=await zw(e),r=global.hdb_schema[e.schema][e.table];return Zw.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(jw,"lmdbSearchByHash")});var Tt=h((sq,ZS)=>{"use strict";var ki=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};a(ki,"SearchObject");ZS.exports=ki});var Yi=h((iq,sh)=>{"use strict";var ue=rr(),ey=q(),ty=p(),A=ne(),ar=f(),ry=Zt(),zS=He().LMDB_ERRORS_ENUM,{compareKeys:Br}=require("ordered-binary"),{getSchemaPath:sy}=K(),ft=ar.SEARCH_WILDCARDS;async function ny(e,t,r){let s;e.schema===ar.SYSTEM_SCHEMA_NAME?s=ry[e.table]:s=global.hdb_schema[e.schema][e.table];let n=rh(e,s.hash_attribute,r,t);return eh(e,n,s.hash_attribute,r)}a(ny,"prepSearch");async function eh(e,t,r,s){let n=sy(e.schema,e.table),i=await ey.openEnvironment(n,e.table),o=th(i,e,t,r),_=o.transaction||i;if([A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,A.SEARCH_TYPES.SEARCH_ALL,A.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(ay(e,r)===!1){let l=e.search_attribute;if(l===r)return s?jS(o,()=>!0):o.map(S=>({[r]:S.key}));let E=a(S=>({[r]:S.value,[l]:S.key}),"toObject");return s?jS(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ue.batchSearchByHashToMap(_,r,e.get_attributes,u):ue.batchSearchByHash(_,r,e.get_attributes,u)}a(eh,"executeSearch");function th(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case A.SEARCH_TYPES.EQUALS:n=ue.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.CONTAINS:n=ue.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.ENDS_WITH:case A.SEARCH_TYPES._ENDS_WITH:n=ue.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.STARTS_WITH:case A.SEARCH_TYPES._STARTS_WITH:n=ue.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ue.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ue.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case A.SEARCH_TYPES.SEARCH_ALL:return ue.searchAll(e,s,t.get_attributes,o,_,c);case A.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ue.searchAllToMap(e,s,t.get_attributes,o,_,c);case A.SEARCH_TYPES.BETWEEN:n=ue.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case A.SEARCH_TYPES.GREATER_THAN:case A.SEARCH_TYPES._GREATER_THAN:n=ue.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.GREATER_THAN_EQUAL:case A.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ue.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.LESS_THAN:case A.SEARCH_TYPES._LESS_THAN:n=ue.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case A.SEARCH_TYPES.LESS_THAN_EQUAL:case A.SEARCH_TYPES._LESS_THAN_EQUAL:n=ue.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(th,"searchByType");function iy(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case A.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case A.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case A.SEARCH_TYPES.ENDS_WITH:case A.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case A.SEARCH_TYPES.STARTS_WITH:case A.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case A.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Br(i,s[0])>=0&&Br(i,s[1])<=0};case A.SEARCH_TYPES.GREATER_THAN:case A.SEARCH_TYPES._GREATER_THAN:return n=>Br(n[r],s)>0;case A.SEARCH_TYPES.GREATER_THAN_EQUAL:case A.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Br(n[r],s)>=0;case A.SEARCH_TYPES.LESS_THAN:case A.SEARCH_TYPES._LESS_THAN:return n=>Br(n[r],s)<0;case A.SEARCH_TYPES.LESS_THAN_EQUAL:case A.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Br(n[r],s)<=0;default:return Object.create(null)}}a(iy,"filterByType");function jS(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(jS,"createMapFromIterable");function ay(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(ay,"checkToFetchMore");function rh(e,t,r,s){if(ty.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),ft.indexOf(n)>-1)return r===!0?A.SEARCH_TYPES.SEARCH_ALL_TO_MAP:A.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ft[0])<0&&n.indexOf(ft[1])<0)return _===!0?r===!0?A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:A.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:A.SEARCH_TYPES.EQUALS;if(ft.indexOf(i)>=0&&ft.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),A.SEARCH_TYPES.CONTAINS;if(ft.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),A.SEARCH_TYPES.ENDS_WITH;if(ft.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),A.SEARCH_TYPES.STARTS_WITH;if(n.includes(ft[0])||n.includes(ft[1]))return A.SEARCH_TYPES.EQUALS;throw new Error(zS.UNKNOWN_SEARCH_TYPE)}else switch(s){case ar.VALUE_SEARCH_COMPARATORS.BETWEEN:return A.SEARCH_TYPES.BETWEEN;case ar.VALUE_SEARCH_COMPARATORS.GREATER:return A.SEARCH_TYPES.GREATER_THAN;case ar.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return A.SEARCH_TYPES.GREATER_THAN_EQUAL;case ar.VALUE_SEARCH_COMPARATORS.LESS:return A.SEARCH_TYPES.LESS_THAN;case ar.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return A.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(zS.UNKNOWN_SEARCH_TYPE)}}a(rh,"createSearchTypeFromSearchObject");sh.exports={executeSearch:eh,createSearchTypeFromSearchObject:rh,prepSearch:ny,searchByType:th,filterByType:iy}});var ih=h((_q,nh)=>{"use strict";var oq=Tt(),oy=Gs(),_y=p(),cy=f(),uy=Yi();nh.exports=ly;function ly(e,t){if(!_y.isEmpty(t)&&cy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=oy(e,"value");if(s)throw s;let n=!0;return uy.prepSearch(e,t,n)}a(ly,"lmdbGetDataByValue")});var vr=h((lq,ah)=>{"use strict";var uq=Tt(),Ey=Gs(),dy=p(),Sy=f(),hy=Yi();ah.exports=Ty;async function Ty(e,t){if(!dy.isEmpty(t)&&Sy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Ey(e,"value");if(s)throw s;return hy.prepSearch(e,t,!1)}a(Ty,"lmdbSearchByValue")});var _h=h((Sq,oh)=>{"use strict";var dq=ne(),$i=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a($i,"SearchByConditionsObject");var Ki=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Ki,"SearchCondition");var Wi=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Wi,"SortAttribute");oh.exports={SearchByConditionsObject:$i,SearchCondition:Ki,SortAttribute:Wi}});var dh=h((fq,Eh)=>{"use strict";var Tq=_h().SearchByConditionsObject,fy=Tt(),my=Gs(),T_=rr(),Qi=ne(),lh=Yi(),Ry=Qo(),Ay=require("lodash"),{getSchemaPath:gy}=K(),ch=q(),{handleHDBError:Ny,hdb_errors:py}=Y(),{HTTP_STATUS_CODES:Oy}=py,Iy=1e8;Eh.exports=by;async function by(e){let t=my(e,"conditions");if(t)throw Ny(t,t.message,Oy.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=gy(e.schema,e.table),s=await ch.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)ch.openDBI(s,u.search_attribute);let i=Ay.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Qi.SEARCH_TYPES.EQUALS?u.estimated_count=T_.count(s,u.search_attribute,u.search_value):l===Qi.SEARCH_TYPES.CONTAINS||l===Qi.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Iy}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await uh(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(lh.filterByType),E=l.length,S=T_.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),E>0&&(c=c.filter(d=>{for(let m=0;m<E;m++)if(!l[m](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>Ry.parseRow(d,S))}else{for(let E=1;E<i.length;E++){let S=i[E],d=await uh(o,e,S,n.hash_attribute);_=_.concat(d)}let u=new Set,l=e.offset||0;_=_.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),c=T_.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(by,"lmdbSearchByConditions");async function uh(e,t,r,s){let n=new fy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Qi.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,lh.searchByType(e,n,i,s).map(o=>o.value)}a(uh,"executeConditionSearch")});var Fs=h((Rq,Sh)=>{"use strict";var Cy=f().OPERATIONS_ENUM,Ji=class{constructor(t,r,s,n=void 0){this.operation=Cy.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ji,"DeleteObject");Sh.exports=Ji});var f_=h((gq,Nh)=>{"use strict";var mh=Tt(),Rh=Fs(),Ah=vr(),gh=vs(),Te=f(),hh=p(),Th=q(),{getTransactionAuditStorePath:Ly,getSchemaPath:wy}=K(),fh=N();Nh.exports=yy;async function yy(e){try{if(hh.isEmpty(global.hdb_schema[e.schema])||hh.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Uy(e),await My(e);let t=wy(e.schema,e.table);try{await Th.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Ly(e.schema,e.table);await Th.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(yy,"lmdbDropTable");async function Uy(e){let t=new mh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Ah(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Rh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await gh(n)}a(Uy,"deleteAttributesFromSystem");async function My(e){let t=new mh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Te.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Ah(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Rh(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await gh(n)}catch(i){throw i}}a(My,"dropTableFromSystem")});var Oh=h((pq,ph)=>{"use strict";var Dy=require("fs-extra"),Py=Tt(),Hy=Vi(),By=Fs(),vy=f_(),Gy=vs(),Fy=h_(),qy=vr(),mt=f(),{getSchemaPath:xy}=K(),{handleHDBError:Vy,hdb_errors:ky}=Y(),{HDB_ERROR_MSGS:Yy,HTTP_STATUS_CODES:$y}=ky;ph.exports=Ky;async function Ky(e){let t;try{t=await Wy(e.schema);let r=new Py(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await qy(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await vy(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new By(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Gy(n);let i=xy(t);await Dy.remove(i)}catch(r){throw r}}a(Ky,"lmdbDropSchema");async function Wy(e){let t=new Hy(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Fy(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Vy(new Error,Yy.SCHEMA_NOT_FOUND(e),$y.NOT_FOUND,void 0,void 0,!0);return s}a(Wy,"validateDropSchema")});var m_=h((Iq,Ih)=>{"use strict";var Xi=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Xi,"CreateTableObject");Ih.exports=Xi});var Ch=h((Lq,bh)=>{"use strict";var Qy=require("fs-extra"),Zi=q(),{getTransactionAuditStorePath:Jy}=K(),R_=ne(),Cq=m_();bh.exports=Xy;async function Xy(e){let t;try{let r=Jy(e.schema,e.table);await Qy.mkdirp(r),t=await Zi.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{Zi.createDBI(t,R_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Zi.createDBI(t,R_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Zi.createDBI(t,R_.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(Xy,"createTransactionsAuditEnvironment")});var Uh=h((yq,yh)=>{"use strict";var A_=f(),Lh=q(),Zy=pr(),{getSystemSchemaPath:zy,getSchemaPath:jy}=K(),eU=Zt(),tU=zn(),g_=Zn(),rU=N(),sU=Ch(),p_=eU.hdb_table,wh=[];for(let e=0;e<p_.attributes.length;e++)wh.push(p_.attributes[e].attribute);yh.exports=nU;async function nU(e,t){let r=jy(t.schema,t.table),s=new g_(t.schema,t.table,A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new g_(t.schema,t.table,A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new g_(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Lh.createEnvironment(r,t.table),e!==void 0){let o=await Lh.openEnvironment(zy(),A_.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Zy.insertRecords(o,p_.hash_attribute,wh,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await N_(s),await N_(n),await N_(i)}await sU(t)}catch(o){throw o}}a(nU,"lmdbCreateTable");async function N_(e){try{await tU(e)}catch(t){rU.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(N_,"createAttribute")});var Dh=h((Mq,Mh)=>{"use strict";var iU=jn(),aU=si(),oU=Di(),qs=f(),_U=pr().updateRecords,cU=q(),{getSchemaPath:uU}=K(),lU=Hs(),EU=N();Mh.exports=dU;async function dU(e){try{let{schema_table:t,attributes:r}=iU(e);aU(e,r,t.hash_attribute),e.schema!==qs.SYSTEM_SCHEMA_NAME&&(r.includes(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await oU(e.hdb_auth_header,t,r),n=uU(e.schema,e.table),i=await cU.openEnvironment(n,e.table),o=await _U(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await lU(e,o)}catch(_){EU.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(dU,"lmdbUpdateRecords")});var Hh=h((Pq,Ph)=>{"use strict";var SU=f().OPERATIONS_ENUM,zi=class{constructor(t,r,s,n=void 0){this.operation=SU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(zi,"UpsertObject");Ph.exports=zi});var vh=h((vq,Bh)=>{"use strict";var Bq=Hh(),hU=jn(),TU=si(),fU=Di(),xs=f(),mU=pr().upsertRecords,RU=q(),{getSchemaPath:AU}=K(),gU=Hs(),NU=N(),{handleHDBError:pU,hdb_errors:OU}=Y();Bh.exports=IU;async function IU(e){let t;try{t=hU(e)}catch(c){throw pU(c,c.message,OU.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;TU(e,s,r.hash_attribute),e.schema!==xs.SYSTEM_SCHEMA_NAME&&(s.includes(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await fU(e.hdb_auth_header,r,s),i=AU(e.schema,e.table),o=await RU.openEnvironment(i,e.table),_=await mU(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await gU(e,_)}catch(c){NU.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(IU,"lmdbUpsertRecords")});var kh=h((Fq,Vh)=>{"use strict";var bU=Tt(),Gh=p(),Fh=N(),CU=vr(),qh=f(),LU=d_().deleteRecords,wU=q(),{getSchemaPath:yU}=K(),{promisify:UU}=require("util"),MU=UU(setTimeout),xh=1e4,DU=10;Vh.exports=PU;async function PU(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(Gh.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new bU(e.schema,e.table,qh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await CU(n,qh.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw Fh.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return Gh.isEmptyOrZeroLength(s)?(Fh.trace("No records found to delete"),{message:"No records found to delete"}):await HU(e,s,t)}a(PU,"lmdbDeleteRecordsBefore");async function HU(e,t,r){let s=yU(e.schema,e.table),n=await wU.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=xh){let c=t.slice(o,o+xh),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await LU(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await MU(DU)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(HU,"chunkDeletes")});var $h=h((xq,Yh)=>{"use strict";var ji=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ji,"DeleteBeforeObject");Yh.exports=ji});var Wh=h((kq,Kh)=>{"use strict";var ea=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ea,"DeleteAuditLogsBeforeResults");Kh.exports=ea});var Xh=h((Kq,Jh)=>{"use strict";var O_=q(),{getTransactionAuditStorePath:BU}=K(),$q=$h(),Vs=ne(),vU=p(),Qh=Wh(),GU=require("util").promisify,FU=GU(setTimeout),qU=1e4,xU=100;Jh.exports=VU;async function VU(e){let t=BU(e.schema,e.table),r=await O_.openEnvironment(t,e.table,!0),s=O_.listDBIs(r);O_.initializeDBIs(r,Vs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Qh;do n=await kU(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await FU(xU);while(n.transactions_deleted>0);return i}a(VU,"deleteAuditLogsBefore");async function kU(e,t){let r=new Qh;try{let s=e.dbis[Vs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[Vs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];vU.isEmpty(_)||(n=e.dbis[Vs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[Vs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>qU)break}return await n,r}catch(s){throw s}}a(kU,"deleteTransactions")});var zh=h((Qq,Zh)=>{"use strict";var ta=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ta,"DropAttributeObject");Zh.exports=ta});var eT=h((Zq,jh)=>{"use strict";var YU=Tt(),$U=Fs(),Xq=zh(),it=f(),KU=p(),I_=q(),WU=Zt(),QU=vr(),JU=vs(),{getSchemaPath:XU}=K();jh.exports=ZU;async function ZU(e,t=!0){let r;e.schema===it.SYSTEM_SCHEMA_NAME?r=WU[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await jU(e),n=XU(e.schema,e.table),i=await I_.openEnvironment(n,e.table);return t===!0&&await zU(e,i,r.hash_attribute),I_.dropDBI(i,e.attribute),s}a(ZU,"lmdbDropAttribute");async function zU(e,t,r){let s=I_.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(o,u,c)}await n}a(zU,"removeAttributeFromAllObjects");async function jU(e){let t=new YU(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await QU(t)).filter(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(KU.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new $U(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return JU(i)}a(jU,"dropAttributeFromSystem")});var aT=h((e0,iT)=>{"use strict";var b_=q(),Gr=ne(),jq=Wt(),C_=f(),tT=p(),{getTransactionAuditStorePath:eM}=K(),tM=rr(),ra=Dr(),rM=N();iT.exports=sM;async function sM(e){let t=eM(e.schema,e.table),r=await b_.openEnvironment(t,e.table,!0),s=b_.listDBIs(r);b_.initializeDBIs(r,Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case C_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return rT(r,e.search_values);case C_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,iM(r,e.search_values,n);case C_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return nM(r,e.search_values);default:return rT(r)}}a(sM,"readAuditLog");function rT(e,t=[0,Date.now()]){tT.isEmpty(t[0])&&(t[0]=0),tT.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new ra,n))}a(rT,"searchTransactionsByTimestamp");function nM(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Gr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,nT(e,i))}return Object.fromEntries(r)}a(nM,"searchTransactionsByUsername");function iM(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=tM.equals(e,Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Gr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let S=Number(E);s.has(S)?s.get(S).push(u.toString()):s.set(S,[u.toString()])}}let n=Array.from(s.keys()),i=nT(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);sT(c,"records",r,l,o),sT(c,"original_records",r,l,o)}return Object.fromEntries(o)}a(iM,"searchTransactionsByHashValues");function sT(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new ra(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new ra(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(sT,"loopRecords");function nT(e,t){let r=[];try{let s=e.dbis[Gr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new ra,i);r.push(o)}}catch(i){rM.warn(i)}return r}catch(s){throw s}}a(nT,"batchSearchTransactions")});var _T=h((r0,oT)=>{"use strict";var{getSchemaPath:aM}=K(),oM=q();oT.exports={writeTransaction:_M};async function _M(e,t,r){let s=aM(e,t);return(await oM.openEnvironment(s,t)).transaction(r)}a(_M,"writeTransaction")});var ET=h((n0,lT)=>{"use strict";var{getSchemaPath:cT}=K(),uT=q();lT.exports={flush:cM,resetReadTxn:uM};async function cM(e,t){return(await uT.openEnvironment(cT(e,t),t.toString())).flushed}a(cM,"flush");async function uM(e,t){try{(await uT.openEnvironment(cT(e,t),t.toString())).resetReadTxn()}catch{}}a(uM,"resetReadTxn")});var hT=h((a0,ST)=>{"use strict";var lM=N(),{handleHDBError:EM}=Y(),dM=so(),SM=zn(),hM=u_(),TM=PS(),fM=vs(),mM=h_(),RM=XS(),AM=ih(),gM=vr(),NM=dh(),pM=Oh(),OM=Uh(),IM=Dh(),bM=vh(),CM=kh(),LM=Xh(),wM=f_(),yM=eT(),UM=aT(),MM=_T(),dT=ET(),sa=class extends dM{async searchByConditions(t){return NM(t)}async getDataByHash(t){return await mM(t)}async searchByHash(t){return await RM(t)}async getDataByValue(t,r){return await AM(t,r)}async searchByValue(t){return await gM(t)}async createSchema(t){return await TM(t)}async dropSchema(t){return await pM(t)}async createTable(t,r){return await OM(t,r)}async dropTable(t){return await wM(t)}async createAttribute(t){return await SM(t)}async createRecords(t){return await hM(t)}async updateRecords(t){return await IM(t)}async upsertRecords(t){try{return await bM(t)}catch(r){throw EM(r,null,null,lM.ERR,r)}}async deleteRecords(t){return await fM(t)}async deleteRecordsBefore(t){return await CM(t)}async dropAttribute(t){return await yM(t)}async deleteAuditLogsBefore(t){return await LM(t)}async readAuditLog(t){return await UM(t)}writeTransaction(t,r,s){return MM.writeTransaction(t,r,s)}flush(t,r){return dT.flush(t,r)}resetReadTxn(t,r){return dT.resetReadTxn(t,r)}};a(sa,"LMDBBridge");ST.exports=sa});var Ut=h((_0,fT)=>{"use strict";var DM=hT(),PM=so(),HM=$();HM.initSync();var TT;function BM(){return TT instanceof PM?TT:new DM}a(BM,"getBridge");fT.exports=BM()});var wi=h((u0,AT)=>{"use strict";var ia=ro(),qe=p(),vM=require("util"),aa=Ut(),GM=ys(),L_=N(),{handleHDBError:vt,hdb_errors:FM}=Y(),{HTTP_STATUS_CODES:or}=FM,qM=vM.promisify(GM.getTableSchema),xM="updated",mT="inserted",RT="upserted";AT.exports={insert:kM,update:YM,upsert:$M,validation:VM,flush:KM};async function VM(e){if(qe.isEmpty(e))throw new Error("invalid update parameters defined.");if(qe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(qe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await qM(e.schema,e.table),r=ia(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&qe.isEmptyOrZeroLength(_[s]))throw L_.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!qe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw L_.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!qe.isEmpty(_[s])&&_[s]!==""&&n.has(qe.autoCast(_[s]))&&(_.skip=!0),n.add(qe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(VM,"validation");async function kM(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ia(e);if(t)throw vt(new Error,t.message,or.BAD_REQUEST);let r=qe.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,or.BAD_REQUEST);let s=await aa.createRecords(e);return na(mT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(kM,"insertData");async function YM(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ia(e);if(t)throw vt(new Error,t.message,or.BAD_REQUEST);let r=qe.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,or.BAD_REQUEST);let s=await aa.updateRecords(e);return qe.isEmpty(s.existing_rows)?na(xM,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):na(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(YM,"updateData");async function $M(e){if(e.operation!=="upsert")throw vt(new Error,"invalid operation, must be upsert",or.INTERNAL_SERVER_ERROR);let t=ia(e);if(t)throw vt(new Error,t.message,or.BAD_REQUEST);let r=qe.checkSchemaTableExist(e.schema,e.table);if(r)throw vt(new Error,r,or.BAD_REQUEST);try{let s=await aa.upsertRecords(e);return na(RT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw vt(s,null,null,L_.ERR,n)}}a($M,"upsertData");function na(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===mT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===RT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(na,"returnObject");function KM(e){return aa.flush(e.schema,e.table)}a(KM,"flush")});var NT=h((E0,gT)=>{var WM=ke(),QM={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};gT.exports=function(e){return WM.validateObject(e,QM)}});var OT=h((d0,pT)=>{"use strict";var JM=f().OPERATIONS_ENUM,oa=class{constructor(t,r,s,n=void 0){this.operation=JM.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(oa,"UpdateObject");pT.exports=oa});var bT=h((h0,IT)=>{"use strict";var XM={OPERATION:"operation",REFRESH:"refresh"},_a=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(_a,"JWTTokens");var ca=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(ca,"JWTRSAKeys");IT.exports={JWTTokens:_a,TOKEN_TYPE_ENUM:XM,JWTRSAKeys:ca}});var UT=h((f0,yT)=>{"use strict";var Ys=require("jsonwebtoken"),w_=require("fs-extra"),y_=p(),xe=f(),{handleHDBError:fe,hdb_errors:ZM}=Y(),{HTTP_STATUS_CODES:me,AUTHENTICATION_ERROR_MSGS:Re}=ZM,ks=N(),CT=ii(),D_=Ur(),zM=wi().update,jM=OT(),eD=Ms(),{UserEventMsg:tD}=nr(),Gt=$();Gt.initSync();var U_=require("path"),{JWTTokens:rD,JWTRSAKeys:sD,TOKEN_TYPE_ENUM:ua}=bT(),nD=Gt.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Gt.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",iD=Gt.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Gt.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",la="RS256",M_;yT.exports={createTokens:aD,validateOperationToken:_D,refreshOperationToken:oD,validateRefreshToken:wT};async function aD(e){if(y_.isEmpty(e)||typeof e!="object")throw fe(new Error,Re.INVALID_AUTH_OBJECT,me.BAD_REQUEST,void 0,void 0,!0);if(y_.isEmpty(e.username))throw fe(new Error,Re.USERNAME_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);if(y_.isEmpty(e.password))throw fe(new Error,Re.PASSWORD_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await D_.findAndValidateUser(e.username,e.password),!t)throw fe(new Error,Re.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}catch(S){throw ks.error(S),fe(new Error,Re.INVALID_CREDENTIALS,me.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ea(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await LT(i,r.private_key,r.passphrase),_=await Ys.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:iD,algorithm:la,subject:ua.REFRESH}),c=CT.hash(_),u=new jM(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await zM(u)}catch(S){ks.error(S),E=S}if(E!==void 0||l.skipped_hashes.length>0)throw fe(new Error,Re.REFRESH_TOKEN_SAVE_FAILED,me.INTERNAL_SERVER_ERROR);return eD.signalUserChange(new tD(process.pid)),new rD(o,_)}a(aD,"createTokens");async function LT(e,t,r){return await Ys.sign(e,{key:t,passphrase:r},{expiresIn:nD,algorithm:la,subject:ua.OPERATION})}a(LT,"signOperationToken");async function Ea(){if(M_===void 0)try{let e=U_.join(Gt.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PASSPHRASE_NAME),t=U_.join(Gt.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=U_.join(Gt.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await w_.readFile(e)).toString(),n=(await w_.readFile(t)).toString(),i=(await w_.readFile(r)).toString();M_=new sD(i,n,s)}catch(e){throw ks.error(e),fe(new Error,Re.NO_ENCRYPTION_KEYS,me.INTERNAL_SERVER_ERROR)}return M_}a(Ea,"getJWTRSAKeys");async function oD(e){if(!e)throw fe(new Error,Re.INVALID_BODY,me.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fe(new Error,Re.REFRESH_TOKEN_REQUIRED,me.BAD_REQUEST,void 0,void 0,!0);await wT(e.refresh_token);let t=await Ea(),r=await Ys.decode(e.refresh_token);return{operation_token:await LT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(oD,"refreshOperationToken");async function _D(e){try{let t=await Ea(),r=await Ys.verify(e,t.public_key,{algorithms:la,subject:ua.OPERATION});return await D_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ks.warn(t),t.name&&t.name==="TokenExpiredError"?fe(new Error,Re.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Re.INVALID_TOKEN,me.UNAUTHORIZED)}}a(_D,"validateOperationToken");async function wT(e){let t;try{let r=await Ea(),s=await Ys.verify(e,r.public_key,{algorithms:la,subject:ua.REFRESH});t=await D_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ks.warn(r),r.name&&r.name==="TokenExpiredError"?fe(new Error,Re.TOKEN_EXPIRED,me.FORBIDDEN):fe(new Error,Re.INVALID_TOKEN,me.UNAUTHORIZED)}if(!CT.validate(t.refresh_token,e))throw fe(new Error,Re.INVALID_TOKEN,me.UNAUTHORIZED);return t}a(wT,"validateRefreshToken")});var HT=h((A0,PT)=>{"use strict";var cD=NT(),Fr=require("passport"),uD=require("passport-local").Strategy,lD=require("passport-http").BasicStrategy,ED=require("util"),dD=Ur(),DT=ED.callbackify(dD.findAndValidateUser),R0=He(),SD=f(),MT=UT();Fr.use(new uD(function(e,t,r){DT(e,t,r)}));Fr.use(new lD(function(e,t,r){DT(e,t,r)}));Fr.serializeUser(function(e,t){t(null,e)});Fr.deserializeUser(function(e,t){t(null,e)});function hD(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Fr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===SD.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?MT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):MT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Fr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(hD,"authorize");function TD(e,t){let r=cD(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(TD,"checkPermissions");PT.exports={authorize:hD,checkPermissions:TD}});var $s=h((N0,BT)=>{"use strict";var da=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(da,"Node");var Sa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Sa,"NodeSubscription");BT.exports={Node:da,NodeSubscription:Sa}});var GT=h((O0,vT)=>{"use strict";var fD=f().OPERATIONS_ENUM,ha=class{constructor(t,r,s,n=void 0){this.operation=fD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(ha,"UpsertObject");vT.exports=ha});var Ks=h((b0,FT)=>{"use strict";var Ta=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Ta,"RemotePayloadObject");var fa=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(fa,"RemotePayloadSubscription");FT.exports={RemotePayloadObject:Ta,RemotePayloadSubscription:fa}});var xT=h((L0,qT)=>{"use strict";var ma=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(ma,"TableSizeObject");qT.exports=ma});var kT=h((y0,VT)=>{"use strict";var mD=xT(),RD=ne(),qr=q(),AD=N(),{getSchemaPath:gD,getTransactionAuditStorePath:ND}=K();VT.exports=pD;async function pD(e){let t=new mD;try{let r=gD(e.schema,e.name),s=await qr.openEnvironment(r,e.name),n=qr.statDBI(s,e.hash_attribute),i=ND(e.schema,e.name),o=await qr.openEnvironment(i,e.name,!0),_=qr.statDBI(o,RD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await qr.environmentDataSize(r,e.name),u=await qr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){AD.warn(`unable to stat table dbi due to ${r}`)}return t}a(pD,"lmdbGetTableSize")});var $T=h((M0,YT)=>{"use strict";var Ra=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(Ra,"SystemInformationObject");YT.exports=Ra});var Y_=h((P0,JT)=>{"use strict";var OD=require("fs-extra"),ID=require("path"),le=require("systeminformation"),Ft=N(),P_=f(),bD=kT(),WT=ws(),{getThreadInfo:KT}=ui(),QT=$();QT.initSync();var CD=$T(),{openEnvironment:LD}=q(),{getSchemaPath:wD}=K(),Aa;JT.exports={getHDBProcessInfo:G_,getNetworkInfo:q_,getDiskInfo:F_,getMemoryInfo:v_,getCPUInfo:B_,getTimeInfo:H_,getSystemInformation:x_,systemInformation:yD,getTableSize:V_,getMetrics:k_};function H_(){return le.time()}a(H_,"getTimeInfo");async function B_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...l}=await le.cpu();l.cpu_speed=await le.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:S,raw_currentload_irq:d,raw_currentload_nice:m,raw_currentload_system:g,raw_currentload_user:w,cpus:W,...x}=await le.currentLoad();return x.cpus=[],W.forEach(G=>{let{raw_load:Pe,raw_load_idle:Yt,raw_load_irq:hr,raw_load_nice:Ac,raw_load_system:gc,raw_load_user:Ya,...Wr}=G;x.cpus.push(Wr)}),l.current_load=x,l}catch(e){return Ft.error(`error in getCPUInfo: ${e}`),{}}}a(B_,"getCPUInfo");async function v_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await le.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ft.error(`error in getMemoryInfo: ${e}`),{}}}a(v_,"getMemoryInfo");async function G_(){let e={core:[],clustering:[]};try{let t=await le.processes(),r;try{r=Number.parseInt(await OD.readFile(ID.join(QT.get(P_.CONFIG_PARAMS.ROOTPATH),P_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===P_.NODE_ERROR_CODES.ENOENT)Ft.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}return t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)}),e}catch(t){return Ft.error(`error in getHDBProcessInfo: ${t}`),e}}a(G_,"getHDBProcessInfo");async function F_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await le.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await le.fsStats();return e.read_write=u,e.size=await le.fsSize(),e}catch(t){return Ft.error(`error in getDiskInfo: ${t}`),e}}a(F_,"getDiskInfo");async function q_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await le.networkInterfaceDefault(),e.latency=await le.inetChecksite("google.com"),(await le.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...S}=s;e.interfaces.push(S)}),(await le.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e}catch(t){return Ft.error(`error in getNetworkInfo: ${t}`),e}}a(q_,"getNetworkInfo");async function x_(){if(Aa!==void 0)return Aa;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await le.osInfo();e=_;let c=await le.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Aa=e,Aa}catch(t){return Ft.error(`error in getSystemInformation: ${t}`),e}}a(x_,"getSystemInformation");async function V_(){let e=[],t=await WT.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await bD(s));return e}a(V_,"getTableSize");async function k_(){let e=await WT.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=wD(r,n),_=(await LD(i,n)).getStats();s[n]={puts:_.puts,deletes:_.deletes,txns:_.txns,pageFlushes:_.pageFlushes,writes:_.writes,pagesWritten:_.pagesWritten,timeDuringTxns:_.timeDuringTxns,timeStartTxns:_.timeStartTxns,timePageFlushes:_.timePageFlushes,timeSync:_.timeSync}}catch(i){Ft.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(k_,"getMetrics");async function yD(e){let t=new CD;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await x_(),t.time=H_(),t.cpu=await B_(),t.memory=await v_(),t.disk=await F_(),t.network=await q_(),t.harperdb_processes=await G_(),t.table_size=await V_(),t.metrics=await k_(),t.threads=await KT(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await x_();break;case"time":t.time=H_();break;case"cpu":t.cpu=await B_();break;case"memory":t.memory=await v_();break;case"disk":t.disk=await F_();break;case"network":t.network=await q_();break;case"harperdb_processes":t.harperdb_processes=await G_();break;case"table_size":t.table_size=await V_();break;case"database_metrics":case"metrics":t.metrics=await k_();break;case"threads":t.threads=await KT();break;default:break}return t}a(yD,"systemInformation")});var $_=h((B0,UD)=>{UD.exports={name:"harperdb",version:"4.1.3",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},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/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../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.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.3",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.21.0","fastify-plugin":"~4.5.1","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.6",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.18.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",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"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var ZT=h((F0,XT)=>{"use strict";var v0=require("fs-extra"),G0=N();XT.exports={version:MD,printVersion:PD,nodeVersion:DD};var qt=$_();function MD(){if(qt)return qt.version}a(MD,"version");function DD(){if(qt&&qt.engines&&qt.engines["preferred-node"])return qt.engines["preferred-node"]}a(DD,"nodeVersion");function PD(){qt&&console.log(`HarperDB Version ${qt.version}`)}a(PD,"printVersion")});var xr=h((k0,tf)=>{"use strict";var HD=wi(),K_=p(),W_=require("util"),_r=f(),zT=$();zT.initSync();var BD=HT(),jT=hi(),{Node:x0,NodeSubscription:V0}=$s(),vD=Vi(),GD=GT(),{RemotePayloadObject:FD,RemotePayloadSubscription:qD}=Ks(),{handleHDBError:xD,hdb_errors:VD}=Y(),{HTTP_STATUS_CODES:kD,HDB_ERROR_MSGS:YD}=VD,$D=Tt(),KD=Y_(),WD=ZT(),QD=W_.promisify(BD.authorize),JD=W_.promisify(jT.searchByHash),XD=W_.promisify(jT.searchByValue);tf.exports={authHeaderToUser:ZD,isEmpty:zD,getNodeRecord:jD,upsertNodeRecord:eP,buildNodePayloads:tP,checkClusteringEnabled:rP,getAllNodeRecords:sP,getSystemInfo:nP,reverseSubscription:ef};async function ZD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await QD(t,null),e}a(ZD,"authHeaderToUser");function zD(e){return e==null}a(zD,"isEmpty");async function jD(e){let t=new vD(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return JD(t)}a(jD,"getNodeRecord");async function eP(e){let t=new GD(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return HD.upsert(t)}a(eP,"upsertNodeRecord");function ef(e){if(K_.isEmpty(e.subscribe)||K_.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(ef,"reverseSubscription");function tP(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,l=K_.getTableHashAttribute(c,u),{subscribe:E,publish:S}=ef(_),d=new qD(c,u,l,S,E,_.start_time);n.push(d)}return new FD(r,t,n,s)}a(tP,"buildNodePayloads");function rP(){if(!zT.get(_r.CONFIG_PARAMS.CLUSTERING_ENABLED))throw xD(new Error,YD.CLUSTERING_NOT_ENABLED,kD.BAD_REQUEST,void 0,void 0,!0)}a(rP,"checkClusteringEnabled");async function sP(){let e=new $D(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await XD(e))}a(sP,"getAllNodeRecords");async function nP(){let e=await KD.getSystemInformation();return{hdb_version:WD.version(),node_version:e.node_version,platform:e.platform}}a(nP,"getSystemInfo")});var sf=h(($0,rf)=>{"use strict";var iP=Ut();rf.exports={writeTransaction:aP};function aP(e,t,r){return iP.writeTransaction(e,t,r)}a(aP,"writeTransaction")});var Vt=h((tx,Nf)=>{"use strict";var ee=$();ee.initSync();var oP=require("fs-extra"),_P=require("semver"),Zs=require("path"),{monotonicFactory:cP}=require("ulidx"),z_=cP(),uP=require("util"),af=require("child_process"),lP=uP.promisify(af.exec),EP=af.spawn,M=ce(),v=f(),ga=p(),xt=N(),Na=Is(),dP=sf(),Ws=ss(),{encode:X_,decode:j_}=require("msgpackr"),{isEmpty:cr}=ga,of=Ur(),_f=12e10,{connect:SP,StorageType:cf,RetentionPolicy:uf,AckPolicy:ec,DeliverPolicy:zs,DiscardPolicy:hP,NatsConnection:W0,JetStreamManager:Q0,JetStreamClient:J0,StringCodec:X0,JSONCodec:TP,createInbox:tc,StreamSource:Z0,headers:fP,toJsMsg:lf,nuid:z0,JetStreamOptions:j0,ErrorCode:nf,nanos:ex}=require("nats"),{PACKAGE_ROOT:mP}=f(),RP=$_(),Ef=TP(),AP="clustering",gP=RP.engines[M.NATS_SERVER_NAME],NP=Zs.join(mP,"dependencies"),Z_=Zs.join(NP,`${process.platform}-${process.arch}`,M.NATS_BINARY_NAME),Q_,J_,Qs,Js,Xs,Xe;Nf.exports={runCommand:df,checkNATSServerInstalled:pP,createConnection:rc,getConnection:pa,getJetStreamManager:js,getJetStream:Sf,getNATSReferences:Me,getServerList:IP,createLocalStream:sc,listStreams:hf,deleteLocalStream:bP,getServerConfig:en,listRemoteStreams:CP,viewStream:LP,viewStreamIterator:wP,publishToStream:yP,createWorkQueueStream:UP,addSourceToWorkStream:ff,request:MP,removeSourceFromWorkStream:Rf,reloadNATS:nc,reloadNATSHub:DP,reloadNATSLeaf:PP,extractServerName:mf,requestErrorHandler:HP,updateWorkStream:BP,createLocalTableStream:Af,createTableStreams:vP,purgeTableStream:gf,purgeSchemaTableStreams:GP,getStreamInfo:FP,updateLocalStreams:xP,closeConnection:OP,getJsmServerName:tn,addNatsMsgHeader:Tf};async function df(e,t=void 0){let{stdout:r,stderr:s}=await lP(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
7
  `,"")}a(df,"runCommand");async function pP(){try{await oP.access(Z_)}catch{return!1}let e=await df(`${Z_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return _P.eq(t,gP)}a(pP,"checkNATSServerInstalled");async function rc(e,t,r,s=!0,n="127.0.0.1"){return SP({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ee.get(v.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ee.get(v.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ee.get(v.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(rc,"createConnection");async function OP(){Xe&&(await Xe.drain(),Xe=void 0)}a(OP,"closeConnection");async function pa(){if(!Xe){let e=await of.getClusterUser();if(cr(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ee.get(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Xe=await rc(t,e.username,e.decrypt_hash)}return Xe}a(pa,"getConnection");async function js(){if(Js)return Js;cr(Xe)&&await pa();let{domain:e}=en(v.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(cr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Js=await Xe.jetstreamManager({domain:e}),Js}a(js,"getJetStreamManager");async function Sf(){if(Xs)return Xs;cr(Xe)&&await pa();let{domain:e}=en(v.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(cr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Xs=Xe.jetstream({domain:e}),Xs}a(Sf,"getJetStream");async function Me(){let e=Xe||await pa(),t=Js||await js(),r=Xs||await Sf();return{connection:e,jsm:t,js:r}}a(Me,"getNATSReferences");async function IP(e){let t=ee.get(v.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await of.getClusterUser(),n=await rc(t,r,s),i=tc(),o=n.subscribe(i),_=[],c,u=(async()=>{for await(let l of o){let E=Ef.decode(l.data);E.response_time=Date.now()-c,_.push(E)}})();return c=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await ga.async_set_timeout(e),await o.drain(),await n.close(),await u,_}a(IP,"getServerList");async function sc(e,t){let{jsm:r}=await Me(),s=ee.get(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=ee.get(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:cf.File,retention:uf.Limits,subjects:t,discard:hP.Old,duplicate_window:_f,max_msgs:n,max_bytes:i,max_age:s})}a(sc,"createLocalStream");async function hf(){let{jsm:e}=await Me(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(hf,"listStreams");async function bP(e){let{jsm:t}=await Me();await t.streams.delete(e)}a(bP,"deleteLocalStream");async function CP(e){let{connection:t}=await Me(),r=[],s=tc(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Ef.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(CP,"listRemoteStreams");async function LP(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Me(),i=z_(),o=[],_={ack_policy:ec.None,durable_name:i,deliver_subject:i,deliver_policy:zs.All};t&&(_.deliver_policy=zs.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let l of u){let E=lf(l),S=j_(E.data),d={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:S};E.headers&&(d.origin=E.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=E.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),o.push(d),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(LP,"viewStream");async function*wP(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Me(),i=z_(),o={ack_policy:ec.None,durable_name:i,deliver_subject:i,deliver_policy:zs.All};t&&(o.deliver_policy=zs.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let _={timeout:2e3};r&&(_.max=r);let c=await n.subscribe(i,_);for await(let u of c){let l=lf(u),E=j_(l.data);E[0]||(E=[E]);for(let S of E){let d={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:S};l.headers&&(d.origin=l.headers.get(M.MSG_HEADERS.ORIGIN),d.nats_msg_id=l.headers.get(M.MSG_HEADERS.NATS_MSG_ID)),yield d}c.getPending()===1&&l.info.pending===0&&c.stop()}await s.consumers.delete(e,i)}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return[];throw _}}a(wP,"viewStreamIterator");async function yP(e,t,r,s){xt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;ee.get(v.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(M.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=Tf(s,r);let{js:i}=await Me(),o=await tn(),_=`${e}.${o}`;try{xt.trace(`publishToStream publishing to subject: ${_}, data:`,s),n&&await i.publish(_,X_(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")xt.trace(`publishToStream creating stream: ${t}`),await sc(t,[_]),n&&await i.publish(_,X_(s),{headers:r});else throw c}}a(yP,"publishToStream");function Tf(e,t){t===void 0&&(t=fP());let r=ee.get(v.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(M.MSG_HEADERS.NATS_MSG_ID)){let s=ga.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${z_()}`;t.append(M.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(M.MSG_HEADERS.ORIGIN)||t.append(M.MSG_HEADERS.ORIGIN,r),t}a(Tf,"addNatsMsgHeader");function en(e){e=e.toLowerCase();let t=Zs.join(ee.get(v.CONFIG_PARAMS.ROOTPATH),AP);if(e===v.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return cr(J_)&&(J_={port:Ws.getConfigFromFile(v.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ws.getConfigFromFile(v.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.HUB,config_file:M.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Zs.join(t,M.PID_FILES.HUB),hdb_nats_path:t}),J_;if(e===v.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return cr(Q_)&&(Q_={port:Ws.getConfigFromFile(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ws.getConfigFromFile(v.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,config_file:M.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ws.getConfigFromFile(v.CONFIG_PARAMS.CLUSTERING_NODENAME)+M.SERVER_SUFFIX.LEAF,pid_file_path:Zs.join(t,M.PID_FILES.LEAF),hdb_nats_path:t}),Q_;xt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(en,"getServerConfig");async function UP(e){let{jsm:t}=await Me(),r=await tn();try{await t.streams.add({name:e.stream_name,storage:cf.File,retention:uf.Workqueue,duplicate_window:_f,subjects:[`${M.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ec.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:zs.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(UP,"createWorkQueueStream");async function ff(e,t,r){let{jsm:s}=await Me(),n=await s.streams.info(t),i=mf(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Na.createNatsTableStreamName(_,c),l=i===e,E,S,d=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let g=0,w=n.config.sources.length;g<w;g++)if(E=n.config.sources[g],S=g,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){d=!0;break}if(d===!0){if(E.opt_start_time===o)return;n.config.sources.splice(S,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${M.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(ff,"addSourceToWorkStream");function mf(e){return e.split(".")[1]}a(mf,"extractServerName");async function Rf(e,t,r){let{schema:s,table:n}=r,i=Na.createNatsTableStreamName(s,n),{jsm:o}=await Me(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config)}a(Rf,"removeSourceFromWorkStream");async function MP(e,t,r=2e3,s=tc()){if(!ga.isObject(t))throw new Error("data param must be an object");let n=X_(t),{connection:i}=await Me(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return j_(_.data)}a(MP,"request");function nc(e){return new Promise(async(t,r)=>{let s=EP(Z_,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(nc,"reloadNATS");async function DP(){let{pid_file_path:e}=en(v.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await nc(e)}a(DP,"reloadNATSHub");async function PP(){let{pid_file_path:e}=en(v.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await nc(e)}a(PP,"reloadNATSLeaf");function HP(e,t,r){let s;switch(e.code){case nf.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case nf.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(HP,"requestErrorHandler");async function BP(e,t){let r=t+M.SERVER_SUFFIX.LEAF;await dP.writeTransaction(v.SYSTEM_SCHEMA_NAME,v.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await ff(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Rf(r,M.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(BP,"updateWorkStream");async function Af(e,t){let r=Na.createNatsTableStreamName(e,t),s=await tn(),n=qP(e,t,s);await sc(r,[n])}a(Af,"createLocalTableStream");async function vP(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Af(s,n)}}a(vP,"createTableStreams");async function gf(e,t){if(ee.get(v.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Na.createNatsTableStreamName(e,t),{jsm:s}=await Me();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")xt.warn(r);else throw r}}a(gf,"purgeTableStream");async function GP(e,t){if(ee.get(v.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await gf(e,t[r])}a(GP,"purgeSchemaTableStreams");async function FP(e){return(await js()).streams.info(e)}a(FP,"getStreamInfo");function qP(e,t,r){return`${M.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(qP,"createSubjectName");async function tn(){if(Qs)return Qs;if(Qs=(await js())?.nc?.info?.server_name,Qs===void 0)throw new Error("Unable to get jetstream manager server name");return Qs}a(tn,"getJsmServerName");async function xP(){let e=await js(),t=await tn(),r=await hf();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=VP(s),_=i.split(".");if(!(_[_.length-1]===t&&!o)){if(n.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;xt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${M.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;xt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(M.WORK_QUEUE_CONSUMER_NAMES.stream_name,M.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${M.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");xt.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(xP,"updateLocalStreams");function VP(e){let{config:t}=e,r=!1;if(t.name===M.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===M.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=ee.get(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ee.get(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=ee.get(v.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(VP,"updateStreamLimits")});var wf=h((sx,Lf)=>{"use strict";var ac=xr(),kP=Vt(),If=$(),Oa=f(),ur=ce(),YP=p(),ic=N(),{RemotePayloadObject:$P}=Ks(),{ErrorCode:pf}=require("nats"),Of=If.get(Oa.CONFIG_PARAMS.CLUSTERING_ENABLED),bf=If.get(Oa.CONFIG_PARAMS.CLUSTERING_NODENAME);Lf.exports={clusterStatus:KP,buildNodeStatus:Cf};async function KP(){let e={node_name:bf,is_enabled:Of,connections:[]};if(!Of)return e;let t=await ac.getAllNodeRecords();if(YP.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(Cf(t[s],e.connections));return await Promise.allSettled(r),e}a(KP,"clusterStatus");async function Cf(e,t){let r=e.name,s=new $P(Oa.OPERATIONS_ENUM.CLUSTER_STATUS,bf,void 0,await ac.getSystemInfo()),n,i,o=ur.CLUSTER_STATUS_STATUSES.OPEN;try{let c=Date.now();n=await kP.request(ur.REQUEST_SUBJECT(r),s),i=Date.now()-c,n.status===ur.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ur.CLUSTER_STATUS_STATUSES.CLOSED,ic.error(`Error getting node status from ${r} `,n))}catch(c){ic.warn(`Error getting node status from ${r}`,c),c.code===pf.NoResponders?o=ur.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:c.code===pf.Timeout?o=ur.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ur.CLUSTER_STATUS_STATUSES.CLOSED}let _=new WP(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let c={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Oa.PRE_4_0_0_VERSION&&await ac.upsertNodeRecord(c)}catch(c){ic.error("Cluster status encountered an error updating system info for node:",r,c)}t.push(_)}a(Cf,"buildNodeStatus");function WP(e,t,r,s,n,i,o,_){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=_}a(WP,"NodeStatusObject")});var Df=h((ox,Mf)=>{"use strict";var oc=require("joi"),{string:Ia,boolean:yf,date:QP}=oc.types(),JP=ke(),{validateSchemaExists:ix,validateTableExists:ax,validateSchemaName:XP}=Kt(),ZP=f(),zP=ce(),jP=$(),eH=Ia.invalid(jP.get(ZP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(zP.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(),Uf={operation:Ia.valid("add_node","update_node"),node_name:eH,subscriptions:oc.array().items({table:Ia.required(),schema:Ia.custom(XP).required(),subscribe:yf.required(),publish:yf.required().custom(rH),start_time:QP.iso()}).min(1).required()};function tH(e){return JP.validateBySchema(e,oc.object(Uf))}a(tH,"addUpdateNodeValidator");function rH(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(rH,"checkForFalsy");Mf.exports={addUpdateNodeValidator:tH,validation_schema:Uf}});var Bf=h((cx,Hf)=>{"use strict";var cc=ws(),{hdb_errors:_c}=Y();Hf.exports={checkSchemaExists:Pf,checkSchemaTableExists:sH,schema_describe:cc};async function Pf(e){if(!global.hdb_schema[e])try{let t=await cc.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return _c.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(Pf,"checkSchemaExists");async function sH(e,t){let r=await Pf(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await cc.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return _c.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return _c.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(sH,"checkSchemaTableExists")});var xf=h((Ex,qf)=>{"use strict";var Vr=Qn(),lr=Bf(),nH=N(),iH=require("uuid").v4,lx=require("clone"),kr=Ms(),Er=f(),aH=require("util"),dr=Ut(),{handleHDBError:Ae,hdb_errors:oH}=Y(),{HDB_ERROR_MSGS:ba,HTTP_STATUS_CODES:ge}=oH,{SchemaEventMsg:Yr}=nr(),vf=Vt();qf.exports={createSchema:_H,createSchemaStructure:Gf,createTable:cH,createTableStructure:Ff,createAttribute:SH,dropSchema:uH,dropTable:lH,dropAttribute:EH};async function _H(e){try{let t=await Gf(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(_H,"createSchema");async function Gf(e){let t=Vr.schema_object(e);if(t)throw Ae(t,t.message,ge.BAD_REQUEST,void 0,void 0,!0);if(!await lr.checkSchemaExists(e.schema))throw Ae(new Error,ba.SCHEMA_EXISTS_ERR(e.schema),ge.BAD_REQUEST,Er.LOG_LEVELS.ERROR,ba.SCHEMA_EXISTS_ERR(e.schema),!0);return await dr.createSchema(e),`schema '${e.schema}' successfully created`}a(Gf,"createSchemaStructure");async function cH(e){let t=await Ff(e);return kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),t}a(cH,"createTable");async function Ff(e){let t=Vr.create_table_object(e);if(t)throw Ae(t,t.message,ge.BAD_REQUEST,void 0,void 0,!0);Vr.validateTableResidence(e.residence);let r=await lr.checkSchemaExists(e.schema);if(r)throw Ae(new Error,r,ge.NOT_FOUND,Er.LOG_LEVELS.ERROR,r,!0);if(!await lr.checkSchemaTableExists(e.schema,e.table))throw Ae(new Error,ba.TABLE_EXISTS_ERR(e.schema,e.table),ge.BAD_REQUEST,Er.LOG_LEVELS.ERROR,ba.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:iH(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await dr.createTable(n,e);else throw Ae(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ge.BAD_REQUEST);else await dr.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Ff,"createTableStructure");async function uH(e){let t=Vr.schema_object(e);if(t)throw Ae(t,t.message,ge.BAD_REQUEST,void 0,void 0,!0);let r=await lr.checkSchemaExists(e.schema);if(r)throw Ae(new Error,r,ge.NOT_FOUND,Er.LOG_LEVELS.ERROR,r,!0);let s=await lr.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await dr.dropSchema(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await vf.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(uH,"dropSchema");async function lH(e){let t=Vr.table_object(e);if(t)throw Ae(t,t.message,ge.BAD_REQUEST,void 0,void 0,!0);let r=await lr.checkSchemaTableExists(e.schema,e.table);if(r)throw Ae(new Error,r,ge.NOT_FOUND,Er.LOG_LEVELS.ERROR,r,!0);return await dr.dropTable(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),await vf.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(lH,"dropTable");async function EH(e){let t=Vr.attribute_object(e);if(t)throw Ae(t,t.message,ge.BAD_REQUEST,void 0,void 0,!0);let r=await lr.checkSchemaTableExists(e.schema,e.table);if(r)throw Ae(new Error,r,ge.NOT_FOUND,Er.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Ae(new Error,"You cannot drop a hash attribute",ge.BAD_REQUEST,void 0,void 0,!0);if(Er.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Ae(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ge.BAD_REQUEST,void 0,void 0,!0);try{return await dr.dropAttribute(e),dH(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw nH.error(`Got an error deleting attribute ${aH.inspect(e)}.`),s}}a(EH,"dropAttribute");function dH(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(dH,"dropAttributeFromGlobal");async function SH(e){return await dr.createAttribute(e),kr.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(SH,"createAttribute")});var Qf=h((Sx,Wf)=>{"use strict";var uc=Vt(),Vf=p(),kf=ce(),hH=f(),Ca=N(),Yf=xf(),TH=m_(),{RemotePayloadObject:fH}=Ks(),{handleHDBError:$f,hdb_errors:mH}=Y(),{HTTP_STATUS_CODES:Kf}=mH,{NodeSubscription:RH}=$s();Wf.exports=AH;async function AH(e,t){let r;try{r=await uc.request(`${t}.${kf.REQUEST_SUFFIX}`,new fH(hH.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ca.trace("Response from remote describe all request:",r)}catch(o){Ca.error(`addNode received error from describe all request to remote node: ${o}`);let _=uc.requestErrorHandler(o,"add_node",t);throw $f(new Error,_,Kf.INTERNAL_SERVER_ERROR,"error",_)}if(r.status===kf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw $f(new Error,o,Kf.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:_,table:c}=o,u=Vf.doesSchemaExist(_),l=s[_]!==void 0,E=Vf.doesTableExist(_,c),S=s?.[_]?.[c]!==void 0;if(!u&&!l||!E&&!S){n.push(o);continue}if(!u&&l&&(Ca.trace(`addNode creating schema: ${_}`),await Yf.createSchema({operation:"create_schema",schema:_})),!E&&S){Ca.trace(`addNode creating table: ${c} in schema: ${_}`);let m=new TH(_,c,s[_][c].hash_attribute);await Yf.createTable(m)}await uc.createLocalTableStream(_,c);let d=new RH(_,c,o.publish,o.subscribe);d.start_time=o.start_time,i.push(d)}return{added:i,skipped:n}}a(AH,"reviewSubscriptions")});var zf=h((Tx,Zf)=>{"use strict";var{handleHDBError:La,hdb_errors:gH}=Y(),{HTTP_STATUS_CODES:wa}=gH,{addUpdateNodeValidator:NH}=Df(),rn=N(),Xf=f(),Jf=ce(),pH=p(),lc=Vt(),sn=xr(),OH=$(),IH=Qf(),{Node:bH,NodeSubscription:CH}=$s(),LH="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",wH="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",yH=OH.get(Xf.CONFIG_PARAMS.CLUSTERING_NODENAME);Zf.exports=UH;async function UH(e,t=!1){rn.trace("addNode called with:",e),sn.checkClusteringEnabled();let r=NH(e);if(r)throw La(r,r.message,wa.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await sn.getNodeRecord(s);if(!pH.isEmptyOrZeroLength(E))throw La(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,wa.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await IH(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=LH,o;let _=sn.buildNodePayloads(n,yH,Xf.OPERATIONS_ENUM.ADD_NODE,await sn.getSystemInfo());rn.trace("addNode sending remote payload:",_);let c;try{c=await lc.request(`${s}.${Jf.REQUEST_SUFFIX}`,_)}catch(E){rn.error(`addNode received error from request: ${E}`);let S=lc.requestErrorHandler(E,"add_node",s);throw La(new Error,S,wa.INTERNAL_SERVER_ERROR,"error",S)}if(c.status===Jf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${c.message}`;throw La(new Error,E,wa.INTERNAL_SERVER_ERROR,"error",E)}rn.trace(c);let u=[];for(let E=0,S=n.length;E<S;E++){let d=n[E];rn.trace("Add node updating work stream for node:",s,"subscriptions:",d),await lc.updateWorkStream(d,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new CH(d.schema,d.table,d.publish,d.subscribe))}let l=new bH(s,u,c.system_info);return await sn.upsertNodeRecord(l),i.length>0?o.message=wH:o.message=`Successfully added '${s}' to manifest`,o}a(UH,"addNode")});var em=h((mx,jf)=>{"use strict";var MH=ce(),ya=class{constructor(t,r,s,n,i,o,_,c,u,l,E,S,d,m){this.port=t,o===null&&(o=void 0),this.server_name=r+MH.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_,verify:c},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:l,port:E,routes:S,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_,verify:c}},this.accounts={SYS:{users:d},HDB:{users:m}},this.system_account="SYS"}};a(ya,"HubConfigObject");jf.exports=ya});var sm=h((Ax,rm)=>{"use strict";var tm=ce(),Ua=class{constructor(t,r,s,n,i,o,_,c,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+tm.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+tm.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(Ua,"LeafConfigObject");rm.exports=Ua});var im=h((Nx,nm)=>{"use strict";var Ma=class{constructor(t,r){this.user=t,this.password=r}};a(Ma,"HdbUserObject");nm.exports=Ma});var om=h((Ox,am)=>{"use strict";var DH=ce(),Da=class{constructor(t,r){this.user=t+DH.SERVER_SUFFIX.ADMIN,this.password=r}};a(Da,"SysUserObject");am.exports=Da});var lm=h((bx,um)=>{"use strict";var nn=require("path"),va=require("fs-extra"),PH=em(),HH=sm(),BH=im(),vH=om(),Ec=Ur(),$r=p(),Ne=ss(),Ba=f(),Pa=ce(),{CONFIG_PARAMS:Z}=Ba,on=N(),Ga=$(),_m=Is(),dc=Vt(),an="clustering",GH=1e4,cm=5;um.exports={generateNatsConfig:FH,removeNatsConfig:qH};async function FH(e=!1,t=void 0){Ga.initSync();let r=Ga.get(Z.ROOTPATH),s=nn.join(r,an,Pa.PID_FILES.HUB),n=nn.join(r,an,Pa.PID_FILES.LEAF),i=Ne.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=nn.join(r,an,Pa.NATS_CONFIG_FILES.HUB_SERVER),_=nn.join(r,an,Pa.NATS_CONFIG_FILES.LEAF_SERVER),c=Ne.getConfigFromFile(Z.CLUSTERING_TLS_CERTIFICATE),u=Ne.getConfigFromFile(Z.CLUSTERING_TLS_PRIVATEKEY),l=Ne.getConfigFromFile(Z.CLUSTERING_TLS_CERT_AUTH),E=Ne.getConfigFromFile(Z.CLUSTERING_TLS_INSECURE),S=Ne.getConfigFromFile(Z.CLUSTERING_TLS_VERIFY),d=Ne.getConfigFromFile(Z.CLUSTERING_NODENAME),m=Ne.getConfigFromFile(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await dc.checkNATSServerInstalled()||Fa("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let g=await Ec.listUsers(),w=Ne.getConfigFromFile(Z.CLUSTERING_USER),W=await Ec.getClusterUser();($r.isEmpty(W)||W.active!==!0)&&Fa(`Invalid cluster user '${w}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ha(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ha(Z.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ha(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ha(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],G=[];for(let[Wr,Tr]of g.entries())Tr.role.role===Ba.ROLE_TYPES_ENUM.CLUSTER_USER&&Tr.active&&(x.push(new vH(Tr.username,_m.decrypt(Tr.hash))),G.push(new BH(Tr.username,_m.decrypt(Tr.hash))));let Pe=[],{hub_routes:Yt}=Ne.getClusteringRoutes();if(!$r.isEmptyOrZeroLength(Yt))for(let Wr of Yt)Pe.push(`tls://${W.sys_name_encoded}:${W.uri_encoded_d_hash}@${Wr.host}:${Wr.port}`);let hr=new PH(Ne.getConfigFromFile(Z.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,c,u,l,E,S,m,Ne.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ne.getConfigFromFile(Z.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Pe,x,G);l==null&&(delete hr.tls.ca_file,delete hr.leafnodes.tls.ca_file),t=$r.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ba.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await va.writeJson(o,hr),on.trace(`Hub server config written to ${o}`));let Ac=`tls://${W.sys_name_encoded}:${W.uri_encoded_d_hash}@0.0.0.0:${m}`,gc=`tls://${W.uri_encoded_name}:${W.uri_encoded_d_hash}@0.0.0.0:${m}`,Ya=new HH(Ne.getConfigFromFile(Z.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[Ac],[gc],x,G,c,u,l,E);l==null&&delete Ya.tls.ca_file,(t===void 0||t===Ba.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await va.writeJson(_,Ya),on.trace(`Leaf server config written to ${_}`))}a(FH,"generateNatsConfig");async function Ha(e){let t=Ga.get(e);return $r.isEmpty(t)&&Fa(`port undefined for '${e}'`),await $r.isPortTaken(t)&&Fa(`'${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(Ha,"isPortAvailable");function Fa(e){let t=`Error generating clustering config: ${e}`;on.error(t),console.error(t),process.exit(1)}a(Fa,"generateNatsConfigError");async function qH(e){let{port:t,config_file:r}=dc.getServerConfig(e),{username:s,decrypt_hash:n}=await Ec.getClusterUser(),i=0,o=500;for(;i<cm;){try{let u=await dc.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){on.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=cm)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await $r.async_set_timeout(o*i)}let _="0".repeat(GH),c=nn.join(Ga.get(Z.ROOTPATH),an,r);await va.writeFile(c,_),await va.remove(c),on.notify(e,"started.")}a(qH,"removeNatsConfig")});var fm=h((Lx,Tm)=>{"use strict";var De=$(),xH=oi(),U=f(),_n=ce(),Rt=require("path"),{PACKAGE_ROOT:qa}=f(),Em=$(),Kr="/dev/null",VH=Rt.join(qa,"launchServiceScripts"),dm=Rt.join(qa,"utility/scripts"),kH=Rt.join(dm,U.HDB_RESTART_SCRIPT),Sm=Rt.resolve(qa,"dependencies",`${process.platform}-${process.arch}`,_n.NATS_BINARY_NAME);function hm(){let t=xH.licenseSearch().ram_allocation||U.RAM_ALLOCATION_ENUM.DEFAULT,r=U.MEM_SETTING_KEY+t;return{name:U.PROCESS_DESCRIPTORS.HDB,script:U.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[U.PROCESS_NAME_ENV_PROP]:U.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:qa}}a(hm,"generateMainServerConfig");var YH=9930;function $H(){De.initSync(!0);let e=De.get(U.CONFIG_PARAMS.ROOTPATH),t=Rt.join(e,"clustering",_n.NATS_CONFIG_FILES.HUB_SERVER),r=Rt.join(De.get(U.HDB_SETTINGS_NAMES.LOG_PATH_KEY),U.LOG_NAMES.HDB),s=Em.get(U.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=_n.LOG_LEVEL_FLAGS[De.get(U.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:U.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==YH?"-"+s:""),script:Sm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[U.PROCESS_NAME_ENV_PROP]:U.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return De.get(U.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Kr,i.error_file=Kr),i}a($H,"generateNatsHubServerConfig");var KH=9940;function WH(){De.initSync(!0);let e=De.get(U.CONFIG_PARAMS.ROOTPATH),t=Rt.join(e,"clustering",_n.NATS_CONFIG_FILES.LEAF_SERVER),r=Rt.join(De.get(U.HDB_SETTINGS_NAMES.LOG_PATH_KEY),U.LOG_NAMES.HDB),s=Em.get(U.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=_n.LOG_LEVEL_FLAGS[De.get(U.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:U.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==KH?"-"+s:""),script:Sm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[U.PROCESS_NAME_ENV_PROP]:U.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return De.get(U.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Kr,i.error_file=Kr),i}a(WH,"generateNatsLeafServerConfig");function QH(){De.initSync();let e=Rt.join(De.get(U.CONFIG_PARAMS.LOGGING_ROOT),U.LOG_NAMES.HDB),t={name:U.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:U.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[U.PROCESS_NAME_ENV_PROP]:U.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:VH,autorestart:!1};return De.get(U.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Kr,t.error_file=Kr),t}a(QH,"generateClusteringUpgradeV4ServiceConfig");function JH(){return{...{name:U.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[U.PROCESS_NAME_ENV_PROP]:U.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:dm},script:kH}}a(JH,"generateRestart");function XH(){return{apps:[hm()]}}a(XH,"generateAllServiceConfigs");Tm.exports={generateAllServiceConfigs:XH,generateMainServerConfig:hm,generateRestart:JH,generateNatsHubServerConfig:$H,generateNatsLeafServerConfig:WH,generateClusteringUpgradeV4ServiceConfig:QH}});var Mm=h((Bx,Um)=>{"use strict";var P=f(),Rm=p(),cn=lm(),xa=Vt(),at=ce(),H=require("pm2"),kt=fm(),Va=$(),At=N(),ZH=xr(),{startWorker:Sc,onMessageFromWorkers:zH}=ui(),yx=Y_(),jH=require("util"),Am=require("child_process"),{execFile:eB}=Am,Ux=jH.promisify(Am.exec),Mx=require("systeminformation");Um.exports={enterPM2Mode:tB,start:Sr,stop:hc,reload:gm,restart:Nm,list:Tc,describe:fc,connect:gt,kill:aB,startAllServices:oB,startService:mc,getUniqueServicesList:Om,restartAllServices:_B,isServiceRegistered:Im,reloadStopStart:bm,restartHdb:pm,deleteProcess:nB,startClusteringProcesses:wm,startClusteringThreads:ym,isHdbRestartRunning:iB,isClusteringRunning:uB,stopClustering:cB,reloadClustering:lB};var{PACKAGE_ROOT:Dx}=f(),Px=f(),{loggerWithTag:Hx}=At,un=!1;zH(e=>{e.type==="restart"&&Va.initSync(!0)});function tB(){un=!0}a(tB,"enterPM2Mode");function gt(){return new Promise((e,t)=>{H.connect((r,s)=>{At.setupConsoleLogging(),r&&t(r),e(s)})})}a(gt,"connect");var pe,rB=10,mm;function Sr(e){if(un)return sB(e);let t=eB(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=pe.indexOf(t);i>-1&&pe.splice(i,1),!mm&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<rB&&Sr(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=Va.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,_,c=0,u;for(;_=o.exec(n);){if(_.index&&at.LOG_LEVEL_HIERARCHY[i]>=at.LOG_LEVEL_HIERARCHY[u||"info"]){let S=u===at.LOG_LEVELS.ERR||u===at.LOG_LEVELS.WRN?At.OUTPUTS.STDERR:At.OUTPUTS.STDOUT;At.logCustomLevel(u||"info",S,r,n.slice(c,_.index).trim())}let[l,E]=_;c=_.index+l.length,u=at.LOG_LEVELS[E]}if(at.LOG_LEVEL_HIERARCHY[i]>=at.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===at.LOG_LEVELS.ERR||u===at.LOG_LEVELS.WRN?At.OUTPUTS.STDERR:At.OUTPUTS.STDOUT;At.logCustomLevel(u||"info",l,r,n.slice(c).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!pe){pe=[];let n=a(()=>{mm=!0,pe&&(pe.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}pe.push(t)}a(Sr,"start");function sB(e){return new Promise(async(t,r)=>{try{await gt()}catch(s){r(s)}H.start(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(sB,"startWithPM2");function hc(e){if(!un){for(let t of pe||[])t.name===e&&(pe.splice(pe.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await gt()}catch(s){r(s)}H.stop(e,async(s,n)=>{s&&(H.disconnect(),r(s)),H.delete(e,(i,o)=>{i&&(H.disconnect(),r(s)),H.disconnect(),t(o)})})})}a(hc,"stop");function gm(e){return new Promise(async(t,r)=>{try{await gt()}catch(s){r(s)}H.reload(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(gm,"reload");function Nm(e){if(!un)for(let t of pe||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await gt()}catch(s){r(s)}H.restart(e,(s,n)=>{H.disconnect(),t(n)})})}a(Nm,"restart");function nB(e){return new Promise(async(t,r)=>{try{await gt()}catch(s){r(s)}H.delete(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(nB,"deleteProcess");async function pm(){await Sr(kt.generateRestart())}a(pm,"restartHdb");async function iB(){let e=await Tc();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(iB,"isHdbRestartRunning");function Tc(){return new Promise(async(e,t)=>{try{await gt()}catch(r){t(r)}H.list((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(Tc,"list");function fc(e){return new Promise(async(t,r)=>{try{await gt()}catch(s){r(s)}H.describe(e,(s,n)=>{s&&(H.disconnect(),r(s)),H.disconnect(),t(n)})})}a(fc,"describe");function aB(){if(!un){for(let e of pe||[])e.kill();pe=[];return}return new Promise(async(e,t)=>{try{await gt()}catch(r){t(r)}H.killDaemon((r,s)=>{r&&(H.disconnect(),t(r)),H.disconnect(),e(s)})})}a(aB,"kill");async function oB(){try{await wm(),await ym(),await Sr(kt.generateAllServiceConfigs())}catch(e){throw H.disconnect(),e}}a(oB,"startAllServices");async function mc(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=kt.generateMainServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=kt.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=kt.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=kt.generateNatsHubServerConfig(),await Sr(t),await cn.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=kt.generateNatsLeafServerConfig(),await Sr(t),await cn.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=kt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Sr(t)}catch(t){throw H.disconnect(),t}}a(mc,"startService");async function Om(){try{let e=await Tc(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw H.disconnect(),e}}a(Om,"getUniqueServicesList");async function _B(e=[]){try{let t=!1,r=await Om();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await Nm(o))}t&&await bm(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw H.disconnect(),t}}a(_B,"restartAllServices");async function Im(e){return pe?.find(t=>t.name===e)?!0:!Rm.isEmptyOrZeroLength(await fc(e))}a(Im,"isServiceRegistered");async function bm(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?Va.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Va.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await fc(e),s=Rm.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await hc(e),await mc(e)):e===P.PROCESS_DESCRIPTORS.HDB?await pm():await gm(e)}a(bm,"reloadStopStart");var Cm,Lm;async function wm(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await mc(t)}}a(wm,"startClusteringProcesses");async function ym(){Cm=Sc(P.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),Lm=Sc(P.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await xa.createWorkQueueStream(at.WORK_QUEUE_CONSUMER_NAMES),await xa.updateLocalStreams();let e=await ZH.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){At.info("Starting clustering upgrade 4.0.0 process"),Sc(P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(ym,"startClusteringThreads");async function cB(){for(let e in P.CLUSTERING_PROCESSES)if(e===P.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await Cm.terminate();else if(e===P.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Lm.terminate();else{let t=P.CLUSTERING_PROCESSES[e];await hc(t)}}a(cB,"stopClustering");async function uB(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await Im(t)===!1)return!1}return!0}a(uB,"isClusteringRunning");async function lB(){await cn.generateNatsConfig(!0),await xa.reloadNATSHub(),await xa.reloadNATSLeaf(),await cn.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await cn.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(lB,"reloadClustering")});var vm=h((Gx,Bm)=>{"use strict";var Hm=require("joi"),{string:Dm}=Hm.types(),EB=ke(),Pm=f(),dB=$(),SB=ce();Bm.exports=hB;function hB(e){let t=Dm.invalid(dB.get(Pm.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(SB.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=Hm.object({operation:Dm.valid(Pm.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return EB.validateBySchema(e,r)}a(hB,"removeNodeValidator")});var Ym=h((qx,km)=>{"use strict";var{handleHDBError:Gm,hdb_errors:TB}=Y(),{HTTP_STATUS_CODES:Fm}=TB,fB=vm(),ln=N(),qm=xr(),mB=p(),ka=f(),xm=ce(),Vm=Vt(),RB=$(),{RemotePayloadObject:AB}=Ks(),{NodeSubscription:gB}=$s(),NB=Fs(),pB=jo(),OB=RB.get(ka.CONFIG_PARAMS.CLUSTERING_NODENAME);km.exports=IB;async function IB(e){ln.trace("removeNode called with:",e),qm.checkClusteringEnabled();let t=fB(e);if(t)throw Gm(t,t.message,Fm.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await qm.getNodeRecord(r);if(mB.isEmptyOrZeroLength(s))throw Gm(new Error,`Node '${r}' was not found.`,Fm.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new AB(ka.OPERATIONS_ENUM.REMOVE_NODE,OB,[]),i,o=!1;try{i=await Vm.request(`${r}.${xm.REQUEST_SUFFIX}`,n),ln.trace("Remove node reply from remote node:",r,i)}catch(c){ln.error("removeNode received error from request:",c),o=!0}for(let c=0,u=s.subscriptions.length;c<u;c++){let l=s.subscriptions[c];ln.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new gB(l.schema,l.table,!1,!1);await Vm.updateWorkStream(E,r)}let _=new NB(ka.SYSTEM_SCHEMA_NAME,ka.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await pB.deleteRecord(_),i?.status===xm.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ln.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(IB,"removeNode")});var Km=h((kx,$m)=>{"use strict";var Rc=f(),bB=p(),CB=xr(),Ze=N(),LB=wf(),wB=zf(),Vx=Mm(),yB=ys(),UB=Ym(),MB=require("semver/functions/gte"),DB=3e4,PB=7;$m.exports=HB;async function HB(){try{Ze.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await yB.setSchemaDataToGlobalAsync();let e=await CB.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===Rc.PRE_4_0_0_VERSION&&t.push(BB(n))}await Promise.allSettled(t),Ze.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Ze.error(e),e}}a(HB,"updateAllNodes");async function BB(e){try{let{name:t,subscriptions:r}=e;Ze.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<PB;){let i=[];if(await LB.buildNodeStatus(e,i),Ze.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&MB(i[0].system_info.hdb_version,"4.0.0")){Ze.notify("Received open status from node:",t,"calling add node");let o={operation:Rc.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await wB(o,!0),Ze.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Ze.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await bB.async_set_timeout(DB)}s||(Ze.error("4.0.0 node update was unable to update connection to node:",t),Ze.error("Removing following node record from hdb_nodes",e),await UB({operation:Rc.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Ze.error(t),t}}a(BB,"updateNode")});var vB=Km();(async()=>{try{await vB()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();