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,6 +2,6 @@
2
2
  `,hm={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Tm=["*","%"],fm="unauthorized_access",Rm="func_val",mm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Am={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Nm="hdb_ipc_server",Om="hdb_ipc_client_",gm={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"},pm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Im={STOPPED:"stopped",ONLINE:"online"},Cm="3.x.x";sc.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:X_,HDB_SUPPORT_URL:Z_,HDB_PRICING_URL:Xf,SUPPORT_HELP_MSG:Jf,LICENSE_HELP_MSG:z_,HDB_PROC_NAME:K_,HDB_PROC_DESCRIPTOR:ma,CLUSTERING_LEAF_PROC_DESCRIPTOR:Xs,CLUSTERING_HUB_PROC_DESCRIPTOR:Qs,SYSTEM_SCHEMA_NAME:hR,HASH_FOLDER_NAME:TR,HDB_HOME_DIR_NAME:fR,UPDATE_FILE_NAME:NR,LICENSE_KEY_DIR_NAME:mR,BOOT_PROPS_FILE_NAME:AR,JOB_TYPE_ENUM:jR,JOB_STATUS_ENUM:YR,SYSTEM_TABLE_NAMES:qR,SYSTEM_TABLE_HASH_ATTRIBUTES:FR,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:KR,S3_BUCKET_AUTH_KEYS:WR,VALID_SQL_OPS_ENUM:QR,GEO_CONVERSION_ENUM:JR,HDB_SETTINGS_NAMES:ec,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:ZR,SERVICE_ACTIONS_ENUM:XR,CLUSTER_MESSAGE_TYPE_ENUM:em,CLUSTER_CONNECTION_DIRECTION_ENUM:tm,CLUSTER_EVENTS_DEFS_ENUM:im,PERIOD_REGEX:sR,DOUBLE_PERIOD_REGEX:nR,UNICODE_PERIOD:iR,FORWARD_SLASH_REGEX:aR,UNICODE_FORWARD_SLASH:oR,ESCAPED_FORWARD_SLASH_REGEX:_R,ESCAPED_PERIOD_REGEX:cR,ESCAPED_DOUBLE_PERIOD_REGEX:uR,REG_KEY_FILE_NAME:kR,RESTART_TIMEOUT_MS:pR,HDB_FILE_PERMISSIONS:IR,SCHEMA_DIR_NAME:LR,TRANSACTIONS_DIR_NAME:wR,LIMIT_COUNT_NAME:yR,ID_ATTRIBUTE_STRING:UR,INSERT_MODULE_ENUM:vR,UPGRADE_JSON_FIELD_NAMES_ENUM:GR,RESTART_CODE:OR,RESTART_CODE_NUM:gR,CLUSTER_OPERATIONS:gt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:VR,HDB_INTERNAL_SC_CHANNEL_PREFIX:ye,INTERNAL_SC_CHANNELS:xR,CLUSTERING_MESSAGE_TYPES:lm,HDB_FILE_SUFFIX:RR,BLOB_FOLDER_NAME:CR,HDB_TRASH_DIR:bR,ORIGINATOR_SET_VALUE:dm,LICENSE_VALUES:sm,RAM_ALLOCATION_ENUM:nm,STORAGE_TYPES_ENUM:rm,TIME_STAMP_NAMES_ENUM:tc,TIME_STAMP_NAMES:cm,PERMS_UPDATE_RELEASE_TIMESTAMP:um,SEARCH_NOT_FOUND_MESSAGE:Zf,SEARCH_ATTRIBUTE_NOT_FOUND:zf,LICENSE_ROLE_DENIED_RESPONSE:jf,LICENSE_MAX_CONNS_REACHED:eR,BASIC_LICENSE_MAX_NON_CU_ROLES:J_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Qf,VALUE_SEARCH_COMPARATORS:rc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Em,LICENSE_FILE_NAME:$R,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:am,NEW_LINE:Sm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:rR,MOMENT_DAYS_TAG:ER,API_TURNOVER_SEC:lR,LOOPBACK:tR,CODE_EXTENSION:Kr,WILDCARD_SEARCH_VALUE:dR,NODE_ERROR_CODES:om,JAVASCRIPT_EXTENSION:Y_,PERMS_CRUD_ENUM:hm,UNAUTHORIZED_PERMISSION_NAME:fm,SEARCH_WILDCARDS:Tm,FUNC_VAL:Rm,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:mm,JWT_ENUM:Am,CLUSTERING_FLAG:_m,RUN_LOG:MR,INSTALL_LOG:DR,IPC_SERVER_MODULE:Q_,HDB_IPC_SERVER:Nm,IPC_EVENT_TYPES:gm,HDB_IPC_CLIENT_PREFIX:Om,CUSTOM_FUNCTION_PROC_NAME:W_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ws,SERVICES:pm,MEM_SETTING_KEY:SR,HDB_RESTART_SCRIPT:Gf,PROCESS_DESCRIPTORS:Ra,SERVICE_SERVERS:$f,SERVICE_SERVERS_CWD:Ks,PROCESS_DESCRIPTORS_VALIDATE:Vf,LAUNCH_SERVICE_SCRIPTS:Yf,LOG_LEVELS:xf,PROCESS_NAME_ENV_PROP:PR,PROCESS_LOG_NAMES:Ff,PM2_PROCESS_STATUSES:Im,CONFIG_PARAM_MAP:zR,CONFIG_PARAMS:h,HDB_CONFIG_FILE:Bf,HDB_DEFAULT_CONFIG_FILE:Hf,ROLE_TYPES_ENUM:Kf,BOOT_PROP_PARAMS:BR,INSTALL_PROMPTS:HR,HDB_ROOT_DIR_NAME:vf,CLUSTERING_PROCESSES:kf,FOREGROUND_PID_FILE:qf,PACKAGE_ROOT:Ye,PRE_4_0_0_VERSION:Cm}});var oc=S((jP,ac)=>{"use strict";var nc=require("minimist");ac.exports=bm;function bm(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ic(process.env),s=ic(nc(process.argv))):(r=process.env,s=nc(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(bm,"assignCMDENVVariables");function ic(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ic,"objKeysToLowerCase")});var p=S((eB,Sc)=>{"use strict";var qt=require("fs-extra"),Ft=require("path"),cc=require("yaml"),uc=require("properties-reader"),z=f(),Lm=oc(),wm=require("os"),{PACKAGE_ROOT:pa}=f(),Oe={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Js=Ft.join(pa,"logs"),pt=process.env.pm_id===void 0,ym=Ft.join(pa,"config/yaml/",z.HDB_DEFAULT_CONFIG_FILE),Ia=process.env.PROCESS_NAME===void 0?z.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,_r,tt,Et,Ne,Oa,cr;cr===void 0&&Ec();Sc.exports={createLogFile:Um,notify:Pm,fatal:Bm,error:ga,warn:Hm,info:Dm,debug:Mm,trace:dc,setLogLevel:Gm,log_level:Ne};function Ec(){try{if(cr===void 0){let e=vm();cr=uc(e),{level:Ne,config_log_path:Oa,to_file:tt,to_stream:Et}=qm(cr.get("settings_path"))}}catch(e){if(cr=void 0,e.code===z.NODE_ERROR_CODES.ENOENT){let t=Lm(Object.keys(z.CONFIG_PARAM_MAP),!0);for(let i in t){let o=z.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===z.CONFIG_PARAMS.LOGGING_LEVEL){Ne=_;continue}if(o===z.CONFIG_PARAMS.LOGGING_STDSTREAMS){Et=_;continue}o===z.CONFIG_PARAMS.LOGGING_FILE&&(tt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Fm();tt=tt===void 0?s:tt,tt=_c(tt),Et=Et===void 0?n:Et,Et=_c(Et),Ne=Ne===void 0?r:Ne,Oa=Js;return}throw ga("Error initializing log settings"),ga(e),e}}a(Ec,"initLogSettings");function Um(e,t){if(!pt){dc("createLogFile should only be used if the process is not being managed by pm2");return}cr===void 0&&Ec(),Ia=t;let r;e===z.PROCESS_LOG_NAMES.INSTALL?r=Js:r=Oa,tt&&(_r=Ft.join(r,e),qt.ensureFileSync(_r))}a(Um,"createLogFile");function xt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let _=t[o];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,o<i&&(s+=" ")}return`{"process_name": "${Ia}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
3
3
  `}a(xt,"createLogRecord");function lc(e){_r===void 0&&(Ia=z.PROCESS_DESCRIPTORS.INSTALL,qt.ensureDirSync(Js),_r=Ft.join(Js,z.PROCESS_LOG_NAMES.INSTALL),qt.ensureFileSync(_r)),qt.appendFileSync(_r,e)}a(lc,"writeToLogFile");function Zs(e){tt&&lc(e),Et&&process.stdout.write(e)}a(Zs,"nonPm2LogStdOut");function Ca(e){tt&&lc(e),Et&&process.stderr.write(e)}a(Ca,"nonPm2LogStdErr");function Dm(...e){if(Oe[Ne]<=Oe.info){let t=xt("info",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(Dm,"info");function dc(...e){if(Oe[Ne]<=Oe.trace){let t=xt("trace",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(dc,"trace");function ga(...e){if(Oe[Ne]<=Oe.error){let t=xt("error",e);if(pt){Ca(t);return}process.stderr.write(t)}}a(ga,"error");function Mm(...e){if(Oe[Ne]<=Oe.debug){let t=xt("debug",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(Mm,"debug");function Pm(...e){if(Oe[Ne]<=Oe.notify){let t=xt("notify",e);if(pt){Zs(t);return}process.stdout.write(t)}}a(Pm,"notify");function Bm(...e){if(Oe[Ne]<=Oe.fatal){let t=xt("fatal",e);if(pt){Ca(t);return}process.stderr.write(t)}}a(Bm,"fatal");function Hm(...e){if(Oe[Ne]<=Oe.warn){let t=xt("warn",e);if(pt){Ca(t);return}process.stderr.write(t)}}a(Hm,"warn");function vm(){let e;try{e=wm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ft.join(e,z.HDB_HOME_DIR_NAME,z.BOOT_PROPS_FILE_NAME);return qt.existsSync(t)||(t=Ft.join(pa,"utility/hdb_boot_properties.file")),t}a(vm,"getPropsFilePath");function Gm(e){Ne=e}a(Gm,"setLogLevel");function _c(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(_c,"autoCastBoolean");function qm(e){try{if(e.includes("config/settings.js")){let o=uc(e);return{level:o.get(z.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ft.dirname(o.get(z.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(z.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=cc.parseDocument(qt.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===z.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(qm,"getLogConfig");function Fm(){try{let e=cc.parseDocument(qt.readFileSync(ym,"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(Fm,"getDefaultConfig")});var Tc=S((tB,hc)=>{"use strict";var xm=require("util"),Vm=require("path"),km=require("child_process"),$m=xm.promisify(km.execFile),Ym=1e3*1e3*10;hc.exports={findPs:Km};async function Km(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await $m("ps",["wwxo",`pid,${r}`],{maxBuffer:Ym});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:Vm.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(Km,"findPs")});var Se=S((rB,Rc)=>{"use strict";var Wm="__dbis__",Qm="__environment_name__",Xm="__dbi_defintion__",Jm={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"},Zm=["__createdtime__","__updatedtime__"],zm="\uFFFF",fc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},jm=Object.values(fc);Rc.exports={INTERNAL_DBIS_NAME:Wm,DBI_DEFINITION_NAME:Xm,SEARCH_TYPES:Jm,TIMESTAMP_NAMES:Zm,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Qm,TRANSACTIONS_DBI_NAMES_ENUM:fc,TRANSACTIONS_DBIS:jm,OVERFLOW_MARKER:zm}});var Be=S((sB,bc)=>{"use strict";var mc=f(),Ac=Se(),Nc={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},Oc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),gc={500:Oc("There was an error processing your request."),400:"Invalid request"},eA=gc[Nc.INTERNAL_SERVER_ERROR],tA={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.`},rA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},sA={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"},nA={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 ${Ac.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Ac.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"},iA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${mc.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 ${mc.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"},pc={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"},aA={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."},oA={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`},_A={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"},cA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},uA={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`},Ic={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.`},Cc={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}`},EA={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."},lA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},dA={...pc,...sA,...tA,...aA,...oA,..._A,...cA,...uA,...iA,...Ic,...Cc,...EA,...lA,...rA};bc.exports={CHECK_LOGS_WRAPPER:Oc,HDB_ERROR_MSGS:dA,DEFAULT_ERROR_MSGS:gc,DEFAULT_ERROR_RESP:eA,HTTP_STATUS_CODES:Nc,LMDB_ERRORS_ENUM:nA,AUTHENTICATION_ERROR_MSGS:pc,VALIDATION_ERROR_MSGS:Ic,IPC_ERRORS:Cc}});var q=S((nB,yc)=>{"use strict";var ur=Be(),SA=p(),hA=f(),Wr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Lc),this.http_resp_code=s||ur.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ur.DEFAULT_ERROR_MSGS[s]?ur.DEFAULT_ERROR_MSGS[s]:ur.DEFAULT_ERROR_MSGS[ur.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&&SA[n](i)}};a(Wr,"HdbError");function Lc(e,t,r,s=hA.LOG_LEVELS.ERROR,n=null,i=!1){if(wc(e))return e;let o=new Wr(e,t,r,s,n);return i&&delete o.stack,o}a(Lc,"handleHDBError");function wc(e){return e.__proto__.constructor.name===Wr.name}a(wc,"isHDBError");yc.exports={isHDBError:wc,handleHDBError:Lc,hdb_errors:ur}});var g=S((aB,Yc)=>{"use strict";var Vt=require("path"),TA=require("fs-extra"),te=p(),Uc=require("fs-extra"),fA=require("truncate-utf8-bytes"),Qr=require("os"),RA=require("net"),mA=require("recursive-iterator"),ne=f(),Hc=Tc(),Dc=require("papaparse"),zs=require("moment"),{inspect:AA}=require("util"),Mc=require("is-number"),iB=require("lodash"),{hdb_errors:js}=q(),vc=require("util").promisify(setTimeout),NA=100,OA=5,gA="",pA=4,Pc=255,Bc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Yc.exports={isEmpty:Ue,isEmptyOrZeroLength:rt,arrayHasEmptyValues:bA,arrayHasEmptyOrZeroLengthValues:LA,buildFolderPath:wA,isBoolean:Gc,errorizeMessage:IA,stripFileExtension:UA,autoCast:DA,autoCastJSONDeep:ba,removeDir:PA,compareVersions:BA,isCompatibleDataVersion:HA,escapeRawValue:Fc,unescapeValue:vA,stringifyProps:GA,valueConverter:qA,timeoutPromise:xA,isClusterOperation:kA,getClusterUser:KA,sendTransactionToSocketCluster:$A,checkGlobalSchemaTable:YA,getHomeDir:xc,getPropsFilePath:FA,promisifyPapaParse:WA,removeBOM:Vc,createEventPromise:QA,checkProcessRunning:XA,checkSchemaTableExist:JA,checkSchemaExists:kc,checkTableExists:$c,getStartOfTomorrowInSeconds:ZA,getLimitKey:zA,isObject:yA,isNotEmptyAndHasValue:CA,autoCasterIsNumberCheck:qc,backtickASTSchemaItems:jA,isPortTaken:VA,stopProcess:eN,createForkArgs:tN,autoCastBoolean:rN,async_set_timeout:vc,getTableHashAttribute:sN,doesSchemaExist:nN,doesTableExist:iN,stringifyObj:aN,ms_to_time:oN,changeExtension:_N,PACKAGE_ROOT:ne.PACKAGE_ROOT};function IA(e){return e instanceof Error?e:new Error(e)}a(IA,"errorizeMessage");function Ue(e){return e==null}a(Ue,"isEmpty");function CA(e){return!Ue(e)&&(e||e===0||e===""||Gc(e))}a(CA,"isNotEmptyAndHasValue");function rt(e){return Ue(e)||e.length===0||e.size===0}a(rt,"isEmptyOrZeroLength");function bA(e){if(Ue(e))return!0;for(let t=0;t<e.length;t++)if(Ue(e[t]))return!0;return!1}a(bA,"arrayHasEmptyValues");function LA(e){if(rt(e))return!0;for(let t=0;t<e.length;t++)if(rt(e[t]))return!0;return!1}a(LA,"arrayHasEmptyOrZeroLengthValues");function wA(...e){try{return e.join(Vt.sep)}catch{console.error(e)}}a(wA,"buildFolderPath");function Gc(e){return Ue(e)?!1:e===!0||e===!1}a(Gc,"isBoolean");function yA(e){return Ue(e)?!1:typeof e=="object"}a(yA,"isObject");function UA(e){return rt(e)?gA:e.slice(0,-pA)}a(UA,"stripFileExtension");function DA(e){return Ue(e)||e===""||typeof e!="string"?e:Bc[e]!==void 0?Bc[e]:qc(e)===!0?Number(e):e}a(DA,"autoCast");function MA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(MA,"autoCastJSON");function ba(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=ba(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ba(r);s!==r&&(e[t]=s)}return e}else return MA(e)}a(ba,"autoCastJSONDeep");function qc(e){if(e.startsWith("0.")&&Mc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Mc(e))}a(qc,"autoCasterIsNumberCheck");async function PA(e){if(rt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Uc.emptyDir(e),await Uc.remove(e)}catch(t){throw te.error(`Error removing files in ${e} -- ${t}`),t}}a(PA,"removeDir");function BA(e,t){if(rt(e)){te.info("Invalid current version sent as parameter.");return}if(rt(t)){te.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(BA,"compareVersions");function HA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(HA,"isCompatibleDataVersion");function Fc(e){if(Ue(e))return e;let t=String(e);return t==="."?ne.UNICODE_PERIOD:t===".."?ne.UNICODE_PERIOD+ne.UNICODE_PERIOD:t.replace(ne.FORWARD_SLASH_REGEX,ne.UNICODE_FORWARD_SLASH)}a(Fc,"escapeRawValue");function vA(e){if(Ue(e))return e;let t=String(e);return t===ne.UNICODE_PERIOD?".":t===ne.UNICODE_PERIOD+ne.UNICODE_PERIOD?"..":String(e).replace(ne.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(vA,"unescapeValue");function GA(e,t){if(Ue(e))return te.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+Qr.EOL}!rt(s)&&s[0]===";"?r+=" "+s+n+Qr.EOL:rt(s)||(r+=s+"="+n+Qr.EOL)}catch{te.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(GA,"stringifyProps");function qA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){te.error(n),t=e}let r=String(Fc(t)),s=Buffer.byteLength(r)>Pc?fA(r,Pc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(qA,"valueConverter");function xc(){let e;try{e=Qr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xc,"getHomeDir");function FA(){let e=Vt.join(xc(),ne.HDB_HOME_DIR_NAME,ne.BOOT_PROPS_FILE_NAME);return TA.existsSync(e)||(e=Vt.join(__dirname,"../","hdb_boot_properties.file")),e}a(FA,"getPropsFilePath");function xA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(xA,"timeoutPromise");async function VA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=RA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(VA,"isPortTaken");function kA(e){try{return ne.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){te.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kA,"isClusterOperation");function $A(e,t,r){if(global.hdb_socket_client!==void 0){te.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]=ne.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a($A,"sendTransactionToSocketCluster");function YA(e,t){if(!global.hdb_schema[e])return js.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return js.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YA,"checkGlobalSchemaTable");function KA(e,t){if(Ue(t)){te.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ue(e)||rt(e)){te.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){te.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){te.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(KA,"getClusterUser");function WA(){Dc.parsePromise=function(e,t){return new Promise(function(r,s){Dc.parse(e,{header:!0,transformHeader:Vc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(WA,"promisifyPapaParse");function Vc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Vc,"removeBOM");function QA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;te.info(`Got cluster status event response: ${AA(n)}`);try{i.cancel()}catch{te.error("Error trying to cancel timeout.")}s(n)})})}a(QA,"createEventPromise");async function XA(e){let t=!0,r=0;do await vc(NA*r++),(await Hc.findPs(e)).length>0&&(t=!1);while(t&&r<OA);if(t)throw new Error(`process ${e} was not started`)}a(XA,"checkProcessRunning");function JA(e,t){let r=kc(e);if(r)return r;let s=$c(e,t);if(s)return s}a(JA,"checkSchemaTableExist");function kc(e){if(!global.hdb_schema[e])return js.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kc,"checkSchemaExists");function $c(e,t){if(!global.hdb_schema[e][t])return js.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($c,"checkTableExists");function ZA(){let e=zs().utc().add(1,ne.MOMENT_DAYS_TAG).startOf(ne.MOMENT_DAYS_TAG).unix(),t=zs().utc().unix();return e-t}a(ZA,"getStartOfTomorrowInSeconds");function zA(){return zs().utc().format("DD-MM-YYYY")}a(zA,"getLimitKey");function jA(e){try{let t=new mA(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){te.error("Got an error back ticking items."),te.error(t)}}a(jA,"backtickASTSchemaItems");async function eN(e){let t=Qr.userInfo();(await Hc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),te.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(eN,"stopProcess");function tN(e){return[e]}a(tN,"createForkArgs");function rN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(rN,"autoCastBoolean");function sN(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(sN,"getTableHashAttribute");function nN(e){return global?.hdb_schema?.[e]!==void 0}a(nN,"doesSchemaExist");function iN(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(iN,"doesTableExist");function aN(e){try{return JSON.stringify(e)}catch{return e}}a(aN,"stringifyObj");function oN(e){let t=zs.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(oN,"ms_to_time");function _N(e,t){let r=Vt.basename(e,Vt.extname(e));return Vt.join(Vt.dirname(e),r+t)}a(_N,"changeExtension")});var kt=S((oB,Qc)=>{"use strict";var Wc=g(),Kc=f(),tn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,La=require("joi"),en={schema_format:{pattern:tn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},cN=La.alternatives(La.string().min(1).max(en.schema_length.maximum).pattern(tn).messages({"string.pattern.base":"{:#label} "+en.schema_format.message}),La.number()).required();function uN(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>en.schema_length.maximum?`'${e}' maximum of 250 characters`:tn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(uN,"checkValidTable");function EN(e,t){return Wc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(EN,"validateSchemaExists");function lN(e,t){let r=t.state.ancestors[0].schema;return Wc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(lN,"validateTableExists");function dN(e,t){return e.toLowerCase()===Kc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Kc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(dN,"validateSchemaName");Qc.exports={common_validators:en,schema_regex:tn,hdb_schema_table:cN,validateSchemaExists:EN,validateTableExists:lN,validateSchemaName:dN,checkValidTable:uN}});var Ke=S((_B,Xc)=>{"use strict";var ge=require("validate.js");ge.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ge.validators.type.checks[t](e)?null:` must be a '${t}' value`};ge.validators.type.checks={Object:function(e){return ge.isObject(e)&&!ge.isArray(e)},Array:ge.isArray,Integer:ge.isInteger,Number:ge.isNumber,String:ge.isString,Date:ge.isDate,Boolean:function(e){return typeof e=="boolean"}};ge.validators.hasValidFileExt=function(e,t){return!ge.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Xc.exports={validateObject:SN,validateObjectAsync:hN,validateBySchema:TN};function SN(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ge(e,t,{format:"flat"});return r?new Error(r):null}a(SN,"validateObject");async function hN(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ge.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(hN,"validateObjectAsync");function TN(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(TN,"validateBySchema")});var ya=S((cB,Zc)=>{var{hdb_schema_table:Jc}=kt(),fN=Ke(),wa=require("joi"),RN={undefined:"undefined",null:"null"},mN=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||RN[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"),AN=wa.object({schema:Jc,table:Jc,records:wa.array().items(wa.object().custom(mN)).required()});Zc.exports=function(e){return fN.validateBySchema(e,AN)}});var Ua=S((uB,zc)=>{"use strict";var rn=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(rn,"BridgeMethods");zc.exports=rn});var $t=S((dB,ru)=>{"use strict";var jc=Be().LMDB_ERRORS_ENUM,EB=require("lmdb"),NN=Se(),lB=require("buffer").Buffer,ON=require("microtime"),{OVERFLOW_MARKER:eu,MAX_SEARCH_KEY_LENGTH:sn}=NN,tu=["number","string","symbol","boolean","bigint"];function gN(e){if(!e)throw new Error(jc.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(jc.INVALID_ENVIRONMENT)}a(gN,"validateEnv");function pN(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(pN,"stringifyData");function IN(e){return e instanceof Date?e.valueOf():e}a(IN,"convertKeyValueToWrite");function CN(e){if(e==null)return;if(tu.includes(typeof e))return e.length>sn?[e.slice(0,sn)+eu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];tu.includes(typeof n)&&(n.length>sn?t.push(n.slice(0,sn)+eu):t.push(n))}}return t}a(CN,"getIndexedValues");function bN(){let e=ON.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(bN,"getMicroTime");ru.exports={validateEnv:gN,stringifyData:pN,convertKeyValueToWrite:IN,getMicroTime:bN,getIndexedValues:CN}});var nu=S((SB,su)=>{"use strict";var nn=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(nn,"DBIDefinition");su.exports=nn});var au=S((hB,iu)=>{"use strict";var an=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(an,"OpenDBIObject");iu.exports=an});var _u=S((TB,ou)=>{"use strict";var on=class{constructor(t,r,s,n,i=!1,o=!1,_=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,_!==void 0&&(this.overlappingSync=_)}};a(on,"OpenEnvironmentObject");ou.exports=on});var Eu=S((fB,uu)=>{"use strict";var LN=require("fs-extra"),U=require("joi"),wN=require("os"),{boolean:ie,string:lt,number:st,array:Da}=U.types(),cu=require("path"),yN=p(),_n=g(),UN=Ke(),DN="log",MN="custom_functions",PN="Invalid logging.rotation.maxSize unit. Available units are G, M or K",BN="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",HN="rootPath config parameter is undefined",vN="clustering.enabled config parameter is undefined",It=st.min(0).required(),cn=Da.items({host:lt.required(),port:It}).empty(null),Xr;uu.exports={configValidator:GN,routesValidator:$N,route_constraints:cn};function GN(e){if(Xr=e.rootPath,_n.isEmpty(Xr))throw HN;let t=ie.required(),r=U.valid("production","development").required(),s=st.min(1).max(1e3).empty(null).default(VN),n=lt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(kN),i=U.custom(FN).messages({"any.custom":"{:#label} {:#error}"}),o=lt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(_n.isEmpty(_))throw vN;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:It,routes:cn}).required()}).required(),leafNodes:U.object({network:U.object({port:It}).required()}).required(),network:U.object({port:It}).required()}).required(),leafServer:U.object({network:U.object({port:It,routes:cn}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ie.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ie.required(),corsAccessList:Da.required(),headersTimeout:st.min(1).required(),https:ie.required(),keepAliveTimeout:st.min(1).required(),port:It,timeout:st.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:It})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ie.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ie.required(),dateFormat:lt.required(),maxSize:lt.custom(xN).required(),retain:st.min(0).required(),rotate:ie.required(),rotateInterval:lt.required(),rotateModule:ie.required(),timezone:lt.required(),workerInterval:st.min(1).required()}).required(),root:n,stdStreams:ie.required(),auditLog:ie.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ie.required(),network:U.object({cors:ie.required(),corsAccessList:Da.required(),headersTimeout:st.min(1).required(),https:ie.required(),keepAliveTimeout:st.min(1).required(),port:It,timeout:st.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:lt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ie.required(),overlappingSync:ie.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(GN,"configValidator");function qN(e){return LN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(qN,"doesPathExist");function FN(e,t){if(e===null)return;U.assert(e,lt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=qN(e);return r?t.message(r):e}a(FN,"validatePemFile");function xN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(PN);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(BN)}a(xN,"validateRotationMaxSize");function VN(e,t){let r=t.state.path.join("."),s=wN.cpus().length,n=s-1;return n<=2&&(n=2),yN.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(VN,"setDefaultThreads");function kN(e,t){if(!_n.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(_n.isEmpty(Xr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return cu.join(Xr,MN);case"logging.root":return cu.join(Xr,DN);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(kN,"setDefaultRoot");function $N(e){let t=U.object({routes:cn});return UN.validateBySchema({routes:e},t)}a($N,"routesValidator")});var Jr=S((RB,Ru)=>{"use strict";var $=f(),He=g(),he=p(),{configValidator:YN,routesValidator:lu}=Eu(),We=require("fs-extra"),KN=require("yaml"),Er=require("path"),WN=require("is-number"),ln=require("properties-reader"),QN=require("lodash"),{handleHDBError:XN}=q(),{HTTP_STATUS_CODES:JN,HDB_ERROR_MSGS:un}=Be(),{PACKAGE_ROOT:ZN}=f(),zN="Unable to get config value because config is uninitialized",jN="Config successfully initialized",eO="Error backing up config file",tO="Empty parameter sent to getConfigValue",du=Er.join(ZN,"config","yaml",$.HDB_DEFAULT_CONFIG_FILE),rO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",En,pe;Ru.exports={createConfigFile:sO,getDefaultConfig:nO,getConfigValue:Su,initConfig:hu,flattenConfig:Yt,updateConfigValue:Tu,updateConfigObject:iO,getConfiguration:aO,setConfiguration:oO,readConfigFile:Ba,getClusteringRoutes:_O,initOldConfig:fu,getConfigFromFile:cO};function sO(e){let t=lr(du);En=Yt(t.toJSON());for(let i in e){let o=$.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Ma(o,e[i]);try{t.setIn([..._],c)}catch(u){he.error(u)}}}Pa(t);let r=t.toJSON();pe=Yt(r);let s=t.getIn(["rootPath"]),n=Er.join(s,$.HDB_CONFIG_FILE);We.createFileSync(n),We.writeFileSync(n,String(t)),he.trace(`Config file written to ${n}`)}a(sO,"createConfigFile");function nO(e){if(En===void 0){let r=lr(du);En=Yt(r.toJSON())}let t=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return En[t.toLowerCase()]}a(nO,"getDefaultConfig");function Su(e){if(He.isEmpty(e)){he.error(tO);return}if(pe===void 0){he.trace(zN);return}let t=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return pe[t.toLowerCase()]}a(Su,"getConfigValue");function hu(e=!1){if(pe===void 0||e){let t=He.getPropsFilePath();try{We.accessSync(t,We.constants.F_OK|We.constants.R_OK)}catch(o){throw he.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=ln(t).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{fu(s);return}catch(o){if(o.code!==$.NODE_ERROR_CODES.ENOENT)throw o}try{n=lr(s)}catch(o){if(o.code===$.NODE_ERROR_CODES.ENOENT){he.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 he.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Pa(n);let i=n.toJSON();pe=Yt(i),he.trace(jN)}}a(hu,"initConfig");function Pa(e){let t=e.toJSON(),r=YN(t);if(r.error)throw un.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(Pa,"validateConfig");function iO(e,t){pe===void 0&&(pe={});let r=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){he.trace(`Unable to update config object because config param '${e}' does not exist`);return}pe[r.toLowerCase()]=t}a(iO,"updateConfigObject");function Tu(e,t,r=void 0,s=!1,n=!1){pe===void 0&&hu();let i=Su($.CONFIG_PARAM_MAP.hdb_root),o=Er.join(i,$.HDB_CONFIG_FILE),_=lr(o);if(r===void 0){let E=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),T=Ma(E,t);_.setIn([...l],T)}else for(let E in r){let l=$.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let T=l.split("_"),d=Ma(l,r[E]);try{_.setIn([...T],d)}catch(A){he.error(A)}}}Pa(_);let c=_.getIn(["rootPath"]),u=Er.join(c,$.HDB_CONFIG_FILE);if(s===!0)try{let E=Er.join(c,"backup",`${$.HDB_CONFIG_FILE}.bak`);We.copySync(o,E),he.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){he.error(eO),he.error(E)}We.writeFileSync(u,String(_)),n&&(pe=Yt(_.toJSON())),he.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Tu,"updateConfigValue");function Yt(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=Yt(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(Yt,"flattenConfig");function Ma(e,t){if(e===$.CONFIG_PARAMS.CLUSTERING_NODENAME||e===$.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(WN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||He.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 He.autoCast(t)}a(Ma,"castConfigValue");function aO(){let e=He.getPropsFilePath(),r=ln(e).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return lr(r).toJSON()}a(aO,"getConfiguration");async function oO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Tu(void 0,void 0,n,!0),rO}catch(i){throw typeof i=="string"||i instanceof String?XN(i,i,JN.BAD_REQUEST,void 0,void 0,!0):i}}a(oO,"setConfiguration");function Ba(){let e=He.getPropsFilePath();try{We.accessSync(e,We.constants.F_OK|We.constants.R_OK)}catch(n){throw he.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=ln(e).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return lr(r).toJSON()}a(Ba,"readConfigFile");function lr(e){return KN.parseDocument(We.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lr,"parseYamlDoc");function _O(){let e=Ba(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=He.isEmptyOrZeroLength(t)?[]:t;let r=lu(t);if(r)throw un.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=He.isEmptyOrZeroLength(s)?[]:s;let n=lu(s);if(n)throw un.CONFIG_VALIDATION(n.message);if(!He.isEmptyOrZeroLength(s)&&!He.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!He.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw un.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(_O,"getClusteringRoutes");function fu(e){let t=ln(e);pe={};for(let r in $.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(He.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=$.CONFIG_PARAM_MAP[r].toLowerCase();n===$.CONFIG_PARAMS.LOGGING_ROOT?pe[n]=Er.dirname(s):pe[n]=s}return pe}a(fu,"initOldConfig");function cO(e){let t=Ba();return QN.get(t,e.replaceAll("_","."))}a(cO,"getConfigFromFile")});var Q=S((mB,Au)=>{"use strict";var Ha=require("fs-extra"),nt=require("path"),uO=require("os"),EO=require("properties-reader"),Zr=p(),dr=g(),I=f(),dn=Jr(),lO="Error initializing environment manager",Sn="BOOT_PROPS_FILE_PATH",mu=!1,dO={[I.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},dt={};Au.exports={BOOT_PROPS_FILE_PATH:Sn,getHdbBasePath:SO,setHdbBasePath:hO,get:TO,initSync:RO,setProperty:P,initTestEnvironment:mO};function SO(){return dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(SO,"getHdbBasePath");function hO(e){dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hO,"setHdbBasePath");function TO(e){let t=dn.getConfigValue(e);return t===void 0?dt[e]:t}a(TO,"get");function P(e,t){dO[e]&&(dt[e]=t),dn.updateConfigObject(e,t)}a(P,"setProperty");function fO(){let e;try{e=dr.getPropsFilePath(),Ha.accessSync(e,Ha.constants.F_OK|Ha.constants.R_OK),mu=!0;let t=EO(e);return dt[I.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(I.HDB_SETTINGS_NAMES.INSTALL_USER),dt[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),dt[Sn]=e,!0}catch{return Zr.trace(`Environment manager found no properties file at ${e}`),!1}}a(fO,"doesPropFileExist");function RO(e=!1){try{(mu||fO())&&(dn.initConfig(e),dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dn.getConfigValue(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zr.error(lO),Zr.error(t),console.error(t),process.exit(1)}}a(RO,"initSync");function mO(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=nt.join(__dirname,"../../","unitTests");dt[Sn]=nt.join(c,"hdb_boot_properties.file"),P(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,nt.join(c,"settings.test")),P(I.HDB_SETTINGS_NAMES.INSTALL_USER,uO.userInfo().username),P(I.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,nt.join(c,"envDir","utility","keys","privateKey.pem")),P(I.HDB_SETTINGS_NAMES.CERT_KEY,nt.join(c,"envDir","utility","keys","certificate.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,nt.join(c,"envDir","utility","keys","privateKey.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,nt.join(c,"envDir","utility","keys","certificate.pem")),P(I.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(I.HDB_SETTINGS_NAMES.LOG_PATH_KEY,nt.join(c,"envDir","log")),P(I.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(I.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,nt.join(c,"envDir")),P(I.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,dr.isEmpty(n)?!0:n),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,dr.isEmpty(n)?!0:n),P(I.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(I.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,dr.isEmpty(i)?!1:i),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,dr.isEmpty(i)?!1:i),P(I.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,nt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(I.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,dr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(I.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(I.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(I.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Sn}. Please check your boot props and settings files`;Zr.fatal(r),Zr.error(t)}}a(mO,"initTestEnvironment")});var F=S((NB,Du)=>{"use strict";var va=require("lmdb"),ve=require("fs-extra"),Qe=require("path"),Tn=$t(),Nu=p(),ae=Be().LMDB_ERRORS_ENUM,fn=nu(),Ga=au(),Ou=_u(),Ct=Se(),AB=f(),zr=Q();zr.initSync();var gu=zr.get("STORAGE_WRITEASYNC")===!0||zr.get("STORAGE_WRITEASYNC")==="true"||zr.get("STORAGE_WRITEASYNC")==="TRUE",pu=zr.get("STORAGE_OVERLAPPINGSYNC"),Iu=1024*1024*1024,Cu=1e4,bu=1e3,Xe=Ct.INTERNAL_DBIS_NAME,Lu=Ct.DBI_DEFINITION_NAME,AO="data.mdb",NO="lock.mdb",jr=".mdb",OO="-lock",hn=class{constructor(t,r,s=!1){this.dbi=Ge(t,r),this.key_type=this.dbi[Ct.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ct.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new va.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(hn,"TransactionCursor");function qa(e,t){if(e===void 0)throw new Error(ae.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ae.ENV_NAME_REQUIRED)}a(qa,"pathEnvNameValidation");async function Fa(e,t,r=!0){try{await ve.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ae.INVALID_BASE_PATH):s}try{let s=Qe.join(e,t+jr);return await ve.access(s,ve.constants.R_OK|ve.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ve.access(Qe.join(e,t,AO),ve.constants.R_OK|ve.constants.F_OK),Qe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ae.INVALID_ENVIRONMENT)}else throw new Error(ae.INVALID_ENVIRONMENT);throw s}}a(Fa,"validateEnvironmentPath");function Rn(e,t){if(Tn.validateEnv(e),t===void 0)throw new Error(ae.DBI_NAME_REQUIRED)}a(Rn,"validateEnvDBIName");async function gO(e,t,r=!1,s=!1){qa(e,t),t=t.toString();try{return await Fa(e,t,s),xa(e,t,r)}catch(n){if(n.message===ae.INVALID_ENVIRONMENT){let i=Qe.join(e,t);await ve.mkdirp(s?i:e);let o=new Ou(s?i:i+jr,Iu,Cu,bu,!1,gu,pu),_=va.open(o);_.dbis=Object.create(null);let c=new Ga(!1);_.openDB(Xe,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Va(e,t,r);return _[Ct.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(gO,"createEnvironment");async function pO(e,t,r,s=!0){let n=await xa(e,t);if(r===void 0)throw new Error(ae.DESTINATION_PATH_REQUIRED);try{await ve.access(Qe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ae.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(pO,"copyEnvironment");async function xa(e,t,r=!1){qa(e,t),t=t.toString();let s=Va(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 Fa(e,t),i=Qe.join(e,t+jr),o=n!=i,_=new Ou(n,Iu,Cu,bu,o,gu,pu),c=va.open(_);c.dbis=Object.create(null);let u=yu(c);for(let E=0;E<u.length;E++)Ge(c,u[E]);return c[Ct.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(xa,"openEnvironment");async function IO(e,t,r=!1){qa(e,t),t=t.toString();let s=Qe.join(e,t+jr),n=await Fa(e,t);if(global.lmdb_map!==void 0){let i=Va(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await wu(o),delete global.lmdb_map[i]}}await ve.remove(n),await ve.remove(n===s?n+OO:Qe.join(Qe.dirname(n),NO))}a(IO,"deleteEnvironment");async function wu(e){Tn.validateEnv(e);let t=e[Ct.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(wu,"closeEnvironment");function Va(e,t,r=!1){let n=`${Qe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Va,"getCachedEnvironmentName");function CO(e){Tn.validateEnv(e);let t=Object.create(null),r=Ge(e,Xe);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Xe)try{t[s]=Object.assign(new fn,n)}catch{Nu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(CO,"listDBIDefinitions");function yu(e){Tn.validateEnv(e);let t=[],r=Ge(e,Xe);for(let{key:s}of r.getRange({start:!1}))s!==Xe&&t.push(s);return t}a(yu,"listDBIs");function bO(e,t){let s=Ge(e,Xe).getEntry(t),n=new fn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Nu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(bO,"getDBIDefinition");function Uu(e,t,r,s=!1){if(Rn(e,t),t=t.toString(),t===Xe)throw new Error(ae.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ge(e,t)}catch(n){if(n.message===ae.DBI_DOES_NOT_EXIST){let i=new Ga(r,s===!0),o=e.openDB(t,i),_=new fn(r===!0,s);return o[Lu]=_,Ge(e,Xe).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Uu,"createDBI");function Ge(e,t){if(Rn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Xe?r=bO(e,t):r=new fn,r===void 0)throw new Error(ae.DBI_DOES_NOT_EXIST);let s;try{let n=new Ga(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(ae.DBI_DOES_NOT_EXIST):n}return s[Lu]=r,e.dbis[t]=s,s}a(Ge,"openDBI");function LO(e,t){Rn(e,t),t=t.toString();let r=Ge(e,t),s=r.getStats();return r[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(LO,"statDBI");async function wO(e,t){try{let r=Qe.join(e,t+jr);return(await ve.stat(r)).size}catch{throw new Error(ae.INVALID_ENVIRONMENT)}}a(wO,"environmentDataSize");function yO(e,t){if(Rn(e,t),t=t.toString(),t===Xe)throw new Error(ae.CANNOT_DROP_INTERNAL_DBIS_NAME);Ge(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ge(e,Xe).removeSync(t)}a(yO,"dropDBI");function UO(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ge(e,n)}catch(i){if(i.message===ae.DBI_DOES_NOT_EXIST)Uu(e,n,n!==t,n===t);else throw i}}}a(UO,"initializeDBIs");Du.exports={openDBI:Ge,openEnvironment:xa,createEnvironment:gO,listDBIs:yu,listDBIDefinitions:CO,createDBI:Uu,dropDBI:yO,statDBI:LO,deleteEnvironment:IO,initializeDBIs:UO,TransactionCursor:hn,environmentDataSize:wO,copyEnvironment:pO,closeEnvironment:wu}});var Pu=S((OB,Mu)=>{"use strict";var mn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(mn,"InsertRecordsResponseObject");Mu.exports=mn});var Hu=S((gB,Bu)=>{"use strict";var An=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(An,"UpdateRecordsResponseObject");Bu.exports=An});var Gu=S((pB,vu)=>{"use strict";var Nn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Nn,"UpsertRecordsResponseObject");vu.exports=Nn});var Sr=S((LB,Fu)=>{"use strict";var DO=F(),MO=Pu(),PO=Hu(),BO=Gu(),ts=$t(),es=Be().LMDB_ERRORS_ENUM,HO=Se(),bt=f(),vO=g(),GO=require("uuid"),IB=require("lmdb"),{handleHDBError:qO,hdb_errors:FO}=q(),{OVERFLOW_MARKER:CB,MAX_SEARCH_KEY_LENGTH:bB}=HO,ka=bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kt=bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xO(e,t,r,s,n=!0){Wa(e,t,r,s),$a(e,t,r);let i=new MO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];qu(u,!0,n);let E=VO(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Ya(o,_,s,i)}a(xO,"insertRecords");function VO(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][bt.FUNC_VAL],s[o]=_)}let c=ts.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[Kt])})}a(VO,"insertRecord");function kO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(kO,"removeSkippedRecords");function qu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Kt]))&&(e[Kt]=s),t===!0?(r===!0||!Number.isInteger(e[ka]))&&(e[ka]=s):delete e[ka]}a(qu,"setTimestamps");function $a(e,t,r){r.indexOf(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),DO.initializeDBIs(e,t,r)}a($a,"initializeTransaction");async function $O(e,t,r,s,n=!0){Wa(e,t,r,s),$a(e,t,r);let i=new PO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],T;try{T=Ka(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(T),c.push(l)}return Ya(_,c,s,i,o)}a($O,"updateRecords");async function YO(e,t,r,s,n=!0){try{Wa(e,t,r,s)}catch(c){throw qO(c,c.message,FO.HTTP_STATUS_CODES.BAD_REQUEST)}$a(e,t,r);let i=new BO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;vO.isEmpty(u[t])?(E=GO.v4(),u[t]=E):E=u[t];let l=Ka(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Ya(o,_,s,i)}a(YO,"upsertRecords");async function Ya(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=ts.getMicroTime(),kO(r,n),s}a(Ya,"finalizeWrite");function Ka(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(qu(r,!E,o),Number.isInteger(r[Kt])&&u[Kt]>r[Kt])return!1;E&&n.original_records.push(u);let l,T=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],b=e.dbis[A];if(b===void 0)continue;let Ae=u[A];if(typeof N=="function"){let W=N([[u]]);Array.isArray(W)&&(N=W[0][bt.FUNC_VAL],r[A]=N)}if(N===Ae)continue;let v=ts.getIndexedValues(Ae);if(v)for(let W=0,$e=v.length;W<$e;W++)b.remove(v[W],s);if(v=ts.getIndexedValues(N),v)for(let W=0,$e=v.length;W<$e;W++)b.put(v[W],s)}let d=Object.assign({},u,r);_.put(s,d,d[Kt])},"do_put");return c?l=_.ifVersion(s,c.version,T):l=_.ifNoExists(s,T),l.then(d=>d?!0:Ka(e,t,r,s,n,i,o))}a(Ka,"updateUpsertRecord");function KO(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(es.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(es.WRITE_ATTRIBUTES_REQUIRED):new Error(es.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(KO,"validateBasic");function Wa(e,t,r,s){if(KO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(es.RECORDS_REQUIRED):new Error(es.RECORDS_MUST_BE_ARRAY)}a(Wa,"validateWrite");Fu.exports={insertRecords:xO,updateRecords:$O,upsertRecords:YO}});var k=S((wB,Vu)=>{"use strict";var Qa=f(),hr=Q(),Xa=require("path");hr.initSync();var On,gn,pn;function xu(){if(On!==void 0)return On;if(hr.getHdbBasePath()!==void 0)return On=Xa.join(hr.getHdbBasePath(),Qa.SCHEMA_DIR_NAME),On}a(xu,"getBaseSchemaPath");function WO(){if(gn!==void 0)return gn;if(hr.getHdbBasePath()!==void 0)return gn=Xa.join(xu(),Qa.SYSTEM_SCHEMA_NAME),gn}a(WO,"getSystemSchemaPath");function QO(){if(pn!==void 0)return pn;if(hr.getHdbBasePath()!==void 0)return pn=Xa.join(hr.getHdbBasePath(),Qa.TRANSACTIONS_DIR_NAME),pn}a(QO,"getTransactionAuditStorePath");Vu.exports={getBaseSchemaPath:xu,getSystemSchemaPath:WO,getTransactionAuditStorePath:QO}});var Wt=S((yB,XO)=>{XO.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 In=S((UB,ku)=>{var{common_validators:Lt}=kt(),rs=Ke(),Je="is required",G={schema:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},table:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},hash_attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length}};function ss(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(ss,"makeAttributesStrings");function JO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence=!1,G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(JO,"schema_object");function ZO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(ZO,"table_object");function zO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence={message:Je},rs.validateObject(e,G)}a(zO,"create_table_object");function jO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence={message:Je},G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(jO,"attribute_object");function eg(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(eg,"describe_table");function tg(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(tg,"validateTableResidence");ku.exports={schema_object:JO,create_table_object:zO,table_object:ZO,attribute_object:jO,describe_table:eg,validateTableResidence:tg}});var Yu=S((DB,$u)=>{"use strict";var rg=require("uuid"),Cn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||rg.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Cn,"CreateAttributeObject");$u.exports=Cn});var Ln=S((MB,Ku)=>{"use strict";var sg=Yu(),bn=class extends sg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(bn,"LMDBCreateAttributeObject");Ku.exports=bn});var Qu=S((PB,Wu)=>{"use strict";Wu.exports=ig;var ng="inserted";function ig(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===ng?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(ig,"returnObject")});var wn=S((BB,Ju)=>{"use strict";var ag=f(),Ja=F(),og=Sr(),{getSystemSchemaPath:_g,getBaseSchemaPath:cg}=k(),ug=require("path"),Eg=Wt(),lg=In(),dg=Ln(),Sg=Qu(),{handleHDBError:hg,hdb_errors:Tg}=q(),fg=g(),Za=Eg.hdb_attribute,Xu=[];for(let e=0;e<Za.attributes.length;e++)Xu.push(Za.attributes[e].attribute);var Rg="inserted";Ju.exports=mg;async function mg(e){let t=lg.attribute_object(e);if(t)throw hg(new Error,t.message,Tg.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=fg.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 dg(e.schema,e.table,e.attribute,e.id);try{let n=await Ja.openEnvironment(ug.join(cg(),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}`);Ja.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Ja.openEnvironment(_g(),ag.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await og.insertRecords(i,Za.hash_attribute,Xu,[s]);return Sg(Rg,o,{records:[s]},_)}catch(n){throw n}}a(mg,"lmdbCreateAttribute")});var yn=S((vB,zu)=>{"use strict";var St=g(),Zu=p(),HB=ya();zu.exports=Ag;function Ag(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(St.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&St.isEmptyOrZeroLength(o[r]))throw Zu.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!St.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Zu.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!St.isEmpty(o[r])&&o[r]!==""&&s.has(St.autoCast(o[r]))&&(o.skip=!0),s.add(St.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Ag,"insertUpdateValidate")});var Dn=S((GB,ju)=>{"use strict";var Ng=f().OPERATIONS_ENUM,Un=class{constructor(t,r,s,n,i=void 0){this.operation=Ng.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Un,"InsertObject");ju.exports=Un});var Pn=S((FB,eE)=>{"use strict";var qB=Dn(),Mn=f(),ja=g(),za=p(),Og=require("uuid"),{handleHDBError:ns,hdb_errors:gg}=q(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:as}=gg;eE.exports=pg;function pg(e,t,r){for(let n=0;n<t.length;n++)Ig(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Cg(i,r,e.operation)}}a(pg,"processRows");function Ig(e){if(Buffer.byteLength(String(e))>Mn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ns(new Error,is.ATTR_NAME_LENGTH_ERR(e),as.BAD_REQUEST,void 0,void 0,!0);if(ja.isEmptyOrZeroLength(e)||ja.isEmpty(e.trim()))throw ns(new Error,is.ATTR_NAME_NULLISH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(Ig,"validateAttribute");function Cg(e,t,r){if(!e.hasOwnProperty(t)||ja.isEmptyOrZeroLength(e[t])){if(r===Mn.OPERATIONS_ENUM.INSERT||r===Mn.OPERATIONS_ENUM.UPSERT){e[t]=Og.v4();return}throw za.error("Update transaction aborted due to record with no hash value:",e),ns(new Error,is.RECORD_MISSING_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Mn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw za.error(e),ns(new Error,is.HASH_VAL_LENGTH_ERR,as.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw za.error(e),ns(new Error,is.INVALID_FORWARD_SLASH_IN_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(Cg,"validateHash")});var rE=S((xB,tE)=>{"use strict";var Bn=class{constructor(t,r){this.type=t,this.message=r}};a(Bn,"IPCEventObject");tE.exports=Bn});var Tr=S((VB,sE)=>{"use strict";var bg=p(),eo=g(),Lg=f(),{IPC_ERRORS:os}=Be();sE.exports={sendIpcEvent:wg,validateEvent:yg,SchemaEventMsg:Ug,UserEventMsg:Dg};function wg(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):bg.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(wg,"sendIpcEvent");function yg(e){if(typeof e!="object")return os.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||eo.isEmpty(e.type))return os.MISSING_TYPE;if(!e.hasOwnProperty("message")||eo.isEmpty(e.message))return os.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eo.isEmpty(e.message.originator))return os.MISSING_ORIGIN;if(Lg.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return os.INVALID_EVENT(e.type)}a(yg,"validateEvent");function Ug(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(Ug,"SchemaEventMsg");function Dg(e){this.originator=e}a(Dg,"UserEventMsg")});var _s=S(($B,oE)=>{"use strict";var nE=f(),kB=g(),Hn=p(),iE=rE(),{sendIpcEvent:aE}=Tr();function Mg(e){try{Hn.trace("signalSchemaChange called with message:",e);let t=new iE(nE.IPC_EVENT_TYPES.SCHEMA,e);aE(t)}catch(t){Hn.error(t)}}a(Mg,"signalSchemaChange");function Pg(e){try{Hn.trace("signalUserChange called with message:",e);let t=new iE(nE.IPC_EVENT_TYPES.USER,e);aE(t)}catch(t){Hn.error(t)}}a(Pg,"signalUserChange");oE.exports={signalSchemaChange:Mg,signalUserChange:Pg}});var vn=S((YB,cE)=>{"use strict";var _E=g(),Bg=f(),Hg=p(),vg=wn(),Gg=Ln(),qg=_s(),{SchemaEventMsg:Fg}=Tr(),xg="already exists in";cE.exports=Vg;async function Vg(e,t,r){try{if(_E.isEmptyOrZeroLength(r))return r;let s=[];_E.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 kg(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(Vg,"lmdbCheckForNewAttributes");async function kg(e,t,r,s){let n=new Gg(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await $g(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(xg))Hg.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(kg,"createNewAttribute");async function $g(e){let t;try{return t=await vg(e),qg.signalSchemaChange(new Fg(process.pid,Bg.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a($g,"createAttribute")});var fr=S((KB,uE)=>{"use strict";var Gn=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(Gn,"LMDBTransactionObject");uE.exports=Gn});var lE=S((WB,EE)=>{"use strict";var Yg=fr(),Kg=f().OPERATIONS_ENUM,qn=class extends Yg{constructor(t,r,s,n,i=void 0){super(Kg.INSERT,r,s,n,i),this.records=t}};a(qn,"LMDBInsertTransactionObject");EE.exports=qn});var SE=S((QB,dE)=>{"use strict";var Wg=fr(),Qg=f().OPERATIONS_ENUM,Fn=class extends Wg{constructor(t,r,s,n,i,o=void 0){super(Qg.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fn,"LMDBUpdateTransactionObject");dE.exports=Fn});var TE=S((XB,hE)=>{"use strict";var Xg=fr(),Jg=f().OPERATIONS_ENUM,xn=class extends Xg{constructor(t,r,s,n,i,o=void 0){super(Jg.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xn,"LMDBUpsertTransactionObject");hE.exports=xn});var RE=S((JB,fE)=>{"use strict";var Zg=fr(),zg=f().OPERATIONS_ENUM,Vn=class extends Zg{constructor(t,r,s,n,i=void 0){super(zg.DELETE,s,n,t,i),this.original_records=r}};a(Vn,"LMDBDeleteTransactionObject");fE.exports=Vn});var cs=S((ZB,OE)=>{"use strict";var jg=require("path"),mE=F(),ep=lE(),tp=SE(),rp=TE(),sp=RE(),Rr=Se(),AE=g(),{CONFIG_PARAMS:np}=f(),NE=Q();NE.initSync();var kn=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:ip}=k();OE.exports=ap;async function ap(e,t){if(NE.get(np.LOGGING_AUDITLOG)===!1)return;let r=jg.join(ip(),e.schema.toString()),s=await mE.openEnvironment(r,e.table,!0),n=op(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){mE.initializeDBIs(s,Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rr.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),AE.isEmpty(n.user_name)||s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(ap,"writeTransaction");function op(e,t){let r=AE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===kn.INSERT)return new ep(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.UPDATE)return new tp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.UPSERT)return new rp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.DELETE)return new sp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(op,"createTransactionObject")});var to=S((jB,gE)=>{"use strict";var _p=yn(),zB=Dn(),mr=f(),cp=Pn(),up=Sr().insertRecords,Ep=F(),lp=require("path"),dp=p(),Sp=vn(),{getBaseSchemaPath:hp}=k(),Tp=cs();gE.exports=fp;async function fp(e){try{let{schema_table:t,attributes:r}=_p(e);cp(e,r,t.hash_attribute),e.schema!==mr.SYSTEM_SCHEMA_NAME&&(r.includes(mr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(mr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Sp(e.hdb_auth_header,t,r),n=lp.join(hp(),e.schema.toString()),i=await Ep.openEnvironment(n,e.table),o=await up(i,t.hash_attribute,r,e.records,e[mr.CLUSTERING_FLAG]!==!0);try{await Tp(e,o)}catch(_){dp.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(fp,"lmdbCreateRecords")});var CE=S((eH,IE)=>{"use strict";var pE=f(),Rp=to(),mp=Dn(),Ap=require("fs-extra"),Np=require("path"),{getBaseSchemaPath:Op}=k();IE.exports=gp;async function gp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new mp(pE.SYSTEM_SCHEMA_NAME,pE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Rp(r),await Ap.mkdirp(Np.join(Op(),e.schema.toString()))}a(gp,"lmdbCreateSchema")});var LE=S((tH,bE)=>{"use strict";var $n=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($n,"DeleteRecordsResponseObject");bE.exports=$n});var no=S((iH,UE)=>{"use strict";var wE=F(),ro=$t(),so=Be().LMDB_ERRORS_ENUM,pp=Se(),yE=p(),rH=g(),Ip=require("lmdb"),Cp=LE(),{OVERFLOW_MARKER:sH,MAX_SEARCH_KEY_LENGTH:nH}=pp;async function bp(e,t,r){if(ro.validateEnv(e),t===void 0)throw new Error(so.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(so.IDS_REQUIRED):new Error(so.IDS_MUST_BE_ARRAY);try{let s=wE.listDBIs(e);wE.initializeDBIs(e,t,s);let n=new Cp,i,o=[],_=[];for(let l=0,T=r.length;l<T;l++)try{i=r[l];let d=e.dbis[t].get(i);if(!d){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,Ip.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let b=s[N];if(!d.hasOwnProperty(b)||b===t)continue;let Ae=e.dbis[b],v=d[b];if(v!=null)try{let W=ro.getIndexedValues(v);if(W)for(let $e=0,$s=W.length;$e<$s;$e++)Ae.remove(W[$e],i)}catch{yE.warn(`cannot delete from attribute: ${b}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(d)}catch(d){yE.warn(d),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,T=u.length;l<T;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let T=c[l];n.original_records.splice(T-E,1),E++}return n.txn_time=ro.getMicroTime(),n}catch(s){throw s}}a(bp,"deleteRecords");UE.exports={deleteRecords:bp}});var us=S((aH,ME)=>{"use strict";var Ar=g(),Lp=no(),wp=F(),yp=require("path"),{getBaseSchemaPath:Up}=k(),Dp=cs(),Mp=p();ME.exports=Pp;async function Pp(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ar.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ar.isEmptyOrZeroLength(e.hash_values)&&!Ar.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ar.isEmpty(c)||e.hash_values.push(c)}}if(Ar.isEmptyOrZeroLength(e.hash_values))return DE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ar.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=yp.join(Up(),e.schema.toString()),i=await wp.openEnvironment(n,e.table),o=await Lp.deleteRecords(i,s,e.hash_values);try{t===!0&&await Dp(e,o)}catch(_){Mp.error(`unable to write transaction due to ${_.message}`)}return DE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Pp,"lmdbDeleteRecords");function DE(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(DE,"createDeleteResponse")});var ao=S((_H,PE)=>{"use strict";var Bp=f(),oH=$t();function io(e,t){let r=Object.create(null);if(t.length===1&&Bp.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(io,"parseRow");function Hp(e,t,r,s){let n=io(r,e);s.push(n)}a(Hp,"searchAll");function vp(e,t,r,s){let n=io(r,e);s[t]=n}a(vp,"searchAllToMap");function Gp(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Gp,"iterateDBI");function Qt(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(Qt,"pushResults");function qp(e,t,r,s,n,i){t.toString().endsWith(e)&&Qt(t,r,s,n,i)}a(qp,"endsWith");function Fp(e,t,r,s,n,i){t.toString().includes(e)&&Qt(t,r,s,n,i)}a(Fp,"contains");function xp(e,t,r,s,n,i){t>e&&Qt(t,r,s,n,i)}a(xp,"greaterThanCompare");function Vp(e,t,r,s,n,i){t>=e&&Qt(t,r,s,n,i)}a(Vp,"greaterThanEqualCompare");function kp(e,t,r,s,n,i){t<e&&Qt(t,r,s,n,i)}a(kp,"lessThanCompare");function $p(e,t,r,s,n,i){t<=e&&Qt(t,r,s,n,i)}a($p,"lessThanEqualCompare");PE.exports={parseRow:io,searchAll:Hp,searchAllToMap:vp,iterateDBI:Gp,endsWith:qp,contains:Fp,greaterThanCompare:xp,greaterThanEqualCompare:Vp,lessThanCompare:kp,lessThanEqualCompare:$p,pushResults:Qt}});var Nr=S((EH,FE)=>{"use strict";var qe=F(),Yp=p(),De=$t(),wt=Se(),X=Be().LMDB_ERRORS_ENUM,cH=g(),Kp=f(),Ze=ao(),uH=require("lmdb"),{OVERFLOW_MARKER:BE,MAX_SEARCH_KEY_LENGTH:Wp}=wt,Es={lazy:!0};function HE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=oo(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(HE,"iterateFullIndex");function ls(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=qe.openDBI(e,r),T=oo(e,t,r);l[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let d=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,b=i===!0?u:c;for(let{key:Ae,value:v}of l.getRange({start:A,end:d,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:b}))Ze.pushResults(T(Ae,v),v,E,t,r);return E}a(ls,"iterateRangeBetween");function oo(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(BE)){if(!s)if(t)s=qe.openDBI(e,t);else{let _=qe.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=qe.openDBI(e,_[c]),!s[wt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,Es)[r]}return n}}a(oo,"getOverflowCheck");function Qp(e,t,r,s=!1,n=void 0,i=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);Yn(r),r=ds(e,r);let o=[],_=qe.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Ze.searchAll(r,c,u,o);return o}a(Qp,"searchAll");function Xp(e,t,r,s=!1,n=void 0,i=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);return Yn(r),r=ds(e,r),HE(e,t,t,Ze.searchAllToMap.bind(null,r),s,n,i)}a(Xp,"searchAllToMap");function Jp(e,t,r=!1,s=void 0,n=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);return HE(e,void 0,t,Ze.iterateDBI,r,s,n)}a(Jp,"iterateDBI");function Zp(e,t){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);return qe.statDBI(e,t).entryCount}a(Zp,"countAll");function zp(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=qe.openDBI(e,r);s=De.convertKeyValueToWrite(s);let c=[[],[]];if(_[wt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Es);u!==void 0&&Ze.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))Ze.pushResults(s,u,c,t,r);return c}a(zp,"equals");function jp(e,t,r){return yt(e,t,r),qe.openDBI(e,t).getValuesCount(r)}a(jp,"count");function eI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=[[],[]],c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=De.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:T}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))Ze.pushResults(l,T,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))Ze.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(eI,"startsWith");function tI(e,t,r,s,n=!1,i=void 0,o=void 0){return vE(e,t,r,s,n,i,o,!0)}a(tI,"endsWith");function vE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){yt(e,r,s);let c=[[],[]],u=qe.openDBI(e,r);u[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=oo(e,t,r);o=Number.isInteger(o)?o:0;for(let T of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let d=T.toString();if(d.endsWith(BE))for(let A of u.getValues(T)){let N=E(T,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?d.endsWith(s):d.includes(s))if(u[wt.DBI_DEFINITION_NAME].is_hash_attribute)l(T,T);else for(let A of u.getValues(T))l(T,A)}function l(T,d){if(o>0){o--;return}i!==0&&(Ze.pushResults(T,d,c,t,r),i--)}return a(l,"found_match"),c}a(vE,"contains");function rI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ls(e,t,r,s,c,n,i,o,!0,!1)}a(rI,"greaterThan");function sI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ls(e,t,r,s,c,n,i,o,!1,!1)}a(sI,"greaterThanEqual");function nI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ls(e,t,r,c,s,n,i,o,!1,!0)}a(nI,"lessThan");function iI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ls(e,t,r,c,s,n,i,o,!1,!1)}a(iI,"lessThanEqual");function aI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(De.validateEnv(e),r===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(X.START_VALUE_REQUIRED);if(n===void 0)throw new Error(X.END_VALUE_REQUIRED);if(s=De.convertKeyValueToWrite(s),n=De.convertKeyValueToWrite(n),s>n)throw new Error(X.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ls(e,t,r,s,n,i,o,_)}a(aI,"between");function oI(e,t,r,s){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(Yn(r),r=ds(e,r),s===void 0)throw new Error(X.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Es:void 0);return i&&(n=Ze.parseRow(i,r)),n}a(oI,"searchByHash");function _I(e,t,r){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(X.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Es)===void 0&&(s=!1),s}a(_I,"checkHashExists");function cI(e,t,r,s,n=[]){qE(e,t,r,s,n);let i=GE(e,t,r,s,n);return Object.values(i)}a(cI,"batchSearchByHash");function uI(e,t,r,s,n=[]){return qE(e,t,r,s,n),GE(e,t,r,s,n)}a(uI,"batchSearchByHashToMap");function GE(e,t,r,s,n=[]){r=ds(e,r);let i=Object.create(null),o=r.length<3?Es:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=Ze.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw Yp.warn(u),u}}return i}a(GE,"batchHashSearch");function qE(e,t,r,s,n){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(Yn(r),!Array.isArray(s))throw s===void 0?new Error(X.IDS_REQUIRED):new Error(X.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(qE,"initializeBatchSearchByHash");function Yn(e){if(!Array.isArray(e))throw e===void 0?new Error(X.FETCH_ATTRIBUTES_REQUIRED):new Error(X.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Yn,"validateFetchAttributes");function yt(e,t,r){if(De.validateEnv(e),t===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(X.SEARCH_VALUE_REQUIRED);if(r?.length>Wp)throw new Error(X.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function ds(e,t){return t.length===1&&Kp.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qe.listDBIs(e)),t}a(ds,"setGetWholeRowAttributes");FE.exports={searchAll:Qp,searchAllToMap:Xp,count:jp,countAll:Zp,equals:zp,startsWith:eI,endsWith:tI,contains:vE,searchByHash:oI,setGetWholeRowAttributes:ds,batchSearchByHash:cI,batchSearchByHashToMap:uI,checkHashExists:_I,iterateDBI:Jp,greaterThan:rI,greaterThanEqual:sI,lessThan:nI,lessThanEqual:iI,between:aI}});var Ss=S((dH,$E)=>{var xE=require("lodash"),VE=Ke(),B=require("joi"),EI=g(),{hdb_schema_table:ze,checkValidTable:kE}=kt(),{handleHDBError:lI,hdb_errors:dI}=q(),{HTTP_STATUS_CODES:SI}=dI,lH=B.object({schema:ze,table:ze,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(ze).required()}),hI=B.object({schema:ze,table:ze,search_attribute:ze,search_value:B.any().required(),get_attributes:B.array().min(1).items(ze).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),TI=B.object({schema:ze,table:ze,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(ze).required(),conditions:B.array().min(1).items(B.object({search_attribute:ze,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});$E.exports=function(e,t){let r=null;switch(t){case"value":r=VE.validateBySchema(e,hI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(kE("schema",e.schema)),i(kE("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=VE.validateBySchema(e,TI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=EI.checkGlobalSchemaTable(e.schema,e.table);if(n)return lI(new Error,n,SI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=xE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!xE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var _o=S((SH,YE)=>{"use strict";var fI=F(),RI=Ss(),mI=require("path"),{getBaseSchemaPath:AI}=k();YE.exports=NI;function NI(e){let t=RI(e,"hashes");if(t)throw t;let r=mI.join(AI(),e.schema.toString());return fI.openEnvironment(r,e.table)}a(NI,"initialize")});var co=S((hH,KE)=>{"use strict";var OI=Nr(),gI=_o();KE.exports=pI;async function pI(e){try{let t=await gI(e),r=global.hdb_schema[e.schema][e.table];return OI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(pI,"lmdbGetDataByHash")});var hs=S((TH,WE)=>{"use strict";var Kn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Kn,"SearchByHashObject");WE.exports=Kn});var XE=S((RH,QE)=>{"use strict";var fH=hs(),II=Nr(),CI=_o();QE.exports=bI;async function bI(e){try{let t=await CI(e),r=global.hdb_schema[e.schema][e.table];return II.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(bI,"lmdbSearchByHash")});var ht=S((mH,JE)=>{"use strict";var Wn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Wn,"SearchObject");JE.exports=Wn});var Qn=S((AH,tl)=>{"use strict";var Te=Nr(),LI=F(),wI=require("path"),yI=g(),O=Se(),Xt=f(),{getBaseSchemaPath:UI}=k(),DI=Wt(),ZE=Be().LMDB_ERRORS_ENUM,{compareKeys:Or}=require("ordered-binary"),Tt=Xt.SEARCH_WILDCARDS;async function MI(e,t,r){let s;e.schema===Xt.SYSTEM_SCHEMA_NAME?s=DI[e.table]:s=global.hdb_schema[e.schema][e.table];let n=el(e,s.hash_attribute,r,t);return zE(e,n,s.hash_attribute,r)}a(MI,"prepSearch");async function zE(e,t,r,s){let n=wI.join(UI(),e.schema.toString()),i=await LI.openEnvironment(n,e.table),o=jE(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(HI(e,r)===!1)return s===!0?BI(o):o[1];let c=o[0];return s===!0?Te.batchSearchByHashToMap(i,r,e.get_attributes,c):Te.batchSearchByHash(i,r,e.get_attributes,c)}a(zE,"executeSearch");function jE(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Te.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Te.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Te.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Te.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Te.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Te.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Te.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Te.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Te.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Te.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Te.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Te.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Te.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(jE,"searchByType");function PI(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Or(i,s[0])>=0&&Or(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Or(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Or(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Or(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Or(n[r],s)<=0;default:return Object.create(null)}}a(PI,"filterByType");function BI(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(BI,"createMapFromArrays");function HI(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(HI,"checkToFetchMore");function el(e,t,r,s){if(yI.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Tt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tt[0])<0&&n.indexOf(Tt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(Tt.indexOf(i)>=0&&Tt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Tt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Tt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tt[0])||n.includes(Tt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(ZE.UNKNOWN_SEARCH_TYPE)}else switch(s){case Xt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case Xt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case Xt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case Xt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case Xt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ZE.UNKNOWN_SEARCH_TYPE)}}a(el,"createSearchTypeFromSearchObject");tl.exports={executeSearch:zE,createSearchTypeFromSearchObject:el,prepSearch:MI,searchByType:jE,filterByType:PI}});var sl=S((OH,rl)=>{"use strict";var NH=ht(),vI=Ss(),GI=g(),qI=f(),FI=Qn();rl.exports=xI;async function xI(e,t){if(!GI.isEmpty(t)&&qI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vI(e,"value");if(s)throw s;let n=!0;try{return await FI.prepSearch(e,t,n)}catch(i){throw i}}a(xI,"lmdbGetDataByValue")});var gr=S((pH,nl)=>{"use strict";var gH=ht(),VI=Ss(),kI=g(),$I=f(),YI=Qn();nl.exports=KI;async function KI(e,t){if(!kI.isEmpty(t)&&$I.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=VI(e,"value");if(s)throw s;let n=!1;try{return await YI.prepSearch(e,t,n)}catch(i){throw i}}a(KI,"lmdbSearchByValue")});var al=S((CH,il)=>{"use strict";var IH=Se(),Xn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Xn,"SearchByConditionsObject");var Jn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Jn,"SearchCondition");var Zn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Zn,"SortAttribute");il.exports={SearchByConditionsObject:Xn,SearchCondition:Jn,SortAttribute:Zn}});var ll=S((LH,El)=>{"use strict";var bH=al().SearchByConditionsObject,WI=ht(),QI=Ss(),uo=Nr(),zn=Se(),ul=Qn(),XI=ao(),ol=require("lodash"),{getBaseSchemaPath:JI}=k(),ZI=require("path"),zI=F(),{handleHDBError:_l,hdb_errors:jI}=q(),{HTTP_STATUS_CODES:eC}=jI,tC=1e8,rC={lazy:!0};El.exports=sC;async function sC(e){try{let t=QI(e,"conditions");if(t)throw _l(t,t.message,eC.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=ZI.join(JI(),e.schema.toString()),s=await zI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=ol.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===zn.SEARCH_TYPES.EQUALS?o.estimated_count=uo.count(s,o.search_attribute,o.search_value):_===zn.SEARCH_TYPES.CONTAINS||_===zn.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=tC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await cl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(ul.filterByType),u=c.length,E=[],l=uo.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,d=e.limit>-1?e.limit:1/0;e:for(let A of o){let N=_.get(A,rC);for(let b=0;b<u;b++)if(!c[b](N))continue e;if(T>0){T--;continue}if(d<=0)break;d--,E.push(XI.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await cl(s,e,c,n.hash_attribute);_.push(u)}if(o=ol.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return uo.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw _l(t)}}a(sC,"lmdbSearchByConditions");async function cl(e,t,r,s){let n=new WI(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===zn.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,ul.searchByType(e,n,i,s)}a(cl,"executeConditionSearch")});var Ts=S((wH,dl)=>{"use strict";var nC=f().OPERATIONS_ENUM,jn=class{constructor(t,r,s,n=void 0){this.operation=nC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(jn,"DeleteObject");dl.exports=jn});var Eo=S((yH,Sl)=>{"use strict";var ei=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ei,"DropAttributeObject");Sl.exports=ei});var So=S((DH,hl)=>{"use strict";var iC=ht(),aC=Ts(),UH=Eo(),it=f(),oC=g(),lo=F(),_C=Wt(),cC=gr(),uC=us(),{getBaseSchemaPath:EC}=k(),lC=require("path");hl.exports=dC;async function dC(e,t=!0){let r;e.schema===it.SYSTEM_SCHEMA_NAME?r=_C[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await hC(e),n=lC.join(EC(),e.schema.toString()),i=await lo.openEnvironment(n,e.table);return t===!0&&await SC(e,i,r.hash_attribute),lo.dropDBI(i,e.attribute),s}a(dC,"lmdbDropAttribute");async function SC(e,t,r){let s=lo.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(SC,"removeAttributeFromAllObjects");async function hC(e){let t=new iC(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await cC(t)).filter(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(oC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new aC(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return uC(i)}a(hC,"dropAttributeFromSystem")});var ml=S((MH,Rl)=>{"use strict";var TC=So(),fC=Eo(),Tl=g(),fl=p(),RC=Be().LMDB_ERRORS_ENUM;Rl.exports=mC;async function mC(e){if(Tl.isEmpty(global.hdb_schema[e.schema])||Tl.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 fC(e.schema,e.table,r);try{await TC(n,!1)}catch(i){i.message!==RC.DBI_DOES_NOT_EXIST&&fl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw fl.error(`Error dropping attribute ${r}`),s}}a(mC,"lmdbDropAllAttributes")});var ho=S((BH,Ll)=>{"use strict";var pl=ht(),Il=Ts(),Cl=gr(),bl=us(),PH=ml(),Ie=f(),Al=g(),Nl=F(),{getBaseSchemaPath:AC,getTransactionAuditStorePath:NC}=k(),Ol=require("path"),gl=p();Ll.exports=OC;async function OC(e){try{if(Al.isEmpty(global.hdb_schema[e.schema])||Al.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await gC(e),await pC(e);let t=Ol.join(AC(),e.schema.toString());try{await Nl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")gl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Ol.join(NC(),e.schema.toString());await Nl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")gl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(OC,"lmdbDropTable");async function gC(e){let t=new pl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await Cl(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 Il(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await bl(n)}a(gC,"deleteAttributesFromSystem");async function pC(e){let t=new pl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await Cl(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 Il(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await bl(n)}catch(i){throw i}}a(pC,"dropTableFromSystem")});var yl=S((vH,wl)=>{"use strict";var IC=require("fs-extra"),CC=ht(),bC=hs(),LC=Ts(),wC=ho(),yC=us(),UC=co(),DC=gr(),ft=f(),HH=g(),MC=require("path"),{getBaseSchemaPath:PC}=k(),{handleHDBError:BC,hdb_errors:HC}=q(),{HDB_ERROR_MSGS:vC,HTTP_STATUS_CODES:GC}=HC;wl.exports=qC;async function qC(e){let t;try{t=await FC(e.schema);let r=new CC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await DC(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await wC(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new LC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yC(n);let i=MC.join(PC(),t.toString());await IC.remove(i)}catch(r){throw r}}a(qC,"lmdbDropSchema");async function FC(e){let t=new bC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await UC(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw BC(new Error,vC.SCHEMA_NOT_FOUND(e),GC.NOT_FOUND,void 0,void 0,!0);return s}a(FC,"validateDropSchema")});var To=S((GH,Ul)=>{"use strict";var ti=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(ti,"CreateTableObject");Ul.exports=ti});var Ml=S((FH,Dl)=>{"use strict";var xC=require("path"),VC=require("fs-extra"),ri=F(),{getTransactionAuditStorePath:kC}=k(),fo=Se(),qH=To();Dl.exports=$C;async function $C(e){let t;try{let r=xC.join(kC(),e.schema.toString());await VC.mkdirp(r),t=await ri.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{ri.createDBI(t,fo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ri.createDBI(t,fo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ri.createDBI(t,fo.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($C,"createTransactionsAuditEnvironment")});var vl=S((xH,Hl)=>{"use strict";var Ro=f(),Pl=F(),YC=Sr(),KC=require("path"),{getSystemSchemaPath:WC,getBaseSchemaPath:QC}=k(),XC=Wt(),JC=wn(),mo=Ln(),ZC=p(),zC=Ml(),No=XC.hdb_table,Bl=[];for(let e=0;e<No.attributes.length;e++)Bl.push(No.attributes[e].attribute);Hl.exports=jC;async function jC(e,t){let r=KC.join(QC(),t.schema.toString()),s=new mo(t.schema,t.table,Ro.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mo(t.schema,t.table,Ro.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Pl.createEnvironment(r,t.table),e!==void 0){let o=await Pl.openEnvironment(WC(),Ro.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YC.insertRecords(o,No.hash_attribute,Bl,[e]),await Ao(s),await Ao(n),await Ao(i)}await zC(t)}catch(o){throw o}}a(jC,"lmdbCreateTable");async function Ao(e){try{await JC(e)}catch(t){ZC.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ao,"createAttribute")});var ql=S((VH,Gl)=>{"use strict";var eb=yn(),tb=Pn(),rb=vn(),pr=f(),sb=Sr().updateRecords,nb=F(),ib=require("path"),{getBaseSchemaPath:ab}=k(),ob=cs(),_b=p();Gl.exports=cb;async function cb(e){try{let{schema_table:t,attributes:r}=eb(e);tb(e,r,t.hash_attribute),e.schema!==pr.SYSTEM_SCHEMA_NAME&&(r.includes(pr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rb(e.hdb_auth_header,t,r),n=ib.join(ab(),e.schema.toString()),i=await nb.openEnvironment(n,e.table),o=await sb(i,t.hash_attribute,r,e.records,e[pr.CLUSTERING_FLAG]!==!0);try{await ob(e,o)}catch(_){_b.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(cb,"lmdbUpdateRecords")});var xl=S((kH,Fl)=>{"use strict";var ub=f().OPERATIONS_ENUM,si=class{constructor(t,r,s,n=void 0){this.operation=ub.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(si,"UpsertObject");Fl.exports=si});var kl=S((YH,Vl)=>{"use strict";var $H=xl(),Eb=yn(),lb=Pn(),db=vn(),Ir=f(),Sb=Sr().upsertRecords,hb=F(),Tb=require("path"),{getBaseSchemaPath:fb}=k(),Rb=cs(),mb=p(),{handleHDBError:Ab,hdb_errors:Nb}=q();Vl.exports=Ob;async function Ob(e){let t;try{t=Eb(e)}catch(c){throw Ab(c,c.message,Nb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lb(e,s,r.hash_attribute),e.schema!==Ir.SYSTEM_SCHEMA_NAME&&(s.includes(Ir.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ir.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await db(e.hdb_auth_header,r,s),i=Tb.join(fb(),e.schema.toString()),o=await hb.openEnvironment(i,e.table),_=await Sb(o,r.hash_attribute,s,e.records,e[Ir.CLUSTERING_FLAG]!==!0);try{await Rb(e,_)}catch(c){mb.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Ob,"lmdbUpsertRecords")});var Xl=S((KH,Ql)=>{"use strict";var gb=ht(),$l=g(),Yl=p(),pb=gr(),Kl=f(),Ib=no().deleteRecords,Cb=F(),bb=require("path"),{getBaseSchemaPath:Lb}=k(),{promisify:wb}=require("util"),yb=wb(setTimeout),Wl=1e4,Ub=10;Ql.exports=Db;async function Db(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if($l.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 gb(e.schema,e.table,Kl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await pb(n,Kl.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw Yl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return $l.isEmptyOrZeroLength(s)?(Yl.trace("No records found to delete"),{message:"No records found to delete"}):await Mb(e,s,t)}a(Db,"lmdbDeleteRecordsBefore");async function Mb(e,t,r){let s=bb.join(Lb(),e.schema.toString()),n=await Cb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=Wl){let c=t.slice(o,o+Wl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await Ib(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await yb(Ub)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Mb,"chunkDeletes")});var Zl=S((WH,Jl)=>{"use strict";var ni=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ni,"DeleteBeforeObject");Jl.exports=ni});var jl=S((QH,zl)=>{"use strict";var ii=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ii,"DeleteAuditLogsBeforeResults");zl.exports=ii});var rd=S((JH,td)=>{"use strict";var Oo=F(),{getTransactionAuditStorePath:Pb}=k(),XH=Zl(),Bb=require("path"),fs=Se(),Hb=g(),ed=jl(),vb=require("util").promisify,Gb=vb(setTimeout),qb=1e4,Fb=100;td.exports=xb;async function xb(e){let t=Bb.join(Pb(),e.schema),r=await Oo.openEnvironment(t,e.table,!0),s=Oo.listDBIs(r);Oo.initializeDBIs(r,fs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ed;do n=await Vb(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 Gb(Fb);while(n.transactions_deleted>0);return i}a(xb,"deleteAuditLogsBefore");async function Vb(e,t){let r=new ed;try{let s=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[fs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Hb.isEmpty(_)||(n=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>qb)break}return await n,r}catch(s){throw s}}a(Vb,"deleteTransactions")});var cd=S((ZH,_d)=>{"use strict";var go=F(),Cr=Se(),sd=$t(),po=f(),nd=g(),{getTransactionAuditStorePath:kb}=k(),$b=require("path"),Yb=Nr(),ai=fr(),Kb=p();_d.exports=Wb;async function Wb(e){let t=$b.join(kb(),e.schema),r=await go.openEnvironment(t,e.table,!0),s=go.listDBIs(r);go.initializeDBIs(r,Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return id(r,e.search_values);case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Xb(r,e.search_values,n);case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Qb(r,e.search_values);default:return id(r)}}a(Wb,"readAuditLog");function id(e,t=[0,sd.getMicroTime()]){nd.isEmpty(t[0])&&(t[0]=0),nd.isEmpty(t[1])&&(t[1]=sd.getMicroTime());let r=[];try{let s=e.dbis[Cr.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 ai,i);r.push(o)}return r}catch(s){throw s}}a(id,"searchTransactionsByTimestamp");function Qb(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[Cr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,od(e,i))}return Object.fromEntries(r)}a(Qb,"searchTransactionsByUsername");function Xb(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=Yb.equals(e,Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Cr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,T=E[0].length;l<T;l++){let d=E[0][l],A=Number(d);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=od(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);ad(c,"records",r,E,o),ad(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(Xb,"searchTransactionsByHashValues");function ad(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new ai(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new ai(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(ad,"loopRecords");function od(e,t){let r=[];try{let s=e.dbis[Cr.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 ai,i);r.push(o)}}catch(i){Kb.warn(i)}return r}catch(s){throw s}}a(od,"batchSearchTransactions")});var Ed=S((zH,ud)=>{"use strict";var Jb=require("path"),{getBaseSchemaPath:Zb}=k(),zb=F();ud.exports={writeTransaction:jb};async function jb(e,t,r){let s=Jb.join(Zb(),e);return(await zb.openEnvironment(s,t)).transaction(r)}a(jb,"writeTransaction")});var dd=S((jH,ld)=>{"use strict";var eL=require("path"),{getBaseSchemaPath:tL}=k(),rL=F();ld.exports={flush:sL};async function sL(e,t){let r=eL.join(tL(),e.toString());return(await rL.openEnvironment(r,t.toString())).flushed}a(sL,"flush")});var hd=S((ev,Sd)=>{"use strict";var j=p(),{handleHDBError:nL}=q(),iL=Ua(),aL=wn(),oL=to(),_L=CE(),cL=us(),uL=co(),EL=XE(),lL=sl(),dL=gr(),SL=ll(),hL=yl(),TL=vl(),fL=ql(),RL=kl(),mL=Xl(),AL=rd(),NL=ho(),OL=So(),gL=cd(),pL=Ed(),IL=dd(),oi=class extends iL{async searchByConditions(t){try{return SL(t)}catch(r){throw j.error(r),r}}async getDataByHash(t){try{return await uL(t)}catch(r){throw j.error(r),r}}async searchByHash(t){try{return await EL(t)}catch(r){throw j.error(r),r}}async getDataByValue(t,r){try{return await lL(t,r)}catch(s){throw j.error(s),s}}async searchByValue(t){try{return await dL(t)}catch(r){throw j.error(r),r}}async createSchema(t){try{return await _L(t)}catch(r){throw j.error(r),r}}async dropSchema(t){try{return await hL(t)}catch(r){throw j.error(r),r}}async createTable(t,r){try{return await TL(t,r)}catch(s){throw j.error(s),s}}async dropTable(t){try{return await NL(t)}catch(r){throw j.error(r),r}}async createAttribute(t){try{return await aL(t)}catch(r){throw j.error(r),r}}async createRecords(t){try{return await oL(t)}catch(r){throw j.error(r),r}}async updateRecords(t){try{return await fL(t)}catch(r){throw j.error(r),r}}async upsertRecords(t){try{return await RL(t)}catch(r){throw nL(r,null,null,j.ERR,r)}}async deleteRecords(t){try{return await cL(t)}catch(r){throw j.error(r),r}}async deleteRecordsBefore(t){try{return await mL(t)}catch(r){throw j.error(r),r}}async dropAttribute(t){try{return await OL(t)}catch(r){throw j.error(r),r}}async deleteAuditLogsBefore(t){try{return await AL(t)}catch(r){throw j.error(r),r}}async readAuditLog(t){try{return await gL(t)}catch(r){throw j.error(r),r}}writeTransaction(t,r,s){return pL.writeTransaction(t,r,s)}flush(t,r){return IL.flush(t,r)}};a(oi,"LMDBBridge");Sd.exports=oi});var Jt=S((tv,fd)=>{"use strict";var CL=hd(),bL=Ua(),LL=Q();LL.initSync();var Td;function wL(){return Td instanceof bL?Td:new CL}a(wL,"getBridge");fd.exports=wL()});var yd=S((sv,wd)=>{"use strict";var Io=require("recursive-iterator"),yL=require("alasql"),Co=require("clone"),Rd=g(),{handleHDBError:md,hdb_errors:UL}=q(),{HDB_ERROR_MSGS:Ad,HTTP_STATUS_CODES:Nd}=UL,DL=["DISTINCT_ARRAY"],Od=Symbol("validateTables"),bo=Symbol("validateTable"),rv=Symbol("getAllColumns"),gd=Symbol("validateAllColumns"),_i=Symbol("findColumn"),pd=Symbol("validateOrderBy"),Rs=Symbol("validateSegment"),Lo=Symbol("validateColumn"),Id=Symbol("setColumnsForTable"),Cd=Symbol("checkColumnsForAsterisk"),bd=Symbol("validateGroupBy"),Ld=Symbol("hasColumns"),ci=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Od](),this[Cd](),this[gd]()}[Od](){if(this[Ld]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bo](t.table)})}}[Ld](){let t=!1,r=new Io(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[bo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw md(new Error,Ad.SCHEMA_NOT_FOUND(t.databaseid),Nd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw md(new Error,Ad.TABLE_NOT_FOUND(t.databaseid,t.tableid),Nd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Co(s);n.table=Co(t),this.attributes.push(n)})}[_i](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)}[Cd](){let t=new Io(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Id](r.tableid)}[Id](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new yL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[gd](){this[Rs](this.statement.columns,!1),this[Rs](this.statement.joins,!1),this[Rs](this.statement.where,!1),this[bd](this.statement.group,!1),this[Rs](this.statement.order,!0)}[Rs](t,r){if(!t)return;let s=new Io(t),n=[];for(let{node:i,path:o}of s)!Rd.isEmpty(i)&&!Rd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[pd](i):n.push(this[Lo](i)));return n}[bd](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=Co(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[_i](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[_i](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[pd](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[Lo](t)}[Lo](t){let r=this[_i](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(ci,"SelectValidator");wd.exports=ci});var Pd=S((nv,Md)=>{"use strict";var Ud=require("lodash"),ms=require("mathjs"),ML=require("jsonata"),Dd=g();Md.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Ud.uniqWith(e,Ud.isEqual):e,searchJSON:PL,mad:As.bind(null,ms.mad),mean:As.bind(null,ms.mean),mode:As.bind(null,ms.mode),prod:As.bind(null,ms.prod),median:As.bind(null,ms.median)};function As(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(As,"aggregateFunction");function PL(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(Dd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Dd.isEmpty(this.__ala__.res[r])){let s=ML(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(PL,"searchJSON")});var Hd=S((iv,Bd)=>{"use strict";var Z=require("moment"),wo="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;Bd.exports={current_date:()=>Z().utc().format("YYYY-MM-DD"),current_time:()=>Z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Z(e).utc().format("YYYY");case"month":return Z(e).utc().format("MM");case"day":return Z(e).utc().format("DD");case"hour":return Z(e).utc().format("HH");case"minute":return Z(e).utc().format("mm");case"second":return Z(e).utc().format("ss");case"millisecond":return Z(e).utc().format("SSS");default:break}},date:e=>Z(e).utc().format(wo),date_format:(e,t)=>Z(e).utc().format(t),date_add:(e,t,r)=>Z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Z(e).utc(),n=Z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Z().utc().valueOf(),get_server_time:()=>Z().format(wo),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(wo)}});var Fd=S((av,qd)=>{"use strict";var BL=require("@turf/area"),HL=require("@turf/length"),vL=require("@turf/circle"),GL=require("@turf/difference"),qL=require("@turf/distance"),FL=require("@turf/boolean-contains"),xL=require("@turf/boolean-equal"),VL=require("@turf/boolean-disjoint"),kL=require("@turf/helpers"),vd=f(),D=g();qd.exports={geoArea:$L,geoLength:YL,geoCircle:KL,geoDifference:WL,geoDistance:Gd,geoNear:QL,geoContains:XL,geoEqual:JL,geoCrosses:ZL,geoConvert:zL};var yo="geo1 is required",Uo="geo2 is required";function $L(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),BL.default(e)}a($L,"geoArea");function YL(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),HL.default(e,{units:t||"kilometers"})}a(YL,"geoLength");function KL(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),vL.default(e,t,{units:r||"kilometers"})}a(KL,"geoCircle");function WL(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),GL(e,t)}a(WL,"geoDifference");function Gd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),qL.default(e,t,{units:r||"kilometers"})}a(Gd,"geoDistance");function QL(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Gd(e,t,s)<=r}a(QL,"geoNear");function XL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),FL.default(e,t)}a(XL,"geoContains");function JL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),xL.default(e,t)}a(JL,"geoEqual");function ZL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!VL.default(e,t)}a(ZL,"geoCrosses");function zL(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(vd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(vd.GEO_CONVERSION_ENUM).join(",")}`);return kL[t](e,r)}a(zL,"geoConvert")});var Vd=S((ov,xd)=>{var Zt=Pd(),Me=Hd(),at=Fd();xd.exports=e=>{e.aggr.mad=e.aggr.MAD=Zt.mad,e.aggr.mean=e.aggr.MEAN=Zt.mean,e.aggr.mode=e.aggr.MODE=Zt.mode,e.aggr.prod=e.aggr.PROD=Zt.prod,e.aggr.median=e.aggr.MEDIAN=Zt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Me.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Me.current_time,e.fn.extract=e.fn.EXTRACT=Me.extract,e.fn.date=e.fn.DATE=Me.date,e.fn.date_format=e.fn.DATE_FORMAT=Me.date_format,e.fn.date_add=e.fn.DATE_ADD=Me.date_add,e.fn.date_sub=e.fn.DATE_SUB=Me.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Me.date_diff,e.fn.now=e.fn.NOW=Me.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Me.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Me.get_server_time,e.fn.getdate=e.fn.GETDATE=Me.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Me.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=at.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=at.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=at.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=at.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=at.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=at.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=at.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=at.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=at.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=at.geoNear}});var Yd=S((_v,$d)=>{"use strict";var Ns=require("lodash"),oe=require("alasql");oe.options.cache=!1;var jL=Vd(),kd=require("clone"),ui=require("recursive-iterator"),L=p(),y=g(),br=Jt(),ew=f(),{hdb_errors:tw}=q(),rw="IS NULL",Os="There was a problem performing this search. Please check the logs and try again.";jL(oe);var Ei=class{constructor(t,r){if(y.isEmpty(t))throw L.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(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return L.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw L.error("Error thrown from checkEmptySQL in SQLSearch class method search."),L.error(s),new Error(Os)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw L.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),L.error(s),new Error(Os)}if(Object.keys(this.data).length===0)return L.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw L.error("Error thrown from processJoins in SQLSearch class method search."),L.error(s),new Error(Os)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw L.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),L.error(s),new Error(Os)}try{return t=await this._finalSQL(),t}catch(s){throw L.error("Error thrown from finalSQL in SQLSearch class method search."),L.error(s),new Error(Os)}}_getColumns(){let t=new ui(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(kd(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ns.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(y.isEmpty(this.statement.where)){L.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ui(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new oe.yy.LogicValue({value:s}):r.right instanceof oe.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new oe.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new oe.yy.LogicValue({value:i}):s instanceof oe.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new oe.yy.NumValue({value:i}))});if(t){L.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ui(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(!y.isEmpty(ew.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.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(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.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&&Ns.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(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.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(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await oe.promise(r)}catch(r){throw L.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),L.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(kd(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(y.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(rw)>-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=Ns.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await br.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){L.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let T=await br.getDataByValue(l);for(let d in T)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,T[d][n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,T[d][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(d)))}))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,T=E.length;l<T;l++){let d=E[l];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await br.getDataByValue(_,d.operation);if(c)for(let N in A)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in A)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),L.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await br.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),L.error(E)}}}_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 oe.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 oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new oe.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 oe.yy.FuncValue:new oe.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,N=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${N}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${N}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let T=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(d,n);T=await oe.promise(A,t),t=null}catch(d){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(d),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let d=0,A=T.length;d<A;d++){let N=T[d];o.forEach(b=>{N[b.key]!==null&&N[b.key]!==void 0&&b.keys.add(N[b.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),N=Ns.difference(A,[...d.keys].map(b=>b.toString()));for(let b=0,Ae=N.length;b<Ae;b++){let v=N[b];delete this.data[`${d.schema}_${d.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:T?T.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new ui(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=Ns.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){L.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),L.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 E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await br.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let T=o[E],d=c[T];for(let A=0;A<u;A++){let N=n.columns[A],b=d[N]===void 0?null:d[N];this.data[s].__merged_data[T].push(b)}}}}catch(r){throw L.error("Error thrown from getDataByHash function in SQLSearch class method getData."),L.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();L.trace(`Final SQL: ${n}`),s=await oe.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),L.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw L.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),L.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 L.error(tw.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),L.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await br.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){L.error("There was an error when processing this SQL operation. Check your logs"),L.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ei,"SQLSearch");$d.exports=Ei});var gs=S((cv,Wd)=>{"use strict";var sw=yd();Wd.exports={searchByConditions:ow,searchByHash:_w,searchByValue:cw,search:uw};var Do=Jt(),Kd=require("util"),nw=Kd.callbackify(Do.searchByHash),iw=Kd.callbackify(Do.searchByValue),aw=Yd();async function ow(e){return Do.searchByConditions(e)}a(ow,"searchByConditions");function _w(e,t){try{nw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(_w,"searchByHash");function cw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),iw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(cw,"searchByValue");function uw(e,t){try{let r=new sw(e);r.validate(),new aw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(uw,"search")});var Is=S((uv,Zd)=>{"use strict";var ps=require("crypto"),Xd="aes-256-cbc",Ew=32,lw=16,Mo=64,Jd=32,dw=Mo+Jd,Qd=new Map;Zd.exports={encrypt:Sw,decrypt:hw,createNatsTableStreamName:Tw};function Sw(e){let t=ps.randomBytes(Ew),r=ps.randomBytes(lw),s=ps.createCipheriv(Xd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(Sw,"encrypt");function hw(e){let t=e.substr(0,Mo),r=e.substr(Mo,Jd),s=e.substr(dw,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ps.createDecipheriv(Xd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(hw,"decrypt");function Tw(e,t){let r=`${e}.${t}`,s=Qd.get(r);return s||(s=ps.createHash("md5").update(`${e}.${t}`).digest("hex"),Qd.set(r,s)),s}a(Tw,"createNatsTableStreamName")});var hi=S((Ev,nS)=>{"use strict";var jd=gs(),Ut=p(),eS=In(),fw=require("lodash"),Rw=require("path"),mw=Is(),Po=g(),{promisify:tS}=require("util"),x=f(),{handleHDBError:li,hdb_errors:Aw}=q(),{HDB_ERROR_MSGS:di,HTTP_STATUS_CODES:rS}=Aw,Nw=Q();Nw.initSync();var zd=F(),Ow=k(),Cs=tS(jd.searchByValue),gw=tS(jd.searchByHash),Lr="name",sS="hash_attribute",Bo="schema",pw="schema_table",Iw="attribute";nS.exports={describeAll:Cw,describeTable:Si,describeSchema:Lw};async function Cw(e){try{let t=Po.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Lr,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[Lr]},i=await Cs(n);if(Po.isEmptyOrZeroLength(i))return{};let o={},_={};for(let T in i)o[i[T].name]=!0,!t&&!s&&(_[i[T].name]=r[i[T].name].describe);let c={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:x.ID_ATTRIBUTE_STRING,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[sS,x.ID_ATTRIBUTE_STRING,Lr,Bo]},u=await Cs(c),E=[];for(let T of u)try{let d;if(t||s)d=await Si({schema:T.schema,table:T.name});else if(r&&r[T.schema].describe&&r[T.schema].tables[T.name].describe){let A=r[T.schema].tables[T.name].attribute_permissions;d=await Si({schema:T.schema,table:T.name},A)}d&&E.push(d)}catch(d){Ut.error(d)}let l={};for(let T in E)t||s?(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]):_[E[T].schema]&&(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]);for(let T in o)t||s?l[T]={}:_[T]&&(l[T]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),li(new Error,di.DESCRIBE_ALL_ERR)}}a(Cw,"describeAll");async function Si(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=eS.describe_table(e);if(o)throw o;if(r===x.SYSTEM_SCHEMA_NAME)return global.hdb_schema[x.SYSTEM_SCHEMA_NAME][s];let _={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Lr,search_value:s,hash_values:[],get_attributes:[x.WILDCARD_SEARCH_VALUE]},c=await Cs(_);if(!c||c.length===0)throw li(new Error,di.TABLE_NOT_FOUND(e.schema,e.table),rS.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw li(new Error,di.INVALID_TABLE_ERR(i));let E={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:pw,search_value:r+"."+s,get_attributes:[Iw]},l=await Cs(E);l=fw.uniqBy(l,T=>T.attribute),n&&n.length>0&&(l=bw(n)),i.attributes=l,i.clustering_stream_name=mw.createNatsTableStreamName(u.schema,u.name);try{let T=Rw.join(Ow.getBaseSchemaPath(),i.schema.toString()),d=await zd.openEnvironment(T,i.name),A=zd.statDBI(d,i.hash_attribute);i.record_count=A.entryCount}catch(T){Ut.warn(`unable to stat table dbi due to ${T}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(Si,"descTable");function bw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(bw,"getAttrsByPerms");async function Lw(e){let t=eS.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:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Bo,search_value:s,hash_values:[],get_attributes:[sS,x.ID_ATTRIBUTE_STRING,Lr,Bo]},i=await Cs(n);if(i&&i.length<1){let o={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Lr]},_=await gw(o);if(_&&_.length<1)throw li(new Error,di.SCHEMA_NOT_FOUND(e.schema),rS.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Po.isEmpty(c)||c.describe){let u=await Si({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(Lw,"describeSchema")});var Ti=S((Sv,cS)=>{var lv=require("async"),wr=Wt(),dv=p(),{callbackify:oS,promisify:ww}=require("util");cS.exports={setSchemaDataToGlobal:iS,getTableSchema:Dw,getSystemSchema:Pw,setSchemaDataToGlobalAsync:ww(iS)};var _S=hi(),yw=oS(_S.describeAll),Uw=oS(_S.describeTable);function iS(e){yw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=wr),global.hdb_schema=r,e(null,null)})}a(iS,"setSchemaDataToGlobal");function aS(e,t){return e==="system"?wr[t]:global.hdb_schema[e][t]}a(aS,"returnSchema");function Dw(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Mw(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,aS(e,t))}):r(null,aS(e,t))}a(Dw,"getTableSchema");function Mw(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=wr:global.hdb_schema={system:wr},r();return}Uw(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:wr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Mw,"setTableDataToGlobal");function Pw(){return wr}a(Pw,"getSystemSchema")});var Ai=S((hv,lS)=>{"use strict";var Ri=ya(),Fe=g(),Bw=require("util"),mi=Jt(),Hw=Ti(),Ho=p(),{handleHDBError:Dt,hdb_errors:vw}=q(),{HTTP_STATUS_CODES:zt}=vw,Gw=Bw.promisify(Hw.getTableSchema),qw="updated",uS="inserted",ES="upserted";lS.exports={insert:xw,update:Vw,upsert:kw,validation:Fw,flush:$w};async function Fw(e){if(Fe.isEmpty(e))throw new Error("invalid update parameters defined.");if(Fe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Fe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Gw(e.schema,e.table),r=Ri(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Fe.isEmptyOrZeroLength(_[s]))throw Ho.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Fe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ho.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Fe.isEmpty(_[s])&&_[s]!==""&&n.has(Fe.autoCast(_[s]))&&(_.skip=!0),n.add(Fe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Fw,"validation");async function xw(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.createRecords(e);return fi(uS,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(xw,"insertData");async function Vw(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.updateRecords(e);return Fe.isEmpty(s.existing_rows)?fi(qw,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):fi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Vw,"updateData");async function kw(e){if(e.operation!=="upsert")throw Dt(new Error,"invalid operation, must be upsert",zt.INTERNAL_SERVER_ERROR);let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.upsertRecords(e);return fi(ES,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Dt(s,null,null,Ho.ERR,n)}}a(kw,"upsertData");function fi(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===uS?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===ES?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(fi,"returnObject");function $w(e){return mi.flush(e.schema,e.table)}a($w,"flush")});var SS=S((Tv,dS)=>{var Yw=Ke(),Kw={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};dS.exports=function(e){return Yw.validateObject(e,Kw)}});var RS=S((fv,fS)=>{var Ww=Ke(),vo=require("joi"),{hdb_schema_table:hS}=kt(),TS={schema:hS,table:hS},Qw={date:vo.date().iso().required()},Xw={timestamp:vo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};fS.exports=function(e,t){let r=t==="timestamp"?{...TS,...Xw}:{...TS,...Qw},s=vo.object(r);return Ww.validateBySchema(e,s)}});var OS=S((Rv,NS)=>{var Jw=Ke(),mS=require("joi"),{hdb_schema_table:AS}=kt(),Zw=mS.object({schema:AS,table:AS,hash_values:mS.array().required()});NS.exports=function(e){return Jw.validateBySchema(e,Zw)}});var pS=S((mv,gS)=>{"use strict";var Ni=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Ni,"InsertObject");var Oi=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(Oi,"NoSQLSeachObject");var gi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(gi,"DeleteResponseObject");gS.exports={InsertObject:Ni,NoSQLSeachObject:Oi,DeleteResponseObject:gi}});var Fo=S((Av,wS)=>{"use strict";var CS=RS(),zw=OS(),pi=g(),IS=require("moment"),bS=p(),{promisify:jw,callbackify:ey}=require("util"),jt=f(),ty=Ti(),Go=jw(ty.getTableSchema),qo=Jt(),{DeleteResponseObject:ry}=pS(),{handleHDBError:Mt,hdb_errors:sy}=q(),{HDB_ERROR_MSGS:Ii,HTTP_STATUS_CODES:Pt}=sy,ny="records successfully deleted",iy=ey(LS);wS.exports={delete:iy,deleteRecord:LS,deleteFilesBefore:ay,deleteAuditLogsBefore:oy};async function ay(e){let t=CS(e,"date");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(!IS(e.date,IS.ISO_8601).isValid())throw Mt(new Error,Ii.INVALID_DATE,Pt.BAD_REQUEST,jt.LOG_LEVELS.ERROR,Ii.INVALID_DATE,!0);let s=pi.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,s,!0);try{let n=await qo.deleteRecordsBefore(e);if(await Go(e.schema,e.table),bS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(ay,"deleteFilesBefore");async function oy(e){let t=CS(e,"timestamp");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,Ii.INVALID_VALUE("Timestamp"),Pt.BAD_REQUEST,jt.LOG_LEVELS.ERROR,Ii.INVALID_VALUE("Timestamp"),!0);let r=pi.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,r,!0);try{let s=await qo.deleteAuditLogsBefore(e);return await Go(e.schema,e.table),bS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(oy,"deleteAuditLogsBefore");async function LS(e){let t=zw(e);if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=pi.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,r,!0);try{await Go(e.schema,e.table);let s=await qo.deleteRecords(e);return pi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${ny}`),s}catch(s){if(s.message===jt.SEARCH_NOT_FOUND_MESSAGE){let n=new ry;return n.message=jt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(LS,"deleteRecord")});var Ci=S((Nv,DS)=>{var _y=require("crypto"),yS=9;function cy(e){let t=Ey(yS),r=US(e+t);return t+r}a(cy,"createHash");function uy(e,t){let r=e.substr(0,yS),s=r+US(t+r);return e===s}a(uy,"validateHash");function Ey(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(Ey,"generateSalt");function US(e){return _y.createHash("md5").update(e).digest("hex")}a(US,"md5");DS.exports={hash:cy,validate:uy}});var PS=S((Ov,MS)=>{var xo=Ke(),fe={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 ly(e){return fe.password.presence=!0,fe.username.presence=!0,fe.role.presence=!0,fe.active.presence=!0,xo.validateObject(e,fe)}a(ly,"addUserValidation");function dy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,xo.validateObject(e,fe)}a(dy,"alterUserValidation");function Sy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,xo.validateObject(e,fe)}a(Sy,"dropUserValidation");MS.exports={addUserValidation:ly,alterUserValidation:dy,dropUserValidation:Sy}});var Re=S((pv,HS)=>{"use strict";var{platform:gv}=require("os"),hy="nats-server.zip",Vo="nats-server",Ty=process.platform==="win32"?`${Vo}.exe`:Vo,ko="HDB",fy=/^[^\s.,*>]+$/,BS="__request__",Ry=a(e=>`${e}.${BS}`,"REQUEST_SUBJECT"),my={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Ay={HUB:"hub.pid",LEAF:"leaf.pid"},Ny={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Oy={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ko,deliver_subject:"__HDB__.WORKQUEUE"},gy={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ko,deliver_subject:"HDB.SCHEMAQUEUE"},py={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ko,deliver_subject:"HDB.USERQUEUE"},Iy={SUCCESS:"success",ERROR:"error"},Cy={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},by={TXN:"txn",MSGID:"msgid"};HS.exports={NATS_SERVER_ZIP:hy,NATS_SERVER_NAME:Vo,NATS_BINARY_NAME:Ty,PID_FILES:Ay,NATS_CONFIG_FILES:my,SERVER_SUFFIX:Ny,WORK_QUEUE_CONSUMER_NAMES:Oy,SCHEMA_QUEUE_CONSUMER_NAMES:gy,USER_QUEUE_CONSUMER_NAMES:py,NATS_TERM_CONSTRAINTS_RX:fy,REQUEST_SUFFIX:BS,UPDATE_REMOTE_RESPONSE_STATUSES:Iy,CLUSTER_STATUS_STATUSES:Cy,REQUEST_SUBJECT:Ry,SUBJECT_PREFIXES:by}});var GS=S((Iv,vS)=>{"use strict";var Bt=f(),bs=class{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.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(bs,"BaseLicense");var bi=class extends bs{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(bi,"ExtendedLicense");vS.exports={BaseLicense:bs,ExtendedLicense:bi}});var Qo=S((Cv,$S)=>{"use strict";var Ur=require("fs-extra"),qS=Ci(),FS=require("crypto"),Ly=require("moment"),wy=require("uuid").v4,me=p(),Yo=require("path"),yy=g(),Pe=f(),Uy=GS().ExtendedLicense,yr="invalid license key format",Dy="061183",My="mofi25",Py="aes-256-cbc",By=16,Hy=32,xS=Q();xS.initSync();var $o;$S.exports={validateLicense:VS,generateFingerPrint:Gy,licenseSearch:kS,getLicense:xy};function Ko(){return Yo.join(xS.getHdbBasePath(),Pe.LICENSE_KEY_DIR_NAME,Pe.LICENSE_FILE_NAME)}a(Ko,"getLicenseDirPath");function vy(){let e=Ko();return Yo.join(e,Pe.LICENSE_FILE_NAME)}a(vy,"getLicenseFilePath");function Wo(){let e=Ko();return Yo.join(e,Pe.REG_KEY_FILE_NAME)}a(Wo,"getFingerPrintFilePath");async function Gy(){let e=Wo();try{return await Ur.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(Gy,"generateFingerPrint");async function qy(){let e=wy(),t=qS.hash(e),r=Wo();try{await Ur.mkdirp(Ko()),await Ur.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}a(qy,"writeFingerprint");function VS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Pe.STORAGE_TYPES_ENUM.LMDB,api_call:Pe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Pe.RAM_ALLOCATION_ENUM.DEFAULT,version:Pe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Wo(),n=!1;try{n=Ur.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Ur.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(My),_=o[1];_=Buffer.concat([Buffer.from(_)],By);let c=Buffer.concat([Buffer.from(i)],Hy),u=FS.createDecipheriv(Py,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let d=Fy(o[0],i);if(d)E=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(yr),me.error(yr),new Error(yr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(yr),me.error(yr),new Error(yr)}else r.exp_date=E;r.exp_date<Ly().valueOf()&&(r.valid_date=!1),qS.validate(o[1],`${Dy}${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||me.error("Invalid licence"),r}a(VS,"validateLicense");function Fy(e,t){try{let r=FS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}a(Fy,"checkOldLicense");function kS(){let e=new Uy;e.api_call=0;let t=[];try{t=Ur.readFileSync(vy(),"utf-8").split(Pe.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(yy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=VS(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){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Pe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Pe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Pe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Pe.LICENSE_VALUES.API_CALL_DEFAULT),$o=e,e}a(kS,"licenseSearch");async function xy(){return $o||await kS(),$o}a(xy,"getLicense")});var ws=S((bv,nh)=>{"use strict";var QS="username is required",XS="nothing to update, must supply active, role or password to update",JS="password cannot be an empty string",ZS="If role is specified, it cannot be empty.",zS="active must be true or false";nh.exports={addUser:Xy,alterUser:Jy,dropUser:zy,userInfo:jy,listUsers:wi,listUsersExternal:eU,setUsersToGlobal:Ls,findAndValidateUser:sU,getClusterUser:nU,USERNAME_REQUIRED:QS,ALTERUSER_NOTHING_TO_UPDATE:XS,EMPTY_PASSWORD:JS,EMPTY_ROLE:ZS,ACTIVE_BOOLEAN:zS};var jS=Ai(),Vy=Fo(),Jo=Ci(),eh=PS(),th=gs(),Zo=_s(),re=g(),rh=require("validate.js"),w=p(),{promisify:zo}=require("util"),jo=Is(),er=f(),YS=Re(),ky=Jr(),e_=Q(),$y=Qo(),Yy=Wt(),{handleHDBError:ot,hdb_errors:Ky}=q(),{HTTP_STATUS_CODES:_t,AUTHENTICATION_ERROR_MSGS:Xo,HDB_ERROR_MSGS:Dr}=Ky,{UserEventMsg:t_}=Tr(),KS=require("lodash"),sh={username:!0,active:!0,role:!0,password:!0},WS=new Map,Li=zo(th.searchByValue),Wy=zo(th.searchByHash),Qy=zo(Vy.delete);async function Xy(e){let t=rh.cleanAttributes(e,sh),r=eh.addUserValidation(t);if(r)throw ot(new Error,r.message,_t.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 Li(s)}catch(u){throw w.error("There was an error searching for a role in add user"),w.error(u),u}if(!n||n.length<1)throw ot(new Error,Dr.ROLE_NAME_NOT_FOUND(t.role),_t.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ot(new Error,Dr.DUP_ROLES_FOUND(t.role),_t.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=jo.encrypt(t.password)),t.password=Jo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await jS.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await Ls()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw ot(new Error,Dr.USER_ALREADY_EXISTS(t.username),_t.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.ADD_USER,c,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),`${_.username} successfully added`}a(Xy,"addUser");async function Jy(e){let t=rh.cleanAttributes(e,sh);if(re.isEmptyOrZeroLength(t.username))throw new Error(QS);if(re.isEmptyOrZeroLength(t.password)&&re.isEmptyOrZeroLength(t.role)&&re.isEmptyOrZeroLength(t.active))throw new Error(XS);if(!re.isEmpty(t.password)&&re.isEmptyOrZeroLength(t.password.trim()))throw new Error(JS);if(!re.isEmpty(t.active)&&!re.isBoolean(t.active))throw new Error(zS);let r=Zy(t.username);if(!re.isEmpty(t.password)&&!re.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jo.encrypt(t.password)),t.password=Jo.hash(t.password)),t.role==="")throw new Error(ZS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await Li(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Dr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),ot(new Error,c,_t.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Dr.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),ot(new Error,c,_t.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await jS.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await Ls()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.ALTER_USER,i,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),n}a(Jy,"alterUser");function Zy(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Zy,"isClusterUser");async function zy(e){try{let t=eh.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(re.isEmpty(global.hdb_users.get(e.username)))throw ot(new Error,Dr.USER_NOT_EXIST(e.username),_t.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Qy(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await Ls()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.DROP_USER,n,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(zy,"dropUser");async function jy(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 Wy(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}a(jy,"userInfo");async function eU(){let e;try{e=await wi()}catch(t){throw w.error("Got an error listing users."),w.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(eU,"listUsersExternal");async function wi(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=KS.cloneDeep(await Li(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!re.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=KS.cloneDeep(await Li(s))}catch(o){throw w.error("Got an error searching for users."),w.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],tU(_.role),i.set(_.username,_)}return(await $y.getLicense()).enterprise?i:rU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),re.errorizeMessage(e)}return null}a(wi,"listUsers");function tU(e){try{if(!e){w.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(Yy)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}a(tU,"appendSystemTablesToRole");function rU(e){try{if(w.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?(w.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}a(rU,"nonEnterpriseFilter");async function Ls(){try{let e=await wi();global.hdb_users=e}catch(e){throw w.error(e),e}}a(Ls,"setUsersToGlobal");async function sU(e,t,r=!0){global.hdb_users||await Ls();let s=global.hdb_users.get(e);if(!s)throw ot(new Error,Xo.GENERIC_AUTH_FAIL,_t.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ot(new Error,Xo.USER_INACTIVE,_t.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(WS.get(t)===s.password)return n;if(Jo.validate(s.password,t))WS.set(t,s.password);else throw ot(new Error,Xo.GENERIC_AUTH_FAIL,_t.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sU,"findAndValidateUser");async function nU(){let e=await wi(),t=ky.getConfigFromFile(er.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!re.isEmpty(r))return r.decrypt_hash=jo.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+YS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+YS.SERVER_SUFFIX.ADMIN,r}a(nU,"getClusterUser")});var ah=S((Lv,ih)=>{"use strict";var iU=f().OPERATIONS_ENUM,yi=class{constructor(t,r,s,n=void 0){this.operation=iU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(yi,"UpdateObject");ih.exports=yi});var _h=S((wv,oh)=>{"use strict";var aU={OPERATION:"operation",REFRESH:"refresh"},Ui=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Ui,"JWTTokens");var Di=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Di,"JWTRSAKeys");oh.exports={JWTTokens:Ui,TOKEN_TYPE_ENUM:aU,JWTRSAKeys:Di}});var dh=S((yv,lh)=>{"use strict";var Us=require("jsonwebtoken"),r_=require("fs-extra"),s_=g(),xe=f(),{handleHDBError:Ce,hdb_errors:oU}=q(),{HTTP_STATUS_CODES:be,AUTHENTICATION_ERROR_MSGS:Le}=oU,ys=p(),ch=Ci(),a_=ws(),_U=Ai().update,cU=ah(),uU=_s(),{UserEventMsg:EU}=Tr(),Ht=Q();Ht.initSync();var n_=require("path"),{JWTTokens:lU,JWTRSAKeys:dU,TOKEN_TYPE_ENUM:Mi}=_h(),SU=Ht.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hU=Ht.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pi="RS256",i_;lh.exports={createTokens:TU,validateOperationToken:RU,refreshOperationToken:fU,validateRefreshToken:Eh};async function TU(e){if(s_.isEmpty(e)||typeof e!="object")throw Ce(new Error,Le.INVALID_AUTH_OBJECT,be.BAD_REQUEST,void 0,void 0,!0);if(s_.isEmpty(e.username))throw Ce(new Error,Le.USERNAME_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);if(s_.isEmpty(e.password))throw Ce(new Error,Le.PASSWORD_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await a_.findAndValidateUser(e.username,e.password),!t)throw Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ys.error(T),Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bi(),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 uh(i,r.private_key,r.passphrase),_=await Us.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hU,algorithm:Pi,subject:Mi.REFRESH}),c=ch.hash(_),u=new cU(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await _U(u)}catch(T){ys.error(T),l=T}if(l!==void 0||E.skipped_hashes.length>0)throw Ce(new Error,Le.REFRESH_TOKEN_SAVE_FAILED,be.INTERNAL_SERVER_ERROR);return uU.signalUserChange(new EU(process.pid)),new lU(o,_)}a(TU,"createTokens");async function uh(e,t,r){return await Us.sign(e,{key:t,passphrase:r},{expiresIn:SU,algorithm:Pi,subject:Mi.OPERATION})}a(uh,"signOperationToken");async function Bi(){if(i_===void 0)try{let e=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PASSPHRASE_NAME),t=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await r_.readFile(e)).toString(),n=(await r_.readFile(t)).toString(),i=(await r_.readFile(r)).toString();i_=new dU(i,n,s)}catch(e){throw ys.error(e),Ce(new Error,Le.NO_ENCRYPTION_KEYS,be.INTERNAL_SERVER_ERROR)}return i_}a(Bi,"getJWTRSAKeys");async function fU(e){if(!e)throw Ce(new Error,Le.INVALID_BODY,be.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ce(new Error,Le.REFRESH_TOKEN_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);await Eh(e.refresh_token);let t=await Bi(),r=await Us.decode(e.refresh_token);return{operation_token:await uh({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(fU,"refreshOperationToken");async function RU(e){try{let t=await Bi(),r=await Us.verify(e,t.public_key,{algorithms:Pi,subject:Mi.OPERATION});return await a_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ys.warn(t),t.name&&t.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}}a(RU,"validateOperationToken");async function Eh(e){let t;try{let r=await Bi(),s=await Us.verify(e,r.public_key,{algorithms:Pi,subject:Mi.REFRESH});t=await a_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ys.warn(r),r.name&&r.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}if(!ch.validate(t.refresh_token,e))throw Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED);return t}a(Eh,"validateRefreshToken")});var fh=S((Dv,Th)=>{"use strict";var mU=SS(),Mr=require("passport"),AU=require("passport-local").Strategy,NU=require("passport-http").BasicStrategy,OU=require("util"),gU=ws(),hh=OU.callbackify(gU.findAndValidateUser),Uv=Be(),pU=f(),Sh=dh();Mr.use(new AU(function(e,t,r){hh(e,t,r)}));Mr.use(new NU(function(e,t,r){hh(e,t,r)}));Mr.serializeUser(function(e,t){t(null,e)});Mr.deserializeUser(function(e,t){t(null,e)});function IU(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Mr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===pU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Sh.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Sh.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Mr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(IU,"authorize");function CU(e,t){let r=mU(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(CU,"checkPermissions");Th.exports={authorize:IU,checkPermissions:CU}});var Ds=S((Mv,Rh)=>{"use strict";var Hi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hi,"Node");var vi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(vi,"NodeSubscription");Rh.exports={Node:Hi,NodeSubscription:vi}});var Ah=S((Pv,mh)=>{"use strict";var bU=f().OPERATIONS_ENUM,Gi=class{constructor(t,r,s,n=void 0){this.operation=bU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gi,"UpsertObject");mh.exports=Gi});var Ms=S((Bv,Nh)=>{"use strict";var qi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(qi,"RemotePayloadObject");var Fi=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(Fi,"RemotePayloadSubscription");Nh.exports={RemotePayloadObject:qi,RemotePayloadSubscription:Fi}});var gh=S((Hv,Oh)=>{"use strict";var xi=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(xi,"TableSizeObject");Oh.exports=xi});var bh=S((vv,Ch)=>{"use strict";var LU=gh(),ph=require("path"),Ih=k(),wU=Se(),Pr=F(),yU=p();Ch.exports=UU;async function UU(e){let t=new LU;try{let r=ph.join(Ih.getBaseSchemaPath(),e.schema.toString()),s=await Pr.openEnvironment(r,e.name),n=Pr.statDBI(s,e.hash_attribute),i=ph.join(Ih.getTransactionAuditStorePath(),e.schema.toString()),o=await Pr.openEnvironment(i,e.name,!0),_=Pr.statDBI(o,wU.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Pr.environmentDataSize(r,e.name),u=await Pr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){yU.warn(`unable to stat table dbi due to ${r}`)}return t}a(UU,"lmdbGetTableSize")});var wh=S((Gv,Lh)=>{"use strict";var DU=f(),Vi=class{constructor(t){this.operator=DU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Vi,"SystemInformationOperation");Lh.exports=Vi});var Uh=S((qv,yh)=>{"use strict";var ki=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(ki,"SystemInformationObject");yh.exports=ki});var Mh=S((xv,Dh)=>{"use strict";var _e=require("systeminformation"),Br=p(),MU=f(),PU=bh(),BU=hi(),HU=Q();HU.initSync();var Fv=wh(),vU=Uh(),$i;Dh.exports={getHDBProcessInfo:u_,getNetworkInfo:l_,getDiskInfo:E_,getMemoryInfo:c_,getCPUInfo:__,getTimeInfo:o_,getSystemInformation:d_,systemInformation:GU,getTableSize:S_};function o_(){return _e.time()}a(o_,"getTimeInfo");async function __(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await _e.cpu();E.cpu_speed=await _e.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:T,raw_currentload_irq:d,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:b,cpus:Ae,...v}=await _e.currentLoad();return v.cpus=[],Ae.forEach(W=>{let{raw_load:$e,raw_load_idle:$s,raw_load_irq:V_,raw_load_nice:k_,raw_load_system:$_,raw_load_user:Ys,...Ot}=W;v.cpus.push(Ot)}),E.current_load=v,E}catch(e){return Br.error(`error in getCPUInfo: ${e}`),{}}}a(__,"getCPUInfo");async function c_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await _e.mem();return n}catch(e){return Br.error(`error in getMemoryInfo: ${e}`),{}}}a(c_,"getMemoryInfo");async function u_(){let e={core:[],clustering:[]};try{return(await _e.processes()).list.forEach(r=>{r.params.includes(MU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Br.error(`error in getHDBProcessInfo: ${t}`),e}}a(u_,"getHDBProcessInfo");async function E_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await _e.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await _e.fsStats();return e.read_write=u,e.size=await _e.fsSize(),e}catch(t){return Br.error(`error in getDiskInfo: ${t}`),e}}a(E_,"getDiskInfo");async function l_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _e.networkInterfaceDefault(),e.latency=await _e.inetChecksite("google.com"),(await _e.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...T}=s;e.interfaces.push(T)}),(await _e.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await _e.networkConnections(),e}catch(t){return Br.error(`error in getNetworkInfo: ${t}`),e}}a(l_,"getNetworkInfo");async function d_(){if($i!==void 0)return $i;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await _e.osInfo();e=_;let c=await _e.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,$i=e,$i}catch(t){return Br.error(`error in getSystemInformation: ${t}`),e}}a(d_,"getSystemInformation");async function S_(){let e=[],t=await BU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await PU(s));return e}a(S_,"getTableSize");async function GU(e){let t=new vU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await d_(),t.time=o_(),t.cpu=await __(),t.memory=await c_(),t.disk=await E_(),t.network=await l_(),t.harperdb_processes=await u_(),t.table_size=await S_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await d_();break;case"time":t.time=o_();break;case"cpu":t.cpu=await __();break;case"memory":t.memory=await c_();break;case"disk":t.disk=await E_();break;case"network":t.network=await l_();break;case"harperdb_processes":t.harperdb_processes=await u_();break;case"table_size":t.table_size=await S_();break;default:break}return t}a(GU,"systemInformation")});var h_=S((Vv,qU)=>{qU.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 Bh=S((Yv,Ph)=>{"use strict";var kv=require("fs-extra"),$v=p();Ph.exports={version:FU,printVersion:VU,nodeVersion:xU};var vt=h_();function FU(){if(vt)return vt.version}a(FU,"version");function xU(){if(vt&&vt.engines&&vt.engines["preferred-node"])return vt.engines["preferred-node"]}a(xU,"nodeVersion");function VU(){vt&&console.log(`HarperDB Version ${vt.version}`)}a(VU,"printVersion")});var Hr=S((Qv,qh)=>{"use strict";var kU=Ai(),T_=g(),f_=require("util"),tr=f(),Hh=Q();Hh.initSync();var $U=fh(),vh=gs(),{Node:Kv,NodeSubscription:Wv}=Ds(),YU=hs(),KU=Ah(),{RemotePayloadObject:WU,RemotePayloadSubscription:QU}=Ms(),{handleHDBError:XU,hdb_errors:JU}=q(),{HTTP_STATUS_CODES:ZU,HDB_ERROR_MSGS:zU}=JU,jU=ht(),eD=Mh(),tD=Bh(),rD=f_.promisify($U.authorize),sD=f_.promisify(vh.searchByHash),nD=f_.promisify(vh.searchByValue);qh.exports={authHeaderToUser:iD,isEmpty:aD,getNodeRecord:oD,upsertNodeRecord:_D,buildNodePayloads:cD,checkClusteringEnabled:uD,getAllNodeRecords:ED,getSystemInfo:lD,reverseSubscription:Gh};async function iD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await rD(t,null),e}a(iD,"authHeaderToUser");function aD(e){return e==null}a(aD,"isEmpty");async function oD(e){let t=new YU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return sD(t)}a(oD,"getNodeRecord");async function _D(e){let t=new KU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return kU.upsert(t)}a(_D,"upsertNodeRecord");function Gh(e){if(T_.isEmpty(e.subscribe)||T_.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(Gh,"reverseSubscription");function cD(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=T_.getTableHashAttribute(c,u),{subscribe:l,publish:T}=Gh(_),d=new QU(c,u,E,T,l,_.start_time);n.push(d)}return new WU(r,t,n,s)}a(cD,"buildNodePayloads");function uD(){if(!Hh.get(tr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw XU(new Error,zU.CLUSTERING_NOT_ENABLED,ZU.BAD_REQUEST,void 0,void 0,!0)}a(uD,"checkClusteringEnabled");async function ED(){let e=new jU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return nD(e)}a(ED,"getAllNodeRecords");async function lD(){let e=await eD.getSystemInformation();return{hdb_version:tD.version(),node_version:e.node_version,platform:e.platform}}a(lD,"getSystemInfo")});var xh=S((Xv,Fh)=>{"use strict";var dD=Jt();Fh.exports={writeTransaction:SD};function SD(e,t,r){return dD.writeTransaction(e,t,r)}a(SD,"writeTransaction")});var Gt=S((aG,oT)=>{"use strict";var Rt=Q();Rt.initSync();var hD=require("fs-extra"),TD=require("semver"),Gs=require("path"),{monotonicFactory:fD}=require("ulidx"),RD=fD(),kh=require("util"),$h=require("child_process"),mD=kh.promisify($h.exec),AD=$h.spawn,V=Re(),K=f(),g_=g(),mt=p(),Yi=Is(),ND=xh(),Ps=Jr(),{encode:A_,decode:Yh}=require("msgpackr"),{isEmpty:rr}=g_,Kh=ws(),Jv=hs(),OD=gs(),Zv=kh.promisify(OD.searchByHash),{connect:gD,StorageType:Wh,RetentionPolicy:Qh,AckPolicy:Xh,DeliverPolicy:N_,NatsConnection:zv,JetStreamManager:jv,JetStreamClient:eG,StringCodec:tG,JSONCodec:pD,createInbox:p_,StreamSource:rG,headers:ID,toJsMsg:CD,nuid:sG,JetStreamOptions:nG,ErrorCode:Vh,nanos:iG}=require("nats"),{PACKAGE_ROOT:bD}=f(),LD=h_(),Jh=pD(),wD="clustering",yD=LD.engines[V.NATS_SERVER_NAME],UD=Gs.join(bD,"dependencies"),O_=Gs.join(UD,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),R_,m_,Bs,Hs,vs,je;oT.exports={runCommand:Zh,checkNATSServerInstalled:DD,createConnection:I_,getConnection:Ki,getJetStreamManager:vr,getJetStream:zh,getNATSReferences:Ve,getServerList:PD,createLocalStream:C_,listStreams:jh,deleteLocalStream:BD,getServerConfig:qs,listRemoteStreams:HD,viewStream:vD,publishToStream:GD,createWorkQueueStream:qD,addSourceToWorkStream:eT,request:FD,removeSourceFromWorkStream:rT,reloadNATS:b_,reloadNATSHub:xD,reloadNATSLeaf:VD,extractServerName:tT,requestErrorHandler:kD,updateWorkStream:$D,createLocalTableStream:nT,createTableStreams:YD,purgeTableStream:iT,purgeSchemaTableStreams:KD,getStreamInfo:WD,updateNodeNameLocalStreams:QD,closeConnection:MD};async function Zh(e,t=void 0){let{stdout:r,stderr:s}=await mD(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 he.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Pa(n);let i=n.toJSON();pe=Yt(i),he.trace(jN)}}a(hu,"initConfig");function Pa(e){let t=e.toJSON(),r=YN(t);if(r.error)throw un.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(Pa,"validateConfig");function iO(e,t){pe===void 0&&(pe={});let r=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){he.trace(`Unable to update config object because config param '${e}' does not exist`);return}pe[r.toLowerCase()]=t}a(iO,"updateConfigObject");function Tu(e,t,r=void 0,s=!1,n=!1){pe===void 0&&hu();let i=Su($.CONFIG_PARAM_MAP.hdb_root),o=Er.join(i,$.HDB_CONFIG_FILE),_=lr(o);if(r===void 0){let E=$.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),T=Ma(E,t);_.setIn([...l],T)}else for(let E in r){let l=$.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let T=l.split("_"),d=Ma(l,r[E]);try{_.setIn([...T],d)}catch(A){he.error(A)}}}Pa(_);let c=_.getIn(["rootPath"]),u=Er.join(c,$.HDB_CONFIG_FILE);if(s===!0)try{let E=Er.join(c,"backup",`${$.HDB_CONFIG_FILE}.bak`);We.copySync(o,E),he.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){he.error(eO),he.error(E)}We.writeFileSync(u,String(_)),n&&(pe=Yt(_.toJSON())),he.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Tu,"updateConfigValue");function Yt(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=Yt(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(Yt,"flattenConfig");function Ma(e,t){if(e===$.CONFIG_PARAMS.CLUSTERING_NODENAME||e===$.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(WN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||He.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 He.autoCast(t)}a(Ma,"castConfigValue");function aO(){let e=He.getPropsFilePath(),r=ln(e).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return lr(r).toJSON()}a(aO,"getConfiguration");async function oO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Tu(void 0,void 0,n,!0),rO}catch(i){throw typeof i=="string"||i instanceof String?XN(i,i,JN.BAD_REQUEST,void 0,void 0,!0):i}}a(oO,"setConfiguration");function Ba(){let e=He.getPropsFilePath();try{We.accessSync(e,We.constants.F_OK|We.constants.R_OK)}catch(n){throw he.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=ln(e).get($.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return lr(r).toJSON()}a(Ba,"readConfigFile");function lr(e){return KN.parseDocument(We.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lr,"parseYamlDoc");function _O(){let e=Ba(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=He.isEmptyOrZeroLength(t)?[]:t;let r=lu(t);if(r)throw un.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=He.isEmptyOrZeroLength(s)?[]:s;let n=lu(s);if(n)throw un.CONFIG_VALIDATION(n.message);if(!He.isEmptyOrZeroLength(s)&&!He.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!He.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw un.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(_O,"getClusteringRoutes");function fu(e){let t=ln(e);pe={};for(let r in $.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(He.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=$.CONFIG_PARAM_MAP[r].toLowerCase();n===$.CONFIG_PARAMS.LOGGING_ROOT?pe[n]=Er.dirname(s):pe[n]=s}return pe}a(fu,"initOldConfig");function cO(e){let t=Ba();return QN.get(t,e.replaceAll("_","."))}a(cO,"getConfigFromFile")});var Q=S((mB,Au)=>{"use strict";var Ha=require("fs-extra"),nt=require("path"),uO=require("os"),EO=require("properties-reader"),Zr=p(),dr=g(),I=f(),dn=Jr(),lO="Error initializing environment manager",Sn="BOOT_PROPS_FILE_PATH",mu=!1,dO={[I.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},dt={};Au.exports={BOOT_PROPS_FILE_PATH:Sn,getHdbBasePath:SO,setHdbBasePath:hO,get:TO,initSync:RO,setProperty:P,initTestEnvironment:mO};function SO(){return dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(SO,"getHdbBasePath");function hO(e){dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hO,"setHdbBasePath");function TO(e){let t=dn.getConfigValue(e);return t===void 0?dt[e]:t}a(TO,"get");function P(e,t){dO[e]&&(dt[e]=t),dn.updateConfigObject(e,t)}a(P,"setProperty");function fO(){let e;try{e=dr.getPropsFilePath(),Ha.accessSync(e,Ha.constants.F_OK|Ha.constants.R_OK),mu=!0;let t=EO(e);return dt[I.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(I.HDB_SETTINGS_NAMES.INSTALL_USER),dt[I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),dt[Sn]=e,!0}catch{return Zr.trace(`Environment manager found no properties file at ${e}`),!1}}a(fO,"doesPropFileExist");function RO(e=!1){try{(mu||fO())&&(dn.initConfig(e),dt[I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dn.getConfigValue(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zr.error(lO),Zr.error(t),console.error(t),process.exit(1)}}a(RO,"initSync");function mO(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=nt.join(__dirname,"../../","unitTests");dt[Sn]=nt.join(c,"hdb_boot_properties.file"),P(I.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,nt.join(c,"settings.test")),P(I.HDB_SETTINGS_NAMES.INSTALL_USER,uO.userInfo().username),P(I.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,nt.join(c,"envDir","utility","keys","privateKey.pem")),P(I.HDB_SETTINGS_NAMES.CERT_KEY,nt.join(c,"envDir","utility","keys","certificate.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,nt.join(c,"envDir","utility","keys","privateKey.pem")),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,nt.join(c,"envDir","utility","keys","certificate.pem")),P(I.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(I.HDB_SETTINGS_NAMES.LOG_PATH_KEY,nt.join(c,"envDir","log")),P(I.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(I.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,nt.join(c,"envDir")),P(I.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,dr.isEmpty(n)?!0:n),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,dr.isEmpty(n)?!0:n),P(I.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(I.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,dr.isEmpty(i)?!1:i),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,dr.isEmpty(i)?!1:i),P(I.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(I.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,nt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(I.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,dr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(I.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(I.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(I.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(I.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Sn}. Please check your boot props and settings files`;Zr.fatal(r),Zr.error(t)}}a(mO,"initTestEnvironment")});var F=S((NB,Du)=>{"use strict";var va=require("lmdb"),ve=require("fs-extra"),Qe=require("path"),Tn=$t(),Nu=p(),ae=Be().LMDB_ERRORS_ENUM,fn=nu(),Ga=au(),Ou=_u(),Ct=Se(),AB=f(),zr=Q();zr.initSync();var gu=zr.get("STORAGE_WRITEASYNC")===!0||zr.get("STORAGE_WRITEASYNC")==="true"||zr.get("STORAGE_WRITEASYNC")==="TRUE",pu=zr.get("STORAGE_OVERLAPPINGSYNC"),Iu=1024*1024*1024,Cu=1e4,bu=1e3,Xe=Ct.INTERNAL_DBIS_NAME,Lu=Ct.DBI_DEFINITION_NAME,AO="data.mdb",NO="lock.mdb",jr=".mdb",OO="-lock",hn=class{constructor(t,r,s=!1){this.dbi=Ge(t,r),this.key_type=this.dbi[Ct.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ct.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new va.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(hn,"TransactionCursor");function qa(e,t){if(e===void 0)throw new Error(ae.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ae.ENV_NAME_REQUIRED)}a(qa,"pathEnvNameValidation");async function Fa(e,t,r=!0){try{await ve.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ae.INVALID_BASE_PATH):s}try{let s=Qe.join(e,t+jr);return await ve.access(s,ve.constants.R_OK|ve.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ve.access(Qe.join(e,t,AO),ve.constants.R_OK|ve.constants.F_OK),Qe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ae.INVALID_ENVIRONMENT)}else throw new Error(ae.INVALID_ENVIRONMENT);throw s}}a(Fa,"validateEnvironmentPath");function Rn(e,t){if(Tn.validateEnv(e),t===void 0)throw new Error(ae.DBI_NAME_REQUIRED)}a(Rn,"validateEnvDBIName");async function gO(e,t,r=!1,s=!1){qa(e,t),t=t.toString();try{return await Fa(e,t,s),xa(e,t,r)}catch(n){if(n.message===ae.INVALID_ENVIRONMENT){let i=Qe.join(e,t);await ve.mkdirp(s?i:e);let o=new Ou(s?i:i+jr,Iu,Cu,bu,!1,gu,pu),_=va.open(o);_.dbis=Object.create(null);let c=new Ga(!1);_.openDB(Xe,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Va(e,t,r);return _[Ct.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(gO,"createEnvironment");async function pO(e,t,r,s=!0){let n=await xa(e,t);if(r===void 0)throw new Error(ae.DESTINATION_PATH_REQUIRED);try{await ve.access(Qe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ae.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(pO,"copyEnvironment");async function xa(e,t,r=!1){qa(e,t),t=t.toString();let s=Va(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 Fa(e,t),i=Qe.join(e,t+jr),o=n!=i,_=new Ou(n,Iu,Cu,bu,o,gu,pu),c=va.open(_);c.dbis=Object.create(null);let u=yu(c);for(let E=0;E<u.length;E++)Ge(c,u[E]);return c[Ct.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(xa,"openEnvironment");async function IO(e,t,r=!1){qa(e,t),t=t.toString();let s=Qe.join(e,t+jr),n=await Fa(e,t);if(global.lmdb_map!==void 0){let i=Va(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await wu(o),delete global.lmdb_map[i]}}await ve.remove(n),await ve.remove(n===s?n+OO:Qe.join(Qe.dirname(n),NO))}a(IO,"deleteEnvironment");async function wu(e){Tn.validateEnv(e);let t=e[Ct.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(wu,"closeEnvironment");function Va(e,t,r=!1){let n=`${Qe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Va,"getCachedEnvironmentName");function CO(e){Tn.validateEnv(e);let t=Object.create(null),r=Ge(e,Xe);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Xe)try{t[s]=Object.assign(new fn,n)}catch{Nu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(CO,"listDBIDefinitions");function yu(e){Tn.validateEnv(e);let t=[],r=Ge(e,Xe);for(let{key:s}of r.getRange({start:!1}))s!==Xe&&t.push(s);return t}a(yu,"listDBIs");function bO(e,t){let s=Ge(e,Xe).getEntry(t),n=new fn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Nu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(bO,"getDBIDefinition");function Uu(e,t,r,s=!1){if(Rn(e,t),t=t.toString(),t===Xe)throw new Error(ae.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ge(e,t)}catch(n){if(n.message===ae.DBI_DOES_NOT_EXIST){let i=new Ga(r,s===!0),o=e.openDB(t,i),_=new fn(r===!0,s);return o[Lu]=_,Ge(e,Xe).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Uu,"createDBI");function Ge(e,t){if(Rn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Xe?r=bO(e,t):r=new fn,r===void 0)throw new Error(ae.DBI_DOES_NOT_EXIST);let s;try{let n=new Ga(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(ae.DBI_DOES_NOT_EXIST):n}return s[Lu]=r,e.dbis[t]=s,s}a(Ge,"openDBI");function LO(e,t){Rn(e,t),t=t.toString();let r=Ge(e,t),s=r.getStats();return r[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(LO,"statDBI");async function wO(e,t){try{let r=Qe.join(e,t+jr);return(await ve.stat(r)).size}catch{throw new Error(ae.INVALID_ENVIRONMENT)}}a(wO,"environmentDataSize");function yO(e,t){if(Rn(e,t),t=t.toString(),t===Xe)throw new Error(ae.CANNOT_DROP_INTERNAL_DBIS_NAME);Ge(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ge(e,Xe).removeSync(t)}a(yO,"dropDBI");function UO(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ge(e,n)}catch(i){if(i.message===ae.DBI_DOES_NOT_EXIST)Uu(e,n,n!==t,n===t);else throw i}}}a(UO,"initializeDBIs");Du.exports={openDBI:Ge,openEnvironment:xa,createEnvironment:gO,listDBIs:yu,listDBIDefinitions:CO,createDBI:Uu,dropDBI:yO,statDBI:LO,deleteEnvironment:IO,initializeDBIs:UO,TransactionCursor:hn,environmentDataSize:wO,copyEnvironment:pO,closeEnvironment:wu}});var Pu=S((OB,Mu)=>{"use strict";var mn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(mn,"InsertRecordsResponseObject");Mu.exports=mn});var Hu=S((gB,Bu)=>{"use strict";var An=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(An,"UpdateRecordsResponseObject");Bu.exports=An});var Gu=S((pB,vu)=>{"use strict";var Nn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Nn,"UpsertRecordsResponseObject");vu.exports=Nn});var Sr=S((LB,Fu)=>{"use strict";var DO=F(),MO=Pu(),PO=Hu(),BO=Gu(),ts=$t(),es=Be().LMDB_ERRORS_ENUM,HO=Se(),bt=f(),vO=g(),GO=require("uuid"),IB=require("lmdb"),{handleHDBError:qO,hdb_errors:FO}=q(),{OVERFLOW_MARKER:CB,MAX_SEARCH_KEY_LENGTH:bB}=HO,ka=bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kt=bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xO(e,t,r,s,n=!0){Wa(e,t,r,s),$a(e,t,r);let i=new MO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];qu(u,!0,n);let E=VO(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Ya(o,_,s,i)}a(xO,"insertRecords");function VO(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][bt.FUNC_VAL],s[o]=_)}let c=ts.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[Kt])})}a(VO,"insertRecord");function kO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(kO,"removeSkippedRecords");function qu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Kt]))&&(e[Kt]=s),t===!0?(r===!0||!Number.isInteger(e[ka]))&&(e[ka]=s):delete e[ka]}a(qu,"setTimestamps");function $a(e,t,r){r.indexOf(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),DO.initializeDBIs(e,t,r)}a($a,"initializeTransaction");async function $O(e,t,r,s,n=!0){Wa(e,t,r,s),$a(e,t,r);let i=new PO,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],T;try{T=Ka(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(T),c.push(l)}return Ya(_,c,s,i,o)}a($O,"updateRecords");async function YO(e,t,r,s,n=!0){try{Wa(e,t,r,s)}catch(c){throw qO(c,c.message,FO.HTTP_STATUS_CODES.BAD_REQUEST)}$a(e,t,r);let i=new BO,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;vO.isEmpty(u[t])?(E=GO.v4(),u[t]=E):E=u[t];let l=Ka(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Ya(o,_,s,i)}a(YO,"upsertRecords");async function Ya(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=ts.getMicroTime(),kO(r,n),s}a(Ya,"finalizeWrite");function Ka(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(qu(r,!E,o),Number.isInteger(r[Kt])&&u[Kt]>r[Kt])return!1;E&&n.original_records.push(u);let l,T=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],b=e.dbis[A];if(b===void 0)continue;let Ae=u[A];if(typeof N=="function"){let W=N([[u]]);Array.isArray(W)&&(N=W[0][bt.FUNC_VAL],r[A]=N)}if(N===Ae)continue;let v=ts.getIndexedValues(Ae);if(v)for(let W=0,$e=v.length;W<$e;W++)b.remove(v[W],s);if(v=ts.getIndexedValues(N),v)for(let W=0,$e=v.length;W<$e;W++)b.put(v[W],s)}let d=Object.assign({},u,r);_.put(s,d,d[Kt])},"do_put");return c?l=_.ifVersion(s,c.version,T):l=_.ifNoExists(s,T),l.then(d=>d?!0:Ka(e,t,r,s,n,i,o))}a(Ka,"updateUpsertRecord");function KO(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(es.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(es.WRITE_ATTRIBUTES_REQUIRED):new Error(es.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(KO,"validateBasic");function Wa(e,t,r,s){if(KO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(es.RECORDS_REQUIRED):new Error(es.RECORDS_MUST_BE_ARRAY)}a(Wa,"validateWrite");Fu.exports={insertRecords:xO,updateRecords:$O,upsertRecords:YO}});var k=S((wB,Vu)=>{"use strict";var Qa=f(),hr=Q(),Xa=require("path");hr.initSync();var On,gn,pn;function xu(){if(On!==void 0)return On;if(hr.getHdbBasePath()!==void 0)return On=Xa.join(hr.getHdbBasePath(),Qa.SCHEMA_DIR_NAME),On}a(xu,"getBaseSchemaPath");function WO(){if(gn!==void 0)return gn;if(hr.getHdbBasePath()!==void 0)return gn=Xa.join(xu(),Qa.SYSTEM_SCHEMA_NAME),gn}a(WO,"getSystemSchemaPath");function QO(){if(pn!==void 0)return pn;if(hr.getHdbBasePath()!==void 0)return pn=Xa.join(hr.getHdbBasePath(),Qa.TRANSACTIONS_DIR_NAME),pn}a(QO,"getTransactionAuditStorePath");Vu.exports={getBaseSchemaPath:xu,getSystemSchemaPath:WO,getTransactionAuditStorePath:QO}});var Wt=S((yB,XO)=>{XO.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 In=S((UB,ku)=>{var{common_validators:Lt}=kt(),rs=Ke(),Je="is required",G={schema:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},table:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length},hash_attribute:{presence:!0,format:Lt.schema_format,length:Lt.schema_length}};function ss(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(ss,"makeAttributesStrings");function JO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence=!1,G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(JO,"schema_object");function ZO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(ZO,"table_object");function zO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence={message:Je},rs.validateObject(e,G)}a(zO,"create_table_object");function jO(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence={message:Je},G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(jO,"attribute_object");function eg(e){return e=ss(e),G.schema.presence={message:Je},G.table.presence={message:Je},G.attribute.presence=!1,G.hash_attribute.presence=!1,rs.validateObject(e,G)}a(eg,"describe_table");function tg(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(tg,"validateTableResidence");ku.exports={schema_object:JO,create_table_object:zO,table_object:ZO,attribute_object:jO,describe_table:eg,validateTableResidence:tg}});var Yu=S((DB,$u)=>{"use strict";var rg=require("uuid"),Cn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||rg.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Cn,"CreateAttributeObject");$u.exports=Cn});var Ln=S((MB,Ku)=>{"use strict";var sg=Yu(),bn=class extends sg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(bn,"LMDBCreateAttributeObject");Ku.exports=bn});var Qu=S((PB,Wu)=>{"use strict";Wu.exports=ig;var ng="inserted";function ig(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===ng?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(ig,"returnObject")});var wn=S((BB,Ju)=>{"use strict";var ag=f(),Ja=F(),og=Sr(),{getSystemSchemaPath:_g,getBaseSchemaPath:cg}=k(),ug=require("path"),Eg=Wt(),lg=In(),dg=Ln(),Sg=Qu(),{handleHDBError:hg,hdb_errors:Tg}=q(),fg=g(),Za=Eg.hdb_attribute,Xu=[];for(let e=0;e<Za.attributes.length;e++)Xu.push(Za.attributes[e].attribute);var Rg="inserted";Ju.exports=mg;async function mg(e){let t=lg.attribute_object(e);if(t)throw hg(new Error,t.message,Tg.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=fg.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 dg(e.schema,e.table,e.attribute,e.id);try{let n=await Ja.openEnvironment(ug.join(cg(),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}`);Ja.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Ja.openEnvironment(_g(),ag.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await og.insertRecords(i,Za.hash_attribute,Xu,[s]);return Sg(Rg,o,{records:[s]},_)}catch(n){throw n}}a(mg,"lmdbCreateAttribute")});var yn=S((vB,zu)=>{"use strict";var St=g(),Zu=p(),HB=ya();zu.exports=Ag;function Ag(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(St.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&St.isEmptyOrZeroLength(o[r]))throw Zu.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!St.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Zu.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!St.isEmpty(o[r])&&o[r]!==""&&s.has(St.autoCast(o[r]))&&(o.skip=!0),s.add(St.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Ag,"insertUpdateValidate")});var Dn=S((GB,ju)=>{"use strict";var Ng=f().OPERATIONS_ENUM,Un=class{constructor(t,r,s,n,i=void 0){this.operation=Ng.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Un,"InsertObject");ju.exports=Un});var Pn=S((FB,eE)=>{"use strict";var qB=Dn(),Mn=f(),ja=g(),za=p(),Og=require("uuid"),{handleHDBError:ns,hdb_errors:gg}=q(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:as}=gg;eE.exports=pg;function pg(e,t,r){for(let n=0;n<t.length;n++)Ig(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Cg(i,r,e.operation)}}a(pg,"processRows");function Ig(e){if(Buffer.byteLength(String(e))>Mn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ns(new Error,is.ATTR_NAME_LENGTH_ERR(e),as.BAD_REQUEST,void 0,void 0,!0);if(ja.isEmptyOrZeroLength(e)||ja.isEmpty(e.trim()))throw ns(new Error,is.ATTR_NAME_NULLISH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(Ig,"validateAttribute");function Cg(e,t,r){if(!e.hasOwnProperty(t)||ja.isEmptyOrZeroLength(e[t])){if(r===Mn.OPERATIONS_ENUM.INSERT||r===Mn.OPERATIONS_ENUM.UPSERT){e[t]=Og.v4();return}throw za.error("Update transaction aborted due to record with no hash value:",e),ns(new Error,is.RECORD_MISSING_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Mn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw za.error(e),ns(new Error,is.HASH_VAL_LENGTH_ERR,as.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw za.error(e),ns(new Error,is.INVALID_FORWARD_SLASH_IN_HASH_ERR,as.BAD_REQUEST,void 0,void 0,!0)}a(Cg,"validateHash")});var rE=S((xB,tE)=>{"use strict";var Bn=class{constructor(t,r){this.type=t,this.message=r}};a(Bn,"IPCEventObject");tE.exports=Bn});var Tr=S((VB,sE)=>{"use strict";var bg=p(),eo=g(),Lg=f(),{IPC_ERRORS:os}=Be();sE.exports={sendIpcEvent:wg,validateEvent:yg,SchemaEventMsg:Ug,UserEventMsg:Dg};function wg(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):bg.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(wg,"sendIpcEvent");function yg(e){if(typeof e!="object")return os.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||eo.isEmpty(e.type))return os.MISSING_TYPE;if(!e.hasOwnProperty("message")||eo.isEmpty(e.message))return os.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eo.isEmpty(e.message.originator))return os.MISSING_ORIGIN;if(Lg.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return os.INVALID_EVENT(e.type)}a(yg,"validateEvent");function Ug(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(Ug,"SchemaEventMsg");function Dg(e){this.originator=e}a(Dg,"UserEventMsg")});var _s=S(($B,oE)=>{"use strict";var nE=f(),kB=g(),Hn=p(),iE=rE(),{sendIpcEvent:aE}=Tr();function Mg(e){try{Hn.trace("signalSchemaChange called with message:",e);let t=new iE(nE.IPC_EVENT_TYPES.SCHEMA,e);aE(t)}catch(t){Hn.error(t)}}a(Mg,"signalSchemaChange");function Pg(e){try{Hn.trace("signalUserChange called with message:",e);let t=new iE(nE.IPC_EVENT_TYPES.USER,e);aE(t)}catch(t){Hn.error(t)}}a(Pg,"signalUserChange");oE.exports={signalSchemaChange:Mg,signalUserChange:Pg}});var vn=S((YB,cE)=>{"use strict";var _E=g(),Bg=f(),Hg=p(),vg=wn(),Gg=Ln(),qg=_s(),{SchemaEventMsg:Fg}=Tr(),xg="already exists in";cE.exports=Vg;async function Vg(e,t,r){try{if(_E.isEmptyOrZeroLength(r))return r;let s=[];_E.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 kg(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(Vg,"lmdbCheckForNewAttributes");async function kg(e,t,r,s){let n=new Gg(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await $g(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(xg))Hg.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(kg,"createNewAttribute");async function $g(e){let t;try{return t=await vg(e),qg.signalSchemaChange(new Fg(process.pid,Bg.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a($g,"createAttribute")});var fr=S((KB,uE)=>{"use strict";var Gn=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(Gn,"LMDBTransactionObject");uE.exports=Gn});var lE=S((WB,EE)=>{"use strict";var Yg=fr(),Kg=f().OPERATIONS_ENUM,qn=class extends Yg{constructor(t,r,s,n,i=void 0){super(Kg.INSERT,r,s,n,i),this.records=t}};a(qn,"LMDBInsertTransactionObject");EE.exports=qn});var SE=S((QB,dE)=>{"use strict";var Wg=fr(),Qg=f().OPERATIONS_ENUM,Fn=class extends Wg{constructor(t,r,s,n,i,o=void 0){super(Qg.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fn,"LMDBUpdateTransactionObject");dE.exports=Fn});var TE=S((XB,hE)=>{"use strict";var Xg=fr(),Jg=f().OPERATIONS_ENUM,xn=class extends Xg{constructor(t,r,s,n,i,o=void 0){super(Jg.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xn,"LMDBUpsertTransactionObject");hE.exports=xn});var RE=S((JB,fE)=>{"use strict";var Zg=fr(),zg=f().OPERATIONS_ENUM,Vn=class extends Zg{constructor(t,r,s,n,i=void 0){super(zg.DELETE,s,n,t,i),this.original_records=r}};a(Vn,"LMDBDeleteTransactionObject");fE.exports=Vn});var cs=S((ZB,OE)=>{"use strict";var jg=require("path"),mE=F(),ep=lE(),tp=SE(),rp=TE(),sp=RE(),Rr=Se(),AE=g(),{CONFIG_PARAMS:np}=f(),NE=Q();NE.initSync();var kn=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:ip}=k();OE.exports=ap;async function ap(e,t){if(NE.get(np.LOGGING_AUDITLOG)===!1)return;let r=jg.join(ip(),e.schema.toString()),s=await mE.openEnvironment(r,e.table,!0),n=op(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){mE.initializeDBIs(s,Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rr.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),AE.isEmpty(n.user_name)||s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(ap,"writeTransaction");function op(e,t){let r=AE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===kn.INSERT)return new ep(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.UPDATE)return new tp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.UPSERT)return new rp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kn.DELETE)return new sp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(op,"createTransactionObject")});var to=S((jB,gE)=>{"use strict";var _p=yn(),zB=Dn(),mr=f(),cp=Pn(),up=Sr().insertRecords,Ep=F(),lp=require("path"),dp=p(),Sp=vn(),{getBaseSchemaPath:hp}=k(),Tp=cs();gE.exports=fp;async function fp(e){try{let{schema_table:t,attributes:r}=_p(e);cp(e,r,t.hash_attribute),e.schema!==mr.SYSTEM_SCHEMA_NAME&&(r.includes(mr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(mr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Sp(e.hdb_auth_header,t,r),n=lp.join(hp(),e.schema.toString()),i=await Ep.openEnvironment(n,e.table),o=await up(i,t.hash_attribute,r,e.records,e[mr.CLUSTERING_FLAG]!==!0);try{await Tp(e,o)}catch(_){dp.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(fp,"lmdbCreateRecords")});var CE=S((eH,IE)=>{"use strict";var pE=f(),Rp=to(),mp=Dn(),Ap=require("fs-extra"),Np=require("path"),{getBaseSchemaPath:Op}=k();IE.exports=gp;async function gp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new mp(pE.SYSTEM_SCHEMA_NAME,pE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Rp(r),await Ap.mkdirp(Np.join(Op(),e.schema.toString()))}a(gp,"lmdbCreateSchema")});var LE=S((tH,bE)=>{"use strict";var $n=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($n,"DeleteRecordsResponseObject");bE.exports=$n});var no=S((iH,UE)=>{"use strict";var wE=F(),ro=$t(),so=Be().LMDB_ERRORS_ENUM,pp=Se(),yE=p(),rH=g(),Ip=require("lmdb"),Cp=LE(),{OVERFLOW_MARKER:sH,MAX_SEARCH_KEY_LENGTH:nH}=pp;async function bp(e,t,r){if(ro.validateEnv(e),t===void 0)throw new Error(so.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(so.IDS_REQUIRED):new Error(so.IDS_MUST_BE_ARRAY);try{let s=wE.listDBIs(e);wE.initializeDBIs(e,t,s);let n=new Cp,i,o=[],_=[];for(let l=0,T=r.length;l<T;l++)try{i=r[l];let d=e.dbis[t].get(i);if(!d){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,Ip.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let b=s[N];if(!d.hasOwnProperty(b)||b===t)continue;let Ae=e.dbis[b],v=d[b];if(v!=null)try{let W=ro.getIndexedValues(v);if(W)for(let $e=0,$s=W.length;$e<$s;$e++)Ae.remove(W[$e],i)}catch{yE.warn(`cannot delete from attribute: ${b}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(d)}catch(d){yE.warn(d),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,T=u.length;l<T;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let T=c[l];n.original_records.splice(T-E,1),E++}return n.txn_time=ro.getMicroTime(),n}catch(s){throw s}}a(bp,"deleteRecords");UE.exports={deleteRecords:bp}});var us=S((aH,ME)=>{"use strict";var Ar=g(),Lp=no(),wp=F(),yp=require("path"),{getBaseSchemaPath:Up}=k(),Dp=cs(),Mp=p();ME.exports=Pp;async function Pp(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ar.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ar.isEmptyOrZeroLength(e.hash_values)&&!Ar.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ar.isEmpty(c)||e.hash_values.push(c)}}if(Ar.isEmptyOrZeroLength(e.hash_values))return DE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ar.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=yp.join(Up(),e.schema.toString()),i=await wp.openEnvironment(n,e.table),o=await Lp.deleteRecords(i,s,e.hash_values);try{t===!0&&await Dp(e,o)}catch(_){Mp.error(`unable to write transaction due to ${_.message}`)}return DE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Pp,"lmdbDeleteRecords");function DE(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(DE,"createDeleteResponse")});var ao=S((_H,PE)=>{"use strict";var Bp=f(),oH=$t();function io(e,t){let r=Object.create(null);if(t.length===1&&Bp.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(io,"parseRow");function Hp(e,t,r,s){let n=io(r,e);s.push(n)}a(Hp,"searchAll");function vp(e,t,r,s){let n=io(r,e);s[t]=n}a(vp,"searchAllToMap");function Gp(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Gp,"iterateDBI");function Qt(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(Qt,"pushResults");function qp(e,t,r,s,n,i){t.toString().endsWith(e)&&Qt(t,r,s,n,i)}a(qp,"endsWith");function Fp(e,t,r,s,n,i){t.toString().includes(e)&&Qt(t,r,s,n,i)}a(Fp,"contains");function xp(e,t,r,s,n,i){t>e&&Qt(t,r,s,n,i)}a(xp,"greaterThanCompare");function Vp(e,t,r,s,n,i){t>=e&&Qt(t,r,s,n,i)}a(Vp,"greaterThanEqualCompare");function kp(e,t,r,s,n,i){t<e&&Qt(t,r,s,n,i)}a(kp,"lessThanCompare");function $p(e,t,r,s,n,i){t<=e&&Qt(t,r,s,n,i)}a($p,"lessThanEqualCompare");PE.exports={parseRow:io,searchAll:Hp,searchAllToMap:vp,iterateDBI:Gp,endsWith:qp,contains:Fp,greaterThanCompare:xp,greaterThanEqualCompare:Vp,lessThanCompare:kp,lessThanEqualCompare:$p,pushResults:Qt}});var Nr=S((EH,FE)=>{"use strict";var qe=F(),Yp=p(),De=$t(),wt=Se(),X=Be().LMDB_ERRORS_ENUM,cH=g(),Kp=f(),Ze=ao(),uH=require("lmdb"),{OVERFLOW_MARKER:BE,MAX_SEARCH_KEY_LENGTH:Wp}=wt,Es={lazy:!0};function HE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=oo(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(HE,"iterateFullIndex");function ls(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=qe.openDBI(e,r),T=oo(e,t,r);l[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let d=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,b=i===!0?u:c;for(let{key:Ae,value:v}of l.getRange({start:A,end:d,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:b}))Ze.pushResults(T(Ae,v),v,E,t,r);return E}a(ls,"iterateRangeBetween");function oo(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(BE)){if(!s)if(t)s=qe.openDBI(e,t);else{let _=qe.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=qe.openDBI(e,_[c]),!s[wt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,Es)[r]}return n}}a(oo,"getOverflowCheck");function Qp(e,t,r,s=!1,n=void 0,i=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);Yn(r),r=ds(e,r);let o=[],_=qe.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Ze.searchAll(r,c,u,o);return o}a(Qp,"searchAll");function Xp(e,t,r,s=!1,n=void 0,i=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);return Yn(r),r=ds(e,r),HE(e,t,t,Ze.searchAllToMap.bind(null,r),s,n,i)}a(Xp,"searchAllToMap");function Jp(e,t,r=!1,s=void 0,n=void 0){if(De.validateEnv(e),t===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);return HE(e,void 0,t,Ze.iterateDBI,r,s,n)}a(Jp,"iterateDBI");function Zp(e,t){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);return qe.statDBI(e,t).entryCount}a(Zp,"countAll");function zp(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=qe.openDBI(e,r);s=De.convertKeyValueToWrite(s);let c=[[],[]];if(_[wt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Es);u!==void 0&&Ze.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))Ze.pushResults(s,u,c,t,r);return c}a(zp,"equals");function jp(e,t,r){return yt(e,t,r),qe.openDBI(e,t).getValuesCount(r)}a(jp,"count");function eI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=[[],[]],c=qe.openDBI(e,r);c[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=De.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:T}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))Ze.pushResults(l,T,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))Ze.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(eI,"startsWith");function tI(e,t,r,s,n=!1,i=void 0,o=void 0){return vE(e,t,r,s,n,i,o,!0)}a(tI,"endsWith");function vE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){yt(e,r,s);let c=[[],[]],u=qe.openDBI(e,r);u[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=oo(e,t,r);o=Number.isInteger(o)?o:0;for(let T of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let d=T.toString();if(d.endsWith(BE))for(let A of u.getValues(T)){let N=E(T,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?d.endsWith(s):d.includes(s))if(u[wt.DBI_DEFINITION_NAME].is_hash_attribute)l(T,T);else for(let A of u.getValues(T))l(T,A)}function l(T,d){if(o>0){o--;return}i!==0&&(Ze.pushResults(T,d,c,t,r),i--)}return a(l,"found_match"),c}a(vE,"contains");function rI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ls(e,t,r,s,c,n,i,o,!0,!1)}a(rI,"greaterThan");function sI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ls(e,t,r,s,c,n,i,o,!1,!1)}a(sI,"greaterThanEqual");function nI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ls(e,t,r,c,s,n,i,o,!1,!0)}a(nI,"lessThan");function iI(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ls(e,t,r,c,s,n,i,o,!1,!1)}a(iI,"lessThanEqual");function aI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(De.validateEnv(e),r===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(X.START_VALUE_REQUIRED);if(n===void 0)throw new Error(X.END_VALUE_REQUIRED);if(s=De.convertKeyValueToWrite(s),n=De.convertKeyValueToWrite(n),s>n)throw new Error(X.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ls(e,t,r,s,n,i,o,_)}a(aI,"between");function oI(e,t,r,s){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(Yn(r),r=ds(e,r),s===void 0)throw new Error(X.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Es:void 0);return i&&(n=Ze.parseRow(i,r)),n}a(oI,"searchByHash");function _I(e,t,r){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(X.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Es)===void 0&&(s=!1),s}a(_I,"checkHashExists");function cI(e,t,r,s,n=[]){qE(e,t,r,s,n);let i=GE(e,t,r,s,n);return Object.values(i)}a(cI,"batchSearchByHash");function uI(e,t,r,s,n=[]){return qE(e,t,r,s,n),GE(e,t,r,s,n)}a(uI,"batchSearchByHashToMap");function GE(e,t,r,s,n=[]){r=ds(e,r);let i=Object.create(null),o=r.length<3?Es:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=Ze.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw Yp.warn(u),u}}return i}a(GE,"batchHashSearch");function qE(e,t,r,s,n){if(De.validateEnv(e),t===void 0)throw new Error(X.HASH_ATTRIBUTE_REQUIRED);if(Yn(r),!Array.isArray(s))throw s===void 0?new Error(X.IDS_REQUIRED):new Error(X.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(qE,"initializeBatchSearchByHash");function Yn(e){if(!Array.isArray(e))throw e===void 0?new Error(X.FETCH_ATTRIBUTES_REQUIRED):new Error(X.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Yn,"validateFetchAttributes");function yt(e,t,r){if(De.validateEnv(e),t===void 0)throw new Error(X.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(X.SEARCH_VALUE_REQUIRED);if(r?.length>Wp)throw new Error(X.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function ds(e,t){return t.length===1&&Kp.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qe.listDBIs(e)),t}a(ds,"setGetWholeRowAttributes");FE.exports={searchAll:Qp,searchAllToMap:Xp,count:jp,countAll:Zp,equals:zp,startsWith:eI,endsWith:tI,contains:vE,searchByHash:oI,setGetWholeRowAttributes:ds,batchSearchByHash:cI,batchSearchByHashToMap:uI,checkHashExists:_I,iterateDBI:Jp,greaterThan:rI,greaterThanEqual:sI,lessThan:nI,lessThanEqual:iI,between:aI}});var Ss=S((dH,$E)=>{var xE=require("lodash"),VE=Ke(),B=require("joi"),EI=g(),{hdb_schema_table:ze,checkValidTable:kE}=kt(),{handleHDBError:lI,hdb_errors:dI}=q(),{HTTP_STATUS_CODES:SI}=dI,lH=B.object({schema:ze,table:ze,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(ze).required()}),hI=B.object({schema:ze,table:ze,search_attribute:ze,search_value:B.any().required(),get_attributes:B.array().min(1).items(ze).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),TI=B.object({schema:ze,table:ze,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(ze).required(),conditions:B.array().min(1).items(B.object({search_attribute:ze,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});$E.exports=function(e,t){let r=null;switch(t){case"value":r=VE.validateBySchema(e,hI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(kE("schema",e.schema)),i(kE("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=VE.validateBySchema(e,TI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=EI.checkGlobalSchemaTable(e.schema,e.table);if(n)return lI(new Error,n,SI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=xE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!xE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var _o=S((SH,YE)=>{"use strict";var fI=F(),RI=Ss(),mI=require("path"),{getBaseSchemaPath:AI}=k();YE.exports=NI;function NI(e){let t=RI(e,"hashes");if(t)throw t;let r=mI.join(AI(),e.schema.toString());return fI.openEnvironment(r,e.table)}a(NI,"initialize")});var co=S((hH,KE)=>{"use strict";var OI=Nr(),gI=_o();KE.exports=pI;async function pI(e){try{let t=await gI(e),r=global.hdb_schema[e.schema][e.table];return OI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(pI,"lmdbGetDataByHash")});var hs=S((TH,WE)=>{"use strict";var Kn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Kn,"SearchByHashObject");WE.exports=Kn});var XE=S((RH,QE)=>{"use strict";var fH=hs(),II=Nr(),CI=_o();QE.exports=bI;async function bI(e){try{let t=await CI(e),r=global.hdb_schema[e.schema][e.table];return II.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(bI,"lmdbSearchByHash")});var ht=S((mH,JE)=>{"use strict";var Wn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Wn,"SearchObject");JE.exports=Wn});var Qn=S((AH,tl)=>{"use strict";var Te=Nr(),LI=F(),wI=require("path"),yI=g(),O=Se(),Xt=f(),{getBaseSchemaPath:UI}=k(),DI=Wt(),ZE=Be().LMDB_ERRORS_ENUM,{compareKeys:Or}=require("ordered-binary"),Tt=Xt.SEARCH_WILDCARDS;async function MI(e,t,r){let s;e.schema===Xt.SYSTEM_SCHEMA_NAME?s=DI[e.table]:s=global.hdb_schema[e.schema][e.table];let n=el(e,s.hash_attribute,r,t);return zE(e,n,s.hash_attribute,r)}a(MI,"prepSearch");async function zE(e,t,r,s){let n=wI.join(UI(),e.schema.toString()),i=await LI.openEnvironment(n,e.table),o=jE(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(HI(e,r)===!1)return s===!0?BI(o):o[1];let c=o[0];return s===!0?Te.batchSearchByHashToMap(i,r,e.get_attributes,c):Te.batchSearchByHash(i,r,e.get_attributes,c)}a(zE,"executeSearch");function jE(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Te.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Te.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Te.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Te.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Te.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Te.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Te.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Te.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Te.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Te.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Te.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Te.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Te.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(jE,"searchByType");function PI(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Or(i,s[0])>=0&&Or(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Or(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Or(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Or(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Or(n[r],s)<=0;default:return Object.create(null)}}a(PI,"filterByType");function BI(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(BI,"createMapFromArrays");function HI(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(HI,"checkToFetchMore");function el(e,t,r,s){if(yI.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Tt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tt[0])<0&&n.indexOf(Tt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(Tt.indexOf(i)>=0&&Tt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Tt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Tt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tt[0])||n.includes(Tt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(ZE.UNKNOWN_SEARCH_TYPE)}else switch(s){case Xt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case Xt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case Xt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case Xt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case Xt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ZE.UNKNOWN_SEARCH_TYPE)}}a(el,"createSearchTypeFromSearchObject");tl.exports={executeSearch:zE,createSearchTypeFromSearchObject:el,prepSearch:MI,searchByType:jE,filterByType:PI}});var sl=S((OH,rl)=>{"use strict";var NH=ht(),vI=Ss(),GI=g(),qI=f(),FI=Qn();rl.exports=xI;async function xI(e,t){if(!GI.isEmpty(t)&&qI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vI(e,"value");if(s)throw s;let n=!0;try{return await FI.prepSearch(e,t,n)}catch(i){throw i}}a(xI,"lmdbGetDataByValue")});var gr=S((pH,nl)=>{"use strict";var gH=ht(),VI=Ss(),kI=g(),$I=f(),YI=Qn();nl.exports=KI;async function KI(e,t){if(!kI.isEmpty(t)&&$I.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=VI(e,"value");if(s)throw s;let n=!1;try{return await YI.prepSearch(e,t,n)}catch(i){throw i}}a(KI,"lmdbSearchByValue")});var al=S((CH,il)=>{"use strict";var IH=Se(),Xn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Xn,"SearchByConditionsObject");var Jn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Jn,"SearchCondition");var Zn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Zn,"SortAttribute");il.exports={SearchByConditionsObject:Xn,SearchCondition:Jn,SortAttribute:Zn}});var ll=S((LH,El)=>{"use strict";var bH=al().SearchByConditionsObject,WI=ht(),QI=Ss(),uo=Nr(),zn=Se(),ul=Qn(),XI=ao(),ol=require("lodash"),{getBaseSchemaPath:JI}=k(),ZI=require("path"),zI=F(),{handleHDBError:_l,hdb_errors:jI}=q(),{HTTP_STATUS_CODES:eC}=jI,tC=1e8,rC={lazy:!0};El.exports=sC;async function sC(e){try{let t=QI(e,"conditions");if(t)throw _l(t,t.message,eC.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=ZI.join(JI(),e.schema.toString()),s=await zI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=ol.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===zn.SEARCH_TYPES.EQUALS?o.estimated_count=uo.count(s,o.search_attribute,o.search_value):_===zn.SEARCH_TYPES.CONTAINS||_===zn.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=tC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await cl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(ul.filterByType),u=c.length,E=[],l=uo.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,d=e.limit>-1?e.limit:1/0;e:for(let A of o){let N=_.get(A,rC);for(let b=0;b<u;b++)if(!c[b](N))continue e;if(T>0){T--;continue}if(d<=0)break;d--,E.push(XI.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await cl(s,e,c,n.hash_attribute);_.push(u)}if(o=ol.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return uo.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw _l(t)}}a(sC,"lmdbSearchByConditions");async function cl(e,t,r,s){let n=new WI(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===zn.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,ul.searchByType(e,n,i,s)}a(cl,"executeConditionSearch")});var Ts=S((wH,dl)=>{"use strict";var nC=f().OPERATIONS_ENUM,jn=class{constructor(t,r,s,n=void 0){this.operation=nC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(jn,"DeleteObject");dl.exports=jn});var Eo=S((yH,Sl)=>{"use strict";var ei=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ei,"DropAttributeObject");Sl.exports=ei});var So=S((DH,hl)=>{"use strict";var iC=ht(),aC=Ts(),UH=Eo(),it=f(),oC=g(),lo=F(),_C=Wt(),cC=gr(),uC=us(),{getBaseSchemaPath:EC}=k(),lC=require("path");hl.exports=dC;async function dC(e,t=!0){let r;e.schema===it.SYSTEM_SCHEMA_NAME?r=_C[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await hC(e),n=lC.join(EC(),e.schema.toString()),i=await lo.openEnvironment(n,e.table);return t===!0&&await SC(e,i,r.hash_attribute),lo.dropDBI(i,e.attribute),s}a(dC,"lmdbDropAttribute");async function SC(e,t,r){let s=lo.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(SC,"removeAttributeFromAllObjects");async function hC(e){let t=new iC(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await cC(t)).filter(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(oC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new aC(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return uC(i)}a(hC,"dropAttributeFromSystem")});var ml=S((MH,Rl)=>{"use strict";var TC=So(),fC=Eo(),Tl=g(),fl=p(),RC=Be().LMDB_ERRORS_ENUM;Rl.exports=mC;async function mC(e){if(Tl.isEmpty(global.hdb_schema[e.schema])||Tl.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 fC(e.schema,e.table,r);try{await TC(n,!1)}catch(i){i.message!==RC.DBI_DOES_NOT_EXIST&&fl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw fl.error(`Error dropping attribute ${r}`),s}}a(mC,"lmdbDropAllAttributes")});var ho=S((BH,Ll)=>{"use strict";var pl=ht(),Il=Ts(),Cl=gr(),bl=us(),PH=ml(),Ie=f(),Al=g(),Nl=F(),{getBaseSchemaPath:AC,getTransactionAuditStorePath:NC}=k(),Ol=require("path"),gl=p();Ll.exports=OC;async function OC(e){try{if(Al.isEmpty(global.hdb_schema[e.schema])||Al.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await gC(e),await pC(e);let t=Ol.join(AC(),e.schema.toString());try{await Nl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")gl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Ol.join(NC(),e.schema.toString());await Nl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")gl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(OC,"lmdbDropTable");async function gC(e){let t=new pl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await Cl(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 Il(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await bl(n)}a(gC,"deleteAttributesFromSystem");async function pC(e){let t=new pl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ie.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await Cl(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 Il(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await bl(n)}catch(i){throw i}}a(pC,"dropTableFromSystem")});var yl=S((vH,wl)=>{"use strict";var IC=require("fs-extra"),CC=ht(),bC=hs(),LC=Ts(),wC=ho(),yC=us(),UC=co(),DC=gr(),ft=f(),HH=g(),MC=require("path"),{getBaseSchemaPath:PC}=k(),{handleHDBError:BC,hdb_errors:HC}=q(),{HDB_ERROR_MSGS:vC,HTTP_STATUS_CODES:GC}=HC;wl.exports=qC;async function qC(e){let t;try{t=await FC(e.schema);let r=new CC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await DC(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await wC(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new LC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yC(n);let i=MC.join(PC(),t.toString());await IC.remove(i)}catch(r){throw r}}a(qC,"lmdbDropSchema");async function FC(e){let t=new bC(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await UC(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw BC(new Error,vC.SCHEMA_NOT_FOUND(e),GC.NOT_FOUND,void 0,void 0,!0);return s}a(FC,"validateDropSchema")});var To=S((GH,Ul)=>{"use strict";var ti=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(ti,"CreateTableObject");Ul.exports=ti});var Ml=S((FH,Dl)=>{"use strict";var xC=require("path"),VC=require("fs-extra"),ri=F(),{getTransactionAuditStorePath:kC}=k(),fo=Se(),qH=To();Dl.exports=$C;async function $C(e){let t;try{let r=xC.join(kC(),e.schema.toString());await VC.mkdirp(r),t=await ri.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{ri.createDBI(t,fo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ri.createDBI(t,fo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ri.createDBI(t,fo.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($C,"createTransactionsAuditEnvironment")});var vl=S((xH,Hl)=>{"use strict";var Ro=f(),Pl=F(),YC=Sr(),KC=require("path"),{getSystemSchemaPath:WC,getBaseSchemaPath:QC}=k(),XC=Wt(),JC=wn(),mo=Ln(),ZC=p(),zC=Ml(),No=XC.hdb_table,Bl=[];for(let e=0;e<No.attributes.length;e++)Bl.push(No.attributes[e].attribute);Hl.exports=jC;async function jC(e,t){let r=KC.join(QC(),t.schema.toString()),s=new mo(t.schema,t.table,Ro.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mo(t.schema,t.table,Ro.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Pl.createEnvironment(r,t.table),e!==void 0){let o=await Pl.openEnvironment(WC(),Ro.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YC.insertRecords(o,No.hash_attribute,Bl,[e]),await Ao(s),await Ao(n),await Ao(i)}await zC(t)}catch(o){throw o}}a(jC,"lmdbCreateTable");async function Ao(e){try{await JC(e)}catch(t){ZC.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ao,"createAttribute")});var ql=S((VH,Gl)=>{"use strict";var eb=yn(),tb=Pn(),rb=vn(),pr=f(),sb=Sr().updateRecords,nb=F(),ib=require("path"),{getBaseSchemaPath:ab}=k(),ob=cs(),_b=p();Gl.exports=cb;async function cb(e){try{let{schema_table:t,attributes:r}=eb(e);tb(e,r,t.hash_attribute),e.schema!==pr.SYSTEM_SCHEMA_NAME&&(r.includes(pr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rb(e.hdb_auth_header,t,r),n=ib.join(ab(),e.schema.toString()),i=await nb.openEnvironment(n,e.table),o=await sb(i,t.hash_attribute,r,e.records,e[pr.CLUSTERING_FLAG]!==!0);try{await ob(e,o)}catch(_){_b.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(cb,"lmdbUpdateRecords")});var xl=S((kH,Fl)=>{"use strict";var ub=f().OPERATIONS_ENUM,si=class{constructor(t,r,s,n=void 0){this.operation=ub.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(si,"UpsertObject");Fl.exports=si});var kl=S((YH,Vl)=>{"use strict";var $H=xl(),Eb=yn(),lb=Pn(),db=vn(),Ir=f(),Sb=Sr().upsertRecords,hb=F(),Tb=require("path"),{getBaseSchemaPath:fb}=k(),Rb=cs(),mb=p(),{handleHDBError:Ab,hdb_errors:Nb}=q();Vl.exports=Ob;async function Ob(e){let t;try{t=Eb(e)}catch(c){throw Ab(c,c.message,Nb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lb(e,s,r.hash_attribute),e.schema!==Ir.SYSTEM_SCHEMA_NAME&&(s.includes(Ir.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ir.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await db(e.hdb_auth_header,r,s),i=Tb.join(fb(),e.schema.toString()),o=await hb.openEnvironment(i,e.table),_=await Sb(o,r.hash_attribute,s,e.records,e[Ir.CLUSTERING_FLAG]!==!0);try{await Rb(e,_)}catch(c){mb.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(Ob,"lmdbUpsertRecords")});var Xl=S((KH,Ql)=>{"use strict";var gb=ht(),$l=g(),Yl=p(),pb=gr(),Kl=f(),Ib=no().deleteRecords,Cb=F(),bb=require("path"),{getBaseSchemaPath:Lb}=k(),{promisify:wb}=require("util"),yb=wb(setTimeout),Wl=1e4,Ub=10;Ql.exports=Db;async function Db(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if($l.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 gb(e.schema,e.table,Kl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await pb(n,Kl.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw Yl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return $l.isEmptyOrZeroLength(s)?(Yl.trace("No records found to delete"),{message:"No records found to delete"}):await Mb(e,s,t)}a(Db,"lmdbDeleteRecordsBefore");async function Mb(e,t,r){let s=bb.join(Lb(),e.schema.toString()),n=await Cb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=Wl){let c=t.slice(o,o+Wl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await Ib(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await yb(Ub)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Mb,"chunkDeletes")});var Zl=S((WH,Jl)=>{"use strict";var ni=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ni,"DeleteBeforeObject");Jl.exports=ni});var jl=S((QH,zl)=>{"use strict";var ii=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ii,"DeleteAuditLogsBeforeResults");zl.exports=ii});var rd=S((JH,td)=>{"use strict";var Oo=F(),{getTransactionAuditStorePath:Pb}=k(),XH=Zl(),Bb=require("path"),fs=Se(),Hb=g(),ed=jl(),vb=require("util").promisify,Gb=vb(setTimeout),qb=1e4,Fb=100;td.exports=xb;async function xb(e){let t=Bb.join(Pb(),e.schema),r=await Oo.openEnvironment(t,e.table,!0),s=Oo.listDBIs(r);Oo.initializeDBIs(r,fs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ed;do n=await Vb(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 Gb(Fb);while(n.transactions_deleted>0);return i}a(xb,"deleteAuditLogsBefore");async function Vb(e,t){let r=new ed;try{let s=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[fs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Hb.isEmpty(_)||(n=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[fs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>qb)break}return await n,r}catch(s){throw s}}a(Vb,"deleteTransactions")});var cd=S((ZH,_d)=>{"use strict";var go=F(),Cr=Se(),sd=$t(),po=f(),nd=g(),{getTransactionAuditStorePath:kb}=k(),$b=require("path"),Yb=Nr(),ai=fr(),Kb=p();_d.exports=Wb;async function Wb(e){let t=$b.join(kb(),e.schema),r=await go.openEnvironment(t,e.table,!0),s=go.listDBIs(r);go.initializeDBIs(r,Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return id(r,e.search_values);case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Xb(r,e.search_values,n);case po.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Qb(r,e.search_values);default:return id(r)}}a(Wb,"readAuditLog");function id(e,t=[0,sd.getMicroTime()]){nd.isEmpty(t[0])&&(t[0]=0),nd.isEmpty(t[1])&&(t[1]=sd.getMicroTime());let r=[];try{let s=e.dbis[Cr.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 ai,i);r.push(o)}return r}catch(s){throw s}}a(id,"searchTransactionsByTimestamp");function Qb(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[Cr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,od(e,i))}return Object.fromEntries(r)}a(Qb,"searchTransactionsByUsername");function Xb(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=Yb.equals(e,Cr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Cr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,T=E[0].length;l<T;l++){let d=E[0][l],A=Number(d);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=od(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);ad(c,"records",r,E,o),ad(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(Xb,"searchTransactionsByHashValues");function ad(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new ai(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new ai(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(ad,"loopRecords");function od(e,t){let r=[];try{let s=e.dbis[Cr.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 ai,i);r.push(o)}}catch(i){Kb.warn(i)}return r}catch(s){throw s}}a(od,"batchSearchTransactions")});var Ed=S((zH,ud)=>{"use strict";var Jb=require("path"),{getBaseSchemaPath:Zb}=k(),zb=F();ud.exports={writeTransaction:jb};async function jb(e,t,r){let s=Jb.join(Zb(),e);return(await zb.openEnvironment(s,t)).transaction(r)}a(jb,"writeTransaction")});var dd=S((jH,ld)=>{"use strict";var eL=require("path"),{getBaseSchemaPath:tL}=k(),rL=F();ld.exports={flush:sL};async function sL(e,t){let r=eL.join(tL(),e.toString());return(await rL.openEnvironment(r,t.toString())).flushed}a(sL,"flush")});var hd=S((ev,Sd)=>{"use strict";var j=p(),{handleHDBError:nL}=q(),iL=Ua(),aL=wn(),oL=to(),_L=CE(),cL=us(),uL=co(),EL=XE(),lL=sl(),dL=gr(),SL=ll(),hL=yl(),TL=vl(),fL=ql(),RL=kl(),mL=Xl(),AL=rd(),NL=ho(),OL=So(),gL=cd(),pL=Ed(),IL=dd(),oi=class extends iL{async searchByConditions(t){try{return SL(t)}catch(r){throw j.error(r),r}}async getDataByHash(t){try{return await uL(t)}catch(r){throw j.error(r),r}}async searchByHash(t){try{return await EL(t)}catch(r){throw j.error(r),r}}async getDataByValue(t,r){try{return await lL(t,r)}catch(s){throw j.error(s),s}}async searchByValue(t){try{return await dL(t)}catch(r){throw j.error(r),r}}async createSchema(t){try{return await _L(t)}catch(r){throw j.error(r),r}}async dropSchema(t){try{return await hL(t)}catch(r){throw j.error(r),r}}async createTable(t,r){try{return await TL(t,r)}catch(s){throw j.error(s),s}}async dropTable(t){try{return await NL(t)}catch(r){throw j.error(r),r}}async createAttribute(t){try{return await aL(t)}catch(r){throw j.error(r),r}}async createRecords(t){try{return await oL(t)}catch(r){throw j.error(r),r}}async updateRecords(t){try{return await fL(t)}catch(r){throw j.error(r),r}}async upsertRecords(t){try{return await RL(t)}catch(r){throw nL(r,null,null,j.ERR,r)}}async deleteRecords(t){try{return await cL(t)}catch(r){throw j.error(r),r}}async deleteRecordsBefore(t){try{return await mL(t)}catch(r){throw j.error(r),r}}async dropAttribute(t){try{return await OL(t)}catch(r){throw j.error(r),r}}async deleteAuditLogsBefore(t){try{return await AL(t)}catch(r){throw j.error(r),r}}async readAuditLog(t){try{return await gL(t)}catch(r){throw j.error(r),r}}writeTransaction(t,r,s){return pL.writeTransaction(t,r,s)}flush(t,r){return IL.flush(t,r)}};a(oi,"LMDBBridge");Sd.exports=oi});var Jt=S((tv,fd)=>{"use strict";var CL=hd(),bL=Ua(),LL=Q();LL.initSync();var Td;function wL(){return Td instanceof bL?Td:new CL}a(wL,"getBridge");fd.exports=wL()});var yd=S((sv,wd)=>{"use strict";var Io=require("recursive-iterator"),yL=require("alasql"),Co=require("clone"),Rd=g(),{handleHDBError:md,hdb_errors:UL}=q(),{HDB_ERROR_MSGS:Ad,HTTP_STATUS_CODES:Nd}=UL,DL=["DISTINCT_ARRAY"],Od=Symbol("validateTables"),bo=Symbol("validateTable"),rv=Symbol("getAllColumns"),gd=Symbol("validateAllColumns"),_i=Symbol("findColumn"),pd=Symbol("validateOrderBy"),Rs=Symbol("validateSegment"),Lo=Symbol("validateColumn"),Id=Symbol("setColumnsForTable"),Cd=Symbol("checkColumnsForAsterisk"),bd=Symbol("validateGroupBy"),Ld=Symbol("hasColumns"),ci=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Od](),this[Cd](),this[gd]()}[Od](){if(this[Ld]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bo](t.table)})}}[Ld](){let t=!1,r=new Io(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[bo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw md(new Error,Ad.SCHEMA_NOT_FOUND(t.databaseid),Nd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw md(new Error,Ad.TABLE_NOT_FOUND(t.databaseid,t.tableid),Nd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Co(s);n.table=Co(t),this.attributes.push(n)})}[_i](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)}[Cd](){let t=new Io(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Id](r.tableid)}[Id](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new yL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[gd](){this[Rs](this.statement.columns,!1),this[Rs](this.statement.joins,!1),this[Rs](this.statement.where,!1),this[bd](this.statement.group,!1),this[Rs](this.statement.order,!0)}[Rs](t,r){if(!t)return;let s=new Io(t),n=[];for(let{node:i,path:o}of s)!Rd.isEmpty(i)&&!Rd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[pd](i):n.push(this[Lo](i)));return n}[bd](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=Co(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[_i](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[_i](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[pd](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[Lo](t)}[Lo](t){let r=this[_i](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(ci,"SelectValidator");wd.exports=ci});var Pd=S((nv,Md)=>{"use strict";var Ud=require("lodash"),ms=require("mathjs"),ML=require("jsonata"),Dd=g();Md.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Ud.uniqWith(e,Ud.isEqual):e,searchJSON:PL,mad:As.bind(null,ms.mad),mean:As.bind(null,ms.mean),mode:As.bind(null,ms.mode),prod:As.bind(null,ms.prod),median:As.bind(null,ms.median)};function As(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(As,"aggregateFunction");function PL(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(Dd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Dd.isEmpty(this.__ala__.res[r])){let s=ML(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(PL,"searchJSON")});var Hd=S((iv,Bd)=>{"use strict";var Z=require("moment"),wo="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;Bd.exports={current_date:()=>Z().utc().format("YYYY-MM-DD"),current_time:()=>Z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Z(e).utc().format("YYYY");case"month":return Z(e).utc().format("MM");case"day":return Z(e).utc().format("DD");case"hour":return Z(e).utc().format("HH");case"minute":return Z(e).utc().format("mm");case"second":return Z(e).utc().format("ss");case"millisecond":return Z(e).utc().format("SSS");default:break}},date:e=>Z(e).utc().format(wo),date_format:(e,t)=>Z(e).utc().format(t),date_add:(e,t,r)=>Z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Z(e).utc(),n=Z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Z().utc().valueOf(),get_server_time:()=>Z().format(wo),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(wo)}});var Fd=S((av,qd)=>{"use strict";var BL=require("@turf/area"),HL=require("@turf/length"),vL=require("@turf/circle"),GL=require("@turf/difference"),qL=require("@turf/distance"),FL=require("@turf/boolean-contains"),xL=require("@turf/boolean-equal"),VL=require("@turf/boolean-disjoint"),kL=require("@turf/helpers"),vd=f(),D=g();qd.exports={geoArea:$L,geoLength:YL,geoCircle:KL,geoDifference:WL,geoDistance:Gd,geoNear:QL,geoContains:XL,geoEqual:JL,geoCrosses:ZL,geoConvert:zL};var yo="geo1 is required",Uo="geo2 is required";function $L(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),BL.default(e)}a($L,"geoArea");function YL(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),HL.default(e,{units:t||"kilometers"})}a(YL,"geoLength");function KL(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),vL.default(e,t,{units:r||"kilometers"})}a(KL,"geoCircle");function WL(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),GL(e,t)}a(WL,"geoDifference");function Gd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),qL.default(e,t,{units:r||"kilometers"})}a(Gd,"geoDistance");function QL(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Gd(e,t,s)<=r}a(QL,"geoNear");function XL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),FL.default(e,t)}a(XL,"geoContains");function JL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),xL.default(e,t)}a(JL,"geoEqual");function ZL(e,t){if(D.isEmpty(e))throw new Error(yo);if(D.isEmpty(e))throw new Error(Uo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!VL.default(e,t)}a(ZL,"geoCrosses");function zL(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(vd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(vd.GEO_CONVERSION_ENUM).join(",")}`);return kL[t](e,r)}a(zL,"geoConvert")});var Vd=S((ov,xd)=>{var Zt=Pd(),Me=Hd(),at=Fd();xd.exports=e=>{e.aggr.mad=e.aggr.MAD=Zt.mad,e.aggr.mean=e.aggr.MEAN=Zt.mean,e.aggr.mode=e.aggr.MODE=Zt.mode,e.aggr.prod=e.aggr.PROD=Zt.prod,e.aggr.median=e.aggr.MEDIAN=Zt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Me.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Me.current_time,e.fn.extract=e.fn.EXTRACT=Me.extract,e.fn.date=e.fn.DATE=Me.date,e.fn.date_format=e.fn.DATE_FORMAT=Me.date_format,e.fn.date_add=e.fn.DATE_ADD=Me.date_add,e.fn.date_sub=e.fn.DATE_SUB=Me.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Me.date_diff,e.fn.now=e.fn.NOW=Me.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Me.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Me.get_server_time,e.fn.getdate=e.fn.GETDATE=Me.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Me.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=at.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=at.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=at.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=at.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=at.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=at.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=at.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=at.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=at.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=at.geoNear}});var Yd=S((_v,$d)=>{"use strict";var Ns=require("lodash"),oe=require("alasql");oe.options.cache=!1;var jL=Vd(),kd=require("clone"),ui=require("recursive-iterator"),L=p(),y=g(),br=Jt(),ew=f(),{hdb_errors:tw}=q(),rw="IS NULL",Os="There was a problem performing this search. Please check the logs and try again.";jL(oe);var Ei=class{constructor(t,r){if(y.isEmpty(t))throw L.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(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return L.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw L.error("Error thrown from checkEmptySQL in SQLSearch class method search."),L.error(s),new Error(Os)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw L.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),L.error(s),new Error(Os)}if(Object.keys(this.data).length===0)return L.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw L.error("Error thrown from processJoins in SQLSearch class method search."),L.error(s),new Error(Os)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw L.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),L.error(s),new Error(Os)}try{return t=await this._finalSQL(),t}catch(s){throw L.error("Error thrown from finalSQL in SQLSearch class method search."),L.error(s),new Error(Os)}}_getColumns(){let t=new ui(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(kd(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ns.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(y.isEmpty(this.statement.where)){L.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ui(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new oe.yy.LogicValue({value:s}):r.right instanceof oe.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new oe.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new oe.yy.LogicValue({value:i}):s instanceof oe.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new oe.yy.NumValue({value:i}))});if(t){L.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ui(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(!y.isEmpty(ew.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.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(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.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&&Ns.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(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.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(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await oe.promise(r)}catch(r){throw L.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),L.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(kd(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(y.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(rw)>-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=Ns.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await br.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){L.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let T=await br.getDataByValue(l);for(let d in T)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,T[d][n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,T[d][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(d)))}))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),L.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,T=E.length;l<T;l++){let d=E[l];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await br.getDataByValue(_,d.operation);if(c)for(let N in A)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in A)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),L.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await br.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){L.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),L.error(E)}}}_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 oe.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 oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new oe.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 oe.yy.FuncValue:new oe.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,N=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${N}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${N}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let T=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(d,n);T=await oe.promise(A,t),t=null}catch(d){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(d),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let d=0,A=T.length;d<A;d++){let N=T[d];o.forEach(b=>{N[b.key]!==null&&N[b.key]!==void 0&&b.keys.add(N[b.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),N=Ns.difference(A,[...d.keys].map(b=>b.toString()));for(let b=0,Ae=N.length;b<Ae;b++){let v=N[b];delete this.data[`${d.schema}_${d.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:T?T.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new ui(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=Ns.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){L.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),L.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 E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await br.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let T=o[E],d=c[T];for(let A=0;A<u;A++){let N=n.columns[A],b=d[N]===void 0?null:d[N];this.data[s].__merged_data[T].push(b)}}}}catch(r){throw L.error("Error thrown from getDataByHash function in SQLSearch class method getData."),L.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();L.trace(`Final SQL: ${n}`),s=await oe.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),L.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw L.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),L.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 L.error(tw.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),L.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await br.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){L.error("There was an error when processing this SQL operation. Check your logs"),L.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ei,"SQLSearch");$d.exports=Ei});var gs=S((cv,Wd)=>{"use strict";var sw=yd();Wd.exports={searchByConditions:ow,searchByHash:_w,searchByValue:cw,search:uw};var Do=Jt(),Kd=require("util"),nw=Kd.callbackify(Do.searchByHash),iw=Kd.callbackify(Do.searchByValue),aw=Yd();async function ow(e){return Do.searchByConditions(e)}a(ow,"searchByConditions");function _w(e,t){try{nw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(_w,"searchByHash");function cw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),iw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(cw,"searchByValue");function uw(e,t){try{let r=new sw(e);r.validate(),new aw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(uw,"search")});var Is=S((uv,Zd)=>{"use strict";var ps=require("crypto"),Xd="aes-256-cbc",Ew=32,lw=16,Mo=64,Jd=32,dw=Mo+Jd,Qd=new Map;Zd.exports={encrypt:Sw,decrypt:hw,createNatsTableStreamName:Tw};function Sw(e){let t=ps.randomBytes(Ew),r=ps.randomBytes(lw),s=ps.createCipheriv(Xd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(Sw,"encrypt");function hw(e){let t=e.substr(0,Mo),r=e.substr(Mo,Jd),s=e.substr(dw,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ps.createDecipheriv(Xd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(hw,"decrypt");function Tw(e,t){let r=`${e}.${t}`,s=Qd.get(r);return s||(s=ps.createHash("md5").update(`${e}.${t}`).digest("hex"),Qd.set(r,s)),s}a(Tw,"createNatsTableStreamName")});var hi=S((Ev,nS)=>{"use strict";var jd=gs(),Ut=p(),eS=In(),fw=require("lodash"),Rw=require("path"),mw=Is(),Po=g(),{promisify:tS}=require("util"),x=f(),{handleHDBError:li,hdb_errors:Aw}=q(),{HDB_ERROR_MSGS:di,HTTP_STATUS_CODES:rS}=Aw,Nw=Q();Nw.initSync();var zd=F(),Ow=k(),Cs=tS(jd.searchByValue),gw=tS(jd.searchByHash),Lr="name",sS="hash_attribute",Bo="schema",pw="schema_table",Iw="attribute";nS.exports={describeAll:Cw,describeTable:Si,describeSchema:Lw};async function Cw(e){try{let t=Po.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Lr,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[Lr]},i=await Cs(n);if(Po.isEmptyOrZeroLength(i))return{};let o={},_={};for(let T in i)o[i[T].name]=!0,!t&&!s&&(_[i[T].name]=r[i[T].name].describe);let c={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:x.ID_ATTRIBUTE_STRING,search_value:x.WILDCARD_SEARCH_VALUE,get_attributes:[sS,x.ID_ATTRIBUTE_STRING,Lr,Bo]},u=await Cs(c),E=[];for(let T of u)try{let d;if(t||s)d=await Si({schema:T.schema,table:T.name});else if(r&&r[T.schema].describe&&r[T.schema].tables[T.name].describe){let A=r[T.schema].tables[T.name].attribute_permissions;d=await Si({schema:T.schema,table:T.name},A)}d&&E.push(d)}catch(d){Ut.error(d)}let l={};for(let T in E)t||s?(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]):_[E[T].schema]&&(l[E[T].schema]==null&&(l[E[T].schema]={}),l[E[T].schema][E[T].name]=E[T],o[E[T].schema]&&delete o[E[T].schema]);for(let T in o)t||s?l[T]={}:_[T]&&(l[T]={});return l}catch(t){return Ut.error("Got an error in describeAll"),Ut.error(t),li(new Error,di.DESCRIBE_ALL_ERR)}}a(Cw,"describeAll");async function Si(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=eS.describe_table(e);if(o)throw o;if(r===x.SYSTEM_SCHEMA_NAME)return global.hdb_schema[x.SYSTEM_SCHEMA_NAME][s];let _={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Lr,search_value:s,hash_values:[],get_attributes:[x.WILDCARD_SEARCH_VALUE]},c=await Cs(_);if(!c||c.length===0)throw li(new Error,di.TABLE_NOT_FOUND(e.schema,e.table),rS.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw li(new Error,di.INVALID_TABLE_ERR(i));let E={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:pw,search_value:r+"."+s,get_attributes:[Iw]},l=await Cs(E);l=fw.uniqBy(l,T=>T.attribute),n&&n.length>0&&(l=bw(n)),i.attributes=l,i.clustering_stream_name=mw.createNatsTableStreamName(u.schema,u.name);try{let T=Rw.join(Ow.getBaseSchemaPath(),i.schema.toString()),d=await zd.openEnvironment(T,i.name),A=zd.statDBI(d,i.hash_attribute);i.record_count=A.entryCount}catch(T){Ut.warn(`unable to stat table dbi due to ${T}`)}}catch(E){Ut.error(`There was an error getting attributes for table '${u.name}'`),Ut.error(E)}return i}a(Si,"descTable");function bw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(bw,"getAttrsByPerms");async function Lw(e){let t=eS.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:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Bo,search_value:s,hash_values:[],get_attributes:[sS,x.ID_ATTRIBUTE_STRING,Lr,Bo]},i=await Cs(n);if(i&&i.length<1){let o={schema:x.SYSTEM_SCHEMA_NAME,table:x.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:x.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Lr]},_=await gw(o);if(_&&_.length<1)throw li(new Error,di.SCHEMA_NOT_FOUND(e.schema),rS.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Po.isEmpty(c)||c.describe){let u=await Si({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Ut.error(`Error describing schema table '${e.schema}.${_}'`),Ut.error(c)}})),o}}a(Lw,"describeSchema")});var Ti=S((Sv,cS)=>{var lv=require("async"),wr=Wt(),dv=p(),{callbackify:oS,promisify:ww}=require("util");cS.exports={setSchemaDataToGlobal:iS,getTableSchema:Dw,getSystemSchema:Pw,setSchemaDataToGlobalAsync:ww(iS)};var _S=hi(),yw=oS(_S.describeAll),Uw=oS(_S.describeTable);function iS(e){yw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=wr),global.hdb_schema=r,e(null,null)})}a(iS,"setSchemaDataToGlobal");function aS(e,t){return e==="system"?wr[t]:global.hdb_schema[e][t]}a(aS,"returnSchema");function Dw(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Mw(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,aS(e,t))}):r(null,aS(e,t))}a(Dw,"getTableSchema");function Mw(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=wr:global.hdb_schema={system:wr},r();return}Uw(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:wr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Mw,"setTableDataToGlobal");function Pw(){return wr}a(Pw,"getSystemSchema")});var Ai=S((hv,lS)=>{"use strict";var Ri=ya(),Fe=g(),Bw=require("util"),mi=Jt(),Hw=Ti(),Ho=p(),{handleHDBError:Dt,hdb_errors:vw}=q(),{HTTP_STATUS_CODES:zt}=vw,Gw=Bw.promisify(Hw.getTableSchema),qw="updated",uS="inserted",ES="upserted";lS.exports={insert:xw,update:Vw,upsert:kw,validation:Fw,flush:$w};async function Fw(e){if(Fe.isEmpty(e))throw new Error("invalid update parameters defined.");if(Fe.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Fe.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Gw(e.schema,e.table),r=Ri(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Fe.isEmptyOrZeroLength(_[s]))throw Ho.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Fe.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ho.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Fe.isEmpty(_[s])&&_[s]!==""&&n.has(Fe.autoCast(_[s]))&&(_.skip=!0),n.add(Fe.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Fw,"validation");async function xw(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.createRecords(e);return fi(uS,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(xw,"insertData");async function Vw(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.updateRecords(e);return Fe.isEmpty(s.existing_rows)?fi(qw,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):fi(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Vw,"updateData");async function kw(e){if(e.operation!=="upsert")throw Dt(new Error,"invalid operation, must be upsert",zt.INTERNAL_SERVER_ERROR);let t=Ri(e);if(t)throw Dt(new Error,t.message,zt.BAD_REQUEST);let r=Fe.checkSchemaTableExist(e.schema,e.table);if(r)throw Dt(new Error,r,zt.BAD_REQUEST);try{let s=await mi.upsertRecords(e);return fi(ES,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Dt(s,null,null,Ho.ERR,n)}}a(kw,"upsertData");function fi(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===uS?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===ES?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(fi,"returnObject");function $w(e){return mi.flush(e.schema,e.table)}a($w,"flush")});var SS=S((Tv,dS)=>{var Yw=Ke(),Kw={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};dS.exports=function(e){return Yw.validateObject(e,Kw)}});var RS=S((fv,fS)=>{var Ww=Ke(),vo=require("joi"),{hdb_schema_table:hS}=kt(),TS={schema:hS,table:hS},Qw={date:vo.date().iso().required()},Xw={timestamp:vo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};fS.exports=function(e,t){let r=t==="timestamp"?{...TS,...Xw}:{...TS,...Qw},s=vo.object(r);return Ww.validateBySchema(e,s)}});var OS=S((Rv,NS)=>{var Jw=Ke(),mS=require("joi"),{hdb_schema_table:AS}=kt(),Zw=mS.object({schema:AS,table:AS,hash_values:mS.array().required()});NS.exports=function(e){return Jw.validateBySchema(e,Zw)}});var pS=S((mv,gS)=>{"use strict";var Ni=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Ni,"InsertObject");var Oi=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(Oi,"NoSQLSeachObject");var gi=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(gi,"DeleteResponseObject");gS.exports={InsertObject:Ni,NoSQLSeachObject:Oi,DeleteResponseObject:gi}});var Fo=S((Av,wS)=>{"use strict";var CS=RS(),zw=OS(),pi=g(),IS=require("moment"),bS=p(),{promisify:jw,callbackify:ey}=require("util"),jt=f(),ty=Ti(),Go=jw(ty.getTableSchema),qo=Jt(),{DeleteResponseObject:ry}=pS(),{handleHDBError:Mt,hdb_errors:sy}=q(),{HDB_ERROR_MSGS:Ii,HTTP_STATUS_CODES:Pt}=sy,ny="records successfully deleted",iy=ey(LS);wS.exports={delete:iy,deleteRecord:LS,deleteFilesBefore:ay,deleteAuditLogsBefore:oy};async function ay(e){let t=CS(e,"date");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(!IS(e.date,IS.ISO_8601).isValid())throw Mt(new Error,Ii.INVALID_DATE,Pt.BAD_REQUEST,jt.LOG_LEVELS.ERROR,Ii.INVALID_DATE,!0);let s=pi.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,s,!0);try{let n=await qo.deleteRecordsBefore(e);if(await Go(e.schema,e.table),bS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(ay,"deleteFilesBefore");async function oy(e){let t=CS(e,"timestamp");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Mt(new Error,Ii.INVALID_VALUE("Timestamp"),Pt.BAD_REQUEST,jt.LOG_LEVELS.ERROR,Ii.INVALID_VALUE("Timestamp"),!0);let r=pi.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,r,!0);try{let s=await qo.deleteAuditLogsBefore(e);return await Go(e.schema,e.table),bS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(oy,"deleteAuditLogsBefore");async function LS(e){let t=zw(e);if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=pi.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,jt.LOG_LEVELS.ERROR,r,!0);try{await Go(e.schema,e.table);let s=await qo.deleteRecords(e);return pi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${ny}`),s}catch(s){if(s.message===jt.SEARCH_NOT_FOUND_MESSAGE){let n=new ry;return n.message=jt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(LS,"deleteRecord")});var Ci=S((Nv,DS)=>{var _y=require("crypto"),yS=9;function cy(e){let t=Ey(yS),r=US(e+t);return t+r}a(cy,"createHash");function uy(e,t){let r=e.substr(0,yS),s=r+US(t+r);return e===s}a(uy,"validateHash");function Ey(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(Ey,"generateSalt");function US(e){return _y.createHash("md5").update(e).digest("hex")}a(US,"md5");DS.exports={hash:cy,validate:uy}});var PS=S((Ov,MS)=>{var xo=Ke(),fe={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 ly(e){return fe.password.presence=!0,fe.username.presence=!0,fe.role.presence=!0,fe.active.presence=!0,xo.validateObject(e,fe)}a(ly,"addUserValidation");function dy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,xo.validateObject(e,fe)}a(dy,"alterUserValidation");function Sy(e){return fe.password.presence=!1,fe.username.presence=!0,fe.role.presence=!1,fe.active.presence=!1,xo.validateObject(e,fe)}a(Sy,"dropUserValidation");MS.exports={addUserValidation:ly,alterUserValidation:dy,dropUserValidation:Sy}});var Re=S((pv,HS)=>{"use strict";var{platform:gv}=require("os"),hy="nats-server.zip",Vo="nats-server",Ty=process.platform==="win32"?`${Vo}.exe`:Vo,ko="HDB",fy=/^[^\s.,*>]+$/,BS="__request__",Ry=a(e=>`${e}.${BS}`,"REQUEST_SUBJECT"),my={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Ay={HUB:"hub.pid",LEAF:"leaf.pid"},Ny={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Oy={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ko,deliver_subject:"__HDB__.WORKQUEUE"},gy={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ko,deliver_subject:"HDB.SCHEMAQUEUE"},py={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ko,deliver_subject:"HDB.USERQUEUE"},Iy={SUCCESS:"success",ERROR:"error"},Cy={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},by={TXN:"txn",MSGID:"msgid"};HS.exports={NATS_SERVER_ZIP:hy,NATS_SERVER_NAME:Vo,NATS_BINARY_NAME:Ty,PID_FILES:Ay,NATS_CONFIG_FILES:my,SERVER_SUFFIX:Ny,WORK_QUEUE_CONSUMER_NAMES:Oy,SCHEMA_QUEUE_CONSUMER_NAMES:gy,USER_QUEUE_CONSUMER_NAMES:py,NATS_TERM_CONSTRAINTS_RX:fy,REQUEST_SUFFIX:BS,UPDATE_REMOTE_RESPONSE_STATUSES:Iy,CLUSTER_STATUS_STATUSES:Cy,REQUEST_SUBJECT:Ry,SUBJECT_PREFIXES:by}});var GS=S((Iv,vS)=>{"use strict";var Bt=f(),bs=class{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.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(bs,"BaseLicense");var bi=class extends bs{constructor(t=0,r=Bt.STORAGE_TYPES_ENUM.LMDB,s=Bt.LICENSE_VALUES.API_CALL_DEFAULT,n=Bt.RAM_ALLOCATION_ENUM.DEFAULT,i=Bt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(bi,"ExtendedLicense");vS.exports={BaseLicense:bs,ExtendedLicense:bi}});var Qo=S((Cv,$S)=>{"use strict";var Ur=require("fs-extra"),qS=Ci(),FS=require("crypto"),Ly=require("moment"),wy=require("uuid").v4,me=p(),Yo=require("path"),yy=g(),Pe=f(),Uy=GS().ExtendedLicense,yr="invalid license key format",Dy="061183",My="mofi25",Py="aes-256-cbc",By=16,Hy=32,xS=Q();xS.initSync();var $o;$S.exports={validateLicense:VS,generateFingerPrint:Gy,licenseSearch:kS,getLicense:xy};function Ko(){return Yo.join(xS.getHdbBasePath(),Pe.LICENSE_KEY_DIR_NAME,Pe.LICENSE_FILE_NAME)}a(Ko,"getLicenseDirPath");function vy(){let e=Ko();return Yo.join(e,Pe.LICENSE_FILE_NAME)}a(vy,"getLicenseFilePath");function Wo(){let e=Ko();return Yo.join(e,Pe.REG_KEY_FILE_NAME)}a(Wo,"getFingerPrintFilePath");async function Gy(){let e=Wo();try{return await Ur.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(Gy,"generateFingerPrint");async function qy(){let e=wy(),t=qS.hash(e),r=Wo();try{await Ur.mkdirp(Ko()),await Ur.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}a(qy,"writeFingerprint");function VS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Pe.STORAGE_TYPES_ENUM.LMDB,api_call:Pe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Pe.RAM_ALLOCATION_ENUM.DEFAULT,version:Pe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Wo(),n=!1;try{n=Ur.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Ur.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(My),_=o[1];_=Buffer.concat([Buffer.from(_)],By);let c=Buffer.concat([Buffer.from(i)],Hy),u=FS.createDecipheriv(Py,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let d=Fy(o[0],i);if(d)E=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(yr),me.error(yr),new Error(yr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(yr),me.error(yr),new Error(yr)}else r.exp_date=E;r.exp_date<Ly().valueOf()&&(r.valid_date=!1),qS.validate(o[1],`${Dy}${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||me.error("Invalid licence"),r}a(VS,"validateLicense");function Fy(e,t){try{let r=FS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}a(Fy,"checkOldLicense");function kS(){let e=new Uy;e.api_call=0;let t=[];try{t=Ur.readFileSync(vy(),"utf-8").split(Pe.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(yy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=VS(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){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Pe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Pe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Pe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Pe.LICENSE_VALUES.API_CALL_DEFAULT),$o=e,e}a(kS,"licenseSearch");async function xy(){return $o||await kS(),$o}a(xy,"getLicense")});var ws=S((bv,nh)=>{"use strict";var QS="username is required",XS="nothing to update, must supply active, role or password to update",JS="password cannot be an empty string",ZS="If role is specified, it cannot be empty.",zS="active must be true or false";nh.exports={addUser:Xy,alterUser:Jy,dropUser:zy,userInfo:jy,listUsers:wi,listUsersExternal:eU,setUsersToGlobal:Ls,findAndValidateUser:sU,getClusterUser:nU,USERNAME_REQUIRED:QS,ALTERUSER_NOTHING_TO_UPDATE:XS,EMPTY_PASSWORD:JS,EMPTY_ROLE:ZS,ACTIVE_BOOLEAN:zS};var jS=Ai(),Vy=Fo(),Jo=Ci(),eh=PS(),th=gs(),Zo=_s(),re=g(),rh=require("validate.js"),w=p(),{promisify:zo}=require("util"),jo=Is(),er=f(),YS=Re(),ky=Jr(),e_=Q(),$y=Qo(),Yy=Wt(),{handleHDBError:ot,hdb_errors:Ky}=q(),{HTTP_STATUS_CODES:_t,AUTHENTICATION_ERROR_MSGS:Xo,HDB_ERROR_MSGS:Dr}=Ky,{UserEventMsg:t_}=Tr(),KS=require("lodash"),sh={username:!0,active:!0,role:!0,password:!0},WS=new Map,Li=zo(th.searchByValue),Wy=zo(th.searchByHash),Qy=zo(Vy.delete);async function Xy(e){let t=rh.cleanAttributes(e,sh),r=eh.addUserValidation(t);if(r)throw ot(new Error,r.message,_t.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 Li(s)}catch(u){throw w.error("There was an error searching for a role in add user"),w.error(u),u}if(!n||n.length<1)throw ot(new Error,Dr.ROLE_NAME_NOT_FOUND(t.role),_t.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ot(new Error,Dr.DUP_ROLES_FOUND(t.role),_t.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=jo.encrypt(t.password)),t.password=Jo.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await jS.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await Ls()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw ot(new Error,Dr.USER_ALREADY_EXISTS(t.username),_t.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.ADD_USER,c,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),`${_.username} successfully added`}a(Xy,"addUser");async function Jy(e){let t=rh.cleanAttributes(e,sh);if(re.isEmptyOrZeroLength(t.username))throw new Error(QS);if(re.isEmptyOrZeroLength(t.password)&&re.isEmptyOrZeroLength(t.role)&&re.isEmptyOrZeroLength(t.active))throw new Error(XS);if(!re.isEmpty(t.password)&&re.isEmptyOrZeroLength(t.password.trim()))throw new Error(JS);if(!re.isEmpty(t.active)&&!re.isBoolean(t.active))throw new Error(zS);let r=Zy(t.username);if(!re.isEmpty(t.password)&&!re.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jo.encrypt(t.password)),t.password=Jo.hash(t.password)),t.role==="")throw new Error(ZS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await Li(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Dr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),ot(new Error,c,_t.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Dr.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),ot(new Error,c,_t.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await jS.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await Ls()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.ALTER_USER,i,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),n}a(Jy,"alterUser");function Zy(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Zy,"isClusterUser");async function zy(e){try{let t=eh.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(re.isEmpty(global.hdb_users.get(e.username)))throw ot(new Error,Dr.USER_NOT_EXIST(e.username),_t.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Qy(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await Ls()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,re.sendTransactionToSocketCluster(er.INTERNAL_SC_CHANNELS.DROP_USER,n,e_.get(er.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Zo.signalUserChange(new t_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(zy,"dropUser");async function jy(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 Wy(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}a(jy,"userInfo");async function eU(){let e;try{e=await wi()}catch(t){throw w.error("Got an error listing users."),w.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(eU,"listUsersExternal");async function wi(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=KS.cloneDeep(await Li(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!re.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=KS.cloneDeep(await Li(s))}catch(o){throw w.error("Got an error searching for users."),w.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],tU(_.role),i.set(_.username,_)}return(await $y.getLicense()).enterprise?i:rU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),re.errorizeMessage(e)}return null}a(wi,"listUsers");function tU(e){try{if(!e){w.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(Yy)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}a(tU,"appendSystemTablesToRole");function rU(e){try{if(w.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?(w.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}a(rU,"nonEnterpriseFilter");async function Ls(){try{let e=await wi();global.hdb_users=e}catch(e){throw w.error(e),e}}a(Ls,"setUsersToGlobal");async function sU(e,t,r=!0){global.hdb_users||await Ls();let s=global.hdb_users.get(e);if(!s)throw ot(new Error,Xo.GENERIC_AUTH_FAIL,_t.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ot(new Error,Xo.USER_INACTIVE,_t.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(WS.get(t)===s.password)return n;if(Jo.validate(s.password,t))WS.set(t,s.password);else throw ot(new Error,Xo.GENERIC_AUTH_FAIL,_t.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sU,"findAndValidateUser");async function nU(){let e=await wi(),t=ky.getConfigFromFile(er.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!re.isEmpty(r))return r.decrypt_hash=jo.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+YS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+YS.SERVER_SUFFIX.ADMIN,r}a(nU,"getClusterUser")});var ah=S((Lv,ih)=>{"use strict";var iU=f().OPERATIONS_ENUM,yi=class{constructor(t,r,s,n=void 0){this.operation=iU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(yi,"UpdateObject");ih.exports=yi});var _h=S((wv,oh)=>{"use strict";var aU={OPERATION:"operation",REFRESH:"refresh"},Ui=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Ui,"JWTTokens");var Di=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Di,"JWTRSAKeys");oh.exports={JWTTokens:Ui,TOKEN_TYPE_ENUM:aU,JWTRSAKeys:Di}});var dh=S((yv,lh)=>{"use strict";var Us=require("jsonwebtoken"),r_=require("fs-extra"),s_=g(),xe=f(),{handleHDBError:Ce,hdb_errors:oU}=q(),{HTTP_STATUS_CODES:be,AUTHENTICATION_ERROR_MSGS:Le}=oU,ys=p(),ch=Ci(),a_=ws(),_U=Ai().update,cU=ah(),uU=_s(),{UserEventMsg:EU}=Tr(),Ht=Q();Ht.initSync();var n_=require("path"),{JWTTokens:lU,JWTRSAKeys:dU,TOKEN_TYPE_ENUM:Mi}=_h(),SU=Ht.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(xe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",hU=Ht.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(xe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pi="RS256",i_;lh.exports={createTokens:TU,validateOperationToken:RU,refreshOperationToken:fU,validateRefreshToken:Eh};async function TU(e){if(s_.isEmpty(e)||typeof e!="object")throw Ce(new Error,Le.INVALID_AUTH_OBJECT,be.BAD_REQUEST,void 0,void 0,!0);if(s_.isEmpty(e.username))throw Ce(new Error,Le.USERNAME_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);if(s_.isEmpty(e.password))throw Ce(new Error,Le.PASSWORD_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await a_.findAndValidateUser(e.username,e.password),!t)throw Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ys.error(T),Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bi(),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 uh(i,r.private_key,r.passphrase),_=await Us.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:hU,algorithm:Pi,subject:Mi.REFRESH}),c=ch.hash(_),u=new cU(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await _U(u)}catch(T){ys.error(T),l=T}if(l!==void 0||E.skipped_hashes.length>0)throw Ce(new Error,Le.REFRESH_TOKEN_SAVE_FAILED,be.INTERNAL_SERVER_ERROR);return uU.signalUserChange(new EU(process.pid)),new lU(o,_)}a(TU,"createTokens");async function uh(e,t,r){return await Us.sign(e,{key:t,passphrase:r},{expiresIn:SU,algorithm:Pi,subject:Mi.OPERATION})}a(uh,"signOperationToken");async function Bi(){if(i_===void 0)try{let e=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PASSPHRASE_NAME),t=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=n_.join(Ht.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await r_.readFile(e)).toString(),n=(await r_.readFile(t)).toString(),i=(await r_.readFile(r)).toString();i_=new dU(i,n,s)}catch(e){throw ys.error(e),Ce(new Error,Le.NO_ENCRYPTION_KEYS,be.INTERNAL_SERVER_ERROR)}return i_}a(Bi,"getJWTRSAKeys");async function fU(e){if(!e)throw Ce(new Error,Le.INVALID_BODY,be.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ce(new Error,Le.REFRESH_TOKEN_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);await Eh(e.refresh_token);let t=await Bi(),r=await Us.decode(e.refresh_token);return{operation_token:await uh({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(fU,"refreshOperationToken");async function RU(e){try{let t=await Bi(),r=await Us.verify(e,t.public_key,{algorithms:Pi,subject:Mi.OPERATION});return await a_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ys.warn(t),t.name&&t.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}}a(RU,"validateOperationToken");async function Eh(e){let t;try{let r=await Bi(),s=await Us.verify(e,r.public_key,{algorithms:Pi,subject:Mi.REFRESH});t=await a_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ys.warn(r),r.name&&r.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}if(!ch.validate(t.refresh_token,e))throw Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED);return t}a(Eh,"validateRefreshToken")});var fh=S((Dv,Th)=>{"use strict";var mU=SS(),Mr=require("passport"),AU=require("passport-local").Strategy,NU=require("passport-http").BasicStrategy,OU=require("util"),gU=ws(),hh=OU.callbackify(gU.findAndValidateUser),Uv=Be(),pU=f(),Sh=dh();Mr.use(new AU(function(e,t,r){hh(e,t,r)}));Mr.use(new NU(function(e,t,r){hh(e,t,r)}));Mr.serializeUser(function(e,t){t(null,e)});Mr.deserializeUser(function(e,t){t(null,e)});function IU(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Mr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===pU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Sh.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Sh.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Mr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(IU,"authorize");function CU(e,t){let r=mU(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(CU,"checkPermissions");Th.exports={authorize:IU,checkPermissions:CU}});var Ds=S((Mv,Rh)=>{"use strict";var Hi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hi,"Node");var vi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(vi,"NodeSubscription");Rh.exports={Node:Hi,NodeSubscription:vi}});var Ah=S((Pv,mh)=>{"use strict";var bU=f().OPERATIONS_ENUM,Gi=class{constructor(t,r,s,n=void 0){this.operation=bU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gi,"UpsertObject");mh.exports=Gi});var Ms=S((Bv,Nh)=>{"use strict";var qi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(qi,"RemotePayloadObject");var Fi=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(Fi,"RemotePayloadSubscription");Nh.exports={RemotePayloadObject:qi,RemotePayloadSubscription:Fi}});var gh=S((Hv,Oh)=>{"use strict";var xi=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(xi,"TableSizeObject");Oh.exports=xi});var bh=S((vv,Ch)=>{"use strict";var LU=gh(),ph=require("path"),Ih=k(),wU=Se(),Pr=F(),yU=p();Ch.exports=UU;async function UU(e){let t=new LU;try{let r=ph.join(Ih.getBaseSchemaPath(),e.schema.toString()),s=await Pr.openEnvironment(r,e.name),n=Pr.statDBI(s,e.hash_attribute),i=ph.join(Ih.getTransactionAuditStorePath(),e.schema.toString()),o=await Pr.openEnvironment(i,e.name,!0),_=Pr.statDBI(o,wU.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Pr.environmentDataSize(r,e.name),u=await Pr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){yU.warn(`unable to stat table dbi due to ${r}`)}return t}a(UU,"lmdbGetTableSize")});var wh=S((Gv,Lh)=>{"use strict";var DU=f(),Vi=class{constructor(t){this.operator=DU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Vi,"SystemInformationOperation");Lh.exports=Vi});var Uh=S((qv,yh)=>{"use strict";var ki=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(ki,"SystemInformationObject");yh.exports=ki});var Mh=S((xv,Dh)=>{"use strict";var _e=require("systeminformation"),Br=p(),MU=f(),PU=bh(),BU=hi(),HU=Q();HU.initSync();var Fv=wh(),vU=Uh(),$i;Dh.exports={getHDBProcessInfo:u_,getNetworkInfo:l_,getDiskInfo:E_,getMemoryInfo:c_,getCPUInfo:__,getTimeInfo:o_,getSystemInformation:d_,systemInformation:GU,getTableSize:S_};function o_(){return _e.time()}a(o_,"getTimeInfo");async function __(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await _e.cpu();E.cpu_speed=await _e.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:T,raw_currentload_irq:d,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:b,cpus:Ae,...v}=await _e.currentLoad();return v.cpus=[],Ae.forEach(W=>{let{raw_load:$e,raw_load_idle:$s,raw_load_irq:V_,raw_load_nice:k_,raw_load_system:$_,raw_load_user:Ys,...Ot}=W;v.cpus.push(Ot)}),E.current_load=v,E}catch(e){return Br.error(`error in getCPUInfo: ${e}`),{}}}a(__,"getCPUInfo");async function c_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await _e.mem();return n}catch(e){return Br.error(`error in getMemoryInfo: ${e}`),{}}}a(c_,"getMemoryInfo");async function u_(){let e={core:[],clustering:[]};try{return(await _e.processes()).list.forEach(r=>{r.params.includes(MU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Br.error(`error in getHDBProcessInfo: ${t}`),e}}a(u_,"getHDBProcessInfo");async function E_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await _e.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await _e.fsStats();return e.read_write=u,e.size=await _e.fsSize(),e}catch(t){return Br.error(`error in getDiskInfo: ${t}`),e}}a(E_,"getDiskInfo");async function l_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _e.networkInterfaceDefault(),e.latency=await _e.inetChecksite("google.com"),(await _e.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...T}=s;e.interfaces.push(T)}),(await _e.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await _e.networkConnections(),e}catch(t){return Br.error(`error in getNetworkInfo: ${t}`),e}}a(l_,"getNetworkInfo");async function d_(){if($i!==void 0)return $i;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await _e.osInfo();e=_;let c=await _e.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,$i=e,$i}catch(t){return Br.error(`error in getSystemInformation: ${t}`),e}}a(d_,"getSystemInformation");async function S_(){let e=[],t=await BU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await PU(s));return e}a(S_,"getTableSize");async function GU(e){let t=new vU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await d_(),t.time=o_(),t.cpu=await __(),t.memory=await c_(),t.disk=await E_(),t.network=await l_(),t.harperdb_processes=await u_(),t.table_size=await S_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await d_();break;case"time":t.time=o_();break;case"cpu":t.cpu=await __();break;case"memory":t.memory=await c_();break;case"disk":t.disk=await E_();break;case"network":t.network=await l_();break;case"harperdb_processes":t.harperdb_processes=await u_();break;case"table_size":t.table_size=await S_();break;default:break}return t}a(GU,"systemInformation")});var h_=S((Vv,qU)=>{qU.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 Bh=S((Yv,Ph)=>{"use strict";var kv=require("fs-extra"),$v=p();Ph.exports={version:FU,printVersion:VU,nodeVersion:xU};var vt=h_();function FU(){if(vt)return vt.version}a(FU,"version");function xU(){if(vt&&vt.engines&&vt.engines["preferred-node"])return vt.engines["preferred-node"]}a(xU,"nodeVersion");function VU(){vt&&console.log(`HarperDB Version ${vt.version}`)}a(VU,"printVersion")});var Hr=S((Qv,qh)=>{"use strict";var kU=Ai(),T_=g(),f_=require("util"),tr=f(),Hh=Q();Hh.initSync();var $U=fh(),vh=gs(),{Node:Kv,NodeSubscription:Wv}=Ds(),YU=hs(),KU=Ah(),{RemotePayloadObject:WU,RemotePayloadSubscription:QU}=Ms(),{handleHDBError:XU,hdb_errors:JU}=q(),{HTTP_STATUS_CODES:ZU,HDB_ERROR_MSGS:zU}=JU,jU=ht(),eD=Mh(),tD=Bh(),rD=f_.promisify($U.authorize),sD=f_.promisify(vh.searchByHash),nD=f_.promisify(vh.searchByValue);qh.exports={authHeaderToUser:iD,isEmpty:aD,getNodeRecord:oD,upsertNodeRecord:_D,buildNodePayloads:cD,checkClusteringEnabled:uD,getAllNodeRecords:ED,getSystemInfo:lD,reverseSubscription:Gh};async function iD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await rD(t,null),e}a(iD,"authHeaderToUser");function aD(e){return e==null}a(aD,"isEmpty");async function oD(e){let t=new YU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return sD(t)}a(oD,"getNodeRecord");async function _D(e){let t=new KU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return kU.upsert(t)}a(_D,"upsertNodeRecord");function Gh(e){if(T_.isEmpty(e.subscribe)||T_.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(Gh,"reverseSubscription");function cD(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=T_.getTableHashAttribute(c,u),{subscribe:l,publish:T}=Gh(_),d=new QU(c,u,E,T,l,_.start_time);n.push(d)}return new WU(r,t,n,s)}a(cD,"buildNodePayloads");function uD(){if(!Hh.get(tr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw XU(new Error,zU.CLUSTERING_NOT_ENABLED,ZU.BAD_REQUEST,void 0,void 0,!0)}a(uD,"checkClusteringEnabled");async function ED(){let e=new jU(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return nD(e)}a(ED,"getAllNodeRecords");async function lD(){let e=await eD.getSystemInformation();return{hdb_version:tD.version(),node_version:e.node_version,platform:e.platform}}a(lD,"getSystemInfo")});var xh=S((Xv,Fh)=>{"use strict";var dD=Jt();Fh.exports={writeTransaction:SD};function SD(e,t,r){return dD.writeTransaction(e,t,r)}a(SD,"writeTransaction")});var Gt=S((aG,oT)=>{"use strict";var Rt=Q();Rt.initSync();var hD=require("fs-extra"),TD=require("semver"),Gs=require("path"),{monotonicFactory:fD}=require("ulidx"),RD=fD(),kh=require("util"),$h=require("child_process"),mD=kh.promisify($h.exec),AD=$h.spawn,V=Re(),K=f(),g_=g(),mt=p(),Yi=Is(),ND=xh(),Ps=Jr(),{encode:A_,decode:Yh}=require("msgpackr"),{isEmpty:rr}=g_,Kh=ws(),Jv=hs(),OD=gs(),Zv=kh.promisify(OD.searchByHash),{connect:gD,StorageType:Wh,RetentionPolicy:Qh,AckPolicy:Xh,DeliverPolicy:N_,NatsConnection:zv,JetStreamManager:jv,JetStreamClient:eG,StringCodec:tG,JSONCodec:pD,createInbox:p_,StreamSource:rG,headers:ID,toJsMsg:CD,nuid:sG,JetStreamOptions:nG,ErrorCode:Vh,nanos:iG}=require("nats"),{PACKAGE_ROOT:bD}=f(),LD=h_(),Jh=pD(),wD="clustering",yD=LD.engines[V.NATS_SERVER_NAME],UD=Gs.join(bD,"dependencies"),O_=Gs.join(UD,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),R_,m_,Bs,Hs,vs,je;oT.exports={runCommand:Zh,checkNATSServerInstalled:DD,createConnection:I_,getConnection:Ki,getJetStreamManager:vr,getJetStream:zh,getNATSReferences:Ve,getServerList:PD,createLocalStream:C_,listStreams:jh,deleteLocalStream:BD,getServerConfig:qs,listRemoteStreams:HD,viewStream:vD,publishToStream:GD,createWorkQueueStream:qD,addSourceToWorkStream:eT,request:FD,removeSourceFromWorkStream:rT,reloadNATS:b_,reloadNATSHub:xD,reloadNATSLeaf:VD,extractServerName:tT,requestErrorHandler:kD,updateWorkStream:$D,createLocalTableStream:nT,createTableStreams:YD,purgeTableStream:iT,purgeSchemaTableStreams:KD,getStreamInfo:WD,updateNodeNameLocalStreams:QD,closeConnection:MD};async function Zh(e,t=void 0){let{stdout:r,stderr:s}=await mD(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
7
  `,"")}a(Zh,"runCommand");async function DD(){try{await hD.access(O_)}catch{return!1}let e=await Zh(`${O_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return TD.eq(t,yD)}a(DD,"checkNATSServerInstalled");async function I_(e,t,r,s=!0,n="127.0.0.1"){return gD({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Rt.get(K.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Rt.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Rt.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(I_,"createConnection");async function MD(){je&&(await je.close(),je=void 0)}a(MD,"closeConnection");async function Ki(){if(!je){let e=await Kh.getClusterUser();if(rr(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Rt.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);je=await I_(t,e.username,e.decrypt_hash)}return je}a(Ki,"getConnection");async function vr(){if(Hs)return Hs;rr(je)&&await Ki();let{domain:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Hs=await je.jetstreamManager({domain:e}),Hs}a(vr,"getJetStreamManager");async function zh(){if(vs)return vs;rr(je)&&await Ki();let{domain:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(rr(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return vs=je.jetstream({domain:e}),vs}a(zh,"getJetStream");async function Ve(){let e=je||await Ki(),t=Hs||await vr(),r=vs||await zh();return{connection:e,jsm:t,js:r}}a(Ve,"getNATSReferences");async function PD(){let e=Rt.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await Kh.getClusterUser(),s=await I_(e,t,r),n=p_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(Jh.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await g_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(PD,"getServerList");async function C_(e,t){let{jsm:r}=await Ve();await r.streams.add({name:e,storage:Wh.File,retention:Qh.Limits,subjects:t})}a(C_,"createLocalStream");async function jh(){let{jsm:e}=await Ve(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(jh,"listStreams");async function BD(e){let{jsm:t}=await Ve();await t.streams.delete(e)}a(BD,"deleteLocalStream");async function HD(e){let{connection:t}=await Ve(),r=[],s=p_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Jh.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(HD,"listRemoteStreams");async function vD(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ve(),i=RD(),o=[],_={ack_policy:Xh.None,durable_name:i,deliver_subject:i,deliver_policy:N_.All};t&&(_.deliver_policy=N_.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=CD(E),T=Yh(l.data),d={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:T,originators:[]},A=[];if(l.headers){let N=l.headers.get("originators");N&&(A=N.split(","),d.originators=A)}o.push(d),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(vD,"viewStream");async function GD(e,t,r=[],s=[]){mt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Ve(),o=await Wi(),_=`${e}.${o}`,c=ID();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{mt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,A_(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")mt.trace(`publishToStream creating stream: ${t}`),await C_(t,[_]),await i.publish(_,A_(r[u]),{headers:c});else throw l}}a(GD,"publishToStream");function qs(e){e=e.toLowerCase();let t=Gs.join(Rt.get(K.CONFIG_PARAMS.ROOTPATH),wD);if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return rr(m_)&&(m_={port:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Gs.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),m_;if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return rr(R_)&&(R_={port:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ps.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Gs.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),R_;mt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(qs,"getServerConfig");async function qD(e){let{jsm:t}=await Ve(),r=await Wi();try{await t.streams.add({name:e.stream_name,storage:Wh.File,retention:Qh.Workqueue,subjects:[`${V.SUBJECT_PREFIXES.MSGID}.${r}`,`${V.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Xh.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:N_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(qD,"createWorkQueueStream");async function eT(e,t,r){let{jsm:s}=await Ve(),n=await s.streams.info(t),i=tT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Yi.createNatsTableStreamName(_,c),E=i===e,l,T,d=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,b=n.config.sources.length;N<b;N++)if(l=n.config.sources[N],T=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){d=!0;break}if(d===!0){if(l.opt_start_time===o)return;await sT(_,c,l,t),n.config.sources.splice(T,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(eT,"addSourceToWorkStream");function tT(e){return e.split(".")[1]}a(tT,"extractServerName");async function rT(e,t,r){let{schema:s,table:n}=r,i=Yi.createNatsTableStreamName(s,n),{jsm:o}=await Ve(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await sT(s,n,u,t)}a(rT,"removeSourceFromWorkStream");async function sT(e,t,r,s){let n=await vr(),i;try{i=aT(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{mt.error("Error purging source subject",i,"from work stream",s)}}a(sT,"purgeSourceFromWorkStream");async function FD(e,t,r=2e3,s=p_()){if(!g_.isObject(t))throw new Error("data param must be an object");let n=A_(t),{connection:i}=await Ve(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return Yh(_.data)}a(FD,"request");function b_(e){return new Promise(async(t,r)=>{let s=AD(O_,["--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(b_,"reloadNATS");async function xD(){let{pid_file_path:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await b_(e)}a(xD,"reloadNATSHub");async function VD(){let{pid_file_path:e}=qs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await b_(e)}a(VD,"reloadNATSLeaf");function kD(e,t,r){let s;switch(e.code){case Vh.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Vh.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(kD,"requestErrorHandler");async function $D(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await ND.writeTransaction(K.SYSTEM_SCHEMA_NAME,K.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await eT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await rT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a($D,"updateWorkStream");async function nT(e,t){let r=Yi.createNatsTableStreamName(e,t),s=await Wi(),n=aT(e,t,s);await C_(r,[n])}a(nT,"createLocalTableStream");async function YD(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await nT(s,n)}}a(YD,"createTableStreams");async function iT(e,t){if(Rt.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Yi.createNatsTableStreamName(e,t),{jsm:s}=await Ve();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")mt.warn(r);else throw r}}a(iT,"purgeTableStream");async function KD(e,t){if(Rt.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await iT(e,t[r])}a(KD,"purgeSchemaTableStreams");async function WD(e){return(await vr()).streams.info(e)}a(WD,"getStreamInfo");function aT(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(aT,"createSubjectName");async function Wi(){if(Bs)return Bs;if(Bs=(await vr())?.nc?.info?.server_name,Bs===void 0)throw new Error("Unable to get jetstream manager server name");return Bs}a(Wi,"getJsmServerName");async function QD(){let e=await vr(),t=await Wi(),r=await jh();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===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");mt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(QD,"updateNodeNameLocalStreams")});var ST=S((oG,dT)=>{"use strict";var w_=Hr(),XD=Gt(),uT=Q(),Qi=f(),sr=Re(),JD=g(),L_=p(),{RemotePayloadObject:ZD}=Ms(),{ErrorCode:_T}=require("nats"),cT=uT.get(Qi.CONFIG_PARAMS.CLUSTERING_ENABLED),ET=uT.get(Qi.CONFIG_PARAMS.CLUSTERING_NODENAME);dT.exports={clusterStatus:zD,buildNodeStatus:lT};async function zD(){let e={node_name:ET,is_enabled:cT,connections:[]};if(!cT)return e;let t=await w_.getAllNodeRecords();if(JD.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(lT(t[s],e.connections));return await Promise.allSettled(r),e}a(zD,"clusterStatus");async function lT(e,t){let r=e.name,s=new ZD(Qi.OPERATIONS_ENUM.CLUSTER_STATUS,ET,void 0,await w_.getSystemInfo()),n,i,o=sr.CLUSTER_STATUS_STATUSES.OPEN;try{let c=Date.now();n=await XD.request(sr.REQUEST_SUBJECT(r),s),i=Date.now()-c,n.status===sr.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=sr.CLUSTER_STATUS_STATUSES.CLOSED,L_.error(`Error getting node status from ${r} `,n))}catch(c){L_.warn(`Error getting node status from ${r}`,c),c.code===_T.NoResponders?o=sr.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:c.code===_T.Timeout?o=sr.CLUSTER_STATUS_STATUSES.TIMEOUT:o=sr.CLUSTER_STATUS_STATUSES.CLOSED}let _=new jD(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let c={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qi.PRE_4_0_0_VERSION&&await w_.upsertNodeRecord(c)}catch(c){L_.error("Cluster status encountered an error updating system info for node:",r,c)}t.push(_)}a(lT,"buildNodeStatus");function jD(e,t,r,s,n,i,o,_){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=_}a(jD,"NodeStatusObject")});var RT=S((uG,fT)=>{"use strict";var y_=require("joi"),{string:Xi,boolean:hT,date:eM}=y_.types(),tM=Ke(),{validateSchemaExists:_G,validateTableExists:cG,validateSchemaName:rM}=kt(),sM=f(),nM=Re(),iM=Q(),aM=Xi.invalid(iM.get(sM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(nM.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(),TT={operation:Xi.valid("add_node","update_node"),node_name:aM,subscriptions:y_.array().items({table:Xi.required(),schema:Xi.custom(rM).required(),subscribe:hT.required(),publish:hT.required().custom(_M),start_time:eM.iso()}).min(1).required()};function oM(e){return tM.validateBySchema(e,y_.object(TT))}a(oM,"addUpdateNodeValidator");function _M(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(_M,"checkForFalsy");fT.exports={addUpdateNodeValidator:oM,validation_schema:TT}});var NT=S((EG,AT)=>{"use strict";var D_=hi(),{hdb_errors:U_}=q();AT.exports={checkSchemaExists:mT,checkSchemaTableExists:cM,schema_describe:D_};async function mT(e){if(!global.hdb_schema[e])try{let t=await D_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return U_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(mT,"checkSchemaExists");async function cM(e,t){let r=await mT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await D_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return U_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return U_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(cM,"checkSchemaTableExists")});var bT=S((dG,CT)=>{"use strict";var Gr=In(),nr=NT(),OT=p(),uM=require("uuid").v4,lG=require("clone"),Fr=_s(),ir=f(),EM=require("util"),ar=Jt(),{handleHDBError:ce,hdb_errors:lM}=q(),{HDB_ERROR_MSGS:qr,HTTP_STATUS_CODES:ue}=lM,{SchemaEventMsg:xr}=Tr(),gT=Gt();CT.exports={createSchema:dM,createSchemaStructure:pT,createTable:SM,createTableStructure:IT,createAttribute:mM,dropSchema:hM,dropTable:TM,dropAttribute:fM};async function dM(e){try{let t=await pT(e);return Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(dM,"createSchema");async function pT(e){let t=Gr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);if(!await nr.checkSchemaExists(e.schema))throw ce(new Error,qr.SCHEMA_EXISTS_ERR(e.schema),ue.BAD_REQUEST,ir.LOG_LEVELS.ERROR,qr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await ar.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(pT,"createSchemaStructure");async function SM(e){try{let t=await IT(e);return Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(SM,"createTable");async function IT(e){let t=Gr.create_table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);Gr.validateTableResidence(e.residence);let r=await nr.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(!await nr.checkSchemaTableExists(e.schema,e.table))throw ce(new Error,qr.TABLE_EXISTS_ERR(e.schema,e.table),ue.BAD_REQUEST,ir.LOG_LEVELS.ERROR,qr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:uM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ar.createTable(n,e);else throw ce(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ue.BAD_REQUEST);else await ar.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(IT,"createTableStructure");async function hM(e){let t=Gr.schema_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaExists(e.schema);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);let s=await nr.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await ar.dropSchema(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await gT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(hM,"dropSchema");async function TM(e){let t=Gr.table_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);return await ar.dropTable(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table)),await gT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(TM,"dropTable");async function fM(e){let t=Gr.attribute_object(e);if(t)throw ce(t,t.message,ue.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ce(new Error,r,ue.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ce(new Error,"You cannot drop a hash attribute",ue.BAD_REQUEST,void 0,void 0,!0);if(ir.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ce(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ue.BAD_REQUEST,void 0,void 0,!0);try{return await ar.dropAttribute(e),RM(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw OT.error(`Got an error deleting attribute ${EM.inspect(e)}.`),s}}a(fM,"dropAttribute");function RM(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(RM,"dropAttributeFromGlobal");async function mM(e){if(!global.hdb_schema[e.schema])throw ce(new Error,qr.SCHEMA_NOT_FOUND(e.schema),ue.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ce(new Error,qr.TABLE_NOT_FOUND(e.schema,e.table),ue.NOT_FOUND,void 0,void 0,!0);try{return await ar.createAttribute(e),Fr.signalSchemaChange(new xr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw OT.error(t),t}}a(mM,"createAttribute")});var PT=S((SG,MT)=>{"use strict";var M_=Gt(),LT=g(),wT=Re(),AM=f(),Ji=p(),yT=bT(),NM=To(),{RemotePayloadObject:OM}=Ms(),{handleHDBError:UT,hdb_errors:gM}=q(),{HTTP_STATUS_CODES:DT}=gM,{NodeSubscription:pM}=Ds();MT.exports=IM;async function IM(e,t){let r;try{r=await M_.request(`${t}.${wT.REQUEST_SUFFIX}`,new OM(AM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ji.trace("Response from remote describe all request:",r)}catch(o){Ji.error(`addNode received error from describe all request to remote node: ${o}`);let _=M_.requestErrorHandler(o,"add_node",t);throw UT(new Error,_,DT.INTERNAL_SERVER_ERROR,"error",_)}if(r.status===wT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw UT(new Error,o,DT.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:_,table:c}=o,u=LT.doesSchemaExist(_),E=s[_]!==void 0,l=LT.doesTableExist(_,c),T=s?.[_]?.[c]!==void 0;if(!u&&!E||!l&&!T){n.push(o);continue}if(!u&&E&&(Ji.trace(`addNode creating schema: ${_}`),await yT.createSchema({operation:"create_schema",schema:_})),!l&&T){Ji.trace(`addNode creating table: ${c} in schema: ${_}`);let A=new NM(_,c,s[_][c].hash_attribute);await yT.createTable(A)}await M_.createLocalTableStream(_,c);let d=new pM(_,c,o.publish,o.subscribe);d.start_time=o.start_time,i.push(d)}return{added:i,skipped:n}}a(IM,"reviewSubscriptions")});var GT=S((hG,vT)=>{"use strict";var{handleHDBError:Zi,hdb_errors:CM}=q(),{HTTP_STATUS_CODES:zi}=CM,{addUpdateNodeValidator:bM}=RT(),Fs=p(),HT=f(),BT=Re(),LM=g(),P_=Gt(),xs=Hr(),wM=Q(),yM=PT(),{Node:UM,NodeSubscription:DM}=Ds(),MM="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",PM="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",BM=wM.get(HT.CONFIG_PARAMS.CLUSTERING_NODENAME);vT.exports=HM;async function HM(e,t=!1){Fs.trace("addNode called with:",e),xs.checkClusteringEnabled();let r=bM(e);if(r)throw Zi(r,r.message,zi.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let l=await xs.getNodeRecord(s);if(!LM.isEmptyOrZeroLength(l))throw Zi(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,zi.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await yM(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=MM,o;let _=xs.buildNodePayloads(n,BM,HT.OPERATIONS_ENUM.ADD_NODE,await xs.getSystemInfo());Fs.trace("addNode sending remote payload:",_);let c;try{c=await P_.request(`${s}.${BT.REQUEST_SUFFIX}`,_)}catch(l){Fs.error(`addNode received error from request: ${l}`);let T=P_.requestErrorHandler(l,"add_node",s);throw Zi(new Error,T,zi.INTERNAL_SERVER_ERROR,"error",T)}if(c.status===BT.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${s}: ${c.message}`;throw Zi(new Error,l,zi.INTERNAL_SERVER_ERROR,"error",l)}Fs.trace(c);let u=[];for(let l=0,T=n.length;l<T;l++){let d=n[l];Fs.trace("Add node updating work stream for node:",s,"subscriptions:",d),await P_.updateWorkStream(d,s),n[l].start_time===void 0&&delete n[l].start_time,u.push(new DM(d.schema,d.table,d.publish,d.subscribe))}let E=new UM(s,u,c.system_info);return await xs.upsertNodeRecord(E),i.length>0?o.message=PM:o.message=`Successfully added '${s}' to manifest`,o}a(HM,"addNode")});var FT=S((TG,qT)=>{"use strict";var vM=Re(),ji=class{constructor(t,r,s,n,i,o,_,c,u,E,l,T,d){this.port=t,o===null&&(o=void 0),this.server_name=r+vM.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:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:T},HDB:{users:d}},this.system_account="SYS"}};a(ji,"HubConfigObject");qT.exports=ji});var kT=S((fG,VT)=>{"use strict";var xT=Re(),ea=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+xT.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+xT.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(ea,"LeafConfigObject");VT.exports=ea});var YT=S((RG,$T)=>{"use strict";var ta=class{constructor(t,r){this.user=t,this.password=r}};a(ta,"HdbUserObject");$T.exports=ta});var WT=S((mG,KT)=>{"use strict";var GM=Re(),ra=class{constructor(t,r){this.user=t+GM.SERVER_SUFFIX.ADMIN,this.password=r}};a(ra,"SysUserObject");KT.exports=ra});var ZT=S((AG,JT)=>{"use strict";var Vr=require("path"),aa=require("fs-extra"),qM=FT(),FM=kT(),xM=YT(),VM=WT(),B_=ws(),$r=g(),ke=Jr(),ia=f(),sa=Re(),{CONFIG_PARAMS:se}=ia,oa=p(),_a=Q(),QT=Is(),H_=Gt(),kr="clustering",kM=1e4,XT=5;JT.exports={generateNatsConfig:$M,removeNatsConfig:YM};async function $M(e=!1,t=void 0){_a.initSync();let r=_a.get(se.ROOTPATH),s=Vr.join(r,kr,sa.PID_FILES.HUB),n=Vr.join(r,kr,sa.PID_FILES.LEAF),i=Vr.join(r,kr,"leaf"),o=Vr.join(r,kr,sa.NATS_CONFIG_FILES.HUB_SERVER),_=Vr.join(r,kr,sa.NATS_CONFIG_FILES.LEAF_SERVER),c=ke.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=ke.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),E=ke.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),l=ke.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),T=ke.getConfigFromFile(se.CLUSTERING_NODENAME),d=ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await H_.checkNATSServerInstalled()||ca("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await B_.listUsers(),N=ke.getConfigFromFile(se.CLUSTERING_USER),b=await B_.getClusterUser();($r.isEmpty(b)||b.active!==!0)&&ca(`invalid cluster user '${N}'`),e||(await na(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await na(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await na(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await na(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let Ae=[],v=[];for(let[Ys,Ot]of A.entries())Ot.role.role===ia.ROLE_TYPES_ENUM.CLUSTER_USER&&Ot.active&&(Ae.push(new VM(Ot.username,QT.decrypt(Ot.hash))),v.push(new xM(Ot.username,QT.decrypt(Ot.hash))));let W=[],{hub_routes:$e}=ke.getClusteringRoutes();if(!$r.isEmptyOrZeroLength($e))for(let Ys of $e)W.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Ys.host}:${Ys.port}`);let $s=new qM(ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),T,s,c,u,E,l,d,ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),ke.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,Ae,v);t=$r.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ia.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await aa.writeJson(o,$s),oa.trace(`Hub server config written to ${o}`));let V_=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${d}`,k_=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${d}`,$_=new FM(ke.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),T,n,i,[V_],[k_],Ae,v,c,u,E,l);(t===void 0||t===ia.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await aa.writeJson(_,$_),oa.trace(`Leaf server config written to ${_}`))}a($M,"generateNatsConfig");async function na(e){let t=_a.get(e);$r.isEmpty(t)&&ca(`port undefined for '${e}'`),await $r.isPortTaken(t)&&ca(`'${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(na,"isPortAvailable");function ca(e){let t=`Error generating clustering config: ${e}`;oa.error(t),console.error(t),process.exit(1)}a(ca,"generateNatsConfigError");async function YM(e){let{port:t,config_file:r}=H_.getServerConfig(e),{username:s,decrypt_hash:n}=await B_.getClusterUser(),i=0,o=500;for(;i<XT;){try{let u=await H_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){oa.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=XT)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await $r.async_set_timeout(o*i)}let _="0".repeat(kM),c=Vr.join(_a.get(se.ROOTPATH),kr,r);await aa.writeFile(c,_),await aa.remove(c)}a(YM,"removeNatsConfig")});var G_=S((NG,nf)=>{"use strict";var Y=Q(),zT=Qo(),m=f(),v_=Re(),ee=require("path"),{PACKAGE_ROOT:ua}=f(),J="/dev/null",Yr=ee.join(ua,"launchServiceScripts"),jT=ee.join(ua,"utility/scripts"),KM=ee.join(jT,m.HDB_RESTART_SCRIPT),ef=ee.resolve(ua,"dependencies",`${process.platform}-${process.arch}`,v_.NATS_BINARY_NAME),Ee,le;function ct(){(Ee===void 0||le===void 0)&&(Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ct,"initLogConfig");function tf(){ct();let e=ee.join(le,m.PROCESS_LOG_NAMES.IPC),t={name:m.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:m.SERVICE_SERVERS_CWD.IPC};return Ee||(t.out_file=J,t.error_file=J),{...t,script:m.SERVICE_SERVERS.IPC}}a(tf,"generateIPCServerConfig");function rf(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.HDB),t=zT.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.HDB,script:m.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:Y.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Yr};return Ee||(s.out_file=J,s.error_file=J),s}a(rf,"generateHDBServerConfig");function sf(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ee.join(le,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=zT.licenseSearch(),r=t.ram_allocation?m.MEM_SETTING_KEY+t.ram_allocation:m.MEM_SETTING_KEY+m.RAM_ALLOCATION_ENUM.DEFAULT,s={name:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:m.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:Y.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Yr};return Ee||(s.out_file=J,s.error_file=J),s}a(sf,"generateCFServerConfig");function WM(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Y.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",v_.NATS_CONFIG_FILES.HUB_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:ef,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ee||(s.out_file=J,s.error_file=J),s}a(WM,"generateNatsHubServerConfig");function QM(){ct(),Y.initSync(),Ee=Y.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),le=Y.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Y.get(m.CONFIG_PARAMS.ROOTPATH),t=ee.join(e,"clustering",v_.NATS_CONFIG_FILES.LEAF_SERVER),r=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:ef,args:`-c ${t}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ee||(s.out_file=J,s.error_file=J),s}a(QM,"generateNatsLeafServerConfig");function XM(){ct(),Y.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Yr};return Ee||(t.out_file=J,t.error_file=J),t}a(XM,"generateNatsIngestServiceConfig");function JM(){ct(),Y.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:m.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Yr};return Ee||(t.out_file=J,t.error_file=J),t}a(JM,"generateNatsReplyServiceConfig");function ZM(){ct(),Y.initSync();let e=ee.join(le,m.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:m.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Yr,autorestart:!1};return Ee||(t.out_file=J,t.error_file=J),t}a(ZM,"generateClusteringUpgradeV4ServiceConfig");function zM(){ct();let e=ee.join(le,m.PROCESS_LOG_NAMES.PM2),t={name:m.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:m.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:jT};return Ee||(t.out_file=J,t.error_file=J),{...t,script:KM}}a(zM,"generateRestart");function jM(e){ct();let t=ee.join(le,m.PROCESS_LOG_NAMES.JOBS),r=ee.join(ua,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[m.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Yr,autorestart:!1};return Ee||(s.out_file=J,s.error_file=J),{...s,script:ee.join(r,"jobProcess.js")}}a(jM,"generateJobConfig");function eP(){return{apps:[tf(),rf(),sf()]}}a(eP,"generateAllServiceConfigs");nf.exports={generateAllServiceConfigs:eP,generateIPCServerConfig:tf,generateHDBServerConfig:rf,generateCFServerConfig:sf,generateRestart:zM,generateNatsHubServerConfig:WM,generateNatsLeafServerConfig:QM,generateNatsIngestServiceConfig:XM,generateNatsReplyServiceConfig:JM,generateClusteringUpgradeV4ServiceConfig:ZM,generateJobConfig:jM}});var ff=S((OG,Tf)=>{"use strict";var C=f(),Ea=g(),Vs=ZT(),la=Gt(),tP=Re(),M=require("pm2"),rP=require("fs-extra"),At=G_(),we=Q(),Nt=p(),sP=G_(),nP=Hr(),iP=require("util"),of=iP.promisify(require("child_process").exec),_f=require("path");Tf.exports={start:or,stop:Sa,reload:uf,restart:Ef,list:F_,describe:ha,connect:ut,kill:df,startAllServices:hP,startService:da,getUniqueServicesList:x_,restartAllServices:TP,stopAllServices:fP,isServiceRegistered:Sf,reloadStopStart:q_,restartHdb:lf,deleteProcess:dP,configureLogRotate:AP,startClustering:hf,isHdbRestartRunning:SP,isClusteringRunning:OP,stopClustering:NP,reloadClustering:gP};var{PACKAGE_ROOT:aP}=f(),oP="2.7.0",cf=_f.join(aP,"node_modules/pm2/bin/pm2"),_P="Log rotate installed.",cP="Error installing log rotate.",uP="Log rotate updated.",EP="Error updating log rotate.",lP="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 ut(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(ut,"connect");function or(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(or,"start");function Sa(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(Sa,"stop");function uf(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(uf,"reload");function Ef(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Ef,"restart");function dP(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(dP,"deleteProcess");async function lf(){await or(sP.generateRestart())}a(lf,"restartHdb");async function SP(){let e=await F_();for(let t in e)if(e[t].name===C.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(SP,"isHdbRestartRunning");function F_(){return new Promise(async(e,t)=>{try{await ut()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(F_,"list");function ha(e){return new Promise(async(t,r)=>{try{await ut()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ha,"describe");function df(){return new Promise(async(e,t)=>{try{await ut()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(df,"kill");async function hP(){try{await hf(),await or(At.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(hP,"startAllServices");async function da(e){try{let t;switch(e=e.toLowerCase(),e){case C.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=At.generateIPCServerConfig();break;case C.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=At.generateHDBServerConfig();break;case C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=At.generateCFServerConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=At.generateNatsIngestServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=At.generateNatsReplyServiceConfig();break;case C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=At.generateNatsHubServerConfig(),await or(t),await Vs.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=At.generateNatsLeafServerConfig(),await or(t),await Vs.removeNatsConfig(e);return;case C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=At.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await or(t)}catch(t){throw M.disconnect(),t}}a(da,"startService");async function x_(){try{let e=await F_(),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 M.disconnect(),e}}a(x_,"getUniqueServicesList");async function TP(e=[]){try{let t=!1,r=await x_();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===C.PROCESS_DESCRIPTORS.HDB?t=!0:await q_(o):await Ef(o))}t&&await q_(C.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(TP,"restartAllServices");async function fP(){try{let e=await x_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Sa(s.name)}if(await df(),we.get(C.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await rP.readFile(_f.join(we.get(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),C.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Nt.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(fP,"stopAllServices");async function Sf(e){return!Ea.isEmptyOrZeroLength(await ha(e))}a(Sf,"isServiceRegistered");async function q_(e){let t=e===C.PROCESS_DESCRIPTORS.HDB?we.get(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):we.get(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await ha(e),s=Ea.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===C.PROCESS_DESCRIPTORS.HDB?Nt.error(lP):(await Sa(e),await da(e)):e===C.PROCESS_DESCRIPTORS.HDB?await lf():await uf(e)}a(q_,"reloadStopStart");function RP(){return new Promise(async(e,t)=>{try{await ut()}catch(r){t(r)}M.stop(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(RP,"stopLogrotate");async function mP(){let{stdout:e,stderr:t}=await of(`${process.platform==="win32"?"node":""} ${cf} install pm2-logrotate@${oP}`);if(Nt.debug(`loadLogRotate stdout: ${e}`),t)throw Nt.error(cP),t;Nt.info(_P)}a(mP,"installLogRotate");async function af(){let e={max_size:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${cf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await of(t);if(Nt.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Nt.error(EP),s;Nt.info(uP)}a(af,"updateLogRotateConfig");async function AP(){we.initSync();let e=Ea.autoCastBoolean(we.get(C.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await ha(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Ea.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await mP(),await af();return}if(e&&s){await or(C.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await af();return}!e&&r===C.PM2_PROCESS_STATUSES.ONLINE&&await RP()}a(AP,"configureLogRotate");async function hf(){for(let t in C.CLUSTERING_PROCESSES){let r=C.CLUSTERING_PROCESSES[t];await da(r)}await la.createWorkQueueStream(tP.WORK_QUEUE_CONSUMER_NAMES),await la.updateNodeNameLocalStreams();let e=await nP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===C.PRE_4_0_0_VERSION){Nt.info("Starting clustering upgrade 4.0.0 process"),await da(C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(hf,"startClustering");async function NP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];await Sa(t)}}a(NP,"stopClustering");async function OP(){for(let e in C.CLUSTERING_PROCESSES){let t=C.CLUSTERING_PROCESSES[e];if(await Sf(t)===!1)return!1}return!0}a(OP,"isClusteringRunning");async function gP(){await Vs.generateNatsConfig(!0),await la.reloadNATSHub(),await la.reloadNATSLeaf(),await Vs.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Vs.removeNatsConfig(C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(gP,"reloadClustering")});var Of=S((gG,Nf)=>{"use strict";var Af=require("joi"),{string:Rf}=Af.types(),pP=Ke(),mf=f(),IP=Q(),CP=Re();Nf.exports=bP;function bP(e){let t=Rf.invalid(IP.get(mf.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(CP.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=Af.object({operation:Rf.valid(mf.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pP.validateBySchema(e,r)}a(bP,"removeNodeValidator")});var wf=S((pG,Lf)=>{"use strict";var{handleHDBError:gf,hdb_errors:LP}=q(),{HTTP_STATUS_CODES:pf}=LP,wP=Of(),ks=p(),If=Hr(),yP=g(),Ta=f(),Cf=Re(),bf=Gt(),UP=Q(),{RemotePayloadObject:DP}=Ms(),{NodeSubscription:MP}=Ds(),PP=Ts(),BP=Fo(),HP=UP.get(Ta.CONFIG_PARAMS.CLUSTERING_NODENAME);Lf.exports=vP;async function vP(e){ks.trace("removeNode called with:",e),If.checkClusteringEnabled();let t=wP(e);if(t)throw gf(t,t.message,pf.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await If.getNodeRecord(r);if(yP.isEmptyOrZeroLength(s))throw gf(new Error,`Node '${r}' was not found.`,pf.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new DP(Ta.OPERATIONS_ENUM.REMOVE_NODE,HP,[]),i,o=!1;try{i=await bf.request(`${r}.${Cf.REQUEST_SUFFIX}`,n),ks.trace("Remove node reply from remote node:",r,i)}catch(c){ks.error("removeNode received error from request:",c),o=!0}for(let c=0,u=s.subscriptions.length;c<u;c++){let E=s.subscriptions[c];ks.trace(`Remove node removing subscription: ${E.schema}.${E.table} for node: ${r}`);let l=new MP(E.schema,E.table,!1,!1);await bf.updateWorkStream(l,r)}let _=new PP(Ta.SYSTEM_SCHEMA_NAME,Ta.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await BP.deleteRecord(_),i?.status===Cf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ks.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(vP,"removeNode")});var Uf=S((IG,yf)=>{"use strict";var fa=f(),GP=g(),qP=Hr(),et=p(),FP=ST(),xP=GT(),VP=ff(),kP=Ti(),$P=wf(),YP=require("semver/functions/gte"),KP=3e4,WP=7;yf.exports=QP;async function QP(){try{et.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await kP.setSchemaDataToGlobalAsync();let e=await qP.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===fa.PRE_4_0_0_VERSION&&t.push(XP(n))}await Promise.allSettled(t),et.notify("Shutting down 4.0.0 clustering upgrade process"),await VP.deleteProcess(fa.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0)}catch(e){throw et.error(e),e}}a(QP,"updateAllNodes");async function XP(e){try{let{name:t,subscriptions:r}=e;et.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<WP;){let i=[];if(await FP.buildNodeStatus(e,i),et.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&YP(i[0].system_info.hdb_version,"4.0.0")){et.notify("Received open status from node:",t,"calling add node");let o={operation:fa.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await xP(o,!0),et.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),et.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await GP.async_set_timeout(KP)}s||(et.error("4.0.0 node update was unable to update connection to node:",t),et.error("Removing following node record from hdb_nodes",e),await $P({operation:fa.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw et.error(t),t}}a(XP,"updateNode")});var JP=Uf();(async()=>{try{await JP()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();