harperdb 4.0.5 → 4.0.6

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
  `,Bw={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},vw=["*","%"],Hw="unauthorized_access",qw="func_val",Gw={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Fw={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Vw="hdb_ipc_server",kw="hdb_ipc_client_",$w={RESTART:"restart",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request"},xw={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Yw={STOPPED:"stopped",ONLINE:"online"},Kw="3.x.x";Jd.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:Vd,HDB_SUPPORT_URL:$d,HDB_PRICING_URL:Sb,SUPPORT_HELP_MSG:fb,LICENSE_HELP_MSG:xd,HDB_PROC_NAME:qd,HDB_PROC_DESCRIPTOR:K_,CLUSTERING_LEAF_PROC_DESCRIPTOR:da,CLUSTERING_HUB_PROC_DESCRIPTOR:Ea,SYSTEM_SCHEMA_NAME:Bb,HASH_FOLDER_NAME:vb,HDB_HOME_DIR_NAME:Hb,UPDATE_FILE_NAME:Vb,LICENSE_KEY_DIR_NAME:Gb,BOOT_PROPS_FILE_NAME:Fb,JOB_TYPE_ENUM:Rw,JOB_STATUS_ENUM:lw,SYSTEM_TABLE_NAMES:iw,SYSTEM_TABLE_HASH_ATTRIBUTES:aw,OPERATIONS_ENUM:g,VALID_S3_FILE_TYPES:Ew,S3_BUCKET_AUTH_KEYS:dw,VALID_SQL_OPS_ENUM:hw,GEO_CONVERSION_ENUM:fw,HDB_SETTINGS_NAMES:Kd,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Tw,SERVICE_ACTIONS_ENUM:Sw,CLUSTER_MESSAGE_TYPE_ENUM:Aw,CLUSTER_CONNECTION_DIRECTION_ENUM:Ow,CLUSTER_EVENTS_DEFS_ENUM:Iw,PERIOD_REGEX:Nb,DOUBLE_PERIOD_REGEX:gb,UNICODE_PERIOD:Ib,FORWARD_SLASH_REGEX:bb,UNICODE_FORWARD_SLASH:wb,ESCAPED_FORWARD_SLASH_REGEX:Cb,ESCAPED_PERIOD_REGEX:Lb,ESCAPED_DOUBLE_PERIOD_REGEX:Ub,REG_KEY_FILE_NAME:_w,RESTART_TIMEOUT_MS:xb,HDB_FILE_PERMISSIONS:Yb,SCHEMA_DIR_NAME:Qb,TRANSACTIONS_DIR_NAME:Jb,LIMIT_COUNT_NAME:Zb,ID_ATTRIBUTE_STRING:Xb,INSERT_MODULE_ENUM:sw,UPGRADE_JSON_FIELD_NAMES_ENUM:nw,RESTART_CODE:kb,RESTART_CODE_NUM:$b,CLUSTER_OPERATIONS:Cr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:cw,HDB_INTERNAL_SC_CHANNEL_PREFIX:Et,INTERNAL_SC_CHANNELS:ow,CLUSTERING_MESSAGE_TYPES:Dw,HDB_FILE_SUFFIX:qb,BLOB_FOLDER_NAME:Kb,HDB_TRASH_DIR:Wb,ORIGINATOR_SET_VALUE:Mw,LICENSE_VALUES:Nw,RAM_ALLOCATION_ENUM:gw,STORAGE_TYPES_ENUM:pw,TIME_STAMP_NAMES_ENUM:Wd,TIME_STAMP_NAMES:Lw,PERMS_UPDATE_RELEASE_TIMESTAMP:Uw,SEARCH_NOT_FOUND_MESSAGE:Tb,SEARCH_ATTRIBUTE_NOT_FOUND:mb,LICENSE_ROLE_DENIED_RESPONSE:Rb,LICENSE_MAX_CONNS_REACHED:Ab,BASIC_LICENSE_MAX_NON_CU_ROLES:kd,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:hb,VALUE_SEARCH_COMPARATORS:Qd,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:yw,LICENSE_FILE_NAME:uw,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:bw,NEW_LINE:Pw,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:pb,MOMENT_DAYS_TAG:yb,API_TURNOVER_SEC:Db,LOOPBACK:Ob,CODE_EXTENSION:Fn,WILDCARD_SEARCH_VALUE:Mb,NODE_ERROR_CODES:ww,JAVASCRIPT_EXTENSION:Hd,PERMS_CRUD_ENUM:Bw,UNAUTHORIZED_PERMISSION_NAME:Hw,SEARCH_WILDCARDS:vw,FUNC_VAL:qw,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Gw,JWT_ENUM:Fw,CLUSTERING_FLAG:Cw,RUN_LOG:jb,INSTALL_LOG:zb,IPC_SERVER_MODULE:Fd,HDB_IPC_SERVER:Vw,IPC_EVENT_TYPES:$w,HDB_IPC_CLIENT_PREFIX:kw,CUSTOM_FUNCTION_PROC_NAME:Gd,CUSTOM_FUNCTION_PROC_DESCRIPTOR:la,SERVICES:xw,MEM_SETTING_KEY:Pb,HDB_RESTART_SCRIPT:nb,PROCESS_DESCRIPTORS:Y_,SERVICE_SERVERS:ub,SERVICE_SERVERS_CWD:ua,PROCESS_DESCRIPTORS_VALIDATE:cb,LAUNCH_SERVICE_SCRIPTS:lb,LOG_LEVELS:ob,PROCESS_NAME_ENV_PROP:ew,PROCESS_LOG_NAMES:ab,PM2_PROCESS_STATUSES:Yw,CONFIG_PARAM_MAP:mw,CONFIG_PARAMS:f,HDB_CONFIG_FILE:tb,HDB_DEFAULT_CONFIG_FILE:rb,ROLE_TYPES_ENUM:Eb,BOOT_PROP_PARAMS:tw,INSTALL_PROMPTS:rw,HDB_ROOT_DIR_NAME:sb,CLUSTERING_PROCESSES:_b,FOREGROUND_PID_FILE:ib,PACKAGE_ROOT:Ht,PRE_4_0_0_VERSION:Kw}});var J_=S((GQ,zd)=>{"use strict";var Zd=require("minimist");zd.exports=Ww;function Ww(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Xd(process.env),s=Xd(Zd(process.argv))):(r=process.env,s=Zd(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(Ww,"assignCMDENVVariables");function Xd(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Xd,"objKeysToLowerCase")});var I=S((FQ,ih)=>{"use strict";var jr=require("fs-extra"),es=require("path"),eh=require("yaml"),th=require("properties-reader"),me=T(),Qw=J_(),Jw=require("os"),{PACKAGE_ROOT:z_}=T(),tt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},ha=es.join(z_,"logs"),Lr=process.env.pm_id===void 0,Zw=es.join(z_,"config/yaml/",me.HDB_DEFAULT_CONFIG_FILE),j_=process.env.PROCESS_NAME===void 0?me.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Gs,Qt,cr,et,Z_,Fs;Fs===void 0&&rh();ih.exports={createLogFile:Xw,notify:eC,fatal:tC,error:X_,warn:rC,info:zw,debug:jw,trace:nh,setLogLevel:nC,log_level:et};function rh(){try{if(Fs===void 0){let e=sC();Fs=th(e),{level:et,config_log_path:Z_,to_file:Qt,to_stream:cr}=iC(Fs.get("settings_path"))}}catch(e){if(Fs=void 0,e.code===me.NODE_ERROR_CODES.ENOENT){let t=Qw(Object.keys(me.CONFIG_PARAM_MAP),!0);for(let i in t){let o=me.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let c=t[i];if(o===me.CONFIG_PARAMS.LOGGING_LEVEL){et=c;continue}if(o===me.CONFIG_PARAMS.LOGGING_STDSTREAMS){cr=c;continue}o===me.CONFIG_PARAMS.LOGGING_FILE&&(Qt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=aC();Qt=Qt===void 0?s:Qt,Qt=jd(Qt),cr=cr===void 0?n:cr,cr=jd(cr),et=et===void 0?r:et,Z_=ha;return}throw X_("Error initializing log settings"),X_(e),e}}a(rh,"initLogSettings");function Xw(e,t){if(!Lr){nh("createLogFile should only be used if the process is not being managed by pm2");return}Fs===void 0&&rh(),j_=t;let r;e===me.PROCESS_LOG_NAMES.INSTALL?r=ha:r=Z_,Qt&&(Gs=es.join(r,e),jr.ensureFileSync(Gs))}a(Xw,"createLogFile");function ts(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let c=t[o];c instanceof Error&&c.stack?s+=c.stack:typeof c=="object"?s+=JSON.stringify(c):s+=c,o<i&&(s+=" ")}return`{"process_name": "${j_}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
3
3
  `}a(ts,"createLogRecord");function sh(e){Gs===void 0&&(j_=me.PROCESS_DESCRIPTORS.INSTALL,jr.ensureDirSync(ha),Gs=es.join(ha,me.PROCESS_LOG_NAMES.INSTALL),jr.ensureFileSync(Gs)),jr.appendFileSync(Gs,e)}a(sh,"writeToLogFile");function Sa(e){Qt&&sh(e),cr&&process.stdout.write(e)}a(Sa,"nonPm2LogStdOut");function eu(e){Qt&&sh(e),cr&&process.stderr.write(e)}a(eu,"nonPm2LogStdErr");function zw(...e){if(tt[et]<=tt.info){let t=ts("info",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(zw,"info");function nh(...e){if(tt[et]<=tt.trace){let t=ts("trace",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(nh,"trace");function X_(...e){if(tt[et]<=tt.error){let t=ts("error",e);if(Lr){eu(t);return}process.stderr.write(t)}}a(X_,"error");function jw(...e){if(tt[et]<=tt.debug){let t=ts("debug",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(jw,"debug");function eC(...e){if(tt[et]<=tt.notify){let t=ts("notify",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(eC,"notify");function tC(...e){if(tt[et]<=tt.fatal){let t=ts("fatal",e);if(Lr){eu(t);return}process.stderr.write(t)}}a(tC,"fatal");function rC(...e){if(tt[et]<=tt.warn){let t=ts("warn",e);if(Lr){eu(t);return}process.stderr.write(t)}}a(rC,"warn");function sC(){let e;try{e=Jw.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=es.join(e,me.HDB_HOME_DIR_NAME,me.BOOT_PROPS_FILE_NAME);return jr.existsSync(t)||(t=es.join(z_,"utility/hdb_boot_properties.file")),t}a(sC,"getPropsFilePath");function nC(e){et=e}a(nC,"setLogLevel");function jd(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jd,"autoCastBoolean");function iC(e){try{if(e.includes("config/settings.js")){let o=th(e);return{level:o.get(me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:es.dirname(o.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=eh.parseDocument(jr.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===me.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(iC,"getLogConfig");function aC(){try{let e=eh.parseDocument(jr.readFileSync(Zw,"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(aC,"getDefaultConfig")});var oh=S((VQ,ah)=>{"use strict";var oC=require("util"),cC=require("path"),_C=require("child_process"),uC=oC.promisify(_C.execFile),lC=1e3*1e3*10;ah.exports={findPs:EC};async function EC(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await uC("ps",["wwxo",`pid,${r}`],{maxBuffer:lC});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:cC.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(EC,"findPs")});var Ye=S((kQ,_h)=>{"use strict";var dC="__dbis__",hC="__environment_name__",SC="__dbi_defintion__",fC={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"},TC=["__createdtime__","__updatedtime__"],mC="\uFFFF",ch={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RC=Object.values(ch);_h.exports={INTERNAL_DBIS_NAME:dC,DBI_DEFINITION_NAME:SC,SEARCH_TYPES:fC,TIMESTAMP_NAMES:TC,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:hC,TRANSACTIONS_DBI_NAMES_ENUM:ch,TRANSACTIONS_DBIS:RC,OVERFLOW_MARKER:mC}});var rt=S(($Q,mh)=>{"use strict";var uh=T(),lh=Ye(),Eh={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},dh=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),hh={500:dh("There was an error processing your request."),400:"Invalid request"},AC=hh[Eh.INTERNAL_SERVER_ERROR],OC={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.`},pC={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},NC={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"},gC={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_ARRAY:"ids must be an array",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 ${lh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${lh.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"},IC={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${uh.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 ${uh.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"},Sh={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"},bC={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."},wC={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`},CC={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"},LC={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},UC={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`},fh={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.`},Th={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},yC={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."},DC={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},MC={...Sh,...NC,...OC,...bC,...wC,...CC,...LC,...UC,...IC,...fh,...Th,...yC,...DC,...pC};mh.exports={CHECK_LOGS_WRAPPER:dh,HDB_ERROR_MSGS:MC,DEFAULT_ERROR_MSGS:hh,DEFAULT_ERROR_RESP:AC,HTTP_STATUS_CODES:Eh,LMDB_ERRORS_ENUM:gC,AUTHENTICATION_ERROR_MSGS:Sh,VALIDATION_ERROR_MSGS:fh,IPC_ERRORS:Th}});var D=S((xQ,Oh)=>{"use strict";var Vs=rt(),PC=I(),BC=T(),Vn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Rh),this.http_resp_code=s||Vs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Vs.DEFAULT_ERROR_MSGS[s]?Vs.DEFAULT_ERROR_MSGS[s]:Vs.DEFAULT_ERROR_MSGS[Vs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&PC[n](i)}};a(Vn,"HdbError");function Rh(e,t,r,s=BC.LOG_LEVELS.ERROR,n=null,i=!1){if(Ah(e))return e;let o=new Vn(e,t,r,s,n);return i&&delete o.stack,o}a(Rh,"handleHDBError");function Ah(e){return e.__proto__.constructor.name===Vn.name}a(Ah,"isHDBError");Oh.exports={isHDBError:Ah,handleHDBError:Rh,hdb_errors:Vs}});var b=S((KQ,vh)=>{"use strict";var rs=require("path"),vC=require("fs-extra"),Ie=I(),ph=require("fs-extra"),HC=require("truncate-utf8-bytes"),kn=require("os"),qC=require("net"),GC=require("recursive-iterator"),Ue=T(),wh=oh(),Nh=require("papaparse"),fa=require("moment"),{inspect:FC}=require("util"),gh=require("is-number"),YQ=require("lodash"),{hdb_errors:Ta}=D(),Ch=require("util").promisify(setTimeout),VC=100,kC=5,$C="",xC=4,Ih=255,bh={true:!0,false:!1,undefined:null,null:null,NaN:NaN};vh.exports={isEmpty:dt,isEmptyOrZeroLength:Jt,arrayHasEmptyValues:WC,arrayHasEmptyOrZeroLengthValues:QC,buildFolderPath:JC,isBoolean:Lh,errorizeMessage:YC,stripFileExtension:XC,autoCast:zC,autoCastJSONDeep:tu,removeDir:eL,compareVersions:tL,isCompatibleDataVersion:rL,escapeRawValue:yh,unescapeValue:sL,stringifyProps:nL,valueConverter:iL,timeoutPromise:oL,isClusterOperation:_L,getClusterUser:EL,sendTransactionToSocketCluster:uL,checkGlobalSchemaTable:lL,getHomeDir:Dh,getPropsFilePath:aL,promisifyPapaParse:dL,removeBOM:Mh,createEventPromise:hL,checkProcessRunning:SL,checkSchemaTableExist:fL,checkSchemaExists:Ph,checkTableExists:Bh,getStartOfTomorrowInSeconds:TL,getLimitKey:mL,isObject:ZC,isNotEmptyAndHasValue:KC,autoCasterIsNumberCheck:Uh,backtickASTSchemaItems:RL,isPortTaken:cL,stopProcess:AL,createForkArgs:OL,autoCastBoolean:pL,async_set_timeout:Ch,getTableHashAttribute:NL,doesSchemaExist:gL,doesTableExist:IL,stringifyObj:bL,ms_to_time:wL,changeExtension:CL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function YC(e){return e instanceof Error?e:new Error(e)}a(YC,"errorizeMessage");function dt(e){return e==null}a(dt,"isEmpty");function KC(e){return!dt(e)&&(e||e===0||e===""||Lh(e))}a(KC,"isNotEmptyAndHasValue");function Jt(e){return dt(e)||e.length===0||e.size===0}a(Jt,"isEmptyOrZeroLength");function WC(e){if(dt(e))return!0;for(let t=0;t<e.length;t++)if(dt(e[t]))return!0;return!1}a(WC,"arrayHasEmptyValues");function QC(e){if(Jt(e))return!0;for(let t=0;t<e.length;t++)if(Jt(e[t]))return!0;return!1}a(QC,"arrayHasEmptyOrZeroLengthValues");function JC(...e){try{return e.join(rs.sep)}catch{console.error(e)}}a(JC,"buildFolderPath");function Lh(e){return dt(e)?!1:e===!0||e===!1}a(Lh,"isBoolean");function ZC(e){return dt(e)?!1:typeof e=="object"}a(ZC,"isObject");function XC(e){return Jt(e)?$C:e.slice(0,-xC)}a(XC,"stripFileExtension");function zC(e){return dt(e)||e===""||typeof e!="string"?e:bh[e]!==void 0?bh[e]:Uh(e)===!0?Number(e):e}a(zC,"autoCast");function jC(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(jC,"autoCastJSON");function tu(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=tu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=tu(r);s!==r&&(e[t]=s)}return e}else return jC(e)}a(tu,"autoCastJSONDeep");function Uh(e){if(e.startsWith("0.")&&gh(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&gh(e))}a(Uh,"autoCasterIsNumberCheck");async function eL(e){if(Jt(e))throw new Error(`Directory path: ${e} does not exist`);try{await ph.emptyDir(e),await ph.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(eL,"removeDir");function tL(e,t){if(Jt(e)){Ie.info("Invalid current version sent as parameter.");return}if(Jt(t)){Ie.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(tL,"compareVersions");function rL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(rL,"isCompatibleDataVersion");function yh(e){if(dt(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(yh,"escapeRawValue");function sL(e){if(dt(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(sL,"unescapeValue");function nL(e,t){if(dt(e))return Ie.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+kn.EOL}!Jt(s)&&s[0]===";"?r+=" "+s+n+kn.EOL:Jt(s)||(r+=s+"="+n+kn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(nL,"stringifyProps");function iL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(yh(t)),s=Buffer.byteLength(r)>Ih?HC(r,Ih)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(iL,"valueConverter");function Dh(){let e;try{e=kn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Dh,"getHomeDir");function aL(){let e=rs.join(Dh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return vC.existsSync(e)||(e=rs.join(__dirname,"../","hdb_boot_properties.file")),e}a(aL,"getPropsFilePath");function oL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(oL,"timeoutPromise");async function cL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=qC.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(cL,"isPortTaken");function _L(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(_L,"isClusterOperation");function uL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(uL,"sendTransactionToSocketCluster");function lL(e,t){if(!global.hdb_schema[e])return Ta.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ta.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(lL,"checkGlobalSchemaTable");function EL(e,t){if(dt(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(dt(e)||Jt(e)){Ie.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){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(EL,"getClusterUser");function dL(){Nh.parsePromise=function(e,t){return new Promise(function(r,s){Nh.parse(e,{header:!0,transformHeader:Mh,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(dL,"promisifyPapaParse");function Mh(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Mh,"removeBOM");function hL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${FC(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(hL,"createEventPromise");async function SL(e){let t=!0,r=0;do await Ch(VC*r++),(await wh.findPs(e)).length>0&&(t=!1);while(t&&r<kC);if(t)throw new Error(`process ${e} was not started`)}a(SL,"checkProcessRunning");function fL(e,t){let r=Ph(e);if(r)return r;let s=Bh(e,t);if(s)return s}a(fL,"checkSchemaTableExist");function Ph(e){if(!global.hdb_schema[e])return Ta.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ph,"checkSchemaExists");function Bh(e,t){if(!global.hdb_schema[e][t])return Ta.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Bh,"checkTableExists");function TL(){let e=fa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=fa().utc().unix();return e-t}a(TL,"getStartOfTomorrowInSeconds");function mL(){return fa().utc().format("DD-MM-YYYY")}a(mL,"getLimitKey");function RL(e){try{let t=new GC(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){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(RL,"backtickASTSchemaItems");async function AL(e){let t=kn.userInfo();(await wh.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(AL,"stopProcess");function OL(e){return[e]}a(OL,"createForkArgs");function pL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(pL,"autoCastBoolean");function NL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(NL,"getTableHashAttribute");function gL(e){return global?.hdb_schema?.[e]!==void 0}a(gL,"doesSchemaExist");function IL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(IL,"doesTableExist");function bL(e){try{return JSON.stringify(e)}catch{return e}}a(bL,"stringifyObj");function wL(e){let t=fa.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(wL,"ms_to_time");function CL(e,t){let r=rs.basename(e,rs.extname(e));return rs.join(rs.dirname(e),r+t)}a(CL,"changeExtension")});var ss=S((WQ,LL)=>{LL.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 Jh=S((JQ,Qh)=>{"use strict";var ru=require("recursive-iterator"),UL=require("alasql"),su=require("clone"),Hh=b(),{handleHDBError:qh,hdb_errors:yL}=D(),{HDB_ERROR_MSGS:Gh,HTTP_STATUS_CODES:Fh}=yL,DL=["DISTINCT_ARRAY"],Vh=Symbol("validateTables"),nu=Symbol("validateTable"),QQ=Symbol("getAllColumns"),kh=Symbol("validateAllColumns"),ma=Symbol("findColumn"),$h=Symbol("validateOrderBy"),$n=Symbol("validateSegment"),iu=Symbol("validateColumn"),xh=Symbol("setColumnsForTable"),Yh=Symbol("checkColumnsForAsterisk"),Kh=Symbol("validateGroupBy"),Wh=Symbol("hasColumns"),Ra=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Vh](),this[Yh](),this[kh]()}[Vh](){if(this[Wh]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[nu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[nu](t.table)})}}[Wh](){let t=!1,r=new ru(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[nu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw qh(new Error,Gh.SCHEMA_NOT_FOUND(t.databaseid),Fh.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw qh(new Error,Gh.TABLE_NOT_FOUND(t.databaseid,t.tableid),Fh.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=su(s);n.table=su(t),this.attributes.push(n)})}[ma](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)}[Yh](){let t=new ru(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[xh](r.tableid)}[xh](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new UL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kh](){this[$n](this.statement.columns,!1),this[$n](this.statement.joins,!1),this[$n](this.statement.where,!1),this[Kh](this.statement.group,!1),this[$n](this.statement.order,!0)}[$n](t,r){if(!t)return;let s=new ru(t),n=[];for(let{node:i,path:o}of s)!Hh.isEmpty(i)&&!Hh.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$h](i):n.push(this[iu](i)));return n}[Kh](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&DL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=su(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ma](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[ma](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`}[$h](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[ma](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(Ra,"SelectValidator");Qh.exports=Ra});var au=S((ZQ,Zh)=>{"use strict";var Aa=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(Aa,"BridgeMethods");Zh.exports=Aa});var ns=S((jQ,eS)=>{"use strict";var Xh=rt().LMDB_ERRORS_ENUM,XQ=require("lmdb"),ML=Ye(),zQ=require("buffer").Buffer,PL=require("microtime"),{OVERFLOW_MARKER:zh,MAX_SEARCH_KEY_LENGTH:Oa}=ML,jh=["number","string","symbol","boolean","bigint"];function BL(e){if(!e)throw new Error(Xh.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Xh.INVALID_ENVIRONMENT)}a(BL,"validateEnv");function vL(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(vL,"stringifyData");function HL(e){return e instanceof Date?e.valueOf():e}a(HL,"convertKeyValueToWrite");function qL(e){if(e==null)return;if(jh.includes(typeof e))return e.length>Oa?[e.slice(0,Oa)+zh]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];jh.includes(typeof n)&&(n.length>Oa?t.push(n.slice(0,Oa)+zh):t.push(n))}}return t}a(qL,"getIndexedValues");function GL(){let e=PL.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(GL,"getMicroTime");eS.exports={validateEnv:BL,stringifyData:vL,convertKeyValueToWrite:HL,getMicroTime:GL,getIndexedValues:qL}});var rS=S((e1,tS)=>{"use strict";var pa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(pa,"DBIDefinition");tS.exports=pa});var nS=S((t1,sS)=>{"use strict";var Na=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Na,"OpenDBIObject");sS.exports=Na});var aS=S((r1,iS)=>{"use strict";var ga=class{constructor(t,r,s,n,i=!1,o=!1,c=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,c!==void 0&&(this.overlappingSync=c)}};a(ga,"OpenEnvironmentObject");iS.exports=ga});var Ee=S((s1,oS)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};oS.exports={validateObject:FL,validateObjectAsync:VL,validateBySchema:kL};function FL(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(FL,"validateObject");async function VL(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(VL,"validateObjectAsync");function kL(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(kL,"validateBySchema")});var cu=S((n1,_S)=>{"use strict";var $L=require("fs-extra"),F=require("joi"),xL=require("os"),{boolean:ye,string:_r,number:Zt,array:ou}=F.types(),cS=require("path"),YL=I(),Ia=b(),KL=Ee(),WL="log",QL="custom_functions",JL="Invalid logging.rotation.maxSize unit. Available units are G, M or K",ZL="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",XL="rootPath config parameter is undefined",zL="clustering.enabled config parameter is undefined",Ur=Zt.min(0).required(),ba=ou.items({host:_r.required(),port:Ur}).empty(null),xn;_S.exports={configValidator:jL,routesValidator:iU,route_constraints:ba};function jL(e){if(xn=e.rootPath,Ia.isEmpty(xn))throw XL;let t=ye.required(),r=F.valid("production","development").required(),s=Zt.min(1).max(1e3).empty(null).default(sU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nU),i=F.custom(tU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(Ia.isEmpty(c))throw zL;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:Ur,routes:ba}).required()}).required(),leafNodes:F.object({network:F.object({port:Ur}).required()}).required(),network:F.object({port:Ur}).required()}).required(),leafServer:F.object({network:F.object({port:Ur,routes:ba}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:ou.required(),headersTimeout:Zt.min(1).required(),https:ye.required(),keepAliveTimeout:Zt.min(1).required(),port:Ur,timeout:Zt.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:Ur})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:_r.required(),maxSize:_r.custom(rU).required(),retain:Zt.min(0).required(),rotate:ye.required(),rotateInterval:_r.required(),rotateModule:ye.required(),timezone:_r.required(),workerInterval:Zt.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:ou.required(),headersTimeout:Zt.min(1).required(),https:ye.required(),keepAliveTimeout:Zt.min(1).required(),port:Ur,timeout:Zt.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(jL,"configValidator");function eU(e){return $L.existsSync(e)?null:`Specified path ${e} does not exist.`}a(eU,"doesPathExist");function tU(e,t){if(e===null)return;F.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=eU(e);return r?t.message(r):e}a(tU,"validatePemFile");function rU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(JL);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(ZL)}a(rU,"validateRotationMaxSize");function sU(e,t){let r=t.state.path.join("."),s=xL.cpus().length,n=s-1;return n<=2&&(n=2),YL.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(sU,"setDefaultThreads");function nU(e,t){if(!Ia.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Ia.isEmpty(xn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return cS.join(xn,QL);case"logging.root":return cS.join(xn,WL);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(nU,"setDefaultRoot");function iU(e){let t=F.object({routes:ba});return KL.validateBySchema({routes:e},t)}a(iU,"routesValidator")});var ur=S((i1,fS)=>{"use strict";var re=T(),gt=b(),Ke=I(),{configValidator:aU,routesValidator:uS}=cu(),qt=require("fs-extra"),oU=require("yaml"),ks=require("path"),cU=require("is-number"),La=require("properties-reader"),_U=require("lodash"),{handleHDBError:uU}=D(),{HTTP_STATUS_CODES:lU,HDB_ERROR_MSGS:wa}=rt(),{PACKAGE_ROOT:EU}=T(),dU="Unable to get config value because config is uninitialized",hU="Config successfully initialized",SU="Error backing up config file",fU="Empty parameter sent to getConfigValue",lS=ks.join(EU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),TU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ca,nt;fS.exports={createConfigFile:mU,getDefaultConfig:RU,getConfigValue:ES,initConfig:dS,flattenConfig:is,updateConfigValue:hS,updateConfigObject:AU,getConfiguration:OU,setConfiguration:pU,readConfigFile:lu,getClusteringRoutes:NU,initOldConfig:SS,getConfigFromFile:gU};function mU(e){let t=$s(lS);Ca=is(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=_u(o,e[i]);try{t.setIn([...c],_)}catch(u){Ke.error(u)}}}uu(t);let r=t.toJSON();nt=is(r);let s=t.getIn(["rootPath"]),n=ks.join(s,re.HDB_CONFIG_FILE);qt.createFileSync(n),qt.writeFileSync(n,String(t)),Ke.trace(`Config file written to ${n}`)}a(mU,"createConfigFile");function RU(e){if(Ca===void 0){let r=$s(lS);Ca=is(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ca[t.toLowerCase()]}a(RU,"getDefaultConfig");function ES(e){if(gt.isEmpty(e)){Ke.error(fU);return}if(nt===void 0){Ke.trace(dU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return nt[t.toLowerCase()]}a(ES,"getConfigValue");function dS(e=!1){if(nt===void 0||e){let t=gt.getPropsFilePath();try{qt.accessSync(t,qt.constants.F_OK|qt.constants.R_OK)}catch(o){throw Ke.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=La(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{SS(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=$s(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Ke.trace(`HarperDB config file not found at ${s}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Ke.error(o),new Error(`Error reading HarperDB config file at ${s}`)}uu(n);let i=n.toJSON();nt=is(i),Ke.trace(hU)}}a(dS,"initConfig");function uu(e){let t=e.toJSON(),r=aU(t);if(r.error)throw wa.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(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(uu,"validateConfig");function AU(e,t){nt===void 0&&(nt={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Ke.trace(`Unable to update config object because config param '${e}' does not exist`);return}nt[r.toLowerCase()]=t}a(AU,"updateConfigObject");function hS(e,t,r=void 0,s=!1,n=!1){nt===void 0&&dS();let i=ES(re.CONFIG_PARAM_MAP.hdb_root),o=ks.join(i,re.HDB_CONFIG_FILE),c=$s(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=_u(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),h=_u(E,r[l]);try{c.setIn([...d],h)}catch(m){Ke.error(m)}}}uu(c);let _=c.getIn(["rootPath"]),u=ks.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=ks.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);qt.copySync(o,l),Ke.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Ke.error(SU),Ke.error(l)}qt.writeFileSync(u,String(c)),n&&(nt=is(c.toJSON())),Ke.trace(`Config parameter: ${e} updated with value: ${t}`)}a(hS,"updateConfigValue");function is(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=is(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(is,"flattenConfig");function _u(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.CONFIG_PARAMS.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(cU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||gt.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 gt.autoCast(t)}a(_u,"castConfigValue");function OU(){let e=gt.getPropsFilePath(),r=La(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return $s(r).toJSON()}a(OU,"getConfiguration");async function pU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return hS(void 0,void 0,n,!0),TU}catch(i){throw typeof i=="string"||i instanceof String?uU(i,i,lU.BAD_REQUEST,void 0,void 0,!0):i}}a(pU,"setConfiguration");function lu(){let e=gt.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(n){throw Ke.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=La(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return $s(r).toJSON()}a(lu,"readConfigFile");function $s(e){return oU.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a($s,"parseYamlDoc");function NU(){let e=lu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=gt.isEmptyOrZeroLength(t)?[]:t;let r=uS(t);if(r)throw wa.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=gt.isEmptyOrZeroLength(s)?[]:s;let n=uS(s);if(n)throw wa.CONFIG_VALIDATION(n.message);if(!gt.isEmptyOrZeroLength(s)&&!gt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!gt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw wa.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(NU,"getClusteringRoutes");function SS(e){let t=La(e);nt={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(gt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?nt[n]=ks.dirname(s):nt[n]=s}return nt}a(SS,"initOldConfig");function gU(e){let t=lu();return _U.get(t,e.replaceAll("_","."))}a(gU,"getConfigFromFile")});var Y=S((a1,mS)=>{"use strict";var Eu=require("fs-extra"),Xt=require("path"),IU=require("os"),bU=require("properties-reader"),Yn=I(),xs=b(),M=T(),Ua=ur(),wU="Error initializing environment manager",ya="BOOT_PROPS_FILE_PATH",TS=!1,CU={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},lr={};mS.exports={BOOT_PROPS_FILE_PATH:ya,getHdbBasePath:LU,setHdbBasePath:UU,get:yU,initSync:MU,setProperty:x,initTestEnvironment:PU};function LU(){return lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(LU,"getHdbBasePath");function UU(e){lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(UU,"setHdbBasePath");function yU(e){let t=Ua.getConfigValue(e);return t===void 0?lr[e]:t}a(yU,"get");function x(e,t){CU[e]&&(lr[e]=t),Ua.updateConfigObject(e,t)}a(x,"setProperty");function DU(){let e;try{e=xs.getPropsFilePath(),Eu.accessSync(e,Eu.constants.F_OK|Eu.constants.R_OK),TS=!0;let t=bU(e);return lr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),lr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),lr[ya]=e,!0}catch{return Yn.trace(`Environment manager found no properties file at ${e}`),!1}}a(DU,"doesPropFileExist");function MU(e=!1){try{(TS||DU())&&(Ua.initConfig(e),lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ua.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Yn.error(wU),Yn.error(t),console.error(t),process.exit(1)}}a(MU,"initSync");function PU(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,_=Xt.join(__dirname,"../../","unitTests");lr[ya]=Xt.join(_,"hdb_boot_properties.file"),x(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Xt.join(_,"settings.test")),x(M.HDB_SETTINGS_NAMES.INSTALL_USER,IU.userInfo().username),x(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Xt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.HDB_SETTINGS_NAMES.CERT_KEY,Xt.join(_,"envDir","utility","keys","certificate.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Xt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Xt.join(_,"envDir","utility","keys","certificate.pem")),x(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),x(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Xt.join(_,"envDir","log")),x(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),x(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),x(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Xt.join(_,"envDir")),x(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,xs.isEmpty(n)?!0:n),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,xs.isEmpty(n)?!0:n),x(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),x(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,xs.isEmpty(i)?!1:i),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,xs.isEmpty(i)?!1:i),x(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),x(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),x(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Xt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),x(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,xs.isEmpty(c)?!1:c),o&&(x("CORS_ACCESSLIST",o),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(x(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(x(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(x(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ya}. Please check your boot props and settings files`;Yn.fatal(r),Yn.error(t)}}a(PU,"initTestEnvironment")});var z=S((c1,US)=>{"use strict";var du=require("lmdb"),It=require("fs-extra"),Gt=require("path"),Ma=ns(),RS=I(),De=rt().LMDB_ERRORS_ENUM,Pa=rS(),hu=nS(),AS=aS(),yr=Ye(),o1=T(),Kn=Y();Kn.initSync();var OS=Kn.get("STORAGE_WRITEASYNC")===!0||Kn.get("STORAGE_WRITEASYNC")==="true"||Kn.get("STORAGE_WRITEASYNC")==="TRUE",pS=Kn.get("STORAGE_OVERLAPPINGSYNC"),NS=1024*1024*1024,gS=1e4,IS=1e3,Ft=yr.INTERNAL_DBIS_NAME,bS=yr.DBI_DEFINITION_NAME,BU="data.mdb",vU="lock.mdb",Wn=".mdb",HU="-lock",Da=class{constructor(t,r,s=!1){this.dbi=bt(t,r),this.key_type=this.dbi[yr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[yr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new du.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Da,"TransactionCursor");function Su(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(Su,"pathEnvNameValidation");async function fu(e,t,r=!0){try{await It.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Gt.join(e,t+Wn);return await It.access(s,It.constants.R_OK|It.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await It.access(Gt.join(e,t,BU),It.constants.R_OK|It.constants.F_OK),Gt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(fu,"validateEnvironmentPath");function Ba(e,t){if(Ma.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ba,"validateEnvDBIName");async function qU(e,t,r=!1,s=!1){Su(e,t),t=t.toString();try{return await fu(e,t,s),Tu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Gt.join(e,t);await It.mkdirp(s?i:e);let o=new AS(s?i:i+Wn,NS,gS,IS,!1,OS,pS),c=du.open(o);c.dbis=Object.create(null);let _=new hu(!1);c.openDB(Ft,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=mu(e,t,r);return c[yr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(qU,"createEnvironment");async function GU(e,t,r,s=!0){let n=await Tu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await It.access(Gt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(GU,"copyEnvironment");async function Tu(e,t,r=!1){Su(e,t),t=t.toString();let s=mu(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 fu(e,t),i=Gt.join(e,t+Wn),o=n!=i,c=new AS(n,NS,gS,IS,o,OS,pS),_=du.open(c);_.dbis=Object.create(null);let u=CS(_);for(let l=0;l<u.length;l++)bt(_,u[l]);return _[yr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Tu,"openEnvironment");async function FU(e,t,r=!1){Su(e,t),t=t.toString();let s=Gt.join(e,t+Wn),n=await fu(e,t);if(global.lmdb_map!==void 0){let i=mu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await wS(o),delete global.lmdb_map[i]}}await It.remove(n),await It.remove(n===s?n+HU:Gt.join(Gt.dirname(n),vU))}a(FU,"deleteEnvironment");async function wS(e){Ma.validateEnv(e);let t=e[yr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(wS,"closeEnvironment");function mu(e,t,r=!1){let n=`${Gt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(mu,"getCachedEnvironmentName");function VU(e){Ma.validateEnv(e);let t=Object.create(null),r=bt(e,Ft);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ft)try{t[s]=Object.assign(new Pa,n)}catch{RS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VU,"listDBIDefinitions");function CS(e){Ma.validateEnv(e);let t=[],r=bt(e,Ft);for(let{key:s}of r.getRange({start:!1}))s!==Ft&&t.push(s);return t}a(CS,"listDBIs");function kU(e,t){let s=bt(e,Ft).getEntry(t),n=new Pa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{RS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(kU,"getDBIDefinition");function LS(e,t,r,s=!1){if(Ba(e,t),t=t.toString(),t===Ft)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return bt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new hu(r,s===!0),o=e.openDB(t,i),c=new Pa(r===!0,s);return o[bS]=c,bt(e,Ft).putSync(t,c),e.dbis[t]=o,o}throw n}}a(LS,"createDBI");function bt(e,t){if(Ba(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ft?r=kU(e,t):r=new Pa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new hu(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(De.DBI_DOES_NOT_EXIST):n}return s[bS]=r,e.dbis[t]=s,s}a(bt,"openDBI");function $U(e,t){Ba(e,t),t=t.toString();let r=bt(e,t),s=r.getStats();return r[yr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a($U,"statDBI");async function xU(e,t){try{let r=Gt.join(e,t+Wn);return(await It.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(xU,"environmentDataSize");function YU(e,t){if(Ba(e,t),t=t.toString(),t===Ft)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);bt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],bt(e,Ft).removeSync(t)}a(YU,"dropDBI");function KU(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{bt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)LS(e,n,n!==t,n===t);else throw i}}}a(KU,"initializeDBIs");US.exports={openDBI:bt,openEnvironment:Tu,createEnvironment:qU,listDBIs:CS,listDBIDefinitions:VU,createDBI:LS,dropDBI:YU,statDBI:$U,deleteEnvironment:FU,initializeDBIs:KU,TransactionCursor:Da,environmentDataSize:xU,copyEnvironment:GU,closeEnvironment:wS}});var DS=S((_1,yS)=>{"use strict";var va=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(va,"InsertRecordsResponseObject");yS.exports=va});var PS=S((u1,MS)=>{"use strict";var Ha=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(Ha,"UpdateRecordsResponseObject");MS.exports=Ha});var vS=S((l1,BS)=>{"use strict";var qa=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(qa,"UpsertRecordsResponseObject");BS.exports=qa});var Ys=S((S1,qS)=>{"use strict";var WU=z(),QU=DS(),JU=PS(),ZU=vS(),Jn=ns(),Qn=rt().LMDB_ERRORS_ENUM,XU=Ye(),Dr=T(),zU=b(),jU=require("uuid"),E1=require("lmdb"),{handleHDBError:ey,hdb_errors:ty}=D(),{OVERFLOW_MARKER:d1,MAX_SEARCH_KEY_LENGTH:h1}=XU,Ru=Dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,as=Dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ry(e,t,r,s,n=!0){Nu(e,t,r,s),Au(e,t,r);let i=new QU,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];HS(u,!0,n);let l=sy(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Ou(o,c,s,i)}a(ry,"insertRecords");function sy(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 u=c([[{}]]);Array.isArray(u)&&(c=u[0][Dr.FUNC_VAL],s[o]=c)}let _=Jn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[as])})}a(sy,"insertRecord");function ny(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(ny,"removeSkippedRecords");function HS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[as]))&&(e[as]=s),t===!0?(r===!0||!Number.isInteger(e[Ru]))&&(e[Ru]=s):delete e[Ru]}a(HS,"setTimestamps");function Au(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),WU.initializeDBIs(e,t,r)}a(Au,"initializeTransaction");async function iy(e,t,r,s,n=!0){Nu(e,t,r,s),Au(e,t,r);let i=new JU,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=pu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Ou(c,_,s,i,o)}a(iy,"updateRecords");async function ay(e,t,r,s,n=!0){try{Nu(e,t,r,s)}catch(_){throw ey(_,_.message,ty.HTTP_STATUS_CODES.BAD_REQUEST)}Au(e,t,r);let i=new ZU,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;zU.isEmpty(u[t])?(l=jU.v4(),u[t]=l):l=u[t];let E=pu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Ou(o,c,s,i)}a(ay,"upsertRecords");async function Ou(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Jn.getMicroTime(),ny(r,n),s}a(Ou,"finalizeWrite");function pu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(HS(r,!l,o),Number.isInteger(r[as])&&u[as]>r[as])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],C=e.dbis[m];if(C===void 0)continue;let L=u[m];if(typeof R=="function"){let X=R([[u]]);Array.isArray(X)&&(R=X[0][Dr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=Jn.getIndexedValues(L);if(B)for(let X=0,V=B.length;X<V;X++)C.remove(B[X],s);if(B=Jn.getIndexedValues(R),B)for(let X=0,V=B.length;X<V;X++)C.put(B[X],s)}let h=Object.assign({},u,r);c.put(s,h,h[as])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:pu(e,t,r,s,n,i,o))}a(pu,"updateUpsertRecord");function oy(e,t,r){if(Jn.validateEnv(e),t===void 0)throw new Error(Qn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Qn.WRITE_ATTRIBUTES_REQUIRED):new Error(Qn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oy,"validateBasic");function Nu(e,t,r,s){if(oy(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Qn.RECORDS_REQUIRED):new Error(Qn.RECORDS_MUST_BE_ARRAY)}a(Nu,"validateWrite");qS.exports={insertRecords:ry,updateRecords:iy,upsertRecords:ay}});var te=S((f1,FS)=>{"use strict";var gu=T(),Ks=Y(),Iu=require("path");Ks.initSync();var Ga,Fa,Va;function GS(){if(Ga!==void 0)return Ga;if(Ks.getHdbBasePath()!==void 0)return Ga=Iu.join(Ks.getHdbBasePath(),gu.SCHEMA_DIR_NAME),Ga}a(GS,"getBaseSchemaPath");function cy(){if(Fa!==void 0)return Fa;if(Ks.getHdbBasePath()!==void 0)return Fa=Iu.join(GS(),gu.SYSTEM_SCHEMA_NAME),Fa}a(cy,"getSystemSchemaPath");function _y(){if(Va!==void 0)return Va;if(Ks.getHdbBasePath()!==void 0)return Va=Iu.join(Ks.getHdbBasePath(),gu.TRANSACTIONS_DIR_NAME),Va}a(_y,"getTransactionAuditStorePath");FS.exports={getBaseSchemaPath:GS,getSystemSchemaPath:cy,getTransactionAuditStorePath:_y}});var Er=S((T1,$S)=>{"use strict";var kS=b(),VS=T(),$a=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bu=require("joi"),ka={schema_format:{pattern:$a,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},uy=bu.alternatives(bu.string().min(1).max(ka.schema_length.maximum).pattern($a).messages({"string.pattern.base":"{:#label} "+ka.schema_format.message}),bu.number()).required();function ly(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ka.schema_length.maximum?`'${e}' maximum of 250 characters`:$a.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ly,"checkValidTable");function Ey(e,t){return kS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Ey,"validateSchemaExists");function dy(e,t){let r=t.state.ancestors[0].schema;return kS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(dy,"validateTableExists");function hy(e,t){return e.toLowerCase()===VS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${VS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(hy,"validateSchemaName");$S.exports={common_validators:ka,schema_regex:$a,hdb_schema_table:uy,validateSchemaExists:Ey,validateTableExists:dy,validateSchemaName:hy,checkValidTable:ly}});var xa=S((m1,xS)=>{var{common_validators:Mr}=Er(),Zn=Ee(),Vt="is required",Z={schema:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},table:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},attribute:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},hash_attribute:{presence:!0,format:Mr.schema_format,length:Mr.schema_length}};function Xn(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(Xn,"makeAttributesStrings");function Sy(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(Sy,"schema_object");function fy(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(fy,"table_object");function Ty(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Vt},Zn.validateObject(e,Z)}a(Ty,"create_table_object");function my(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence={message:Vt},Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(my,"attribute_object");function Ry(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(Ry,"describe_table");function Ay(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(Ay,"validateTableResidence");xS.exports={schema_object:Sy,create_table_object:Ty,table_object:fy,attribute_object:my,describe_table:Ry,validateTableResidence:Ay}});var KS=S((R1,YS)=>{"use strict";var Oy=require("uuid"),Ya=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Oy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ya,"CreateAttributeObject");YS.exports=Ya});var Wa=S((A1,WS)=>{"use strict";var py=KS(),Ka=class extends py{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Ka,"LMDBCreateAttributeObject");WS.exports=Ka});var JS=S((O1,QS)=>{"use strict";QS.exports=gy;var Ny="inserted";function gy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ny?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(gy,"returnObject")});var Qa=S((p1,XS)=>{"use strict";var Iy=T(),wu=z(),by=Ys(),{getSystemSchemaPath:wy,getBaseSchemaPath:Cy}=te(),Ly=require("path"),Uy=ss(),yy=xa(),Dy=Wa(),My=JS(),{handleHDBError:Py,hdb_errors:By}=D(),vy=b(),Cu=Uy.hdb_attribute,ZS=[];for(let e=0;e<Cu.attributes.length;e++)ZS.push(Cu.attributes[e].attribute);var Hy="inserted";XS.exports=qy;async function qy(e){let t=yy.attribute_object(e);if(t)throw Py(new Error,t.message,By.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vy.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new Dy(e.schema,e.table,e.attribute,e.id);try{let n=await wu.openEnvironment(Ly.join(Cy(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);wu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await wu.openEnvironment(wy(),Iy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await by.insertRecords(i,Cu.hash_attribute,ZS,[s]);return My(Hy,o,{records:[s]},c)}catch(n){throw n}}a(qy,"lmdbCreateAttribute")});var Uu=S((N1,jS)=>{var{hdb_schema_table:zS}=Er(),Gy=Ee(),Lu=require("joi"),Fy={undefined:"undefined",null:"null"},Vy=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||Fy[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"),ky=Lu.object({schema:zS,table:zS,records:Lu.array().items(Lu.object().custom(Vy)).required()});jS.exports=function(e){return Gy.validateBySchema(e,ky)}});var Ja=S((I1,tf)=>{"use strict";var dr=b(),ef=I(),g1=Uu();tf.exports=$y;function $y(e){if(dr.isEmpty(e))throw new Error("invalid update parameters defined.");if(dr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(dr.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(dr.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&&dr.isEmptyOrZeroLength(o[r]))throw ef.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(!dr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ef.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`);!dr.isEmpty(o[r])&&o[r]!==""&&s.has(dr.autoCast(o[r]))&&(o.skip=!0),s.add(dr.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($y,"insertUpdateValidate")});var zn=S((b1,rf)=>{"use strict";var xy=T().OPERATIONS_ENUM,Za=class{constructor(t,r,s,n,i=void 0){this.operation=xy.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Za,"InsertObject");rf.exports=Za});var za=S((C1,sf)=>{"use strict";var w1=zn(),Xa=T(),Du=b(),yu=I(),Yy=require("uuid"),{handleHDBError:jn,hdb_errors:Ky}=D(),{HDB_ERROR_MSGS:ei,HTTP_STATUS_CODES:ti}=Ky;sf.exports=Wy;function Wy(e,t,r){for(let n=0;n<t.length;n++)Qy(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Jy(i,r,e.operation)}}a(Wy,"processRows");function Qy(e){if(Buffer.byteLength(String(e))>Xa.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw jn(new Error,ei.ATTR_NAME_LENGTH_ERR(e),ti.BAD_REQUEST,void 0,void 0,!0);if(Du.isEmptyOrZeroLength(e)||Du.isEmpty(e.trim()))throw jn(new Error,ei.ATTR_NAME_NULLISH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}a(Qy,"validateAttribute");function Jy(e,t,r){if(!e.hasOwnProperty(t)||Du.isEmptyOrZeroLength(e[t])){if(r===Xa.OPERATIONS_ENUM.INSERT||r===Xa.OPERATIONS_ENUM.UPSERT){e[t]=Yy.v4();return}throw yu.error("Update transaction aborted due to record with no hash value:",e),jn(new Error,ei.RECORD_MISSING_HASH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Xa.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yu.error(e),jn(new Error,ei.HASH_VAL_LENGTH_ERR,ti.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw yu.error(e),jn(new Error,ei.INVALID_FORWARD_SLASH_IN_HASH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}a(Jy,"validateHash")});var af=S((L1,nf)=>{"use strict";var ja=class{constructor(t,r){this.type=t,this.message=r}};a(ja,"IPCEventObject");nf.exports=ja});var os=S((U1,of)=>{"use strict";var Zy=I(),Mu=b(),Xy=T(),{IPC_ERRORS:ri}=rt();of.exports={sendIpcEvent:zy,validateEvent:jy,SchemaEventMsg:eD,UserEventMsg:tD};function zy(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):Zy.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(zy,"sendIpcEvent");function jy(e){if(typeof e!="object")return ri.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Mu.isEmpty(e.type))return ri.MISSING_TYPE;if(!e.hasOwnProperty("message")||Mu.isEmpty(e.message))return ri.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Mu.isEmpty(e.message.originator))return ri.MISSING_ORIGIN;if(Xy.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ri.INVALID_EVENT(e.type)}a(jy,"validateEvent");function eD(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(eD,"SchemaEventMsg");function tD(e){this.originator=e}a(tD,"UserEventMsg")});var Ws=S((D1,lf)=>{"use strict";var cf=T(),y1=b(),eo=I(),_f=af(),{sendIpcEvent:uf}=os();function rD(e){try{eo.trace("signalSchemaChange called with message:",e);let t=new _f(cf.IPC_EVENT_TYPES.SCHEMA,e);uf(t)}catch(t){eo.error(t)}}a(rD,"signalSchemaChange");function sD(e){try{eo.trace("signalUserChange called with message:",e);let t=new _f(cf.IPC_EVENT_TYPES.USER,e);uf(t)}catch(t){eo.error(t)}}a(sD,"signalUserChange");lf.exports={signalSchemaChange:rD,signalUserChange:sD}});var to=S((M1,df)=>{"use strict";var Ef=b(),nD=T(),iD=I(),aD=Qa(),oD=Wa(),cD=Ws(),{SchemaEventMsg:_D}=os(),uD="already exists in";df.exports=lD;async function lD(e,t,r){try{if(Ef.isEmptyOrZeroLength(r))return r;let s=[];Ef.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 ED(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(lD,"lmdbCheckForNewAttributes");async function ED(e,t,r,s){let n=new oD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await dD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(uD))iD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(ED,"createNewAttribute");async function dD(e){let t;try{return t=await aD(e),cD.signalSchemaChange(new _D(process.pid,nD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(dD,"createAttribute")});var Qs=S((P1,hf)=>{"use strict";var ro=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(ro,"LMDBTransactionObject");hf.exports=ro});var ff=S((B1,Sf)=>{"use strict";var hD=Qs(),SD=T().OPERATIONS_ENUM,so=class extends hD{constructor(t,r,s,n,i=void 0){super(SD.INSERT,r,s,n,i),this.records=t}};a(so,"LMDBInsertTransactionObject");Sf.exports=so});var mf=S((v1,Tf)=>{"use strict";var fD=Qs(),TD=T().OPERATIONS_ENUM,no=class extends fD{constructor(t,r,s,n,i,o=void 0){super(TD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(no,"LMDBUpdateTransactionObject");Tf.exports=no});var Af=S((H1,Rf)=>{"use strict";var mD=Qs(),RD=T().OPERATIONS_ENUM,io=class extends mD{constructor(t,r,s,n,i,o=void 0){super(RD.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(io,"LMDBUpsertTransactionObject");Rf.exports=io});var pf=S((q1,Of)=>{"use strict";var AD=Qs(),OD=T().OPERATIONS_ENUM,ao=class extends AD{constructor(t,r,s,n,i=void 0){super(OD.DELETE,s,n,t,i),this.original_records=r}};a(ao,"LMDBDeleteTransactionObject");Of.exports=ao});var si=S((G1,bf)=>{"use strict";var pD=require("path"),Nf=z(),ND=ff(),gD=mf(),ID=Af(),bD=pf(),Js=Ye(),gf=b(),{CONFIG_PARAMS:wD}=T(),If=Y();If.initSync();var oo=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:CD}=te();bf.exports=LD;async function LD(e,t){if(If.get(wD.LOGGING_AUDITLOG)===!1)return;let r=pD.join(CD(),e.schema.toString()),s=await Nf.openEnvironment(r,e.table,!0),n=UD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Nf.initializeDBIs(s,Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Js.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),gf.isEmpty(n.user_name)||s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(LD,"writeTransaction");function UD(e,t){let r=gf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===oo.INSERT)return new ND(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.UPDATE)return new gD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.UPSERT)return new ID(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.DELETE)return new bD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UD,"createTransactionObject")});var Pu=S((V1,wf)=>{"use strict";var yD=Ja(),F1=zn(),Zs=T(),DD=za(),MD=Ys().insertRecords,PD=z(),BD=require("path"),vD=I(),HD=to(),{getBaseSchemaPath:qD}=te(),GD=si();wf.exports=FD;async function FD(e){try{let{schema_table:t,attributes:r}=yD(e);DD(e,r,t.hash_attribute),e.schema!==Zs.SYSTEM_SCHEMA_NAME&&(r.includes(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await HD(e.hdb_auth_header,t,r),n=BD.join(qD(),e.schema.toString()),i=await PD.openEnvironment(n,e.table),o=await MD(i,t.hash_attribute,r,e.records,e[Zs.CLUSTERING_FLAG]!==!0);try{await GD(e,o)}catch(c){vD.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(FD,"lmdbCreateRecords")});var Uf=S((k1,Lf)=>{"use strict";var Cf=T(),VD=Pu(),kD=zn(),$D=require("fs-extra"),xD=require("path"),{getBaseSchemaPath:YD}=te();Lf.exports=KD;async function KD(e){let t=[{name:e.schema,createddate:Date.now()}],r=new kD(Cf.SYSTEM_SCHEMA_NAME,Cf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VD(r),await $D.mkdirp(xD.join(YD(),e.schema.toString()))}a(KD,"lmdbCreateSchema")});var Df=S(($1,yf)=>{"use strict";var co=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(co,"DeleteRecordsResponseObject");yf.exports=co});var Hu=S((W1,Bf)=>{"use strict";var Mf=z(),Bu=ns(),vu=rt().LMDB_ERRORS_ENUM,WD=Ye(),Pf=I(),x1=b(),QD=require("lmdb"),JD=Df(),{OVERFLOW_MARKER:Y1,MAX_SEARCH_KEY_LENGTH:K1}=WD;async function ZD(e,t,r){if(Bu.validateEnv(e),t===void 0)throw new Error(vu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(vu.IDS_REQUIRED):new Error(vu.IDS_MUST_BE_ARRAY);try{let s=Mf.listDBIs(e);Mf.initializeDBIs(e,t,s);let n=new JD,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,QD.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let C=s[R];if(!h.hasOwnProperty(C)||C===t)continue;let L=e.dbis[C],B=h[C];if(B!=null)try{let X=Bu.getIndexedValues(B);if(X)for(let V=0,Q=X.length;V<Q;V++)L.remove(X[V],i)}catch{Pf.warn(`cannot delete from attribute: ${C}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(h)}catch(h){Pf.warn(h),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Bu.getMicroTime(),n}catch(s){throw s}}a(ZD,"deleteRecords");Bf.exports={deleteRecords:ZD}});var ni=S((Q1,Hf)=>{"use strict";var Xs=b(),XD=Hu(),zD=z(),jD=require("path"),{getBaseSchemaPath:eM}=te(),tM=si(),rM=I();Hf.exports=sM;async function sM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xs.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xs.isEmptyOrZeroLength(e.hash_values)&&!Xs.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];Xs.isEmpty(_)||e.hash_values.push(_)}}if(Xs.isEmptyOrZeroLength(e.hash_values))return vf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xs.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=jD.join(eM(),e.schema.toString()),i=await zD.openEnvironment(n,e.table),o=await XD.deleteRecords(i,s,e.hash_values);try{t===!0&&await tM(e,o)}catch(c){rM.error(`unable to write transaction due to ${c.message}`)}return vf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(sM,"lmdbDeleteRecords");function vf(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(vf,"createDeleteResponse")});var Gu=S((Z1,qf)=>{"use strict";var nM=T(),J1=ns();function qu(e,t){let r=Object.create(null);if(t.length===1&&nM.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(qu,"parseRow");function iM(e,t,r,s){let n=qu(r,e);s.push(n)}a(iM,"searchAll");function aM(e,t,r,s){let n=qu(r,e);s[t]=n}a(aM,"searchAllToMap");function oM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(oM,"iterateDBI");function cs(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(cs,"pushResults");function cM(e,t,r,s,n,i){t.toString().endsWith(e)&&cs(t,r,s,n,i)}a(cM,"endsWith");function _M(e,t,r,s,n,i){t.toString().includes(e)&&cs(t,r,s,n,i)}a(_M,"contains");function uM(e,t,r,s,n,i){t>e&&cs(t,r,s,n,i)}a(uM,"greaterThanCompare");function lM(e,t,r,s,n,i){t>=e&&cs(t,r,s,n,i)}a(lM,"greaterThanEqualCompare");function EM(e,t,r,s,n,i){t<e&&cs(t,r,s,n,i)}a(EM,"lessThanCompare");function dM(e,t,r,s,n,i){t<=e&&cs(t,r,s,n,i)}a(dM,"lessThanEqualCompare");qf.exports={parseRow:qu,searchAll:iM,searchAllToMap:aM,iterateDBI:oM,endsWith:cM,contains:_M,greaterThanCompare:uM,greaterThanEqualCompare:lM,lessThanCompare:EM,lessThanEqualCompare:dM,pushResults:cs}});var zs=S((j1,xf)=>{"use strict";var wt=z(),hM=I(),ht=ns(),Pr=Ye(),ce=rt().LMDB_ERRORS_ENUM,X1=b(),SM=T(),kt=Gu(),z1=require("lmdb"),{OVERFLOW_MARKER:Gf,MAX_SEARCH_KEY_LENGTH:fM}=Pr,ii={lazy:!0};function Ff(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Fu(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Ff,"iterateFullIndex");function ai(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=Fu(e,t,r);E[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,C=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:h,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:C}))kt.pushResults(d(L,B),B,l,t,r);return l}a(ai,"iterateRangeBetween");function Fu(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(Gf)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Pr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,ii)[r]}return n}}a(Fu,"getOverflowCheck");function TM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);_o(r),r=oi(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))kt.searchAll(r,_,u,o);return o}a(TM,"searchAll");function mM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return _o(r),r=oi(e,r),Ff(e,t,t,kt.searchAllToMap.bind(null,r),s,n,i)}a(mM,"searchAllToMap");function RM(e,t,r=!1,s=void 0,n=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Ff(e,void 0,t,kt.iterateDBI,r,s,n)}a(RM,"iterateDBI");function AM(e,t){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(AM,"countAll");function OM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=wt.openDBI(e,r);s=ht.convertKeyValueToWrite(s);let _=[[],[]];if(c[Pr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,ii);u!==void 0&&kt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))kt.pushResults(s,u,_,t,r);return _}a(OM,"equals");function pM(e,t,r){return Br(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(pM,"count");function NM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ht.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))kt.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))kt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(NM,"startsWith");function gM(e,t,r,s,n=!1,i=void 0,o=void 0){return Vf(e,t,r,s,n,i,o,!0)}a(gM,"endsWith");function Vf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){Br(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Fu(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let h=d.toString();if(h.endsWith(Gf))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?h.endsWith(s):h.includes(s))if(u[Pr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,h){if(o>0){o--;return}i!==0&&(kt.pushResults(d,h,_,t,r),i--)}return a(E,"found_match"),_}a(Vf,"contains");function IM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ai(e,t,r,s,_,n,i,o,!0,!1)}a(IM,"greaterThan");function bM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ai(e,t,r,s,_,n,i,o,!1,!1)}a(bM,"greaterThanEqual");function wM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ai(e,t,r,_,s,n,i,o,!1,!0)}a(wM,"lessThan");function CM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ai(e,t,r,_,s,n,i,o,!1,!1)}a(CM,"lessThanEqual");function LM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ht.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=ht.convertKeyValueToWrite(s),n=ht.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ai(e,t,r,s,n,i,o,c)}a(LM,"between");function UM(e,t,r,s){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(_o(r),r=oi(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?ii:void 0);return i&&(n=kt.parseRow(i,r)),n}a(UM,"searchByHash");function yM(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,ii)===void 0&&(s=!1),s}a(yM,"checkHashExists");function DM(e,t,r,s,n=[]){$f(e,t,r,s,n);let i=kf(e,t,r,s,n);return Object.values(i)}a(DM,"batchSearchByHash");function MM(e,t,r,s,n=[]){return $f(e,t,r,s,n),kf(e,t,r,s,n)}a(MM,"batchSearchByHashToMap");function kf(e,t,r,s,n=[]){r=oi(e,r);let i=Object.create(null),o=r.length<3?ii:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=kt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw hM.warn(u),u}}return i}a(kf,"batchHashSearch");function $f(e,t,r,s,n){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(_o(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a($f,"initializeBatchSearchByHash");function _o(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(_o,"validateFetchAttributes");function Br(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>fM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Br,"validateComparisonFunctions");function oi(e,t){return t.length===1&&SM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(oi,"setGetWholeRowAttributes");xf.exports={searchAll:TM,searchAllToMap:mM,count:pM,countAll:AM,equals:OM,startsWith:NM,endsWith:gM,contains:Vf,searchByHash:UM,setGetWholeRowAttributes:oi,batchSearchByHash:DM,batchSearchByHashToMap:MM,checkHashExists:yM,iterateDBI:RM,greaterThan:IM,greaterThanEqual:bM,lessThan:wM,lessThanEqual:CM,between:LM}});var ci=S((tJ,Qf)=>{var Yf=require("lodash"),Kf=Ee(),W=require("joi"),PM=b(),{hdb_schema_table:$t,checkValidTable:Wf}=Er(),{handleHDBError:BM,hdb_errors:vM}=D(),{HTTP_STATUS_CODES:HM}=vM,eJ=W.object({schema:$t,table:$t,hash_values:W.array().min(1).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items($t).required()}),qM=W.object({schema:$t,table:$t,search_attribute:$t,search_value:W.any().required(),get_attributes:W.array().min(1).items($t).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),GM=W.object({schema:$t,table:$t,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($t).required(),conditions:W.array().min(1).items(W.object({search_attribute:$t,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()});Qf.exports=function(e,t){let r=null;switch(t){case"value":r=Kf.validateBySchema(e,qM);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Wf("schema",e.schema)),i(Wf("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=Kf.validateBySchema(e,GM);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=PM.checkGlobalSchemaTable(e.schema,e.table);if(n)return BM(new Error,n,HM.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 _=Yf.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Yf.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 Vu=S((rJ,Jf)=>{"use strict";var FM=z(),VM=ci(),kM=require("path"),{getBaseSchemaPath:$M}=te();Jf.exports=xM;function xM(e){let t=VM(e,"hashes");if(t)throw t;let r=kM.join($M(),e.schema.toString());return FM.openEnvironment(r,e.table)}a(xM,"initialize")});var ku=S((sJ,Zf)=>{"use strict";var YM=zs(),KM=Vu();Zf.exports=WM;async function WM(e){try{let t=await KM(e),r=global.hdb_schema[e.schema][e.table];return YM.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(WM,"lmdbGetDataByHash")});var _s=S((nJ,Xf)=>{"use strict";var uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(uo,"SearchByHashObject");Xf.exports=uo});var jf=S((aJ,zf)=>{"use strict";var iJ=_s(),QM=zs(),JM=Vu();zf.exports=ZM;async function ZM(e){try{let t=await JM(e),r=global.hdb_schema[e.schema][e.table];return QM.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(ZM,"lmdbSearchByHash")});var xt=S((oJ,eT)=>{"use strict";var lo=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(lo,"SearchObject");eT.exports=lo});var Eo=S((cJ,iT)=>{"use strict";var We=zs(),XM=z(),zM=require("path"),jM=b(),U=Ye(),us=T(),{getBaseSchemaPath:eP}=te(),tP=ss(),tT=rt().LMDB_ERRORS_ENUM,{compareKeys:js}=require("ordered-binary"),hr=us.SEARCH_WILDCARDS;async function rP(e,t,r){let s;e.schema===us.SYSTEM_SCHEMA_NAME?s=tP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=nT(e,s.hash_attribute,r,t);return rT(e,n,s.hash_attribute,r)}a(rP,"prepSearch");async function rT(e,t,r,s){let n=zM.join(eP(),e.schema.toString()),i=await XM.openEnvironment(n,e.table),o=sT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(iP(e,r)===!1)return s===!0?nP(o):o[1];let _=o[0];return s===!0?We.batchSearchByHashToMap(i,r,e.get_attributes,_):We.batchSearchByHash(i,r,e.get_attributes,_)}a(rT,"executeSearch");function sT(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 U.SEARCH_TYPES.EQUALS:n=We.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=We.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=We.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=We.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return We.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return We.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return We.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return We.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=We.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=We.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=We.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=We.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=We.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(sT,"searchByType");function sP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return js(i,s[0])>=0&&js(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>js(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>js(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>js(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>js(n[r],s)<=0;default:return Object.create(null)}}a(sP,"filterByType");function nP(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(nP,"createMapFromArrays");function iP(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(iP,"checkToFetchMore");function nT(e,t,r,s){if(jM.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),hr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(hr[0])<0&&n.indexOf(hr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(hr.indexOf(i)>=0&&hr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(hr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(hr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(hr[0])||n.includes(hr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(tT.UNKNOWN_SEARCH_TYPE)}else switch(s){case us.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case us.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case us.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case us.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case us.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(tT.UNKNOWN_SEARCH_TYPE)}}a(nT,"createSearchTypeFromSearchObject");iT.exports={executeSearch:rT,createSearchTypeFromSearchObject:nT,prepSearch:rP,searchByType:sT,filterByType:sP}});var oT=S((uJ,aT)=>{"use strict";var _J=xt(),aP=ci(),oP=b(),cP=T(),_P=Eo();aT.exports=uP;async function uP(e,t){if(!oP.isEmpty(t)&&cP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aP(e,"value");if(s)throw s;let n=!0;try{return await _P.prepSearch(e,t,n)}catch(i){throw i}}a(uP,"lmdbGetDataByValue")});var en=S((EJ,cT)=>{"use strict";var lJ=xt(),lP=ci(),EP=b(),dP=T(),hP=Eo();cT.exports=SP;async function SP(e,t){if(!EP.isEmpty(t)&&dP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lP(e,"value");if(s)throw s;let n=!1;try{return await hP.prepSearch(e,t,n)}catch(i){throw i}}a(SP,"lmdbSearchByValue")});var uT=S((hJ,_T)=>{"use strict";var dJ=Ye(),ho=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(ho,"SearchByConditionsObject");var So=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(So,"SearchCondition");var fo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(fo,"SortAttribute");_T.exports={SearchByConditionsObject:ho,SearchCondition:So,SortAttribute:fo}});var fT=S((fJ,ST)=>{"use strict";var SJ=uT().SearchByConditionsObject,fP=xt(),TP=ci(),$u=zs(),To=Ye(),hT=Eo(),mP=Gu(),lT=require("lodash"),{getBaseSchemaPath:RP}=te(),AP=require("path"),OP=z(),{handleHDBError:ET,hdb_errors:pP}=D(),{HTTP_STATUS_CODES:NP}=pP,gP=1e8,IP={lazy:!0};ST.exports=bP;async function bP(e){try{let t=TP(e,"conditions");if(t)throw ET(t,t.message,NP.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=AP.join(RP(),e.schema.toString()),s=await OP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=lT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===To.SEARCH_TYPES.EQUALS?o.estimated_count=$u.count(s,o.search_attribute,o.search_value):c===To.SEARCH_TYPES.CONTAINS||c===To.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=gP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await dT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(hT.filterByType),u=_.length,l=[],E=$u.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,IP);for(let C=0;C<u;C++)if(!_[C](R))continue e;if(d>0){d--;continue}if(h<=0)break;h--,l.push(mP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await dT(s,e,_,n.hash_attribute);c.push(u)}if(o=lT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return $u.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw ET(t)}}a(bP,"lmdbSearchByConditions");async function dT(e,t,r,s){let n=new fP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===To.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,hT.searchByType(e,n,i,s)}a(dT,"executeConditionSearch")});var _i=S((TJ,TT)=>{"use strict";var wP=T().OPERATIONS_ENUM,mo=class{constructor(t,r,s,n=void 0){this.operation=wP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(mo,"DeleteObject");TT.exports=mo});var xu=S((mJ,mT)=>{"use strict";var Ro=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Ro,"DropAttributeObject");mT.exports=Ro});var Ku=S((AJ,RT)=>{"use strict";var CP=xt(),LP=_i(),RJ=xu(),zt=T(),UP=b(),Yu=z(),yP=ss(),DP=en(),MP=ni(),{getBaseSchemaPath:PP}=te(),BP=require("path");RT.exports=vP;async function vP(e,t=!0){let r;e.schema===zt.SYSTEM_SCHEMA_NAME?r=yP[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await qP(e),n=BP.join(PP(),e.schema.toString()),i=await Yu.openEnvironment(n,e.table);return t===!0&&await HP(e,i,r.hash_attribute),Yu.dropDBI(i,e.attribute),s}a(vP,"lmdbDropAttribute");async function HP(e,t,r){let s=Yu.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(HP,"removeAttributeFromAllObjects");async function qP(e){let t=new CP(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=(await DP(t)).filter(o=>o[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(UP.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 LP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return MP(i)}a(qP,"dropAttributeFromSystem")});var NT=S((OJ,pT)=>{"use strict";var GP=Ku(),FP=xu(),AT=b(),OT=I(),VP=rt().LMDB_ERRORS_ENUM;pT.exports=kP;async function kP(e){if(AT.isEmpty(global.hdb_schema[e.schema])||AT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new FP(e.schema,e.table,r);try{await GP(n,!1)}catch(i){i.message!==VP.DBI_DOES_NOT_EXIST&&OT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw OT.error(`Error dropping attribute ${r}`),s}}a(kP,"lmdbDropAllAttributes")});var Wu=S((NJ,DT)=>{"use strict";var CT=xt(),LT=_i(),UT=en(),yT=ni(),pJ=NT(),it=T(),gT=b(),IT=z(),{getBaseSchemaPath:$P,getTransactionAuditStorePath:xP}=te(),bT=require("path"),wT=I();DT.exports=YP;async function YP(e){try{if(gT.isEmpty(global.hdb_schema[e.schema])||gT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await KP(e),await WP(e);let t=bT.join($P(),e.schema.toString());try{await IT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bT.join(xP(),e.schema.toString());await IT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(YP,"lmdbDropTable");async function KP(e){let t=new CT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await UT(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 LT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await yT(n)}a(KP,"deleteAttributesFromSystem");async function WP(e){let t=new CT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await UT(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 LT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await yT(n)}catch(i){throw i}}a(WP,"dropTableFromSystem")});var PT=S((IJ,MT)=>{"use strict";var QP=require("fs-extra"),JP=xt(),ZP=_s(),XP=_i(),zP=Wu(),jP=ni(),eB=ku(),tB=en(),Sr=T(),gJ=b(),rB=require("path"),{getBaseSchemaPath:sB}=te(),{handleHDBError:nB,hdb_errors:iB}=D(),{HDB_ERROR_MSGS:aB,HTTP_STATUS_CODES:oB}=iB;MT.exports=cB;async function cB(e){let t;try{t=await _B(e.schema);let r=new JP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await tB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await zP(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new XP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await jP(n);let i=rB.join(sB(),t.toString());await QP.remove(i)}catch(r){throw r}}a(cB,"lmdbDropSchema");async function _B(e){let t=new ZP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await eB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw nB(new Error,aB.SCHEMA_NOT_FOUND(e),oB.NOT_FOUND,void 0,void 0,!0);return s}a(_B,"validateDropSchema")});var Qu=S((bJ,BT)=>{"use strict";var Ao=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Ao,"CreateTableObject");BT.exports=Ao});var HT=S((CJ,vT)=>{"use strict";var uB=require("path"),lB=require("fs-extra"),Oo=z(),{getTransactionAuditStorePath:EB}=te(),Ju=Ye(),wJ=Qu();vT.exports=dB;async function dB(e){let t;try{let r=uB.join(EB(),e.schema.toString());await lB.mkdirp(r),t=await Oo.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{Oo.createDBI(t,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Oo.createDBI(t,Ju.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Oo.createDBI(t,Ju.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(dB,"createTransactionsAuditEnvironment")});var VT=S((LJ,FT)=>{"use strict";var Zu=T(),qT=z(),hB=Ys(),SB=require("path"),{getSystemSchemaPath:fB,getBaseSchemaPath:TB}=te(),mB=ss(),RB=Qa(),Xu=Wa(),AB=I(),OB=HT(),ju=mB.hdb_table,GT=[];for(let e=0;e<ju.attributes.length;e++)GT.push(ju.attributes[e].attribute);FT.exports=pB;async function pB(e,t){let r=SB.join(TB(),t.schema.toString()),s=new Xu(t.schema,t.table,Zu.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Xu(t.schema,t.table,Zu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Xu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await qT.createEnvironment(r,t.table),e!==void 0){let o=await qT.openEnvironment(fB(),Zu.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hB.insertRecords(o,ju.hash_attribute,GT,[e]),await zu(s),await zu(n),await zu(i)}await OB(t)}catch(o){throw o}}a(pB,"lmdbCreateTable");async function zu(e){try{await RB(e)}catch(t){AB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(zu,"createAttribute")});var $T=S((UJ,kT)=>{"use strict";var NB=Ja(),gB=za(),IB=to(),tn=T(),bB=Ys().updateRecords,wB=z(),CB=require("path"),{getBaseSchemaPath:LB}=te(),UB=si(),yB=I();kT.exports=DB;async function DB(e){try{let{schema_table:t,attributes:r}=NB(e);gB(e,r,t.hash_attribute),e.schema!==tn.SYSTEM_SCHEMA_NAME&&(r.includes(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await IB(e.hdb_auth_header,t,r),n=CB.join(LB(),e.schema.toString()),i=await wB.openEnvironment(n,e.table),o=await bB(i,t.hash_attribute,r,e.records,e[tn.CLUSTERING_FLAG]!==!0);try{await UB(e,o)}catch(c){yB.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(DB,"lmdbUpdateRecords")});var YT=S((yJ,xT)=>{"use strict";var MB=T().OPERATIONS_ENUM,po=class{constructor(t,r,s,n=void 0){this.operation=MB.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(po,"UpsertObject");xT.exports=po});var WT=S((MJ,KT)=>{"use strict";var DJ=YT(),PB=Ja(),BB=za(),vB=to(),rn=T(),HB=Ys().upsertRecords,qB=z(),GB=require("path"),{getBaseSchemaPath:FB}=te(),VB=si(),kB=I(),{handleHDBError:$B,hdb_errors:xB}=D();KT.exports=YB;async function YB(e){let t;try{t=PB(e)}catch(_){throw $B(_,_.message,xB.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;BB(e,s,r.hash_attribute),e.schema!==rn.SYSTEM_SCHEMA_NAME&&(s.includes(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vB(e.hdb_auth_header,r,s),i=GB.join(FB(),e.schema.toString()),o=await qB.openEnvironment(i,e.table),c=await HB(o,r.hash_attribute,s,e.records,e[rn.CLUSTERING_FLAG]!==!0);try{await VB(e,c)}catch(_){kB.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(YB,"lmdbUpsertRecords")});var jT=S((PJ,zT)=>{"use strict";var KB=xt(),QT=b(),JT=I(),WB=en(),ZT=T(),QB=Hu().deleteRecords,JB=z(),ZB=require("path"),{getBaseSchemaPath:XB}=te(),{promisify:zB}=require("util"),jB=zB(setTimeout),XT=1e4,ev=10;zT.exports=tv;async function tv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(QT.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 KB(e.schema,e.table,ZT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await WB(n,ZT.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw JT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return QT.isEmptyOrZeroLength(s)?(JT.trace("No records found to delete"),{message:"No records found to delete"}):await rv(e,s,t)}a(tv,"lmdbDeleteRecordsBefore");async function rv(e,t,r){let s=ZB.join(XB(),e.schema.toString()),n=await JB.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=XT){let _=t.slice(o,o+XT),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await QB(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 jB(ev)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(rv,"chunkDeletes")});var tm=S((BJ,em)=>{"use strict";var No=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(No,"DeleteBeforeObject");em.exports=No});var sm=S((vJ,rm)=>{"use strict";var go=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(go,"DeleteAuditLogsBeforeResults");rm.exports=go});var am=S((qJ,im)=>{"use strict";var el=z(),{getTransactionAuditStorePath:sv}=te(),HJ=tm(),nv=require("path"),ui=Ye(),iv=b(),nm=sm(),av=require("util").promisify,ov=av(setTimeout),cv=1e4,_v=100;im.exports=uv;async function uv(e){let t=nv.join(sv(),e.schema),r=await el.openEnvironment(t,e.table,!0),s=el.listDBIs(r);el.initializeDBIs(r,ui.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new nm;do n=await lv(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 ov(_v);while(n.transactions_deleted>0);return i}a(uv,"deleteAuditLogsBefore");async function lv(e,t){let r=new nm;try{let s=e.dbis[ui.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[ui.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];iv.isEmpty(c)||(n=e.dbis[ui.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[ui.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>cv)break}return await n,r}catch(s){throw s}}a(lv,"deleteTransactions")});var dm=S((GJ,Em)=>{"use strict";var tl=z(),sn=Ye(),om=ns(),rl=T(),cm=b(),{getTransactionAuditStorePath:Ev}=te(),dv=require("path"),hv=zs(),Io=Qs(),Sv=I();Em.exports=fv;async function fv(e){let t=dv.join(Ev(),e.schema),r=await tl.openEnvironment(t,e.table,!0),s=tl.listDBIs(r);tl.initializeDBIs(r,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return _m(r,e.search_values);case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,mv(r,e.search_values,n);case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Tv(r,e.search_values);default:return _m(r)}}a(fv,"readAuditLog");function _m(e,t=[0,om.getMicroTime()]){cm.isEmpty(t[0])&&(t[0]=0),cm.isEmpty(t[1])&&(t[1]=om.getMicroTime());let r=[];try{let s=e.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new Io,i);r.push(o)}return r}catch(s){throw s}}a(_m,"searchTransactionsByTimestamp");function Tv(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[sn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,lm(e,i))}return Object.fromEntries(r)}a(Tv,"searchTransactionsByUsername");function mv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=hv.equals(e,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let h=l[0][E],m=Number(h);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=lm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);um(_,"records",r,l,o),um(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(mv,"searchTransactionsByHashValues");function um(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 Io(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Io(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(um,"loopRecords");function lm(e,t){let r=[];try{let s=e.dbis[sn.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 Io,i);r.push(o)}}catch(i){Sv.warn(i)}return r}catch(s){throw s}}a(lm,"batchSearchTransactions")});var Sm=S((FJ,hm)=>{"use strict";var Rv=require("path"),{getBaseSchemaPath:Av}=te(),Ov=z();hm.exports={writeTransaction:pv};async function pv(e,t,r){let s=Rv.join(Av(),e);return(await Ov.openEnvironment(s,t)).transaction(r)}a(pv,"writeTransaction")});var Tm=S((VJ,fm)=>{"use strict";var Nv=require("path"),{getBaseSchemaPath:gv}=te(),Iv=z();fm.exports={flush:bv};async function bv(e,t){let r=Nv.join(gv(),e.toString());return(await Iv.openEnvironment(r,t.toString())).flushed}a(bv,"flush")});var Rm=S((kJ,mm)=>{"use strict";var Re=I(),{handleHDBError:wv}=D(),Cv=au(),Lv=Qa(),Uv=Pu(),yv=Uf(),Dv=ni(),Mv=ku(),Pv=jf(),Bv=oT(),vv=en(),Hv=fT(),qv=PT(),Gv=VT(),Fv=$T(),Vv=WT(),kv=jT(),$v=am(),xv=Wu(),Yv=Ku(),Kv=dm(),Wv=Sm(),Qv=Tm(),bo=class extends Cv{async searchByConditions(t){try{return Hv(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await Mv(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await Pv(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await Bv(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await vv(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await yv(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await qv(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await Gv(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await xv(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await Lv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await Uv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await Fv(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await Vv(t)}catch(r){throw wv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await Dv(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await kv(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await Yv(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await $v(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await Kv(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return Wv.writeTransaction(t,r,s)}flush(t,r){return Qv.flush(t,r)}};a(bo,"LMDBBridge");mm.exports=bo});var fr=S(($J,Om)=>{"use strict";var Jv=Rm(),Zv=au(),Xv=Y();Xv.initSync();var Am;function zv(){return Am instanceof Zv?Am:new Jv}a(zv,"getBridge");Om.exports=zv()});var Im=S((xJ,gm)=>{"use strict";var pm=require("lodash"),li=require("mathjs"),jv=require("jsonata"),Nm=b();gm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?pm.uniqWith(e,pm.isEqual):e,searchJSON:eH,mad:Ei.bind(null,li.mad),mean:Ei.bind(null,li.mean),mode:Ei.bind(null,li.mode),prod:Ei.bind(null,li.prod),median:Ei.bind(null,li.median)};function Ei(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(Ei,"aggregateFunction");function eH(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(Nm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Nm.isEmpty(this.__ala__.res[r])){let s=jv(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(eH,"searchJSON")});var wm=S((YJ,bm)=>{"use strict";var de=require("moment"),sl="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;bm.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(sl),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(sl),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(sl)}});var ym=S((KJ,Um)=>{"use strict";var tH=require("@turf/area"),rH=require("@turf/length"),sH=require("@turf/circle"),nH=require("@turf/difference"),iH=require("@turf/distance"),aH=require("@turf/boolean-contains"),oH=require("@turf/boolean-equal"),cH=require("@turf/boolean-disjoint"),_H=require("@turf/helpers"),Cm=T(),k=b();Um.exports={geoArea:uH,geoLength:lH,geoCircle:EH,geoDifference:dH,geoDistance:Lm,geoNear:hH,geoContains:SH,geoEqual:fH,geoCrosses:TH,geoConvert:mH};var nl="geo1 is required",il="geo2 is required";function uH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),tH.default(e)}a(uH,"geoArea");function lH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),rH.default(e,{units:t||"kilometers"})}a(lH,"geoLength");function EH(e,t,r){if(k.isEmpty(e))throw new Error("point is required");if(k.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=k.autoCast(e)),sH.default(e,t,{units:r||"kilometers"})}a(EH,"geoCircle");function dH(e,t){if(k.isEmpty(e))throw new Error("poly1 is required");if(k.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),nH(e,t)}a(dH,"geoDifference");function Lm(e,t,r){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),iH.default(e,t,{units:r||"kilometers"})}a(Lm,"geoDistance");function hH(e,t,r,s){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");if(k.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Lm(e,t,s)<=r}a(hH,"geoNear");function SH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),aH.default(e,t)}a(SH,"geoContains");function fH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),oH.default(e,t)}a(fH,"geoEqual");function TH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!cH.default(e,t)}a(TH,"geoCrosses");function mH(e,t,r){if(k.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(k.isEmpty(t))throw new Error("geo_type is required");if(k.isEmpty(Cm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Cm.GEO_CONVERSION_ENUM).join(",")}`);return _H[t](e,r)}a(mH,"geoConvert")});var wo=S((WJ,Dm)=>{var ls=Im(),St=wm(),jt=ym();Dm.exports=e=>{e.aggr.mad=e.aggr.MAD=ls.mad,e.aggr.mean=e.aggr.MEAN=ls.mean,e.aggr.mode=e.aggr.MODE=ls.mode,e.aggr.prod=e.aggr.PROD=ls.prod,e.aggr.median=e.aggr.MEDIAN=ls.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ls.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ls.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=St.current_date,e.fn.current_time=e.fn.CURRENT_TIME=St.current_time,e.fn.extract=e.fn.EXTRACT=St.extract,e.fn.date=e.fn.DATE=St.date,e.fn.date_format=e.fn.DATE_FORMAT=St.date_format,e.fn.date_add=e.fn.DATE_ADD=St.date_add,e.fn.date_sub=e.fn.DATE_SUB=St.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=St.date_diff,e.fn.now=e.fn.NOW=St.now,e.fn.offset_utc=e.fn.OFFSET_UTC=St.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=St.get_server_time,e.fn.getdate=e.fn.GETDATE=St.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=St.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=jt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=jt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=jt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=jt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=jt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=jt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=jt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=jt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=jt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=jt.geoNear}});var Bm=S((QJ,Pm)=>{"use strict";var di=require("lodash"),Me=require("alasql");Me.options.cache=!1;var RH=wo(),Mm=require("clone"),Co=require("recursive-iterator"),v=I(),q=b(),nn=fr(),AH=T(),{hdb_errors:OH}=D(),pH="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";RH(Me);var Lo=class{constructor(t,r){if(q.isEmpty(t))throw v.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(),q.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!q.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(hi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(hi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(hi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(hi)}}_getColumns(){let t=new Co(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(Mm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=di.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(q.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Co(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!q.isEmpty(r)&&r.right)if(q.isNotEmptyAndHasValue(r.right.value)){let s=q.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!q.isEmpty(s)&&q.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=q.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&q.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Co(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(!q.isEmpty(AH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(q.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(q.isEmptyOrZeroLength(r.left.columnid)||q.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(q.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"=":!q.isEmpty(r.right.value)||!q.isEmpty(r.left.value)?s.add(q.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(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from)&&q.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&&di.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(q.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);q.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(q.isEmptyOrZeroLength(this.all_table_attributes)&&!q.isEmptyOrZeroLength(this.columns.columns))return t;if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.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(Mm(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(q.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(pH)>-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=di.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),!q.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await nn.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}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 nn.getDataByValue(E);for(let h in d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(h)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!q.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!q.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 m=await nn.getDataByValue(c,h.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await nn.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_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 Me.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 Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.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 Me.yy.FuncValue:new Me.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 m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),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 m=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}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),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}`,m=this._convertColumnsToIndexes(h,n);d=await Me.promise(m,t),t=null}catch(h){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;h++){let R=d[h];o.forEach(C=>{R[C.key]!==null&&R[C.key]!==void 0&&C.keys.add(R[C.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=di.difference(m,[...h.keys].map(C=>C.toString()));for(let C=0,L=R.length;C<L;C++){let B=R[C];delete this.data[`${h.schema}_${h.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Co(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=di.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){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.error(i)}}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 nn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_[d];for(let m=0;m<u;m++){let R=n.columns[m],C=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(C)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.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();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.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 v.error(OH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.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 nn.getDataByValue(i);for(let c in 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]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Lo,"SQLSearch");Pm.exports=Lo});var ft=S((JJ,Hm)=>{"use strict";var NH=Jh();Hm.exports={searchByConditions:wH,searchByHash:CH,searchByValue:LH,search:UH};var al=fr(),vm=require("util"),gH=vm.callbackify(al.searchByHash),IH=vm.callbackify(al.searchByValue),bH=Bm();async function wH(e){return al.searchByConditions(e)}a(wH,"searchByConditions");function CH(e,t){try{gH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(CH,"searchByHash");function LH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),IH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(LH,"searchByValue");function UH(e,t){try{let r=new NH(e);r.validate(),new bH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(UH,"search")});var vr=S((ZJ,Vm)=>{"use strict";var Si=require("crypto"),Gm="aes-256-cbc",yH=32,DH=16,ol=64,Fm=32,MH=ol+Fm,qm=new Map;Vm.exports={encrypt:PH,decrypt:BH,createNatsTableStreamName:vH};function PH(e){let t=Si.randomBytes(yH),r=Si.randomBytes(DH),s=Si.createCipheriv(Gm,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(PH,"encrypt");function BH(e){let t=e.substr(0,ol),r=e.substr(ol,Fm),s=e.substr(MH,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Si.createDecipheriv(Gm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(BH,"decrypt");function vH(e,t){let r=`${e}.${t}`,s=qm.get(r);return s||(s=Si.createHash("md5").update(`${e}.${t}`).digest("hex"),qm.set(r,s)),s}a(vH,"createNatsTableStreamName")});var on=S((XJ,Qm)=>{"use strict";var $m=ft(),Hr=I(),xm=xa(),HH=require("lodash"),qH=require("path"),GH=vr(),cl=b(),{promisify:Ym}=require("util"),j=T(),{handleHDBError:Uo,hdb_errors:FH}=D(),{HDB_ERROR_MSGS:yo,HTTP_STATUS_CODES:Km}=FH,VH=Y();VH.initSync();var km=z(),kH=te(),fi=Ym($m.searchByValue),$H=Ym($m.searchByHash),an="name",Wm="hash_attribute",_l="schema",xH="schema_table",YH="attribute";Qm.exports={describeAll:KH,describeTable:Do,describeSchema:QH};async function KH(e){try{let t=cl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:an,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[an]},i=await fi(n);if(cl.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[Wm,j.ID_ATTRIBUTE_STRING,an,_l]},u=await fi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Do({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Do({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Hr.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 Hr.error("Got an error in describeAll"),Hr.error(t),Uo(new Error,yo.DESCRIBE_ALL_ERR)}}a(KH,"describeAll");async function Do(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=xm.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:an,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await fi(c);if(!_||_.length===0)throw Uo(new Error,yo.TABLE_NOT_FOUND(e.schema,e.table),Km.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Uo(new Error,yo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:xH,search_value:r+"."+s,get_attributes:[YH]},E=await fi(l);E=HH.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=WH(n)),i.attributes=E,i.clustering_stream_name=GH.createNatsTableStreamName(u.schema,u.name);try{let d=qH.join(kH.getBaseSchemaPath(),i.schema.toString()),h=await km.openEnvironment(d,i.name),m=km.statDBI(h,i.hash_attribute);i.record_count=m.entryCount}catch(d){Hr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Hr.error(`There was an error getting attributes for table '${u.name}'`),Hr.error(l)}return i}a(Do,"descTable");function WH(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(WH,"getAttrsByPerms");async function QH(e){let t=xm.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:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:_l,search_value:s,hash_values:[],get_attributes:[Wm,j.ID_ATTRIBUTE_STRING,an,_l]},i=await fi(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[an]},c=await $H(o);if(c&&c.length<1)throw Uo(new Error,yo.SCHEMA_NOT_FOUND(e.schema),Km.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]),cl.isEmpty(_)||_.describe){let u=await Do({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Hr.error(`Error describing schema table '${e.schema}.${c}'`),Hr.error(_)}})),o}}a(QH,"describeSchema")});var Es=S((eZ,jm)=>{var zJ=require("async"),cn=ss(),jJ=I(),{callbackify:Xm,promisify:JH}=require("util");jm.exports={setSchemaDataToGlobal:Jm,getTableSchema:zH,getSystemSchema:eq,setSchemaDataToGlobalAsync:JH(Jm)};var zm=on(),ZH=Xm(zm.describeAll),XH=Xm(zm.describeTable);function Jm(e){ZH(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=cn),global.hdb_schema=r,e(null,null)})}a(Jm,"setSchemaDataToGlobal");function Zm(e,t){return e==="system"?cn[t]:global.hdb_schema[e][t]}a(Zm,"returnSchema");function zH(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?jH(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,Zm(e,t))}):r(null,Zm(e,t))}a(zH,"getTableSchema");function jH(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=cn:global.hdb_schema={system:cn},r();return}XH(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:cn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(jH,"setTableDataToGlobal");function eq(){return cn}a(eq,"getSystemSchema")});var he=S((rZ,tR)=>{"use strict";var{platform:tZ}=require("os"),tq="nats-server.zip",ul="nats-server",rq=process.platform==="win32"?`${ul}.exe`:ul,ll="HDB",sq=/^[^\s.,*>]+$/,eR="__request__",nq=a(e=>`${e}.${eR}`,"REQUEST_SUBJECT"),iq={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},aq={HUB:"hub.pid",LEAF:"leaf.pid"},oq={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},cq={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ll,deliver_subject:"__HDB__.WORKQUEUE"},_q={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ll,deliver_subject:"HDB.SCHEMAQUEUE"},uq={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ll,deliver_subject:"HDB.USERQUEUE"},lq={SUCCESS:"success",ERROR:"error"},Eq={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},dq={TXN:"txn",MSGID:"msgid"};tR.exports={NATS_SERVER_ZIP:tq,NATS_SERVER_NAME:ul,NATS_BINARY_NAME:rq,PID_FILES:aq,NATS_CONFIG_FILES:iq,SERVER_SUFFIX:oq,WORK_QUEUE_CONSUMER_NAMES:cq,SCHEMA_QUEUE_CONSUMER_NAMES:_q,USER_QUEUE_CONSUMER_NAMES:uq,NATS_TERM_CONSTRAINTS_RX:sq,REQUEST_SUFFIX:eR,UPDATE_REMOTE_RESPONSE_STATUSES:lq,CLUSTER_STATUS_STATUSES:Eq,REQUEST_SUBJECT:nq,SUBJECT_PREFIXES:dq}});var sR=S((sZ,rR)=>{"use strict";var hq=he(),Mo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h){this.port=t,o===null&&(o=void 0),this.server_name=r+hq.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},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:h}},this.system_account="SYS"}};a(Mo,"HubConfigObject");rR.exports=Mo});var aR=S((nZ,iR)=>{"use strict";var nR=he(),Po=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+nR.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+nR.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(Po,"LeafConfigObject");iR.exports=Po});var cR=S((iZ,oR)=>{"use strict";var Bo=class{constructor(t,r){this.user=t,this.password=r}};a(Bo,"HdbUserObject");oR.exports=Bo});var uR=S((aZ,_R)=>{"use strict";var Sq=he(),vo=class{constructor(t,r){this.user=t+Sq.SERVER_SUFFIX.ADMIN,this.password=r}};a(vo,"SysUserObject");_R.exports=vo});var Lt=S((oZ,dR)=>{"use strict";var qo=Uu(),Ct=b(),fq=require("util"),Go=fr(),Tq=Es(),El=I(),{handleHDBError:qr,hdb_errors:mq}=D(),{HTTP_STATUS_CODES:ds}=mq,Rq=fq.promisify(Tq.getTableSchema),Aq="updated",lR="inserted",ER="upserted";dR.exports={insert:pq,update:Nq,upsert:gq,validation:Oq,flush:Iq};async function Oq(e){if(Ct.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ct.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ct.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Rq(e.schema,e.table),r=qo(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&&Ct.isEmptyOrZeroLength(c[s]))throw El.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(!Ct.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw El.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ct.isEmpty(c[s])&&c[s]!==""&&n.has(Ct.autoCast(c[s]))&&(c.skip=!0),n.add(Ct.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Oq,"validation");async function pq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.createRecords(e);return Ho(lR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(pq,"insertData");async function Nq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.updateRecords(e);return Ct.isEmpty(s.existing_rows)?Ho(Aq,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Nq,"updateData");async function gq(e){if(e.operation!=="upsert")throw qr(new Error,"invalid operation, must be upsert",ds.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.upsertRecords(e);return Ho(ER,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,El.ERR,n)}}a(gq,"upsertData");function Ho(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===lR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===ER?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Iq(e){return Go.flush(e.schema,e.table)}a(Iq,"flush")});var hl=S((cZ,fR)=>{var bq=Ee(),dl=require("joi"),{hdb_schema_table:hR}=Er(),SR={schema:hR,table:hR},wq={date:dl.date().iso().required()},Cq={timestamp:dl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};fR.exports=function(e,t){let r=t==="timestamp"?{...SR,...Cq}:{...SR,...wq},s=dl.object(r);return bq.validateBySchema(e,s)}});var AR=S((_Z,RR)=>{var Lq=Ee(),TR=require("joi"),{hdb_schema_table:mR}=Er(),Uq=TR.object({schema:mR,table:mR,hash_values:TR.array().required()});RR.exports=function(e){return Lq.validateBySchema(e,Uq)}});var pR=S((uZ,OR)=>{"use strict";var Fo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Fo,"InsertObject");var Vo=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(Vo,"NoSQLSeachObject");var ko=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(ko,"DeleteResponseObject");OR.exports={InsertObject:Fo,NoSQLSeachObject:Vo,DeleteResponseObject:ko}});var Ss=S((lZ,wR)=>{"use strict";var gR=hl(),yq=AR(),$o=b(),NR=require("moment"),IR=I(),{promisify:Dq,callbackify:Mq}=require("util"),hs=T(),Pq=Es(),Sl=Dq(Pq.getTableSchema),fl=fr(),{DeleteResponseObject:Bq}=pR(),{handleHDBError:Gr,hdb_errors:vq}=D(),{HDB_ERROR_MSGS:xo,HTTP_STATUS_CODES:Fr}=vq,Hq="records successfully deleted",qq=Mq(bR);wR.exports={delete:qq,deleteRecord:bR,deleteFilesBefore:Gq,deleteAuditLogsBefore:Fq};async function Gq(e){let t=gR(e,"date");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(!NR(e.date,NR.ISO_8601).isValid())throw Gr(new Error,xo.INVALID_DATE,Fr.BAD_REQUEST,hs.LOG_LEVELS.ERROR,xo.INVALID_DATE,!0);let s=$o.checkSchemaTableExist(e.schema,e.table);if(s)throw Gr(new Error,s,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,s,!0);try{let n=await fl.deleteRecordsBefore(e);if(await Sl(e.schema,e.table),IR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Gq,"deleteFilesBefore");async function Fq(e){let t=gR(e,"timestamp");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Gr(new Error,xo.INVALID_VALUE("Timestamp"),Fr.BAD_REQUEST,hs.LOG_LEVELS.ERROR,xo.INVALID_VALUE("Timestamp"),!0);let r=$o.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,r,!0);try{let s=await fl.deleteAuditLogsBefore(e);return await Sl(e.schema,e.table),IR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Fq,"deleteAuditLogsBefore");async function bR(e){let t=yq(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=$o.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,r,!0);try{await Sl(e.schema,e.table);let s=await fl.deleteRecords(e);return $o.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Hq}`),s}catch(s){if(s.message===hs.SEARCH_NOT_FOUND_MESSAGE){let n=new Bq;return n.message=hs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(bR,"deleteRecord")});var Yo=S((EZ,UR)=>{var Vq=require("crypto"),CR=9;function kq(e){let t=xq(CR),r=LR(e+t);return t+r}a(kq,"createHash");function $q(e,t){let r=e.substr(0,CR),s=r+LR(t+r);return e===s}a($q,"validateHash");function xq(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(xq,"generateSalt");function LR(e){return Vq.createHash("md5").update(e).digest("hex")}a(LR,"md5");UR.exports={hash:kq,validate:$q}});var DR=S((dZ,yR)=>{var Tl=Ee(),Qe={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 Yq(e){return Qe.password.presence=!0,Qe.username.presence=!0,Qe.role.presence=!0,Qe.active.presence=!0,Tl.validateObject(e,Qe)}a(Yq,"addUserValidation");function Kq(e){return Qe.password.presence=!1,Qe.username.presence=!0,Qe.role.presence=!1,Qe.active.presence=!1,Tl.validateObject(e,Qe)}a(Kq,"alterUserValidation");function Wq(e){return Qe.password.presence=!1,Qe.username.presence=!0,Qe.role.presence=!1,Qe.active.presence=!1,Tl.validateObject(e,Qe)}a(Wq,"dropUserValidation");yR.exports={addUserValidation:Yq,alterUserValidation:Kq,dropUserValidation:Wq}});var PR=S((hZ,MR)=>{"use strict";var Vr=T(),Ti=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(Ti,"BaseLicense");var Ko=class extends Ti{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(Ko,"ExtendedLicense");MR.exports={BaseLicense:Ti,ExtendedLicense:Ko}});var mi=S((SZ,FR)=>{"use strict";var un=require("fs-extra"),BR=Yo(),vR=require("crypto"),Qq=require("moment"),Jq=require("uuid").v4,Je=I(),Rl=require("path"),Zq=b(),Tt=T(),Xq=PR().ExtendedLicense,_n="invalid license key format",zq="061183",jq="mofi25",eG="aes-256-cbc",tG=16,rG=32,HR=Y();HR.initSync();var ml;FR.exports={validateLicense:qR,generateFingerPrint:nG,licenseSearch:GR,getLicense:oG};function Al(){return Rl.join(HR.getHdbBasePath(),Tt.LICENSE_KEY_DIR_NAME,Tt.LICENSE_FILE_NAME)}a(Al,"getLicenseDirPath");function sG(){let e=Al();return Rl.join(e,Tt.LICENSE_FILE_NAME)}a(sG,"getLicenseFilePath");function Ol(){let e=Al();return Rl.join(e,Tt.REG_KEY_FILE_NAME)}a(Ol,"getFingerPrintFilePath");async function nG(){let e=Ol();try{return await un.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await iG();throw Je.error(`Error writing fingerprint file to ${e}`),Je.error(t),new Error("There was an error generating the fingerprint")}}a(nG,"generateFingerPrint");async function iG(){let e=Jq(),t=BR.hash(e),r=Ol();try{await un.mkdirp(Al()),await un.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Je.error(`Error writing fingerprint file to ${r}`),Je.error(s),new Error("There was an error generating the fingerprint")}return t}a(iG,"writeFingerprint");function qR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Tt.STORAGE_TYPES_ENUM.LMDB,api_call:Tt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Tt.RAM_ALLOCATION_ENUM.DEFAULT,version:Tt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Je.error("empty license key passed to validate."),r;let s=Ol(),n=!1;try{n=un.statSync(s)}catch(i){Je.error(i)}if(n){let i;try{i=un.readFileSync(s,"utf8")}catch{Je.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(jq),c=o[1];c=Buffer.concat([Buffer.from(c)],tG);let _=Buffer.concat([Buffer.from(i)],rG),u=vR.createDecipheriv(eG,_,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=aG(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(_n),Je.error(_n),new Error(_n)}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(_n),Je.error(_n),new Error(_n)}else r.exp_date=l;r.exp_date<Qq().valueOf()&&(r.valid_date=!1),BR.validate(o[1],`${zq}${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||Je.error("Invalid licence"),r}a(qR,"validateLicense");function aG(e,t){try{let r=vR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Je.warn("Check old license failed")}}a(aG,"checkOldLicense");function GR(){let e=new Xq;e.api_call=0;let t=[];try{t=un.readFileSync(sG(),"utf-8").split(Tt.NEW_LINE)}catch(r){r.code==="ENOENT"?Je.info("no license file found"):Je.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Zq.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qR(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){Je.error("There was an error parsing the license string."),Je.error(n),e.api_call=Tt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Tt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Tt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Tt.LICENSE_VALUES.API_CALL_DEFAULT),ml=e,e}a(GR,"licenseSearch");async function oG(){return ml||await GR(),ml}a(oG,"getLicense")});var kr=S((fZ,eA)=>{"use strict";var xR="username is required",YR="nothing to update, must supply active, role or password to update",KR="password cannot be an empty string",WR="If role is specified, it cannot be empty.",QR="active must be true or false";eA.exports={addUser:SG,alterUser:fG,dropUser:mG,userInfo:RG,listUsers:Qo,listUsersExternal:AG,setUsersToGlobal:Ri,findAndValidateUser:NG,getClusterUser:gG,USERNAME_REQUIRED:xR,ALTERUSER_NOTHING_TO_UPDATE:YR,EMPTY_PASSWORD:KR,EMPTY_ROLE:WR,ACTIVE_BOOLEAN:QR};var JR=Lt(),cG=Ss(),Nl=Yo(),ZR=DR(),XR=ft(),gl=Ws(),be=b(),zR=require("validate.js"),H=I(),{promisify:Il}=require("util"),bl=vr(),fs=T(),VR=he(),_G=ur(),wl=Y(),uG=mi(),lG=ss(),{handleHDBError:er,hdb_errors:EG}=D(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:pl,HDB_ERROR_MSGS:ln}=EG,{UserEventMsg:Cl}=os(),kR=require("lodash"),jR={username:!0,active:!0,role:!0,password:!0},$R=new Map,Wo=Il(XR.searchByValue),dG=Il(XR.searchByHash),hG=Il(cG.delete);async function SG(e){let t=zR.cleanAttributes(e,jR),r=ZR.addUserValidation(t);if(r)throw er(new Error,r.message,tr.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 Wo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw er(new Error,ln.ROLE_NAME_NOT_FOUND(t.role),tr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw er(new Error,ln.DUP_ROLES_FOUND(t.role),tr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=bl.encrypt(t.password)),t.password=Nl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await JR.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Ri()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw er(new Error,ln.USER_ALREADY_EXISTS(t.username),tr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.ADD_USER,_,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),`${c.username} successfully added`}a(SG,"addUser");async function fG(e){let t=zR.cleanAttributes(e,jR);if(be.isEmptyOrZeroLength(t.username))throw new Error(xR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(YR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(KR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(QR);let r=TG(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=bl.encrypt(t.password)),t.password=Nl.hash(t.password)),t.role==="")throw new Error(WR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Wo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=ln.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),er(new Error,_,tr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=ln.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),er(new Error,_,tr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await JR.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Ri()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.ALTER_USER,i,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),n}a(fG,"alterUser");function TG(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(TG,"isClusterUser");async function mG(e){try{let t=ZR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(be.isEmpty(global.hdb_users.get(e.username)))throw er(new Error,ln.USER_NOT_EXIST(e.username),tr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await hG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Ri()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.DROP_USER,n,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(mG,"dropUser");async function RG(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 dG(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(RG,"userInfo");async function AG(){let e;try{e=await Qo()}catch(t){throw H.error("Got an error listing users."),H.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(AG,"listUsersExternal");async function Qo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=kR.cloneDeep(await Wo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!be.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=kR.cloneDeep(await Wo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],OG(c.role),i.set(c.username,c)}return(await uG.getLicense()).enterprise?i:pG(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Qo,"listUsers");function OG(e){try{if(!e){H.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(lG)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a(OG,"appendSystemTablesToRole");function pG(e){try{if(H.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.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(i,n)):r.set(i,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?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(pG,"nonEnterpriseFilter");async function Ri(){try{let e=await Qo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Ri,"setUsersToGlobal");async function NG(e,t,r=!0){global.hdb_users||await Ri();let s=global.hdb_users.get(e);if(!s)throw er(new Error,pl.GENERIC_AUTH_FAIL,tr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw er(new Error,pl.USER_INACTIVE,tr.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($R.get(t)===s.password)return n;if(Nl.validate(s.password,t))$R.set(t,s.password);else throw er(new Error,pl.GENERIC_AUTH_FAIL,tr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(NG,"findAndValidateUser");async function gG(){let e=await Qo(),t=_G.getConfigFromFile(fs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!be.isEmpty(r))return r.decrypt_hash=bl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+VR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+VR.SERVER_SUFFIX.ADMIN,r}a(gG,"getClusterUser")});var Jo=S((TZ,tA)=>{"use strict";var IG=fr();tA.exports={writeTransaction:bG};function bG(e,t,r){return IG.writeTransaction(e,t,r)}a(bG,"writeTransaction")});var Ll=S((mZ,wG)=>{wG.exports={name:"harperdb",version:"4.0.5",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.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && 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/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --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'","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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","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":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",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"},"newman-reporter-html":{newman:"5.2.3"}}}});var mt=S((LZ,OA)=>{"use strict";var Tr=Y();Tr.initSync();var CG=require("fs-extra"),LG=require("semver"),gi=require("path"),{monotonicFactory:UG}=require("ulidx"),yG=UG(),sA=require("util"),nA=require("child_process"),DG=sA.promisify(nA.exec),MG=nA.spawn,ee=he(),ie=T(),Bl=b(),mr=I(),Zo=vr(),PG=Jo(),Ai=ur(),{encode:Dl,decode:iA}=require("msgpackr"),{isEmpty:Ts}=Bl,aA=kr(),RZ=_s(),BG=ft(),AZ=sA.promisify(BG.searchByHash),{connect:vG,StorageType:oA,RetentionPolicy:cA,AckPolicy:_A,DeliverPolicy:Ml,NatsConnection:OZ,JetStreamManager:pZ,JetStreamClient:NZ,StringCodec:gZ,JSONCodec:HG,createInbox:vl,StreamSource:IZ,headers:qG,toJsMsg:GG,nuid:bZ,JetStreamOptions:wZ,ErrorCode:rA,nanos:CZ}=require("nats"),{PACKAGE_ROOT:FG}=T(),VG=Ll(),uA=HG(),kG="clustering",$G=VG.engines[ee.NATS_SERVER_NAME],xG=gi.join(FG,"dependencies"),Pl=gi.join(xG,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Ul,yl,Oi,pi,Ni,Yt;OA.exports={runCommand:lA,checkNATSServerInstalled:YG,createConnection:Hl,getConnection:Xo,getJetStreamManager:En,getJetStream:EA,getNATSReferences:Ut,getServerList:WG,createLocalStream:ql,listStreams:dA,deleteLocalStream:QG,getServerConfig:Ii,listRemoteStreams:JG,viewStream:ZG,publishToStream:XG,createWorkQueueStream:zG,addSourceToWorkStream:hA,request:jG,removeSourceFromWorkStream:fA,reloadNATS:Gl,reloadNATSHub:eF,reloadNATSLeaf:tF,extractServerName:SA,requestErrorHandler:rF,updateWorkStream:sF,createLocalTableStream:mA,createTableStreams:nF,purgeTableStream:RA,purgeSchemaTableStreams:iF,getStreamInfo:aF,updateNodeNameLocalStreams:oF,closeConnection:KG};async function lA(e,t=void 0){let{stdout:r,stderr:s}=await DG(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 Ke.error(o),new Error(`Error reading HarperDB config file at ${s}`)}uu(n);let i=n.toJSON();nt=is(i),Ke.trace(hU)}}a(dS,"initConfig");function uu(e){let t=e.toJSON(),r=aU(t);if(r.error)throw wa.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(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(uu,"validateConfig");function AU(e,t){nt===void 0&&(nt={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Ke.trace(`Unable to update config object because config param '${e}' does not exist`);return}nt[r.toLowerCase()]=t}a(AU,"updateConfigObject");function hS(e,t,r=void 0,s=!1,n=!1){nt===void 0&&dS();let i=ES(re.CONFIG_PARAM_MAP.hdb_root),o=ks.join(i,re.HDB_CONFIG_FILE),c=$s(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=_u(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),h=_u(E,r[l]);try{c.setIn([...d],h)}catch(m){Ke.error(m)}}}uu(c);let _=c.getIn(["rootPath"]),u=ks.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=ks.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);qt.copySync(o,l),Ke.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Ke.error(SU),Ke.error(l)}qt.writeFileSync(u,String(c)),n&&(nt=is(c.toJSON())),Ke.trace(`Config parameter: ${e} updated with value: ${t}`)}a(hS,"updateConfigValue");function is(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=is(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(is,"flattenConfig");function _u(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.CONFIG_PARAMS.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(cU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||gt.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 gt.autoCast(t)}a(_u,"castConfigValue");function OU(){let e=gt.getPropsFilePath(),r=La(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return $s(r).toJSON()}a(OU,"getConfiguration");async function pU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return hS(void 0,void 0,n,!0),TU}catch(i){throw typeof i=="string"||i instanceof String?uU(i,i,lU.BAD_REQUEST,void 0,void 0,!0):i}}a(pU,"setConfiguration");function lu(){let e=gt.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(n){throw Ke.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=La(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return $s(r).toJSON()}a(lu,"readConfigFile");function $s(e){return oU.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a($s,"parseYamlDoc");function NU(){let e=lu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=gt.isEmptyOrZeroLength(t)?[]:t;let r=uS(t);if(r)throw wa.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=gt.isEmptyOrZeroLength(s)?[]:s;let n=uS(s);if(n)throw wa.CONFIG_VALIDATION(n.message);if(!gt.isEmptyOrZeroLength(s)&&!gt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!gt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw wa.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(NU,"getClusteringRoutes");function SS(e){let t=La(e);nt={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(gt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?nt[n]=ks.dirname(s):nt[n]=s}return nt}a(SS,"initOldConfig");function gU(e){let t=lu();return _U.get(t,e.replaceAll("_","."))}a(gU,"getConfigFromFile")});var Y=S((a1,mS)=>{"use strict";var Eu=require("fs-extra"),Xt=require("path"),IU=require("os"),bU=require("properties-reader"),Yn=I(),xs=b(),M=T(),Ua=ur(),wU="Error initializing environment manager",ya="BOOT_PROPS_FILE_PATH",TS=!1,CU={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},lr={};mS.exports={BOOT_PROPS_FILE_PATH:ya,getHdbBasePath:LU,setHdbBasePath:UU,get:yU,initSync:MU,setProperty:x,initTestEnvironment:PU};function LU(){return lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(LU,"getHdbBasePath");function UU(e){lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(UU,"setHdbBasePath");function yU(e){let t=Ua.getConfigValue(e);return t===void 0?lr[e]:t}a(yU,"get");function x(e,t){CU[e]&&(lr[e]=t),Ua.updateConfigObject(e,t)}a(x,"setProperty");function DU(){let e;try{e=xs.getPropsFilePath(),Eu.accessSync(e,Eu.constants.F_OK|Eu.constants.R_OK),TS=!0;let t=bU(e);return lr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),lr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),lr[ya]=e,!0}catch{return Yn.trace(`Environment manager found no properties file at ${e}`),!1}}a(DU,"doesPropFileExist");function MU(e=!1){try{(TS||DU())&&(Ua.initConfig(e),lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ua.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Yn.error(wU),Yn.error(t),console.error(t),process.exit(1)}}a(MU,"initSync");function PU(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,_=Xt.join(__dirname,"../../","unitTests");lr[ya]=Xt.join(_,"hdb_boot_properties.file"),x(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Xt.join(_,"settings.test")),x(M.HDB_SETTINGS_NAMES.INSTALL_USER,IU.userInfo().username),x(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Xt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.HDB_SETTINGS_NAMES.CERT_KEY,Xt.join(_,"envDir","utility","keys","certificate.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Xt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Xt.join(_,"envDir","utility","keys","certificate.pem")),x(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),x(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Xt.join(_,"envDir","log")),x(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),x(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),x(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Xt.join(_,"envDir")),x(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,xs.isEmpty(n)?!0:n),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,xs.isEmpty(n)?!0:n),x(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),x(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,xs.isEmpty(i)?!1:i),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,xs.isEmpty(i)?!1:i),x(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),x(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),x(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Xt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),x(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,xs.isEmpty(c)?!1:c),o&&(x("CORS_ACCESSLIST",o),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(x(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(x(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(x(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ya}. Please check your boot props and settings files`;Yn.fatal(r),Yn.error(t)}}a(PU,"initTestEnvironment")});var z=S((c1,US)=>{"use strict";var du=require("lmdb"),It=require("fs-extra"),Gt=require("path"),Ma=ns(),RS=I(),De=rt().LMDB_ERRORS_ENUM,Pa=rS(),hu=nS(),AS=aS(),yr=Ye(),o1=T(),Kn=Y();Kn.initSync();var OS=Kn.get("STORAGE_WRITEASYNC")===!0||Kn.get("STORAGE_WRITEASYNC")==="true"||Kn.get("STORAGE_WRITEASYNC")==="TRUE",pS=Kn.get("STORAGE_OVERLAPPINGSYNC"),NS=1024*1024*1024,gS=1e4,IS=1e3,Ft=yr.INTERNAL_DBIS_NAME,bS=yr.DBI_DEFINITION_NAME,BU="data.mdb",vU="lock.mdb",Wn=".mdb",HU="-lock",Da=class{constructor(t,r,s=!1){this.dbi=bt(t,r),this.key_type=this.dbi[yr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[yr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new du.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Da,"TransactionCursor");function Su(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(Su,"pathEnvNameValidation");async function fu(e,t,r=!0){try{await It.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Gt.join(e,t+Wn);return await It.access(s,It.constants.R_OK|It.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await It.access(Gt.join(e,t,BU),It.constants.R_OK|It.constants.F_OK),Gt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(fu,"validateEnvironmentPath");function Ba(e,t){if(Ma.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ba,"validateEnvDBIName");async function qU(e,t,r=!1,s=!1){Su(e,t),t=t.toString();try{return await fu(e,t,s),Tu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Gt.join(e,t);await It.mkdirp(s?i:e);let o=new AS(s?i:i+Wn,NS,gS,IS,!1,OS,pS),c=du.open(o);c.dbis=Object.create(null);let _=new hu(!1);c.openDB(Ft,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=mu(e,t,r);return c[yr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(qU,"createEnvironment");async function GU(e,t,r,s=!0){let n=await Tu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await It.access(Gt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(GU,"copyEnvironment");async function Tu(e,t,r=!1){Su(e,t),t=t.toString();let s=mu(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 fu(e,t),i=Gt.join(e,t+Wn),o=n!=i,c=new AS(n,NS,gS,IS,o,OS,pS),_=du.open(c);_.dbis=Object.create(null);let u=CS(_);for(let l=0;l<u.length;l++)bt(_,u[l]);return _[yr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Tu,"openEnvironment");async function FU(e,t,r=!1){Su(e,t),t=t.toString();let s=Gt.join(e,t+Wn),n=await fu(e,t);if(global.lmdb_map!==void 0){let i=mu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await wS(o),delete global.lmdb_map[i]}}await It.remove(n),await It.remove(n===s?n+HU:Gt.join(Gt.dirname(n),vU))}a(FU,"deleteEnvironment");async function wS(e){Ma.validateEnv(e);let t=e[yr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(wS,"closeEnvironment");function mu(e,t,r=!1){let n=`${Gt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(mu,"getCachedEnvironmentName");function VU(e){Ma.validateEnv(e);let t=Object.create(null),r=bt(e,Ft);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ft)try{t[s]=Object.assign(new Pa,n)}catch{RS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VU,"listDBIDefinitions");function CS(e){Ma.validateEnv(e);let t=[],r=bt(e,Ft);for(let{key:s}of r.getRange({start:!1}))s!==Ft&&t.push(s);return t}a(CS,"listDBIs");function kU(e,t){let s=bt(e,Ft).getEntry(t),n=new Pa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{RS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(kU,"getDBIDefinition");function LS(e,t,r,s=!1){if(Ba(e,t),t=t.toString(),t===Ft)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return bt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new hu(r,s===!0),o=e.openDB(t,i),c=new Pa(r===!0,s);return o[bS]=c,bt(e,Ft).putSync(t,c),e.dbis[t]=o,o}throw n}}a(LS,"createDBI");function bt(e,t){if(Ba(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ft?r=kU(e,t):r=new Pa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new hu(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(De.DBI_DOES_NOT_EXIST):n}return s[bS]=r,e.dbis[t]=s,s}a(bt,"openDBI");function $U(e,t){Ba(e,t),t=t.toString();let r=bt(e,t),s=r.getStats();return r[yr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a($U,"statDBI");async function xU(e,t){try{let r=Gt.join(e,t+Wn);return(await It.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(xU,"environmentDataSize");function YU(e,t){if(Ba(e,t),t=t.toString(),t===Ft)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);bt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],bt(e,Ft).removeSync(t)}a(YU,"dropDBI");function KU(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{bt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)LS(e,n,n!==t,n===t);else throw i}}}a(KU,"initializeDBIs");US.exports={openDBI:bt,openEnvironment:Tu,createEnvironment:qU,listDBIs:CS,listDBIDefinitions:VU,createDBI:LS,dropDBI:YU,statDBI:$U,deleteEnvironment:FU,initializeDBIs:KU,TransactionCursor:Da,environmentDataSize:xU,copyEnvironment:GU,closeEnvironment:wS}});var DS=S((_1,yS)=>{"use strict";var va=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(va,"InsertRecordsResponseObject");yS.exports=va});var PS=S((u1,MS)=>{"use strict";var Ha=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(Ha,"UpdateRecordsResponseObject");MS.exports=Ha});var vS=S((l1,BS)=>{"use strict";var qa=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(qa,"UpsertRecordsResponseObject");BS.exports=qa});var Ys=S((S1,qS)=>{"use strict";var WU=z(),QU=DS(),JU=PS(),ZU=vS(),Jn=ns(),Qn=rt().LMDB_ERRORS_ENUM,XU=Ye(),Dr=T(),zU=b(),jU=require("uuid"),E1=require("lmdb"),{handleHDBError:ey,hdb_errors:ty}=D(),{OVERFLOW_MARKER:d1,MAX_SEARCH_KEY_LENGTH:h1}=XU,Ru=Dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,as=Dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ry(e,t,r,s,n=!0){Nu(e,t,r,s),Au(e,t,r);let i=new QU,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];HS(u,!0,n);let l=sy(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Ou(o,c,s,i)}a(ry,"insertRecords");function sy(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 u=c([[{}]]);Array.isArray(u)&&(c=u[0][Dr.FUNC_VAL],s[o]=c)}let _=Jn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[as])})}a(sy,"insertRecord");function ny(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(ny,"removeSkippedRecords");function HS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[as]))&&(e[as]=s),t===!0?(r===!0||!Number.isInteger(e[Ru]))&&(e[Ru]=s):delete e[Ru]}a(HS,"setTimestamps");function Au(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),WU.initializeDBIs(e,t,r)}a(Au,"initializeTransaction");async function iy(e,t,r,s,n=!0){Nu(e,t,r,s),Au(e,t,r);let i=new JU,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=pu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Ou(c,_,s,i,o)}a(iy,"updateRecords");async function ay(e,t,r,s,n=!0){try{Nu(e,t,r,s)}catch(_){throw ey(_,_.message,ty.HTTP_STATUS_CODES.BAD_REQUEST)}Au(e,t,r);let i=new ZU,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;zU.isEmpty(u[t])?(l=jU.v4(),u[t]=l):l=u[t];let E=pu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Ou(o,c,s,i)}a(ay,"upsertRecords");async function Ou(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Jn.getMicroTime(),ny(r,n),s}a(Ou,"finalizeWrite");function pu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(HS(r,!l,o),Number.isInteger(r[as])&&u[as]>r[as])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],C=e.dbis[m];if(C===void 0)continue;let L=u[m];if(typeof R=="function"){let X=R([[u]]);Array.isArray(X)&&(R=X[0][Dr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=Jn.getIndexedValues(L);if(B)for(let X=0,V=B.length;X<V;X++)C.remove(B[X],s);if(B=Jn.getIndexedValues(R),B)for(let X=0,V=B.length;X<V;X++)C.put(B[X],s)}let h=Object.assign({},u,r);c.put(s,h,h[as])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:pu(e,t,r,s,n,i,o))}a(pu,"updateUpsertRecord");function oy(e,t,r){if(Jn.validateEnv(e),t===void 0)throw new Error(Qn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Qn.WRITE_ATTRIBUTES_REQUIRED):new Error(Qn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oy,"validateBasic");function Nu(e,t,r,s){if(oy(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Qn.RECORDS_REQUIRED):new Error(Qn.RECORDS_MUST_BE_ARRAY)}a(Nu,"validateWrite");qS.exports={insertRecords:ry,updateRecords:iy,upsertRecords:ay}});var te=S((f1,FS)=>{"use strict";var gu=T(),Ks=Y(),Iu=require("path");Ks.initSync();var Ga,Fa,Va;function GS(){if(Ga!==void 0)return Ga;if(Ks.getHdbBasePath()!==void 0)return Ga=Iu.join(Ks.getHdbBasePath(),gu.SCHEMA_DIR_NAME),Ga}a(GS,"getBaseSchemaPath");function cy(){if(Fa!==void 0)return Fa;if(Ks.getHdbBasePath()!==void 0)return Fa=Iu.join(GS(),gu.SYSTEM_SCHEMA_NAME),Fa}a(cy,"getSystemSchemaPath");function _y(){if(Va!==void 0)return Va;if(Ks.getHdbBasePath()!==void 0)return Va=Iu.join(Ks.getHdbBasePath(),gu.TRANSACTIONS_DIR_NAME),Va}a(_y,"getTransactionAuditStorePath");FS.exports={getBaseSchemaPath:GS,getSystemSchemaPath:cy,getTransactionAuditStorePath:_y}});var Er=S((T1,$S)=>{"use strict";var kS=b(),VS=T(),$a=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bu=require("joi"),ka={schema_format:{pattern:$a,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},uy=bu.alternatives(bu.string().min(1).max(ka.schema_length.maximum).pattern($a).messages({"string.pattern.base":"{:#label} "+ka.schema_format.message}),bu.number()).required();function ly(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ka.schema_length.maximum?`'${e}' maximum of 250 characters`:$a.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ly,"checkValidTable");function Ey(e,t){return kS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Ey,"validateSchemaExists");function dy(e,t){let r=t.state.ancestors[0].schema;return kS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(dy,"validateTableExists");function hy(e,t){return e.toLowerCase()===VS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${VS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(hy,"validateSchemaName");$S.exports={common_validators:ka,schema_regex:$a,hdb_schema_table:uy,validateSchemaExists:Ey,validateTableExists:dy,validateSchemaName:hy,checkValidTable:ly}});var xa=S((m1,xS)=>{var{common_validators:Mr}=Er(),Zn=Ee(),Vt="is required",Z={schema:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},table:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},attribute:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},hash_attribute:{presence:!0,format:Mr.schema_format,length:Mr.schema_length}};function Xn(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(Xn,"makeAttributesStrings");function Sy(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(Sy,"schema_object");function fy(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(fy,"table_object");function Ty(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Vt},Zn.validateObject(e,Z)}a(Ty,"create_table_object");function my(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence={message:Vt},Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(my,"attribute_object");function Ry(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(Ry,"describe_table");function Ay(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(Ay,"validateTableResidence");xS.exports={schema_object:Sy,create_table_object:Ty,table_object:fy,attribute_object:my,describe_table:Ry,validateTableResidence:Ay}});var KS=S((R1,YS)=>{"use strict";var Oy=require("uuid"),Ya=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Oy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ya,"CreateAttributeObject");YS.exports=Ya});var Wa=S((A1,WS)=>{"use strict";var py=KS(),Ka=class extends py{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Ka,"LMDBCreateAttributeObject");WS.exports=Ka});var JS=S((O1,QS)=>{"use strict";QS.exports=gy;var Ny="inserted";function gy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ny?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(gy,"returnObject")});var Qa=S((p1,XS)=>{"use strict";var Iy=T(),wu=z(),by=Ys(),{getSystemSchemaPath:wy,getBaseSchemaPath:Cy}=te(),Ly=require("path"),Uy=ss(),yy=xa(),Dy=Wa(),My=JS(),{handleHDBError:Py,hdb_errors:By}=D(),vy=b(),Cu=Uy.hdb_attribute,ZS=[];for(let e=0;e<Cu.attributes.length;e++)ZS.push(Cu.attributes[e].attribute);var Hy="inserted";XS.exports=qy;async function qy(e){let t=yy.attribute_object(e);if(t)throw Py(new Error,t.message,By.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vy.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new Dy(e.schema,e.table,e.attribute,e.id);try{let n=await wu.openEnvironment(Ly.join(Cy(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);wu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await wu.openEnvironment(wy(),Iy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await by.insertRecords(i,Cu.hash_attribute,ZS,[s]);return My(Hy,o,{records:[s]},c)}catch(n){throw n}}a(qy,"lmdbCreateAttribute")});var Uu=S((N1,jS)=>{var{hdb_schema_table:zS}=Er(),Gy=Ee(),Lu=require("joi"),Fy={undefined:"undefined",null:"null"},Vy=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||Fy[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"),ky=Lu.object({schema:zS,table:zS,records:Lu.array().items(Lu.object().custom(Vy)).required()});jS.exports=function(e){return Gy.validateBySchema(e,ky)}});var Ja=S((I1,tf)=>{"use strict";var dr=b(),ef=I(),g1=Uu();tf.exports=$y;function $y(e){if(dr.isEmpty(e))throw new Error("invalid update parameters defined.");if(dr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(dr.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(dr.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&&dr.isEmptyOrZeroLength(o[r]))throw ef.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(!dr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ef.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`);!dr.isEmpty(o[r])&&o[r]!==""&&s.has(dr.autoCast(o[r]))&&(o.skip=!0),s.add(dr.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($y,"insertUpdateValidate")});var zn=S((b1,rf)=>{"use strict";var xy=T().OPERATIONS_ENUM,Za=class{constructor(t,r,s,n,i=void 0){this.operation=xy.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Za,"InsertObject");rf.exports=Za});var za=S((C1,sf)=>{"use strict";var w1=zn(),Xa=T(),Du=b(),yu=I(),Yy=require("uuid"),{handleHDBError:jn,hdb_errors:Ky}=D(),{HDB_ERROR_MSGS:ei,HTTP_STATUS_CODES:ti}=Ky;sf.exports=Wy;function Wy(e,t,r){for(let n=0;n<t.length;n++)Qy(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Jy(i,r,e.operation)}}a(Wy,"processRows");function Qy(e){if(Buffer.byteLength(String(e))>Xa.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw jn(new Error,ei.ATTR_NAME_LENGTH_ERR(e),ti.BAD_REQUEST,void 0,void 0,!0);if(Du.isEmptyOrZeroLength(e)||Du.isEmpty(e.trim()))throw jn(new Error,ei.ATTR_NAME_NULLISH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}a(Qy,"validateAttribute");function Jy(e,t,r){if(!e.hasOwnProperty(t)||Du.isEmptyOrZeroLength(e[t])){if(r===Xa.OPERATIONS_ENUM.INSERT||r===Xa.OPERATIONS_ENUM.UPSERT){e[t]=Yy.v4();return}throw yu.error("Update transaction aborted due to record with no hash value:",e),jn(new Error,ei.RECORD_MISSING_HASH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Xa.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yu.error(e),jn(new Error,ei.HASH_VAL_LENGTH_ERR,ti.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw yu.error(e),jn(new Error,ei.INVALID_FORWARD_SLASH_IN_HASH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}a(Jy,"validateHash")});var af=S((L1,nf)=>{"use strict";var ja=class{constructor(t,r){this.type=t,this.message=r}};a(ja,"IPCEventObject");nf.exports=ja});var os=S((U1,of)=>{"use strict";var Zy=I(),Mu=b(),Xy=T(),{IPC_ERRORS:ri}=rt();of.exports={sendIpcEvent:zy,validateEvent:jy,SchemaEventMsg:eD,UserEventMsg:tD};function zy(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):Zy.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(zy,"sendIpcEvent");function jy(e){if(typeof e!="object")return ri.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Mu.isEmpty(e.type))return ri.MISSING_TYPE;if(!e.hasOwnProperty("message")||Mu.isEmpty(e.message))return ri.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Mu.isEmpty(e.message.originator))return ri.MISSING_ORIGIN;if(Xy.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ri.INVALID_EVENT(e.type)}a(jy,"validateEvent");function eD(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(eD,"SchemaEventMsg");function tD(e){this.originator=e}a(tD,"UserEventMsg")});var Ws=S((D1,lf)=>{"use strict";var cf=T(),y1=b(),eo=I(),_f=af(),{sendIpcEvent:uf}=os();function rD(e){try{eo.trace("signalSchemaChange called with message:",e);let t=new _f(cf.IPC_EVENT_TYPES.SCHEMA,e);uf(t)}catch(t){eo.error(t)}}a(rD,"signalSchemaChange");function sD(e){try{eo.trace("signalUserChange called with message:",e);let t=new _f(cf.IPC_EVENT_TYPES.USER,e);uf(t)}catch(t){eo.error(t)}}a(sD,"signalUserChange");lf.exports={signalSchemaChange:rD,signalUserChange:sD}});var to=S((M1,df)=>{"use strict";var Ef=b(),nD=T(),iD=I(),aD=Qa(),oD=Wa(),cD=Ws(),{SchemaEventMsg:_D}=os(),uD="already exists in";df.exports=lD;async function lD(e,t,r){try{if(Ef.isEmptyOrZeroLength(r))return r;let s=[];Ef.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 ED(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(lD,"lmdbCheckForNewAttributes");async function ED(e,t,r,s){let n=new oD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await dD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(uD))iD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(ED,"createNewAttribute");async function dD(e){let t;try{return t=await aD(e),cD.signalSchemaChange(new _D(process.pid,nD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(dD,"createAttribute")});var Qs=S((P1,hf)=>{"use strict";var ro=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(ro,"LMDBTransactionObject");hf.exports=ro});var ff=S((B1,Sf)=>{"use strict";var hD=Qs(),SD=T().OPERATIONS_ENUM,so=class extends hD{constructor(t,r,s,n,i=void 0){super(SD.INSERT,r,s,n,i),this.records=t}};a(so,"LMDBInsertTransactionObject");Sf.exports=so});var mf=S((v1,Tf)=>{"use strict";var fD=Qs(),TD=T().OPERATIONS_ENUM,no=class extends fD{constructor(t,r,s,n,i,o=void 0){super(TD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(no,"LMDBUpdateTransactionObject");Tf.exports=no});var Af=S((H1,Rf)=>{"use strict";var mD=Qs(),RD=T().OPERATIONS_ENUM,io=class extends mD{constructor(t,r,s,n,i,o=void 0){super(RD.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(io,"LMDBUpsertTransactionObject");Rf.exports=io});var pf=S((q1,Of)=>{"use strict";var AD=Qs(),OD=T().OPERATIONS_ENUM,ao=class extends AD{constructor(t,r,s,n,i=void 0){super(OD.DELETE,s,n,t,i),this.original_records=r}};a(ao,"LMDBDeleteTransactionObject");Of.exports=ao});var si=S((G1,bf)=>{"use strict";var pD=require("path"),Nf=z(),ND=ff(),gD=mf(),ID=Af(),bD=pf(),Js=Ye(),gf=b(),{CONFIG_PARAMS:wD}=T(),If=Y();If.initSync();var oo=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:CD}=te();bf.exports=LD;async function LD(e,t){if(If.get(wD.LOGGING_AUDITLOG)===!1)return;let r=pD.join(CD(),e.schema.toString()),s=await Nf.openEnvironment(r,e.table,!0),n=UD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Nf.initializeDBIs(s,Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Js.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),gf.isEmpty(n.user_name)||s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(LD,"writeTransaction");function UD(e,t){let r=gf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===oo.INSERT)return new ND(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.UPDATE)return new gD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.UPSERT)return new ID(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.DELETE)return new bD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UD,"createTransactionObject")});var Pu=S((V1,wf)=>{"use strict";var yD=Ja(),F1=zn(),Zs=T(),DD=za(),MD=Ys().insertRecords,PD=z(),BD=require("path"),vD=I(),HD=to(),{getBaseSchemaPath:qD}=te(),GD=si();wf.exports=FD;async function FD(e){try{let{schema_table:t,attributes:r}=yD(e);DD(e,r,t.hash_attribute),e.schema!==Zs.SYSTEM_SCHEMA_NAME&&(r.includes(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await HD(e.hdb_auth_header,t,r),n=BD.join(qD(),e.schema.toString()),i=await PD.openEnvironment(n,e.table),o=await MD(i,t.hash_attribute,r,e.records,e[Zs.CLUSTERING_FLAG]!==!0);try{await GD(e,o)}catch(c){vD.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(FD,"lmdbCreateRecords")});var Uf=S((k1,Lf)=>{"use strict";var Cf=T(),VD=Pu(),kD=zn(),$D=require("fs-extra"),xD=require("path"),{getBaseSchemaPath:YD}=te();Lf.exports=KD;async function KD(e){let t=[{name:e.schema,createddate:Date.now()}],r=new kD(Cf.SYSTEM_SCHEMA_NAME,Cf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VD(r),await $D.mkdirp(xD.join(YD(),e.schema.toString()))}a(KD,"lmdbCreateSchema")});var Df=S(($1,yf)=>{"use strict";var co=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(co,"DeleteRecordsResponseObject");yf.exports=co});var Hu=S((W1,Bf)=>{"use strict";var Mf=z(),Bu=ns(),vu=rt().LMDB_ERRORS_ENUM,WD=Ye(),Pf=I(),x1=b(),QD=require("lmdb"),JD=Df(),{OVERFLOW_MARKER:Y1,MAX_SEARCH_KEY_LENGTH:K1}=WD;async function ZD(e,t,r){if(Bu.validateEnv(e),t===void 0)throw new Error(vu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(vu.IDS_REQUIRED):new Error(vu.IDS_MUST_BE_ARRAY);try{let s=Mf.listDBIs(e);Mf.initializeDBIs(e,t,s);let n=new JD,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,QD.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let C=s[R];if(!h.hasOwnProperty(C)||C===t)continue;let L=e.dbis[C],B=h[C];if(B!=null)try{let X=Bu.getIndexedValues(B);if(X)for(let V=0,Q=X.length;V<Q;V++)L.remove(X[V],i)}catch{Pf.warn(`cannot delete from attribute: ${C}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(h)}catch(h){Pf.warn(h),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Bu.getMicroTime(),n}catch(s){throw s}}a(ZD,"deleteRecords");Bf.exports={deleteRecords:ZD}});var ni=S((Q1,Hf)=>{"use strict";var Xs=b(),XD=Hu(),zD=z(),jD=require("path"),{getBaseSchemaPath:eM}=te(),tM=si(),rM=I();Hf.exports=sM;async function sM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xs.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xs.isEmptyOrZeroLength(e.hash_values)&&!Xs.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];Xs.isEmpty(_)||e.hash_values.push(_)}}if(Xs.isEmptyOrZeroLength(e.hash_values))return vf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xs.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=jD.join(eM(),e.schema.toString()),i=await zD.openEnvironment(n,e.table),o=await XD.deleteRecords(i,s,e.hash_values);try{t===!0&&await tM(e,o)}catch(c){rM.error(`unable to write transaction due to ${c.message}`)}return vf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(sM,"lmdbDeleteRecords");function vf(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(vf,"createDeleteResponse")});var Gu=S((Z1,qf)=>{"use strict";var nM=T(),J1=ns();function qu(e,t){let r=Object.create(null);if(t.length===1&&nM.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(qu,"parseRow");function iM(e,t,r,s){let n=qu(r,e);s.push(n)}a(iM,"searchAll");function aM(e,t,r,s){let n=qu(r,e);s[t]=n}a(aM,"searchAllToMap");function oM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(oM,"iterateDBI");function cs(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(cs,"pushResults");function cM(e,t,r,s,n,i){t.toString().endsWith(e)&&cs(t,r,s,n,i)}a(cM,"endsWith");function _M(e,t,r,s,n,i){t.toString().includes(e)&&cs(t,r,s,n,i)}a(_M,"contains");function uM(e,t,r,s,n,i){t>e&&cs(t,r,s,n,i)}a(uM,"greaterThanCompare");function lM(e,t,r,s,n,i){t>=e&&cs(t,r,s,n,i)}a(lM,"greaterThanEqualCompare");function EM(e,t,r,s,n,i){t<e&&cs(t,r,s,n,i)}a(EM,"lessThanCompare");function dM(e,t,r,s,n,i){t<=e&&cs(t,r,s,n,i)}a(dM,"lessThanEqualCompare");qf.exports={parseRow:qu,searchAll:iM,searchAllToMap:aM,iterateDBI:oM,endsWith:cM,contains:_M,greaterThanCompare:uM,greaterThanEqualCompare:lM,lessThanCompare:EM,lessThanEqualCompare:dM,pushResults:cs}});var zs=S((j1,xf)=>{"use strict";var wt=z(),hM=I(),ht=ns(),Pr=Ye(),ce=rt().LMDB_ERRORS_ENUM,X1=b(),SM=T(),kt=Gu(),z1=require("lmdb"),{OVERFLOW_MARKER:Gf,MAX_SEARCH_KEY_LENGTH:fM}=Pr,ii={lazy:!0};function Ff(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Fu(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Ff,"iterateFullIndex");function ai(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=Fu(e,t,r);E[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,C=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:h,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:C}))kt.pushResults(d(L,B),B,l,t,r);return l}a(ai,"iterateRangeBetween");function Fu(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(Gf)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Pr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,ii)[r]}return n}}a(Fu,"getOverflowCheck");function TM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);_o(r),r=oi(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))kt.searchAll(r,_,u,o);return o}a(TM,"searchAll");function mM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return _o(r),r=oi(e,r),Ff(e,t,t,kt.searchAllToMap.bind(null,r),s,n,i)}a(mM,"searchAllToMap");function RM(e,t,r=!1,s=void 0,n=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Ff(e,void 0,t,kt.iterateDBI,r,s,n)}a(RM,"iterateDBI");function AM(e,t){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(AM,"countAll");function OM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=wt.openDBI(e,r);s=ht.convertKeyValueToWrite(s);let _=[[],[]];if(c[Pr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,ii);u!==void 0&&kt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))kt.pushResults(s,u,_,t,r);return _}a(OM,"equals");function pM(e,t,r){return Br(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(pM,"count");function NM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ht.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))kt.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))kt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(NM,"startsWith");function gM(e,t,r,s,n=!1,i=void 0,o=void 0){return Vf(e,t,r,s,n,i,o,!0)}a(gM,"endsWith");function Vf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){Br(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Fu(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let h=d.toString();if(h.endsWith(Gf))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?h.endsWith(s):h.includes(s))if(u[Pr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,h){if(o>0){o--;return}i!==0&&(kt.pushResults(d,h,_,t,r),i--)}return a(E,"found_match"),_}a(Vf,"contains");function IM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ai(e,t,r,s,_,n,i,o,!0,!1)}a(IM,"greaterThan");function bM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ai(e,t,r,s,_,n,i,o,!1,!1)}a(bM,"greaterThanEqual");function wM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ai(e,t,r,_,s,n,i,o,!1,!0)}a(wM,"lessThan");function CM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ai(e,t,r,_,s,n,i,o,!1,!1)}a(CM,"lessThanEqual");function LM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ht.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=ht.convertKeyValueToWrite(s),n=ht.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ai(e,t,r,s,n,i,o,c)}a(LM,"between");function UM(e,t,r,s){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(_o(r),r=oi(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?ii:void 0);return i&&(n=kt.parseRow(i,r)),n}a(UM,"searchByHash");function yM(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,ii)===void 0&&(s=!1),s}a(yM,"checkHashExists");function DM(e,t,r,s,n=[]){$f(e,t,r,s,n);let i=kf(e,t,r,s,n);return Object.values(i)}a(DM,"batchSearchByHash");function MM(e,t,r,s,n=[]){return $f(e,t,r,s,n),kf(e,t,r,s,n)}a(MM,"batchSearchByHashToMap");function kf(e,t,r,s,n=[]){r=oi(e,r);let i=Object.create(null),o=r.length<3?ii:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=kt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw hM.warn(u),u}}return i}a(kf,"batchHashSearch");function $f(e,t,r,s,n){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(_o(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a($f,"initializeBatchSearchByHash");function _o(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(_o,"validateFetchAttributes");function Br(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>fM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Br,"validateComparisonFunctions");function oi(e,t){return t.length===1&&SM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(oi,"setGetWholeRowAttributes");xf.exports={searchAll:TM,searchAllToMap:mM,count:pM,countAll:AM,equals:OM,startsWith:NM,endsWith:gM,contains:Vf,searchByHash:UM,setGetWholeRowAttributes:oi,batchSearchByHash:DM,batchSearchByHashToMap:MM,checkHashExists:yM,iterateDBI:RM,greaterThan:IM,greaterThanEqual:bM,lessThan:wM,lessThanEqual:CM,between:LM}});var ci=S((tJ,Qf)=>{var Yf=require("lodash"),Kf=Ee(),W=require("joi"),PM=b(),{hdb_schema_table:$t,checkValidTable:Wf}=Er(),{handleHDBError:BM,hdb_errors:vM}=D(),{HTTP_STATUS_CODES:HM}=vM,eJ=W.object({schema:$t,table:$t,hash_values:W.array().min(1).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items($t).required()}),qM=W.object({schema:$t,table:$t,search_attribute:$t,search_value:W.any().required(),get_attributes:W.array().min(1).items($t).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),GM=W.object({schema:$t,table:$t,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($t).required(),conditions:W.array().min(1).items(W.object({search_attribute:$t,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()});Qf.exports=function(e,t){let r=null;switch(t){case"value":r=Kf.validateBySchema(e,qM);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Wf("schema",e.schema)),i(Wf("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=Kf.validateBySchema(e,GM);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=PM.checkGlobalSchemaTable(e.schema,e.table);if(n)return BM(new Error,n,HM.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 _=Yf.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Yf.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 Vu=S((rJ,Jf)=>{"use strict";var FM=z(),VM=ci(),kM=require("path"),{getBaseSchemaPath:$M}=te();Jf.exports=xM;function xM(e){let t=VM(e,"hashes");if(t)throw t;let r=kM.join($M(),e.schema.toString());return FM.openEnvironment(r,e.table)}a(xM,"initialize")});var ku=S((sJ,Zf)=>{"use strict";var YM=zs(),KM=Vu();Zf.exports=WM;async function WM(e){try{let t=await KM(e),r=global.hdb_schema[e.schema][e.table];return YM.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(WM,"lmdbGetDataByHash")});var _s=S((nJ,Xf)=>{"use strict";var uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(uo,"SearchByHashObject");Xf.exports=uo});var jf=S((aJ,zf)=>{"use strict";var iJ=_s(),QM=zs(),JM=Vu();zf.exports=ZM;async function ZM(e){try{let t=await JM(e),r=global.hdb_schema[e.schema][e.table];return QM.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(ZM,"lmdbSearchByHash")});var xt=S((oJ,eT)=>{"use strict";var lo=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(lo,"SearchObject");eT.exports=lo});var Eo=S((cJ,iT)=>{"use strict";var We=zs(),XM=z(),zM=require("path"),jM=b(),U=Ye(),us=T(),{getBaseSchemaPath:eP}=te(),tP=ss(),tT=rt().LMDB_ERRORS_ENUM,{compareKeys:js}=require("ordered-binary"),hr=us.SEARCH_WILDCARDS;async function rP(e,t,r){let s;e.schema===us.SYSTEM_SCHEMA_NAME?s=tP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=nT(e,s.hash_attribute,r,t);return rT(e,n,s.hash_attribute,r)}a(rP,"prepSearch");async function rT(e,t,r,s){let n=zM.join(eP(),e.schema.toString()),i=await XM.openEnvironment(n,e.table),o=sT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(iP(e,r)===!1)return s===!0?nP(o):o[1];let _=o[0];return s===!0?We.batchSearchByHashToMap(i,r,e.get_attributes,_):We.batchSearchByHash(i,r,e.get_attributes,_)}a(rT,"executeSearch");function sT(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 U.SEARCH_TYPES.EQUALS:n=We.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=We.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=We.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=We.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return We.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return We.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return We.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return We.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=We.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=We.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=We.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=We.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=We.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(sT,"searchByType");function sP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return js(i,s[0])>=0&&js(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>js(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>js(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>js(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>js(n[r],s)<=0;default:return Object.create(null)}}a(sP,"filterByType");function nP(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(nP,"createMapFromArrays");function iP(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(iP,"checkToFetchMore");function nT(e,t,r,s){if(jM.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),hr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(hr[0])<0&&n.indexOf(hr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(hr.indexOf(i)>=0&&hr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(hr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(hr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(hr[0])||n.includes(hr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(tT.UNKNOWN_SEARCH_TYPE)}else switch(s){case us.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case us.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case us.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case us.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case us.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(tT.UNKNOWN_SEARCH_TYPE)}}a(nT,"createSearchTypeFromSearchObject");iT.exports={executeSearch:rT,createSearchTypeFromSearchObject:nT,prepSearch:rP,searchByType:sT,filterByType:sP}});var oT=S((uJ,aT)=>{"use strict";var _J=xt(),aP=ci(),oP=b(),cP=T(),_P=Eo();aT.exports=uP;async function uP(e,t){if(!oP.isEmpty(t)&&cP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aP(e,"value");if(s)throw s;let n=!0;try{return await _P.prepSearch(e,t,n)}catch(i){throw i}}a(uP,"lmdbGetDataByValue")});var en=S((EJ,cT)=>{"use strict";var lJ=xt(),lP=ci(),EP=b(),dP=T(),hP=Eo();cT.exports=SP;async function SP(e,t){if(!EP.isEmpty(t)&&dP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lP(e,"value");if(s)throw s;let n=!1;try{return await hP.prepSearch(e,t,n)}catch(i){throw i}}a(SP,"lmdbSearchByValue")});var uT=S((hJ,_T)=>{"use strict";var dJ=Ye(),ho=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(ho,"SearchByConditionsObject");var So=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(So,"SearchCondition");var fo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(fo,"SortAttribute");_T.exports={SearchByConditionsObject:ho,SearchCondition:So,SortAttribute:fo}});var fT=S((fJ,ST)=>{"use strict";var SJ=uT().SearchByConditionsObject,fP=xt(),TP=ci(),$u=zs(),To=Ye(),hT=Eo(),mP=Gu(),lT=require("lodash"),{getBaseSchemaPath:RP}=te(),AP=require("path"),OP=z(),{handleHDBError:ET,hdb_errors:pP}=D(),{HTTP_STATUS_CODES:NP}=pP,gP=1e8,IP={lazy:!0};ST.exports=bP;async function bP(e){try{let t=TP(e,"conditions");if(t)throw ET(t,t.message,NP.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=AP.join(RP(),e.schema.toString()),s=await OP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=lT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===To.SEARCH_TYPES.EQUALS?o.estimated_count=$u.count(s,o.search_attribute,o.search_value):c===To.SEARCH_TYPES.CONTAINS||c===To.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=gP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await dT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(hT.filterByType),u=_.length,l=[],E=$u.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,IP);for(let C=0;C<u;C++)if(!_[C](R))continue e;if(d>0){d--;continue}if(h<=0)break;h--,l.push(mP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await dT(s,e,_,n.hash_attribute);c.push(u)}if(o=lT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return $u.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw ET(t)}}a(bP,"lmdbSearchByConditions");async function dT(e,t,r,s){let n=new fP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===To.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,hT.searchByType(e,n,i,s)}a(dT,"executeConditionSearch")});var _i=S((TJ,TT)=>{"use strict";var wP=T().OPERATIONS_ENUM,mo=class{constructor(t,r,s,n=void 0){this.operation=wP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(mo,"DeleteObject");TT.exports=mo});var xu=S((mJ,mT)=>{"use strict";var Ro=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Ro,"DropAttributeObject");mT.exports=Ro});var Ku=S((AJ,RT)=>{"use strict";var CP=xt(),LP=_i(),RJ=xu(),zt=T(),UP=b(),Yu=z(),yP=ss(),DP=en(),MP=ni(),{getBaseSchemaPath:PP}=te(),BP=require("path");RT.exports=vP;async function vP(e,t=!0){let r;e.schema===zt.SYSTEM_SCHEMA_NAME?r=yP[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await qP(e),n=BP.join(PP(),e.schema.toString()),i=await Yu.openEnvironment(n,e.table);return t===!0&&await HP(e,i,r.hash_attribute),Yu.dropDBI(i,e.attribute),s}a(vP,"lmdbDropAttribute");async function HP(e,t,r){let s=Yu.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(HP,"removeAttributeFromAllObjects");async function qP(e){let t=new CP(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=(await DP(t)).filter(o=>o[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(UP.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 LP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return MP(i)}a(qP,"dropAttributeFromSystem")});var NT=S((OJ,pT)=>{"use strict";var GP=Ku(),FP=xu(),AT=b(),OT=I(),VP=rt().LMDB_ERRORS_ENUM;pT.exports=kP;async function kP(e){if(AT.isEmpty(global.hdb_schema[e.schema])||AT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new FP(e.schema,e.table,r);try{await GP(n,!1)}catch(i){i.message!==VP.DBI_DOES_NOT_EXIST&&OT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw OT.error(`Error dropping attribute ${r}`),s}}a(kP,"lmdbDropAllAttributes")});var Wu=S((NJ,DT)=>{"use strict";var CT=xt(),LT=_i(),UT=en(),yT=ni(),pJ=NT(),it=T(),gT=b(),IT=z(),{getBaseSchemaPath:$P,getTransactionAuditStorePath:xP}=te(),bT=require("path"),wT=I();DT.exports=YP;async function YP(e){try{if(gT.isEmpty(global.hdb_schema[e.schema])||gT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await KP(e),await WP(e);let t=bT.join($P(),e.schema.toString());try{await IT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bT.join(xP(),e.schema.toString());await IT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(YP,"lmdbDropTable");async function KP(e){let t=new CT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await UT(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 LT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await yT(n)}a(KP,"deleteAttributesFromSystem");async function WP(e){let t=new CT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await UT(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 LT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await yT(n)}catch(i){throw i}}a(WP,"dropTableFromSystem")});var PT=S((IJ,MT)=>{"use strict";var QP=require("fs-extra"),JP=xt(),ZP=_s(),XP=_i(),zP=Wu(),jP=ni(),eB=ku(),tB=en(),Sr=T(),gJ=b(),rB=require("path"),{getBaseSchemaPath:sB}=te(),{handleHDBError:nB,hdb_errors:iB}=D(),{HDB_ERROR_MSGS:aB,HTTP_STATUS_CODES:oB}=iB;MT.exports=cB;async function cB(e){let t;try{t=await _B(e.schema);let r=new JP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await tB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await zP(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new XP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await jP(n);let i=rB.join(sB(),t.toString());await QP.remove(i)}catch(r){throw r}}a(cB,"lmdbDropSchema");async function _B(e){let t=new ZP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await eB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw nB(new Error,aB.SCHEMA_NOT_FOUND(e),oB.NOT_FOUND,void 0,void 0,!0);return s}a(_B,"validateDropSchema")});var Qu=S((bJ,BT)=>{"use strict";var Ao=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Ao,"CreateTableObject");BT.exports=Ao});var HT=S((CJ,vT)=>{"use strict";var uB=require("path"),lB=require("fs-extra"),Oo=z(),{getTransactionAuditStorePath:EB}=te(),Ju=Ye(),wJ=Qu();vT.exports=dB;async function dB(e){let t;try{let r=uB.join(EB(),e.schema.toString());await lB.mkdirp(r),t=await Oo.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{Oo.createDBI(t,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Oo.createDBI(t,Ju.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Oo.createDBI(t,Ju.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(dB,"createTransactionsAuditEnvironment")});var VT=S((LJ,FT)=>{"use strict";var Zu=T(),qT=z(),hB=Ys(),SB=require("path"),{getSystemSchemaPath:fB,getBaseSchemaPath:TB}=te(),mB=ss(),RB=Qa(),Xu=Wa(),AB=I(),OB=HT(),ju=mB.hdb_table,GT=[];for(let e=0;e<ju.attributes.length;e++)GT.push(ju.attributes[e].attribute);FT.exports=pB;async function pB(e,t){let r=SB.join(TB(),t.schema.toString()),s=new Xu(t.schema,t.table,Zu.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Xu(t.schema,t.table,Zu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Xu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await qT.createEnvironment(r,t.table),e!==void 0){let o=await qT.openEnvironment(fB(),Zu.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hB.insertRecords(o,ju.hash_attribute,GT,[e]),await zu(s),await zu(n),await zu(i)}await OB(t)}catch(o){throw o}}a(pB,"lmdbCreateTable");async function zu(e){try{await RB(e)}catch(t){AB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(zu,"createAttribute")});var $T=S((UJ,kT)=>{"use strict";var NB=Ja(),gB=za(),IB=to(),tn=T(),bB=Ys().updateRecords,wB=z(),CB=require("path"),{getBaseSchemaPath:LB}=te(),UB=si(),yB=I();kT.exports=DB;async function DB(e){try{let{schema_table:t,attributes:r}=NB(e);gB(e,r,t.hash_attribute),e.schema!==tn.SYSTEM_SCHEMA_NAME&&(r.includes(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await IB(e.hdb_auth_header,t,r),n=CB.join(LB(),e.schema.toString()),i=await wB.openEnvironment(n,e.table),o=await bB(i,t.hash_attribute,r,e.records,e[tn.CLUSTERING_FLAG]!==!0);try{await UB(e,o)}catch(c){yB.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(DB,"lmdbUpdateRecords")});var YT=S((yJ,xT)=>{"use strict";var MB=T().OPERATIONS_ENUM,po=class{constructor(t,r,s,n=void 0){this.operation=MB.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(po,"UpsertObject");xT.exports=po});var WT=S((MJ,KT)=>{"use strict";var DJ=YT(),PB=Ja(),BB=za(),vB=to(),rn=T(),HB=Ys().upsertRecords,qB=z(),GB=require("path"),{getBaseSchemaPath:FB}=te(),VB=si(),kB=I(),{handleHDBError:$B,hdb_errors:xB}=D();KT.exports=YB;async function YB(e){let t;try{t=PB(e)}catch(_){throw $B(_,_.message,xB.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;BB(e,s,r.hash_attribute),e.schema!==rn.SYSTEM_SCHEMA_NAME&&(s.includes(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vB(e.hdb_auth_header,r,s),i=GB.join(FB(),e.schema.toString()),o=await qB.openEnvironment(i,e.table),c=await HB(o,r.hash_attribute,s,e.records,e[rn.CLUSTERING_FLAG]!==!0);try{await VB(e,c)}catch(_){kB.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(YB,"lmdbUpsertRecords")});var jT=S((PJ,zT)=>{"use strict";var KB=xt(),QT=b(),JT=I(),WB=en(),ZT=T(),QB=Hu().deleteRecords,JB=z(),ZB=require("path"),{getBaseSchemaPath:XB}=te(),{promisify:zB}=require("util"),jB=zB(setTimeout),XT=1e4,ev=10;zT.exports=tv;async function tv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(QT.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 KB(e.schema,e.table,ZT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await WB(n,ZT.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw JT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return QT.isEmptyOrZeroLength(s)?(JT.trace("No records found to delete"),{message:"No records found to delete"}):await rv(e,s,t)}a(tv,"lmdbDeleteRecordsBefore");async function rv(e,t,r){let s=ZB.join(XB(),e.schema.toString()),n=await JB.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=XT){let _=t.slice(o,o+XT),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await QB(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 jB(ev)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(rv,"chunkDeletes")});var tm=S((BJ,em)=>{"use strict";var No=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(No,"DeleteBeforeObject");em.exports=No});var sm=S((vJ,rm)=>{"use strict";var go=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(go,"DeleteAuditLogsBeforeResults");rm.exports=go});var am=S((qJ,im)=>{"use strict";var el=z(),{getTransactionAuditStorePath:sv}=te(),HJ=tm(),nv=require("path"),ui=Ye(),iv=b(),nm=sm(),av=require("util").promisify,ov=av(setTimeout),cv=1e4,_v=100;im.exports=uv;async function uv(e){let t=nv.join(sv(),e.schema),r=await el.openEnvironment(t,e.table,!0),s=el.listDBIs(r);el.initializeDBIs(r,ui.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new nm;do n=await lv(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 ov(_v);while(n.transactions_deleted>0);return i}a(uv,"deleteAuditLogsBefore");async function lv(e,t){let r=new nm;try{let s=e.dbis[ui.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[ui.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];iv.isEmpty(c)||(n=e.dbis[ui.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[ui.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>cv)break}return await n,r}catch(s){throw s}}a(lv,"deleteTransactions")});var dm=S((GJ,Em)=>{"use strict";var tl=z(),sn=Ye(),om=ns(),rl=T(),cm=b(),{getTransactionAuditStorePath:Ev}=te(),dv=require("path"),hv=zs(),Io=Qs(),Sv=I();Em.exports=fv;async function fv(e){let t=dv.join(Ev(),e.schema),r=await tl.openEnvironment(t,e.table,!0),s=tl.listDBIs(r);tl.initializeDBIs(r,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return _m(r,e.search_values);case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,mv(r,e.search_values,n);case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Tv(r,e.search_values);default:return _m(r)}}a(fv,"readAuditLog");function _m(e,t=[0,om.getMicroTime()]){cm.isEmpty(t[0])&&(t[0]=0),cm.isEmpty(t[1])&&(t[1]=om.getMicroTime());let r=[];try{let s=e.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new Io,i);r.push(o)}return r}catch(s){throw s}}a(_m,"searchTransactionsByTimestamp");function Tv(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[sn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,lm(e,i))}return Object.fromEntries(r)}a(Tv,"searchTransactionsByUsername");function mv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=hv.equals(e,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let h=l[0][E],m=Number(h);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=lm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);um(_,"records",r,l,o),um(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(mv,"searchTransactionsByHashValues");function um(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 Io(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Io(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(um,"loopRecords");function lm(e,t){let r=[];try{let s=e.dbis[sn.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 Io,i);r.push(o)}}catch(i){Sv.warn(i)}return r}catch(s){throw s}}a(lm,"batchSearchTransactions")});var Sm=S((FJ,hm)=>{"use strict";var Rv=require("path"),{getBaseSchemaPath:Av}=te(),Ov=z();hm.exports={writeTransaction:pv};async function pv(e,t,r){let s=Rv.join(Av(),e);return(await Ov.openEnvironment(s,t)).transaction(r)}a(pv,"writeTransaction")});var Tm=S((VJ,fm)=>{"use strict";var Nv=require("path"),{getBaseSchemaPath:gv}=te(),Iv=z();fm.exports={flush:bv};async function bv(e,t){let r=Nv.join(gv(),e.toString());return(await Iv.openEnvironment(r,t.toString())).flushed}a(bv,"flush")});var Rm=S((kJ,mm)=>{"use strict";var Re=I(),{handleHDBError:wv}=D(),Cv=au(),Lv=Qa(),Uv=Pu(),yv=Uf(),Dv=ni(),Mv=ku(),Pv=jf(),Bv=oT(),vv=en(),Hv=fT(),qv=PT(),Gv=VT(),Fv=$T(),Vv=WT(),kv=jT(),$v=am(),xv=Wu(),Yv=Ku(),Kv=dm(),Wv=Sm(),Qv=Tm(),bo=class extends Cv{async searchByConditions(t){try{return Hv(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await Mv(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await Pv(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await Bv(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await vv(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await yv(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await qv(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await Gv(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await xv(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await Lv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await Uv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await Fv(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await Vv(t)}catch(r){throw wv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await Dv(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await kv(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await Yv(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await $v(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await Kv(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return Wv.writeTransaction(t,r,s)}flush(t,r){return Qv.flush(t,r)}};a(bo,"LMDBBridge");mm.exports=bo});var fr=S(($J,Om)=>{"use strict";var Jv=Rm(),Zv=au(),Xv=Y();Xv.initSync();var Am;function zv(){return Am instanceof Zv?Am:new Jv}a(zv,"getBridge");Om.exports=zv()});var Im=S((xJ,gm)=>{"use strict";var pm=require("lodash"),li=require("mathjs"),jv=require("jsonata"),Nm=b();gm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?pm.uniqWith(e,pm.isEqual):e,searchJSON:eH,mad:Ei.bind(null,li.mad),mean:Ei.bind(null,li.mean),mode:Ei.bind(null,li.mode),prod:Ei.bind(null,li.prod),median:Ei.bind(null,li.median)};function Ei(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(Ei,"aggregateFunction");function eH(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(Nm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Nm.isEmpty(this.__ala__.res[r])){let s=jv(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(eH,"searchJSON")});var wm=S((YJ,bm)=>{"use strict";var de=require("moment"),sl="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;bm.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(sl),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(sl),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(sl)}});var ym=S((KJ,Um)=>{"use strict";var tH=require("@turf/area"),rH=require("@turf/length"),sH=require("@turf/circle"),nH=require("@turf/difference"),iH=require("@turf/distance"),aH=require("@turf/boolean-contains"),oH=require("@turf/boolean-equal"),cH=require("@turf/boolean-disjoint"),_H=require("@turf/helpers"),Cm=T(),k=b();Um.exports={geoArea:uH,geoLength:lH,geoCircle:EH,geoDifference:dH,geoDistance:Lm,geoNear:hH,geoContains:SH,geoEqual:fH,geoCrosses:TH,geoConvert:mH};var nl="geo1 is required",il="geo2 is required";function uH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),tH.default(e)}a(uH,"geoArea");function lH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),rH.default(e,{units:t||"kilometers"})}a(lH,"geoLength");function EH(e,t,r){if(k.isEmpty(e))throw new Error("point is required");if(k.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=k.autoCast(e)),sH.default(e,t,{units:r||"kilometers"})}a(EH,"geoCircle");function dH(e,t){if(k.isEmpty(e))throw new Error("poly1 is required");if(k.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),nH(e,t)}a(dH,"geoDifference");function Lm(e,t,r){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),iH.default(e,t,{units:r||"kilometers"})}a(Lm,"geoDistance");function hH(e,t,r,s){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");if(k.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Lm(e,t,s)<=r}a(hH,"geoNear");function SH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),aH.default(e,t)}a(SH,"geoContains");function fH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),oH.default(e,t)}a(fH,"geoEqual");function TH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!cH.default(e,t)}a(TH,"geoCrosses");function mH(e,t,r){if(k.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(k.isEmpty(t))throw new Error("geo_type is required");if(k.isEmpty(Cm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Cm.GEO_CONVERSION_ENUM).join(",")}`);return _H[t](e,r)}a(mH,"geoConvert")});var wo=S((WJ,Dm)=>{var ls=Im(),St=wm(),jt=ym();Dm.exports=e=>{e.aggr.mad=e.aggr.MAD=ls.mad,e.aggr.mean=e.aggr.MEAN=ls.mean,e.aggr.mode=e.aggr.MODE=ls.mode,e.aggr.prod=e.aggr.PROD=ls.prod,e.aggr.median=e.aggr.MEDIAN=ls.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ls.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ls.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=St.current_date,e.fn.current_time=e.fn.CURRENT_TIME=St.current_time,e.fn.extract=e.fn.EXTRACT=St.extract,e.fn.date=e.fn.DATE=St.date,e.fn.date_format=e.fn.DATE_FORMAT=St.date_format,e.fn.date_add=e.fn.DATE_ADD=St.date_add,e.fn.date_sub=e.fn.DATE_SUB=St.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=St.date_diff,e.fn.now=e.fn.NOW=St.now,e.fn.offset_utc=e.fn.OFFSET_UTC=St.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=St.get_server_time,e.fn.getdate=e.fn.GETDATE=St.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=St.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=jt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=jt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=jt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=jt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=jt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=jt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=jt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=jt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=jt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=jt.geoNear}});var Bm=S((QJ,Pm)=>{"use strict";var di=require("lodash"),Me=require("alasql");Me.options.cache=!1;var RH=wo(),Mm=require("clone"),Co=require("recursive-iterator"),v=I(),q=b(),nn=fr(),AH=T(),{hdb_errors:OH}=D(),pH="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";RH(Me);var Lo=class{constructor(t,r){if(q.isEmpty(t))throw v.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(),q.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!q.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(hi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(hi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(hi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(hi)}}_getColumns(){let t=new Co(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(Mm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=di.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(q.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Co(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!q.isEmpty(r)&&r.right)if(q.isNotEmptyAndHasValue(r.right.value)){let s=q.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!q.isEmpty(s)&&q.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=q.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&q.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Co(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(!q.isEmpty(AH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(q.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(q.isEmptyOrZeroLength(r.left.columnid)||q.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(q.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"=":!q.isEmpty(r.right.value)||!q.isEmpty(r.left.value)?s.add(q.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(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from)&&q.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&&di.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(q.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);q.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(q.isEmptyOrZeroLength(this.all_table_attributes)&&!q.isEmptyOrZeroLength(this.columns.columns))return t;if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.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(Mm(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(q.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(pH)>-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=di.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),!q.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await nn.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}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 nn.getDataByValue(E);for(let h in d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(h)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!q.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!q.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 m=await nn.getDataByValue(c,h.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await nn.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_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 Me.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 Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.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 Me.yy.FuncValue:new Me.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 m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),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 m=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}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),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}`,m=this._convertColumnsToIndexes(h,n);d=await Me.promise(m,t),t=null}catch(h){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;h++){let R=d[h];o.forEach(C=>{R[C.key]!==null&&R[C.key]!==void 0&&C.keys.add(R[C.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=di.difference(m,[...h.keys].map(C=>C.toString()));for(let C=0,L=R.length;C<L;C++){let B=R[C];delete this.data[`${h.schema}_${h.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Co(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=di.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){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.error(i)}}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 nn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_[d];for(let m=0;m<u;m++){let R=n.columns[m],C=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(C)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.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();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.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 v.error(OH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.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 nn.getDataByValue(i);for(let c in 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]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Lo,"SQLSearch");Pm.exports=Lo});var ft=S((JJ,Hm)=>{"use strict";var NH=Jh();Hm.exports={searchByConditions:wH,searchByHash:CH,searchByValue:LH,search:UH};var al=fr(),vm=require("util"),gH=vm.callbackify(al.searchByHash),IH=vm.callbackify(al.searchByValue),bH=Bm();async function wH(e){return al.searchByConditions(e)}a(wH,"searchByConditions");function CH(e,t){try{gH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(CH,"searchByHash");function LH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),IH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(LH,"searchByValue");function UH(e,t){try{let r=new NH(e);r.validate(),new bH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(UH,"search")});var vr=S((ZJ,Vm)=>{"use strict";var Si=require("crypto"),Gm="aes-256-cbc",yH=32,DH=16,ol=64,Fm=32,MH=ol+Fm,qm=new Map;Vm.exports={encrypt:PH,decrypt:BH,createNatsTableStreamName:vH};function PH(e){let t=Si.randomBytes(yH),r=Si.randomBytes(DH),s=Si.createCipheriv(Gm,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(PH,"encrypt");function BH(e){let t=e.substr(0,ol),r=e.substr(ol,Fm),s=e.substr(MH,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Si.createDecipheriv(Gm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(BH,"decrypt");function vH(e,t){let r=`${e}.${t}`,s=qm.get(r);return s||(s=Si.createHash("md5").update(`${e}.${t}`).digest("hex"),qm.set(r,s)),s}a(vH,"createNatsTableStreamName")});var on=S((XJ,Qm)=>{"use strict";var $m=ft(),Hr=I(),xm=xa(),HH=require("lodash"),qH=require("path"),GH=vr(),cl=b(),{promisify:Ym}=require("util"),j=T(),{handleHDBError:Uo,hdb_errors:FH}=D(),{HDB_ERROR_MSGS:yo,HTTP_STATUS_CODES:Km}=FH,VH=Y();VH.initSync();var km=z(),kH=te(),fi=Ym($m.searchByValue),$H=Ym($m.searchByHash),an="name",Wm="hash_attribute",_l="schema",xH="schema_table",YH="attribute";Qm.exports={describeAll:KH,describeTable:Do,describeSchema:QH};async function KH(e){try{let t=cl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:an,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[an]},i=await fi(n);if(cl.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[Wm,j.ID_ATTRIBUTE_STRING,an,_l]},u=await fi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Do({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Do({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Hr.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 Hr.error("Got an error in describeAll"),Hr.error(t),Uo(new Error,yo.DESCRIBE_ALL_ERR)}}a(KH,"describeAll");async function Do(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=xm.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:an,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await fi(c);if(!_||_.length===0)throw Uo(new Error,yo.TABLE_NOT_FOUND(e.schema,e.table),Km.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Uo(new Error,yo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:xH,search_value:r+"."+s,get_attributes:[YH]},E=await fi(l);E=HH.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=WH(n)),i.attributes=E,i.clustering_stream_name=GH.createNatsTableStreamName(u.schema,u.name);try{let d=qH.join(kH.getBaseSchemaPath(),i.schema.toString()),h=await km.openEnvironment(d,i.name),m=km.statDBI(h,i.hash_attribute);i.record_count=m.entryCount}catch(d){Hr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Hr.error(`There was an error getting attributes for table '${u.name}'`),Hr.error(l)}return i}a(Do,"descTable");function WH(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(WH,"getAttrsByPerms");async function QH(e){let t=xm.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:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:_l,search_value:s,hash_values:[],get_attributes:[Wm,j.ID_ATTRIBUTE_STRING,an,_l]},i=await fi(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[an]},c=await $H(o);if(c&&c.length<1)throw Uo(new Error,yo.SCHEMA_NOT_FOUND(e.schema),Km.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]),cl.isEmpty(_)||_.describe){let u=await Do({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Hr.error(`Error describing schema table '${e.schema}.${c}'`),Hr.error(_)}})),o}}a(QH,"describeSchema")});var Es=S((eZ,jm)=>{var zJ=require("async"),cn=ss(),jJ=I(),{callbackify:Xm,promisify:JH}=require("util");jm.exports={setSchemaDataToGlobal:Jm,getTableSchema:zH,getSystemSchema:eq,setSchemaDataToGlobalAsync:JH(Jm)};var zm=on(),ZH=Xm(zm.describeAll),XH=Xm(zm.describeTable);function Jm(e){ZH(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=cn),global.hdb_schema=r,e(null,null)})}a(Jm,"setSchemaDataToGlobal");function Zm(e,t){return e==="system"?cn[t]:global.hdb_schema[e][t]}a(Zm,"returnSchema");function zH(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?jH(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,Zm(e,t))}):r(null,Zm(e,t))}a(zH,"getTableSchema");function jH(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=cn:global.hdb_schema={system:cn},r();return}XH(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:cn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(jH,"setTableDataToGlobal");function eq(){return cn}a(eq,"getSystemSchema")});var he=S((rZ,tR)=>{"use strict";var{platform:tZ}=require("os"),tq="nats-server.zip",ul="nats-server",rq=process.platform==="win32"?`${ul}.exe`:ul,ll="HDB",sq=/^[^\s.,*>]+$/,eR="__request__",nq=a(e=>`${e}.${eR}`,"REQUEST_SUBJECT"),iq={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},aq={HUB:"hub.pid",LEAF:"leaf.pid"},oq={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},cq={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ll,deliver_subject:"__HDB__.WORKQUEUE"},_q={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ll,deliver_subject:"HDB.SCHEMAQUEUE"},uq={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ll,deliver_subject:"HDB.USERQUEUE"},lq={SUCCESS:"success",ERROR:"error"},Eq={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},dq={TXN:"txn",MSGID:"msgid"};tR.exports={NATS_SERVER_ZIP:tq,NATS_SERVER_NAME:ul,NATS_BINARY_NAME:rq,PID_FILES:aq,NATS_CONFIG_FILES:iq,SERVER_SUFFIX:oq,WORK_QUEUE_CONSUMER_NAMES:cq,SCHEMA_QUEUE_CONSUMER_NAMES:_q,USER_QUEUE_CONSUMER_NAMES:uq,NATS_TERM_CONSTRAINTS_RX:sq,REQUEST_SUFFIX:eR,UPDATE_REMOTE_RESPONSE_STATUSES:lq,CLUSTER_STATUS_STATUSES:Eq,REQUEST_SUBJECT:nq,SUBJECT_PREFIXES:dq}});var sR=S((sZ,rR)=>{"use strict";var hq=he(),Mo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h){this.port=t,o===null&&(o=void 0),this.server_name=r+hq.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},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:h}},this.system_account="SYS"}};a(Mo,"HubConfigObject");rR.exports=Mo});var aR=S((nZ,iR)=>{"use strict";var nR=he(),Po=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+nR.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+nR.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(Po,"LeafConfigObject");iR.exports=Po});var cR=S((iZ,oR)=>{"use strict";var Bo=class{constructor(t,r){this.user=t,this.password=r}};a(Bo,"HdbUserObject");oR.exports=Bo});var uR=S((aZ,_R)=>{"use strict";var Sq=he(),vo=class{constructor(t,r){this.user=t+Sq.SERVER_SUFFIX.ADMIN,this.password=r}};a(vo,"SysUserObject");_R.exports=vo});var Lt=S((oZ,dR)=>{"use strict";var qo=Uu(),Ct=b(),fq=require("util"),Go=fr(),Tq=Es(),El=I(),{handleHDBError:qr,hdb_errors:mq}=D(),{HTTP_STATUS_CODES:ds}=mq,Rq=fq.promisify(Tq.getTableSchema),Aq="updated",lR="inserted",ER="upserted";dR.exports={insert:pq,update:Nq,upsert:gq,validation:Oq,flush:Iq};async function Oq(e){if(Ct.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ct.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ct.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Rq(e.schema,e.table),r=qo(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&&Ct.isEmptyOrZeroLength(c[s]))throw El.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(!Ct.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw El.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ct.isEmpty(c[s])&&c[s]!==""&&n.has(Ct.autoCast(c[s]))&&(c.skip=!0),n.add(Ct.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Oq,"validation");async function pq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.createRecords(e);return Ho(lR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(pq,"insertData");async function Nq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.updateRecords(e);return Ct.isEmpty(s.existing_rows)?Ho(Aq,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Nq,"updateData");async function gq(e){if(e.operation!=="upsert")throw qr(new Error,"invalid operation, must be upsert",ds.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.upsertRecords(e);return Ho(ER,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,El.ERR,n)}}a(gq,"upsertData");function Ho(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===lR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===ER?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Iq(e){return Go.flush(e.schema,e.table)}a(Iq,"flush")});var hl=S((cZ,fR)=>{var bq=Ee(),dl=require("joi"),{hdb_schema_table:hR}=Er(),SR={schema:hR,table:hR},wq={date:dl.date().iso().required()},Cq={timestamp:dl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};fR.exports=function(e,t){let r=t==="timestamp"?{...SR,...Cq}:{...SR,...wq},s=dl.object(r);return bq.validateBySchema(e,s)}});var AR=S((_Z,RR)=>{var Lq=Ee(),TR=require("joi"),{hdb_schema_table:mR}=Er(),Uq=TR.object({schema:mR,table:mR,hash_values:TR.array().required()});RR.exports=function(e){return Lq.validateBySchema(e,Uq)}});var pR=S((uZ,OR)=>{"use strict";var Fo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Fo,"InsertObject");var Vo=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(Vo,"NoSQLSeachObject");var ko=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(ko,"DeleteResponseObject");OR.exports={InsertObject:Fo,NoSQLSeachObject:Vo,DeleteResponseObject:ko}});var Ss=S((lZ,wR)=>{"use strict";var gR=hl(),yq=AR(),$o=b(),NR=require("moment"),IR=I(),{promisify:Dq,callbackify:Mq}=require("util"),hs=T(),Pq=Es(),Sl=Dq(Pq.getTableSchema),fl=fr(),{DeleteResponseObject:Bq}=pR(),{handleHDBError:Gr,hdb_errors:vq}=D(),{HDB_ERROR_MSGS:xo,HTTP_STATUS_CODES:Fr}=vq,Hq="records successfully deleted",qq=Mq(bR);wR.exports={delete:qq,deleteRecord:bR,deleteFilesBefore:Gq,deleteAuditLogsBefore:Fq};async function Gq(e){let t=gR(e,"date");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(!NR(e.date,NR.ISO_8601).isValid())throw Gr(new Error,xo.INVALID_DATE,Fr.BAD_REQUEST,hs.LOG_LEVELS.ERROR,xo.INVALID_DATE,!0);let s=$o.checkSchemaTableExist(e.schema,e.table);if(s)throw Gr(new Error,s,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,s,!0);try{let n=await fl.deleteRecordsBefore(e);if(await Sl(e.schema,e.table),IR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Gq,"deleteFilesBefore");async function Fq(e){let t=gR(e,"timestamp");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Gr(new Error,xo.INVALID_VALUE("Timestamp"),Fr.BAD_REQUEST,hs.LOG_LEVELS.ERROR,xo.INVALID_VALUE("Timestamp"),!0);let r=$o.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,r,!0);try{let s=await fl.deleteAuditLogsBefore(e);return await Sl(e.schema,e.table),IR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Fq,"deleteAuditLogsBefore");async function bR(e){let t=yq(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=$o.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,r,!0);try{await Sl(e.schema,e.table);let s=await fl.deleteRecords(e);return $o.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Hq}`),s}catch(s){if(s.message===hs.SEARCH_NOT_FOUND_MESSAGE){let n=new Bq;return n.message=hs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(bR,"deleteRecord")});var Yo=S((EZ,UR)=>{var Vq=require("crypto"),CR=9;function kq(e){let t=xq(CR),r=LR(e+t);return t+r}a(kq,"createHash");function $q(e,t){let r=e.substr(0,CR),s=r+LR(t+r);return e===s}a($q,"validateHash");function xq(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(xq,"generateSalt");function LR(e){return Vq.createHash("md5").update(e).digest("hex")}a(LR,"md5");UR.exports={hash:kq,validate:$q}});var DR=S((dZ,yR)=>{var Tl=Ee(),Qe={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 Yq(e){return Qe.password.presence=!0,Qe.username.presence=!0,Qe.role.presence=!0,Qe.active.presence=!0,Tl.validateObject(e,Qe)}a(Yq,"addUserValidation");function Kq(e){return Qe.password.presence=!1,Qe.username.presence=!0,Qe.role.presence=!1,Qe.active.presence=!1,Tl.validateObject(e,Qe)}a(Kq,"alterUserValidation");function Wq(e){return Qe.password.presence=!1,Qe.username.presence=!0,Qe.role.presence=!1,Qe.active.presence=!1,Tl.validateObject(e,Qe)}a(Wq,"dropUserValidation");yR.exports={addUserValidation:Yq,alterUserValidation:Kq,dropUserValidation:Wq}});var PR=S((hZ,MR)=>{"use strict";var Vr=T(),Ti=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(Ti,"BaseLicense");var Ko=class extends Ti{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(Ko,"ExtendedLicense");MR.exports={BaseLicense:Ti,ExtendedLicense:Ko}});var mi=S((SZ,FR)=>{"use strict";var un=require("fs-extra"),BR=Yo(),vR=require("crypto"),Qq=require("moment"),Jq=require("uuid").v4,Je=I(),Rl=require("path"),Zq=b(),Tt=T(),Xq=PR().ExtendedLicense,_n="invalid license key format",zq="061183",jq="mofi25",eG="aes-256-cbc",tG=16,rG=32,HR=Y();HR.initSync();var ml;FR.exports={validateLicense:qR,generateFingerPrint:nG,licenseSearch:GR,getLicense:oG};function Al(){return Rl.join(HR.getHdbBasePath(),Tt.LICENSE_KEY_DIR_NAME,Tt.LICENSE_FILE_NAME)}a(Al,"getLicenseDirPath");function sG(){let e=Al();return Rl.join(e,Tt.LICENSE_FILE_NAME)}a(sG,"getLicenseFilePath");function Ol(){let e=Al();return Rl.join(e,Tt.REG_KEY_FILE_NAME)}a(Ol,"getFingerPrintFilePath");async function nG(){let e=Ol();try{return await un.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await iG();throw Je.error(`Error writing fingerprint file to ${e}`),Je.error(t),new Error("There was an error generating the fingerprint")}}a(nG,"generateFingerPrint");async function iG(){let e=Jq(),t=BR.hash(e),r=Ol();try{await un.mkdirp(Al()),await un.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Je.error(`Error writing fingerprint file to ${r}`),Je.error(s),new Error("There was an error generating the fingerprint")}return t}a(iG,"writeFingerprint");function qR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Tt.STORAGE_TYPES_ENUM.LMDB,api_call:Tt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Tt.RAM_ALLOCATION_ENUM.DEFAULT,version:Tt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Je.error("empty license key passed to validate."),r;let s=Ol(),n=!1;try{n=un.statSync(s)}catch(i){Je.error(i)}if(n){let i;try{i=un.readFileSync(s,"utf8")}catch{Je.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(jq),c=o[1];c=Buffer.concat([Buffer.from(c)],tG);let _=Buffer.concat([Buffer.from(i)],rG),u=vR.createDecipheriv(eG,_,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=aG(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(_n),Je.error(_n),new Error(_n)}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(_n),Je.error(_n),new Error(_n)}else r.exp_date=l;r.exp_date<Qq().valueOf()&&(r.valid_date=!1),BR.validate(o[1],`${zq}${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||Je.error("Invalid licence"),r}a(qR,"validateLicense");function aG(e,t){try{let r=vR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Je.warn("Check old license failed")}}a(aG,"checkOldLicense");function GR(){let e=new Xq;e.api_call=0;let t=[];try{t=un.readFileSync(sG(),"utf-8").split(Tt.NEW_LINE)}catch(r){r.code==="ENOENT"?Je.info("no license file found"):Je.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Zq.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qR(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){Je.error("There was an error parsing the license string."),Je.error(n),e.api_call=Tt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Tt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Tt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Tt.LICENSE_VALUES.API_CALL_DEFAULT),ml=e,e}a(GR,"licenseSearch");async function oG(){return ml||await GR(),ml}a(oG,"getLicense")});var kr=S((fZ,eA)=>{"use strict";var xR="username is required",YR="nothing to update, must supply active, role or password to update",KR="password cannot be an empty string",WR="If role is specified, it cannot be empty.",QR="active must be true or false";eA.exports={addUser:SG,alterUser:fG,dropUser:mG,userInfo:RG,listUsers:Qo,listUsersExternal:AG,setUsersToGlobal:Ri,findAndValidateUser:NG,getClusterUser:gG,USERNAME_REQUIRED:xR,ALTERUSER_NOTHING_TO_UPDATE:YR,EMPTY_PASSWORD:KR,EMPTY_ROLE:WR,ACTIVE_BOOLEAN:QR};var JR=Lt(),cG=Ss(),Nl=Yo(),ZR=DR(),XR=ft(),gl=Ws(),be=b(),zR=require("validate.js"),H=I(),{promisify:Il}=require("util"),bl=vr(),fs=T(),VR=he(),_G=ur(),wl=Y(),uG=mi(),lG=ss(),{handleHDBError:er,hdb_errors:EG}=D(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:pl,HDB_ERROR_MSGS:ln}=EG,{UserEventMsg:Cl}=os(),kR=require("lodash"),jR={username:!0,active:!0,role:!0,password:!0},$R=new Map,Wo=Il(XR.searchByValue),dG=Il(XR.searchByHash),hG=Il(cG.delete);async function SG(e){let t=zR.cleanAttributes(e,jR),r=ZR.addUserValidation(t);if(r)throw er(new Error,r.message,tr.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 Wo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw er(new Error,ln.ROLE_NAME_NOT_FOUND(t.role),tr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw er(new Error,ln.DUP_ROLES_FOUND(t.role),tr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=bl.encrypt(t.password)),t.password=Nl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await JR.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Ri()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw er(new Error,ln.USER_ALREADY_EXISTS(t.username),tr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.ADD_USER,_,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),`${c.username} successfully added`}a(SG,"addUser");async function fG(e){let t=zR.cleanAttributes(e,jR);if(be.isEmptyOrZeroLength(t.username))throw new Error(xR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(YR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(KR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(QR);let r=TG(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=bl.encrypt(t.password)),t.password=Nl.hash(t.password)),t.role==="")throw new Error(WR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Wo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=ln.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),er(new Error,_,tr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=ln.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),er(new Error,_,tr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await JR.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Ri()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.ALTER_USER,i,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),n}a(fG,"alterUser");function TG(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(TG,"isClusterUser");async function mG(e){try{let t=ZR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(be.isEmpty(global.hdb_users.get(e.username)))throw er(new Error,ln.USER_NOT_EXIST(e.username),tr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await hG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Ri()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.DROP_USER,n,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(mG,"dropUser");async function RG(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 dG(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(RG,"userInfo");async function AG(){let e;try{e=await Qo()}catch(t){throw H.error("Got an error listing users."),H.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(AG,"listUsersExternal");async function Qo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=kR.cloneDeep(await Wo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!be.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=kR.cloneDeep(await Wo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],OG(c.role),i.set(c.username,c)}return(await uG.getLicense()).enterprise?i:pG(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Qo,"listUsers");function OG(e){try{if(!e){H.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(lG)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a(OG,"appendSystemTablesToRole");function pG(e){try{if(H.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.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(i,n)):r.set(i,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?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(pG,"nonEnterpriseFilter");async function Ri(){try{let e=await Qo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Ri,"setUsersToGlobal");async function NG(e,t,r=!0){global.hdb_users||await Ri();let s=global.hdb_users.get(e);if(!s)throw er(new Error,pl.GENERIC_AUTH_FAIL,tr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw er(new Error,pl.USER_INACTIVE,tr.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($R.get(t)===s.password)return n;if(Nl.validate(s.password,t))$R.set(t,s.password);else throw er(new Error,pl.GENERIC_AUTH_FAIL,tr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(NG,"findAndValidateUser");async function gG(){let e=await Qo(),t=_G.getConfigFromFile(fs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!be.isEmpty(r))return r.decrypt_hash=bl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+VR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+VR.SERVER_SUFFIX.ADMIN,r}a(gG,"getClusterUser")});var Jo=S((TZ,tA)=>{"use strict";var IG=fr();tA.exports={writeTransaction:bG};function bG(e,t,r){return IG.writeTransaction(e,t,r)}a(bG,"writeTransaction")});var Ll=S((mZ,wG)=>{wG.exports={name:"harperdb",version:"4.0.6",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.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && 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/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --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'","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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.5",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","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":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",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.5"},"newman-reporter-html":{newman:"5.2.3"}}}});var mt=S((LZ,OA)=>{"use strict";var Tr=Y();Tr.initSync();var CG=require("fs-extra"),LG=require("semver"),gi=require("path"),{monotonicFactory:UG}=require("ulidx"),yG=UG(),sA=require("util"),nA=require("child_process"),DG=sA.promisify(nA.exec),MG=nA.spawn,ee=he(),ie=T(),Bl=b(),mr=I(),Zo=vr(),PG=Jo(),Ai=ur(),{encode:Dl,decode:iA}=require("msgpackr"),{isEmpty:Ts}=Bl,aA=kr(),RZ=_s(),BG=ft(),AZ=sA.promisify(BG.searchByHash),{connect:vG,StorageType:oA,RetentionPolicy:cA,AckPolicy:_A,DeliverPolicy:Ml,NatsConnection:OZ,JetStreamManager:pZ,JetStreamClient:NZ,StringCodec:gZ,JSONCodec:HG,createInbox:vl,StreamSource:IZ,headers:qG,toJsMsg:GG,nuid:bZ,JetStreamOptions:wZ,ErrorCode:rA,nanos:CZ}=require("nats"),{PACKAGE_ROOT:FG}=T(),VG=Ll(),uA=HG(),kG="clustering",$G=VG.engines[ee.NATS_SERVER_NAME],xG=gi.join(FG,"dependencies"),Pl=gi.join(xG,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Ul,yl,Oi,pi,Ni,Yt;OA.exports={runCommand:lA,checkNATSServerInstalled:YG,createConnection:Hl,getConnection:Xo,getJetStreamManager:En,getJetStream:EA,getNATSReferences:Ut,getServerList:WG,createLocalStream:ql,listStreams:dA,deleteLocalStream:QG,getServerConfig:Ii,listRemoteStreams:JG,viewStream:ZG,publishToStream:XG,createWorkQueueStream:zG,addSourceToWorkStream:hA,request:jG,removeSourceFromWorkStream:fA,reloadNATS:Gl,reloadNATSHub:eF,reloadNATSLeaf:tF,extractServerName:SA,requestErrorHandler:rF,updateWorkStream:sF,createLocalTableStream:mA,createTableStreams:nF,purgeTableStream:RA,purgeSchemaTableStreams:iF,getStreamInfo:aF,updateNodeNameLocalStreams:oF,closeConnection:KG};async function lA(e,t=void 0){let{stdout:r,stderr:s}=await DG(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
7
  `,"")}a(lA,"runCommand");async function YG(){try{await CG.access(Pl)}catch{return!1}let e=await lA(`${Pl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return LG.eq(t,$G)}a(YG,"checkNATSServerInstalled");async function Hl(e,t,r,s=!0,n="127.0.0.1"){return vG({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Tr.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tr.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tr.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(Hl,"createConnection");async function KG(){Yt&&(await Yt.close(),Yt=void 0)}a(KG,"closeConnection");async function Xo(){if(!Yt){let e=await aA.getClusterUser();if(Ts(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Tr.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Yt=await Hl(t,e.username,e.decrypt_hash)}return Yt}a(Xo,"getConnection");async function En(){if(pi)return pi;Ts(Yt)&&await Xo();let{domain:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ts(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return pi=await Yt.jetstreamManager({domain:e}),pi}a(En,"getJetStreamManager");async function EA(){if(Ni)return Ni;Ts(Yt)&&await Xo();let{domain:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ts(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ni=Yt.jetstream({domain:e}),Ni}a(EA,"getJetStream");async function Ut(){let e=Yt||await Xo(),t=pi||await En(),r=Ni||await EA();return{connection:e,jsm:t,js:r}}a(Ut,"getNATSReferences");async function WG(){let e=Tr.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await aA.getClusterUser(),s=await Hl(e,t,r),n=vl(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(uA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Bl.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(WG,"getServerList");async function ql(e,t){let{jsm:r}=await Ut();await r.streams.add({name:e,storage:oA.File,retention:cA.Limits,subjects:t})}a(ql,"createLocalStream");async function dA(){let{jsm:e}=await Ut(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(dA,"listStreams");async function QG(e){let{jsm:t}=await Ut();await t.streams.delete(e)}a(QG,"deleteLocalStream");async function JG(e){let{connection:t}=await Ut(),r=[],s=vl(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(uA.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(JG,"listRemoteStreams");async function ZG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ut(),i=yG(),o=[],c={ack_policy:_A.None,durable_name:i,deliver_subject:i,deliver_policy:Ml.All};t&&(c.deliver_policy=Ml.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=GG(l),d=iA(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d,originators:[]},m=[];if(E.headers){let R=E.headers.get("originators");R&&(m=R.split(","),h.originators=m)}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(ZG,"viewStream");async function XG(e,t,r=[],s=[]){mr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Ut(),o=await zo(),c=`${e}.${o}`,_=qG();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{mr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Dl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")mr.trace(`publishToStream creating stream: ${t}`),await ql(t,[c]),await i.publish(c,Dl(r[u]),{headers:_});else throw E}}a(XG,"publishToStream");function Ii(e){e=e.toLowerCase();let t=gi.join(Tr.get(ie.CONFIG_PARAMS.ROOTPATH),kG);if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ts(yl)&&(yl={port:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:gi.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),yl;if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ts(Ul)&&(Ul={port:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:gi.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),Ul;mr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ii,"getServerConfig");async function zG(e){let{jsm:t}=await Ut(),r=await zo();try{await t.streams.add({name:e.stream_name,storage:oA.File,retention:cA.Workqueue,subjects:[`${ee.SUBJECT_PREFIXES.MSGID}.${r}`,`${ee.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:_A.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ml.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(zG,"createWorkQueueStream");async function hA(e,t,r){let{jsm:s}=await Ut(),n=await s.streams.info(t),i=SA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Zo.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,C=n.config.sources.length;R<C;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;await TA(c,_,E,t),n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(hA,"addSourceToWorkStream");function SA(e){return e.split(".")[1]}a(SA,"extractServerName");async function fA(e,t,r){let{schema:s,table:n}=r,i=Zo.createNatsTableStreamName(s,n),{jsm:o}=await Ut(),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),await TA(s,n,u,t)}a(fA,"removeSourceFromWorkStream");async function TA(e,t,r,s){let n=await En(),i;try{i=AA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{mr.error("Error purging source subject",i,"from work stream",s)}}a(TA,"purgeSourceFromWorkStream");async function jG(e,t,r=2e3,s=vl()){if(!Bl.isObject(t))throw new Error("data param must be an object");let n=Dl(t),{connection:i}=await Ut(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return iA(c.data)}a(jG,"request");function Gl(e){return new Promise(async(t,r)=>{let s=MG(Pl,["--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(Gl,"reloadNATS");async function eF(){let{pid_file_path:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Gl(e)}a(eF,"reloadNATSHub");async function tF(){let{pid_file_path:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Gl(e)}a(tF,"reloadNATSLeaf");function rF(e,t,r){let s;switch(e.code){case rA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case rA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(rF,"requestErrorHandler");async function sF(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await PG.writeTransaction(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await hA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await fA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(sF,"updateWorkStream");async function mA(e,t){let r=Zo.createNatsTableStreamName(e,t),s=await zo(),n=AA(e,t,s);await ql(r,[n])}a(mA,"createLocalTableStream");async function nF(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await mA(s,n)}}a(nF,"createTableStreams");async function RA(e,t){if(Tr.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Zo.createNatsTableStreamName(e,t),{jsm:s}=await Ut();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")mr.warn(r);else throw r}}a(RA,"purgeTableStream");async function iF(e,t){if(Tr.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await RA(e,t[r])}a(iF,"purgeSchemaTableStreams");async function aF(e){return(await En()).streams.info(e)}a(aF,"getStreamInfo");function AA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(AA,"createSubjectName");async function zo(){if(Oi)return Oi;if(Oi=(await En())?.nc?.info?.server_name,Oi===void 0)throw new Error("Unable to get jetstream manager server name");return Oi}a(zo,"getJsmServerName");async function oF(){let e=await En(),t=await zo(),r=await dA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===ee.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;mr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ee.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;mr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_,await e.consumers.update(ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,ee.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${ee.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");mr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(oF,"updateNodeNameLocalStreams")});var kl=S((UZ,gA)=>{"use strict";var dn=require("path"),rc=require("fs-extra"),cF=sR(),_F=aR(),uF=cR(),lF=uR(),Fl=kr(),Sn=b(),yt=ur(),tc=T(),jo=he(),{CONFIG_PARAMS:we}=tc,sc=I(),nc=Y(),pA=vr(),Vl=mt(),hn="clustering",EF=1e4,NA=5;gA.exports={generateNatsConfig:dF,removeNatsConfig:hF};async function dF(e=!1,t=void 0){nc.initSync();let r=nc.get(we.ROOTPATH),s=dn.join(r,hn,jo.PID_FILES.HUB),n=dn.join(r,hn,jo.PID_FILES.LEAF),i=dn.join(r,hn,"leaf"),o=dn.join(r,hn,jo.NATS_CONFIG_FILES.HUB_SERVER),c=dn.join(r,hn,jo.NATS_CONFIG_FILES.LEAF_SERVER),_=yt.getConfigFromFile(we.CLUSTERING_TLS_CERTIFICATE),u=yt.getConfigFromFile(we.CLUSTERING_TLS_PRIVATEKEY),l=yt.getConfigFromFile(we.CLUSTERING_TLS_CERT_AUTH),E=yt.getConfigFromFile(we.CLUSTERING_TLS_INSECURE),d=yt.getConfigFromFile(we.CLUSTERING_NODENAME),h=yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Vl.checkNATSServerInstalled()||ic("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await Fl.listUsers(),R=yt.getConfigFromFile(we.CLUSTERING_USER),C=await Fl.getClusterUser();(Sn.isEmpty(C)||C.active!==!0)&&ic(`invalid cluster user '${R}'`),e||(await ec(we.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ec(we.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ec(we.CLUSTERING_HUBSERVER_NETWORK_PORT),await ec(we.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[_a,wr]of m.entries())wr.role.role===tc.ROLE_TYPES_ENUM.CLUSTER_USER&&wr.active&&(L.push(new lF(wr.username,pA.decrypt(wr.hash))),B.push(new uF(wr.username,pA.decrypt(wr.hash))));let X=[],{hub_routes:V}=yt.getClusteringRoutes();if(!Sn.isEmptyOrZeroLength(V))for(let _a of V)X.push(`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@${_a.host}:${_a.port}`);let Q=new cF(yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,h,yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_CLUSTER_NAME),yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),X,L,B);t=Sn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===tc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await rc.writeJson(o,Q),sc.trace(`Hub server config written to ${o}`));let ke=`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@0.0.0.0:${h}`,$e=`tls://${C.uri_encoded_name}:${C.uri_encoded_d_hash}@0.0.0.0:${h}`,ca=new _F(yt.getConfigFromFile(we.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[ke],[$e],L,B,_,u,l,E);(t===void 0||t===tc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await rc.writeJson(c,ca),sc.trace(`Leaf server config written to ${c}`))}a(dF,"generateNatsConfig");async function ec(e){let t=nc.get(e);Sn.isEmpty(t)&&ic(`port undefined for '${e}'`),await Sn.isPortTaken(t)&&ic(`'${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.`)}a(ec,"isPortAvailable");function ic(e){let t=`Error generating clustering config: ${e}`;sc.error(t),console.error(t),process.exit(1)}a(ic,"generateNatsConfigError");async function hF(e){let{port:t,config_file:r}=Vl.getServerConfig(e),{username:s,decrypt_hash:n}=await Fl.getClusterUser(),i=0,o=500;for(;i<NA;){try{let u=await Vl.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){sc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=NA)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 Sn.async_set_timeout(o*i)}let c="0".repeat(EF),_=dn.join(nc.get(we.ROOTPATH),hn,r);await rc.writeFile(_,c),await rc.remove(_)}a(hF,"removeNatsConfig")});var oc=S((yZ,yA)=>{"use strict";var se=Y(),IA=mi(),w=T(),$l=he(),Ae=require("path"),{PACKAGE_ROOT:ac}=T(),_e="/dev/null",fn=Ae.join(ac,"launchServiceScripts"),bA=Ae.join(ac,"utility/scripts"),SF=Ae.join(bA,w.HDB_RESTART_SCRIPT),wA=Ae.resolve(ac,"dependencies",`${process.platform}-${process.arch}`,$l.NATS_BINARY_NAME),Pe,Be;function rr(){(Pe===void 0||Be===void 0)&&(se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(rr,"initLogConfig");function CA(){rr();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.IPC),t={name:w.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:w.SERVICE_SERVERS_CWD.IPC};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:w.SERVICE_SERVERS.IPC}}a(CA,"generateIPCServerConfig");function LA(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,w.PROCESS_LOG_NAMES.HDB),t=IA.licenseSearch(),r=t.ram_allocation?w.MEM_SETTING_KEY+t.ram_allocation:w.MEM_SETTING_KEY+w.RAM_ALLOCATION_ENUM.DEFAULT,s={name:w.PROCESS_DESCRIPTORS.HDB,script:w.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:se.get(w.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:fn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(LA,"generateHDBServerConfig");function UA(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=IA.licenseSearch(),r=t.ram_allocation?w.MEM_SETTING_KEY+t.ram_allocation:w.MEM_SETTING_KEY+w.RAM_ALLOCATION_ENUM.DEFAULT,s={name:w.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:w.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:se.get(w.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:fn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(UA,"generateCFServerConfig");function fF(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(w.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",$l.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:wA,args:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(fF,"generateNatsHubServerConfig");function TF(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(w.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",$l.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:wA,args:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(TF,"generateNatsLeafServerConfig");function mF(){rr(),se.initSync();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:w.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(mF,"generateNatsIngestServiceConfig");function RF(){rr(),se.initSync();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:w.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(RF,"generateNatsReplyServiceConfig");function AF(){rr(),se.initSync();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:w.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fn,autorestart:!1};return Pe||(t.out_file=_e,t.error_file=_e),t}a(AF,"generateClusteringUpgradeV4ServiceConfig");function OF(){rr();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.PM2),t={name:w.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:bA};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:SF}}a(OF,"generateRestart");function pF(e){rr();let t=Ae.join(Be,w.PROCESS_LOG_NAMES.JOBS),r=Ae.join(ac,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:fn,autorestart:!1};return Pe||(s.out_file=_e,s.error_file=_e),{...s,script:Ae.join(r,"jobProcess.js")}}a(pF,"generateJobConfig");function NF(){return{apps:[CA(),LA(),UA()]}}a(NF,"generateAllServiceConfigs");yA.exports={generateAllServiceConfigs:NF,generateIPCServerConfig:CA,generateHDBServerConfig:LA,generateCFServerConfig:UA,generateRestart:OF,generateNatsHubServerConfig:fF,generateNatsLeafServerConfig:TF,generateNatsIngestServiceConfig:mF,generateNatsReplyServiceConfig:RF,generateClusteringUpgradeV4ServiceConfig:AF,generateJobConfig:pF}});var MA=S((DZ,DA)=>{var gF=Ee(),IF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};DA.exports=function(e){return gF.validateObject(e,IF)}});var xl=S((MZ,PA)=>{"use strict";var bF=T().OPERATIONS_ENUM,cc=class{constructor(t,r,s,n=void 0){this.operation=bF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(cc,"UpdateObject");PA.exports=cc});var vA=S((PZ,BA)=>{"use strict";var wF={OPERATION:"operation",REFRESH:"refresh"},_c=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(_c,"JWTTokens");var uc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(uc,"JWTRSAKeys");BA.exports={JWTTokens:_c,TOKEN_TYPE_ENUM:wF,JWTRSAKeys:uc}});var hc=S((BZ,FA)=>{"use strict";var wi=require("jsonwebtoken"),Yl=require("fs-extra"),Kl=b(),Dt=T(),{handleHDBError:at,hdb_errors:CF}=D(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:ct}=CF,bi=I(),HA=Yo(),Jl=kr(),LF=Lt().update,UF=xl(),yF=Ws(),{UserEventMsg:DF}=os(),$r=Y();$r.initSync();var Wl=require("path"),{JWTTokens:MF,JWTRSAKeys:PF,TOKEN_TYPE_ENUM:lc}=vA(),BF=$r.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?$r.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",vF=$r.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?$r.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ec="RS256",Ql;FA.exports={createTokens:HF,validateOperationToken:GF,refreshOperationToken:qF,validateRefreshToken:GA};async function HF(e){if(Kl.isEmpty(e)||typeof e!="object")throw at(new Error,ct.INVALID_AUTH_OBJECT,ot.BAD_REQUEST,void 0,void 0,!0);if(Kl.isEmpty(e.username))throw at(new Error,ct.USERNAME_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);if(Kl.isEmpty(e.password))throw at(new Error,ct.PASSWORD_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Jl.findAndValidateUser(e.username,e.password),!t)throw at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw bi.error(d),at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}let r=await dc(),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 qA(i,r.private_key,r.passphrase),c=await wi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:vF,algorithm:Ec,subject:lc.REFRESH}),_=HA.hash(c),u=new UF(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await LF(u)}catch(d){bi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw at(new Error,ct.REFRESH_TOKEN_SAVE_FAILED,ot.INTERNAL_SERVER_ERROR);return yF.signalUserChange(new DF(process.pid)),new MF(o,c)}a(HF,"createTokens");async function qA(e,t,r){return await wi.sign(e,{key:t,passphrase:r},{expiresIn:BF,algorithm:Ec,subject:lc.OPERATION})}a(qA,"signOperationToken");async function dc(){if(Ql===void 0)try{let e=Wl.join($r.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Wl.join($r.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Wl.join($r.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Yl.readFile(e)).toString(),n=(await Yl.readFile(t)).toString(),i=(await Yl.readFile(r)).toString();Ql=new PF(i,n,s)}catch(e){throw bi.error(e),at(new Error,ct.NO_ENCRYPTION_KEYS,ot.INTERNAL_SERVER_ERROR)}return Ql}a(dc,"getJWTRSAKeys");async function qF(e){if(!e)throw at(new Error,ct.INVALID_BODY,ot.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw at(new Error,ct.REFRESH_TOKEN_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);await GA(e.refresh_token);let t=await dc(),r=await wi.decode(e.refresh_token);return{operation_token:await qA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(qF,"refreshOperationToken");async function GF(e){try{let t=await dc(),r=await wi.verify(e,t.public_key,{algorithms:Ec,subject:lc.OPERATION});return await Jl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw bi.warn(t),t.name&&t.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}}a(GF,"validateOperationToken");async function GA(e){let t;try{let r=await dc(),s=await wi.verify(e,r.public_key,{algorithms:Ec,subject:lc.REFRESH});t=await Jl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw bi.warn(r),r.name&&r.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}if(!HA.validate(t.refresh_token,e))throw at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED);return t}a(GA,"validateRefreshToken")});var xA=S((HZ,$A)=>{"use strict";var FF=MA(),Tn=require("passport"),VF=require("passport-local").Strategy,kF=require("passport-http").BasicStrategy,$F=require("util"),xF=kr(),kA=$F.callbackify(xF.findAndValidateUser),vZ=rt(),YF=T(),VA=hc();Tn.use(new VF(function(e,t,r){kA(e,t,r)}));Tn.use(new kF(function(e,t,r){kA(e,t,r)}));Tn.serializeUser(function(e,t){t(null,e)});Tn.deserializeUser(function(e,t){t(null,e)});function KF(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":Tn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===YF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?VA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):VA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Tn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(KF,"authorize");function WF(e,t){let r=FF(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(WF,"checkPermissions");$A.exports={authorize:KF,checkPermissions:WF}});var mn=S((qZ,YA)=>{"use strict";var Sc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Sc,"Node");var fc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(fc,"NodeSubscription");YA.exports={Node:Sc,NodeSubscription:fc}});var WA=S((GZ,KA)=>{"use strict";var QF=T().OPERATIONS_ENUM,Tc=class{constructor(t,r,s,n=void 0){this.operation=QF.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Tc,"UpsertObject");KA.exports=Tc});var Ci=S((FZ,QA)=>{"use strict";var mc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(mc,"RemotePayloadObject");var Rc=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(Rc,"RemotePayloadSubscription");QA.exports={RemotePayloadObject:mc,RemotePayloadSubscription:Rc}});var ZA=S((VZ,JA)=>{"use strict";var Ac=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(Ac,"TableSizeObject");JA.exports=Ac});var eO=S((kZ,jA)=>{"use strict";var JF=ZA(),XA=require("path"),zA=te(),ZF=Ye(),Rn=z(),XF=I();jA.exports=zF;async function zF(e){let t=new JF;try{let r=XA.join(zA.getBaseSchemaPath(),e.schema.toString()),s=await Rn.openEnvironment(r,e.name),n=Rn.statDBI(s,e.hash_attribute),i=XA.join(zA.getTransactionAuditStorePath(),e.schema.toString()),o=await Rn.openEnvironment(i,e.name,!0),c=Rn.statDBI(o,ZF.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Rn.environmentDataSize(r,e.name),u=await Rn.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){XF.warn(`unable to stat table dbi due to ${r}`)}return t}a(zF,"lmdbGetTableSize")});var rO=S(($Z,tO)=>{"use strict";var jF=T(),Oc=class{constructor(t){this.operator=jF.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Oc,"SystemInformationOperation");tO.exports=Oc});var nO=S((xZ,sO)=>{"use strict";var pc=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(pc,"SystemInformationObject");sO.exports=pc});var gc=S((KZ,iO)=>{"use strict";var ve=require("systeminformation"),An=I(),e0=T(),t0=eO(),r0=on(),s0=Y();s0.initSync();var YZ=rO(),n0=nO(),Nc;iO.exports={getHDBProcessInfo:jl,getNetworkInfo:tE,getDiskInfo:eE,getMemoryInfo:zl,getCPUInfo:Xl,getTimeInfo:Zl,getSystemInformation:rE,systemInformation:i0,getTableSize:sE};function Zl(){return ve.time()}a(Zl,"getTimeInfo");async function Xl(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await ve.cpu();l.cpu_speed=await ve.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:C,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(X=>{let{raw_load:V,raw_load_idle:Q,raw_load_irq:ke,raw_load_nice:$e,raw_load_system:ca,raw_load_user:_a,...wr}=X;B.cpus.push(wr)}),l.current_load=B,l}catch(e){return An.error(`error in getCPUInfo: ${e}`),{}}}a(Xl,"getCPUInfo");async function zl(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return An.error(`error in getMemoryInfo: ${e}`),{}}}a(zl,"getMemoryInfo");async function jl(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(e0.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return An.error(`error in getHDBProcessInfo: ${t}`),e}}a(jl,"getHDBProcessInfo");async function eE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ve.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await ve.fsStats();return e.read_write=u,e.size=await ve.fsSize(),e}catch(t){return An.error(`error in getDiskInfo: ${t}`),e}}a(eE,"getDiskInfo");async function tE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ve.networkInterfaceDefault(),e.latency=await ve.inetChecksite("google.com"),(await ve.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 ve.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e.connections=await ve.networkConnections(),e}catch(t){return An.error(`error in getNetworkInfo: ${t}`),e}}a(tE,"getNetworkInfo");async function rE(){if(Nc!==void 0)return Nc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await ve.osInfo();e=c;let _=await ve.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,Nc=e,Nc}catch(t){return An.error(`error in getSystemInformation: ${t}`),e}}a(rE,"getSystemInformation");async function sE(){let e=[],t=await r0.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await t0(s));return e}a(sE,"getTableSize");async function i0(e){let t=new n0;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await rE(),t.time=Zl(),t.cpu=await Xl(),t.memory=await zl(),t.disk=await eE(),t.network=await tE(),t.harperdb_processes=await jl(),t.table_size=await sE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await rE();break;case"time":t.time=Zl();break;case"cpu":t.cpu=await Xl();break;case"memory":t.memory=await zl();break;case"disk":t.disk=await eE();break;case"network":t.network=await tE();break;case"harperdb_processes":t.harperdb_processes=await jl();break;case"table_size":t.table_size=await sE();break;default:break}return t}a(i0,"systemInformation")});var nE=S((JZ,aO)=>{"use strict";var WZ=require("fs-extra"),QZ=I();aO.exports={version:a0,printVersion:c0,nodeVersion:o0};var xr=Ll();function a0(){if(xr)return xr.version}a(a0,"version");function o0(){if(xr&&xr.engines&&xr.engines["preferred-node"])return xr.engines["preferred-node"]}a(o0,"nodeVersion");function c0(){xr&&console.log(`HarperDB Version ${xr.version}`)}a(c0,"printVersion")});var Rs=S((zZ,uO)=>{"use strict";var _0=Lt(),iE=b(),aE=require("util"),ms=T(),oO=Y();oO.initSync();var u0=xA(),cO=ft(),{Node:ZZ,NodeSubscription:XZ}=mn(),l0=_s(),E0=WA(),{RemotePayloadObject:d0,RemotePayloadSubscription:h0}=Ci(),{handleHDBError:S0,hdb_errors:f0}=D(),{HTTP_STATUS_CODES:T0,HDB_ERROR_MSGS:m0}=f0,R0=xt(),A0=gc(),O0=nE(),p0=aE.promisify(u0.authorize),N0=aE.promisify(cO.searchByHash),g0=aE.promisify(cO.searchByValue);uO.exports={authHeaderToUser:I0,isEmpty:b0,getNodeRecord:w0,upsertNodeRecord:C0,buildNodePayloads:L0,checkClusteringEnabled:U0,getAllNodeRecords:y0,getSystemInfo:D0,reverseSubscription:_O};async function I0(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await p0(t,null),e}a(I0,"authHeaderToUser");function b0(e){return e==null}a(b0,"isEmpty");async function w0(e){let t=new l0(ms.SYSTEM_SCHEMA_NAME,ms.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return N0(t)}a(w0,"getNodeRecord");async function C0(e){let t=new E0(ms.SYSTEM_SCHEMA_NAME,ms.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return _0.upsert(t)}a(C0,"upsertNodeRecord");function _O(e){if(iE.isEmpty(e.subscribe)||iE.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(_O,"reverseSubscription");function L0(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=iE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=_O(c),h=new h0(_,u,l,d,E,c.start_time);n.push(h)}return new d0(r,t,n,s)}a(L0,"buildNodePayloads");function U0(){if(!oO.get(ms.CONFIG_PARAMS.CLUSTERING_ENABLED))throw S0(new Error,m0.CLUSTERING_NOT_ENABLED,T0.BAD_REQUEST,void 0,void 0,!0)}a(U0,"checkClusteringEnabled");async function y0(){let e=new R0(ms.SYSTEM_SCHEMA_NAME,ms.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return g0(e)}a(y0,"getAllNodeRecords");async function D0(){let e=await A0.getSystemInformation();return{hdb_version:O0.version(),node_version:e.node_version,platform:e.platform}}a(D0,"getSystemInfo")});var On=S((jZ,OO)=>{"use strict";var P=T(),Ic=b(),Li=kl(),bc=mt(),M0=he(),$=require("pm2"),P0=require("fs-extra"),Rr=oc(),_t=Y(),Ar=I(),B0=oc(),v0=Rs(),H0=require("util"),EO=H0.promisify(require("child_process").exec),dO=require("path");OO.exports={start:As,stop:Cc,reload:SO,restart:fO,list:cE,describe:Lc,connect:sr,kill:mO,startAllServices:W0,startService:wc,getUniqueServicesList:_E,restartAllServices:Q0,stopAllServices:J0,isServiceRegistered:RO,reloadStopStart:oE,restartHdb:TO,deleteProcess:Y0,configureLogRotate:z0,startClustering:AO,isHdbRestartRunning:K0,isClusteringRunning:eV,stopClustering:j0,reloadClustering:tV};var{PACKAGE_ROOT:q0}=T(),G0="2.7.0",hO=dO.join(q0,"node_modules/pm2/bin/pm2"),F0="Log rotate installed.",V0="Error installing log rotate.",k0="Log rotate updated.",$0="Error updating log rotate.",x0="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function sr(){return new Promise((e,t)=>{$.connect((r,s)=>{r&&t(r),e(s)})})}a(sr,"connect");function As(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.start(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(As,"start");function Cc(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.stop(e,(s,n)=>{s&&($.disconnect(),r(s)),$.delete(e,(i,o)=>{i&&($.disconnect(),r(s)),$.disconnect(),t(o)})})})}a(Cc,"stop");function SO(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.reload(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(SO,"reload");function fO(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.restart(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(fO,"restart");function Y0(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.delete(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(Y0,"deleteProcess");async function TO(){await As(B0.generateRestart())}a(TO,"restartHdb");async function K0(){let e=await cE();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(K0,"isHdbRestartRunning");function cE(){return new Promise(async(e,t)=>{try{await sr()}catch(r){t(r)}$.list((r,s)=>{r&&($.disconnect(),t(r)),$.disconnect(),e(s)})})}a(cE,"list");function Lc(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.describe(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(Lc,"describe");function mO(){return new Promise(async(e,t)=>{try{await sr()}catch(r){t(r)}$.killDaemon((r,s)=>{r&&($.disconnect(),t(r)),$.disconnect(),e(s)})})}a(mO,"kill");async function W0(){try{await AO(),await As(Rr.generateAllServiceConfigs())}catch(e){throw $.disconnect(),e}}a(W0,"startAllServices");async function wc(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Rr.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Rr.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Rr.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Rr.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Rr.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Rr.generateNatsHubServerConfig(),await As(t),await Li.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Rr.generateNatsLeafServerConfig(),await As(t),await Li.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Rr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await As(t)}catch(t){throw $.disconnect(),t}}a(wc,"startService");async function _E(){try{let e=await cE(),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 $.disconnect(),e}}a(_E,"getUniqueServicesList");async function Q0(e=[]){try{let t=!1,r=await _E();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await oE(o):await fO(o))}t&&await oE(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw $.disconnect(),t}}a(Q0,"restartAllServices");async function J0(){try{let e=await _E();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Cc(s.name)}if(await mO(),_t.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await P0.readFile(dO.join(_t.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ar.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw $.disconnect(),e}}a(J0,"stopAllServices");async function RO(e){return!Ic.isEmptyOrZeroLength(await Lc(e))}a(RO,"isServiceRegistered");async function oE(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?_t.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):_t.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Lc(e),s=Ic.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?Ar.error(x0):(await Cc(e),await wc(e)):e===P.PROCESS_DESCRIPTORS.HDB?await TO():await SO(e)}a(oE,"reloadStopStart");function Z0(){return new Promise(async(e,t)=>{try{await sr()}catch(r){t(r)}$.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&($.disconnect(),t(r)),$.disconnect(),e(s)})})}a(Z0,"stopLogrotate");async function X0(){let{stdout:e,stderr:t}=await EO(`${process.platform==="win32"?"node":""} ${hO} install pm2-logrotate@${G0}`);if(Ar.debug(`loadLogRotate stdout: ${e}`),t)throw Ar.error(V0),t;Ar.info(F0)}a(X0,"installLogRotate");async function lO(){let e={max_size:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${hO} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await EO(t);if(Ar.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ar.error($0),s;Ar.info(k0)}a(lO,"updateLogRotateConfig");async function z0(){_t.initSync();let e=Ic.autoCastBoolean(_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Lc(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Ic.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await X0(),await lO();return}if(e&&s){await As(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await lO();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await Z0()}a(z0,"configureLogRotate");async function AO(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await wc(r)}await bc.createWorkQueueStream(M0.WORK_QUEUE_CONSUMER_NAMES),await bc.updateNodeNameLocalStreams();let e=await v0.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){Ar.info("Starting clustering upgrade 4.0.0 process"),await wc(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(AO,"startClustering");async function j0(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await Cc(t)}}a(j0,"stopClustering");async function eV(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await RO(t)===!1)return!1}return!0}a(eV,"isClusteringRunning");async function tV(){await Li.generateNatsConfig(!0),await bc.reloadNATSHub(),await bc.reloadNATSLeaf(),await Li.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Li.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(tV,"reloadClustering")});var uE=S((eX,pO)=>{"use strict";var Uc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Uc,"ClusteringOriginObject");pO.exports=Uc});var gn=S((tX,IO)=>{"use strict";var NO=b(),yi=Y(),ue=T(),lE=he(),pn=mt(),Se=I(),gO=uE(),rV=vr();yi.initSync();var Nn=lE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,Ui=lE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;IO.exports={sendAttributeTransaction:Dc,postOperationHandler:nV};async function Dc(e,t,r=[]){if(!!yi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!NO.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==ue.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=yi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new gO(e.txn_time,s,n)};Se.trace(`sendAttributeTransaction publishing ${Nn}`,o),await pn.publishToStream(Ui,Nn,[o],r)}}}a(Dc,"sendAttributeTransaction");async function yc(e,t,r,s=[]){if(e.schema===ue.SYSTEM_SCHEMA_NAME)return;let n=sV(e,t,r);n&&(Se.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await pn.publishToStream(`${lE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,rV.createNatsTableStreamName(e.schema,e.table),[n],s))}a(yc,"sendOperationTransaction");function sV(e,t,r){if(NO.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===ue.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(sV,"convertCRUDOperationToTransaction");async function nV(e,t,r=[]){if(!yi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Se.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=yi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new gO(t.txn_time,s,n);switch(e.operation){case ue.OPERATIONS_ENUM.INSERT:try{await yc(e,t.inserted_hashes,i,r),await Dc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for insert."),Se.error(o)}break;case ue.OPERATIONS_ENUM.DELETE:try{await yc(e,t.deleted_hashes,i,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for delete."),Se.error(o)}break;case ue.OPERATIONS_ENUM.UPDATE:try{await yc(e,t.update_hashes,i,r),await Dc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for update."),Se.error(o)}break;case ue.OPERATIONS_ENUM.UPSERT:try{await yc(e,t.upserted_hashes,i,r),await Dc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for upsert."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_schema."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_table."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_attribute."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:ue.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for csv_data_load."),Se.error(o)}break;default:break}return t}a(nV,"postOperationHandler")});var UO=S((rX,LO)=>{"use strict";var iV=ft(),aV=Es(),bO=I(),wO=Lt(),oV=Jo(),cV=require("clone"),dE=require("alasql"),_V=wo(),CO=require("util"),uV=CO.promisify(aV.getTableSchema),lV=CO.promisify(iV.search),EV=T(),EE=b(),dV=gn();_V(dE);LO.exports={update:SV};var hV="There was a problem performing this update. Please check the logs and try again.";async function SV({statement:e,hdb_user:t}){let r=await uV(e.table.databaseid,e.table.tableid),s=fV(e.columns);EE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=cV(n),c=EE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=dE.parse(_).statements[0],l=await oV.writeTransaction(r.schema,r.name,async()=>{let E=await lV(u),d=TV(s,E);return mV(o,d,t)});return await wO.flush({schema:r.schema,table:r.name}),l}a(SV,"update");function fV(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=dE.compile(`SELECT ${r.expression.toString()} AS [${EV.FUNC_VAL}] FROM ?`)}),t}catch(t){throw bO.error(t),new Error(hV)}}a(fV,"createUpdateRecord");function TV(e,t){return EE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(TV,"buildUpdateRecords");async function mV(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await wO.update(s);await dV.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){bO.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(mV,"updateRecords")});var DO=S((sX,yO)=>{var RV=require("alasql"),AV=ft(),OV=I(),pV=fr(),SE=require("util"),hE=b(),NV=T(),gV=Es(),IV=Jo(),bV=gn(),wV=Lt(),CV="record",LV="successfully deleted",UV=SE.callbackify(PV),yV=SE.promisify(AV.search),DV=SE.promisify(gV.getTableSchema);yO.exports={convertDelete:UV};function MV(e){return`${e.deleted_hashes.length} ${CV}${e.deleted_hashes.length===1?"":"s"} ${LV}`}a(MV,"generateReturnMessage");async function PV({statement:e,hdb_user:t}){let r=await DV(e.table.databaseid,e.table.tableid);hE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=hE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=RV.parse(o).statements[0],_={operation:NV.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await IV.writeTransaction(r.schema,r.name,async()=>(_.records=await yV(c),pV.deleteRecords(_)));return await wV.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await bV.postOperationHandler(_,u),hE.isEmptyOrZeroLength(u.message)&&(u.message=MV(u)),delete u.txn_time,u}catch(u){throw OV.error(u),u.hdb_code?u.message:u}}a(PV,"convertDelete")});var BO=S((nX,PO)=>{"use strict";var TE=on(),{hdb_errors:fE}=D();PO.exports={checkSchemaExists:MO,checkSchemaTableExists:BV,schema_describe:TE};async function MO(e){if(!global.hdb_schema[e])try{let t=await TE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return fE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(MO,"checkSchemaExists");async function BV(e,t){let r=await MO(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await TE.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(BV,"checkSchemaTableExists")});var Mc=S((aX,FO)=>{"use strict";var In=xa(),Os=BO(),vO=I(),vV=require("uuid").v4,iX=require("clone"),wn=Ws(),ps=T(),HV=require("util"),Ns=fr(),{handleHDBError:He,hdb_errors:qV}=D(),{HDB_ERROR_MSGS:bn,HTTP_STATUS_CODES:qe}=qV,{SchemaEventMsg:Cn}=os(),HO=mt();FO.exports={createSchema:GV,createSchemaStructure:qO,createTable:FV,createTableStructure:GO,createAttribute:YV,dropSchema:VV,dropTable:kV,dropAttribute:$V};async function GV(e){try{let t=await qO(e);return wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(GV,"createSchema");async function qO(e){let t=In.schema_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);if(!await Os.checkSchemaExists(e.schema))throw He(new Error,bn.SCHEMA_EXISTS_ERR(e.schema),qe.BAD_REQUEST,ps.LOG_LEVELS.ERROR,bn.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await Ns.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(qO,"createSchemaStructure");async function FV(e){try{let t=await GO(e);return wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(FV,"createTable");async function GO(e){let t=In.create_table_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);In.validateTableResidence(e.residence);let r=await Os.checkSchemaExists(e.schema);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);if(!await Os.checkSchemaTableExists(e.schema,e.table))throw He(new Error,bn.TABLE_EXISTS_ERR(e.schema,e.table),qe.BAD_REQUEST,ps.LOG_LEVELS.ERROR,bn.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:vV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ns.createTable(n,e);else throw He(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",qe.BAD_REQUEST);else await Ns.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(GO,"createTableStructure");async function VV(e){let t=In.schema_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);let r=await Os.checkSchemaExists(e.schema);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);let s=await Os.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ns.dropSchema(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await HO.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(VV,"dropSchema");async function kV(e){let t=In.table_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);let r=await Os.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);return await Ns.dropTable(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table)),await HO.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(kV,"dropTable");async function $V(e){let t=In.attribute_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);let r=await Os.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw He(new Error,"You cannot drop a hash attribute",qe.BAD_REQUEST,void 0,void 0,!0);if(ps.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw He(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,qe.BAD_REQUEST,void 0,void 0,!0);try{return await Ns.dropAttribute(e),xV(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw vO.error(`Got an error deleting attribute ${HV.inspect(e)}.`),s}}a($V,"dropAttribute");function xV(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(xV,"dropAttributeFromGlobal");async function YV(e){if(!global.hdb_schema[e.schema])throw He(new Error,bn.SCHEMA_NOT_FOUND(e.schema),qe.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw He(new Error,bn.TABLE_NOT_FOUND(e.schema,e.table),qe.NOT_FOUND,void 0,void 0,!0);try{return await Ns.createAttribute(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw vO.error(t),t}}a(YV,"createAttribute")});var kO=S((oX,VO)=>{"use strict";var{OPERATIONS_ENUM:KV}=T(),Pc=class{constructor(t,r,s=void 0,n=void 0){this.operation=KV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Pc,"ReadAuditLogObject");VO.exports=Pc});var mE=S((_X,WO)=>{"use strict";var WV=fr(),cX=kO(),Bc=b(),vc=T(),QV=Y(),{handleHDBError:$O,hdb_errors:JV}=D(),{HDB_ERROR_MSGS:xO,HTTP_STATUS_CODES:YO}=JV,ZV=Object.values(vc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),KO="To use this operation audit log must be enabled in harperdb-config.yaml";WO.exports=XV;async function XV(e){if(Bc.isEmpty(e.schema))throw new Error(xO.SCHEMA_REQUIRED_ERR);if(Bc.isEmpty(e.table))throw new Error(xO.TABLE_REQUIRED_ERR);if(!QV.get(vc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw $O(new Error,KO,YO.BAD_REQUEST,vc.LOG_LEVELS.ERROR,KO,!0);let t=Bc.checkSchemaTableExist(e.schema,e.table);if(t)throw $O(new Error,t,YO.NOT_FOUND,vc.LOG_LEVELS.ERROR,t,!0);if(!Bc.isEmpty(e.search_type)&&ZV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await WV.readAuditLog(e)}a(XV,"readAuditLog")});var jO=S((uX,zO)=>{var Yr=require("validate.js"),JO=Ee(),Ln=T(),{handleHDBError:zV,hdb_errors:jV}=D(),{HDB_ERROR_MSGS:le,HTTP_STATUS_CODES:ek}=jV,RE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tk={STRUCTURE_USER:"structure_user"},QO=Object.values(Ln.ROLE_TYPES_ENUM),rk="attribute_permissions",sk="attribute_name",{PERMS_CRUD_ENUM:Un}=Ln,nk=[rk,...Object.values(Un)],ZO=[Un.READ,Un.INSERT,Un.UPDATE],ik=[sk,...ZO];function ak(e){let t=RE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,XO(e,t)}a(ak,"addRoleValidation");function ok(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,XO(e,t)}a(ok,"alterRoleValidation");function ck(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,JO.validateObject(e,t)}a(ck,"dropRoleValidation");var _k=["operation","role","id","permission","hdb_user","hdb_auth_header"];function XO(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)_k.includes(s[o])||n.push(s[o]);n.length>0&&fe(le.INVALID_ROLE_JSON_KEYS(n),r);let i=JO.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=uk(e);o&&fe(o,r),QO.forEach(c=>{e.permission[c]&&!Yr.isBoolean(e.permission[c])&&fe(le.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(QO.indexOf(o)<0){if(o===tk.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]||fe(le.SCHEMA_NOT_FOUND(E),r)}continue}fe(le.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(le.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(le.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{nk.includes(l)||fe(le.INVALID_PERM_KEY(l),r,o,_)}),Object.values(Un).forEach(l=>{Yr.isDefined(u[l])?Yr.isBoolean(u[l])||fe(le.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(le.TABLE_PERM_MISSING(l),r,o,_)}),Yr.isDefined(u.attribute_permissions)){if(!Yr.isArray(u.attribute_permissions)){fe(le.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(le.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=>{!ik.includes(R)&&R!==Un.DELETE&&fe(le.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Yr.isDefined(h.attribute_name)){fe(le.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=h.attribute_name;if(!l.includes(m)){fe(le.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}ZO.forEach(R=>{Yr.isDefined(h[R])?Yr.isBoolean(h[R])||fe(le.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(le.ATTR_PERM_MISSING(R,m),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}.${_}`;fe(le.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return lk(r)}a(XO,"customValidate");zO.exports={addRoleValidation:ak,alterRoleValidation:ok,dropRoleValidation:ck};function uk(e){let{operation:t,permission:r}=e;if(t===Ln.OPERATIONS_ENUM.ADD_ROLE||t===Ln.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 le.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ln.ROLE_TYPES_ENUM.SUPER_USER:Ln.ROLE_TYPES_ENUM.CLUSTER_USER;return le.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(uk,"validateNoSUPerms");function lk(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:le.ROLE_PERMS_ERROR,...e};return zV(new Error,s,ek.BAD_REQUEST)}else return null}a(lk,"generateRolePermResponse");function fe(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(fe,"addPermError")});var wE=S((lX,ip)=>{"use strict";var ep=Lt(),tp=ft(),Ek=Ss(),pE=jO(),NE=Ws(),dk=require("uuid").v4,gE=require("util"),hk=mi(),Or=T(),rp=b(),IE=gE.promisify(tp.searchByValue),Sk=gE.promisify(tp.searchByHash),fk=gE.promisify(Ek.delete),Tk=xt(),mk=_s(),{hdb_errors:Rk,handleHDBError:Di}=D(),{HDB_ERROR_MSGS:sp,HTTP_STATUS_CODES:AE}=Rk,{UserEventMsg:bE}=os();ip.exports={addRole:Ak,alterRole:pk,dropRole:Nk,listRoles:np};function OE(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(OE,"scrubRoleDetails");async function Ak(e){let t=pE.addRoleValidation(e);if(t)throw t;if(!(await hk.getLicense()).enterprise){let o=await np();if(Ok(e,o))throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Or.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_NON_CU_ROLES+Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Or.SUPPORT_HELP_MSG}`)}e=OE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await IE(s)}catch(o){throw Di(o)}if(n&&n.length>0)throw Di(new Error,sp.ROLE_ALREADY_EXISTS(e.role),AE.CONFLICT,void 0,void 0,!0);e.id||(e.id=dk());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ep.insert(i),NE.signalUserChange(new bE(process.pid)),e=OE(e),e}a(Ak,"addRole");function Ok(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(!rp.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(Ok,"checkClusterUserRole");async function pk(e){let t=pE.alterRoleValidation(e);if(t)throw t;e=OE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await ep.update(r)}catch(s){throw Di(s)}return NE.signalUserChange(new bE(process.pid)),e}a(pk,"alterRole");async function Nk(e){let t=pE.dropRoleValidation(e);if(t)throw Di(new Error,t,AE.BAD_REQUEST,void 0,void 0,!0);let r=new mk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await Sk(r);if(s.length===0)throw Di(new Error,sp.ROLE_NOT_FOUND,AE.NOT_FOUND,void 0,void 0,!0);let n=new Tk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await IE(n),o=!1;if(rp.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 fk(c),NE.signalUserChange(new bE(process.pid)),`${s[0].role} successfully deleted`}a(Nk,"dropRole");async function np(){return IE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(np,"listRoles")});var _p=S((EX,cp)=>{"use strict";var gk=Y(),Kr=require("joi"),Ik=Ee(),ap=require("moment"),bk=require("fs-extra"),CE=require("path"),wk=require("lodash"),Mi=T(),{LOG_LEVELS:gs}=T(),Ck="YYYY-MM-DD hh:mm:ss",Lk=CE.resolve(__dirname,"../logs");cp.exports=function(e){return Ik.validateBySchema(e,Uk)};var Uk=Kr.object({from:Kr.custom(op),until:Kr.custom(op),level:Kr.valid(gs.NOTIFY,gs.FATAL,gs.ERROR,gs.WARN,gs.INFO,gs.DEBUG,gs.TRACE),order:Kr.valid("asc","desc"),limit:Kr.number().min(1),start:Kr.number().min(0),log_name:Kr.custom(yk)});function op(e,t){if(ap(e,ap.ISO_8601).format(Ck)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(op,"validateDatetime");function yk(e,t){if(wk.invert(Mi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=gk.get(Mi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Mi.PROCESS_LOG_NAMES.HDB:e,i=n===Mi.PROCESS_LOG_NAMES.INSTALL?CE.join(Lk,Mi.PROCESS_LOG_NAMES.INSTALL):CE.join(s,n);return bk.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(yk,"validateReadLogPath")});var UE=S((dX,lp)=>{"use strict";var Hc=T(),up=I(),Dk=Y(),Mk=_p(),LE=require("path"),Pk=require("fs-extra"),Bk=require("readline"),{once:vk}=require("events"),{handleHDBError:Hk,hdb_errors:qk}=D(),{PACKAGE_ROOT:Gk}=T(),Fk=LE.join(Gk,"logs"),Vk=1e3;lp.exports=kk;async function kk(e){let t=Mk(e);if(t)throw Hk(t,t.message,qk.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Dk.get(Hc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Hc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===Hc.PROCESS_LOG_NAMES.INSTALL?LE.join(Fk,Hc.PROCESS_LOG_NAMES.INSTALL):LE.join(r,s),i=Pk.createReadStream(n);i.on("error",X=>{up.error(X)});let o=Bk.createInterface({input:i,crlfDelay:1/0}),c=e.level!==void 0,_=c?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,E=e.until!==void 0,d=E?new Date(e.until):void 0,h=e.limit===void 0?Vk:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,C=R+h,L=0,B=[];return o.on("line",X=>{let V,Q,ke,$e;try{V=JSON.parse(X)}catch(ca){up.warn(ca.message);return}switch(!0){case(c&&u&&E):Q=new Date(V.timestamp),ke=new Date(l),$e=new Date(d),V.level===_&&Q>=ke&&Q<=$e&&L<R?L++:V.level===_&&Q>=ke&&Q<=$e&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case(c&&u):Q=new Date(V.timestamp),ke=new Date(l),V.level===_&&Q>=ke&&L<R?L++:V.level===_&&Q>=ke&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case(c&&E):Q=new Date(V.timestamp),$e=new Date(d),V.level===_&&Q<=$e&&L<R?L++:V.level===_&&Q<=$e&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case(u&&E):Q=new Date(V.timestamp),ke=new Date(l),$e=new Date(d),Q>=ke&&Q<=$e&&L<R?L++:Q>=ke&&Q<=$e&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case u:Q=new Date(V.timestamp),ke=new Date(l),Q>=ke&&L<R?L++:Q>=ke&&L>=R&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case E:Q=new Date(V.timestamp),$e=new Date(d),Q<=$e&&L<R?L++:Q<=$e&&L>=R&&(Qr(V,m,B),L++,L===C&&Wr(o));break;default:L<R?L++:(Qr(V,m,B),L++,L===C&&Wr(o))}}),await vk(o,"close"),B}a(kk,"readLog");function Wr(e){e.close(),e.removeAllListeners()}a(Wr,"endReadLine");function Qr(e,t,r){t==="desc"?$k(e,r):t==="asc"?xk(e,r):r.push(e)}a(Qr,"pushLineToResult");function $k(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($k,"insertDescending");function xk(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(xk,"insertAscending")});var Gc=S((fX,hp)=>{"use strict";var yE=require("joi"),{string:qc,boolean:Ep,date:Yk}=yE.types(),Kk=Ee(),{validateSchemaExists:hX,validateTableExists:SX,validateSchemaName:Wk}=Er(),Qk=T(),Jk=he(),Zk=Y(),Xk=qc.invalid(Zk.get(Qk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Jk.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(),dp={operation:qc.valid("add_node","update_node"),node_name:Xk,subscriptions:yE.array().items({table:qc.required(),schema:qc.custom(Wk).required(),subscribe:Ep.required(),publish:Ep.required().custom(jk),start_time:Yk.iso()}).min(1).required()};function zk(e){return Kk.validateBySchema(e,yE.object(dp))}a(zk,"addUpdateNodeValidator");function jk(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(jk,"checkForFalsy");hp.exports={addUpdateNodeValidator:zk,validation_schema:dp}});var ME=S((TX,Ap)=>{"use strict";var DE=mt(),Sp=b(),fp=he(),e$=T(),Fc=I(),Tp=Mc(),t$=Qu(),{RemotePayloadObject:r$}=Ci(),{handleHDBError:mp,hdb_errors:s$}=D(),{HTTP_STATUS_CODES:Rp}=s$,{NodeSubscription:n$}=mn();Ap.exports=i$;async function i$(e,t){let r;try{r=await DE.request(`${t}.${fp.REQUEST_SUFFIX}`,new r$(e$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Fc.trace("Response from remote describe all request:",r)}catch(o){Fc.error(`addNode received error from describe all request to remote node: ${o}`);let c=DE.requestErrorHandler(o,"add_node",t);throw mp(new Error,c,Rp.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===fp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw mp(new Error,o,Rp.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=Sp.doesSchemaExist(c),l=s[c]!==void 0,E=Sp.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Fc.trace(`addNode creating schema: ${c}`),await Tp.createSchema({operation:"create_schema",schema:c})),!E&&d){Fc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new t$(c,_,s[c][_].hash_attribute);await Tp.createTable(m)}await DE.createLocalTableStream(c,_);let h=new n$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(i$,"reviewSubscriptions")});var $c=S((mX,Np)=>{"use strict";var{handleHDBError:Vc,hdb_errors:a$}=D(),{HTTP_STATUS_CODES:kc}=a$,{addUpdateNodeValidator:o$}=Gc(),Pi=I(),pp=T(),Op=he(),c$=b(),PE=mt(),Bi=Rs(),_$=Y(),u$=ME(),{Node:l$,NodeSubscription:E$}=mn(),d$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",h$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",S$=_$.get(pp.CONFIG_PARAMS.CLUSTERING_NODENAME);Np.exports=f$;async function f$(e,t=!1){Pi.trace("addNode called with:",e),Bi.checkClusteringEnabled();let r=o$(e);if(r)throw Vc(r,r.message,kc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Bi.getNodeRecord(s);if(!c$.isEmptyOrZeroLength(E))throw Vc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,kc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await u$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=d$,o;let c=Bi.buildNodePayloads(n,S$,pp.OPERATIONS_ENUM.ADD_NODE,await Bi.getSystemInfo());Pi.trace("addNode sending remote payload:",c);let _;try{_=await PE.request(`${s}.${Op.REQUEST_SUFFIX}`,c)}catch(E){Pi.error(`addNode received error from request: ${E}`);let d=PE.requestErrorHandler(E,"add_node",s);throw Vc(new Error,d,kc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Op.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Vc(new Error,E,kc.INTERNAL_SERVER_ERROR,"error",E)}Pi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];Pi.trace("Add node updating work stream for node:",s,"subscriptions:",h),await PE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new E$(h.schema,h.table,h.publish,h.subscribe))}let l=new l$(s,u,_.system_info);return await Bi.upsertNodeRecord(l),i.length>0?o.message=h$:o.message=`Successfully added '${s}' to manifest`,o}a(f$,"addNode")});var vE=S((RX,bp)=>{"use strict";var{handleHDBError:xc,hdb_errors:T$}=D(),{HTTP_STATUS_CODES:Yc}=T$,{addUpdateNodeValidator:m$}=Gc(),vi=I(),Ip=T(),gp=he(),R$=b(),BE=mt(),Hi=Rs(),A$=Y(),{cloneDeep:O$}=require("lodash"),p$=ME(),{NodeSubscription:N$}=mn(),g$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",I$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",b$=A$.get(Ip.CONFIG_PARAMS.CLUSTERING_NODENAME);bp.exports=w$;async function w$(e){vi.trace("updateNode called with:",e),Hi.checkClusteringEnabled();let t=m$(e);if(t)throw xc(t,t.message,Yc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=O$(await Hi.getNodeRecord(r));if(R$.isEmptyOrZeroLength(s))throw xc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Yc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await p$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=g$,o;let c=Hi.buildNodePayloads(n,b$,Ip.OPERATIONS_ENUM.UPDATE_NODE,await Hi.getSystemInfo());vi.trace("updateNode sending remote payload:",c);let _;try{_=await BE.request(`${r}.${gp.REQUEST_SUFFIX}`,c)}catch(u){vi.error(`updateNode received error from request: ${u}`);let l=BE.requestErrorHandler(u,"update_node",r);throw xc(new Error,l,Yc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===gp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw xc(new Error,u,Yc.INTERNAL_SERVER_ERROR,"error",u)}vi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];vi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await BE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await C$(s[0],n,_.system_info),i.length>0?o.message=I$:o.message=`Successfully updated '${r}'`,o}a(w$,"updateNode");async function C$(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 N$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Hi.upsertNodeRecord(s)}a(C$,"updateNodeTable")});var yp=S((AX,Up)=>{"use strict";var Lp=require("joi"),{string:wp}=Lp.types(),L$=Ee(),Cp=T(),U$=Y(),y$=he();Up.exports=D$;function D$(e){let t=wp.invalid(U$.get(Cp.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(y$.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=Lp.object({operation:wp.valid(Cp.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return L$.validateBySchema(e,r)}a(D$,"removeNodeValidator")});var Wc=S((OX,Hp)=>{"use strict";var{handleHDBError:Dp,hdb_errors:M$}=D(),{HTTP_STATUS_CODES:Mp}=M$,P$=yp(),qi=I(),Pp=Rs(),B$=b(),Kc=T(),Bp=he(),vp=mt(),v$=Y(),{RemotePayloadObject:H$}=Ci(),{NodeSubscription:q$}=mn(),G$=_i(),F$=Ss(),V$=v$.get(Kc.CONFIG_PARAMS.CLUSTERING_NODENAME);Hp.exports=k$;async function k$(e){qi.trace("removeNode called with:",e),Pp.checkClusteringEnabled();let t=P$(e);if(t)throw Dp(t,t.message,Mp.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await Pp.getNodeRecord(r);if(B$.isEmptyOrZeroLength(s))throw Dp(new Error,`Node '${r}' was not found.`,Mp.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new H$(Kc.OPERATIONS_ENUM.REMOVE_NODE,V$,[]),i,o=!1;try{i=await vp.request(`${r}.${Bp.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 q$(l.schema,l.table,!1,!1);await vp.updateWorkStream(E,r)}let c=new G$(Kc.SYSTEM_SCHEMA_NAME,Kc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await F$.deleteRecord(c),i?.status===Bp.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(k$,"removeNode")});var Fp=S((pX,Gp)=>{"use strict";var qp=require("joi"),{string:$$,array:x$}=qp.types(),Y$=Ee(),K$=Gc();Gp.exports=W$;function W$(e){let t=qp.object({operation:$$.valid("configure_cluster").required(),connections:x$.items(K$.validation_schema).required()});return Y$.validateBySchema(e,t)}a(W$,"configureClusterValidator")});var HE=S((NX,Yp)=>{"use strict";var Q$=T(),Qc=I(),J$=b(),Z$=Wc(),X$=$c(),Vp=Rs(),z$=Fp(),{handleHDBError:kp,hdb_errors:j$}=D(),{HTTP_STATUS_CODES:$p}=j$,ex="Configure cluster complete.",tx="Failed to configure the cluster. Check the logs for more details.",rx="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Yp.exports=sx;async function sx(e){Qc.trace("configure cluster called with:",e),Vp.checkClusteringEnabled();let t=z$(e);if(t)throw kp(t,t.message,$p.BAD_REQUEST,void 0,void 0,!0);let r=await Vp.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(xp(Z$,{operation:Q$.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);Qc.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(xp(X$,h,h.node_name))}let c=await Promise.allSettled(i);Qc.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 m=E[d];m.status==="rejected"&&(Qc.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(J$.isEmptyOrZeroLength(_))return{message:ex,connections:u};if(l)return{message:rx,failed_nodes:_,connections:u};throw kp(new Error,tx,$p.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(sx,"configureCluster");async function xp(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(xp,"functionWrapper")});var FE=S((gX,Xp)=>{"use strict";var GE=Rs(),nx=mt(),Qp=Y(),Jc=T(),Is=he(),ix=b(),qE=I(),{RemotePayloadObject:ax}=Ci(),{ErrorCode:Kp}=require("nats"),Wp=Qp.get(Jc.CONFIG_PARAMS.CLUSTERING_ENABLED),Jp=Qp.get(Jc.CONFIG_PARAMS.CLUSTERING_NODENAME);Xp.exports={clusterStatus:ox,buildNodeStatus:Zp};async function ox(){let e={node_name:Jp,is_enabled:Wp,connections:[]};if(!Wp)return e;let t=await GE.getAllNodeRecords();if(ix.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(Zp(t[s],e.connections));return await Promise.allSettled(r),e}a(ox,"clusterStatus");async function Zp(e,t){let r=e.name,s=new ax(Jc.OPERATIONS_ENUM.CLUSTER_STATUS,Jp,void 0,await GE.getSystemInfo()),n,i,o=Is.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await nx.request(Is.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Is.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Is.CLUSTER_STATUS_STATUSES.CLOSED,qE.error(`Error getting node status from ${r} `,n))}catch(_){qE.warn(`Error getting node status from ${r}`,_),_.code===Kp.NoResponders?o=Is.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===Kp.Timeout?o=Is.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Is.CLUSTER_STATUS_STATUSES.CLOSED}let c=new cx(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!==Jc.PRE_4_0_0_VERSION&&await GE.upsertNodeRecord(_)}catch(_){qE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(Zp,"buildNodeStatus");function cx(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(cx,"NodeStatusObject")});var tN=S((IX,eN)=>{"use strict";var VE=require("joi"),zp=Ee(),{route_constraints:jp}=cu();eN.exports={setRoutesValidator:_x,deleteRoutesValidator:ux};function _x(e){let t=VE.object({server:VE.valid("hub","leaf").required(),routes:jp.required()});return zp.validateBySchema(e,t)}a(_x,"setRoutesValidator");function ux(e){let t=VE.object({routes:jp.required()});return zp.validateBySchema(e,t)}a(ux,"deleteRoutesValidator")});var $E=S((bX,iN)=>{"use strict";var bs=ur(),kE=b(),Zc=T(),rN=tN(),{handleHDBError:sN,hdb_errors:lx}=D(),{HTTP_STATUS_CODES:nN}=lx,Ex="cluster routes successfully set",dx="cluster routes successfully deleted";iN.exports={setRoutes:hx,getRoutes:Sx,deleteRoutes:fx};function hx(e){let t=rN.setRoutesValidator(e);if(t)throw sN(t,t.message,nN.BAD_REQUEST,void 0,void 0,!0);let r=bs.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=kE.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"?bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Ex,set:o,skipped:i}}a(hx,"setRoutes");function Sx(){let e=bs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Sx,"getRoutes");function fx(e){let t=rN.deleteRoutesValidator(e);if(t)throw sN(t,t.message,nN.BAD_REQUEST,void 0,void 0,!0);let r=bs.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,m=s.length;h<m;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 m=0,R=n.length;m<R;m++){let C=n[m];if(E.host===C.host&&E.port===C.port){n.splice(m,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=kE.isEmptyOrZeroLength(s)?null:s,bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=kE.isEmptyOrZeroLength(n)?null:n,bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:dx,deleted:i,skipped:o}}a(fx,"deleteRoutes")});var oN=S((wX,aN)=>{"use strict";var Gi=require("alasql"),ws=require("recursive-iterator"),Kt=I(),Tx=b(),Fi=T(),Xc=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,Rx(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=>Fi.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=>!Fi.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][Fi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=mx(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=>!Fi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Gi.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(Xc,"sql_statement_bucket");function mx(e){return e.filter(t=>t[Fi.PERMS_CRUD_ENUM.READ])}a(mx,"filterReadRestrictedAttrs");function Rx(e,t,r,s,n){Ax(e,t,r,s,n)}a(Rx,"interpretAST");function Vi(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(Vi,"addSchemaTableToMap");function Ax(e,t,r,s,n){if(!e){Kt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gi.yy.Insert?gx(e,t,r):e instanceof Gi.yy.Select?Ox(e,t,r,s,n):e instanceof Gi.yy.Update?px(e,t,r):e instanceof Gi.yy.Delete?Nx(e,t,r):Kt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Ax,"getRecordAttributesAST");function Ox(e,t,r,s,n){if(!e){Kt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Tx.isEmptyOrZeroLength(i)){Kt.error("No schema specified");return}e.from.forEach(c=>{Vi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Vi(c.table,t,r,s,n)});let o=new ws(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{Kt.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 ws(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{Kt.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 ws(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{Kt.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 ws(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{Kt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(Ox,"getSelectAttributes");function px(e,t,r){if(!e){Kt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ws(e.columns),n=e.table.databaseid;Vi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(px,"getUpdateAttributes");function Nx(e,t,r){if(!e){Kt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ws(e.where),n=e.table.databaseid;Vi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(Nx,"getDeleteAttributes");function gx(e,t,r){if(!e){Kt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ws(e.columns),n=e.into.databaseid;Vi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.into.tableid,n,i.columnid,t,r)}a(gx,"getInsertAttributes");function xE(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(xE,"pushAttribute");aN.exports=Xc});var uN=S((CX,_N)=>{var Ix=require("os"),cN=Y();_N.exports={checkPermission:bx};function bx(){if(Ix.userInfo().username!==cN.get("install_user"))throw new Error(`Error: Must execute as ${cN.get("install_user")}`)}a(bx,"checkPermission")});var KE=S((LX,SN)=>{var jc=mi(),lN=require("chalk"),nr=I(),EN=uN(),dN=require("prompt"),{promisify:wx}=require("util"),zc=T(),Cx=require("fs-extra"),Lx=require("path"),Ux=b(),yx=nE(),hN=Y();hN.initSync();var Dx=require("moment"),Mx=wx(dN.get),Px=Lx.join(hN.getHdbBasePath(),zc.LICENSE_KEY_DIR_NAME,zc.LICENSE_FILE_NAME,zc.LICENSE_FILE_NAME);SN.exports={getFingerprint:vx,setLicense:Bx,parseLicense:YE,register:Hx,getRegistrationInfo:Gx};async function Bx(e){if(e&&e.key&&e.company){try{nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await YE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw nr.error(r),nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Bx,"setLicense");async function vx(){try{EN.checkPermission()}catch(t){throw nr.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await jc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw nr.error(r),nr.error(t),new Error(r)}return e}a(vx,"getFingerprint");async function YE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=jc.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{nr.info("writing license to disk"),await Cx.writeFile(Px,JSON.stringify({license_key:e,company:t}))}catch(s){throw nr.error("Failed to write License"),s}return"Registration successful."}a(YE,"parseLicense");async function Hx(){let e=await qx();return YE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Hx,"register");async function qx(){try{EN.checkPermission()}catch(s){return console.error(s.message)}let e=await jc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:lN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:lN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{dN.start()}catch(s){nr.error(s)}let r;try{r=await Mx(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(qx,"promptForRegistration");async function Gx(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await jc.getLicense()}catch(r){throw nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Ux.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=yx.version(),e.storage_type=zc.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=Dx.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Gx,"getRegistrationInfo")});var XE=S((UX,AN)=>{"use strict";var y=T(),K=I(),e_=b(),Fx=J_(),WE=kl(),ZE=mt(),Vx=he(),TN=require("minimist"),{handleHDBError:QE,hdb_errors:kx}=D(),ki=ur(),{HTTP_STATUS_CODES:JE}=kx,G,fN=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,Cs="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",$x="Invalid service",xx="'service' is required",Yx="Restarting all services",Kx="Clustering is not enabled so cannot be restarted";AN.exports={stop:Qx,restartProcesses:Wx,restartService:mN};async function Wx(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=On());let e=Fx(Object.keys(y.CONFIG_PARAM_MAP),!0);e_.isEmptyOrZeroLength(Object.keys(e))||ki.updateConfigValue(void 0,void 0,e,!0,!0);let t=ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=TN(process.argv);if(!e_.isEmpty(s.service)){if(typeof s.service!="string"){let c=`Restart service argument expected a string but received: ${s.service}`;return K.error(c),c}let o=s.service.split(",");for(let c of o){let _=c.toLowerCase();if(_===y.HDB_PROC_DESCRIPTOR.toLowerCase()&&await G.isHdbRestartRunning()===!0){K.notify(Cs),console.error(Cs);continue}if(y.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){console.error(`Restart received unrecognized service command argument: ${_}`),K.error(`Restart received unrecognized service command argument: ${_}`);continue}let u=y.PROCESS_DESCRIPTORS_VALIDATE[_];if(console.log(`Restarting ${u}`),K.trace(`Restarting ${u}`),u===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(_.toLowerCase().includes("clustering"))await yn(_);else if(await G.isServiceRegistered(u))u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await mN({service:u});else if(u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await G.startService(u),K.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;K.error(l),console.log(l)}else await G.startService(u);K.notify(`${u} successfully restarted.`)}return}if(await G.isHdbRestartRunning()===!0)return K.notify(Cs),console.error(Cs),Cs;console.log(fN),t&&await RN();let n=await G.isServiceRegistered(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await G.startService(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Starting ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[y.PROCESS_DESCRIPTORS.CLUSTERING_HUB,y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await G.configureLogRotate(),K.notify(Yx),await G.restartAllServices(i),fN}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(Wx,"restartProcesses");async function mN(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),G===void 0&&(G=On()),e_.isEmpty(e.service))throw QE(new Error,xx,JE.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw QE(new Error,$x,JE.BAD_REQUEST,void 0,void 0,!0);let r=ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=y.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===y.PROCESS_DESCRIPTORS.HDB){if(await G.isHdbRestartRunning()===!0)return K.notify(Cs),Cs;await G.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await yn(s);else if(s===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===y.SERVICES.CUSTOM_FUNCTIONS){let i=await G.isServiceRegistered(s);if(r)i?(await G.reloadStopStart(s),K.trace(`Reloading ${s}`)):(await G.startService(s),K.trace(`Starting ${s}`));else if(!r&&i)await G.stop(s),K.trace(`Stopping ${s}`);else{let o=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw K.error(o),QE(new Error,o,JE.BAD_REQUEST,void 0,void 0,!0)}}else await G.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a(mN,"restartService");async function Qx(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=On());let e=TN(process.argv);if(e_.isEmpty(e.service))console.log("Stopping HarperDB."),await G.stopAllServices(),K.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;K.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){K.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await G.stopClustering():await G.stop(y.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${y.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;K.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}a(Qx,"stop");async function RN(){await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await ZE.updateNodeNameLocalStreams(),await ZE.closeConnection()}a(RN,"restartAllClusteringServices");async function yn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await G.isServiceRegistered(e),i=r||s?await G.isClusteringRunning():void 0;switch(!0){case s:if(!i){K.error(Kx);break}await G.reloadClustering();break;case(r&&i&&!t):await G.stopClustering();break;case(r&&!i&&t):await G.startClustering();break;case(r&&i&&t):await RN();break;case(r&&!i&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await G.stop(e),K.trace(`Stopping ${e}`);break;case(!n&&t):e!==y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await WE.generateNatsConfig(!0,e),await G.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await ZE.createWorkQueueStream(Vx.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await G.reload(e):(await WE.generateNatsConfig(!0,e),await G.restart(e),await WE.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(yn,"restartClustering")});var yN=S((DX,UN)=>{"use strict";var yX=require("lodash"),Ze=T(),{handleHDBError:ON,hdb_errors:Jx}=D(),{HDB_ERROR_MSGS:Zx,HTTP_STATUS_CODES:Xx}=Jx,zE=I();UN.exports={getRolePermissions:jx};var Ls=Object.create(null),zx=a(e=>({key:e,perms:{}}),"perms_template_obj"),IN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),bN=a((e=!1,t=!1,r=!1,s=!1)=>({[Ze.PERMS_CRUD_ENUM.READ]:e,[Ze.PERMS_CRUD_ENUM.INSERT]:t,[Ze.PERMS_CRUD_ENUM.UPDATE]:r,[Ze.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),jE=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...bN(t,r,s,n)}),"table_perms_template"),pN=a((e,t=bN())=>({attribute_name:e,describe:LN(t),[$i]:t[$i],[ed]:t[ed],[td]:t[td]}),"attr_perms_template"),NN=a((e,t=!1)=>({attribute_name:e,describe:t,[$i]:t}),"timestamp_attr_perms_template"),{READ:$i,INSERT:ed,UPDATE:td}=Ze.PERMS_CRUD_ENUM,wN=Object.values(Ze.PERMS_CRUD_ENUM),CN=[$i,ed,td];function jx(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[Ze.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ls[t]&&Ls[t].key===s)return Ls[t].perms;let n=eY(e,r);return Ls[t]?Ls[t].key=s:Ls[t]=zx(s),Ls[t].perms=n,n}catch(r){if(!e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ze.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 zE.error(s),zE.debug(r),ON(new Error,Zx.OUTDATED_PERMS_TRANSLATION_ERROR,Xx.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
8
8
  ${r.stack}`;throw zE.error(s),ON(new Error)}}}a(jx,"getRolePermissions");function eY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Ze.SYSTEM_SCHEMA_NAME]=s[Ze.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]=tY(t[i]);return}r[i]=IN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=rY(c,_);r[i].describe||wN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=jE()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=jE()})}),r}a(eY,"translateRolePermissions");function tY(e){let t=IN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jE(!0,!0,!0,!0,!0)}),t}a(tY,"createStructureUserPermissions");function rY(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 Ze.TIME_STAMP_NAMES.includes(E)&&(d=NN(E,l[$i])),u[E]=d,u},{}),o=t[Ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=pN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=LN(l),n.attribute_permissions.push(l),c||sY(l,_)}else if(u!==o){let l;Ze.TIME_STAMP_NAMES.includes(u)?l=NN(u):l=pN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=gN(n),n}else return e.describe=gN(e),e}a(rY,"getTableAttrPerms");function gN(e){return wN.filter(t=>e[t]).length>0}a(gN,"getSchemaTableDescribePerm");function LN(e){return CN.filter(t=>e[t]).length>0}a(LN,"getAttributeDescribePerm");function sY(e,t){CN.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(sY,"checkForHashPerms")});var qN=S((MX,HN)=>{"use strict";var Te=require("joi"),DN=require("fs-extra"),MN=require("path"),Dn=Ee(),PN=Y(),BN=T(),vN=I(),{hdb_errors:nY}=D(),{HDB_ERROR_MSGS:ut}=nY,Jr=/^[a-zA-Z0-9-_]+$/;HN.exports={getDropCustomFunctionValidator:aY,setCustomFunctionValidator:oY,addCustomFunctionProjectValidator:cY,dropCustomFunctionProjectValidator:_Y,packageCustomFunctionProjectValidator:uY,deployCustomFunctionProjectValidator:lY};function xi(e,t,r){try{let s=PN.get(BN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=MN.join(s,t);return DN.existsSync(n)?e?t:r.message(ut.PROJECT_EXISTS):e?r.message(ut.NO_PROJECT):t}catch(s){return vN.error(s),r.message(ut.VALIDATION_ERR)}}a(xi,"checkProjectExists");function iY(e,t,r,s){try{let n=PN.get(BN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=MN.join(n,e,t,r+".js");return DN.existsSync(i)?r:s.message(ut.NO_FILE)}catch(n){return vN.error(n),s.message(ut.VALIDATION_ERR)}}a(iY,"checkFileExists");function aY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(Jr).custom(iY.bind(null,e.project,e.type)).required().messages({"string.pattern.base":ut.BAD_FILE_NAME})});return Dn.validateBySchema(e,t)}a(aY,"getDropCustomFunctionValidator");function oY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(Jr).required().messages({"string.pattern.base":ut.BAD_FILE_NAME}),function_content:Te.string().required()});return Dn.validateBySchema(e,t)}a(oY,"setCustomFunctionValidator");function cY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!1)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Dn.validateBySchema(e,t)}a(cY,"addCustomFunctionProjectValidator");function _Y(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Dn.validateBySchema(e,t)}a(_Y,"dropCustomFunctionProjectValidator");function uY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Dn.validateBySchema(e,t)}a(uY,"packageCustomFunctionProjectValidator");function lY(e){let t=Te.object({project:Te.string().pattern(Jr).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":ut.BAD_PACKAGE})});return Dn.validateBySchema(e,t)}a(lY,"deployCustomFunctionProjectValidator")});var nd=S((PX,VN)=>{"use strict";var Ce=require("fs-extra"),t_=require("fast-glob"),ne=require("path"),GN=require("tar-fs"),FN=require("uuid").v4,Yi=require("normalize-path"),Us=qN(),Le=I(),Rt=T(),At=Y(),{PACKAGE_ROOT:EY}=T(),{handleHDBError:Xe,hdb_errors:dY}=D(),{HDB_ERROR_MSGS:Zr,HTTP_STATUS_CODES:ze}=dY,hY=ne.join(EY,"custom_function_template"),rd=ne.join(At.get(Rt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function sd(){let e=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Xe(new Error,Zr.NOT_ENABLED,ze.BAD_REQUEST,void 0,void 0,!0)}a(sd,"isCFEnabled");function SY(){Le.trace("getting custom api status");let e={};try{e={is_enabled:At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Xe(new Error,Zr.FUNCTION_STATUS,ze.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(SY,"customFunctionsStatus");function fY(){Le.trace("getting custom api endpoints");let e={},t=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{t_.sync(Yi(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:t_.sync(Yi(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:t_.sync(Yi(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:Ce.existsSync(Yi(`${s}/static`))&&t_.sync(Yi(`${s}/static/**/*`)).length}})}catch(r){throw Xe(new Error,Zr.GET_FUNCTIONS,ze.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(fY,"getCustomFunctions");function TY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=Us.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ne.join(r,s,n,i+".js");try{return Ce.readFileSync(o,{encoding:"utf8"})}catch(c){throw Xe(new Error,Zr.GET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(TY,"getCustomFunction");function mY(e){sd(),e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=Us.setCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("setting custom function file content");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return Ce.outputFileSync(ne.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Xe(new Error,Zr.SET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(mY,"setCustomFunction");function RY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=Us.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function file");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return Ce.unlinkSync(ne.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Xe(new Error,Zr.DROP_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(RY,"dropCustomFunction");function AY(e){sd(),e.project&&(e.project=ne.parse(e.project).name);let t=Us.addCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("adding custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return Ce.mkdirSync(n,{recursive:!0}),Ce.copySync(hY,n),`Successfully created custom function project: ${s}`}catch(n){throw Xe(new Error,Zr.ADD_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(AY,"addCustomFunctionProject");function OY(e){e.project&&(e.project=ne.parse(e.project).name);let t=Us.dropCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return Ce.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Xe(new Error,Zr.DROP_FUNCTION_PROJECT,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(OY,"dropCustomFunctionProject");async function pY(e){e.project&&(e.project=ne.parse(e.project).name);let t=Us.packageCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("packaging custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ne.join(r,s),i=FN();if(!Ce.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}Ce.ensureDirSync(rd);let c=ne.join(rd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ne.join(n,"node_modules"))}),GN.pack(n,_).pipe(Ce.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=Ce.readFileSync(c,{encoding:"base64"});return Ce.unlinkSync(c),{project:s,payload:u,file:c}}a(pY,"packageCustomFunctionProject");async function NY(e){sd(),e.project&&(e.project=ne.parse(e.project).name);let t=Us.deployCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("deploying custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,file:i}=e,o=ne.join(r,s);await Ce.ensureDir(o);let c,_;do c=ne.join(rd,FN()+".tar"),_=await Ce.pathExists(c);while(_);await Ce.outputFile(c,n,{encoding:"base64"});let u=Ce.createReadStream(c);return u.pipe(GN.extract(o)),await new Promise(l=>u.on("end",l)),await Ce.unlink(c),`Successfully deployed project: ${s}`}a(NY,"deployCustomFunctionProject");VN.exports={customFunctionsStatus:SY,getCustomFunctions:fY,getCustomFunction:TY,setCustomFunction:mY,dropCustomFunction:RY,addCustomFunctionProject:AY,dropCustomFunctionProject:OY,packageCustomFunctionProject:pY,deployCustomFunctionProject:NY}});var id=S((BX,$N)=>{"use strict";var ir=require("joi"),kN=Ee();$N.exports={readTransactionLogValidator:gY,deleteTransactionLogsBeforeValidator:IY};function gY(e){let t=ir.object({schema:ir.string().required(),table:ir.string().required(),from:ir.date().timestamp(),to:ir.date().timestamp(),limit:ir.number().min(1)});return kN.validateBySchema(e,t)}a(gY,"readTransactionLogValidator");function IY(e){let t=ir.object({schema:ir.string().required(),table:ir.string().required(),timestamp:ir.date().timestamp().required()});return kN.validateBySchema(e,t)}a(IY,"deleteTransactionLogsBeforeValidator")});var s_=S((vX,QN)=>{"use strict";var ad=T(),r_=mt(),xN=b(),YN=Y(),KN=vr(),{handleHDBError:Mn,hdb_errors:bY}=D(),{HTTP_STATUS_CODES:Pn}=bY,{readTransactionLogValidator:wY,deleteTransactionLogsBeforeValidator:CY}=id(),WN="This operation relies on clustering and cannot run with it disable.",LY="Logs successfully deleted from transaction log.",UY="All logs successfully deleted from transaction log.";QN.exports={readTransactionLog:yY,deleteTransactionLogsBefore:DY};async function yY(e){let t=wY(e);if(t)throw Mn(t,t.message,Pn.BAD_REQUEST,void 0,void 0,!0);if(!YN.get(ad.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mn(new Error,WN,Pn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=xN.checkSchemaTableExist(r,s);if(n)throw Mn(new Error,n,Pn.NOT_FOUND,void 0,void 0,!0);let i=KN.createNatsTableStreamName(r,s),o=await r_.viewStream(i,parseInt(e.from),e.limit),c=[];for(let _=0,u=o.length;_<u;_++){let l=o[_],E=Math.floor(l?.nats_timestamp/1e6);if(e.to&&E>e.to)break;let d={operation:l?.entry?.operation,user:l?.entry?.__origin?.user,timestamp:E,records:l?.entry?.records};l?.entry?.operation===ad.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(yY,"readTransactionLog");async function DY(e){let t=CY(e);if(t)throw Mn(t,t.message,Pn.BAD_REQUEST,void 0,void 0,!0);if(!YN.get(ad.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mn(new Error,WN,Pn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=xN.checkSchemaTableExist(r,s);if(i)throw Mn(new Error,i,Pn.NOT_FOUND,void 0,void 0,!0);let o=KN.createNatsTableStreamName(r,s),{jsm:c}=await r_.getNATSReferences(),_=await r_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=LY,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=UY):E=(await r_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(DY,"deleteTransactionLogsBefore")});var cd=S((HX,ng)=>{"use strict";var n_=require("joi"),i_=require("path"),JN=require("fs-extra"),{exec:MY}=require("child_process"),PY=require("util"),ZN=PY.promisify(MY),BY=T(),{handleHDBError:Bn,hdb_errors:vY}=D(),{HTTP_STATUS_CODES:vn}=vY,XN=Y(),HY=Ee(),a_=I();XN.initSync();var od=XN.get(BY.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),zN="npm install --omit=dev --json",qY=`${zN} --dry-run`;ng.exports={installModules:GY,auditModules:FY};async function jN(e,t=void 0){let{stdout:r,stderr:s}=await ZN(e,{cwd:t});if(s)throw new Error(s.replace(`