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,7 +2,7 @@
2
2
  `,oy={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},cy=["*","%"],_y="unauthorized_access",uy="func_val",ly={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Ey={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},dy={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"},hy={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},fy={HTTP:"http"},Sy={STOPPED:"stopped",ONLINE:"online"},Ty="3.x.x";Uh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:ph,HDB_SUPPORT_URL:Nh,HDB_PRICING_URL:$w,SUPPORT_HELP_MSG:Yw,LICENSE_HELP_MSG:Oh,HDB_PROC_NAME:Rh,HDB_PROC_DESCRIPTOR:du,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca,CLUSTERING_HUB_PROC_DESCRIPTOR:wa,SYSTEM_SCHEMA_NAME:uC,HASH_FOLDER_NAME:lC,HDB_HOME_DIR_NAME:EC,UPDATE_FILE_NAME:SC,LICENSE_KEY_DIR_NAME:hC,BOOT_PROPS_FILE_NAME:fC,JOB_TYPE_ENUM:YC,JOB_STATUS_ENUM:HC,SYSTEM_TABLE_NAMES:UC,SYSTEM_TABLE_HASH_ATTRIBUTES:MC,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:qC,S3_BUCKET_AUTH_KEYS:GC,VALID_SQL_OPS_ENUM:FC,GEO_CONVERSION_ENUM:VC,HDB_SETTINGS_NAMES:wh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:kC,SERVICE_ACTIONS_ENUM:xC,CLUSTER_MESSAGE_TYPE_ENUM:KC,CLUSTER_CONNECTION_DIRECTION_ENUM:WC,CLUSTER_EVENTS_DEFS_ENUM:ZC,PERIOD_REGEX:zw,DOUBLE_PERIOD_REGEX:jw,UNICODE_PERIOD:eC,FORWARD_SLASH_REGEX:tC,UNICODE_FORWARD_SLASH:rC,ESCAPED_FORWARD_SLASH_REGEX:sC,ESCAPED_PERIOD_REGEX:nC,ESCAPED_DOUBLE_PERIOD_REGEX:iC,REG_KEY_FILE_NAME:BC,RESTART_TIMEOUT_MS:RC,HDB_FILE_PERMISSIONS:AC,SCHEMA_DIR_NAME:NC,TRANSACTIONS_DIR_NAME:OC,LIMIT_COUNT_NAME:IC,ID_ATTRIBUTE_STRING:bC,INSERT_MODULE_ENUM:yC,UPGRADE_JSON_FIELD_NAMES_ENUM:LC,RESTART_CODE:TC,RESTART_CODE_NUM:mC,CLUSTER_OPERATIONS:qn,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:PC,HDB_INTERNAL_SC_CHANNEL_PREFIX:nt,INTERNAL_SC_CHANNELS:DC,CLUSTERING_MESSAGE_TYPES:ny,HDB_FILE_SUFFIX:dC,BLOB_FOLDER_NAME:pC,HDB_TRASH_DIR:gC,ORIGINATOR_SET_VALUE:iy,LICENSE_VALUES:JC,RAM_ALLOCATION_ENUM:XC,STORAGE_TYPES_ENUM:QC,TIME_STAMP_NAMES_ENUM:yh,TIME_STAMP_NAMES:ty,PERMS_UPDATE_RELEASE_TIMESTAMP:ry,SEARCH_NOT_FOUND_MESSAGE:Kw,SEARCH_ATTRIBUTE_NOT_FOUND:Ww,LICENSE_ROLE_DENIED_RESPONSE:Qw,LICENSE_MAX_CONNS_REACHED:Jw,BASIC_LICENSE_MAX_NON_CU_ROLES:gh,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:kw,VALUE_SEARCH_COMPARATORS:Lh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:sy,LICENSE_FILE_NAME:vC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:zC,NEW_LINE:ay,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Zw,MOMENT_DAYS_TAG:aC,API_TURNOVER_SEC:oC,LOOPBACK:Xw,CODE_EXTENSION:ba,WILDCARD_SEARCH_VALUE:cC,NODE_ERROR_CODES:jC,JAVASCRIPT_EXTENSION:mh,PERMS_CRUD_ENUM:oy,UNAUTHORIZED_PERMISSION_NAME:_y,SEARCH_WILDCARDS:cy,FUNC_VAL:uy,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:ly,JWT_ENUM:Ey,CLUSTERING_FLAG:ey,ITC_EVENT_TYPES:dy,CUSTOM_FUNCTION_PROC_NAME:Ah,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ia,SERVICES:hy,THREAD_TYPES:fy,MEM_SETTING_KEY:_C,HDB_RESTART_SCRIPT:yw,PROCESS_DESCRIPTORS:Pw,SERVICE_SERVERS:Gw,SERVICE_SERVERS_CWD:Eu,PROCESS_DESCRIPTORS_VALIDATE:Hw,LAUNCH_SERVICE_SCRIPTS:Fw,LOG_LEVELS:vw,PROCESS_NAME_ENV_PROP:wC,LOG_NAMES:Bw,PM2_PROCESS_STATUSES:Sy,CONFIG_PARAM_MAP:Ch,CONFIG_PARAMS:S,HDB_CONFIG_FILE:bw,HDB_DEFAULT_CONFIG_FILE:ww,ROLE_TYPES_ENUM:xw,BOOT_PROP_PARAMS:Ih,INSTALL_PROMPTS:CC,HDB_ROOT_DIR_NAME:Cw,CLUSTERING_PROCESSES:qw,FOREGROUND_PID_FILE:Mw,PACKAGE_ROOT:yr,PRE_4_0_0_VERSION:Ty,SCHEMAS_PARAM_CONFIG:$C,HDB_PID_FILE:Dw}});var hu=f((fX,Ph)=>{"use strict";var Mh=require("minimist");Ph.exports=my;function my(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Dh(process.env),s=Dh(Mh(process.argv))):(r=process.env,s=Mh(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(my,"assignCMDENVVariables");function Dh(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Dh,"objKeysToLowerCase")});var I=f((TX,Kh)=>{"use strict";var Ws=require("fs-extra"),{workerData:Ry,threadId:Ay}=require("worker_threads"),Lr=require("path"),Hh=require("yaml"),qh=require("properties-reader"),Ae=m(),Bh=hu(),py=require("os"),{PACKAGE_ROOT:Su}=m(),Gh={};for(let e in console)Gh[e]=console[e];var ke={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Fh={STDOUT:"stdOut",STDERR:"stdErr"},gy=Lr.join(Su,"logs"),Ny=Lr.join(Su,"config/yaml/",Ae.HDB_DEFAULT_CONFIG_FILE),Oy=1e4,ar,or,Ve,ya,La,Ua,Fn,Gn;Gn===void 0&&xh();Kh.exports={notify:$h,fatal:Yh,error:xn,warn:Au,info:Ma,debug:Ru,trace:mu,setLogLevel:Uy,log_level:Ve,loggerWithTag:Iy,suppressLogging:by,initLogSettings:xh,setupConsoleLogging:Vh,logCustomLevel:yy,closeLogFile:Tu,getLogFilePath:()=>Ua,OUTPUTS:Fh};function xh(e=!1){try{if(Gn===void 0||e){Tu();let t=Ly();Gn=qh(t);let r=Bh(["ROOTPATH"]);({level:Ve,config_log_path:La,to_file:ar,to_stream:or}=My(r.ROOTPATH?Lr.join(r.ROOTPATH,Ae.HDB_CONFIG_FILE):Gn.get("settings_path"))),ya=Ae.LOG_NAMES.HDB,Ua=Lr.join(La,ya)}}catch(t){if(Gn=void 0,t.code===Ae.NODE_ERROR_CODES.ENOENT){let r=Bh(Object.keys(Ae.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Ae.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let _=r[o];if(c===Ae.CONFIG_PARAMS.LOGGING_LEVEL){Ve=_;continue}if(c===Ae.CONFIG_PARAMS.LOGGING_STDSTREAMS){or=_;continue}c===Ae.CONFIG_PARAMS.LOGGING_FILE&&(ar=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Dy();ar=ar===void 0?n:ar,ar=vh(ar),or=or===void 0?i:or,or=vh(or),Ve=Ve===void 0?s:Ve,La=gy,ya=Ae.LOG_NAMES.INSTALL,Ua=Lr.join(La,ya);return}throw xn("Error initializing log settings"),xn(t),t}Vh()}a(xh,"initLogSettings");var fu=!0;function Vh(){Ks("error",xn),Ks("warn",Au),Ks("log",Ma),Ks("info",Ma),Ks("debug",Ru),Ks("trace",mu)}a(Vh,"setupConsoleLogging");function Ks(e,t){console[e]=function(...r){if(fu&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Gh[e](...r)}}a(Ks,"logConsole");function Iy(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r($h),fatal:r(Yh),error:r(xn),warn:r(Au),info:r(Ma),debug:r(Ru),trace:r(mu)};function r(s){return function(...n){return s(t,...n)}}}a(Iy,"loggerWithTag");function by(e){try{fu=!1,e()}finally{fu=!0}}a(by,"suppressLogging");var wy=Ry?.name?.replace(/ /g,"-")||"main";function cr(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),o.unshift(_||wy+"/"+Ay);c<n;c++){let u=t[c];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
3
  `}a(cr,"createLogRecord");function Vn(e){ar&&kh(e),or&&process.stdout.write(e)}a(Vn,"logStdOut");function Da(e){ar&&kh(e),or&&process.stderr.write(e)}a(Da,"logStdErr");function kh(e){Cy(),Ws.appendFileSync(Fn,e)}a(kh,"logToFile");function Tu(){try{Ws.closeSync(Fn)}catch{}Fn=null}a(Tu,"closeLogFile");function Cy(){Fn||(Fn=Ws.openSync(Ua,"a"),setTimeout(()=>{Tu()},Oy).unref())}a(Cy,"openLogFile");function Ma(...e){ke[Ve]<=ke.info&&Vn(cr("info",e))}a(Ma,"info");function mu(...e){ke[Ve]<=ke.trace&&Vn(cr("trace",e))}a(mu,"trace");function xn(...e){ke[Ve]<=ke.error&&Da(cr("error",e))}a(xn,"error");function Ru(...e){ke[Ve]<=ke.debug&&Vn(cr("debug",e))}a(Ru,"debug");function $h(...e){ke[Ve]<=ke.notify&&Vn(cr("notify",e))}a($h,"notify");function Yh(...e){ke[Ve]<=ke.fatal&&Da(cr("fatal",e))}a(Yh,"fatal");function Au(...e){ke[Ve]<=ke.warn&&Da(cr("warn",e))}a(Au,"warn");function yy(e,t,...r){t===Fh.STDERR?Da(cr(e,r)):Vn(cr(e,r))}a(yy,"logCustomLevel");function Ly(){let e;try{e=py.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Lr.join(e,Ae.HDB_HOME_DIR_NAME,Ae.BOOT_PROPS_FILE_NAME);return Ws.existsSync(t)||(t=Lr.join(Su,"utility/hdb_boot_properties.file")),t}a(Ly,"getPropsFilePath");function Uy(e){Ve=e}a(Uy,"setLogLevel");function vh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(vh,"autoCastBoolean");function My(e){try{if(e.includes("config/settings.js")){let o=qh(e);return{level:o.get(Ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Lr.dirname(o.get(Ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Hh.parseDocument(Ws.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===Ae.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(My,"getLogConfig");function Dy(){try{let e=Hh.parseDocument(Ws.readFileSync(Ny,"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(Dy,"getDefaultConfig")});var Qh=f((RX,Wh)=>{"use strict";var Py=require("util"),By=require("path"),vy=require("child_process"),Hy=Py.promisify(vy.execFile),qy=1e3*1e3*10;Wh.exports={findPs:Gy};async function Gy(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Hy("ps",["wwxo",`pid,${r}`],{maxBuffer:qy});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:By.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(Gy,"findPs")});var Le=f((pX,Xh)=>{"use strict";var Fy="__dbis__",xy="__environment_name__",Vy="__dbi_defintion__",ky={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"},$y=["__createdtime__","__updatedtime__"],Yy="\uFFFF",Jh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Ky=Object.values(Jh);Xh.exports={INTERNAL_DBIS_NAME:Fy,DBI_DEFINITION_NAME:Vy,SEARCH_TYPES:ky,TIMESTAMP_NAMES:$y,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:xy,TRANSACTIONS_DBI_NAMES_ENUM:Jh,TRANSACTIONS_DBIS:Ky,OVERFLOW_MARKER:Yy}});var it=f((gX,af)=>{"use strict";var Zh=m(),zh=Le(),jh={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},ef=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tf={500:ef("There was an error processing your request."),400:"Invalid request"},Wy=tf[jh.INTERNAL_SERVER_ERROR],Qy={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.`},Jy={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Xy={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"},Zy={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 ${zh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${zh.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"},zy={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Zh.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 ${Zh.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"},rf={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"},jy={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."},eL={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`},tL={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"},rL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},sL={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`},sf={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.`},nf={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}`},nL={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."},iL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},aL={...rf,...Xy,...Qy,...jy,...eL,...tL,...rL,...sL,...zy,...sf,...nf,...nL,...iL,...Jy};af.exports={CHECK_LOGS_WRAPPER:ef,HDB_ERROR_MSGS:aL,DEFAULT_ERROR_MSGS:tf,DEFAULT_ERROR_RESP:Wy,HTTP_STATUS_CODES:jh,LMDB_ERRORS_ENUM:Zy,AUTHENTICATION_ERROR_MSGS:rf,VALIDATION_ERROR_MSGS:sf,ITC_ERRORS:nf}});var y=f((OX,_f)=>{"use strict";var Qs=it(),oL=I(),cL=m(),kn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,of),this.http_resp_code=s||Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Qs.DEFAULT_ERROR_MSGS[s]?Qs.DEFAULT_ERROR_MSGS[s]:Qs.DEFAULT_ERROR_MSGS[Qs.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&&oL[n](i)}};a(kn,"HdbError");function of(e,t,r,s=cL.LOG_LEVELS.ERROR,n=null,i=!1){if(cf(e))return e;let o=new kn(e,t,r,s,n);return i&&delete o.stack,o}a(of,"handleHDBError");function cf(e){return e.__proto__.constructor.name===kn.name}a(cf,"isHDBError");_f.exports={isHDBError:cf,handleHDBError:of,hdb_errors:Qs}});var b=f((wX,Nf)=>{"use strict";var cs=require("path"),_L=require("fs-extra"),Me=I(),uf=require("fs-extra"),$n=require("os"),uL=require("net"),lL=require("recursive-iterator"),Ue=m(),hf=Qh(),lf=require("papaparse"),Pa=require("moment"),{inspect:EL}=require("util"),Ef=require("is-number"),bX=require("lodash"),{hdb_errors:Ba}=y(),ff=require("util").promisify(setTimeout),dL=100,hL=5,fL="",SL=4,df={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Nf.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:RL,arrayHasEmptyOrZeroLengthValues:AL,buildFolderPath:pL,isBoolean:Sf,errorizeMessage:TL,stripFileExtension:NL,autoCast:OL,autoCastJSON:Tf,autoCastJSONDeep:pu,removeDir:IL,compareVersions:bL,isCompatibleDataVersion:wL,escapeRawValue:CL,unescapeValue:yL,stringifyProps:LL,timeoutPromise:ML,isClusterOperation:PL,getClusterUser:vL,checkGlobalSchemaTable:BL,getHomeDir:Rf,getPropsFilePath:UL,promisifyPapaParse:HL,removeBOM:Af,createEventPromise:qL,checkProcessRunning:GL,checkSchemaTableExist:FL,checkSchemaExists:pf,checkTableExists:gf,getStartOfTomorrowInSeconds:xL,getLimitKey:VL,isObject:gL,isNotEmptyAndHasValue:mL,autoCasterIsNumberCheck:mf,backtickASTSchemaItems:kL,isPortTaken:DL,stopProcess:$L,createForkArgs:YL,autoCastBoolean:KL,async_set_timeout:ff,getTableHashAttribute:WL,doesSchemaExist:QL,doesTableExist:JL,stringifyObj:XL,ms_to_time:ZL,changeExtension:zL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function TL(e){return e instanceof Error?e:new Error(e)}a(TL,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function mL(e){return!at(e)&&(e||e===0||e===""||Sf(e))}a(mL,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function RL(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(RL,"arrayHasEmptyValues");function AL(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(AL,"arrayHasEmptyOrZeroLengthValues");function pL(...e){try{return e.join(cs.sep)}catch{console.error(e)}}a(pL,"buildFolderPath");function Sf(e){return at(e)?!1:e===!0||e===!1}a(Sf,"isBoolean");function gL(e){return at(e)?!1:typeof e=="object"}a(gL,"isObject");function NL(e){return kt(e)?fL:e.slice(0,-SL)}a(NL,"stripFileExtension");function OL(e){return at(e)||e===""||typeof e!="string"?e:df[e]!==void 0?df[e]:mf(e)===!0?Number(e):e}a(OL,"autoCast");function Tf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Tf,"autoCastJSON");function pu(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=pu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=pu(r);s!==r&&(e[t]=s)}return e}else return Tf(e)}a(pu,"autoCastJSONDeep");function mf(e){if(e.startsWith("0.")&&Ef(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ef(e))}a(mf,"autoCasterIsNumberCheck");async function IL(e){if(kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await uf.emptyDir(e),await uf.remove(e)}catch(t){throw Me.error(`Error removing files in ${e} -- ${t}`),t}}a(IL,"removeDir");function bL(e,t){if(kt(e)){Me.info("Invalid current version sent as parameter.");return}if(kt(t)){Me.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("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(bL,"compareVersions");function wL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(wL,"isCompatibleDataVersion");function CL(e){if(at(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(CL,"escapeRawValue");function yL(e){if(at(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(yL,"unescapeValue");function LL(e,t){if(at(e))return Me.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+$n.EOL}!kt(s)&&s[0]===";"?r+=" "+s+n+$n.EOL:kt(s)||(r+=s+"="+n+$n.EOL)}catch{Me.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(LL,"stringifyProps");function Rf(){let e;try{e=$n.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Rf,"getHomeDir");function UL(){let e=cs.join(Rf(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return _L.existsSync(e)||(e=cs.join(__dirname,"../","hdb_boot_properties.file")),e}a(UL,"getPropsFilePath");function ML(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ML,"timeoutPromise");async function DL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=uL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(DL,"isPortTaken");function PL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Me.error(`Error checking operation against cluster ops ${t}`)}return!1}a(PL,"isClusterOperation");function BL(e,t){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(BL,"checkGlobalSchemaTable");function vL(e,t){if(at(t)){Me.warn("No CLUSTERING_USER defined, clustering disabled");return}if(at(e)||kt(e)){Me.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){Me.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Me.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(vL,"getClusterUser");function HL(){lf.parsePromise=function(e,t){return new Promise(function(r,s){lf.parse(e,{header:!0,transformHeader:Af,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(HL,"promisifyPapaParse");function Af(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Af,"removeBOM");function qL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Me.info(`Got cluster status event response: ${EL(n)}`);try{i.cancel()}catch{Me.error("Error trying to cancel timeout.")}s(n)})})}a(qL,"createEventPromise");async function GL(e){let t=!0,r=0;do await ff(dL*r++),(await hf.findPs(e)).length>0&&(t=!1);while(t&&r<hL);if(t)throw new Error(`process ${e} was not started`)}a(GL,"checkProcessRunning");function FL(e,t){let r=pf(e);if(r)return r;let s=gf(e,t);if(s)return s}a(FL,"checkSchemaTableExist");function pf(e){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(pf,"checkSchemaExists");function gf(e,t){if(!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gf,"checkTableExists");function xL(){let e=Pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a(xL,"getStartOfTomorrowInSeconds");function VL(){return Pa().utc().format("DD-MM-YYYY")}a(VL,"getLimitKey");function kL(e){try{let t=new lL(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){Me.error("Got an error back ticking items."),Me.error(t)}}a(kL,"backtickASTSchemaItems");async function $L(e){let t=$n.userInfo();(await hf.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Me.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a($L,"stopProcess");function YL(e){return[e]}a(YL,"createForkArgs");function KL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(KL,"autoCastBoolean");function WL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(WL,"getTableHashAttribute");function QL(e){return global?.hdb_schema?.[e]!==void 0}a(QL,"doesSchemaExist");function JL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(JL,"doesTableExist");function XL(e){try{return JSON.stringify(e)}catch{return e}}a(XL,"stringifyObj");function ZL(e){let t=Pa.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(ZL,"ms_to_time");function zL(e,t){let r=cs.basename(e,cs.extname(e));return cs.join(cs.dirname(e),r+t)}a(zL,"changeExtension")});var _s=f((yX,jL)=>{jL.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 vf=f((UX,Bf)=>{"use strict";var gu=require("recursive-iterator"),eU=require("alasql"),Nu=require("clone"),Of=b(),{handleHDBError:If,hdb_errors:tU}=y(),{HDB_ERROR_MSGS:bf,HTTP_STATUS_CODES:wf}=tU,rU=["DISTINCT_ARRAY"],Cf=Symbol("validateTables"),Ou=Symbol("validateTable"),LX=Symbol("getAllColumns"),yf=Symbol("validateAllColumns"),va=Symbol("findColumn"),Lf=Symbol("validateOrderBy"),Yn=Symbol("validateSegment"),Iu=Symbol("validateColumn"),Uf=Symbol("setColumnsForTable"),Mf=Symbol("checkColumnsForAsterisk"),Df=Symbol("validateGroupBy"),Pf=Symbol("hasColumns"),Ha=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Cf](),this[Mf](),this[yf]()}[Cf](){if(this[Pf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ou](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ou](t.table)})}}[Pf](){let t=!1,r=new gu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ou](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw If(new Error,bf.SCHEMA_NOT_FOUND(t.databaseid),wf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw If(new Error,bf.TABLE_NOT_FOUND(t.databaseid,t.tableid),wf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Nu(s);n.table=Nu(t),this.attributes.push(n)})}[va](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)}[Mf](){let t=new gu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Uf](r.tableid)}[Uf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new eU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yf](){this[Yn](this.statement.columns,!1),this[Yn](this.statement.joins,!1),this[Yn](this.statement.where,!1),this[Df](this.statement.group,!1),this[Yn](this.statement.order,!0)}[Yn](t,r){if(!t)return;let s=new gu(t),n=[];for(let{node:i,path:o}of s)!Of.isEmpty(i)&&!Of.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Lf](i):n.push(this[Iu](i)));return n}[Df](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&rU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Nu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[va](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[va](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Lf](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[Iu](t)}[Iu](t){let r=this[va](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(Ha,"SelectValidator");Bf.exports=Ha});var bu=f((DX,Hf)=>{"use strict";var qa=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(qa,"BridgeMethods");Hf.exports=qa});var us=f((HX,kf)=>{"use strict";var qf=it().LMDB_ERRORS_ENUM,BX=require("lmdb"),sU=Le(),vX=require("buffer").Buffer,{OVERFLOW_MARKER:Gf,MAX_SEARCH_KEY_LENGTH:Ga}=sU,Ff=["number","string","symbol","boolean","bigint"];function nU(e){if(e=e?.database||e,!e)throw new Error(qf.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(qf.INVALID_ENVIRONMENT)}a(nU,"validateEnv");function iU(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(iU,"stringifyData");function aU(e){return e instanceof Date?e.valueOf():e}a(aU,"convertKeyValueToWrite");function oU(e){if(e==null)return;if(Ff.includes(typeof e))return e.length>Ga?[e.slice(0,Ga)+Gf]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Ff.includes(typeof n)&&(n.length>Ga?t.push(n.slice(0,Ga)+Gf):t.push(n))}}return t}a(oU,"getIndexedValues");var Fa=0,xf=0;function Vf(){xf=Date.now()-performance.now()}a(Vf,"adjustStartTime");Vf();var cU=6e4;setInterval(Vf,cU).unref();function _U(){let e=performance.now()+xf;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(_U,"getNextMonotonicTime");kf.exports={validateEnv:nU,stringifyData:iU,convertKeyValueToWrite:aU,getNextMonotonicTime:_U,getIndexedValues:oU}});var Yf=f((GX,$f)=>{"use strict";var xa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(xa,"DBIDefinition");$f.exports=xa});var Wf=f((xX,Kf)=>{"use strict";var uU={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))},lU="certificate.pem",EU="privateKey.pem",dU="ca.pem";Kf.exports={CERTIFICATE_VALUES:uU,CERTIFICATE_PEM_NAME:lU,PRIVATEKEY_PEM_NAME:EU,CA_PEM_NAME:dU}});var te=f((VX,Qf)=>{"use strict";var $e=require("validate.js");$e.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||$e.validators.type.checks[t](e)?null:` must be a '${t}' value`};$e.validators.type.checks={Object:function(e){return $e.isObject(e)&&!$e.isArray(e)},Array:$e.isArray,Integer:$e.isInteger,Number:$e.isNumber,String:$e.isString,Date:$e.isDate,Boolean:function(e){return typeof e=="boolean"}};$e.validators.hasValidFileExt=function(e,t){return $e.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};Qf.exports={validateObject:hU,validateObjectAsync:fU,validateBySchema:SU};function hU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=$e(e,t,{format:"flat"});return r?new Error(r):null}a(hU,"validateObject");async function fU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await $e.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(fU,"validateObjectAsync");function SU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(SU,"validateBySchema")});var Cu=f((YX,zf)=>{"use strict";var TU=require("fs-extra"),P=require("joi"),mU=require("os"),{boolean:re,string:_r,number:Mt,array:wu}=P.types(),{totalmem:Jf}=require("os"),Kn=require("path"),RU=I(),ka=b(),$X=Wf(),AU=m(),pU=te(),Xf="log",gU="custom_functions",NU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",OU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",IU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",bU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",wU="rootPath config parameter is undefined",CU="clustering.enabled config parameter is undefined",ls=Mt.min(0).required(),$a=wu.items({host:_r.required(),port:ls}).empty(null),Ur;zf.exports={configValidator:yU,routesValidator:BU,route_constraints:$a};function yU(e){if(Ur=e.rootPath,ka.isEmpty(Ur))throw wU;let t=re.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(PU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(LU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=P.string().empty(null).default(Va),_=P.custom(UU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw CU;let l;return u===!0?l=P.object({enabled:t,hubServer:P.object({cluster:P.object({name:P.required().empty(null),network:P.object({port:ls,routes:$a}).required()}).required(),leafNodes:P.object({network:P.object({port:ls}).required()}).required(),network:P.object({port:ls}).required()}).required(),leafServer:P.object({network:P.object({port:ls,routes:$a}).required(),streams:P.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:P.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:re.optional(),tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required(),verify:re.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:re.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}),nodeEnv:r,root:n,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:P.object({enabled:t}).required(),logging:P.object({file:re.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:re.optional(),compress:re.optional(),interval:_r.custom(DU).optional().empty(null),maxSize:_r.custom(MU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:re.required(),auditLog:re.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:re.required(),network:P.object({cors:re.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}).required(),nodeEnv:r,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:P.object({threads:s}).required(),storage:P.object({writeAsync:re.required(),overlappingSync:re.optional(),caching:re.optional(),compression:re.optional(),noReadAhead:re.optional(),path:_,prefetchWrites:re.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(yU,"configValidator");function Zf(e){return TU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Zf,"doesPathExist");function LU(e,t){if(e===null)return;let r=Zf(e);return r?t.message(r):e}a(LU,"validatePemFile");function UU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Zf(e);if(r)return t.message(r)}a(UU,"validatePath");function MU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(NU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(IU):e}a(MU,"validateRotationMaxSize");function DU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(OU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(bU):e}a(DU,"validateRotationInterval");function PU(e,t){let r=t.state.path.join("."),s=mU.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Jf();return i=Math.round(Math.min(i,Jf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),RU.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(PU,"setDefaultThreads");function Va(e,t){if(!ka.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ka.isEmpty(Ur))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Kn.join(Ur,gU);case"logging.root":return Kn.join(Ur,Xf);case"clustering.leafServer.streams.path":return Kn.join(Ur,"clustering","leaf");case"storage.path":return Kn.join(Ur,AU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Kn.join(Ur,Xf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function BU(e){let t=P.object({routes:$a});return pU.validateBySchema({routes:e},t)}a(BU,"routesValidator")});var lr=f((WX,cS)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:vU,routesValidator:jf}=Cu(),Rt=require("fs-extra"),HU=require("yaml"),$t=require("path"),qU=require("is-number"),tS=require("properties-reader"),GU=require("lodash"),{handleHDBError:FU}=y(),{HTTP_STATUS_CODES:xU,HDB_ERROR_MSGS:Ya}=it(),VU=require("minimist"),{SCHEMAS_PARAM_CONFIG:Wn,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:ur}=At,kU="Unable to get config value because config is uninitialized",$U="Config successfully initialized",YU="Error backing up config file",KU="Empty parameter sent to getConfigValue",rS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),WU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",eS={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"},Ka,Ne;cS.exports={createConfigFile:QU,getDefaultConfig:JU,getConfigValue:nS,initConfig:iS,flattenConfig:Es,updateConfigValue:aS,updateConfigObject:ZU,getConfiguration:eM,setConfiguration:tM,readConfigFile:Mu,getClusteringRoutes:rM,initOldConfig:oS,getConfigFromFile:sM};function QU(e){let t=Js(rS);Ka=Es(t.toJSON());let r;for(let o in e){let c=ur[o.toLowerCase()];if(c===Mr.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=yu(c,e[o]);try{t.setIn([..._],u)}catch(l){Te.error(l)}}}r&&sS(t,r),Uu(t);let s=t.toJSON();Ne=Es(s);let n=t.getIn(["rootPath"]),i=$t.join(n,At.HDB_CONFIG_FILE);Rt.createFileSync(i),Rt.writeFileSync(i,String(t)),Te.trace(`Config file written to ${i}`)}a(QU,"createConfigFile");function sS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ot.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Wn.TABLES))for(let i in s[n][Wn.TABLES])for(let o in s[n][Wn.TABLES][i]){let c=s[n][Wn.TABLES][i][o],_=[Mr.SCHEMAS,n,Wn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Te.error("Error parsing schemas CLI/env config arguments",s)}}a(sS,"setSchemasConfig");function JU(e){if(Ka===void 0){let r=Js(rS);Ka=Es(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a(JU,"getDefaultConfig");function nS(e){if(ot.isEmpty(e)){Te.error(KU);return}if(Ne===void 0){Te.trace(kU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(nS,"getConfigValue");function Lu(e){let t=VU(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):tS(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Lu,"getConfigFilePath");function iS(e=!1){if(Ne===void 0||e){let t=ot.getPropsFilePath();try{Rt.accessSync(t,Rt.constants.F_OK|Rt.constants.R_OK)}catch(i){throw Te.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Lu(t),s;if(r.includes("config/settings.js"))try{oS(r);return}catch(i){if(i.code!==At.NODE_ERROR_CODES.ENOENT)throw i}try{s=Js(r)}catch(i){if(i.code===At.NODE_ERROR_CODES.ENOENT){Te.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 Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}XU(s,r),Uu(s);let n=s.toJSON();if(Ne=Es(n),Ne.logging_rotation_rotate)for(let i in eS)Ne[i]&&Te.error(`Config ${eS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace($U)}}a(iS,"initConfig");function XU(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(XU,"checkForUpdatedConfig");function Uu(e){let t=e.toJSON(),r=vU(t);if(r.error)throw Ya.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(Uu,"validateConfig");function ZU(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(ZU,"updateConfigObject");function aS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&iS();let i=nS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Mr.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Mr.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&sS(c,_),Uu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&zU(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=Es(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aS,"updateConfigValue");function zU(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(YU),Te.error(r)}}a(zU,"backupConfigFile");var jU=["schemas"];function Es(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!jU.includes(r)){let s=Es(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(Es,"flattenConfig");function yu(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(qU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function eM(){let e=ot.getPropsFilePath(),t=Lu(e);return Js(t).toJSON()}a(eM,"getConfiguration");async function tM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aS(void 0,void 0,n,!0),WU}catch(i){throw typeof i=="string"||i instanceof String?FU(i,i,xU.BAD_REQUEST,void 0,void 0,!0):i}}a(tM,"setConfiguration");function Mu(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Lu(e);return Js(t).toJSON()}a(Mu,"readConfigFile");function Js(e){return HU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function rM(){let e=Mu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=jf(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=jf(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(rM,"getClusteringRoutes");function oS(e){let t=tS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Mr.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(oS,"initOldConfig");function sM(e){let t=Mu();return GU.get(t,e.replaceAll("_","."))}a(sM,"getConfigFromFile")});var v=f((JX,uS)=>{"use strict";var Du=require("fs-extra"),Yt=require("path"),nM=require("os"),iM=require("properties-reader"),Qn=I(),Xs=b(),L=m(),Wa=lr(),aM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",_S=!1,oM={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Er={};uS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:cM,setHdbBasePath:_M,get:uM,initSync:EM,setProperty:k,initTestEnvironment:dM};function cM(){return Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(cM,"getHdbBasePath");function _M(e){Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(_M,"setHdbBasePath");function uM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(uM,"get");function k(e,t){oM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function lM(){let e;try{e=Xs.getPropsFilePath(),Du.accessSync(e,Du.constants.F_OK|Du.constants.R_OK),_S=!0;let t=iM(e);return Er[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Er[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a(lM,"doesPropFileExist");function EM(e=!1){try{(_S||lM())&&(Wa.initConfig(e),Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(aM),Qn.error(t),console.error(t),process.exit(1)}}a(EM,"initSync");function dM(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:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,nM.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(dM,"initTestEnvironment")});var dS=f((ZX,ES)=>{"use strict";var Pu=v(),lS=m();Pu.initSync();var hM=Pu.get(lS.CONFIG_PARAMS.STORAGE_COMPRESSION),fM=Pu.get(lS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=hM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=fM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");ES.exports=Ja});var SS=f((jX,fS)=>{"use strict";var Zs=v(),Jn=m();Zs.initSync();var SM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",hS=Zs.get(Jn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),TM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=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=SM,hS!==void 0&&(this.overlappingSync=hS),this.noReadAhead=TM}};a(Xa,"OpenEnvironmentObject");fS.exports=Xa});var X=f((tZ,NS)=>{"use strict";var Bu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=us(),TS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=Yf(),vu=dS(),mS=SS(),Dr=Le(),Pt=Dr.INTERNAL_DBIS_NAME,RS=Dr.DBI_DEFINITION_NAME,mM="data.mdb",RM="lock.mdb",Xn=".mdb",AM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(t,r),this.key_type=this.dbi[Dr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Dr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Bu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function Hu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(Hu,"pathEnvNameValidation");async function qu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Xn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,mM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(qu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function pM(e,t,r=!1,s=!1){Hu(e,t),t=t.toString();try{return await qu(e,t,s),Gu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new mS(s?i:i+Xn,!1),c=Bu.open(o);c.dbis=Object.create(null);let _=new vu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Fu(e,t,r);return c[Dr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(pM,"createEnvironment");async function gM(e,t,r,s=!0){let n=await Gu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(gM,"copyEnvironment");async function Gu(e,t,r=!1){Hu(e,t),t=t.toString();let s=Fu(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 qu(e,t),i=Dt.join(e,t+Xn),o=n!=i,c=new mS(n,o),_=Bu.open(c);_.dbis=Object.create(null);let u=pS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Dr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Gu,"openEnvironment");async function NM(e,t,r=!1){Hu(e,t),t=t.toString();let s=Dt.join(e,t+Xn),n=await qu(e,t);if(global.lmdb_map!==void 0){let i=Fu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await AS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+AM:Dt.join(Dt.dirname(n),RM))}a(NM,"deleteEnvironment");async function AS(e){za.validateEnv(e);let t=e[Dr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(AS,"closeEnvironment");function Fu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Fu,"getCachedEnvironmentName");function OM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(OM,"listDBIDefinitions");function pS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(pS,"listDBIs");function IM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(IM,"getDBIDefinition");function gS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new vu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[RS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=IM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new vu(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(Oe.DBI_DOES_NOT_EXIST):n}return s[RS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function bM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Dr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(bM,"statDBI");async function wM(e,t){try{let r=Dt.join(e,t+Xn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(wM,"environmentDataSize");function CM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(CM,"dropDBI");function yM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)gS(e,n,n!==t,n===t);else throw i}}}a(yM,"initializeDBIs");NS.exports={openDBI:gt,openEnvironment:Gu,createEnvironment:pM,listDBIs:pS,listDBIDefinitions:OM,createDBI:gS,dropDBI:CM,statDBI:bM,deleteEnvironment:NM,initializeDBIs:yM,TransactionCursor:Za,environmentDataSize:wM,copyEnvironment:gM,closeEnvironment:AS}});var IS=f((sZ,OS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");OS.exports=to});var wS=f((iZ,bS)=>{"use strict";var ro=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(ro,"UpdateRecordsResponseObject");bS.exports=ro});var yS=f((oZ,CS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");CS.exports=so});var zs=f((EZ,MS)=>{"use strict";var LM=X(),UM=IS(),MM=wS(),DM=yS(),Kt=us(),Zn=it().LMDB_ERRORS_ENUM,PM=Le(),dr=m(),BM=b(),vM=require("uuid"),_Z=require("lmdb"),{handleHDBError:HM,hdb_errors:qM}=y(),{OVERFLOW_MARKER:uZ,MAX_SEARCH_KEY_LENGTH:lZ}=PM,LS=v();LS.initSync();var no=LS.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ds=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function GM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new UM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];US(u,!0,n);let l=FM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return ku(o,c,s,i,n)}a(GM,"insertRecords");function FM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[ds])})}a(FM,"insertRecord");function xM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xM,"removeSkippedRecords");function US(e,t,r){let s=r>0;(s||!Number.isInteger(e[ds]))&&(e[ds]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[xu]))&&(e[xu]=r||Kt.getNextMonotonicTime()):delete e[xu]}a(US,"setTimestamps");function Vu(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),LM.initializeDBIs(e,t,r)}a(Vu,"initializeTransaction");async function VM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new MM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=$u(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return ku(c,_,s,i,n,o)}a(VM,"updateRecords");async function kM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Yu(e,t,r,s)}catch(_){throw HM(_,_.message,qM.HTTP_STATUS_CODES.BAD_REQUEST)}Vu(e,t,r);let i=new DM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;BM.isEmpty(u[t])?(l=vM.v4(),u[t]=l):l=u[t];let E=$u(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return ku(o,c,s,i,n)}a(kM,"upsertRecords");async function ku(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),xM(r,i),s}a(ku,"finalizeWrite");function $u(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(US(r,!l,o),Number.isInteger(r[ds])&&u[ds]>r[ds])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[ds])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:$u(e,t,r,s,n,i,o))}a($u,"updateUpsertRecord");function $M(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(Zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zn.WRITE_ATTRIBUTES_REQUIRED):new Error(Zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a($M,"validateBasic");function Yu(e,t,r,s){if($M(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Zn.RECORDS_REQUIRED):new Error(Zn.RECORDS_MUST_BE_ARRAY)}a(Yu,"validateWrite");function io(){}a(io,"noop");MS.exports={insertRecords:GM,updateRecords:VM,upsertRecords:kM}});var j=f((hZ,qS)=>{"use strict";var ri=m(),YM=b(),Ye=v(),si=require("path"),KM=require("minimist"),DS=require("fs-extra"),PS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Pr,SCHEMAS_PARAM_CONFIG:zn,SYSTEM_SCHEMA_NAME:ao}=ri,jn,ei,ti;function BS(){if(jn!==void 0)return jn;if(Ye.getHdbBasePath()!==void 0)return jn=Ye.get(Pr.STORAGE_PATH)||si.join(Ye.getHdbBasePath(),ri.SCHEMA_DIR_NAME),jn}a(BS,"getBaseSchemaPath");function vS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=HS(ao),ei}a(vS,"getSystemSchemaPath");function WM(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=Ye.get(ri.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||si.join(Ye.getHdbBasePath(),ri.TRANSACTIONS_DIR_NAME),ti}a(WM,"getTransactionAuditStoreBasePath");function QM(e,t){let r=Ye.get(Pr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||si.join(WM(),e.toString())}a(QM,"getTransactionAuditStorePath");function HS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(ri.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||si.join(BS(),e)}a(HS,"getSchemaPath");function JM(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,KM(process.argv));let s=r[Pr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!YM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Pr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[zn.PATH];if(u)return PS.set(_,[ao,zn.TABLES,t,zn.PATH],u),Ye.setProperty(Pr.SCHEMAS,_),u;let l=c?.[zn.PATH];if(l)return PS.set(_,[ao,zn.PATH],l),Ye.setProperty(Pr.SCHEMAS,_),l}}let n=r[Pr.STORAGE_PATH.toUpperCase()];if(n){if(!DS.pathExistsSync(n))throw new Error(n+" does not exist");let i=si.join(n,e);return DS.mkdirsSync(i),Ye.setProperty(Pr.STORAGE_PATH,n),i}return vS()}a(JM,"initSystemSchemaPaths");function XM(){jn=void 0,ei=void 0,ti=void 0}a(XM,"resetPaths");qS.exports={getBaseSchemaPath:BS,getSystemSchemaPath:vS,getTransactionAuditStorePath:QM,getSchemaPath:HS,initSystemSchemaPaths:JM,resetPaths:XM}});var Wt=f((SZ,xS)=>{"use strict";var FS=b(),GS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ku=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZM=Ku.alternatives(Ku.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Ku.number()).required();function zM(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(zM,"checkValidTable");function jM(e,t){return FS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(jM,"validateSchemaExists");function eD(e,t){let r=t.state.ancestors[0].schema;return FS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(eD,"validateTableExists");function tD(e,t){return e.toLowerCase()===GS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${GS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(tD,"validateSchemaName");xS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:ZM,validateSchemaExists:jM,validateTableExists:eD,validateSchemaName:tD,checkValidTable:zM}});var _o=f((mZ,VS)=>{var{common_validators:Br}=Wt(),ni=te(),Bt="is required",Z={schema:{presence:!0,format:Br.schema_format,length:Br.schema_length},table:{presence:!0,format:Br.schema_format,length:Br.schema_length},attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length},hash_attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length}};function ii(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(ii,"makeAttributesStrings");function rD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(rD,"schema_object");function sD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(sD,"table_object");function nD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ni.validateObject(e,Z)}a(nD,"create_table_object");function iD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(iD,"attribute_object");function aD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(aD,"describe_table");function oD(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(oD,"validateTableResidence");VS.exports={schema_object:rD,create_table_object:nD,table_object:sD,attribute_object:iD,describe_table:aD,validateTableResidence:oD}});var $S=f((AZ,kS)=>{"use strict";var cD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||cD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");kS.exports=uo});var Eo=f((gZ,YS)=>{"use strict";var _D=$S(),lo=class extends _D{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");YS.exports=lo});var WS=f((OZ,KS)=>{"use strict";KS.exports=lD;var uD="inserted";function lD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===uD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(lD,"returnObject")});var ho=f((bZ,zS)=>{"use strict";var ED=m(),Wu=X(),dD=zs(),{getSystemSchemaPath:hD,getSchemaPath:fD}=j(),SD=_s(),TD=_o(),mD=Eo(),RD=WS(),{handleHDBError:QS,hdb_errors:XS}=y(),JS=b(),{HTTP_STATUS_CODES:AD}=XS,Qu=SD.hdb_attribute,ZS=[];for(let e=0;e<Qu.attributes.length;e++)ZS.push(Qu.attributes[e].attribute);var pD="inserted";zS.exports=gD;async function gD(e){let t=TD.attribute_object(e);if(t)throw QS(new Error,t.message,XS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&JS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw QS(new Error,r,AD.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=JS.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 mD(e.schema,e.table,e.attribute,e.id);try{let i=await Wu.openEnvironment(fD(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}`);Wu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Wu.openEnvironment(hD(),ED.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await dD.insertRecords(o,Qu.hash_attribute,ZS,[n]);return RD(pD,c,{records:[n]},_)}catch(i){throw i}}a(gD,"lmdbCreateAttribute")});var Xu=f((CZ,eT)=>{var{hdb_schema_table:jS}=Wt(),ND=te(),Ju=require("joi"),OD={undefined:"undefined",null:"null"},ID=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||OD[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"),bD=Ju.object({schema:jS,table:jS,records:Ju.array().items(Ju.object().custom(ID)).required()});eT.exports=function(e){return ND.validateBySchema(e,bD)}});var fo=f((UZ,rT)=>{"use strict";var hr=b(),tT=I(),LZ=Xu();rT.exports=wD;function wD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.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&&hr.isEmptyOrZeroLength(o[r]))throw tT.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(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw tT.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`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(wD,"insertUpdateValidate")});var ai=f((DZ,sT)=>{"use strict";var CD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=CD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");sT.exports=So});var mo=f((vZ,nT)=>{"use strict";var BZ=ai(),To=m(),zu=b(),Zu=I(),yD=require("uuid"),{handleHDBError:oi,hdb_errors:LD}=y(),{HDB_ERROR_MSGS:ci,HTTP_STATUS_CODES:_i}=LD;nT.exports=UD;function UD(e,t,r){for(let n=0;n<t.length;n++)MD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];DD(i,r,e.operation)}}a(UD,"processRows");function MD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw oi(new Error,ci.ATTR_NAME_LENGTH_ERR(e),_i.BAD_REQUEST,void 0,void 0,!0);if(zu.isEmptyOrZeroLength(e)||zu.isEmpty(e.trim()))throw oi(new Error,ci.ATTR_NAME_NULLISH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(MD,"validateAttribute");function DD(e,t,r){if(!e.hasOwnProperty(t)||zu.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=yD.v4();return}throw Zu.error("Update transaction aborted due to record with no hash value:",e),oi(new Error,ci.RECORD_MISSING_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Zu.error(e),oi(new Error,ci.HASH_VAL_LENGTH_ERR,_i.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Zu.error(e),oi(new Error,ci.INVALID_FORWARD_SLASH_IN_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(DD,"validateHash")});var aT=f((qZ,iT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");iT.exports=Ro});var Ao=f((FZ,_T)=>{var PD=require("crypto"),oT=9;function BD(e){let t=HD(oT),r=cT(e+t);return t+r}a(BD,"createHash");function vD(e,t){let r=e.substr(0,oT),s=r+cT(t+r);return e===s}a(vD,"validateHash");function HD(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(HD,"generateSalt");function cT(e){return PD.createHash("md5").update(e).digest("hex")}a(cT,"md5");_T.exports={hash:BD,validate:vD}});var lT=f((VZ,uT)=>{"use strict";var vr=m(),ui=class{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.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(ui,"BaseLicense");var po=class extends ui{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");uT.exports={BaseLicense:ui,ExtendedLicense:po}});var tn=f(($Z,TT)=>{"use strict";var en=require("fs-extra"),ET=Ao(),dT=require("crypto"),qD=require("moment"),GD=require("uuid").v4,De=I(),el=require("path"),FD=b(),ct=m(),xD=lT().ExtendedLicense,js="invalid license key format",VD="061183",kD="mofi25",$D="aes-256-cbc",YD=16,KD=32,hT=v();hT.initSync();var ju;TT.exports={validateLicense:fT,generateFingerPrint:QD,licenseSearch:ST,getLicense:ZD};function tl(){return el.join(hT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(tl,"getLicenseDirPath");function WD(){let e=tl();return el.join(e,ct.LICENSE_FILE_NAME)}a(WD,"getLicenseFilePath");function rl(){let e=tl();return el.join(e,ct.REG_KEY_FILE_NAME)}a(rl,"getFingerPrintFilePath");async function QD(){let e=rl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await JD();throw De.error(`Error writing fingerprint file to ${e}`),De.error(t),new Error("There was an error generating the fingerprint")}}a(QD,"generateFingerPrint");async function JD(){let e=GD(),t=ET.hash(e),r=rl();try{await en.mkdirp(tl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw De.error(`Error writing fingerprint file to ${r}`),De.error(s),new Error("There was an error generating the fingerprint")}return t}a(JD,"writeFingerprint");function fT(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return De.error("empty license key passed to validate."),r;let s=rl(),n=!1;try{n=en.statSync(s)}catch(i){De.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{De.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(kD),c=o[1];c=Buffer.concat([Buffer.from(c)],YD);let _=Buffer.concat([Buffer.from(i)],KD),u=dT.createDecipheriv($D,_,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 h=XD(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),De.error(js),new Error(js)}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(js),De.error(js),new Error(js)}else r.exp_date=l;r.exp_date<qD().valueOf()&&(r.valid_date=!1),ET.validate(o[1],`${VD}${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||De.error("Invalid licence"),r}a(fT,"validateLicense");function XD(e,t){try{let r=dT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{De.warn("Check old license failed")}}a(XD,"checkOldLicense");function ST(){let e=new xD;e.api_call=0;let t=[];try{t=en.readFileSync(WD(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?De.info("no license file found"):De.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(FD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=fT(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){De.error("There was an error parsing the license string."),De.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),ju=e,e}a(ST,"licenseSearch");async function ZD(){return ju||await ST(),ju}a(ZD,"getLicense")});var rn=f((KZ,cl)=>{"use strict";var{Worker:zD,MessageChannel:jD,parentPort:fr,isMainThread:AT,threadId:eP,workerData:tP}=require("worker_threads"),{PACKAGE_ROOT:rP}=m(),{join:sP,isAbsolute:nP,extname:iP}=require("path"),{totalmem:mT}=require("os"),al=m(),pT=v(),aP=tn(),go=I(),oP=m();pT.initSync();var cP=pT.get(al.CONFIG_PARAMS.HTTP_THREADS)||1,_P=1024*1024,Hr=[],hs=[],uP=50,gT=1e4,NT="restart",OT="request_thread_info",IT="resource_report",bT="thread_info",wT="added-port",sl;cl.exports={startWorker:nl,restartWorkers:ol,shutdownWorkers:EP,workers:Hr,setMonitorListener:TP,onMessageFromWorkers:dP,broadcast:hP};function nl(e,t={}){let s=aP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||mT();n=Math.min(n,mT());let i=Math.min(Math.max(Math.floor(n/_P/(1+cP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of hs){let{port1:l,port2:E}=new jD;u.postMessage({type:wT,port:l},[l]),c.push(E)}iP(e)||(e+=".js");let _=new zD(nP(e)?e:sP(rP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{nl(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{Hr.splice(Hr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<uP?(t.unexpectedRestarts=_.unexpectedRestarts+1,nl(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===NT&&ol(u.workerType),u.type===OT&&fP(_),u.type===IT&&SP(_,u)}),Hr.push(_),RP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(nl,"startWorker");var lP=[al.THREAD_TYPES.HTTP];async function ol(e=null,t=2,r=!0){if(AT){t<1&&(t=t*Hr.length);let s=[];for(let n of Hr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:al.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=lP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),gT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:NT,workerType:e})}a(ol,"restartWorkers");function EP(e){return ol(e,1/0,!1)}a(EP,"shutdownWorkers");var CT=[];function dP(e){CT.push(e)}a(dP,"onMessageFromWorkers");function hP(e){for(let t of hs)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(hP,"broadcast");function fP(e){e.postMessage({type:bT,workers:yT()})}a(fP,"sendThreadInfo");function yT(){let e=Date.now();return Hr.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(yT,"getChildWorkerInfo");function SP(e,t){e.resources=t,e.resources.updated=Date.now()}a(SP,"recordResourceReport");var il;function TP(e){il=e}a(TP,"setMonitorListener");var mP=1e3,RT=!1;function RP(){RT||(RT=!0,setInterval(()=>{for(let e of Hr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}il&&il()},mP).unref())}a(RP,"startMonitoring");var AP=1e3;if(fr){No(fr);for(let e of tP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:IT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},AP).unref(),sl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:OT});function r(s){s.type===bT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else sl=yT;cl.exports.getThreadInfo=sl;function No(e,t){hs.push(e),e.on("message",r=>{if(r.type===wT)No(r.port);else for(let s of CT)s(r)}).on("close",()=>{hs.splice(hs.indexOf(e),1)}).on("exit",()=>{hs.splice(hs.indexOf(e),1)}),t||e.unref()}a(No,"addPort");AT||fr.on("message",async e=>{let{type:t}=e;t===oP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",eP),process.exit(0)},gT).unref())})});var MT=f((QZ,UT)=>{"use strict";var _l=X(),pP=I(),LT=it().LMDB_ERRORS_ENUM;UT.exports=gP;async function gP(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 _l.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await _l.closeEnvironment(global.lmdb_map[s]),await _l.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LT.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){pP.error(t)}}a(gP,"cleanLMDBMap")});var Ot=f((XZ,BT)=>{"use strict";var Io=Xu(),Nt=b(),NP=require("util"),bo=Qt(),OP=Gr(),ul=I(),{handleHDBError:qr,hdb_errors:IP}=y(),{HTTP_STATUS_CODES:fs}=IP,bP=NP.promisify(OP.getTableSchema),wP="updated",DT="inserted",PT="upserted";BT.exports={insert:yP,update:LP,upsert:UP,validation:CP,flush:MP};async function CP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await bP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ul.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ul.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(CP,"validation");async function yP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(DT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(yP,"insertData");async function LP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(wP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(LP,"updateData");async function UP(e){if(e.operation!=="upsert")throw qr(new Error,"invalid operation, must be upsert",fs.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(PT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw qr(s,null,null,ul.ERR,n)}}a(UP,"upsertData");function Oo(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===DT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===PT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function MP(e){return bo.flush(e.schema,e.table)}a(MP,"flush")});var El=f((zZ,qT)=>{var DP=te(),ll=require("joi"),{hdb_schema_table:vT}=Wt(),HT={schema:vT,table:vT},PP={date:ll.date().iso().required()},BP={timestamp:ll.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qT.exports=function(e,t){let r=t==="timestamp"?{...HT,...BP}:{...HT,...PP},s=ll.object(r);return DP.validateBySchema(e,s)}});var VT=f((jZ,xT)=>{var vP=te(),GT=require("joi"),{hdb_schema_table:FT}=Wt(),HP=GT.object({schema:FT,table:FT,hash_values:GT.array().required()});xT.exports=function(e){return vP.validateBySchema(e,HP)}});var $T=f((e3,kT)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=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(Co,"NoSQLSeachObject");var yo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(yo,"DeleteResponseObject");kT.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:yo}});var Ts=f((r3,JT)=>{"use strict";var KT=El(),qP=VT(),Lo=b(),YT=require("moment"),WT=I(),{promisify:GP,callbackify:FP}=require("util"),Ss=m(),xP=Gr(),dl=GP(xP.getTableSchema),hl=Qt(),{DeleteResponseObject:VP}=$T(),{handleHDBError:Fr,hdb_errors:kP}=y(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:xr}=kP,$P="records successfully deleted",YP=FP(QT);JT.exports={delete:YP,deleteRecord:QT,deleteFilesBefore:KP,deleteAuditLogsBefore:WP};async function KP(e){let t=KT(e,"date");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(!YT(e.date,YT.ISO_8601).isValid())throw Fr(new Error,Uo.INVALID_DATE,xr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=Lo.checkSchemaTableExist(e.schema,e.table);if(s)throw Fr(new Error,s,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,s,!0);let n=await hl.deleteRecordsBefore(e);if(await dl(e.schema,e.table),WT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(KP,"deleteFilesBefore");async function WP(e){let t=KT(e,"timestamp");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Fr(new Error,Uo.INVALID_VALUE("Timestamp"),xr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);let s=await hl.deleteAuditLogsBefore(e);return await dl(e.schema,e.table),WT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(WP,"deleteAuditLogsBefore");async function QT(e){let t=qP(e);if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);try{await dl(e.schema,e.table);let s=await hl.deleteRecords(e);return Lo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${$P}`),s}catch(s){if(s.message===Ss.SEARCH_NOT_FOUND_MESSAGE){let n=new VP;return n.message=Ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QT,"deleteRecord")});var ZT=f((n3,XT)=>{var fl=te(),Pe={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 QP(e){return Pe.password.presence=!0,Pe.username.presence=!0,Pe.role.presence=!0,Pe.active.presence=!0,fl.validateObject(e,Pe)}a(QP,"addUserValidation");function JP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(JP,"alterUserValidation");function XP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(XP,"dropUserValidation");XT.exports={addUserValidation:QP,alterUserValidation:JP,dropUserValidation:XP}});var Vr=f((a3,tm)=>{"use strict";var li=require("crypto"),jT="aes-256-cbc",ZP=32,zP=16,Sl=64,em=32,jP=Sl+em,zT=new Map;tm.exports={encrypt:eB,decrypt:tB,createNatsTableStreamName:rB};function eB(e){let t=li.randomBytes(ZP),r=li.randomBytes(zP),s=li.createCipheriv(jT,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(eB,"encrypt");function tB(e){let t=e.substr(0,Sl),r=e.substr(Sl,em),s=e.substr(jP,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=li.createDecipheriv(jT,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(tB,"decrypt");function rB(e,t){let r=`${e}.${t}`,s=zT.get(r);return s||(s=li.createHash("md5").update(`${e}.${t}`).digest("hex"),zT.set(r,s)),s}a(rB,"createNatsTableStreamName")});var ue=f((_3,sm)=>{"use strict";var{platform:c3}=require("os"),sB="nats-server.zip",Tl="nats-server",nB=process.platform==="win32"?`${Tl}.exe`:Tl,ml="HDB",iB=/^[^\s.,*>]+$/,rm="__request__",aB=a(e=>`${e}.${rm}`,"REQUEST_SUBJECT"),oB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},cB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_B={HUB:"hub.pid",LEAF:"leaf.pid"},uB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},lB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ml,deliver_subject:"__HDB__.WORKQUEUE"},EB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ml,deliver_subject:"HDB.SCHEMAQUEUE"},dB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ml,deliver_subject:"HDB.USERQUEUE"},hB={SUCCESS:"success",ERROR:"error"},fB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},SB={TXN:"txn",MSGID:"msgid"},sn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},TB={[sn.ERR]:1,[sn.WRN]:2,[sn.INF]:3,[sn.DBG]:4,[sn.TRC]:5},mB={debug:"-D",trace:"-DVV"};sm.exports={NATS_SERVER_ZIP:sB,NATS_SERVER_NAME:Tl,NATS_BINARY_NAME:nB,PID_FILES:_B,NATS_CONFIG_FILES:cB,SERVER_SUFFIX:uB,WORK_QUEUE_CONSUMER_NAMES:lB,SCHEMA_QUEUE_CONSUMER_NAMES:EB,USER_QUEUE_CONSUMER_NAMES:dB,NATS_TERM_CONSTRAINTS_RX:iB,REQUEST_SUFFIX:rm,UPDATE_REMOTE_RESPONSE_STATUSES:hB,CLUSTER_STATUS_STATUSES:fB,REQUEST_SUBJECT:aB,SUBJECT_PREFIXES:SB,MSG_HEADERS:oB,LOG_LEVELS:sn,LOG_LEVEL_FLAGS:mB,LOG_LEVEL_HIERARCHY:TB}});var Sr=f((E3,mm)=>{"use strict";var cm="username is required",_m="nothing to update, must supply active, role or password to update",um="password cannot be an empty string",lm="If role is specified, it cannot be empty.",Em="active must be true or false";mm.exports={addUser:bB,alterUser:wB,dropUser:yB,userInfo:LB,listUsers:Do,listUsersExternal:UB,setUsersToGlobal:Ei,findAndValidateUser:PB,getClusterUser:BB,USERNAME_REQUIRED:cm,ALTERUSER_NOTHING_TO_UPDATE:_m,EMPTY_PASSWORD:um,EMPTY_ROLE:lm,ACTIVE_BOOLEAN:Em};var dm=Ot(),RB=Ts(),Al=Ao(),hm=ZT(),fm=It(),pl=an(),_t=b(),Sm=require("validate.js"),M=I(),{promisify:gl}=require("util"),Nl=Vr(),nm=m(),im=ue(),AB=lr(),l3=v(),pB=tn(),gB=_s(),{handleHDBError:Jt,hdb_errors:NB}=y(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Rl,HDB_ERROR_MSGS:nn}=NB,{UserEventMsg:Ol}=kr(),am=require("lodash"),Tm={username:!0,active:!0,role:!0,password:!0},om=new Map,Mo=gl(fm.searchByValue),OB=gl(fm.searchByHash),IB=gl(RB.delete);async function bB(e){let t=Sm.cleanAttributes(e,Tm),r=hm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,nn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,nn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await dm.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await Ei()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,nn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],pl.signalUserChange(new Ol(process.pid)),`${c.username} successfully added`}a(bB,"addUser");async function wB(e){let t=Sm.cleanAttributes(e,Tm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(cm);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(_m);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(um);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(Em);let r=CB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password)),t.role==="")throw new Error(lm);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 Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=nn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=nn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.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 dm.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await Ei()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return pl.signalUserChange(new Ol(process.pid)),n}a(wB,"alterUser");function CB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(CB,"isClusterUser");async function yB(e){try{let t=hm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,nn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await IB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await Ei()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return pl.signalUserChange(new Ol(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(yB,"dropUser");async function LB(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 OB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(LB,"userInfo");async function UB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.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(UB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=am.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 Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=am.cloneDeep(o),o.role=r[o.role],MB(o.role),i.set(o.username,o);return(await pB.getLicense()).enterprise?i:DB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function MB(e){try{if(!e){M.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(gB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(MB,"appendSystemTablesToRole");function DB(e){try{if(M.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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(DB,"nonEnterpriseFilter");async function Ei(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(Ei,"setUsersToGlobal");async function PB(e,t,r=!0){global.hdb_users||await Ei();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Rl.USER_INACTIVE,Xt.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(om.get(t)===s.password)return n;if(Al.validate(s.password,t))om.set(t,s.password);else throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(PB,"findAndValidateUser");async function BB(){let e=await Do(),t=AB.getConfigFromFile(nm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===nm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Nl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+im.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+im.SERVER_SUFFIX.ADMIN,r}a(BB,"getClusterUser")});var Po=f((h3,gm)=>{"use strict";var ms=I(),ut=m(),vB=MT(),Rm=Gr(),HB=Rs(),qB=Sr(),{validateEvent:pm}=kr(),di=Qt(),GB=require("process"),FB={[ut.ITC_EVENT_TYPES.SCHEMA]:xB,[ut.ITC_EVENT_TYPES.USER]:kB};async function xB(e){let t=pm(e);if(t){ms.error(t);return}ms.trace("ITC schemaHandler received schema event:",e),await vB(e.message),await VB(e.message)}a(xB,"schemaHandler");async function VB(e){try{if(di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.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 HB.describeTable({schema:e.schema,table:e.table});break;default:Rm.setSchemaDataToGlobal(Am);break}else Rm.setSchemaDataToGlobal(Am)}catch(t){ms.error(t)}}a(VB,"syncSchemaMetadata");function Am(e){e&&ms.error(e)}a(Am,"handleErrorCallback");async function kB(e){try{di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=pm(e);if(t){ms.error(t);return}ms.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${GB.pid} received user event:`,e),await qB.setUsersToGlobal()}catch(t){ms.error(t)}}a(kB,"userHandler");gm.exports=FB});var kr=f((R3,Om)=>{"use strict";var S3=I(),Il=b(),$B=m(),{ITC_ERRORS:hi}=it(),{parentPort:T3,threadId:YB,isMainThread:KB,workerData:m3}=require("worker_threads"),{onMessageFromWorkers:WB,broadcast:QB}=rn();Om.exports={sendItcEvent:JB,validateEvent:Nm,SchemaEventMsg:XB,UserEventMsg:ZB};var Bo;WB(e=>{Bo=Bo||Po(),Nm(e),Bo[e.type]&&Bo[e.type](e)});function JB(e){!KB&&e.message&&(e.message.originator=YB),QB(e)}a(JB,"sendItcEvent");function Nm(e){if(typeof e!="object")return hi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Il.isEmpty(e.type))return hi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Il.isEmpty(e.message))return hi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Il.isEmpty(e.message.originator))return hi.MISSING_ORIGIN;if($B.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hi.INVALID_EVENT(e.type)}a(Nm,"validateEvent");function XB(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(XB,"SchemaEventMsg");function ZB(e){this.originator=e}a(ZB,"UserEventMsg")});var an=f((g3,Cm)=>{"use strict";var Im=m(),p3=b(),vo=I(),bm=aT(),on,{sendItcEvent:wm}=kr();function zB(e){try{vo.trace("signalSchemaChange called with message:",e),on=on||Po();let t=new bm(Im.ITC_EVENT_TYPES.SCHEMA,e);on.schema(t),wm(t)}catch(t){vo.error(t)}}a(zB,"signalSchemaChange");function jB(e){try{vo.trace("signalUserChange called with message:",e),on=on||Po();let t=new bm(Im.ITC_EVENT_TYPES.USER,e);on.user(t),wm(t)}catch(t){vo.error(t)}}a(jB,"signalUserChange");Cm.exports={signalSchemaChange:zB,signalUserChange:jB}});var Ho=f((O3,Lm)=>{"use strict";var ym=b(),ev=m(),tv=I(),rv=ho(),sv=Eo(),nv=an(),{SchemaEventMsg:iv}=kr(),av="already exists in";Lm.exports=ov;async function ov(e,t,r){if(ym.isEmptyOrZeroLength(r))return r;let s=[];ym.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 cv(e,t.schema,t.name,i)})),n}a(ov,"lmdbCheckForNewAttributes");async function cv(e,t,r,s){let n=new sv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await _v(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(av))tv.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(cv,"createNewAttribute");async function _v(e){let t;return t=await rv(e),nv.signalSchemaChange(new iv(process.pid,ev.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_v,"createAttribute")});var cn=f((b3,Um)=>{"use strict";var qo=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(qo,"LMDBTransactionObject");Um.exports=qo});var Dm=f((C3,Mm)=>{"use strict";var uv=cn(),lv=m().OPERATIONS_ENUM,Go=class extends uv{constructor(t,r,s,n,i=void 0){super(lv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Mm.exports=Go});var Bm=f((L3,Pm)=>{"use strict";var Ev=cn(),dv=m().OPERATIONS_ENUM,Fo=class extends Ev{constructor(t,r,s,n,i,o=void 0){super(dv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Pm.exports=Fo});var Hm=f((M3,vm)=>{"use strict";var hv=cn(),fv=m().OPERATIONS_ENUM,xo=class extends hv{constructor(t,r,s,n,i,o=void 0){super(fv.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");vm.exports=xo});var Gm=f((P3,qm)=>{"use strict";var Sv=cn(),Tv=m().OPERATIONS_ENUM,Vo=class extends Sv{constructor(t,r,s,n,i=void 0){super(Tv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");qm.exports=Vo});var fi=f((H3,km)=>{"use strict";var v3=require("path"),Fm=X(),mv=Dm(),Rv=Bm(),Av=Hm(),pv=Gm(),_n=Le(),xm=b(),{CONFIG_PARAMS:gv}=m(),Vm=v();Vm.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Nv}=j();km.exports=Ov;async function Ov(e,t){if(Vm.get(gv.LOGGING_AUDITLOG)===!1)return;let r=Nv(e.schema,e.table),s=await Fm.openEnvironment(r,e.table,!0),n=Iv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Fm.initializeDBIs(s,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_n.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xm.isEmpty(n.user_name)||s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(Ov,"writeTransaction");function Iv(e,t){let r=xm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new mv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Rv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Av(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new pv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Iv,"createTransactionObject")});var bl=f((F3,$m)=>{"use strict";var bv=fo(),G3=ai(),Si=m(),wv=mo(),Cv=zs().insertRecords,yv=X(),Lv=I(),Uv=Ho(),{getSchemaPath:Mv}=j(),Dv=fi();$m.exports=Pv;async function Pv(e){try{let{schema_table:t,attributes:r}=bv(e);wv(e,r,t.hash_attribute),e.schema!==Si.SYSTEM_SCHEMA_NAME&&(r.includes(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Uv(e.hdb_auth_header,t,r),n=Mv(e.schema,e.table),i=await yv.openEnvironment(n,e.table),o=await Cv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Dv(e,o)}catch(c){Lv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Pv,"lmdbCreateRecords")});var Wm=f((V3,Km)=>{"use strict";var Ym=m(),Bv=bl(),vv=ai(),Hv=require("fs-extra"),{getSchemaPath:qv}=j();Km.exports=Gv;async function Gv(e){let t=[{name:e.schema,createddate:Date.now()}],r=new vv(Ym.SYSTEM_SCHEMA_NAME,Ym.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Bv(r),await Hv.mkdirp(qv(e.schema))}a(Gv,"lmdbCreateSchema")});var Jm=f(($3,Qm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Qm.exports=$o});var yl=f((J3,zm)=>{"use strict";var Xm=X(),wl=us(),Cl=it().LMDB_ERRORS_ENUM,Fv=Le(),Zm=I(),K3=b(),xv=require("lmdb"),Vv=Jm(),kv=m(),{OVERFLOW_MARKER:W3,MAX_SEARCH_KEY_LENGTH:Q3}=Fv,$v=kv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Yv(e,t,r,s){if(wl.validateEnv(e),t===void 0)throw new Error(Cl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cl.IDS_REQUIRED):new Error(Cl.IDS_MUST_BE_ITERABLE);try{let n=Xm.listDBIs(e);Xm.initializeDBIs(e,t,n);let i=new Vv,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[$v]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,xv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=wl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{Zm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){Zm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=wl.getNextMonotonicTime(),i}catch(n){throw n}}a(Yv,"deleteRecords");zm.exports={deleteRecords:Yv}});var Ti=f((Z3,eR)=>{"use strict";var un=b(),Kv=yl(),Wv=X(),{getSchemaPath:Qv}=j(),Jv=fi(),Xv=I();eR.exports=Zv;async function Zv(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(un.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(un.isEmptyOrZeroLength(e.hash_values)&&!un.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];un.isEmpty(_)||e.hash_values.push(_)}}if(un.isEmptyOrZeroLength(e.hash_values))return jm([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(un.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=Qv(e.schema,e.table),i=await Wv.openEnvironment(n,e.table),o=await Kv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Jv(e,o)}catch(c){Xv.error(`unable to write transaction due to ${c.message}`)}return jm(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Zv,"lmdbDeleteRecords");function jm(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(jm,"createDeleteResponse")});var Ul=f((ez,tR)=>{"use strict";var zv=m(),j3=us();function Ll(e,t){let r=Object.create(null);if(t.length===1&&zv.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(Ll,"parseRow");function jv(e,t,r,s){let n=Ll(r,e);s.push(n)}a(jv,"searchAll");function eH(e,t,r,s){let n=Ll(r,e);s[t]=n}a(eH,"searchAllToMap");function tH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(tH,"iterateDBI");function As(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(As,"pushResults");function rH(e,t,r,s,n,i){t.toString().endsWith(e)&&As(t,r,s,n,i)}a(rH,"endsWith");function sH(e,t,r,s,n,i){t.toString().includes(e)&&As(t,r,s,n,i)}a(sH,"contains");function nH(e,t,r,s,n,i){t>e&&As(t,r,s,n,i)}a(nH,"greaterThanCompare");function iH(e,t,r,s,n,i){t>=e&&As(t,r,s,n,i)}a(iH,"greaterThanEqualCompare");function aH(e,t,r,s,n,i){t<e&&As(t,r,s,n,i)}a(aH,"lessThanCompare");function oH(e,t,r,s,n,i){t<=e&&As(t,r,s,n,i)}a(oH,"lessThanEqualCompare");tR.exports={parseRow:Ll,searchAll:jv,searchAllToMap:eH,iterateDBI:tH,endsWith:rH,contains:sH,greaterThanCompare:nH,greaterThanEqualCompare:iH,lessThanCompare:aH,lessThanEqualCompare:oH,pushResults:As}});var gs=f((iz,cR)=>{"use strict";var $r=X(),rz=I(),lt=us(),Yo=Le(),oe=it().LMDB_ERRORS_ENUM,sz=b(),cH=m(),Ko=Ul(),{parseRow:_H}=Ko,nz=require("lmdb"),{OVERFLOW_MARKER:rR,MAX_SEARCH_KEY_LENGTH:uH}=Yo;function sR(e,t,r,s=!1,n=void 0,i=void 0){return ps(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(sR,"iterateFullIndex");function mi(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return ps(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(mi,"iterateRangeBetween");function ps(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ps,"setupTransaction");function nR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(rR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(nR,"getOverflowCheck");function lH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return ps(e,t,t,(o,c,_)=>(Wo(r),r=Ri(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>_H(u.value,r))))}a(lH,"searchAll");function EH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ri(e.database||e,r);let o=new Map;for(let{key:c,value:_}of sR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(EH,"searchAllToMap");function dH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sR(e,void 0,t,r,s,n),c=o.transaction,_=nR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(dH,"iterateDBI");function hH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(hH,"countAll");function fH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,t,r,(c,_,u,l)=>(s=lt.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(fH,"equals");function SH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(SH,"count");function TH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,null,r,(c,_)=>{s=lt.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,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(TH,"startsWith");function mH(e,t,r,s,n=!1,i=void 0,o=void 0){return iR(e,t,r,s,n,i,o,!0)}a(mH,"endsWith");function iR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),ps(e,null,r,(_,u,l,E)=>{let d=nR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(rR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(iR,"contains");function RH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!0,!1)}a(RH,"greaterThan");function AH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!1,!1)}a(AH,"greaterThanEqual");function pH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!0)}a(pH,"lessThan");function gH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!1)}a(gH,"lessThanEqual");function NH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(oe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(oe.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(oe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return mi(e,t,r,s,n,i,o,c)}a(NH,"between");function OH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ri(n,r),s===void 0)throw new Error(oe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(OH,"searchByHash");function IH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(IH,"checkHashExists");function bH(e,t,r,s,n=[]){return oR(e,t,r,s,n),aR(e,t,r,s,n).map(i=>i[1])}a(bH,"batchSearchByHash");function wH(e,t,r,s,n=[]){oR(e,t,r,s,n);let i=new Map;for(let[o,c]of aR(e,t,r,s,n))i.set(o,c);return i}a(wH,"batchSearchByHashToMap");function aR(e,t,r,s,n=[]){return ps(e,t,t,(i,o,c)=>{r=Ri(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(aR,"batchHashSearch");function oR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(oe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(oe.IDS_MUST_BE_ITERABLE)}a(oR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(oe.FETCH_ATTRIBUTES_REQUIRED):new Error(oe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.SEARCH_VALUE_REQUIRED);if(r?.length>uH)throw new Error(oe.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ri(e,t){return t.length===1&&cH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ri,"setGetWholeRowAttributes");cR.exports={searchAll:lH,searchAllToMap:EH,count:SH,countAll:hH,equals:fH,startsWith:TH,endsWith:mH,contains:iR,searchByHash:OH,setGetWholeRowAttributes:Ri,batchSearchByHash:bH,batchSearchByHashToMap:wH,checkHashExists:IH,iterateDBI:dH,greaterThan:RH,greaterThanEqual:AH,lessThan:pH,lessThanEqual:gH,between:NH}});var Ai=f((cz,ER)=>{var _R=require("lodash"),uR=te(),W=require("joi"),CH=b(),{hdb_schema_table:vt,checkValidTable:lR}=Wt(),{handleHDBError:yH,hdb_errors:LH}=y(),{HTTP_STATUS_CODES:UH}=LH,oz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),MH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),DH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});ER.exports=function(e,t){let r=null;switch(t){case"value":r=uR.validateBySchema(e,MH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(lR("schema",e.schema)),i(lR("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=uR.validateBySchema(e,DH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=CH.checkGlobalSchemaTable(e.schema,e.table);if(n)return yH(new Error,n,UH.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=_R.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!_R.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Ml=f((uz,dR)=>{"use strict";var PH=X(),BH=Ai(),{getSchemaPath:vH}=j();dR.exports=HH;function HH(e){let t=BH(e,"hashes");if(t)throw t;let r=vH(e.schema,e.table);return PH.openEnvironment(r,e.table)}a(HH,"initialize")});var Dl=f((Ez,hR)=>{"use strict";var qH=gs(),GH=Ml();hR.exports=FH;async function FH(e){let t=await GH(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return qH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(FH,"lmdbGetDataByHash")});var ln=f((hz,fR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");fR.exports=Qo});var TR=f((Tz,SR)=>{"use strict";var Sz=ln(),xH=gs(),VH=Ml();SR.exports=kH;async function kH(e){let t=await VH(e),r=global.hdb_schema[e.schema][e.table];return xH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(kH,"lmdbSearchByHash")});var Ht=f((Rz,mR)=>{"use strict";var Jo=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=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");mR.exports=Jo});var Xo=f((pz,OR)=>{"use strict";var Be=gs(),$H=X(),YH=b(),C=Le(),Ns=m(),KH=_s(),RR=it().LMDB_ERRORS_ENUM,{compareKeys:En}=require("ordered-binary"),{getSchemaPath:WH}=j(),Tr=Ns.SEARCH_WILDCARDS;async function QH(e,t,r){let s;e.schema===Ns.SYSTEM_SCHEMA_NAME?s=KH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=NR(e,s.hash_attribute,r,t);return pR(e,n,s.hash_attribute,r)}a(QH,"prepSearch");async function pR(e,t,r,s){let n=WH(e.schema,e.table),i=await $H.openEnvironment(n,e.table),o=gR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(XH(e,r)===!1){let l=e.search_attribute;if(l===r)return s?AR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?AR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Be.batchSearchByHashToMap(c,r,e.get_attributes,u):Be.batchSearchByHash(c,r,e.get_attributes,u)}a(pR,"executeSearch");function gR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=Be.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=Be.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=Be.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=Be.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Be.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Be.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return Be.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Be.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=Be.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=Be.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Be.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=Be.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=Be.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(gR,"searchByType");function JH(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return En(i,s[0])>=0&&En(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>En(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>En(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>En(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>En(n[r],s)<=0;default:return Object.create(null)}}a(JH,"filterByType");function AR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(AR,"createMapFromIterable");function XH(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(XH,"checkToFetchMore");function NR(e,t,r,s){if(YH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Tr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tr[0])<0&&n.indexOf(Tr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Tr.indexOf(i)>=0&&Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Tr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tr[0])||n.includes(Tr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(RR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ns.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ns.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Ns.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RR.UNKNOWN_SEARCH_TYPE)}}a(NR,"createSearchTypeFromSearchObject");OR.exports={executeSearch:pR,createSearchTypeFromSearchObject:NR,prepSearch:QH,searchByType:gR,filterByType:JH}});var bR=f((Oz,IR)=>{"use strict";var Nz=Ht(),ZH=Ai(),zH=b(),jH=m(),eq=Xo();IR.exports=tq;function tq(e,t){if(!zH.isEmpty(t)&&jH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZH(e,"value");if(s)throw s;let n=!0;return eq.prepSearch(e,t,n)}a(tq,"lmdbGetDataByValue")});var dn=f((wz,wR)=>{"use strict";var bz=Ht(),rq=Ai(),sq=b(),nq=m(),iq=Xo();wR.exports=aq;async function aq(e,t){if(!sq.isEmpty(t)&&nq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rq(e,"value");if(s)throw s;return iq.prepSearch(e,t,!1)}a(aq,"lmdbSearchByValue")});var yR=f((Lz,CR)=>{"use strict";var yz=Le(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");CR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var PR=f((Dz,DR)=>{"use strict";var Mz=yR().SearchByConditionsObject,oq=Ht(),cq=Ai(),Pl=gs(),ec=Le(),MR=Xo(),_q=Ul(),uq=require("lodash"),{getSchemaPath:lq}=j(),LR=X(),{handleHDBError:Eq,hdb_errors:dq}=y(),{HTTP_STATUS_CODES:hq}=dq,fq=1e8;DR.exports=Sq;async function Sq(e){let t=cq(e,"conditions");if(t)throw Eq(t,t.message,hq.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=lq(e.schema,e.table),s=await LR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)LR.openDBI(s,u.search_attribute);let i=uq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Pl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=fq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await UR(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(MR.filterByType),E=l.length,d=Pl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>_q.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await UR(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Pl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(Sq,"lmdbSearchByConditions");async function UR(e,t,r,s){let n=new oq(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,MR.searchByType(e,n,i,s).map(o=>o.value)}a(UR,"executeConditionSearch")});var pi=f((Bz,BR)=>{"use strict";var Tq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=Tq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");BR.exports=tc});var Bl=f((Hz,kR)=>{"use strict";var GR=Ht(),FR=pi(),xR=dn(),VR=Ti(),Ke=m(),vR=b(),HR=X(),{getTransactionAuditStorePath:mq,getSchemaPath:Rq}=j(),qR=I();kR.exports=Aq;async function Aq(e){try{if(vR.isEmpty(global.hdb_schema[e.schema])||vR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await pq(e),await gq(e);let t=Rq(e.schema,e.table);try{await HR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=mq(e.schema,e.table);await HR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Aq,"lmdbDropTable");async function pq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await xR(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 FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await VR(n)}a(pq,"deleteAttributesFromSystem");async function gq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await xR(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 FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await VR(n)}catch(i){throw i}}a(gq,"dropTableFromSystem")});var YR=f((Gz,$R)=>{"use strict";var Nq=require("fs-extra"),Oq=Ht(),Iq=ln(),bq=pi(),wq=Bl(),Cq=Ti(),yq=Dl(),Lq=dn(),mr=m(),{getSchemaPath:Uq}=j(),{handleHDBError:Mq,hdb_errors:Dq}=y(),{HDB_ERROR_MSGS:Pq,HTTP_STATUS_CODES:Bq}=Dq;$R.exports=vq;async function vq(e){let t;try{t=await Hq(e.schema);let r=new Oq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Lq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await wq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new bq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Cq(n);let i=Uq(t);await Nq.remove(i)}catch(r){throw r}}a(vq,"lmdbDropSchema");async function Hq(e){let t=new Iq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await yq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Mq(new Error,Pq.SCHEMA_NOT_FOUND(e),Bq.NOT_FOUND,void 0,void 0,!0);return s}a(Hq,"validateDropSchema")});var vl=f((xz,KR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");KR.exports=rc});var QR=f(($z,WR)=>{"use strict";var qq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:Gq}=j(),Hl=Le(),kz=vl();WR.exports=Fq;async function Fq(e){let t;try{let r=Gq(e.schema,e.table);await qq.mkdirp(r),t=await sc.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{sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,Hl.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(Fq,"createTransactionsAuditEnvironment")});var zR=f((Kz,ZR)=>{"use strict";var ql=m(),JR=X(),xq=zs(),{getSystemSchemaPath:Vq,getSchemaPath:kq}=j(),$q=_s(),Yq=ho(),Gl=Eo(),Kq=I(),Wq=QR(),xl=$q.hdb_table,XR=[];for(let e=0;e<xl.attributes.length;e++)XR.push(xl.attributes[e].attribute);ZR.exports=Qq;async function Qq(e,t){let r=kq(t.schema,t.table),s=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Gl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await JR.createEnvironment(r,t.table),e!==void 0){let o=await JR.openEnvironment(Vq(),ql.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await xq.insertRecords(o,xl.hash_attribute,XR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Fl(s),await Fl(n),await Fl(i)}await Wq(t)}catch(o){throw o}}a(Qq,"lmdbCreateTable");async function Fl(e){try{await Yq(e)}catch(t){Kq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Fl,"createAttribute")});var eA=f((Qz,jR)=>{"use strict";var Jq=fo(),Xq=mo(),Zq=Ho(),gi=m(),zq=zs().updateRecords,jq=X(),{getSchemaPath:eG}=j(),tG=fi(),rG=I();jR.exports=sG;async function sG(e){try{let{schema_table:t,attributes:r}=Jq(e);Xq(e,r,t.hash_attribute),e.schema!==gi.SYSTEM_SCHEMA_NAME&&(r.includes(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Zq(e.hdb_auth_header,t,r),n=eG(e.schema,e.table),i=await jq.openEnvironment(n,e.table),o=await zq(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tG(e,o)}catch(c){rG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(sG,"lmdbUpdateRecords")});var rA=f((Xz,tA)=>{"use strict";var nG=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=nG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");tA.exports=nc});var nA=f((jz,sA)=>{"use strict";var zz=rA(),iG=fo(),aG=mo(),oG=Ho(),Ni=m(),cG=zs().upsertRecords,_G=X(),{getSchemaPath:uG}=j(),lG=fi(),EG=I(),{handleHDBError:dG,hdb_errors:hG}=y();sA.exports=fG;async function fG(e){let t;try{t=iG(e)}catch(_){throw dG(_,_.message,hG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;aG(e,s,r.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(s.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await oG(e.hdb_auth_header,r,s),i=uG(e.schema,e.table),o=await _G.openEnvironment(i,e.table),c=await cG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await lG(e,c)}catch(_){EG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(fG,"lmdbUpsertRecords")});var uA=f((t2,_A)=>{"use strict";var SG=Ht(),iA=b(),aA=I(),TG=dn(),oA=m(),mG=yl().deleteRecords,RG=X(),{getSchemaPath:AG}=j(),{promisify:pG}=require("util"),gG=pG(setTimeout),cA=1e4,NG=10;_A.exports=OG;async function OG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(iA.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 SG(e.schema,e.table,oA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await TG(n,oA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw aA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return iA.isEmptyOrZeroLength(s)?(aA.trace("No records found to delete"),{message:"No records found to delete"}):await IG(e,s,t)}a(OG,"lmdbDeleteRecordsBefore");async function IG(e,t,r){let s=AG(e.schema,e.table),n=await RG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=cA){let _=t.slice(o,o+cA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await mG(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 gG(NG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(IG,"chunkDeletes")});var EA=f((s2,lA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");lA.exports=ic});var hA=f((i2,dA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");dA.exports=ac});var TA=f((c2,SA)=>{"use strict";var Vl=X(),{getTransactionAuditStorePath:bG}=j(),o2=EA(),Oi=Le(),wG=b(),fA=hA(),CG=require("util").promisify,yG=CG(setTimeout),LG=1e4,UG=100;SA.exports=MG;async function MG(e){let t=bG(e.schema,e.table),r=await Vl.openEnvironment(t,e.table,!0),s=Vl.listDBIs(r);Vl.initializeDBIs(r,Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new fA;do n=await DG(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 yG(UG);while(n.transactions_deleted>0);return i}a(MG,"deleteAuditLogsBefore");async function DG(e,t){let r=new fA;try{let s=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];wG.isEmpty(c)||(n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>LG)break}return await n,r}catch(s){throw s}}a(DG,"deleteTransactions")});var RA=f((u2,mA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");mA.exports=oc});var pA=f((d2,AA)=>{"use strict";var PG=Ht(),BG=pi(),E2=RA(),Zt=m(),vG=b(),kl=X(),HG=_s(),qG=dn(),GG=Ti(),{getSchemaPath:FG}=j();AA.exports=xG;async function xG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=HG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await kG(e),n=FG(e.schema,e.table),i=await kl.openEnvironment(n,e.table);return t===!0&&await VG(e,i,r.hash_attribute),kl.dropDBI(i,e.attribute),s}a(xG,"lmdbDropAttribute");async function VG(e,t,r){let s=kl.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(VG,"removeAttributeFromAllObjects");async function kG(e){let t=new PG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await qG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(vG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new BG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return GG(i)}a(kG,"dropAttributeFromSystem")});var wA=f((S2,bA)=>{"use strict";var $l=X(),hn=Le(),f2=us(),Yl=m(),gA=b(),{getTransactionAuditStorePath:$G}=j(),YG=gs(),cc=cn(),KG=I();bA.exports=WG;async function WG(e){let t=$G(e.schema,e.table),r=await $l.openEnvironment(t,e.table,!0),s=$l.listDBIs(r);$l.initializeDBIs(r,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return NA(r,e.search_values);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,JG(r,e.search_values,n);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return QG(r,e.search_values);default:return NA(r)}}a(WG,"readAuditLog");function NA(e,t=[0,Date.now()]){gA.isEmpty(t[0])&&(t[0]=0),gA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hn.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 cc,n))}a(NA,"searchTransactionsByTimestamp");function QG(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[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,IA(e,i))}return Object.fromEntries(r)}a(QG,"searchTransactionsByUsername");function JG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=YG.equals(e,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=IA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);OA(_,"records",r,l,o),OA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(JG,"searchTransactionsByHashValues");function OA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(OA,"loopRecords");function IA(e,t){let r=[];try{let s=e.dbis[hn.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 cc,i);r.push(o)}}catch(i){KG.warn(i)}return r}catch(s){throw s}}a(IA,"batchSearchTransactions")});var yA=f((m2,CA)=>{"use strict";var{getSchemaPath:XG}=j(),ZG=X();CA.exports={writeTransaction:zG};async function zG(e,t,r){let s=XG(e,t);return(await ZG.openEnvironment(s,t)).transaction(r)}a(zG,"writeTransaction")});var DA=f((A2,MA)=>{"use strict";var{getSchemaPath:LA}=j(),UA=X();MA.exports={flush:jG,resetReadTxn:eF};async function jG(e,t){return(await UA.openEnvironment(LA(e,t),t.toString())).flushed}a(jG,"flush");async function eF(e,t){try{(await UA.openEnvironment(LA(e,t),t.toString())).resetReadTxn()}catch{}}a(eF,"resetReadTxn")});var vA=f((g2,BA)=>{"use strict";var tF=I(),{handleHDBError:rF}=y(),sF=bu(),nF=ho(),iF=bl(),aF=Wm(),oF=Ti(),cF=Dl(),_F=TR(),uF=bR(),lF=dn(),EF=PR(),dF=YR(),hF=zR(),fF=eA(),SF=nA(),TF=uA(),mF=TA(),RF=Bl(),AF=pA(),pF=wA(),gF=yA(),PA=DA(),_c=class extends sF{async searchByConditions(t){return EF(t)}async getDataByHash(t){return await cF(t)}async searchByHash(t){return await _F(t)}async getDataByValue(t,r){return await uF(t,r)}async searchByValue(t){return await lF(t)}async createSchema(t){return await aF(t)}async dropSchema(t){return await dF(t)}async createTable(t,r){return await hF(t,r)}async dropTable(t){return await RF(t)}async createAttribute(t){return await nF(t)}async createRecords(t){return await iF(t)}async updateRecords(t){return await fF(t)}async upsertRecords(t){try{return await SF(t)}catch(r){throw rF(r,null,null,tF.ERR,r)}}async deleteRecords(t){return await oF(t)}async deleteRecordsBefore(t){return await TF(t)}async dropAttribute(t){return await AF(t)}async deleteAuditLogsBefore(t){return await mF(t)}async readAuditLog(t){return await pF(t)}writeTransaction(t,r,s){return gF.writeTransaction(t,r,s)}flush(t,r){return PA.flush(t,r)}resetReadTxn(t,r){return PA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");BA.exports=_c});var Qt=f((O2,qA)=>{"use strict";var NF=vA(),OF=bu(),IF=v();IF.initSync();var HA;function bF(){return HA instanceof OF?HA:new NF}a(bF,"getBridge");qA.exports=bF()});var VA=f((b2,xA)=>{"use strict";var GA=require("lodash"),Ii=require("mathjs"),wF=require("jsonata"),FA=b();xA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GA.uniqWith(e,GA.isEqual):e,searchJSON:CF,mad:bi.bind(null,Ii.mad),mean:bi.bind(null,Ii.mean),mode:bi.bind(null,Ii.mode),prod:bi.bind(null,Ii.prod),median:bi.bind(null,Ii.median)};function bi(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(bi,"aggregateFunction");function CF(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(FA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FA.isEmpty(this.__ala__.res[r])){let s=wF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(CF,"searchJSON")});var $A=f((C2,kA)=>{"use strict";var le=require("moment"),Kl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;kA.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Kl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Kl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Kl)}});var QA=f((y2,WA)=>{"use strict";var yF=require("@turf/area"),LF=require("@turf/length"),UF=require("@turf/circle"),MF=require("@turf/difference"),DF=require("@turf/distance"),PF=require("@turf/boolean-contains"),BF=require("@turf/boolean-equal"),vF=require("@turf/boolean-disjoint"),HF=require("@turf/helpers"),YA=m(),G=b();WA.exports={geoArea:qF,geoLength:GF,geoCircle:FF,geoDifference:xF,geoDistance:KA,geoNear:VF,geoContains:kF,geoEqual:$F,geoCrosses:YF,geoConvert:KF};var Wl="geo1 is required",Ql="geo2 is required";function qF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),yF.default(e)}a(qF,"geoArea");function GF(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),LF.default(e,{units:t||"kilometers"})}a(GF,"geoLength");function FF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),UF.default(e,t,{units:r||"kilometers"})}a(FF,"geoCircle");function xF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),MF(e,t)}a(xF,"geoDifference");function KA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),DF.default(e,t,{units:r||"kilometers"})}a(KA,"geoDistance");function VF(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return KA(e,t,s)<=r}a(VF,"geoNear");function kF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),PF.default(e,t)}a(kF,"geoContains");function $F(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),BF.default(e,t)}a($F,"geoEqual");function YF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!vF.default(e,t)}a(YF,"geoCrosses");function KF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty(YA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(YA.GEO_CONVERSION_ENUM).join(",")}`);return HF[t](e,r)}a(KF,"geoConvert")});var uc=f((U2,JA)=>{var Os=VA(),Et=$A(),zt=QA();JA.exports=e=>{e.aggr.mad=e.aggr.MAD=Os.mad,e.aggr.mean=e.aggr.MEAN=Os.mean,e.aggr.mode=e.aggr.MODE=Os.mode,e.aggr.prod=e.aggr.PROD=Os.prod,e.aggr.median=e.aggr.MEDIAN=Os.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Os.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Os.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var zA=f((M2,ZA)=>{"use strict";var wi=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var WF=uc(),XA=require("clone"),lc=require("recursive-iterator"),D=I(),B=b(),fn=Qt(),QF=m(),{hdb_errors:JF}=y(),XF="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";WF(Ie);var Ec=class{constructor(t,r){if(B.isEmpty(t))throw D.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(),B.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!B.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(XA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=wi.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(B.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!B.isEmpty(r)&&r.right)if(B.isNotEmptyAndHasValue(r.right.value)){let s=B.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=B.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(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(!B.isEmpty(QF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(B.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(B.isEmptyOrZeroLength(r.left.columnid)||B.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(B.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!B.isEmpty(r.right.value)||!B.isEmpty(r.left.value)?s.add(B.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from)&&B.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&&wi.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(B.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);B.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(B.isEmptyOrZeroLength(this.all_table_attributes)&&!B.isEmptyOrZeroLength(this.columns.columns))return t;if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(XA(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(B.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(XF)>-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=wi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!B.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await fn.getDataByHash(c);for(let E of c.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 D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await fn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!B.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await fn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await fn.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.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 Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.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 d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=wi.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=wi.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 D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await fn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).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();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(JF.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.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,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await fn.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");ZA.exports=Ec});var It=f((P2,ep)=>{"use strict";var ZF=vf();ep.exports={searchByConditions:t0,searchByHash:r0,searchByValue:s0,search:n0};var Jl=Qt(),jA=require("util"),zF=jA.callbackify(Jl.searchByHash),jF=jA.callbackify(Jl.searchByValue),e0=zA();async function t0(e){return Jl.searchByConditions(e)}a(t0,"searchByConditions");function r0(e,t){try{zF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(r0,"searchByHash");function s0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),jF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(s0,"searchByValue");function n0(e,t){try{let r=new ZF(e);r.validate(),new e0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(n0,"search")});var Rs=f((v2,cp)=>{"use strict";var rp=It(),Kr=I(),sp=_o(),i0=require("lodash"),a0=Vr(),np=b(),{promisify:ip}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:o0}=y(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:ap}=o0,c0=v();c0.initSync();var tp=X(),_0=gs(),{getSchemaPath:u0}=j(),Ci=ip(rp.searchByValue),l0=ip(rp.searchByHash),Sn="name",op="hash_attribute",Xl="schema",E0="schema_table",d0="attribute";cp.exports={describeAll:h0,describeTable:fc,describeSchema:S0};async function h0(e){try{let t=np.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Sn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[Sn]},i=await Ci(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[op,z.ID_ATTRIBUTE_STRING,Sn,Xl]},u=await Ci(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(h0,"describeAll");async function fc(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=sp.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Sn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Ci(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),ap.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:E0,search_value:r+"."+s,get_attributes:[d0]},E=Array.from(await Ci(l));E=i0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=f0(n)),i.attributes=E,i.clustering_stream_name=a0.createNatsTableStreamName(u.schema,u.name);try{let d=u0(i.schema,i.name),h=await tp.openEnvironment(d,i.name),T=tp.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of _0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function f0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(f0,"getAttrsByPerms");async function S0(e){let t=sp.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:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Xl,search_value:s,hash_values:[],get_attributes:[op,z.ID_ATTRIBUTE_STRING,Sn,Xl]},i=Array.from(await Ci(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Sn]},c=Array.from(await l0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),ap.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),np.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(S0,"describeSchema")});var Gr=f((q2,dp)=>{var Tn=_s(),{callbackify:lp,promisify:T0}=require("util");dp.exports={setSchemaDataToGlobal:_p,getTableSchema:A0,getSystemSchema:g0,setSchemaDataToGlobalAsync:T0(_p)};var Ep=Rs(),m0=lp(Ep.describeAll),R0=lp(Ep.describeTable);function _p(e){m0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Tn),global.hdb_schema=r,e(null,null)})}a(_p,"setSchemaDataToGlobal");function up(e,t){return e==="system"?Tn[t]:global.hdb_schema[e][t]}a(up,"returnSchema");function A0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?p0(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,up(e,t))}):r(null,up(e,t))}a(A0,"getTableSchema");function p0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Tn:global.hdb_schema={system:Tn},r();return}R0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Tn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(p0,"setTableDataToGlobal");function g0(){return Tn}a(g0,"getSystemSchema")});var Sc=f((F2,hp)=>{"use strict";var N0=Qt();hp.exports={writeTransaction:O0};function O0(e,t,r){return N0.writeTransaction(e,t,r)}a(O0,"writeTransaction")});var Zl=f((V2,I0)=>{I0.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 ve=f((Z2,Mp)=>{"use strict";var pe=v();pe.initSync();var b0=require("fs-extra"),w0=require("semver"),Di=require("path"),{monotonicFactory:C0}=require("ulidx"),rE=C0(),y0=require("util"),Sp=require("child_process"),L0=y0.promisify(Sp.exec),U0=Sp.spawn,V=ue(),Q=m(),Tc=b(),Wr=I(),mc=Vr(),M0=Sc(),yi=lr(),{encode:eE,decode:sE}=require("msgpackr"),{isEmpty:Is}=Tc,Tp=Sr(),mp=12e10,{connect:D0,StorageType:Rp,RetentionPolicy:Ap,AckPolicy:nE,DeliverPolicy:Pi,DiscardPolicy:P0,NatsConnection:k2,JetStreamManager:$2,JetStreamClient:Y2,StringCodec:K2,JSONCodec:B0,createInbox:iE,StreamSource:W2,headers:v0,toJsMsg:pp,nuid:Q2,JetStreamOptions:J2,ErrorCode:fp,nanos:X2}=require("nats"),{PACKAGE_ROOT:H0}=m(),q0=Zl(),gp=B0(),G0="clustering",F0=q0.engines[V.NATS_SERVER_NAME],x0=Di.join(H0,"dependencies"),tE=Di.join(x0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),zl,jl,Li,Ui,Mi,Gt;Mp.exports={runCommand:Np,checkNATSServerInstalled:V0,createConnection:aE,getConnection:Rc,getJetStreamManager:Bi,getJetStream:Op,getNATSReferences:dt,getServerList:$0,createLocalStream:oE,listStreams:Ip,deleteLocalStream:Y0,getServerConfig:vi,listRemoteStreams:K0,viewStream:W0,viewStreamIterator:Q0,publishToStream:J0,createWorkQueueStream:X0,addSourceToWorkStream:wp,request:Z0,removeSourceFromWorkStream:yp,reloadNATS:cE,reloadNATSHub:z0,reloadNATSLeaf:j0,extractServerName:Cp,requestErrorHandler:ex,updateWorkStream:tx,createLocalTableStream:Lp,createTableStreams:rx,purgeTableStream:Up,purgeSchemaTableStreams:sx,getStreamInfo:nx,updateLocalStreams:ax,closeConnection:k0,getJsmServerName:Hi,addNatsMsgHeader:bp};async function Np(e,t=void 0){let{stdout:r,stderr:s}=await L0(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 Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}XU(s,r),Uu(s);let n=s.toJSON();if(Ne=Es(n),Ne.logging_rotation_rotate)for(let i in eS)Ne[i]&&Te.error(`Config ${eS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace($U)}}a(iS,"initConfig");function XU(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(XU,"checkForUpdatedConfig");function Uu(e){let t=e.toJSON(),r=vU(t);if(r.error)throw Ya.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(Uu,"validateConfig");function ZU(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(ZU,"updateConfigObject");function aS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&iS();let i=nS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Mr.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Mr.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&sS(c,_),Uu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&zU(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=Es(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aS,"updateConfigValue");function zU(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(YU),Te.error(r)}}a(zU,"backupConfigFile");var jU=["schemas"];function Es(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!jU.includes(r)){let s=Es(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(Es,"flattenConfig");function yu(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(qU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function eM(){let e=ot.getPropsFilePath(),t=Lu(e);return Js(t).toJSON()}a(eM,"getConfiguration");async function tM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aS(void 0,void 0,n,!0),WU}catch(i){throw typeof i=="string"||i instanceof String?FU(i,i,xU.BAD_REQUEST,void 0,void 0,!0):i}}a(tM,"setConfiguration");function Mu(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Lu(e);return Js(t).toJSON()}a(Mu,"readConfigFile");function Js(e){return HU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function rM(){let e=Mu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=jf(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=jf(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(rM,"getClusteringRoutes");function oS(e){let t=tS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Mr.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(oS,"initOldConfig");function sM(e){let t=Mu();return GU.get(t,e.replaceAll("_","."))}a(sM,"getConfigFromFile")});var v=f((JX,uS)=>{"use strict";var Du=require("fs-extra"),Yt=require("path"),nM=require("os"),iM=require("properties-reader"),Qn=I(),Xs=b(),L=m(),Wa=lr(),aM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",_S=!1,oM={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Er={};uS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:cM,setHdbBasePath:_M,get:uM,initSync:EM,setProperty:k,initTestEnvironment:dM};function cM(){return Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(cM,"getHdbBasePath");function _M(e){Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(_M,"setHdbBasePath");function uM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(uM,"get");function k(e,t){oM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function lM(){let e;try{e=Xs.getPropsFilePath(),Du.accessSync(e,Du.constants.F_OK|Du.constants.R_OK),_S=!0;let t=iM(e);return Er[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Er[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a(lM,"doesPropFileExist");function EM(e=!1){try{(_S||lM())&&(Wa.initConfig(e),Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(aM),Qn.error(t),console.error(t),process.exit(1)}}a(EM,"initSync");function dM(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:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,nM.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(dM,"initTestEnvironment")});var dS=f((ZX,ES)=>{"use strict";var Pu=v(),lS=m();Pu.initSync();var hM=Pu.get(lS.CONFIG_PARAMS.STORAGE_COMPRESSION),fM=Pu.get(lS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=hM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=fM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");ES.exports=Ja});var SS=f((jX,fS)=>{"use strict";var Zs=v(),Jn=m();Zs.initSync();var SM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",hS=Zs.get(Jn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),TM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=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=SM,hS!==void 0&&(this.overlappingSync=hS),this.noReadAhead=TM}};a(Xa,"OpenEnvironmentObject");fS.exports=Xa});var X=f((t3,NS)=>{"use strict";var Bu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=us(),TS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=Yf(),vu=dS(),mS=SS(),Dr=Le(),Pt=Dr.INTERNAL_DBIS_NAME,RS=Dr.DBI_DEFINITION_NAME,mM="data.mdb",RM="lock.mdb",Xn=".mdb",AM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(t,r),this.key_type=this.dbi[Dr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Dr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Bu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function Hu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(Hu,"pathEnvNameValidation");async function qu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Xn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,mM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(qu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function pM(e,t,r=!1,s=!1){Hu(e,t),t=t.toString();try{return await qu(e,t,s),Gu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new mS(s?i:i+Xn,!1),c=Bu.open(o);c.dbis=Object.create(null);let _=new vu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Fu(e,t,r);return c[Dr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(pM,"createEnvironment");async function gM(e,t,r,s=!0){let n=await Gu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(gM,"copyEnvironment");async function Gu(e,t,r=!1){Hu(e,t),t=t.toString();let s=Fu(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 qu(e,t),i=Dt.join(e,t+Xn),o=n!=i,c=new mS(n,o),_=Bu.open(c);_.dbis=Object.create(null);let u=pS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Dr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Gu,"openEnvironment");async function NM(e,t,r=!1){Hu(e,t),t=t.toString();let s=Dt.join(e,t+Xn),n=await qu(e,t);if(global.lmdb_map!==void 0){let i=Fu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await AS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+AM:Dt.join(Dt.dirname(n),RM))}a(NM,"deleteEnvironment");async function AS(e){za.validateEnv(e);let t=e[Dr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(AS,"closeEnvironment");function Fu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Fu,"getCachedEnvironmentName");function OM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(OM,"listDBIDefinitions");function pS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(pS,"listDBIs");function IM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(IM,"getDBIDefinition");function gS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new vu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[RS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=IM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new vu(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(Oe.DBI_DOES_NOT_EXIST):n}return s[RS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function bM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Dr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(bM,"statDBI");async function wM(e,t){try{let r=Dt.join(e,t+Xn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(wM,"environmentDataSize");function CM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(CM,"dropDBI");function yM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)gS(e,n,n!==t,n===t);else throw i}}}a(yM,"initializeDBIs");NS.exports={openDBI:gt,openEnvironment:Gu,createEnvironment:pM,listDBIs:pS,listDBIDefinitions:OM,createDBI:gS,dropDBI:CM,statDBI:bM,deleteEnvironment:NM,initializeDBIs:yM,TransactionCursor:Za,environmentDataSize:wM,copyEnvironment:gM,closeEnvironment:AS}});var IS=f((s3,OS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");OS.exports=to});var wS=f((i3,bS)=>{"use strict";var ro=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(ro,"UpdateRecordsResponseObject");bS.exports=ro});var yS=f((o3,CS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");CS.exports=so});var zs=f((E3,MS)=>{"use strict";var LM=X(),UM=IS(),MM=wS(),DM=yS(),Kt=us(),Zn=it().LMDB_ERRORS_ENUM,PM=Le(),dr=m(),BM=b(),vM=require("uuid"),_3=require("lmdb"),{handleHDBError:HM,hdb_errors:qM}=y(),{OVERFLOW_MARKER:u3,MAX_SEARCH_KEY_LENGTH:l3}=PM,LS=v();LS.initSync();var no=LS.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ds=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function GM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new UM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];US(u,!0,n);let l=FM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return ku(o,c,s,i,n)}a(GM,"insertRecords");function FM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[ds])})}a(FM,"insertRecord");function xM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xM,"removeSkippedRecords");function US(e,t,r){let s=r>0;(s||!Number.isInteger(e[ds]))&&(e[ds]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[xu]))&&(e[xu]=r||Kt.getNextMonotonicTime()):delete e[xu]}a(US,"setTimestamps");function Vu(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),LM.initializeDBIs(e,t,r)}a(Vu,"initializeTransaction");async function VM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new MM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=$u(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return ku(c,_,s,i,n,o)}a(VM,"updateRecords");async function kM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Yu(e,t,r,s)}catch(_){throw HM(_,_.message,qM.HTTP_STATUS_CODES.BAD_REQUEST)}Vu(e,t,r);let i=new DM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;BM.isEmpty(u[t])?(l=vM.v4(),u[t]=l):l=u[t];let E=$u(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return ku(o,c,s,i,n)}a(kM,"upsertRecords");async function ku(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),xM(r,i),s}a(ku,"finalizeWrite");function $u(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(US(r,!l,o),Number.isInteger(r[ds])&&u[ds]>r[ds])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[ds])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:$u(e,t,r,s,n,i,o))}a($u,"updateUpsertRecord");function $M(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(Zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zn.WRITE_ATTRIBUTES_REQUIRED):new Error(Zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a($M,"validateBasic");function Yu(e,t,r,s){if($M(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Zn.RECORDS_REQUIRED):new Error(Zn.RECORDS_MUST_BE_ARRAY)}a(Yu,"validateWrite");function io(){}a(io,"noop");MS.exports={insertRecords:GM,updateRecords:VM,upsertRecords:kM}});var j=f((h3,qS)=>{"use strict";var ri=m(),YM=b(),Ye=v(),si=require("path"),KM=require("minimist"),DS=require("fs-extra"),PS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Pr,SCHEMAS_PARAM_CONFIG:zn,SYSTEM_SCHEMA_NAME:ao}=ri,jn,ei,ti;function BS(){if(jn!==void 0)return jn;if(Ye.getHdbBasePath()!==void 0)return jn=Ye.get(Pr.STORAGE_PATH)||si.join(Ye.getHdbBasePath(),ri.SCHEMA_DIR_NAME),jn}a(BS,"getBaseSchemaPath");function vS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=HS(ao),ei}a(vS,"getSystemSchemaPath");function WM(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=Ye.get(ri.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||si.join(Ye.getHdbBasePath(),ri.TRANSACTIONS_DIR_NAME),ti}a(WM,"getTransactionAuditStoreBasePath");function QM(e,t){let r=Ye.get(Pr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||si.join(WM(),e.toString())}a(QM,"getTransactionAuditStorePath");function HS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(ri.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||si.join(BS(),e)}a(HS,"getSchemaPath");function JM(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,KM(process.argv));let s=r[Pr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!YM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Pr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[zn.PATH];if(u)return PS.set(_,[ao,zn.TABLES,t,zn.PATH],u),Ye.setProperty(Pr.SCHEMAS,_),u;let l=c?.[zn.PATH];if(l)return PS.set(_,[ao,zn.PATH],l),Ye.setProperty(Pr.SCHEMAS,_),l}}let n=r[Pr.STORAGE_PATH.toUpperCase()];if(n){if(!DS.pathExistsSync(n))throw new Error(n+" does not exist");let i=si.join(n,e);return DS.mkdirsSync(i),Ye.setProperty(Pr.STORAGE_PATH,n),i}return vS()}a(JM,"initSystemSchemaPaths");function XM(){jn=void 0,ei=void 0,ti=void 0}a(XM,"resetPaths");qS.exports={getBaseSchemaPath:BS,getSystemSchemaPath:vS,getTransactionAuditStorePath:QM,getSchemaPath:HS,initSystemSchemaPaths:JM,resetPaths:XM}});var Wt=f((S3,xS)=>{"use strict";var FS=b(),GS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ku=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZM=Ku.alternatives(Ku.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Ku.number()).required();function zM(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(zM,"checkValidTable");function jM(e,t){return FS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(jM,"validateSchemaExists");function eD(e,t){let r=t.state.ancestors[0].schema;return FS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(eD,"validateTableExists");function tD(e,t){return e.toLowerCase()===GS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${GS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(tD,"validateSchemaName");xS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:ZM,validateSchemaExists:jM,validateTableExists:eD,validateSchemaName:tD,checkValidTable:zM}});var _o=f((m3,VS)=>{var{common_validators:Br}=Wt(),ni=te(),Bt="is required",Z={schema:{presence:!0,format:Br.schema_format,length:Br.schema_length},table:{presence:!0,format:Br.schema_format,length:Br.schema_length},attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length},hash_attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length}};function ii(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(ii,"makeAttributesStrings");function rD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(rD,"schema_object");function sD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(sD,"table_object");function nD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ni.validateObject(e,Z)}a(nD,"create_table_object");function iD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(iD,"attribute_object");function aD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(aD,"describe_table");function oD(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(oD,"validateTableResidence");VS.exports={schema_object:rD,create_table_object:nD,table_object:sD,attribute_object:iD,describe_table:aD,validateTableResidence:oD}});var $S=f((A3,kS)=>{"use strict";var cD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||cD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");kS.exports=uo});var Eo=f((g3,YS)=>{"use strict";var _D=$S(),lo=class extends _D{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");YS.exports=lo});var WS=f((O3,KS)=>{"use strict";KS.exports=lD;var uD="inserted";function lD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===uD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(lD,"returnObject")});var ho=f((b3,zS)=>{"use strict";var ED=m(),Wu=X(),dD=zs(),{getSystemSchemaPath:hD,getSchemaPath:fD}=j(),SD=_s(),TD=_o(),mD=Eo(),RD=WS(),{handleHDBError:QS,hdb_errors:XS}=y(),JS=b(),{HTTP_STATUS_CODES:AD}=XS,Qu=SD.hdb_attribute,ZS=[];for(let e=0;e<Qu.attributes.length;e++)ZS.push(Qu.attributes[e].attribute);var pD="inserted";zS.exports=gD;async function gD(e){let t=TD.attribute_object(e);if(t)throw QS(new Error,t.message,XS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&JS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw QS(new Error,r,AD.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=JS.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 mD(e.schema,e.table,e.attribute,e.id);try{let i=await Wu.openEnvironment(fD(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}`);Wu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Wu.openEnvironment(hD(),ED.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await dD.insertRecords(o,Qu.hash_attribute,ZS,[n]);return RD(pD,c,{records:[n]},_)}catch(i){throw i}}a(gD,"lmdbCreateAttribute")});var Xu=f((C3,eT)=>{var{hdb_schema_table:jS}=Wt(),ND=te(),Ju=require("joi"),OD={undefined:"undefined",null:"null"},ID=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||OD[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"),bD=Ju.object({schema:jS,table:jS,records:Ju.array().items(Ju.object().custom(ID)).required()});eT.exports=function(e){return ND.validateBySchema(e,bD)}});var fo=f((U3,rT)=>{"use strict";var hr=b(),tT=I(),L3=Xu();rT.exports=wD;function wD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.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&&hr.isEmptyOrZeroLength(o[r]))throw tT.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(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw tT.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`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(wD,"insertUpdateValidate")});var ai=f((D3,sT)=>{"use strict";var CD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=CD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");sT.exports=So});var mo=f((v3,nT)=>{"use strict";var B3=ai(),To=m(),zu=b(),Zu=I(),yD=require("uuid"),{handleHDBError:oi,hdb_errors:LD}=y(),{HDB_ERROR_MSGS:ci,HTTP_STATUS_CODES:_i}=LD;nT.exports=UD;function UD(e,t,r){for(let n=0;n<t.length;n++)MD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];DD(i,r,e.operation)}}a(UD,"processRows");function MD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw oi(new Error,ci.ATTR_NAME_LENGTH_ERR(e),_i.BAD_REQUEST,void 0,void 0,!0);if(zu.isEmptyOrZeroLength(e)||zu.isEmpty(e.trim()))throw oi(new Error,ci.ATTR_NAME_NULLISH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(MD,"validateAttribute");function DD(e,t,r){if(!e.hasOwnProperty(t)||zu.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=yD.v4();return}throw Zu.error("Update transaction aborted due to record with no hash value:",e),oi(new Error,ci.RECORD_MISSING_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Zu.error(e),oi(new Error,ci.HASH_VAL_LENGTH_ERR,_i.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Zu.error(e),oi(new Error,ci.INVALID_FORWARD_SLASH_IN_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(DD,"validateHash")});var aT=f((q3,iT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");iT.exports=Ro});var Ao=f((F3,_T)=>{var PD=require("crypto"),oT=9;function BD(e){let t=HD(oT),r=cT(e+t);return t+r}a(BD,"createHash");function vD(e,t){let r=e.substr(0,oT),s=r+cT(t+r);return e===s}a(vD,"validateHash");function HD(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(HD,"generateSalt");function cT(e){return PD.createHash("md5").update(e).digest("hex")}a(cT,"md5");_T.exports={hash:BD,validate:vD}});var lT=f((V3,uT)=>{"use strict";var vr=m(),ui=class{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.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(ui,"BaseLicense");var po=class extends ui{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");uT.exports={BaseLicense:ui,ExtendedLicense:po}});var tn=f(($3,TT)=>{"use strict";var en=require("fs-extra"),ET=Ao(),dT=require("crypto"),qD=require("moment"),GD=require("uuid").v4,De=I(),el=require("path"),FD=b(),ct=m(),xD=lT().ExtendedLicense,js="invalid license key format",VD="061183",kD="mofi25",$D="aes-256-cbc",YD=16,KD=32,hT=v();hT.initSync();var ju;TT.exports={validateLicense:fT,generateFingerPrint:QD,licenseSearch:ST,getLicense:ZD};function tl(){return el.join(hT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(tl,"getLicenseDirPath");function WD(){let e=tl();return el.join(e,ct.LICENSE_FILE_NAME)}a(WD,"getLicenseFilePath");function rl(){let e=tl();return el.join(e,ct.REG_KEY_FILE_NAME)}a(rl,"getFingerPrintFilePath");async function QD(){let e=rl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await JD();throw De.error(`Error writing fingerprint file to ${e}`),De.error(t),new Error("There was an error generating the fingerprint")}}a(QD,"generateFingerPrint");async function JD(){let e=GD(),t=ET.hash(e),r=rl();try{await en.mkdirp(tl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw De.error(`Error writing fingerprint file to ${r}`),De.error(s),new Error("There was an error generating the fingerprint")}return t}a(JD,"writeFingerprint");function fT(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return De.error("empty license key passed to validate."),r;let s=rl(),n=!1;try{n=en.statSync(s)}catch(i){De.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{De.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(kD),c=o[1];c=Buffer.concat([Buffer.from(c)],YD);let _=Buffer.concat([Buffer.from(i)],KD),u=dT.createDecipheriv($D,_,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 h=XD(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),De.error(js),new Error(js)}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(js),De.error(js),new Error(js)}else r.exp_date=l;r.exp_date<qD().valueOf()&&(r.valid_date=!1),ET.validate(o[1],`${VD}${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||De.error("Invalid licence"),r}a(fT,"validateLicense");function XD(e,t){try{let r=dT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{De.warn("Check old license failed")}}a(XD,"checkOldLicense");function ST(){let e=new xD;e.api_call=0;let t=[];try{t=en.readFileSync(WD(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?De.info("no license file found"):De.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(FD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=fT(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){De.error("There was an error parsing the license string."),De.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),ju=e,e}a(ST,"licenseSearch");async function ZD(){return ju||await ST(),ju}a(ZD,"getLicense")});var rn=f((K3,cl)=>{"use strict";var{Worker:zD,MessageChannel:jD,parentPort:fr,isMainThread:AT,threadId:eP,workerData:tP}=require("worker_threads"),{PACKAGE_ROOT:rP}=m(),{join:sP,isAbsolute:nP,extname:iP}=require("path"),{totalmem:mT}=require("os"),al=m(),pT=v(),aP=tn(),go=I(),oP=m();pT.initSync();var cP=pT.get(al.CONFIG_PARAMS.HTTP_THREADS)||1,_P=1024*1024,Hr=[],hs=[],uP=50,gT=1e4,NT="restart",OT="request_thread_info",IT="resource_report",bT="thread_info",wT="added-port",sl;cl.exports={startWorker:nl,restartWorkers:ol,shutdownWorkers:EP,workers:Hr,setMonitorListener:TP,onMessageFromWorkers:dP,broadcast:hP};function nl(e,t={}){let s=aP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||mT();n=Math.min(n,mT());let i=Math.min(Math.max(Math.floor(n/_P/(1+cP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of hs){let{port1:l,port2:E}=new jD;u.postMessage({type:wT,port:l},[l]),c.push(E)}iP(e)||(e+=".js");let _=new zD(nP(e)?e:sP(rP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{nl(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{Hr.splice(Hr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<uP?(t.unexpectedRestarts=_.unexpectedRestarts+1,nl(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===NT&&ol(u.workerType),u.type===OT&&fP(_),u.type===IT&&SP(_,u)}),Hr.push(_),RP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(nl,"startWorker");var lP=[al.THREAD_TYPES.HTTP];async function ol(e=null,t=2,r=!0){if(AT){t<1&&(t=t*Hr.length);let s=[];for(let n of Hr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:al.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=lP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),gT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:NT,workerType:e})}a(ol,"restartWorkers");function EP(e){return ol(e,1/0,!1)}a(EP,"shutdownWorkers");var CT=[];function dP(e){CT.push(e)}a(dP,"onMessageFromWorkers");function hP(e){for(let t of hs)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(hP,"broadcast");function fP(e){e.postMessage({type:bT,workers:yT()})}a(fP,"sendThreadInfo");function yT(){let e=Date.now();return Hr.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(yT,"getChildWorkerInfo");function SP(e,t){e.resources=t,e.resources.updated=Date.now()}a(SP,"recordResourceReport");var il;function TP(e){il=e}a(TP,"setMonitorListener");var mP=1e3,RT=!1;function RP(){RT||(RT=!0,setInterval(()=>{for(let e of Hr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}il&&il()},mP).unref())}a(RP,"startMonitoring");var AP=1e3;if(fr){No(fr);for(let e of tP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:IT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},AP).unref(),sl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:OT});function r(s){s.type===bT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else sl=yT;cl.exports.getThreadInfo=sl;function No(e,t){hs.push(e),e.on("message",r=>{if(r.type===wT)No(r.port);else for(let s of CT)s(r)}).on("close",()=>{hs.splice(hs.indexOf(e),1)}).on("exit",()=>{hs.splice(hs.indexOf(e),1)}),t||e.unref()}a(No,"addPort");AT||fr.on("message",async e=>{let{type:t}=e;t===oP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",eP),process.exit(0)},gT).unref())})});var MT=f((Q3,UT)=>{"use strict";var _l=X(),pP=I(),LT=it().LMDB_ERRORS_ENUM;UT.exports=gP;async function gP(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 _l.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await _l.closeEnvironment(global.lmdb_map[s]),await _l.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LT.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){pP.error(t)}}a(gP,"cleanLMDBMap")});var Ot=f((X3,BT)=>{"use strict";var Io=Xu(),Nt=b(),NP=require("util"),bo=Qt(),OP=Gr(),ul=I(),{handleHDBError:qr,hdb_errors:IP}=y(),{HTTP_STATUS_CODES:fs}=IP,bP=NP.promisify(OP.getTableSchema),wP="updated",DT="inserted",PT="upserted";BT.exports={insert:yP,update:LP,upsert:UP,validation:CP,flush:MP};async function CP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await bP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ul.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ul.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(CP,"validation");async function yP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(DT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(yP,"insertData");async function LP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(wP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(LP,"updateData");async function UP(e){if(e.operation!=="upsert")throw qr(new Error,"invalid operation, must be upsert",fs.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(PT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw qr(s,null,null,ul.ERR,n)}}a(UP,"upsertData");function Oo(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===DT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===PT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function MP(e){return bo.flush(e.schema,e.table)}a(MP,"flush")});var El=f((z3,qT)=>{var DP=te(),ll=require("joi"),{hdb_schema_table:vT}=Wt(),HT={schema:vT,table:vT},PP={date:ll.date().iso().required()},BP={timestamp:ll.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qT.exports=function(e,t){let r=t==="timestamp"?{...HT,...BP}:{...HT,...PP},s=ll.object(r);return DP.validateBySchema(e,s)}});var VT=f((j3,xT)=>{var vP=te(),GT=require("joi"),{hdb_schema_table:FT}=Wt(),HP=GT.object({schema:FT,table:FT,hash_values:GT.array().required()});xT.exports=function(e){return vP.validateBySchema(e,HP)}});var $T=f((eZ,kT)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=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(Co,"NoSQLSeachObject");var yo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(yo,"DeleteResponseObject");kT.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:yo}});var Ts=f((rZ,JT)=>{"use strict";var KT=El(),qP=VT(),Lo=b(),YT=require("moment"),WT=I(),{promisify:GP,callbackify:FP}=require("util"),Ss=m(),xP=Gr(),dl=GP(xP.getTableSchema),hl=Qt(),{DeleteResponseObject:VP}=$T(),{handleHDBError:Fr,hdb_errors:kP}=y(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:xr}=kP,$P="records successfully deleted",YP=FP(QT);JT.exports={delete:YP,deleteRecord:QT,deleteFilesBefore:KP,deleteAuditLogsBefore:WP};async function KP(e){let t=KT(e,"date");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(!YT(e.date,YT.ISO_8601).isValid())throw Fr(new Error,Uo.INVALID_DATE,xr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=Lo.checkSchemaTableExist(e.schema,e.table);if(s)throw Fr(new Error,s,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,s,!0);let n=await hl.deleteRecordsBefore(e);if(await dl(e.schema,e.table),WT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(KP,"deleteFilesBefore");async function WP(e){let t=KT(e,"timestamp");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Fr(new Error,Uo.INVALID_VALUE("Timestamp"),xr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);let s=await hl.deleteAuditLogsBefore(e);return await dl(e.schema,e.table),WT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(WP,"deleteAuditLogsBefore");async function QT(e){let t=qP(e);if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);try{await dl(e.schema,e.table);let s=await hl.deleteRecords(e);return Lo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${$P}`),s}catch(s){if(s.message===Ss.SEARCH_NOT_FOUND_MESSAGE){let n=new VP;return n.message=Ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QT,"deleteRecord")});var ZT=f((nZ,XT)=>{var fl=te(),Pe={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 QP(e){return Pe.password.presence=!0,Pe.username.presence=!0,Pe.role.presence=!0,Pe.active.presence=!0,fl.validateObject(e,Pe)}a(QP,"addUserValidation");function JP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(JP,"alterUserValidation");function XP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(XP,"dropUserValidation");XT.exports={addUserValidation:QP,alterUserValidation:JP,dropUserValidation:XP}});var Vr=f((aZ,tm)=>{"use strict";var li=require("crypto"),jT="aes-256-cbc",ZP=32,zP=16,Sl=64,em=32,jP=Sl+em,zT=new Map;tm.exports={encrypt:eB,decrypt:tB,createNatsTableStreamName:rB};function eB(e){let t=li.randomBytes(ZP),r=li.randomBytes(zP),s=li.createCipheriv(jT,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(eB,"encrypt");function tB(e){let t=e.substr(0,Sl),r=e.substr(Sl,em),s=e.substr(jP,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=li.createDecipheriv(jT,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(tB,"decrypt");function rB(e,t){let r=`${e}.${t}`,s=zT.get(r);return s||(s=li.createHash("md5").update(`${e}.${t}`).digest("hex"),zT.set(r,s)),s}a(rB,"createNatsTableStreamName")});var ue=f((_Z,sm)=>{"use strict";var{platform:cZ}=require("os"),sB="nats-server.zip",Tl="nats-server",nB=process.platform==="win32"?`${Tl}.exe`:Tl,ml="HDB",iB=/^[^\s.,*>]+$/,rm="__request__",aB=a(e=>`${e}.${rm}`,"REQUEST_SUBJECT"),oB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},cB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_B={HUB:"hub.pid",LEAF:"leaf.pid"},uB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},lB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ml,deliver_subject:"__HDB__.WORKQUEUE"},EB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ml,deliver_subject:"HDB.SCHEMAQUEUE"},dB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ml,deliver_subject:"HDB.USERQUEUE"},hB={SUCCESS:"success",ERROR:"error"},fB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},SB={TXN:"txn",MSGID:"msgid"},sn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},TB={[sn.ERR]:1,[sn.WRN]:2,[sn.INF]:3,[sn.DBG]:4,[sn.TRC]:5},mB={debug:"-D",trace:"-DVV"};sm.exports={NATS_SERVER_ZIP:sB,NATS_SERVER_NAME:Tl,NATS_BINARY_NAME:nB,PID_FILES:_B,NATS_CONFIG_FILES:cB,SERVER_SUFFIX:uB,WORK_QUEUE_CONSUMER_NAMES:lB,SCHEMA_QUEUE_CONSUMER_NAMES:EB,USER_QUEUE_CONSUMER_NAMES:dB,NATS_TERM_CONSTRAINTS_RX:iB,REQUEST_SUFFIX:rm,UPDATE_REMOTE_RESPONSE_STATUSES:hB,CLUSTER_STATUS_STATUSES:fB,REQUEST_SUBJECT:aB,SUBJECT_PREFIXES:SB,MSG_HEADERS:oB,LOG_LEVELS:sn,LOG_LEVEL_FLAGS:mB,LOG_LEVEL_HIERARCHY:TB}});var Sr=f((EZ,mm)=>{"use strict";var cm="username is required",_m="nothing to update, must supply active, role or password to update",um="password cannot be an empty string",lm="If role is specified, it cannot be empty.",Em="active must be true or false";mm.exports={addUser:bB,alterUser:wB,dropUser:yB,userInfo:LB,listUsers:Do,listUsersExternal:UB,setUsersToGlobal:Ei,findAndValidateUser:PB,getClusterUser:BB,USERNAME_REQUIRED:cm,ALTERUSER_NOTHING_TO_UPDATE:_m,EMPTY_PASSWORD:um,EMPTY_ROLE:lm,ACTIVE_BOOLEAN:Em};var dm=Ot(),RB=Ts(),Al=Ao(),hm=ZT(),fm=It(),pl=an(),_t=b(),Sm=require("validate.js"),M=I(),{promisify:gl}=require("util"),Nl=Vr(),nm=m(),im=ue(),AB=lr(),lZ=v(),pB=tn(),gB=_s(),{handleHDBError:Jt,hdb_errors:NB}=y(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Rl,HDB_ERROR_MSGS:nn}=NB,{UserEventMsg:Ol}=kr(),am=require("lodash"),Tm={username:!0,active:!0,role:!0,password:!0},om=new Map,Mo=gl(fm.searchByValue),OB=gl(fm.searchByHash),IB=gl(RB.delete);async function bB(e){let t=Sm.cleanAttributes(e,Tm),r=hm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,nn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,nn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await dm.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await Ei()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,nn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],pl.signalUserChange(new Ol(process.pid)),`${c.username} successfully added`}a(bB,"addUser");async function wB(e){let t=Sm.cleanAttributes(e,Tm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(cm);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(_m);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(um);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(Em);let r=CB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password)),t.role==="")throw new Error(lm);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 Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=nn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=nn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.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 dm.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await Ei()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return pl.signalUserChange(new Ol(process.pid)),n}a(wB,"alterUser");function CB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(CB,"isClusterUser");async function yB(e){try{let t=hm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,nn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await IB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await Ei()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return pl.signalUserChange(new Ol(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(yB,"dropUser");async function LB(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 OB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(LB,"userInfo");async function UB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.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(UB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=am.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 Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=am.cloneDeep(o),o.role=r[o.role],MB(o.role),i.set(o.username,o);return(await pB.getLicense()).enterprise?i:DB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function MB(e){try{if(!e){M.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(gB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(MB,"appendSystemTablesToRole");function DB(e){try{if(M.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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(DB,"nonEnterpriseFilter");async function Ei(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(Ei,"setUsersToGlobal");async function PB(e,t,r=!0){global.hdb_users||await Ei();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Rl.USER_INACTIVE,Xt.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(om.get(t)===s.password)return n;if(Al.validate(s.password,t))om.set(t,s.password);else throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(PB,"findAndValidateUser");async function BB(){let e=await Do(),t=AB.getConfigFromFile(nm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===nm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Nl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+im.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+im.SERVER_SUFFIX.ADMIN,r}a(BB,"getClusterUser")});var Po=f((hZ,gm)=>{"use strict";var ms=I(),ut=m(),vB=MT(),Rm=Gr(),HB=Rs(),qB=Sr(),{validateEvent:pm}=kr(),di=Qt(),GB=require("process"),FB={[ut.ITC_EVENT_TYPES.SCHEMA]:xB,[ut.ITC_EVENT_TYPES.USER]:kB};async function xB(e){let t=pm(e);if(t){ms.error(t);return}ms.trace("ITC schemaHandler received schema event:",e),await vB(e.message),await VB(e.message)}a(xB,"schemaHandler");async function VB(e){try{if(di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.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 HB.describeTable({schema:e.schema,table:e.table});break;default:Rm.setSchemaDataToGlobal(Am);break}else Rm.setSchemaDataToGlobal(Am)}catch(t){ms.error(t)}}a(VB,"syncSchemaMetadata");function Am(e){e&&ms.error(e)}a(Am,"handleErrorCallback");async function kB(e){try{di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=pm(e);if(t){ms.error(t);return}ms.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${GB.pid} received user event:`,e),await qB.setUsersToGlobal()}catch(t){ms.error(t)}}a(kB,"userHandler");gm.exports=FB});var kr=f((RZ,Om)=>{"use strict";var SZ=I(),Il=b(),$B=m(),{ITC_ERRORS:hi}=it(),{parentPort:TZ,threadId:YB,isMainThread:KB,workerData:mZ}=require("worker_threads"),{onMessageFromWorkers:WB,broadcast:QB}=rn();Om.exports={sendItcEvent:JB,validateEvent:Nm,SchemaEventMsg:XB,UserEventMsg:ZB};var Bo;WB(e=>{Bo=Bo||Po(),Nm(e),Bo[e.type]&&Bo[e.type](e)});function JB(e){!KB&&e.message&&(e.message.originator=YB),QB(e)}a(JB,"sendItcEvent");function Nm(e){if(typeof e!="object")return hi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Il.isEmpty(e.type))return hi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Il.isEmpty(e.message))return hi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Il.isEmpty(e.message.originator))return hi.MISSING_ORIGIN;if($B.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hi.INVALID_EVENT(e.type)}a(Nm,"validateEvent");function XB(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(XB,"SchemaEventMsg");function ZB(e){this.originator=e}a(ZB,"UserEventMsg")});var an=f((gZ,Cm)=>{"use strict";var Im=m(),pZ=b(),vo=I(),bm=aT(),on,{sendItcEvent:wm}=kr();function zB(e){try{vo.trace("signalSchemaChange called with message:",e),on=on||Po();let t=new bm(Im.ITC_EVENT_TYPES.SCHEMA,e);on.schema(t),wm(t)}catch(t){vo.error(t)}}a(zB,"signalSchemaChange");function jB(e){try{vo.trace("signalUserChange called with message:",e),on=on||Po();let t=new bm(Im.ITC_EVENT_TYPES.USER,e);on.user(t),wm(t)}catch(t){vo.error(t)}}a(jB,"signalUserChange");Cm.exports={signalSchemaChange:zB,signalUserChange:jB}});var Ho=f((OZ,Lm)=>{"use strict";var ym=b(),ev=m(),tv=I(),rv=ho(),sv=Eo(),nv=an(),{SchemaEventMsg:iv}=kr(),av="already exists in";Lm.exports=ov;async function ov(e,t,r){if(ym.isEmptyOrZeroLength(r))return r;let s=[];ym.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 cv(e,t.schema,t.name,i)})),n}a(ov,"lmdbCheckForNewAttributes");async function cv(e,t,r,s){let n=new sv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await _v(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(av))tv.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(cv,"createNewAttribute");async function _v(e){let t;return t=await rv(e),nv.signalSchemaChange(new iv(process.pid,ev.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_v,"createAttribute")});var cn=f((bZ,Um)=>{"use strict";var qo=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(qo,"LMDBTransactionObject");Um.exports=qo});var Dm=f((CZ,Mm)=>{"use strict";var uv=cn(),lv=m().OPERATIONS_ENUM,Go=class extends uv{constructor(t,r,s,n,i=void 0){super(lv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Mm.exports=Go});var Bm=f((LZ,Pm)=>{"use strict";var Ev=cn(),dv=m().OPERATIONS_ENUM,Fo=class extends Ev{constructor(t,r,s,n,i,o=void 0){super(dv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Pm.exports=Fo});var Hm=f((MZ,vm)=>{"use strict";var hv=cn(),fv=m().OPERATIONS_ENUM,xo=class extends hv{constructor(t,r,s,n,i,o=void 0){super(fv.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");vm.exports=xo});var Gm=f((PZ,qm)=>{"use strict";var Sv=cn(),Tv=m().OPERATIONS_ENUM,Vo=class extends Sv{constructor(t,r,s,n,i=void 0){super(Tv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");qm.exports=Vo});var fi=f((HZ,km)=>{"use strict";var vZ=require("path"),Fm=X(),mv=Dm(),Rv=Bm(),Av=Hm(),pv=Gm(),_n=Le(),xm=b(),{CONFIG_PARAMS:gv}=m(),Vm=v();Vm.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Nv}=j();km.exports=Ov;async function Ov(e,t){if(Vm.get(gv.LOGGING_AUDITLOG)===!1)return;let r=Nv(e.schema,e.table),s=await Fm.openEnvironment(r,e.table,!0),n=Iv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Fm.initializeDBIs(s,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_n.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xm.isEmpty(n.user_name)||s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(Ov,"writeTransaction");function Iv(e,t){let r=xm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new mv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Rv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Av(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new pv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Iv,"createTransactionObject")});var bl=f((FZ,$m)=>{"use strict";var bv=fo(),GZ=ai(),Si=m(),wv=mo(),Cv=zs().insertRecords,yv=X(),Lv=I(),Uv=Ho(),{getSchemaPath:Mv}=j(),Dv=fi();$m.exports=Pv;async function Pv(e){try{let{schema_table:t,attributes:r}=bv(e);wv(e,r,t.hash_attribute),e.schema!==Si.SYSTEM_SCHEMA_NAME&&(r.includes(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Uv(e.hdb_auth_header,t,r),n=Mv(e.schema,e.table),i=await yv.openEnvironment(n,e.table),o=await Cv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Dv(e,o)}catch(c){Lv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Pv,"lmdbCreateRecords")});var Wm=f((VZ,Km)=>{"use strict";var Ym=m(),Bv=bl(),vv=ai(),Hv=require("fs-extra"),{getSchemaPath:qv}=j();Km.exports=Gv;async function Gv(e){let t=[{name:e.schema,createddate:Date.now()}],r=new vv(Ym.SYSTEM_SCHEMA_NAME,Ym.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Bv(r),await Hv.mkdirp(qv(e.schema))}a(Gv,"lmdbCreateSchema")});var Jm=f(($Z,Qm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Qm.exports=$o});var yl=f((JZ,zm)=>{"use strict";var Xm=X(),wl=us(),Cl=it().LMDB_ERRORS_ENUM,Fv=Le(),Zm=I(),KZ=b(),xv=require("lmdb"),Vv=Jm(),kv=m(),{OVERFLOW_MARKER:WZ,MAX_SEARCH_KEY_LENGTH:QZ}=Fv,$v=kv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Yv(e,t,r,s){if(wl.validateEnv(e),t===void 0)throw new Error(Cl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cl.IDS_REQUIRED):new Error(Cl.IDS_MUST_BE_ITERABLE);try{let n=Xm.listDBIs(e);Xm.initializeDBIs(e,t,n);let i=new Vv,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[$v]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,xv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=wl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{Zm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){Zm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=wl.getNextMonotonicTime(),i}catch(n){throw n}}a(Yv,"deleteRecords");zm.exports={deleteRecords:Yv}});var Ti=f((ZZ,eR)=>{"use strict";var un=b(),Kv=yl(),Wv=X(),{getSchemaPath:Qv}=j(),Jv=fi(),Xv=I();eR.exports=Zv;async function Zv(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(un.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(un.isEmptyOrZeroLength(e.hash_values)&&!un.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];un.isEmpty(_)||e.hash_values.push(_)}}if(un.isEmptyOrZeroLength(e.hash_values))return jm([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(un.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=Qv(e.schema,e.table),i=await Wv.openEnvironment(n,e.table),o=await Kv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Jv(e,o)}catch(c){Xv.error(`unable to write transaction due to ${c.message}`)}return jm(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Zv,"lmdbDeleteRecords");function jm(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(jm,"createDeleteResponse")});var Ul=f((ez,tR)=>{"use strict";var zv=m(),jZ=us();function Ll(e,t){let r=Object.create(null);if(t.length===1&&zv.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(Ll,"parseRow");function jv(e,t,r,s){let n=Ll(r,e);s.push(n)}a(jv,"searchAll");function eH(e,t,r,s){let n=Ll(r,e);s[t]=n}a(eH,"searchAllToMap");function tH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(tH,"iterateDBI");function As(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(As,"pushResults");function rH(e,t,r,s,n,i){t.toString().endsWith(e)&&As(t,r,s,n,i)}a(rH,"endsWith");function sH(e,t,r,s,n,i){t.toString().includes(e)&&As(t,r,s,n,i)}a(sH,"contains");function nH(e,t,r,s,n,i){t>e&&As(t,r,s,n,i)}a(nH,"greaterThanCompare");function iH(e,t,r,s,n,i){t>=e&&As(t,r,s,n,i)}a(iH,"greaterThanEqualCompare");function aH(e,t,r,s,n,i){t<e&&As(t,r,s,n,i)}a(aH,"lessThanCompare");function oH(e,t,r,s,n,i){t<=e&&As(t,r,s,n,i)}a(oH,"lessThanEqualCompare");tR.exports={parseRow:Ll,searchAll:jv,searchAllToMap:eH,iterateDBI:tH,endsWith:rH,contains:sH,greaterThanCompare:nH,greaterThanEqualCompare:iH,lessThanCompare:aH,lessThanEqualCompare:oH,pushResults:As}});var gs=f((iz,cR)=>{"use strict";var $r=X(),rz=I(),lt=us(),Yo=Le(),oe=it().LMDB_ERRORS_ENUM,sz=b(),cH=m(),Ko=Ul(),{parseRow:_H}=Ko,nz=require("lmdb"),{OVERFLOW_MARKER:rR,MAX_SEARCH_KEY_LENGTH:uH}=Yo;function sR(e,t,r,s=!1,n=void 0,i=void 0){return ps(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(sR,"iterateFullIndex");function mi(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return ps(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(mi,"iterateRangeBetween");function ps(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ps,"setupTransaction");function nR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(rR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(nR,"getOverflowCheck");function lH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return ps(e,t,t,(o,c,_)=>(Wo(r),r=Ri(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>_H(u.value,r))))}a(lH,"searchAll");function EH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ri(e.database||e,r);let o=new Map;for(let{key:c,value:_}of sR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(EH,"searchAllToMap");function dH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sR(e,void 0,t,r,s,n),c=o.transaction,_=nR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(dH,"iterateDBI");function hH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(hH,"countAll");function fH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,t,r,(c,_,u,l)=>(s=lt.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(fH,"equals");function SH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(SH,"count");function TH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,null,r,(c,_)=>{s=lt.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,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(TH,"startsWith");function mH(e,t,r,s,n=!1,i=void 0,o=void 0){return iR(e,t,r,s,n,i,o,!0)}a(mH,"endsWith");function iR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),ps(e,null,r,(_,u,l,E)=>{let d=nR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(rR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(iR,"contains");function RH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!0,!1)}a(RH,"greaterThan");function AH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!1,!1)}a(AH,"greaterThanEqual");function pH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!0)}a(pH,"lessThan");function gH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!1)}a(gH,"lessThanEqual");function NH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(oe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(oe.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(oe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return mi(e,t,r,s,n,i,o,c)}a(NH,"between");function OH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ri(n,r),s===void 0)throw new Error(oe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(OH,"searchByHash");function IH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(IH,"checkHashExists");function bH(e,t,r,s,n=[]){return oR(e,t,r,s,n),aR(e,t,r,s,n).map(i=>i[1])}a(bH,"batchSearchByHash");function wH(e,t,r,s,n=[]){oR(e,t,r,s,n);let i=new Map;for(let[o,c]of aR(e,t,r,s,n))i.set(o,c);return i}a(wH,"batchSearchByHashToMap");function aR(e,t,r,s,n=[]){return ps(e,t,t,(i,o,c)=>{r=Ri(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(aR,"batchHashSearch");function oR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(oe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(oe.IDS_MUST_BE_ITERABLE)}a(oR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(oe.FETCH_ATTRIBUTES_REQUIRED):new Error(oe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.SEARCH_VALUE_REQUIRED);if(r?.length>uH)throw new Error(oe.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ri(e,t){return t.length===1&&cH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ri,"setGetWholeRowAttributes");cR.exports={searchAll:lH,searchAllToMap:EH,count:SH,countAll:hH,equals:fH,startsWith:TH,endsWith:mH,contains:iR,searchByHash:OH,setGetWholeRowAttributes:Ri,batchSearchByHash:bH,batchSearchByHashToMap:wH,checkHashExists:IH,iterateDBI:dH,greaterThan:RH,greaterThanEqual:AH,lessThan:pH,lessThanEqual:gH,between:NH}});var Ai=f((cz,ER)=>{var _R=require("lodash"),uR=te(),W=require("joi"),CH=b(),{hdb_schema_table:vt,checkValidTable:lR}=Wt(),{handleHDBError:yH,hdb_errors:LH}=y(),{HTTP_STATUS_CODES:UH}=LH,oz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),MH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),DH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});ER.exports=function(e,t){let r=null;switch(t){case"value":r=uR.validateBySchema(e,MH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(lR("schema",e.schema)),i(lR("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=uR.validateBySchema(e,DH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=CH.checkGlobalSchemaTable(e.schema,e.table);if(n)return yH(new Error,n,UH.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=_R.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!_R.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Ml=f((uz,dR)=>{"use strict";var PH=X(),BH=Ai(),{getSchemaPath:vH}=j();dR.exports=HH;function HH(e){let t=BH(e,"hashes");if(t)throw t;let r=vH(e.schema,e.table);return PH.openEnvironment(r,e.table)}a(HH,"initialize")});var Dl=f((Ez,hR)=>{"use strict";var qH=gs(),GH=Ml();hR.exports=FH;async function FH(e){let t=await GH(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return qH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(FH,"lmdbGetDataByHash")});var ln=f((hz,fR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");fR.exports=Qo});var TR=f((Tz,SR)=>{"use strict";var Sz=ln(),xH=gs(),VH=Ml();SR.exports=kH;async function kH(e){let t=await VH(e),r=global.hdb_schema[e.schema][e.table];return xH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(kH,"lmdbSearchByHash")});var Ht=f((Rz,mR)=>{"use strict";var Jo=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=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");mR.exports=Jo});var Xo=f((pz,OR)=>{"use strict";var Be=gs(),$H=X(),YH=b(),C=Le(),Ns=m(),KH=_s(),RR=it().LMDB_ERRORS_ENUM,{compareKeys:En}=require("ordered-binary"),{getSchemaPath:WH}=j(),Tr=Ns.SEARCH_WILDCARDS;async function QH(e,t,r){let s;e.schema===Ns.SYSTEM_SCHEMA_NAME?s=KH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=NR(e,s.hash_attribute,r,t);return pR(e,n,s.hash_attribute,r)}a(QH,"prepSearch");async function pR(e,t,r,s){let n=WH(e.schema,e.table),i=await $H.openEnvironment(n,e.table),o=gR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(XH(e,r)===!1){let l=e.search_attribute;if(l===r)return s?AR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?AR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Be.batchSearchByHashToMap(c,r,e.get_attributes,u):Be.batchSearchByHash(c,r,e.get_attributes,u)}a(pR,"executeSearch");function gR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=Be.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=Be.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=Be.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=Be.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Be.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Be.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return Be.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Be.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=Be.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=Be.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Be.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=Be.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=Be.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(gR,"searchByType");function JH(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return En(i,s[0])>=0&&En(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>En(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>En(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>En(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>En(n[r],s)<=0;default:return Object.create(null)}}a(JH,"filterByType");function AR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(AR,"createMapFromIterable");function XH(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(XH,"checkToFetchMore");function NR(e,t,r,s){if(YH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Tr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tr[0])<0&&n.indexOf(Tr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Tr.indexOf(i)>=0&&Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Tr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tr[0])||n.includes(Tr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(RR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ns.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ns.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Ns.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RR.UNKNOWN_SEARCH_TYPE)}}a(NR,"createSearchTypeFromSearchObject");OR.exports={executeSearch:pR,createSearchTypeFromSearchObject:NR,prepSearch:QH,searchByType:gR,filterByType:JH}});var bR=f((Oz,IR)=>{"use strict";var Nz=Ht(),ZH=Ai(),zH=b(),jH=m(),eq=Xo();IR.exports=tq;function tq(e,t){if(!zH.isEmpty(t)&&jH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZH(e,"value");if(s)throw s;let n=!0;return eq.prepSearch(e,t,n)}a(tq,"lmdbGetDataByValue")});var dn=f((wz,wR)=>{"use strict";var bz=Ht(),rq=Ai(),sq=b(),nq=m(),iq=Xo();wR.exports=aq;async function aq(e,t){if(!sq.isEmpty(t)&&nq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rq(e,"value");if(s)throw s;return iq.prepSearch(e,t,!1)}a(aq,"lmdbSearchByValue")});var yR=f((Lz,CR)=>{"use strict";var yz=Le(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");CR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var PR=f((Dz,DR)=>{"use strict";var Mz=yR().SearchByConditionsObject,oq=Ht(),cq=Ai(),Pl=gs(),ec=Le(),MR=Xo(),_q=Ul(),uq=require("lodash"),{getSchemaPath:lq}=j(),LR=X(),{handleHDBError:Eq,hdb_errors:dq}=y(),{HTTP_STATUS_CODES:hq}=dq,fq=1e8;DR.exports=Sq;async function Sq(e){let t=cq(e,"conditions");if(t)throw Eq(t,t.message,hq.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=lq(e.schema,e.table),s=await LR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)LR.openDBI(s,u.search_attribute);let i=uq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Pl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=fq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await UR(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(MR.filterByType),E=l.length,d=Pl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>_q.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await UR(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Pl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(Sq,"lmdbSearchByConditions");async function UR(e,t,r,s){let n=new oq(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,MR.searchByType(e,n,i,s).map(o=>o.value)}a(UR,"executeConditionSearch")});var pi=f((Bz,BR)=>{"use strict";var Tq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=Tq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");BR.exports=tc});var Bl=f((Hz,kR)=>{"use strict";var GR=Ht(),FR=pi(),xR=dn(),VR=Ti(),Ke=m(),vR=b(),HR=X(),{getTransactionAuditStorePath:mq,getSchemaPath:Rq}=j(),qR=I();kR.exports=Aq;async function Aq(e){try{if(vR.isEmpty(global.hdb_schema[e.schema])||vR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await pq(e),await gq(e);let t=Rq(e.schema,e.table);try{await HR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=mq(e.schema,e.table);await HR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Aq,"lmdbDropTable");async function pq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await xR(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 FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await VR(n)}a(pq,"deleteAttributesFromSystem");async function gq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await xR(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 FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await VR(n)}catch(i){throw i}}a(gq,"dropTableFromSystem")});var YR=f((Gz,$R)=>{"use strict";var Nq=require("fs-extra"),Oq=Ht(),Iq=ln(),bq=pi(),wq=Bl(),Cq=Ti(),yq=Dl(),Lq=dn(),mr=m(),{getSchemaPath:Uq}=j(),{handleHDBError:Mq,hdb_errors:Dq}=y(),{HDB_ERROR_MSGS:Pq,HTTP_STATUS_CODES:Bq}=Dq;$R.exports=vq;async function vq(e){let t;try{t=await Hq(e.schema);let r=new Oq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Lq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await wq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new bq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Cq(n);let i=Uq(t);await Nq.remove(i)}catch(r){throw r}}a(vq,"lmdbDropSchema");async function Hq(e){let t=new Iq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await yq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Mq(new Error,Pq.SCHEMA_NOT_FOUND(e),Bq.NOT_FOUND,void 0,void 0,!0);return s}a(Hq,"validateDropSchema")});var vl=f((xz,KR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");KR.exports=rc});var QR=f(($z,WR)=>{"use strict";var qq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:Gq}=j(),Hl=Le(),kz=vl();WR.exports=Fq;async function Fq(e){let t;try{let r=Gq(e.schema,e.table);await qq.mkdirp(r),t=await sc.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{sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,Hl.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(Fq,"createTransactionsAuditEnvironment")});var zR=f((Kz,ZR)=>{"use strict";var ql=m(),JR=X(),xq=zs(),{getSystemSchemaPath:Vq,getSchemaPath:kq}=j(),$q=_s(),Yq=ho(),Gl=Eo(),Kq=I(),Wq=QR(),xl=$q.hdb_table,XR=[];for(let e=0;e<xl.attributes.length;e++)XR.push(xl.attributes[e].attribute);ZR.exports=Qq;async function Qq(e,t){let r=kq(t.schema,t.table),s=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Gl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await JR.createEnvironment(r,t.table),e!==void 0){let o=await JR.openEnvironment(Vq(),ql.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await xq.insertRecords(o,xl.hash_attribute,XR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Fl(s),await Fl(n),await Fl(i)}await Wq(t)}catch(o){throw o}}a(Qq,"lmdbCreateTable");async function Fl(e){try{await Yq(e)}catch(t){Kq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Fl,"createAttribute")});var eA=f((Qz,jR)=>{"use strict";var Jq=fo(),Xq=mo(),Zq=Ho(),gi=m(),zq=zs().updateRecords,jq=X(),{getSchemaPath:eG}=j(),tG=fi(),rG=I();jR.exports=sG;async function sG(e){try{let{schema_table:t,attributes:r}=Jq(e);Xq(e,r,t.hash_attribute),e.schema!==gi.SYSTEM_SCHEMA_NAME&&(r.includes(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Zq(e.hdb_auth_header,t,r),n=eG(e.schema,e.table),i=await jq.openEnvironment(n,e.table),o=await zq(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tG(e,o)}catch(c){rG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(sG,"lmdbUpdateRecords")});var rA=f((Xz,tA)=>{"use strict";var nG=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=nG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");tA.exports=nc});var nA=f((jz,sA)=>{"use strict";var zz=rA(),iG=fo(),aG=mo(),oG=Ho(),Ni=m(),cG=zs().upsertRecords,_G=X(),{getSchemaPath:uG}=j(),lG=fi(),EG=I(),{handleHDBError:dG,hdb_errors:hG}=y();sA.exports=fG;async function fG(e){let t;try{t=iG(e)}catch(_){throw dG(_,_.message,hG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;aG(e,s,r.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(s.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await oG(e.hdb_auth_header,r,s),i=uG(e.schema,e.table),o=await _G.openEnvironment(i,e.table),c=await cG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await lG(e,c)}catch(_){EG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(fG,"lmdbUpsertRecords")});var uA=f((t2,_A)=>{"use strict";var SG=Ht(),iA=b(),aA=I(),TG=dn(),oA=m(),mG=yl().deleteRecords,RG=X(),{getSchemaPath:AG}=j(),{promisify:pG}=require("util"),gG=pG(setTimeout),cA=1e4,NG=10;_A.exports=OG;async function OG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(iA.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 SG(e.schema,e.table,oA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await TG(n,oA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw aA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return iA.isEmptyOrZeroLength(s)?(aA.trace("No records found to delete"),{message:"No records found to delete"}):await IG(e,s,t)}a(OG,"lmdbDeleteRecordsBefore");async function IG(e,t,r){let s=AG(e.schema,e.table),n=await RG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=cA){let _=t.slice(o,o+cA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await mG(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 gG(NG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(IG,"chunkDeletes")});var EA=f((s2,lA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");lA.exports=ic});var hA=f((i2,dA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");dA.exports=ac});var TA=f((c2,SA)=>{"use strict";var Vl=X(),{getTransactionAuditStorePath:bG}=j(),o2=EA(),Oi=Le(),wG=b(),fA=hA(),CG=require("util").promisify,yG=CG(setTimeout),LG=1e4,UG=100;SA.exports=MG;async function MG(e){let t=bG(e.schema,e.table),r=await Vl.openEnvironment(t,e.table,!0),s=Vl.listDBIs(r);Vl.initializeDBIs(r,Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new fA;do n=await DG(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 yG(UG);while(n.transactions_deleted>0);return i}a(MG,"deleteAuditLogsBefore");async function DG(e,t){let r=new fA;try{let s=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];wG.isEmpty(c)||(n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>LG)break}return await n,r}catch(s){throw s}}a(DG,"deleteTransactions")});var RA=f((u2,mA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");mA.exports=oc});var pA=f((d2,AA)=>{"use strict";var PG=Ht(),BG=pi(),E2=RA(),Zt=m(),vG=b(),kl=X(),HG=_s(),qG=dn(),GG=Ti(),{getSchemaPath:FG}=j();AA.exports=xG;async function xG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=HG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await kG(e),n=FG(e.schema,e.table),i=await kl.openEnvironment(n,e.table);return t===!0&&await VG(e,i,r.hash_attribute),kl.dropDBI(i,e.attribute),s}a(xG,"lmdbDropAttribute");async function VG(e,t,r){let s=kl.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(VG,"removeAttributeFromAllObjects");async function kG(e){let t=new PG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await qG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(vG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new BG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return GG(i)}a(kG,"dropAttributeFromSystem")});var wA=f((S2,bA)=>{"use strict";var $l=X(),hn=Le(),f2=us(),Yl=m(),gA=b(),{getTransactionAuditStorePath:$G}=j(),YG=gs(),cc=cn(),KG=I();bA.exports=WG;async function WG(e){let t=$G(e.schema,e.table),r=await $l.openEnvironment(t,e.table,!0),s=$l.listDBIs(r);$l.initializeDBIs(r,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return NA(r,e.search_values);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,JG(r,e.search_values,n);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return QG(r,e.search_values);default:return NA(r)}}a(WG,"readAuditLog");function NA(e,t=[0,Date.now()]){gA.isEmpty(t[0])&&(t[0]=0),gA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hn.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 cc,n))}a(NA,"searchTransactionsByTimestamp");function QG(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[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,IA(e,i))}return Object.fromEntries(r)}a(QG,"searchTransactionsByUsername");function JG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=YG.equals(e,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=IA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);OA(_,"records",r,l,o),OA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(JG,"searchTransactionsByHashValues");function OA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(OA,"loopRecords");function IA(e,t){let r=[];try{let s=e.dbis[hn.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 cc,i);r.push(o)}}catch(i){KG.warn(i)}return r}catch(s){throw s}}a(IA,"batchSearchTransactions")});var yA=f((m2,CA)=>{"use strict";var{getSchemaPath:XG}=j(),ZG=X();CA.exports={writeTransaction:zG};async function zG(e,t,r){let s=XG(e,t);return(await ZG.openEnvironment(s,t)).transaction(r)}a(zG,"writeTransaction")});var DA=f((A2,MA)=>{"use strict";var{getSchemaPath:LA}=j(),UA=X();MA.exports={flush:jG,resetReadTxn:eF};async function jG(e,t){return(await UA.openEnvironment(LA(e,t),t.toString())).flushed}a(jG,"flush");async function eF(e,t){try{(await UA.openEnvironment(LA(e,t),t.toString())).resetReadTxn()}catch{}}a(eF,"resetReadTxn")});var vA=f((g2,BA)=>{"use strict";var tF=I(),{handleHDBError:rF}=y(),sF=bu(),nF=ho(),iF=bl(),aF=Wm(),oF=Ti(),cF=Dl(),_F=TR(),uF=bR(),lF=dn(),EF=PR(),dF=YR(),hF=zR(),fF=eA(),SF=nA(),TF=uA(),mF=TA(),RF=Bl(),AF=pA(),pF=wA(),gF=yA(),PA=DA(),_c=class extends sF{async searchByConditions(t){return EF(t)}async getDataByHash(t){return await cF(t)}async searchByHash(t){return await _F(t)}async getDataByValue(t,r){return await uF(t,r)}async searchByValue(t){return await lF(t)}async createSchema(t){return await aF(t)}async dropSchema(t){return await dF(t)}async createTable(t,r){return await hF(t,r)}async dropTable(t){return await RF(t)}async createAttribute(t){return await nF(t)}async createRecords(t){return await iF(t)}async updateRecords(t){return await fF(t)}async upsertRecords(t){try{return await SF(t)}catch(r){throw rF(r,null,null,tF.ERR,r)}}async deleteRecords(t){return await oF(t)}async deleteRecordsBefore(t){return await TF(t)}async dropAttribute(t){return await AF(t)}async deleteAuditLogsBefore(t){return await mF(t)}async readAuditLog(t){return await pF(t)}writeTransaction(t,r,s){return gF.writeTransaction(t,r,s)}flush(t,r){return PA.flush(t,r)}resetReadTxn(t,r){return PA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");BA.exports=_c});var Qt=f((O2,qA)=>{"use strict";var NF=vA(),OF=bu(),IF=v();IF.initSync();var HA;function bF(){return HA instanceof OF?HA:new NF}a(bF,"getBridge");qA.exports=bF()});var VA=f((b2,xA)=>{"use strict";var GA=require("lodash"),Ii=require("mathjs"),wF=require("jsonata"),FA=b();xA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GA.uniqWith(e,GA.isEqual):e,searchJSON:CF,mad:bi.bind(null,Ii.mad),mean:bi.bind(null,Ii.mean),mode:bi.bind(null,Ii.mode),prod:bi.bind(null,Ii.prod),median:bi.bind(null,Ii.median)};function bi(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(bi,"aggregateFunction");function CF(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(FA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FA.isEmpty(this.__ala__.res[r])){let s=wF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(CF,"searchJSON")});var $A=f((C2,kA)=>{"use strict";var le=require("moment"),Kl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;kA.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Kl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Kl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Kl)}});var QA=f((y2,WA)=>{"use strict";var yF=require("@turf/area"),LF=require("@turf/length"),UF=require("@turf/circle"),MF=require("@turf/difference"),DF=require("@turf/distance"),PF=require("@turf/boolean-contains"),BF=require("@turf/boolean-equal"),vF=require("@turf/boolean-disjoint"),HF=require("@turf/helpers"),YA=m(),G=b();WA.exports={geoArea:qF,geoLength:GF,geoCircle:FF,geoDifference:xF,geoDistance:KA,geoNear:VF,geoContains:kF,geoEqual:$F,geoCrosses:YF,geoConvert:KF};var Wl="geo1 is required",Ql="geo2 is required";function qF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),yF.default(e)}a(qF,"geoArea");function GF(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),LF.default(e,{units:t||"kilometers"})}a(GF,"geoLength");function FF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),UF.default(e,t,{units:r||"kilometers"})}a(FF,"geoCircle");function xF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),MF(e,t)}a(xF,"geoDifference");function KA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),DF.default(e,t,{units:r||"kilometers"})}a(KA,"geoDistance");function VF(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return KA(e,t,s)<=r}a(VF,"geoNear");function kF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),PF.default(e,t)}a(kF,"geoContains");function $F(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),BF.default(e,t)}a($F,"geoEqual");function YF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!vF.default(e,t)}a(YF,"geoCrosses");function KF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty(YA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(YA.GEO_CONVERSION_ENUM).join(",")}`);return HF[t](e,r)}a(KF,"geoConvert")});var uc=f((U2,JA)=>{var Os=VA(),Et=$A(),zt=QA();JA.exports=e=>{e.aggr.mad=e.aggr.MAD=Os.mad,e.aggr.mean=e.aggr.MEAN=Os.mean,e.aggr.mode=e.aggr.MODE=Os.mode,e.aggr.prod=e.aggr.PROD=Os.prod,e.aggr.median=e.aggr.MEDIAN=Os.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Os.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Os.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var zA=f((M2,ZA)=>{"use strict";var wi=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var WF=uc(),XA=require("clone"),lc=require("recursive-iterator"),D=I(),B=b(),fn=Qt(),QF=m(),{hdb_errors:JF}=y(),XF="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";WF(Ie);var Ec=class{constructor(t,r){if(B.isEmpty(t))throw D.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(),B.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!B.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(XA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=wi.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(B.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!B.isEmpty(r)&&r.right)if(B.isNotEmptyAndHasValue(r.right.value)){let s=B.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=B.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(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(!B.isEmpty(QF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(B.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(B.isEmptyOrZeroLength(r.left.columnid)||B.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(B.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!B.isEmpty(r.right.value)||!B.isEmpty(r.left.value)?s.add(B.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from)&&B.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&&wi.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(B.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);B.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(B.isEmptyOrZeroLength(this.all_table_attributes)&&!B.isEmptyOrZeroLength(this.columns.columns))return t;if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(XA(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(B.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(XF)>-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=wi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!B.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await fn.getDataByHash(c);for(let E of c.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 D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await fn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!B.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await fn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await fn.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.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 Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.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 d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=wi.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=wi.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 D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await fn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).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();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(JF.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.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,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await fn.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");ZA.exports=Ec});var It=f((P2,ep)=>{"use strict";var ZF=vf();ep.exports={searchByConditions:t0,searchByHash:r0,searchByValue:s0,search:n0};var Jl=Qt(),jA=require("util"),zF=jA.callbackify(Jl.searchByHash),jF=jA.callbackify(Jl.searchByValue),e0=zA();async function t0(e){return Jl.searchByConditions(e)}a(t0,"searchByConditions");function r0(e,t){try{zF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(r0,"searchByHash");function s0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),jF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(s0,"searchByValue");function n0(e,t){try{let r=new ZF(e);r.validate(),new e0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(n0,"search")});var Rs=f((v2,cp)=>{"use strict";var rp=It(),Kr=I(),sp=_o(),i0=require("lodash"),a0=Vr(),np=b(),{promisify:ip}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:o0}=y(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:ap}=o0,c0=v();c0.initSync();var tp=X(),_0=gs(),{getSchemaPath:u0}=j(),Ci=ip(rp.searchByValue),l0=ip(rp.searchByHash),Sn="name",op="hash_attribute",Xl="schema",E0="schema_table",d0="attribute";cp.exports={describeAll:h0,describeTable:fc,describeSchema:S0};async function h0(e){try{let t=np.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Sn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[Sn]},i=await Ci(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[op,z.ID_ATTRIBUTE_STRING,Sn,Xl]},u=await Ci(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(h0,"describeAll");async function fc(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=sp.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Sn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Ci(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),ap.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:E0,search_value:r+"."+s,get_attributes:[d0]},E=Array.from(await Ci(l));E=i0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=f0(n)),i.attributes=E,i.clustering_stream_name=a0.createNatsTableStreamName(u.schema,u.name);try{let d=u0(i.schema,i.name),h=await tp.openEnvironment(d,i.name),T=tp.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of _0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function f0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(f0,"getAttrsByPerms");async function S0(e){let t=sp.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:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Xl,search_value:s,hash_values:[],get_attributes:[op,z.ID_ATTRIBUTE_STRING,Sn,Xl]},i=Array.from(await Ci(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Sn]},c=Array.from(await l0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),ap.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),np.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(S0,"describeSchema")});var Gr=f((q2,dp)=>{var Tn=_s(),{callbackify:lp,promisify:T0}=require("util");dp.exports={setSchemaDataToGlobal:_p,getTableSchema:A0,getSystemSchema:g0,setSchemaDataToGlobalAsync:T0(_p)};var Ep=Rs(),m0=lp(Ep.describeAll),R0=lp(Ep.describeTable);function _p(e){m0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Tn),global.hdb_schema=r,e(null,null)})}a(_p,"setSchemaDataToGlobal");function up(e,t){return e==="system"?Tn[t]:global.hdb_schema[e][t]}a(up,"returnSchema");function A0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?p0(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,up(e,t))}):r(null,up(e,t))}a(A0,"getTableSchema");function p0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Tn:global.hdb_schema={system:Tn},r();return}R0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Tn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(p0,"setTableDataToGlobal");function g0(){return Tn}a(g0,"getSystemSchema")});var Sc=f((F2,hp)=>{"use strict";var N0=Qt();hp.exports={writeTransaction:O0};function O0(e,t,r){return N0.writeTransaction(e,t,r)}a(O0,"writeTransaction")});var Zl=f((V2,I0)=>{I0.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 ve=f((Z2,Mp)=>{"use strict";var pe=v();pe.initSync();var b0=require("fs-extra"),w0=require("semver"),Di=require("path"),{monotonicFactory:C0}=require("ulidx"),rE=C0(),y0=require("util"),Sp=require("child_process"),L0=y0.promisify(Sp.exec),U0=Sp.spawn,V=ue(),Q=m(),Tc=b(),Wr=I(),mc=Vr(),M0=Sc(),yi=lr(),{encode:eE,decode:sE}=require("msgpackr"),{isEmpty:Is}=Tc,Tp=Sr(),mp=12e10,{connect:D0,StorageType:Rp,RetentionPolicy:Ap,AckPolicy:nE,DeliverPolicy:Pi,DiscardPolicy:P0,NatsConnection:k2,JetStreamManager:$2,JetStreamClient:Y2,StringCodec:K2,JSONCodec:B0,createInbox:iE,StreamSource:W2,headers:v0,toJsMsg:pp,nuid:Q2,JetStreamOptions:J2,ErrorCode:fp,nanos:X2}=require("nats"),{PACKAGE_ROOT:H0}=m(),q0=Zl(),gp=B0(),G0="clustering",F0=q0.engines[V.NATS_SERVER_NAME],x0=Di.join(H0,"dependencies"),tE=Di.join(x0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),zl,jl,Li,Ui,Mi,Gt;Mp.exports={runCommand:Np,checkNATSServerInstalled:V0,createConnection:aE,getConnection:Rc,getJetStreamManager:Bi,getJetStream:Op,getNATSReferences:dt,getServerList:$0,createLocalStream:oE,listStreams:Ip,deleteLocalStream:Y0,getServerConfig:vi,listRemoteStreams:K0,viewStream:W0,viewStreamIterator:Q0,publishToStream:J0,createWorkQueueStream:X0,addSourceToWorkStream:wp,request:Z0,removeSourceFromWorkStream:yp,reloadNATS:cE,reloadNATSHub:z0,reloadNATSLeaf:j0,extractServerName:Cp,requestErrorHandler:ex,updateWorkStream:tx,createLocalTableStream:Lp,createTableStreams:rx,purgeTableStream:Up,purgeSchemaTableStreams:sx,getStreamInfo:nx,updateLocalStreams:ax,closeConnection:k0,getJsmServerName:Hi,addNatsMsgHeader:bp};async function Np(e,t=void 0){let{stdout:r,stderr:s}=await L0(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
7
  `,"")}a(Np,"runCommand");async function V0(){try{await b0.access(tE)}catch{return!1}let e=await Np(`${tE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return w0.eq(t,F0)}a(V0,"checkNATSServerInstalled");async function aE(e,t,r,s=!0,n="127.0.0.1"){return D0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(aE,"createConnection");async function k0(){Gt&&(await Gt.drain(),Gt=void 0)}a(k0,"closeConnection");async function Rc(){if(!Gt){let e=await Tp.getClusterUser();if(Is(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Gt=await aE(t,e.username,e.decrypt_hash)}return Gt}a(Rc,"getConnection");async function Bi(){if(Ui)return Ui;Is(Gt)&&await Rc();let{domain:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Is(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ui=await Gt.jetstreamManager({domain:e}),Ui}a(Bi,"getJetStreamManager");async function Op(){if(Mi)return Mi;Is(Gt)&&await Rc();let{domain:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Is(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Mi=Gt.jetstream({domain:e}),Mi}a(Op,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Ui||await Bi(),r=Mi||await Op();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function $0(e){let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Tp.getClusterUser(),n=await aE(t,r,s),i=iE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=gp.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=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 Tc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a($0,"getServerList");async function oE(e,t){let{jsm:r}=await dt(),s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Rp.File,retention:Ap.Limits,subjects:t,discard:P0.Old,duplicate_window:mp,max_msgs:n,max_bytes:i,max_age:s})}a(oE,"createLocalStream");async function Ip(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Ip,"listStreams");async function Y0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(Y0,"deleteLocalStream");async function K0(e){let{connection:t}=await dt(),r=[],s=iE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(gp.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(K0,"listRemoteStreams");async function W0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=rE(),o=[],c={ack_policy:nE.None,durable_name:i,deliver_subject:i,deliver_policy:Pi.All};t&&(c.deliver_policy=Pi.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=pp(l),d=sE(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(h.origin=E.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(W0,"viewStream");async function*Q0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=rE(),o={ack_policy:nE.None,durable_name:i,deliver_subject:i,deliver_policy:Pi.All};t&&(o.deliver_policy=Pi.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=pp(u),E=sE(l.data);E[0]||(E=[E]);for(let d of E){let h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(h.origin=l.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),yield h}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}a(Q0,"viewStreamIterator");async function J0(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;pe.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=bp(s,r);let{js:i}=await dt(),o=await Hi(),c=`${e}.${o}`;try{Wr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,eE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await oE(t,[c]),n&&await i.publish(c,eE(s),{headers:r});else throw _}}a(J0,"publishToStream");function bp(e,t){t===void 0&&(t=v0());let r=pe.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Tc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${rE()}`;t.append(V.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(V.MSG_HEADERS.ORIGIN)||t.append(V.MSG_HEADERS.ORIGIN,r),t}a(bp,"addNatsMsgHeader");function vi(e){e=e.toLowerCase();let t=Di.join(pe.get(Q.CONFIG_PARAMS.ROOTPATH),G0);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Is(jl)&&(jl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Di.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),jl;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Is(zl)&&(zl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Di.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),zl;Wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(vi,"getServerConfig");async function X0(e){let{jsm:t}=await dt(),r=await Hi();try{await t.streams.add({name:e.stream_name,storage:Rp.File,retention:Ap.Workqueue,duplicate_window:mp,subjects:[`${V.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:nE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Pi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(X0,"createWorkQueueStream");async function wp(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=Cp(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=mc.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,g=n.config.sources.length;R<g;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let T={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(wp,"addSourceToWorkStream");function Cp(e){return e.split(".")[1]}a(Cp,"extractServerName");async function yp(e,t,r){let{schema:s,table:n}=r,i=mc.createNatsTableStreamName(s,n),{jsm:o}=await dt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config)}a(yp,"removeSourceFromWorkStream");async function Z0(e,t,r=2e3,s=iE()){if(!Tc.isObject(t))throw new Error("data param must be an object");let n=eE(t),{connection:i}=await dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return sE(c.data)}a(Z0,"request");function cE(e){return new Promise(async(t,r)=>{let s=U0(tE,["--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(cE,"reloadNATS");async function z0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cE(e)}a(z0,"reloadNATSHub");async function j0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cE(e)}a(j0,"reloadNATSLeaf");function ex(e,t,r){let s;switch(e.code){case fp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case fp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(ex,"requestErrorHandler");async function tx(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await M0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await wp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await yp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(tx,"updateWorkStream");async function Lp(e,t){let r=mc.createNatsTableStreamName(e,t),s=await Hi(),n=ix(e,t,s);await oE(r,[n])}a(Lp,"createLocalTableStream");async function rx(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Lp(s,n)}}a(rx,"createTableStreams");async function Up(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=mc.createNatsTableStreamName(e,t),{jsm:s}=await dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Wr.warn(r);else throw r}}a(Up,"purgeTableStream");async function sx(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Up(e,t[r])}a(sx,"purgeSchemaTableStreams");async function nx(e){return(await Bi()).streams.info(e)}a(nx,"getStreamInfo");function ix(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ix,"createSubjectName");async function Hi(){if(Li)return Li;if(Li=(await Bi())?.nc?.info?.server_name,Li===void 0)throw new Error("Unable to get jetstream manager server name");return Li}a(Hi,"getJsmServerName");async function ax(){let e=await Bi(),t=await Hi(),r=await Ip();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=ox(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Wr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");Wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(ax,"updateLocalStreams");function ox(e){let{config:t}=e,r=!1;if(t.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=pe.get(Q.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(ox,"updateStreamLimits")});var _E=f((j2,Dp)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Dp.exports=Ac});var qi=f((t4,Pp)=>{"use strict";var cx=b(),uE=v(),Qr=m(),_x=ue(),ux=ve(),jt=I(),lx=_E(),Ex=Vr();uE.initSync();Pp.exports={postOperationHandler:hx};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=dx(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await ux.publishToStream(`${_x.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,Ex.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function dx(e,t,r){if(cx.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Qr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(dx,"convertCRUDOperationToTransaction");async function hx(e,t,r){if(!uE.get(Qr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;jt.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=uE.get(Qr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new lx(t.txn_time,s,n);switch(e.operation){case Qr.OPERATIONS_ENUM.INSERT:try{await pc(e,t.inserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for insert."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.DELETE:try{await pc(e,t.deleted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for delete."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPDATE:try{await pc(e,t.update_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for update."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPSERT:try{await pc(e,t.upserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for upsert."),jt.error(o)}break;default:break}return t}a(hx,"postOperationHandler")});var Gp=f((s4,qp)=>{"use strict";var fx=It(),Sx=Gr(),Bp=I(),vp=Ot(),Tx=Sc(),mx=require("clone"),EE=require("alasql"),Rx=uc(),Hp=require("util"),Ax=Hp.promisify(Sx.getTableSchema),px=Hp.promisify(fx.search),gx=m(),lE=b(),Nx=qi();Rx(EE);qp.exports={update:Ix};var Ox="There was a problem performing this update. Please check the logs and try again.";async function Ix({statement:e,hdb_user:t}){let r=await Ax(e.table.databaseid,e.table.tableid),s=bx(e.columns);lE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=mx(n),c=lE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=EE.parse(_).statements[0],l=await Tx.writeTransaction(r.schema,r.name,async()=>{let E=await px(u),d=wx(s,E);return Cx(o,d,t)});return await vp.flush({schema:r.schema,table:r.name}),l}a(Ix,"update");function bx(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=EE.compile(`SELECT ${r.expression.toString()} AS [${gx.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Bp.error(t),new Error(Ox)}}a(bx,"createUpdateRecord");function wx(e,t){return lE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(wx,"buildUpdateRecords");async function Cx(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vp.update(s);await Nx.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){Bp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Cx,"updateRecords")});var xp=f((i4,Fp)=>{var yx=require("alasql"),Lx=It(),Ux=I(),Mx=Qt(),hE=require("util"),dE=b(),Dx=m(),Px=Gr(),Bx=Sc(),vx=qi(),Hx=Ot(),qx="record",Gx="successfully deleted",Fx=hE.callbackify($x),xx=hE.promisify(Lx.search),Vx=hE.promisify(Px.getTableSchema);Fp.exports={convertDelete:Fx};function kx(e){return`${e.deleted_hashes.length} ${qx}${e.deleted_hashes.length===1?"":"s"} ${Gx}`}a(kx,"generateReturnMessage");async function $x({statement:e,hdb_user:t}){let r=await Vx(e.table.databaseid,e.table.tableid);dE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=dE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=yx.parse(o).statements[0],_={operation:Dx.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Bx.writeTransaction(r.schema,r.name,async()=>(_.records=await xx(c),Mx.deleteRecords(_)));return await Hx.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await vx.postOperationHandler(_,u),dE.isEmptyOrZeroLength(u.message)&&(u.message=kx(u)),delete u.txn_time,u}catch(u){throw Ux.error(u),u.hdb_code?u.message:u}}a($x,"convertDelete")});var $p=f((o4,kp)=>{"use strict";var SE=Rs(),{hdb_errors:fE}=y();kp.exports={checkSchemaExists:Vp,checkSchemaTableExists:Yx,schema_describe:SE};async function Vp(e){if(!global.hdb_schema[e])try{let t=await SE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return fE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(Vp,"checkSchemaExists");async function Yx(e,t){let r=await Vp(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await SE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(Yx,"checkSchemaTableExists")});var Nc=f((u4,Qp)=>{"use strict";var mn=_o(),bs=$p(),Kx=I(),Wx=require("uuid").v4,_4=require("clone"),Rn=an(),ws=m(),Qx=require("util"),Cs=Qt(),{handleHDBError:We,hdb_errors:Jx}=y(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=Jx,{SchemaEventMsg:An}=kr(),Yp=ve();Qp.exports={createSchema:Xx,createSchemaStructure:Kp,createTable:Zx,createTableStructure:Wp,createAttribute:rV,dropSchema:zx,dropTable:jx,dropAttribute:eV};async function Xx(e){try{let t=await Kp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(Xx,"createSchema");async function Kp(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);if(!await bs.checkSchemaExists(e.schema))throw We(new Error,gc.SCHEMA_EXISTS_ERR(e.schema),Qe.BAD_REQUEST,ws.LOG_LEVELS.ERROR,gc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Cs.createSchema(e),`schema '${e.schema}' successfully created`}a(Kp,"createSchemaStructure");async function Zx(e){let t=await Wp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(Zx,"createTable");async function Wp(e){let t=mn.create_table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);mn.validateTableResidence(e.residence);let r=await bs.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(!await bs.checkSchemaTableExists(e.schema,e.table))throw We(new Error,gc.TABLE_EXISTS_ERR(e.schema,e.table),Qe.BAD_REQUEST,ws.LOG_LEVELS.ERROR,gc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Wx(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Cs.createTable(n,e);else throw We(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qe.BAD_REQUEST);else await Cs.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Wp,"createTableStructure");async function zx(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);let s=await bs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Cs.dropSchema(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Yp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(zx,"dropSchema");async function jx(e){let t=mn.table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);return await Cs.dropTable(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),await Yp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(jx,"dropTable");async function eV(e){let t=mn.attribute_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw We(new Error,"You cannot drop a hash attribute",Qe.BAD_REQUEST,void 0,void 0,!0);if(ws.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw We(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qe.BAD_REQUEST,void 0,void 0,!0);try{return await Cs.dropAttribute(e),tV(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Kx.error(`Got an error deleting attribute ${Qx.inspect(e)}.`),s}}a(eV,"dropAttribute");function tV(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(tV,"dropAttributeFromGlobal");async function rV(e){return await Cs.createAttribute(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(rV,"createAttribute")});var Xp=f((E4,Jp)=>{"use strict";var{OPERATIONS_ENUM:sV}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=sV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Jp.exports=Oc});var TE=f((f4,tg)=>{"use strict";var nV=Qt(),h4=Xp(),Ic=b(),bc=m(),iV=v(),{handleHDBError:Zp,hdb_errors:aV}=y(),{HDB_ERROR_MSGS:zp,HTTP_STATUS_CODES:jp}=aV,oV=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),eg="To use this operation audit log must be enabled in harperdb-config.yaml";tg.exports=cV;async function cV(e){if(Ic.isEmpty(e.schema))throw new Error(zp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(zp.TABLE_REQUIRED_ERR);if(!iV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Zp(new Error,eg,jp.BAD_REQUEST,bc.LOG_LEVELS.ERROR,eg,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw Zp(new Error,t,jp.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&oV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await nV.readAuditLog(e)}a(cV,"readAuditLog")});var og=f((T4,ag)=>{var Jr=require("validate.js"),sg=te(),pn=m(),{handleHDBError:_V,hdb_errors:uV}=y(),{HDB_ERROR_MSGS:ce,HTTP_STATUS_CODES:lV}=uV,mE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),EV={STRUCTURE_USER:"structure_user"},rg=Object.values(pn.ROLE_TYPES_ENUM),dV="attribute_permissions",hV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,fV=[dV,...Object.values(gn)],ng=[gn.READ,gn.INSERT,gn.UPDATE],SV=[hV,...ng];function TV(e){let t=mE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ig(e,t)}a(TV,"addRoleValidation");function mV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ig(e,t)}a(mV,"alterRoleValidation");function RV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,sg.validateObject(e,t)}a(RV,"dropRoleValidation");var AV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ig(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)AV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(ce.INVALID_ROLE_JSON_KEYS(n),r);let i=sg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=pV(e);o&&Ee(o,r),rg.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&Ee(ce.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(rg.indexOf(o)<0){if(o===EV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||Ee(ce.SCHEMA_NOT_FOUND(E),r)}continue}Ee(ce.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Ee(ce.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){Ee(ce.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{fV.includes(l)||Ee(ce.INVALID_PERM_KEY(l),r,o,_)}),Object.values(gn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||Ee(ce.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):Ee(ce.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){Ee(ce.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{Ee(ce.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!SV.includes(R)&&R!==gn.DELETE&&Ee(ce.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(h.attribute_name)){Ee(ce.ATTR_PERM_MISSING_NAME,r,o,_);continue}let T=h.attribute_name;if(!l.includes(T)){Ee(ce.INVALID_ATTRIBUTE_IN_PERMS(T),r,o,_);continue}ng.forEach(R=>{Jr.isDefined(h[R])?Jr.isBoolean(h[R])||Ee(ce.ATTR_PERM_NOT_BOOLEAN(R,T),r,o,_):Ee(ce.ATTR_PERM_MISSING(R,T),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;Ee(ce.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return gV(r)}a(ig,"customValidate");ag.exports={addRoleValidation:TV,alterRoleValidation:mV,dropRoleValidation:RV};function pV(e){let{operation:t,permission:r}=e;if(t===pn.OPERATIONS_ENUM.ADD_ROLE||t===pn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return ce.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pn.ROLE_TYPES_ENUM.SUPER_USER:pn.ROLE_TYPES_ENUM.CLUSTER_USER;return ce.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(pV,"validateNoSUPerms");function gV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ce.ROLE_PERMS_ERROR,...e};return _V(new Error,s,lV.BAD_REQUEST)}else return null}a(gV,"generateRolePermResponse");function Ee(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Ee,"addPermError")});var bE=f((R4,dg)=>{"use strict";var cg=Ot(),_g=It(),NV=Ts(),pE=og(),gE=an(),OV=require("uuid").v4,NE=require("util"),IV=tn(),Rr=m(),ug=b(),OE=NE.promisify(_g.searchByValue),bV=NE.promisify(_g.searchByHash),wV=NE.promisify(NV.delete),CV=Ht(),yV=ln(),{hdb_errors:LV,handleHDBError:Gi}=y(),{HDB_ERROR_MSGS:lg,HTTP_STATUS_CODES:RE}=LV,{UserEventMsg:IE}=kr();dg.exports={addRole:UV,alterRole:DV,dropRole:PV,listRoles:Eg};function AE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(AE,"scrubRoleDetails");async function UV(e){let t=pE.addRoleValidation(e);if(t)throw t;if(!(await IV.getLicense()).enterprise){let o=await Eg();if(MV(e,o))throw new Error(`Your current license only supports ${Rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Rr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Rr.BASIC_LICENSE_MAX_NON_CU_ROLES+Rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Rr.SUPPORT_HELP_MSG}`)}e=AE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await OE(s)||[])}catch(o){throw Gi(o)}if(n&&n.length>0)throw Gi(new Error,lg.ROLE_ALREADY_EXISTS(e.role),RE.CONFLICT,void 0,void 0,!0);e.id||(e.id=OV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await cg.insert(i),gE.signalUserChange(new IE(process.pid)),e=AE(e),e}a(UV,"addRole");function MV(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!ug.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(MV,"checkClusterUserRole");async function DV(e){let t=pE.alterRoleValidation(e);if(t)throw t;e=AE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await cg.update(r)}catch(s){throw Gi(s)}return gE.signalUserChange(new IE(process.pid)),e}a(DV,"alterRole");async function PV(e){let t=pE.dropRoleValidation(e);if(t)throw Gi(new Error,t,RE.BAD_REQUEST,void 0,void 0,!0);let r=new yV(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await bV(r));if(s.length===0)throw Gi(new Error,lg.ROLE_NOT_FOUND,RE.NOT_FOUND,void 0,void 0,!0);let n=new CV(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await OE(n)),o=!1;if(ug.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await wV(c),gE.signalUserChange(new IE(process.pid)),`${s[0].role} successfully deleted`}a(PV,"dropRole");async function Eg(){return OE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Eg,"listRoles")});var Tg=f((p4,Sg)=>{"use strict";var BV=v(),Xr=require("joi"),vV=te(),hg=require("moment"),HV=require("fs-extra"),wE=require("path"),qV=require("lodash"),Fi=m(),{LOG_LEVELS:ys}=m(),GV="YYYY-MM-DD hh:mm:ss",FV=wE.resolve(__dirname,"../logs");Sg.exports=function(e){return vV.validateBySchema(e,xV)};var xV=Xr.object({from:Xr.custom(fg),until:Xr.custom(fg),level:Xr.valid(ys.NOTIFY,ys.FATAL,ys.ERROR,ys.WARN,ys.INFO,ys.DEBUG,ys.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom(VV)});function fg(e,t){if(hg(e,hg.ISO_8601).format(GV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(fg,"validateDatetime");function VV(e,t){if(qV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=BV.get(Fi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Fi.LOG_NAMES.HDB:e,i=n===Fi.LOG_NAMES.INSTALL?wE.join(FV,Fi.LOG_NAMES.INSTALL):wE.join(s,n);return HV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(VV,"validateReadLogPath")});var yE=f((N4,mg)=>{"use strict";var wc=m(),kV=I(),$V=v(),YV=Tg(),CE=require("path"),KV=require("fs-extra"),{once:WV}=require("events"),{handleHDBError:QV,hdb_errors:JV}=y(),{PACKAGE_ROOT:XV}=m(),ZV=CE.join(XV,"logs"),zV=1e3;mg.exports=jV;async function jV(e){let t=YV(e);if(t)throw QV(t,t.message,JV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=$V.get(wc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?wc.LOG_NAMES.HDB:e.log_name,n=s===wc.LOG_NAMES.INSTALL?CE.join(ZV,wc.LOG_NAMES.INSTALL):CE.join(r,s),i=KV.createReadStream(n);i.on("error",U=>{kV.error(U)});let o=e.level!==void 0,c=o?e.level:void 0,_=e.from!==void 0,u=_?new Date(e.from):void 0,l=e.until!==void 0,E=l?new Date(e.until):void 0,d=e.limit===void 0?zV:e.limit,h=e.order===void 0?void 0:e.order,T=e.start===void 0?0:e.start,R=T+d,g=0,H=[],x="",q;i.on("data",U=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=x+U;let _e=0,ae;for(;(ae=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(_e,ae.index),ye(q));let[Hn,os,Cr]=ae,Oa=Cr.split("] ["),pw=Oa[0],gw=Oa[1];Oa.splice(0,2),q={timestamp:os,thread:pw,level:gw,tags:Oa,message:""},_e=ae.index+Hn.length}x=U.slice(_e)}),i.on("end",U=>{i.destroyed||q&&(q.message=x.trim(),ye(q))}),i.resume();function ye(U){let $,_e,ae;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),_e=new Date(u),ae=new Date(E),U.level===c&&$>=_e&&$<=ae&&g<T?g++:U.level===c&&$>=_e&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(U.timestamp),_e=new Date(u),U.level===c&&$>=_e&&g<T?g++:U.level===c&&$>=_e&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(U.timestamp),ae=new Date(E),U.level===c&&$<=ae&&g<T?g++:U.level===c&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),_e=new Date(u),ae=new Date(E),$>=_e&&$<=ae&&g<T?g++:$>=_e&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case o:U.level===c&&g<T?g++:U.level===c&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(U.timestamp),_e=new Date(u),$>=_e&&g<T?g++:$>=_e&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(U.timestamp),ae=new Date(E),$<=ae&&g<T?g++:$<=ae&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;default:g<T?g++:(Zr(U,h,H),g++,g===R&&i.destroy())}}return a(ye,"onLogMessage"),await WV(i,"close"),H}a(jV,"readLog");function Zr(e,t,r){t==="desc"?ek(e,r):t==="asc"?tk(e,r):r.push(e)}a(Zr,"pushLineToResult");function ek(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(ek,"insertDescending");function tk(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(tk,"insertAscending")});var yc=f((w4,pg)=>{"use strict";var LE=require("joi"),{string:Cc,boolean:Rg,date:rk}=LE.types(),sk=te(),{validateSchemaExists:I4,validateTableExists:b4,validateSchemaName:nk}=Wt(),ik=m(),ak=ue(),ok=v(),ck=Cc.invalid(ok.get(ik.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ak.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(),Ag={operation:Cc.valid("add_node","update_node"),node_name:ck,subscriptions:LE.array().items({table:Cc.required(),schema:Cc.custom(nk).required(),subscribe:Rg.required(),publish:Rg.required().custom(uk),start_time:rk.iso()}).min(1).required()};function _k(e){return sk.validateBySchema(e,LE.object(Ag))}a(_k,"addUpdateNodeValidator");function uk(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(uk,"checkForFalsy");pg.exports={addUpdateNodeValidator:_k,validation_schema:Ag}});var Ng=f((y4,gg)=>{var lk=te(),Ek={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};gg.exports=function(e){return lk.validateObject(e,Ek)}});var UE=f((L4,Og)=>{"use strict";var dk=m().OPERATIONS_ENUM,Lc=class{constructor(t,r,s,n=void 0){this.operation=dk.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Lc,"UpdateObject");Og.exports=Lc});var bg=f((M4,Ig)=>{"use strict";var hk={OPERATION:"operation",REFRESH:"refresh"},Uc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Uc,"JWTTokens");var Mc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Mc,"JWTRSAKeys");Ig.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:hk,JWTRSAKeys:Mc}});var vc=f((P4,Lg)=>{"use strict";var Vi=require("jsonwebtoken"),ME=require("fs-extra"),DE=b(),bt=m(),{handleHDBError:Je,hdb_errors:fk}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=fk,xi=I(),wg=Ao(),vE=Sr(),Sk=Ot().update,Tk=UE(),mk=an(),{UserEventMsg:Rk}=kr(),zr=v();zr.initSync();var PE=require("path"),{JWTTokens:Ak,JWTRSAKeys:pk,TOKEN_TYPE_ENUM:Dc}=bg(),gk=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Nk=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",BE;Lg.exports={createTokens:Ok,validateOperationToken:bk,refreshOperationToken:Ik,validateRefreshToken:yg};async function Ok(e){if(DE.isEmpty(e)||typeof e!="object")throw Je(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(e.username))throw Je(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(e.password))throw Je(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vE.findAndValidateUser(e.username,e.password),!t)throw Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw xi.error(d),Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bc(),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 Cg(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Nk,algorithm:Pc,subject:Dc.REFRESH}),_=wg.hash(c),u=new Tk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await Sk(u)}catch(d){xi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Je(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return mk.signalUserChange(new Rk(process.pid)),new Ak(o,c)}a(Ok,"createTokens");async function Cg(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:gk,algorithm:Pc,subject:Dc.OPERATION})}a(Cg,"signOperationToken");async function Bc(){if(BE===void 0)try{let e=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await ME.readFile(e)).toString(),n=(await ME.readFile(t)).toString(),i=(await ME.readFile(r)).toString();BE=new pk(i,n,s)}catch(e){throw xi.error(e),Je(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return BE}a(Bc,"getJWTRSAKeys");async function Ik(e){if(!e)throw Je(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Je(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await yg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await Cg({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Ik,"refreshOperationToken");async function bk(e){try{let t=await Bc(),r=await Vi.verify(e,t.public_key,{algorithms:Pc,subject:Dc.OPERATION});return await vE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw xi.warn(t),t.name&&t.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(bk,"validateOperationToken");async function yg(e){let t;try{let r=await Bc(),s=await Vi.verify(e,r.public_key,{algorithms:Pc,subject:Dc.REFRESH});t=await vE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw xi.warn(r),r.name&&r.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!wg.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(yg,"validateRefreshToken")});var Pg=f((H4,Dg)=>{"use strict";var wk=Ng(),Nn=require("passport"),Ck=require("passport-local").Strategy,yk=require("passport-http").BasicStrategy,Lk=require("util"),Uk=Sr(),Mg=Lk.callbackify(Uk.findAndValidateUser),v4=it(),Mk=m(),Ug=vc();Nn.use(new Ck(function(e,t,r){Mg(e,t,r)}));Nn.use(new yk(function(e,t,r){Mg(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function Dk(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,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Nn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===Mk.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Ug.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Ug.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Dk,"authorize");function Pk(e,t){let r=wk(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 c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Pk,"checkPermissions");Dg.exports={authorize:Dk,checkPermissions:Pk}});var On=f((G4,Bg)=>{"use strict";var Hc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hc,"Node");var qc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qc,"NodeSubscription");Bg.exports={Node:Hc,NodeSubscription:qc}});var Hg=f((x4,vg)=>{"use strict";var Bk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=Bk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");vg.exports=Gc});var ki=f((k4,qg)=>{"use strict";var Fc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Fc,"RemotePayloadObject");var xc=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(xc,"RemotePayloadSubscription");qg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var Fg=f((Y4,Gg)=>{"use strict";var Vc=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(Vc,"TableSizeObject");Gg.exports=Vc});var Vg=f((W4,xg)=>{"use strict";var vk=Fg(),Hk=Le(),In=X(),qk=I(),{getSchemaPath:Gk,getTransactionAuditStorePath:Fk}=j();xg.exports=xk;async function xk(e){let t=new vk;try{let r=Gk(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=Fk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,Hk.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await In.environmentDataSize(r,e.name),u=await In.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){qk.warn(`unable to stat table dbi due to ${r}`)}return t}a(xk,"lmdbGetTableSize")});var $g=f((J4,kg)=>{"use strict";var kc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(kc,"SystemInformationObject");kg.exports=kc});var bn=f((Z4,Qg)=>{"use strict";var Vk=require("fs-extra"),kk=require("path"),He=require("systeminformation"),jr=I(),HE=m(),$k=Vg(),Kg=Rs(),{getThreadInfo:Yg}=rn(),Wg=v();Wg.initSync();var Yk=$g(),{openEnvironment:Kk}=X(),{getSchemaPath:Wk}=j(),$c;Qg.exports={getHDBProcessInfo:xE,getNetworkInfo:kE,getDiskInfo:VE,getMemoryInfo:FE,getCPUInfo:GE,getTimeInfo:qE,getSystemInformation:$E,systemInformation:Qk,getTableSize:YE,getMetrics:KE};function qE(){return He.time()}a(qE,"getTimeInfo");async function GE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await He.cpu();l.cpu_speed=await He.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:T,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await He.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:ye,raw_load_idle:U,raw_load_irq:$,raw_load_nice:_e,raw_load_system:ae,raw_load_user:Hn,...os}=q;x.cpus.push(os)}),l.current_load=x,l}catch(e){return jr.error(`error in getCPUInfo: ${e}`),{}}}a(GE,"getCPUInfo");async function FE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await He.mem();return Object.assign(n,process.memoryUsage())}catch(e){return jr.error(`error in getMemoryInfo: ${e}`),{}}}a(FE,"getMemoryInfo");async function xE(){let e={core:[],clustering:[]};try{let t=await He.processes(),r;try{r=Number.parseInt(await Vk.readFile(kk.join(Wg.get(HE.CONFIG_PARAMS.ROOTPATH),HE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===HE.NODE_ERROR_CODES.ENOENT)jr.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 jr.error(`error in getHDBProcessInfo: ${t}`),e}}a(xE,"getHDBProcessInfo");async function VE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await He.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await He.fsStats();return e.read_write=u,e.size=await He.fsSize(),e}catch(t){return jr.error(`error in getDiskInfo: ${t}`),e}}a(VE,"getDiskInfo");async function kE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await He.networkInterfaceDefault(),e.latency=await He.inetChecksite("google.com"),(await He.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await He.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return jr.error(`error in getNetworkInfo: ${t}`),e}}a(kE,"getNetworkInfo");async function $E(){if($c!==void 0)return $c;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await He.osInfo();e=c;let _=await He.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,$c=e,$c}catch(t){return jr.error(`error in getSystemInformation: ${t}`),e}}a($E,"getSystemInformation");async function YE(){let e=[],t=await Kg.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await $k(s));return e}a(YE,"getTableSize");async function KE(){let e=await Kg.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Wk(r,n),c=(await Kk(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){jr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(KE,"getMetrics");async function Qk(e){let t=new Yk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $E(),t.time=qE(),t.cpu=await GE(),t.memory=await FE(),t.disk=await VE(),t.network=await kE(),t.harperdb_processes=await xE(),t.table_size=await YE(),t.metrics=await KE(),t.threads=await Yg(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $E();break;case"time":t.time=qE();break;case"cpu":t.cpu=await GE();break;case"memory":t.memory=await FE();break;case"disk":t.disk=await VE();break;case"network":t.network=await kE();break;case"harperdb_processes":t.harperdb_processes=await xE();break;case"table_size":t.table_size=await YE();break;case"database_metrics":case"metrics":t.metrics=await KE();break;case"threads":t.threads=await Yg();break;default:break}return t}a(Qk,"systemInformation")});var WE=f((t5,Jg)=>{"use strict";var j4=require("fs-extra"),e5=I();Jg.exports={version:Jk,printVersion:Zk,nodeVersion:Xk};var es=Zl();function Jk(){if(es)return es.version}a(Jk,"version");function Xk(){if(es&&es.engines&&es.engines["preferred-node"])return es.engines["preferred-node"]}a(Xk,"nodeVersion");function Zk(){es&&console.log(`HarperDB Version ${es.version}`)}a(Zk,"printVersion")});var Ar=f((i5,jg)=>{"use strict";var zk=Ot(),QE=b(),JE=require("util"),Ls=m(),Xg=v();Xg.initSync();var jk=Pg(),Zg=It(),{Node:s5,NodeSubscription:n5}=On(),e$=ln(),t$=Hg(),{RemotePayloadObject:r$,RemotePayloadSubscription:s$}=ki(),{handleHDBError:n$,hdb_errors:i$}=y(),{HTTP_STATUS_CODES:a$,HDB_ERROR_MSGS:o$}=i$,c$=Ht(),_$=bn(),u$=WE(),l$=JE.promisify(jk.authorize),E$=JE.promisify(Zg.searchByHash),d$=JE.promisify(Zg.searchByValue);jg.exports={authHeaderToUser:h$,isEmpty:f$,getNodeRecord:S$,upsertNodeRecord:T$,buildNodePayloads:m$,checkClusteringEnabled:R$,getAllNodeRecords:A$,getSystemInfo:p$,reverseSubscription:zg};async function h$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await l$(t,null),e}a(h$,"authHeaderToUser");function f$(e){return e==null}a(f$,"isEmpty");async function S$(e){let t=new e$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return E$(t)}a(S$,"getNodeRecord");async function T$(e){let t=new t$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return zk.upsert(t)}a(T$,"upsertNodeRecord");function zg(e){if(QE.isEmpty(e.subscribe)||QE.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(zg,"reverseSubscription");function m$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=QE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=zg(c),h=new s$(_,u,l,d,E,c.start_time);n.push(h)}return new r$(r,t,n,s)}a(m$,"buildNodePayloads");function R$(){if(!Xg.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))throw n$(new Error,o$.CLUSTERING_NOT_ENABLED,a$.BAD_REQUEST,void 0,void 0,!0)}a(R$,"checkClusteringEnabled");async function A$(){let e=new c$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await d$(e))}a(A$,"getAllNodeRecords");async function p$(){let e=await _$.getSystemInformation();return{hdb_version:u$.version(),node_version:e.node_version,platform:e.platform}}a(p$,"getSystemInfo")});var ZE=f((o5,iN)=>{"use strict";var XE=ve(),eN=b(),tN=ue(),g$=m(),Yc=I(),rN=Nc(),N$=vl(),{RemotePayloadObject:O$}=ki(),{handleHDBError:sN,hdb_errors:I$}=y(),{HTTP_STATUS_CODES:nN}=I$,{NodeSubscription:b$}=On();iN.exports=w$;async function w$(e,t){let r;try{r=await XE.request(`${t}.${tN.REQUEST_SUFFIX}`,new O$(g$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Yc.trace("Response from remote describe all request:",r)}catch(o){Yc.error(`addNode received error from describe all request to remote node: ${o}`);let c=XE.requestErrorHandler(o,"add_node",t);throw sN(new Error,c,nN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===tN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw sN(new Error,o,nN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=eN.doesSchemaExist(c),l=s[c]!==void 0,E=eN.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Yc.trace(`addNode creating schema: ${c}`),await rN.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new N$(c,_,s[c][_].hash_attribute);await rN.createTable(T)}await XE.createLocalTableStream(c,_);let h=new b$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(w$,"reviewSubscriptions")});var Qc=f((_5,cN)=>{"use strict";var{handleHDBError:Kc,hdb_errors:C$}=y(),{HTTP_STATUS_CODES:Wc}=C$,{addUpdateNodeValidator:y$}=yc(),$i=I(),oN=m(),aN=ue(),L$=b(),zE=ve(),Yi=Ar(),U$=v(),M$=ZE(),{Node:D$,NodeSubscription:P$}=On(),B$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",v$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",H$=U$.get(oN.CONFIG_PARAMS.CLUSTERING_NODENAME);cN.exports=q$;async function q$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=y$(e);if(r)throw Kc(r,r.message,Wc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Yi.getNodeRecord(s);if(!L$.isEmptyOrZeroLength(E))throw Kc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Wc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await M$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=B$,o;let c=Yi.buildNodePayloads(n,H$,oN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await zE.request(`${s}.${aN.REQUEST_SUFFIX}`,c)}catch(E){$i.error(`addNode received error from request: ${E}`);let d=zE.requestErrorHandler(E,"add_node",s);throw Kc(new Error,d,Wc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===aN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Kc(new Error,E,Wc.INTERNAL_SERVER_ERROR,"error",E)}$i.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];$i.trace("Add node updating work stream for node:",s,"subscriptions:",h),await zE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new P$(h.schema,h.table,h.publish,h.subscribe))}let l=new D$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=v$:o.message=`Successfully added '${s}' to manifest`,o}a(q$,"addNode")});var ed=f((l5,lN)=>{"use strict";var{handleHDBError:Jc,hdb_errors:G$}=y(),{HTTP_STATUS_CODES:Xc}=G$,{addUpdateNodeValidator:F$}=yc(),Ki=I(),uN=m(),_N=ue(),x$=b(),jE=ve(),Wi=Ar(),V$=v(),{cloneDeep:k$}=require("lodash"),$$=ZE(),{NodeSubscription:Y$}=On(),K$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",W$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Q$=V$.get(uN.CONFIG_PARAMS.CLUSTERING_NODENAME);lN.exports=J$;async function J$(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=F$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=k$(await Wi.getNodeRecord(r));if(x$.isEmptyOrZeroLength(s))throw Jc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await $$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=K$,o;let c=Wi.buildNodePayloads(n,Q$,uN.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await jE.request(`${r}.${_N.REQUEST_SUFFIX}`,c)}catch(u){Ki.error(`updateNode received error from request: ${u}`);let l=jE.requestErrorHandler(u,"update_node",r);throw Jc(new Error,l,Xc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===_N.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Jc(new Error,u,Xc.INTERNAL_SERVER_ERROR,"error",u)}Ki.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Ki.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await jE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await X$(s[0],n,_.system_info),i.length>0?o.message=W$:o.message=`Successfully updated '${r}'`,o}a(J$,"updateNode");async function X$(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Y$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(X$,"updateNodeTable")});var SN=f((d5,fN)=>{"use strict";var hN=require("joi"),{string:EN}=hN.types(),Z$=te(),dN=m(),z$=v(),j$=ue();fN.exports=eY;function eY(e){let t=EN.invalid(z$.get(dN.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(j$.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=hN.object({operation:EN.valid(dN.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Z$.validateBySchema(e,r)}a(eY,"removeNodeValidator")});var zc=f((f5,gN)=>{"use strict";var{handleHDBError:TN,hdb_errors:tY}=y(),{HTTP_STATUS_CODES:mN}=tY,rY=SN(),Qi=I(),RN=Ar(),sY=b(),Zc=m(),AN=ue(),pN=ve(),nY=v(),{RemotePayloadObject:iY}=ki(),{NodeSubscription:aY}=On(),oY=pi(),cY=Ts(),_Y=nY.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);gN.exports=uY;async function uY(e){Qi.trace("removeNode called with:",e),RN.checkClusteringEnabled();let t=rY(e);if(t)throw TN(t,t.message,mN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await RN.getNodeRecord(r);if(sY.isEmptyOrZeroLength(s))throw TN(new Error,`Node '${r}' was not found.`,mN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new iY(Zc.OPERATIONS_ENUM.REMOVE_NODE,_Y,[]),i,o=!1;try{i=await pN.request(`${r}.${AN.REQUEST_SUFFIX}`,n),Qi.trace("Remove node reply from remote node:",r,i)}catch(_){Qi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Qi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new aY(l.schema,l.table,!1,!1);await pN.updateWorkStream(E,r)}let c=new oY(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await cY.deleteRecord(c),i?.status===AN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Qi.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(uY,"removeNode")});var IN=f((T5,ON)=>{"use strict";var NN=require("joi"),{string:lY,array:EY}=NN.types(),dY=te(),hY=yc();ON.exports=fY;function fY(e){let t=NN.object({operation:lY.valid("configure_cluster").required(),connections:EY.items(hY.validation_schema).required()});return dY.validateBySchema(e,t)}a(fY,"configureClusterValidator")});var td=f((R5,LN)=>{"use strict";var SY=m(),jc=I(),TY=b(),mY=zc(),RY=Qc(),bN=Ar(),AY=IN(),{handleHDBError:wN,hdb_errors:pY}=y(),{HTTP_STATUS_CODES:CN}=pY,gY="Configure cluster complete.",NY="Failed to configure the cluster. Check the logs for more details.",OY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";LN.exports=IY;async function IY(e){jc.trace("configure cluster called with:",e),bN.checkClusteringEnabled();let t=AY(e);if(t)throw wN(t,t.message,CN.BAD_REQUEST,void 0,void 0,!0);let r=await bN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(yN(mY,{operation:SY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);jc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(yN(RY,h,h.node_name))}let c=await Promise.allSettled(i);jc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let T=E[d];T.status==="rejected"&&(jc.error(T.reason),_.includes(T.reason.node_name)||_.push(T.reason.node_name)),T.status==="fulfilled"&&(l=!0);let R=T?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||T.status==="rejected"||u.push({node_name:T?.value?.node_name,subscriptions:T?.value?.result})}if(TY.isEmptyOrZeroLength(_))return{message:gY,connections:u};if(l)return{message:OY,failed_nodes:_,connections:u};throw wN(new Error,NY,CN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(IY,"configureCluster");async function yN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(yN,"functionWrapper")});var MN=f((p5,UN)=>{"use strict";var e_=require("joi"),bY=te(),{validateSchemaExists:wY,validateTableExists:CY,validateSchemaName:yY}=Wt(),LY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(wY).custom(yY).required(),table:e_.string().custom(CY).required()});function UY(e){return bY.validateBySchema(e,LY)}a(UY,"purgeStreamValidator");UN.exports=UY});var rd=f((N5,DN)=>{"use strict";var{handleHDBError:MY,hdb_errors:DY}=y(),{HTTP_STATUS_CODES:PY}=DY,BY=MN(),vY=ve(),HY=Ar();DN.exports=qY;async function qY(e){let t=BY(e);if(t)throw MY(t,t.message,PY.BAD_REQUEST,void 0,void 0,!0);HY.checkClusteringEnabled();let{schema:r,table:s}=e;return await vY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(qY,"purgeStream")});var id=f((I5,GN)=>{"use strict";var nd=Ar(),GY=ve(),vN=v(),t_=m(),Us=ue(),FY=b(),sd=I(),{RemotePayloadObject:xY}=ki(),{ErrorCode:PN}=require("nats"),BN=vN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),HN=vN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);GN.exports={clusterStatus:VY,buildNodeStatus:qN};async function VY(){let e={node_name:HN,is_enabled:BN,connections:[]};if(!BN)return e;let t=await nd.getAllNodeRecords();if(FY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(qN(t[s],e.connections));return await Promise.allSettled(r),e}a(VY,"clusterStatus");async function qN(e,t){let r=e.name,s=new xY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,HN,void 0,await nd.getSystemInfo()),n,i,o=Us.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await GY.request(Us.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Us.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Us.CLUSTER_STATUS_STATUSES.CLOSED,sd.error(`Error getting node status from ${r} `,n))}catch(_){sd.warn(`Error getting node status from ${r}`,_),_.code===PN.NoResponders?o=Us.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===PN.Timeout?o=Us.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Us.CLUSTER_STATUS_STATUSES.CLOSED}let c=new kY(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==t_.PRE_4_0_0_VERSION&&await nd.upsertNodeRecord(_)}catch(_){sd.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(qN,"buildNodeStatus");function kY(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(kY,"NodeStatusObject")});var od=f((w5,FN)=>{"use strict";var{handleHDBError:$Y,hdb_errors:YY}=y(),{HTTP_STATUS_CODES:KY}=YY,WY=ve(),QY=Ar(),ad=b(),r_=require("joi"),JY=te(),XY=2e3,ZY=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});FN.exports=zY;async function zY(e){QY.checkClusteringEnabled();let t=JY.validateBySchema(e,ZY);if(t)throw $Y(t,t.message,KY.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||ad.autoCastBoolean(s),o=n===void 0||ad.autoCastBoolean(n),c={nodes:[]},_=await WY.getServerList(r??XY),u={};if(i)for(let l=0,E=_.length;l<E;l++){let d=_[l].statsz;d&&(u[_[l].server.name]=d.routes)}for(let l=0,E=_.length;l<E;l++){if(_[l].statsz)continue;let d=_[l].server,h=_[l].data;if(d.name.endsWith("-hub")){let T={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(T.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(T.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:ad.autoCast(R.split(":")[1])})):[]),c.nodes.push(T)}}return c}a(zY,"clusterNetwork")});var $N=f((y5,kN)=>{"use strict";var cd=require("joi"),xN=te(),{route_constraints:VN}=Cu();kN.exports={setRoutesValidator:jY,deleteRoutesValidator:eK};function jY(e){let t=cd.object({server:cd.valid("hub","leaf").required(),routes:VN.required()});return xN.validateBySchema(e,t)}a(jY,"setRoutesValidator");function eK(e){let t=cd.object({routes:VN.required()});return xN.validateBySchema(e,t)}a(eK,"deleteRoutesValidator")});var ud=f((U5,QN)=>{"use strict";var Ms=lr(),_d=b(),s_=m(),YN=$N(),{handleHDBError:KN,hdb_errors:tK}=y(),{HTTP_STATUS_CODES:WN}=tK,rK="cluster routes successfully set",sK="cluster routes successfully deleted";QN.exports={setRoutes:nK,getRoutes:iK,deleteRoutes:aK};function nK(e){let t=YN.setRoutesValidator(e);if(t)throw KN(t,t.message,WN.BAD_REQUEST,void 0,void 0,!0);let r=Ms.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=_d.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:rK,set:o,skipped:i}}a(nK,"setRoutes");function iK(){let e=Ms.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(iK,"getRoutes");function aK(e){let t=YN.deleteRoutesValidator(e);if(t)throw KN(t,t.message,WN.BAD_REQUEST,void 0,void 0,!0);let r=Ms.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,T=s.length;h<T;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let T=0,R=n.length;T<R;T++){let g=n[T];if(E.host===g.host&&E.port===g.port){n.splice(T,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=_d.isEmptyOrZeroLength(s)?null:s,Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=_d.isEmptyOrZeroLength(n)?null:n,Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:sK,deleted:i,skipped:o}}a(aK,"deleteRoutes")});var XN=f((D5,JN)=>{"use strict";var Ji=require("alasql"),Ds=require("recursive-iterator"),Ft=I(),oK=b(),Xi=m(),n_=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,_K(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Xi.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Xi.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Xi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=cK(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!Xi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Ji.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(n_,"sql_statement_bucket");function cK(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(cK,"filterReadRestrictedAttrs");function _K(e,t,r,s,n){uK(e,t,r,s,n)}a(_K,"interpretAST");function Zi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Zi,"addSchemaTableToMap");function uK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?hK(e,t,r):e instanceof Ji.yy.Select?lK(e,t,r,s,n):e instanceof Ji.yy.Update?EK(e,t,r):e instanceof Ji.yy.Delete?dK(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(uK,"getRecordAttributesAST");function lK(e,t,r,s,n){if(!e){Ft.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(oK.isEmptyOrZeroLength(i)){Ft.error("No schema specified");return}e.from.forEach(c=>{Zi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Zi(c.table,t,r,s,n)});let o=new Ds(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Ft.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ds(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ds(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ds(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Ft.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(lK,"getSelectAttributes");function EK(e,t,r){if(!e){Ft.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.table.tableid,n,i.columnid,t,r)}a(EK,"getUpdateAttributes");function dK(e,t,r){if(!e){Ft.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ds(e.where),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.table.tableid,n,i.columnid,t,r)}a(dK,"getDeleteAttributes");function hK(e,t,r){if(!e){Ft.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.into.databaseid;Zi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.into.tableid,n,i.columnid,t,r)}a(hK,"getInsertAttributes");function ld(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ld,"pushAttribute");JN.exports=n_});var jN=f((B5,zN)=>{var fK=require("os"),ZN=v();zN.exports={checkPermission:SK};function SK(){if(fK.userInfo().username!==ZN.get("install_user"))throw new Error(`Error: Must execute as ${ZN.get("install_user")}`)}a(SK,"checkPermission")});var dd=f((H5,nO)=>{var a_=tn(),eO=require("chalk"),er=I(),tO=jN(),rO=require("prompt"),{promisify:TK}=require("util"),i_=m(),mK=require("fs-extra"),RK=require("path"),AK=b(),pK=WE(),sO=v();sO.initSync();var gK=require("moment"),NK=TK(rO.get),OK=RK.join(sO.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);nO.exports={getFingerprint:bK,setLicense:IK,parseLicense:Ed,register:wK,getRegistrationInfo:yK};async function IK(e){if(e&&e.key&&e.company){try{er.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await Ed(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw er.error(r),er.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(IK,"setLicense");async function bK(){try{tO.checkPermission()}catch(t){throw er.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await a_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw er.error(r),er.error(t),new Error(r)}return e}a(bK,"getFingerprint");async function Ed(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=a_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{er.info("writing license to disk"),await mK.writeFile(OK,JSON.stringify({license_key:e,company:t}))}catch(s){throw er.error("Failed to write License"),s}return"Registration successful."}a(Ed,"parseLicense");async function wK(){let e=await CK();return Ed(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(wK,"register");async function CK(){try{tO.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:eO.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:eO.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{rO.start()}catch(s){er.error(s)}let r;try{r=await NK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(CK,"promptForRegistration");async function yK(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await a_.getLicense()}catch(r){throw er.error(`There was an error when searching licenses due to: ${r.message}`),r}if(AK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=pK.version(),e.storage_type=i_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=gK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(yK,"getRegistrationInfo")});var aO=f((G5,iO)=>{"use strict";var LK=ue(),o_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,T){this.port=t,o===null&&(o=void 0),this.server_name=r+LK.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:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_}},this.accounts={SYS:{users:h},HDB:{users:T}},this.system_account="SYS"}};a(o_,"HubConfigObject");iO.exports=o_});var _O=f((x5,cO)=>{"use strict";var oO=ue(),c_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+oO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+oO.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:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(c_,"LeafConfigObject");cO.exports=c_});var lO=f((k5,uO)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");uO.exports=__});var dO=f((Y5,EO)=>{"use strict";var UK=ue(),u_=class{constructor(t,r){this.user=t+UK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");EO.exports=u_});var Sd=f((W5,SO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),MK=aO(),DK=_O(),PK=lO(),BK=dO(),hd=Sr(),wn=b(),ze=lr(),d_=m(),l_=ue(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=v(),hO=Vr(),fd=ve(),ji="clustering",vK=1e4,fO=5;SO.exports={generateNatsConfig:HK,removeNatsConfig:qK};async function HK(e=!1,t=void 0){f_.initSync();let r=f_.get(de.ROOTPATH),s=zi.join(r,ji,l_.PID_FILES.HUB),n=zi.join(r,ji,l_.PID_FILES.LEAF),i=ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zi.join(r,ji,l_.NATS_CONFIG_FILES.HUB_SERVER),c=zi.join(r,ji,l_.NATS_CONFIG_FILES.LEAF_SERVER),_=ze.getConfigFromFile(de.CLUSTERING_TLS_CERTIFICATE),u=ze.getConfigFromFile(de.CLUSTERING_TLS_PRIVATEKEY),l=ze.getConfigFromFile(de.CLUSTERING_TLS_CERT_AUTH),E=ze.getConfigFromFile(de.CLUSTERING_TLS_INSECURE),d=ze.getConfigFromFile(de.CLUSTERING_TLS_VERIFY),h=ze.getConfigFromFile(de.CLUSTERING_NODENAME),T=ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await fd.checkNATSServerInstalled()||S_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await hd.listUsers(),g=ze.getConfigFromFile(de.CLUSTERING_USER),H=await hd.getClusterUser();(wn.isEmpty(H)||H.active!==!0)&&S_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await E_(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_NETWORK_PORT),await E_(de.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[os,Cr]of R.entries())Cr.role.role===d_.ROLE_TYPES_ENUM.CLUSTER_USER&&Cr.active&&(x.push(new BK(Cr.username,hO.decrypt(Cr.hash))),q.push(new PK(Cr.username,hO.decrypt(Cr.hash))));let ye=[],{hub_routes:U}=ze.getClusteringRoutes();if(!wn.isEmptyOrZeroLength(U))for(let os of U)ye.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${os.host}:${os.port}`);let $=new MK(ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,T,ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NAME),ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ye,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=wn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await h_.writeJson(o,$),ea.trace(`Hub server config written to ${o}`));let _e=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,ae=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,Hn=new DK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[_e],[ae],x,q,_,u,l,E);l==null&&delete Hn.tls.ca_file,(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await h_.writeJson(c,Hn),ea.trace(`Leaf server config written to ${c}`))}a(HK,"generateNatsConfig");async function E_(e){let t=f_.get(e);return wn.isEmpty(t)&&S_(`port undefined for '${e}'`),await wn.isPortTaken(t)&&S_(`'${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(E_,"isPortAvailable");function S_(e){let t=`Error generating clustering config: ${e}`;ea.error(t),console.error(t),process.exit(1)}a(S_,"generateNatsConfigError");async function qK(e){let{port:t,config_file:r}=fd.getServerConfig(e),{username:s,decrypt_hash:n}=await hd.getClusterUser(),i=0,o=500;for(;i<fO;){try{let u=await fd.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=fO)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 wn.async_set_timeout(o*i)}let c="0".repeat(vK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(qK,"removeNatsConfig")});var gO=f((J5,pO)=>{"use strict";var ht=v(),GK=tn(),F=m(),ta=ue(),pr=require("path"),{PACKAGE_ROOT:T_}=m(),TO=v(),Cn="/dev/null",FK=pr.join(T_,"launchServiceScripts"),mO=pr.join(T_,"utility/scripts"),xK=pr.join(mO,F.HDB_RESTART_SCRIPT),RO=pr.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function AO(){let t=GK.licenseSearch().ram_allocation||F.RAM_ALLOCATION_ENUM.DEFAULT,r=F.MEM_SETTING_KEY+t;return{name:F.PROCESS_DESCRIPTORS.HDB,script:F.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:T_}}a(AO,"generateMainServerConfig");var VK=9930;function kK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=pr.join(e,"clustering",ta.NATS_CONFIG_FILES.HUB_SERVER),r=pr.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=TO.get(F.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==VK?"-"+s:""),script:RO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(kK,"generateNatsHubServerConfig");var $K=9940;function YK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=pr.join(e,"clustering",ta.NATS_CONFIG_FILES.LEAF_SERVER),r=pr.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=TO.get(F.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==$K?"-"+s:""),script:RO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(YK,"generateNatsLeafServerConfig");function KK(){ht.initSync();let e=pr.join(ht.get(F.CONFIG_PARAMS.LOGGING_ROOT),F.LOG_NAMES.HDB),t={name:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:F.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:FK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(KK,"generateClusteringUpgradeV4ServiceConfig");function WK(){return{...{name:F.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:mO},script:xK}}a(WK,"generateRestart");function QK(){return{apps:[AO()]}}a(QK,"generateAllServiceConfigs");pO.exports={generateAllServiceConfigs:QK,generateMainServerConfig:AO,generateRestart:WK,generateNatsHubServerConfig:kK,generateNatsLeafServerConfig:YK,generateClusteringUpgradeV4ServiceConfig:KK}});var HO=f((sj,vO)=>{"use strict";var Y=m(),OO=b(),ra=Sd(),m_=ve(),tr=ue(),K=require("pm2"),ts=gO(),R_=v(),gr=I(),JK=Ar(),{startWorker:Td,onMessageFromWorkers:XK}=rn(),Z5=bn(),ZK=require("util"),IO=require("child_process"),{execFile:zK}=IO,z5=ZK.promisify(IO.exec),j5=require("systeminformation");vO.exports={enterPM2Mode:jK,start:Ps,stop:md,reload:bO,restart:wO,list:Rd,describe:Ad,connect:Nr,kill:nW,startAllServices:iW,startService:pd,getUniqueServicesList:yO,restartAllServices:aW,isServiceRegistered:LO,reloadStopStart:UO,restartHdb:CO,deleteProcess:rW,startClusteringProcesses:PO,startClusteringThreads:BO,isHdbRestartRunning:sW,isClusteringRunning:cW,stopClustering:oW,reloadClustering:_W};var{PACKAGE_ROOT:ej}=m(),tj=m(),{loggerWithTag:rj}=gr,sa=!1;XK(e=>{e.type==="restart"&&R_.initSync(!0)});function jK(){sa=!0}a(jK,"enterPM2Mode");function Nr(){return new Promise((e,t)=>{K.connect((r,s)=>{gr.setupConsoleLogging(),r&&t(r),e(s)})})}a(Nr,"connect");var je,eW=10,NO;function Ps(e){if(sa)return tW(e);let t=zK(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=je.indexOf(t);i>-1&&je.splice(i,1),!NO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<eW&&Ps(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=R_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?gr.OUTPUTS.STDERR:gr.OUTPUTS.STDOUT;gr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=tr.LOG_LEVELS[E]}if(tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?gr.OUTPUTS.STDERR:gr.OUTPUTS.STDOUT;gr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!je){je=[];let n=a(()=>{NO=!0,je&&(je.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)}je.push(t)}a(Ps,"start");function tW(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(tW,"startWithPM2");function md(e){if(!sa){for(let t of je||[])t.name===e&&(je.splice(je.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.stop(e,async(s,n)=>{s&&(K.disconnect(),r(s)),K.delete(e,(i,o)=>{i&&(K.disconnect(),r(s)),K.disconnect(),t(o)})})})}a(md,"stop");function bO(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(bO,"reload");function wO(e){if(!sa)for(let t of je||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(wO,"restart");function rW(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(rW,"deleteProcess");async function CO(){await Ps(ts.generateRestart())}a(CO,"restartHdb");async function sW(){let e=await Rd();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(sW,"isHdbRestartRunning");function Rd(){return new Promise(async(e,t)=>{try{await Nr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(Rd,"list");function Ad(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(Ad,"describe");function nW(){if(!sa){for(let e of je||[])e.kill();je=[];return}return new Promise(async(e,t)=>{try{await Nr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(nW,"kill");async function iW(){try{await PO(),await BO(),await Ps(ts.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(iW,"startAllServices");async function pd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ts.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ts.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ts.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ts.generateNatsHubServerConfig(),await Ps(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ts.generateNatsLeafServerConfig(),await Ps(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ts.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ps(t)}catch(t){throw K.disconnect(),t}}a(pd,"startService");async function yO(){try{let e=await Rd(),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 K.disconnect(),e}}a(yO,"getUniqueServicesList");async function aW(e=[]){try{let t=!1,r=await yO();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Y.PROCESS_DESCRIPTORS.HDB?t=!0:await wO(o))}t&&await UO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(aW,"restartAllServices");async function LO(e){return je?.find(t=>t.name===e)?!0:!OO.isEmptyOrZeroLength(await Ad(e))}a(LO,"isServiceRegistered");async function UO(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?R_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):R_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ad(e),s=OO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await md(e),await pd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await CO():await bO(e)}a(UO,"reloadStopStart");var MO,DO;async function PO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await pd(t)}}a(PO,"startClusteringProcesses");async function BO(){MO=Td(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),DO=Td(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await m_.createWorkQueueStream(tr.WORK_QUEUE_CONSUMER_NAMES),await m_.updateLocalStreams();let e=await JK.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){gr.info("Starting clustering upgrade 4.0.0 process"),Td(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(BO,"startClusteringThreads");async function oW(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await MO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await DO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await md(t)}}a(oW,"stopClustering");async function cW(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await LO(t)===!1)return!1}return!0}a(cW,"isClusteringRunning");async function _W(){await ra.generateNatsConfig(!0),await m_.reloadNATSHub(),await m_.reloadNATSLeaf(),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(_W,"reloadClustering")});var Cd=f((ij,kO)=>{"use strict";var uW=require("minimist"),{isMainThread:Od,parentPort:FO}=require("worker_threads"),se=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=se,rr=I(),Id=b(),A_=Sd(),yn=ve(),gd=ue(),xO=lr(),sr=HO(),qO=bn(),lW=hu(),{restartWorkers:p_,onMessageFromWorkers:EW}=rn(),{handleHDBError:dW,hdb_errors:hW}=y(),{HTTP_STATUS_CODES:fW}=hW,g_=v();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${se.RESTART_TIMEOUT_MS/1e3} seconds.`,SW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",GO="Clustering is not enabled so cannot be restarted",TW="Invalid service",Bs,xt;kO.exports={restart:VO,restartService:bd};Od&&EW(e=>{e.type===se.ITC_EVENT_TYPES.RESTART&&(e.workerType?bd({service:e.workerType}):VO({operation:"restart"}))});async function VO(e){xt=Object.keys(e).length===0,Bs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR);let t=uW(process.argv);if(t.service){await bd(t);return}if(xt&&!Bs){console.error(SW);return}if(xt&&console.log(ia),Bs){sr.enterPM2Mode(),rr.notify(ia);let r=lW(Object.keys(se.CONFIG_PARAM_MAP),!0);return Id.isEmptyOrZeroLength(Object.keys(r))||xO.updateConfigValue(void 0,void 0,r,!0,!0),RW(),ia}return Od?(rr.notify(ia),await wd(),setTimeout(()=>{p_()},50)):FO.postMessage({type:se.ITC_EVENT_TYPES.RESTART}),ia}a(VO,"restart");async function bd(e){let{service:t}=e;if(se.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw dW(new Error,TW,fW.BAD_REQUEST,void 0,void 0,!0);if(Bs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR),!Od)return FO.postMessage({type:se.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await wd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GO;break}xt&&console.log("Restarting clustering_config"),rr.notify("Restarting clustering_config"),await sr.reloadClustering();break;case"custom_functions":case"custom functions":case na.harperdb:case na.http_workers:if(xt&&!Bs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}xt&&console.log("Restarting http_workers"),rr.notify("Restarting http_workers"),Bs?await sr.restart(se.HDB_PROC_DESCRIPTOR):setTimeout(()=>{p_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rr.error(r),xt&&console.error(r),r):`Restarting ${t}`}a(bd,"restartService");async function mW(){await yn.publishToStream(`${gd.SUBJECT_PREFIXES.TXN}.${gd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,gd.WORK_QUEUE_CONSUMER_NAMES.stream_name,yn.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(mW,"postDummyNatsMsg");async function RW(){await wd(),await sr.restart(se.HDB_PROC_DESCRIPTOR),await Id.async_set_timeout(2e3),g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Nd(),xt&&(await yn.closeConnection(),process.exit(0))}a(RW,"restartPM2Mode");async function wd(){if(!xO.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await qO.getHDBProcessInfo()).clustering.length===0)rr.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await sr.startClusteringProcesses(),await sr.startClusteringThreads(),await Nd(),xt&&await yn.closeConnection();else{await mW(),await A_.generateNatsConfig(!0),Bs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await qO.getHDBProcessInfo()).clustering.forEach(n=>{rr.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Id.async_set_timeout(3e3),await Nd(),await yn.updateLocalStreams(),xt&&await yn.closeConnection(),rr.trace("Restart clustering restarting ingest and reply service threads");let t=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wd,"restartClustering");async function Nd(){await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Nd,"removeNatsConfig")});var eI=f((cj,jO)=>{"use strict";var oj=require("lodash"),qe=m(),{handleHDBError:$O,hdb_errors:AW}=y(),{HDB_ERROR_MSGS:pW,HTTP_STATUS_CODES:gW}=AW,yd=I();jO.exports={getRolePermissions:OW};var vs=Object.create(null),NW=a(e=>({key:e,perms:{}}),"perms_template_obj"),QO=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),JO=a((e=!1,t=!1,r=!1,s=!1)=>({[qe.PERMS_CRUD_ENUM.READ]:e,[qe.PERMS_CRUD_ENUM.INSERT]:t,[qe.PERMS_CRUD_ENUM.UPDATE]:r,[qe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Ld=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...JO(t,r,s,n)}),"table_perms_template"),YO=a((e,t=JO())=>({attribute_name:e,describe:zO(t),[aa]:t[aa],[Ud]:t[Ud],[Md]:t[Md]}),"attr_perms_template"),KO=a((e,t=!1)=>({attribute_name:e,describe:t,[aa]:t}),"timestamp_attr_perms_template"),{READ:aa,INSERT:Ud,UPDATE:Md}=qe.PERMS_CRUD_ENUM,XO=Object.values(qe.PERMS_CRUD_ENUM),ZO=[aa,Ud,Md];function OW(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[qe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vs[t]&&vs[t].key===s)return vs[t].perms;let n=IW(e,r);return vs[t]?vs[t].key=s:vs[t]=NW(s),vs[t].perms=n,n}catch(r){if(!e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw yd.error(s),yd.debug(r),$O(new Error,pW.OUTDATED_PERMS_TRANSLATION_ERROR,gW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
8
8
  ${r.stack}`;throw yd.error(s),$O(new Error)}}}a(OW,"getRolePermissions");function IW(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[qe.SYSTEM_SCHEMA_NAME]=s[qe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=bW(t[i]);return}r[i]=QO(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=wW(c,_);r[i].describe||XO.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Ld()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Ld()})}),r}a(IW,"translateRolePermissions");function bW(e){let t=QO(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Ld(!0,!0,!0,!0,!0)}),t}a(bW,"createStructureUserPermissions");function wW(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return qe.TIME_STAMP_NAMES.includes(E)&&(d=KO(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=YO(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=zO(l),n.attribute_permissions.push(l),c||CW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=KO(u):l=YO(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=WO(n),n}else return e.describe=WO(e),e}a(wW,"getTableAttrPerms");function WO(e){return XO.filter(t=>e[t]).length>0}a(WO,"getSchemaTableDescribePerm");function zO(e){return ZO.filter(t=>e[t]).length>0}a(zO,"getAttributeDescribePerm");function CW(e,t){ZO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(CW,"checkForHashPerms")});var oI=f((uj,aI)=>{"use strict";var he=require("joi"),tI=require("fs-extra"),rI=require("path"),Ln=te(),sI=v(),nI=m(),iI=I(),{hdb_errors:yW}=y(),{HDB_ERROR_MSGS:et}=yW,rs=/^[a-zA-Z0-9-_]+$/;aI.exports={getDropCustomFunctionValidator:UW,setCustomFunctionValidator:MW,addCustomFunctionProjectValidator:DW,dropCustomFunctionProjectValidator:PW,packageCustomFunctionProjectValidator:BW,deployCustomFunctionProjectValidator:vW};function oa(e,t,r){try{let s=sI.get(nI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=rI.join(s,t);return tI.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return iI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function LW(e,t,r,s){try{let n=sI.get(nI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=rI.join(n,e,t,r+".js");return tI.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return iI.error(n),s.message(et.VALIDATION_ERR)}}a(LW,"checkFileExists");function UW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).custom(LW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(UW,"getDropCustomFunctionValidator");function MW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return Ln.validateBySchema(e,t)}a(MW,"setCustomFunctionValidator");function DW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!1)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(DW,"addCustomFunctionProjectValidator");function PW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(PW,"dropCustomFunctionProjectValidator");function BW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Ln.validateBySchema(e,t)}a(BW,"packageCustomFunctionProjectValidator");function vW(e){let t=he.object({project:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),payload:he.string().required().messages({"string.pattern.base":et.BAD_PACKAGE})});return Ln.validateBySchema(e,t)}a(vW,"deployCustomFunctionProjectValidator")});var Hd=f((Ej,uI)=>{"use strict";var be=require("fs-extra"),Dd=require("fast-glob"),ee=require("path"),cI=require("tar-fs"),_I=require("uuid").v4,Pd=require("normalize-path"),Hs=oI(),ge=I(),ft=m(),St=v(),{PACKAGE_ROOT:HW}=m(),{handleHDBError:Ge,hdb_errors:qW}=y(),{HDB_ERROR_MSGS:ss,HTTP_STATUS_CODES:Fe}=qW,GW=ee.join(HW,"custom_function_template"),Bd=ee.join(St.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function vd(){let e=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,ss.NOT_ENABLED,Fe.BAD_REQUEST,void 0,void 0,!0)}a(vd,"isCFEnabled");function FW(){ge.trace("getting custom api status");let e={};try{e={is_enabled:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,ss.FUNCTION_STATUS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,t)}return e}a(FW,"customFunctionsStatus");function xW(){ge.trace("getting custom api endpoints");let e={},t=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Dd.sync(Pd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Dd.sync(Pd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Dd.sync(Pd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,ss.GET_FUNCTIONS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,r)}return e}a(xW,"getCustomFunctions");function VW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("getting custom api endpoint file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ee.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,ss.GET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(VW,"getCustomFunction");function kW(e){vd(),e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("setting custom function file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(ee.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,ss.SET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(kW,"setCustomFunction");function $W(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function file");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(ee.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,ss.DROP_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,o)}}a($W,"dropCustomFunction");function YW(e){vd(),e.project&&(e.project=ee.parse(e.project).name);let t=Hs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("adding custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(GW,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,ss.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(YW,"addCustomFunctionProject");function KW(e){e.project&&(e.project=ee.parse(e.project).name);let t=Hs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return be.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,ss.DROP_FUNCTION_PROJECT,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(KW,"dropCustomFunctionProject");async function WW(e){e.project&&(e.project=ee.parse(e.project).name);let t=Hs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("packaging custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ee.join(r,s),i=_I();if(!be.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw ge.error(l),l}be.ensureDirSync(Bd);let c=ee.join(Bd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ee.join(n,"node_modules"))}),cI.pack(n,_).pipe(be.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=be.readFileSync(c,{encoding:"base64"});return be.unlinkSync(c),{project:s,payload:u,file:c}}a(WW,"packageCustomFunctionProject");async function QW(e){vd(),e.project&&(e.project=ee.parse(e.project).name);let t=Hs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("deploying custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=ee.join(r,s);await be.ensureDir(i);let o,c;do o=ee.join(Bd,_I()+".tar"),c=await be.pathExists(o);while(c);await be.outputFile(o,n,{encoding:"base64"});let _=be.createReadStream(o);return _.pipe(cI.extract(i)),await new Promise(u=>_.on("end",u)),await be.unlink(o),`Successfully deployed project: ${s}`}a(QW,"deployCustomFunctionProject");uI.exports={customFunctionsStatus:FW,getCustomFunctions:xW,getCustomFunction:VW,setCustomFunction:kW,dropCustomFunction:$W,addCustomFunctionProject:YW,dropCustomFunctionProject:KW,packageCustomFunctionProject:WW,deployCustomFunctionProject:QW}});var qd=f((hj,EI)=>{"use strict";var nr=require("joi"),lI=te();EI.exports={readTransactionLogValidator:JW,deleteTransactionLogsBeforeValidator:XW};function JW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),from:nr.date().timestamp(),to:nr.date().timestamp(),limit:nr.number().min(1)});return lI.validateBySchema(e,t)}a(JW,"readTransactionLogValidator");function XW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return lI.validateBySchema(e,t)}a(XW,"deleteTransactionLogsBeforeValidator")});var O_=f((Sj,TI)=>{"use strict";var Gd=m(),N_=ve(),dI=b(),hI=v(),fI=Vr(),{handleHDBError:Un,hdb_errors:ZW}=y(),{HTTP_STATUS_CODES:Mn}=ZW,{readTransactionLogValidator:zW,deleteTransactionLogsBeforeValidator:jW}=qd(),SI="This operation relies on clustering and cannot run with it disable.",eQ="Logs successfully deleted from transaction log.",tQ="All logs successfully deleted from transaction log.";TI.exports={readTransactionLog:rQ,deleteTransactionLogsBefore:sQ};async function*rQ(e){let t=zW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!hI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,SI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=dI.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=fI.createNatsTableStreamName(r,s),o=await N_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let _=Math.floor(c?.nats_timestamp/1e6);if(e.to&&_>e.to)break;let u={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:_,records:c?.entry?.records};c?.entry?.operation===Gd.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(rQ,"readTransactionLog");async function sQ(e){let t=jW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!hI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,SI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=dI.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=fI.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),_=await N_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=eQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=tQ):E=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(sQ,"deleteTransactionLogsBefore")});var xd=f((mj,wI)=>{"use strict";var I_=require("joi"),b_=require("path"),mI=require("fs-extra"),{exec:nQ}=require("child_process"),iQ=require("util"),RI=iQ.promisify(nQ),aQ=m(),{handleHDBError:Dn,hdb_errors:oQ}=y(),{HTTP_STATUS_CODES:Pn}=oQ,AI=v(),cQ=te(),w_=I();AI.initSync();var Fd=AI.get(aQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),pI="npm install --omit=dev --json",_Q=`${pI} --dry-run`;wI.exports={installModules:uQ,auditModules:lQ};async function gI(e,t=void 0){let{stdout:r,stderr:s}=await RI(e,{cwd:t});if(s)throw new Error(s.replace(`