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.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/launchServiceScripts/launchCustomFunctions.js +5 -5
- package/launchServiceScripts/launchHarperDB.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +1 -1
- package/utility/scripts/restartHdb.js +5 -5
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
`,gm={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pm=["*","%"],Im="unauthorized_access",Cm="func_val",bm={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Lm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},wm="hdb_ipc_server",ym="hdb_ipc_client_",Um={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"},Dm={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Mm={STOPPED:"stopped",ONLINE:"online"},Pm="3.x.x";uc.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:rc,HDB_SUPPORT_URL:nc,HDB_PRICING_URL:sR,SUPPORT_HELP_MSG:nR,LICENSE_HELP_MSG:ic,HDB_PROC_NAME:j_,HDB_PROC_DESCRIPTOR:Na,CLUSTERING_LEAF_PROC_DESCRIPTOR:en,CLUSTERING_HUB_PROC_DESCRIPTOR:js,SYSTEM_SCHEMA_NAME:gR,HASH_FOLDER_NAME:pR,HDB_HOME_DIR_NAME:IR,UPDATE_FILE_NAME:wR,LICENSE_KEY_DIR_NAME:bR,BOOT_PROPS_FILE_NAME:LR,JOB_TYPE_ENUM:om,JOB_STATUS_ENUM:jR,SYSTEM_TABLE_NAMES:WR,SYSTEM_TABLE_HASH_ATTRIBUTES:QR,OPERATIONS_ENUM:R,VALID_S3_FILE_TYPES:em,S3_BUCKET_AUTH_KEYS:tm,VALID_SQL_OPS_ENUM:rm,GEO_CONVERSION_ENUM:nm,HDB_SETTINGS_NAMES:oc,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:im,SERVICE_ACTIONS_ENUM:sm,CLUSTER_MESSAGE_TYPE_ENUM:_m,CLUSTER_CONNECTION_DIRECTION_ENUM:cm,CLUSTER_EVENTS_DEFS_ENUM:dm,PERIOD_REGEX:ER,DOUBLE_PERIOD_REGEX:lR,UNICODE_PERIOD:dR,FORWARD_SLASH_REGEX:hR,UNICODE_FORWARD_SLASH:SR,ESCAPED_FORWARD_SLASH_REGEX:TR,ESCAPED_PERIOD_REGEX:fR,ESCAPED_DOUBLE_PERIOD_REGEX:RR,REG_KEY_FILE_NAME:ZR,RESTART_TIMEOUT_MS:DR,HDB_FILE_PERMISSIONS:MR,SCHEMA_DIR_NAME:HR,TRANSACTIONS_DIR_NAME:vR,LIMIT_COUNT_NAME:GR,ID_ATTRIBUTE_STRING:qR,INSERT_MODULE_ENUM:YR,UPGRADE_JSON_FIELD_NAMES_ENUM:KR,RESTART_CODE:yR,RESTART_CODE_NUM:UR,CLUSTER_OPERATIONS:gt,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:XR,HDB_INTERNAL_SC_CHANNEL_PREFIX:ye,INTERNAL_SC_CHANNELS:JR,CLUSTERING_MESSAGE_TYPES:Am,HDB_FILE_SUFFIX:CR,BLOB_FOLDER_NAME:PR,HDB_TRASH_DIR:BR,ORIGINATOR_SET_VALUE:Om,LICENSE_VALUES:Em,RAM_ALLOCATION_ENUM:lm,STORAGE_TYPES_ENUM:um,TIME_STAMP_NAMES_ENUM:_c,TIME_STAMP_NAMES:fm,PERMS_UPDATE_RELEASE_TIMESTAMP:Rm,SEARCH_NOT_FOUND_MESSAGE:iR,SEARCH_ATTRIBUTE_NOT_FOUND:aR,LICENSE_ROLE_DENIED_RESPONSE:oR,LICENSE_MAX_CONNS_REACHED:_R,BASIC_LICENSE_MAX_NON_CU_ROLES:sc,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:rR,VALUE_SEARCH_COMPARATORS:cc,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:mm,LICENSE_FILE_NAME:zR,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:hm,NEW_LINE:Nm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:uR,MOMENT_DAYS_TAG:mR,API_TURNOVER_SEC:AR,LOOPBACK:cR,CODE_EXTENSION:Zr,WILDCARD_SEARCH_VALUE:OR,NODE_ERROR_CODES:Sm,JAVASCRIPT_EXTENSION:z_,PERMS_CRUD_ENUM:gm,UNAUTHORIZED_PERMISSION_NAME:Im,SEARCH_WILDCARDS:pm,FUNC_VAL:Cm,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:bm,JWT_ENUM:Lm,CLUSTERING_FLAG:Tm,RUN_LOG:xR,INSTALL_LOG:FR,IPC_SERVER_MODULE:tc,HDB_IPC_SERVER:wm,IPC_EVENT_TYPES:Um,HDB_IPC_CLIENT_PREFIX:ym,CUSTOM_FUNCTION_PROC_NAME:ec,CUSTOM_FUNCTION_PROC_DESCRIPTOR:zs,SERVICES:Dm,MEM_SETTING_KEY:NR,HDB_RESTART_SCRIPT:Kf,PROCESS_DESCRIPTORS:Oa,SERVICE_SERVERS:zf,SERVICE_SERVERS_CWD:Zs,PROCESS_DESCRIPTORS_VALIDATE:Xf,LAUNCH_SERVICE_SCRIPTS:jf,LOG_LEVELS:Jf,PROCESS_NAME_ENV_PROP:VR,PROCESS_LOG_NAMES:Qf,PM2_PROCESS_STATUSES:Mm,CONFIG_PARAM_MAP:am,CONFIG_PARAMS:S,HDB_CONFIG_FILE:kf,HDB_DEFAULT_CONFIG_FILE:$f,ROLE_TYPES_ENUM:eR,BOOT_PROP_PARAMS:kR,INSTALL_PROMPTS:$R,HDB_ROOT_DIR_NAME:Yf,CLUSTERING_PROCESSES:Zf,FOREGROUND_PID_FILE:Wf,PACKAGE_ROOT:Ye,PRE_4_0_0_VERSION:Pm}});var hc=d((oB,dc)=>{"use strict";var Ec=require("minimist");dc.exports=Bm;function Bm(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=lc(process.env),s=lc(Ec(process.argv))):(r=process.env,s=Ec(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 lc(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(lc,"objKeysToLowerCase")});var g=d((_B,Oc)=>{"use strict";var Gt=require("fs-extra"),qt=require("path"),Tc=require("yaml"),fc=require("properties-reader"),j=f(),Hm=hc(),vm=require("os"),{PACKAGE_ROOT:ba}=f(),Oe={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},tn=qt.join(ba,"logs"),pt=process.env.pm_id===void 0,Gm=qt.join(ba,"config/yaml/",j.HDB_DEFAULT_CONFIG_FILE),La=process.env.PROCESS_NAME===void 0?j.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,ur,et,ut,Ae,Ia,Er;Er===void 0&&Rc();Oc.exports={createLogFile:qm,notify:Vm,fatal:km,error:Ca,warn:$m,info:Fm,debug:xm,trace:Ac,setLogLevel:Km,log_level:Ae};function Rc(){try{if(Er===void 0){let e=Ym();Er=fc(e),{level:Ae,config_log_path:Ia,to_file:et,to_stream:ut}=Wm(Er.get("settings_path"))}}catch(e){if(Er=void 0,e.code===j.NODE_ERROR_CODES.ENOENT){let t=Hm(Object.keys(j.CONFIG_PARAM_MAP),!0);for(let i in t){let o=j.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===j.CONFIG_PARAMS.LOGGING_LEVEL){Ae=_;continue}if(o===j.CONFIG_PARAMS.LOGGING_STDSTREAMS){ut=_;continue}o===j.CONFIG_PARAMS.LOGGING_FILE&&(et=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Qm();et=et===void 0?s:et,et=Sc(et),ut=ut===void 0?n:ut,ut=Sc(ut),Ae=Ae===void 0?r:Ae,Ia=tn;return}throw Ca("Error initializing log settings"),Ca(e),e}}a(Rc,"initLogSettings");function qm(e,t){if(!pt){Ac("createLogFile should only be used if the process is not being managed by pm2");return}Er===void 0&&Rc(),La=t;let r;e===j.PROCESS_LOG_NAMES.INSTALL?r=tn:r=Ia,et&&(ur=qt.join(r,e),Gt.ensureFileSync(ur))}a(qm,"createLogFile");function Ft(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": "${La}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
3
|
`}a(Ft,"createLogRecord");function mc(e){ur===void 0&&(La=j.PROCESS_DESCRIPTORS.INSTALL,Gt.ensureDirSync(tn),ur=qt.join(tn,j.PROCESS_LOG_NAMES.INSTALL),Gt.ensureFileSync(ur)),Gt.appendFileSync(ur,e)}a(mc,"writeToLogFile");function rn(e){et&&mc(e),ut&&process.stdout.write(e)}a(rn,"nonPm2LogStdOut");function wa(e){et&&mc(e),ut&&process.stderr.write(e)}a(wa,"nonPm2LogStdErr");function Fm(...e){if(Oe[Ae]<=Oe.info){let t=Ft("info",e);if(pt){rn(t);return}process.stdout.write(t)}}a(Fm,"info");function Ac(...e){if(Oe[Ae]<=Oe.trace){let t=Ft("trace",e);if(pt){rn(t);return}process.stdout.write(t)}}a(Ac,"trace");function Ca(...e){if(Oe[Ae]<=Oe.error){let t=Ft("error",e);if(pt){wa(t);return}process.stderr.write(t)}}a(Ca,"error");function xm(...e){if(Oe[Ae]<=Oe.debug){let t=Ft("debug",e);if(pt){rn(t);return}process.stdout.write(t)}}a(xm,"debug");function Vm(...e){if(Oe[Ae]<=Oe.notify){let t=Ft("notify",e);if(pt){rn(t);return}process.stdout.write(t)}}a(Vm,"notify");function km(...e){if(Oe[Ae]<=Oe.fatal){let t=Ft("fatal",e);if(pt){wa(t);return}process.stderr.write(t)}}a(km,"fatal");function $m(...e){if(Oe[Ae]<=Oe.warn){let t=Ft("warn",e);if(pt){wa(t);return}process.stderr.write(t)}}a($m,"warn");function Ym(){let e;try{e=vm.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qt.join(e,j.HDB_HOME_DIR_NAME,j.BOOT_PROPS_FILE_NAME);return Gt.existsSync(t)||(t=qt.join(ba,"utility/hdb_boot_properties.file")),t}a(Ym,"getPropsFilePath");function Km(e){Ae=e}a(Km,"setLogLevel");function Sc(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Sc,"autoCastBoolean");function Wm(e){try{if(e.includes("config/settings.js")){let o=fc(e);return{level:o.get(j.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qt.dirname(o.get(j.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(j.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Tc.parseDocument(Gt.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===j.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Wm,"getLogConfig");function Qm(){try{let e=Tc.parseDocument(Gt.readFileSync(Gm,"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(Qm,"getDefaultConfig")});var gc=d((cB,Nc)=>{"use strict";var Jm=require("util"),Xm=require("path"),Zm=require("child_process"),zm=Jm.promisify(Zm.execFile),jm=1e3*1e3*10;Nc.exports={findPs:eA};async function eA(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await zm("ps",["wwxo",`pid,${r}`],{maxBuffer:jm});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:Xm.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(eA,"findPs")});var Se=d((uB,Ic)=>{"use strict";var tA="__dbis__",rA="__environment_name__",sA="__dbi_defintion__",nA={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"},iA=["__createdtime__","__updatedtime__"],aA="\uFFFF",pc={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},oA=Object.values(pc);Ic.exports={INTERNAL_DBIS_NAME:tA,DBI_DEFINITION_NAME:sA,SEARCH_TYPES:nA,TIMESTAMP_NAMES:iA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:rA,TRANSACTIONS_DBI_NAMES_ENUM:pc,TRANSACTIONS_DBIS:oA,OVERFLOW_MARKER:aA}});var Ne=d((EB,Pc)=>{"use strict";var Cc=f(),bc=Se(),Lc={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},wc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),yc={500:wc("There was an error processing your request."),400:"Invalid request"},_A=yc[Lc.INTERNAL_SERVER_ERROR],cA={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.`},uA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},EA={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"},lA={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 ${bc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${bc.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"},dA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Cc.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 ${Cc.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"},Uc={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"},hA={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."},SA={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`},TA={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"},fA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},RA={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`},Dc={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.`},Mc={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}`},mA={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."},AA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},OA={...Uc,...EA,...cA,...hA,...SA,...TA,...fA,...RA,...dA,...Dc,...Mc,...mA,...AA,...uA};Pc.exports={CHECK_LOGS_WRAPPER:wc,HDB_ERROR_MSGS:OA,DEFAULT_ERROR_MSGS:yc,DEFAULT_ERROR_RESP:_A,HTTP_STATUS_CODES:Lc,LMDB_ERRORS_ENUM:lA,AUTHENTICATION_ERROR_MSGS:Uc,VALIDATION_ERROR_MSGS:Dc,IPC_ERRORS:Mc}});var Y=d((lB,vc)=>{"use strict";var lr=Ne(),NA=g(),gA=f(),zr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Bc),this.http_resp_code=s||lr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(lr.DEFAULT_ERROR_MSGS[s]?lr.DEFAULT_ERROR_MSGS[s]:lr.DEFAULT_ERROR_MSGS[lr.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&&NA[n](i)}};a(zr,"HdbError");function Bc(e,t,r,s=gA.LOG_LEVELS.ERROR,n=null,i=!1){if(Hc(e))return e;let o=new zr(e,t,r,s,n);return i&&delete o.stack,o}a(Bc,"handleHDBError");function Hc(e){return e.__proto__.constructor.name===zr.name}a(Hc,"isHDBError");vc.exports={isHDBError:Hc,handleHDBError:Bc,hdb_errors:lr}});var p=d((hB,zc)=>{"use strict";var xt=require("path"),pA=require("fs-extra"),re=g(),Gc=require("fs-extra"),IA=require("truncate-utf8-bytes"),jr=require("os"),CA=require("net"),bA=require("recursive-iterator"),ie=f(),kc=gc(),qc=require("papaparse"),sn=require("moment"),{inspect:LA}=require("util"),Fc=require("is-number"),dB=require("lodash"),{hdb_errors:nn}=Y(),$c=require("util").promisify(setTimeout),wA=100,yA=5,UA="",DA=4,xc=255,Vc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};zc.exports={isEmpty:Ue,isEmptyOrZeroLength:tt,arrayHasEmptyValues:BA,arrayHasEmptyOrZeroLengthValues:HA,buildFolderPath:vA,isBoolean:Yc,errorizeMessage:MA,stripFileExtension:qA,autoCast:FA,autoCastJSONDeep:ya,removeDir:VA,compareVersions:kA,isCompatibleDataVersion:$A,escapeRawValue:Wc,unescapeValue:YA,stringifyProps:KA,valueConverter:WA,timeoutPromise:JA,isClusterOperation:ZA,getClusterUser:eO,sendTransactionToSocketCluster:zA,checkGlobalSchemaTable:jA,getHomeDir:Qc,getPropsFilePath:QA,promisifyPapaParse:tO,removeBOM:Jc,createEventPromise:rO,checkProcessRunning:sO,checkSchemaTableExist:nO,checkSchemaExists:Xc,checkTableExists:Zc,getStartOfTomorrowInSeconds:iO,getLimitKey:aO,isObject:GA,isNotEmptyAndHasValue:PA,autoCasterIsNumberCheck:Kc,backtickASTSchemaItems:oO,isPortTaken:XA,stopProcess:_O,createForkArgs:cO,autoCastBoolean:uO,async_set_timeout:$c,getTableHashAttribute:EO,doesSchemaExist:lO,doesTableExist:dO,stringifyObj:hO,ms_to_time:SO,changeExtension:TO,PACKAGE_ROOT:ie.PACKAGE_ROOT};function MA(e){return e instanceof Error?e:new Error(e)}a(MA,"errorizeMessage");function Ue(e){return e==null}a(Ue,"isEmpty");function PA(e){return!Ue(e)&&(e||e===0||e===""||Yc(e))}a(PA,"isNotEmptyAndHasValue");function tt(e){return Ue(e)||e.length===0||e.size===0}a(tt,"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 HA(e){if(tt(e))return!0;for(let t=0;t<e.length;t++)if(tt(e[t]))return!0;return!1}a(HA,"arrayHasEmptyOrZeroLengthValues");function vA(...e){try{return e.join(xt.sep)}catch{console.error(e)}}a(vA,"buildFolderPath");function Yc(e){return Ue(e)?!1:e===!0||e===!1}a(Yc,"isBoolean");function GA(e){return Ue(e)?!1:typeof e=="object"}a(GA,"isObject");function qA(e){return tt(e)?UA:e.slice(0,-DA)}a(qA,"stripFileExtension");function FA(e){return Ue(e)||e===""||typeof e!="string"?e:Vc[e]!==void 0?Vc[e]:Kc(e)===!0?Number(e):e}a(FA,"autoCast");function xA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(xA,"autoCastJSON");function ya(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=ya(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ya(r);s!==r&&(e[t]=s)}return e}else return xA(e)}a(ya,"autoCastJSONDeep");function Kc(e){if(e.startsWith("0.")&&Fc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Fc(e))}a(Kc,"autoCasterIsNumberCheck");async function VA(e){if(tt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Gc.emptyDir(e),await Gc.remove(e)}catch(t){throw re.error(`Error removing files in ${e} -- ${t}`),t}}a(VA,"removeDir");function kA(e,t){if(tt(e)){re.info("Invalid current version sent as parameter.");return}if(tt(t)){re.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(kA,"compareVersions");function $A(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a($A,"isCompatibleDataVersion");function Wc(e){if(Ue(e))return e;let t=String(e);return t==="."?ie.UNICODE_PERIOD:t===".."?ie.UNICODE_PERIOD+ie.UNICODE_PERIOD:t.replace(ie.FORWARD_SLASH_REGEX,ie.UNICODE_FORWARD_SLASH)}a(Wc,"escapeRawValue");function YA(e){if(Ue(e))return e;let t=String(e);return t===ie.UNICODE_PERIOD?".":t===ie.UNICODE_PERIOD+ie.UNICODE_PERIOD?"..":String(e).replace(ie.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(YA,"unescapeValue");function KA(e,t){if(Ue(e))return re.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+jr.EOL}!tt(s)&&s[0]===";"?r+=" "+s+n+jr.EOL:tt(s)||(r+=s+"="+n+jr.EOL)}catch{re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(KA,"stringifyProps");function WA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){re.error(n),t=e}let r=String(Wc(t)),s=Buffer.byteLength(r)>xc?IA(r,xc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(WA,"valueConverter");function Qc(){let e;try{e=jr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Qc,"getHomeDir");function QA(){let e=xt.join(Qc(),ie.HDB_HOME_DIR_NAME,ie.BOOT_PROPS_FILE_NAME);return pA.existsSync(e)||(e=xt.join(__dirname,"../","hdb_boot_properties.file")),e}a(QA,"getPropsFilePath");function JA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(JA,"timeoutPromise");async function XA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=CA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(XA,"isPortTaken");function ZA(e){try{return ie.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){re.error(`Error checking operation against cluster ops ${t}`)}return!1}a(ZA,"isClusterOperation");function zA(e,t,r){if(global.hdb_socket_client!==void 0){re.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]=ie.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(zA,"sendTransactionToSocketCluster");function jA(e,t){if(!global.hdb_schema[e])return nn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return nn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(jA,"checkGlobalSchemaTable");function eO(e,t){if(Ue(t)){re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ue(e)||tt(e)){re.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){re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(eO,"getClusterUser");function tO(){qc.parsePromise=function(e,t){return new Promise(function(r,s){qc.parse(e,{header:!0,transformHeader:Jc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(tO,"promisifyPapaParse");function Jc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Jc,"removeBOM");function rO(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;re.info(`Got cluster status event response: ${LA(n)}`);try{i.cancel()}catch{re.error("Error trying to cancel timeout.")}s(n)})})}a(rO,"createEventPromise");async function sO(e){let t=!0,r=0;do await $c(wA*r++),(await kc.findPs(e)).length>0&&(t=!1);while(t&&r<yA);if(t)throw new Error(`process ${e} was not started`)}a(sO,"checkProcessRunning");function nO(e,t){let r=Xc(e);if(r)return r;let s=Zc(e,t);if(s)return s}a(nO,"checkSchemaTableExist");function Xc(e){if(!global.hdb_schema[e])return nn.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Xc,"checkSchemaExists");function Zc(e,t){if(!global.hdb_schema[e][t])return nn.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Zc,"checkTableExists");function iO(){let e=sn().utc().add(1,ie.MOMENT_DAYS_TAG).startOf(ie.MOMENT_DAYS_TAG).unix(),t=sn().utc().unix();return e-t}a(iO,"getStartOfTomorrowInSeconds");function aO(){return sn().utc().format("DD-MM-YYYY")}a(aO,"getLimitKey");function oO(e){try{let t=new bA(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){re.error("Got an error back ticking items."),re.error(t)}}a(oO,"backtickASTSchemaItems");async function _O(e){let t=jr.userInfo();(await kc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(_O,"stopProcess");function cO(e){return[e]}a(cO,"createForkArgs");function uO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(uO,"autoCastBoolean");function EO(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(EO,"getTableHashAttribute");function lO(e){return global?.hdb_schema?.[e]!==void 0}a(lO,"doesSchemaExist");function dO(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(dO,"doesTableExist");function hO(e){try{return JSON.stringify(e)}catch{return e}}a(hO,"stringifyObj");function SO(e){let t=sn.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(SO,"ms_to_time");function TO(e,t){let r=xt.basename(e,xt.extname(e));return xt.join(xt.dirname(e),r+t)}a(TO,"changeExtension")});var Ke=d((SB,jc)=>{"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("', '")}'`};jc.exports={validateObject:fO,validateObjectAsync:RO,validateBySchema:mO};function fO(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(fO,"validateObject");async function RO(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(RO,"validateObjectAsync");function mO(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mO,"validateBySchema")});var ru=d((TB,tu)=>{"use strict";var AO=require("fs-extra"),U=require("joi"),OO=require("os"),{boolean:ae,string:Et,number:rt,array:Ua}=U.types(),eu=require("path"),NO=g(),an=p(),gO=Ke(),pO="log",IO="custom_functions",CO="Invalid logging.rotation.maxSize unit. Available units are G, M or K",bO="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",LO="rootPath config parameter is undefined",wO="clustering.enabled config parameter is undefined",It=rt.min(0).required(),on=Ua.items({host:Et.required(),port:It}).empty(null),es;tu.exports={configValidator:yO,routesValidator:HO,route_constraints:on};function yO(e){if(es=e.rootPath,an.isEmpty(es))throw LO;let t=ae.required(),r=U.valid("production","development").required(),s=rt.min(1).max(1e3).empty(null).default(PO),n=Et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(BO),i=U.custom(DO).messages({"any.custom":"{:#label} {:#error}"}),o=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(an.isEmpty(_))throw wO;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:on}).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:on}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ae.required(),corsAccessList:Ua.required(),headersTimeout:rt.min(1).required(),https:ae.required(),keepAliveTimeout:rt.min(1).required(),port:It,timeout:rt.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:ae.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ae.required(),dateFormat:Et.required(),maxSize:Et.custom(MO).required(),retain:rt.min(0).required(),rotate:ae.required(),rotateInterval:Et.required(),rotateModule:ae.required(),timezone:Et.required(),workerInterval:rt.min(1).required()}).required(),root:n,stdStreams:ae.required(),auditLog:ae.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ae.required(),network:U.object({cors:ae.required(),corsAccessList:Ua.required(),headersTimeout:rt.min(1).required(),https:ae.required(),keepAliveTimeout:rt.min(1).required(),port:It,timeout:rt.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ae.required(),overlappingSync:ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(yO,"configValidator");function UO(e){return AO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(UO,"doesPathExist");function DO(e,t){if(e===null)return;U.assert(e,Et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=UO(e);return r?t.message(r):e}a(DO,"validatePemFile");function MO(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(CO);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(bO)}a(MO,"validateRotationMaxSize");function PO(e,t){let r=t.state.path.join("."),s=OO.cpus().length,n=s-1;return n<=2&&(n=2),NO.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(PO,"setDefaultThreads");function BO(e,t){if(!an.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(an.isEmpty(es))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return eu.join(es,IO);case"logging.root":return eu.join(es,pO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(BO,"setDefaultRoot");function HO(e){let t=U.object({routes:on});return gO.validateBySchema({routes:e},t)}a(HO,"routesValidator")});var ts=d((fB,cu)=>{"use strict";var k=f(),He=p(),Te=g(),{configValidator:vO,routesValidator:su}=ru(),We=require("fs-extra"),GO=require("yaml"),dr=require("path"),qO=require("is-number"),un=require("properties-reader"),FO=require("lodash"),{handleHDBError:xO}=Y(),{HTTP_STATUS_CODES:VO,HDB_ERROR_MSGS:_n}=Ne(),{PACKAGE_ROOT:kO}=f(),$O="Unable to get config value because config is uninitialized",YO="Config successfully initialized",KO="Error backing up config file",WO="Empty parameter sent to getConfigValue",nu=dr.join(kO,"config","yaml",k.HDB_DEFAULT_CONFIG_FILE),QO="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",cn,pe;cu.exports={createConfigFile:JO,getDefaultConfig:XO,getConfigValue:iu,initConfig:au,flattenConfig:Vt,updateConfigValue:ou,updateConfigObject:ZO,getConfiguration:zO,setConfiguration:jO,readConfigFile:Pa,getClusteringRoutes:eN,initOldConfig:_u,getConfigFromFile:tN};function JO(e){let t=hr(nu);cn=Vt(t.toJSON());for(let i in e){let o=k.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=Da(o,e[i]);try{t.setIn([..._],c)}catch(u){Te.error(u)}}}Ma(t);let r=t.toJSON();pe=Vt(r);let s=t.getIn(["rootPath"]),n=dr.join(s,k.HDB_CONFIG_FILE);We.createFileSync(n),We.writeFileSync(n,String(t)),Te.trace(`Config file written to ${n}`)}a(JO,"createConfigFile");function XO(e){if(cn===void 0){let r=hr(nu);cn=Vt(r.toJSON())}let t=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return cn[t.toLowerCase()]}a(XO,"getDefaultConfig");function iu(e){if(He.isEmpty(e)){Te.error(WO);return}if(pe===void 0){Te.trace($O);return}let t=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return pe[t.toLowerCase()]}a(iu,"getConfigValue");function au(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 Te.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=un(t).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{_u(s);return}catch(o){if(o.code!==k.NODE_ERROR_CODES.ENOENT)throw o}try{n=hr(s)}catch(o){if(o.code===k.NODE_ERROR_CODES.ENOENT){Te.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 Te.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Ma(n);let i=n.toJSON();pe=Vt(i),Te.trace(YO)}}a(au,"initConfig");function Ma(e){let t=e.toJSON(),r=vO(t);if(r.error)throw _n.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(Ma,"validateConfig");function ZO(e,t){pe===void 0&&(pe={});let r=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}pe[r.toLowerCase()]=t}a(ZO,"updateConfigObject");function ou(e,t,r=void 0,s=!1,n=!1){pe===void 0&&au();let i=iu(k.CONFIG_PARAM_MAP.hdb_root),o=dr.join(i,k.HDB_CONFIG_FILE),_=hr(o);if(r===void 0){let E=k.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=Da(E,t);_.setIn([...l],T)}else for(let E in r){let l=k.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let T=l.split("_"),h=Da(l,r[E]);try{_.setIn([...T],h)}catch(A){Te.error(A)}}}Ma(_);let c=_.getIn(["rootPath"]),u=dr.join(c,k.HDB_CONFIG_FILE);if(s===!0)try{let E=dr.join(c,"backup",`${k.HDB_CONFIG_FILE}.bak`);We.copySync(o,E),Te.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){Te.error(KO),Te.error(E)}We.writeFileSync(u,String(_)),n&&(pe=Vt(_.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ou,"updateConfigValue");function Vt(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=Vt(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(Vt,"flattenConfig");function Da(e,t){if(e===k.CONFIG_PARAMS.CLUSTERING_NODENAME||e===k.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(qO(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(Da,"castConfigValue");function zO(){let e=He.getPropsFilePath(),r=un(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(zO,"getConfiguration");async function jO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ou(void 0,void 0,n,!0),QO}catch(i){throw typeof i=="string"||i instanceof String?xO(i,i,VO.BAD_REQUEST,void 0,void 0,!0):i}}a(jO,"setConfiguration");function Pa(){let e=He.getPropsFilePath();try{We.accessSync(e,We.constants.F_OK|We.constants.R_OK)}catch(n){throw Te.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=un(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(Pa,"readConfigFile");function hr(e){return GO.parseDocument(We.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hr,"parseYamlDoc");function eN(){let e=Pa(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=He.isEmptyOrZeroLength(t)?[]:t;let r=su(t);if(r)throw _n.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=He.isEmptyOrZeroLength(s)?[]:s;let n=su(s);if(n)throw _n.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 _n.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(eN,"getClusteringRoutes");function _u(e){let t=un(e);pe={};for(let r in k.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(He.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=k.CONFIG_PARAM_MAP[r].toLowerCase();n===k.CONFIG_PARAMS.LOGGING_ROOT?pe[n]=dr.dirname(s):pe[n]=s}return pe}a(_u,"initOldConfig");function tN(e){let t=Pa();return FO.get(t,e.replaceAll("_","."))}a(tN,"getConfigFromFile")});var Z=d((RB,Eu)=>{"use strict";var Ba=require("fs-extra"),st=require("path"),rN=require("os"),sN=require("properties-reader"),rs=g(),Sr=p(),C=f(),En=ts(),nN="Error initializing environment manager",ln="BOOT_PROPS_FILE_PATH",uu=!1,iN={[C.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},lt={};Eu.exports={BOOT_PROPS_FILE_PATH:ln,getHdbBasePath:aN,setHdbBasePath:oN,get:_N,initSync:uN,setProperty:P,initTestEnvironment:EN};function aN(){return lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(aN,"getHdbBasePath");function oN(e){lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(oN,"setHdbBasePath");function _N(e){let t=En.getConfigValue(e);return t===void 0?lt[e]:t}a(_N,"get");function P(e,t){iN[e]&&(lt[e]=t),En.updateConfigObject(e,t)}a(P,"setProperty");function cN(){let e;try{e=Sr.getPropsFilePath(),Ba.accessSync(e,Ba.constants.F_OK|Ba.constants.R_OK),uu=!0;let t=sN(e);return lt[C.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(C.HDB_SETTINGS_NAMES.INSTALL_USER),lt[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),lt[ln]=e,!0}catch{return rs.trace(`Environment manager found no properties file at ${e}`),!1}}a(cN,"doesPropFileExist");function uN(e=!1){try{(uu||cN())&&(En.initConfig(e),lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=En.getConfigValue(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){rs.error(nN),rs.error(t),console.error(t),process.exit(1)}}a(uN,"initSync");function EN(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=st.join(__dirname,"../../","unitTests");lt[ln]=st.join(c,"hdb_boot_properties.file"),P(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,st.join(c,"settings.test")),P(C.HDB_SETTINGS_NAMES.INSTALL_USER,rN.userInfo().username),P(C.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,st.join(c,"envDir","utility","keys","privateKey.pem")),P(C.HDB_SETTINGS_NAMES.CERT_KEY,st.join(c,"envDir","utility","keys","certificate.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,st.join(c,"envDir","utility","keys","privateKey.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,st.join(c,"envDir","utility","keys","certificate.pem")),P(C.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY,st.join(c,"envDir","log")),P(C.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(C.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,st.join(c,"envDir")),P(C.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Sr.isEmpty(n)?!0:n),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Sr.isEmpty(n)?!0:n),P(C.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(C.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Sr.isEmpty(i)?!1:i),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Sr.isEmpty(i)?!1:i),P(C.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,st.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(C.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Sr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(C.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(C.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(C.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ln}. Please check your boot props and settings files`;rs.fatal(r),rs.error(t)}}a(EN,"initTestEnvironment")});var De=d((AB,du)=>{"use strict";var{platform:mB}=require("os"),lN="nats-server.zip",Ha="nats-server",dN=process.platform==="win32"?`${Ha}.exe`:Ha,va="HDB",hN=/^[^\s.,*>]+$/,lu="__request__",SN=a(e=>`${e}.${lu}`,"REQUEST_SUBJECT"),TN={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},fN={HUB:"hub.pid",LEAF:"leaf.pid"},RN={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},mN={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:va,deliver_subject:"__HDB__.WORKQUEUE"},AN={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:va,deliver_subject:"HDB.SCHEMAQUEUE"},ON={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:va,deliver_subject:"HDB.USERQUEUE"},NN={SUCCESS:"success",ERROR:"error"},gN={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pN={TXN:"txn",MSGID:"msgid"};du.exports={NATS_SERVER_ZIP:lN,NATS_SERVER_NAME:Ha,NATS_BINARY_NAME:dN,PID_FILES:fN,NATS_CONFIG_FILES:TN,SERVER_SUFFIX:RN,WORK_QUEUE_CONSUMER_NAMES:mN,SCHEMA_QUEUE_CONSUMER_NAMES:AN,USER_QUEUE_CONSUMER_NAMES:ON,NATS_TERM_CONSTRAINTS_RX:hN,REQUEST_SUFFIX:lu,UPDATE_REMOTE_RESPONSE_STATUSES:NN,CLUSTER_STATUS_STATUSES:gN,REQUEST_SUBJECT:SN,SUBJECT_PREFIXES:pN}});var ns=d((OB,fu)=>{"use strict";var ss=require("crypto"),Su="aes-256-cbc",IN=32,CN=16,Ga=64,Tu=32,bN=Ga+Tu,hu=new Map;fu.exports={encrypt:LN,decrypt:wN,createNatsTableStreamName:yN};function LN(e){let t=ss.randomBytes(IN),r=ss.randomBytes(CN),s=ss.createCipheriv(Su,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(LN,"encrypt");function wN(e){let t=e.substr(0,Ga),r=e.substr(Ga,Tu),s=e.substr(bN,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ss.createDecipheriv(Su,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wN,"decrypt");function yN(e,t){let r=`${e}.${t}`,s=hu.get(r);return s||(s=ss.createHash("md5").update(`${e}.${t}`).digest("hex"),hu.set(r,s)),s}a(yN,"createNatsTableStreamName")});var qa=d((NB,Ru)=>{"use strict";var dn=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(dn,"BridgeMethods");Ru.exports=dn});var kt=d((IB,Nu)=>{"use strict";var mu=Ne().LMDB_ERRORS_ENUM,gB=require("lmdb"),UN=Se(),pB=require("buffer").Buffer,DN=require("microtime"),{OVERFLOW_MARKER:Au,MAX_SEARCH_KEY_LENGTH:hn}=UN,Ou=["number","string","symbol","boolean","bigint"];function MN(e){if(!e)throw new Error(mu.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(mu.INVALID_ENVIRONMENT)}a(MN,"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 BN(e){return e instanceof Date?e.valueOf():e}a(BN,"convertKeyValueToWrite");function HN(e){if(e==null)return;if(Ou.includes(typeof e))return e.length>hn?[e.slice(0,hn)+Au]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Ou.includes(typeof n)&&(n.length>hn?t.push(n.slice(0,hn)+Au):t.push(n))}}return t}a(HN,"getIndexedValues");function vN(){let e=DN.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(vN,"getMicroTime");Nu.exports={validateEnv:MN,stringifyData:PN,convertKeyValueToWrite:BN,getMicroTime:vN,getIndexedValues:HN}});var pu=d((CB,gu)=>{"use strict";var Sn=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Sn,"DBIDefinition");gu.exports=Sn});var Cu=d((bB,Iu)=>{"use strict";var Tn=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(Tn,"OpenDBIObject");Iu.exports=Tn});var Lu=d((LB,bu)=>{"use strict";var fn=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(fn,"OpenEnvironmentObject");bu.exports=fn});var G=d((yB,Fu)=>{"use strict";var Fa=require("lmdb"),ve=require("fs-extra"),Qe=require("path"),mn=kt(),wu=g(),oe=Ne().LMDB_ERRORS_ENUM,An=pu(),xa=Cu(),yu=Lu(),Ct=Se(),wB=f(),is=Z();is.initSync();var Uu=is.get("STORAGE_WRITEASYNC")===!0||is.get("STORAGE_WRITEASYNC")==="true"||is.get("STORAGE_WRITEASYNC")==="TRUE",Du=is.get("STORAGE_OVERLAPPINGSYNC"),Mu=1024*1024*1024,Pu=1e4,Bu=1e3,Je=Ct.INTERNAL_DBIS_NAME,Hu=Ct.DBI_DEFINITION_NAME,GN="data.mdb",qN="lock.mdb",as=".mdb",FN="-lock",Rn=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 Fa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Rn,"TransactionCursor");function Va(e,t){if(e===void 0)throw new Error(oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(oe.ENV_NAME_REQUIRED)}a(Va,"pathEnvNameValidation");async function ka(e,t,r=!0){try{await ve.access(e)}catch(s){throw s.code==="ENOENT"?new Error(oe.INVALID_BASE_PATH):s}try{let s=Qe.join(e,t+as);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,GN),ve.constants.R_OK|ve.constants.F_OK),Qe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(oe.INVALID_ENVIRONMENT)}else throw new Error(oe.INVALID_ENVIRONMENT);throw s}}a(ka,"validateEnvironmentPath");function On(e,t){if(mn.validateEnv(e),t===void 0)throw new Error(oe.DBI_NAME_REQUIRED)}a(On,"validateEnvDBIName");async function xN(e,t,r=!1,s=!1){Va(e,t),t=t.toString();try{return await ka(e,t,s),$a(e,t,r)}catch(n){if(n.message===oe.INVALID_ENVIRONMENT){let i=Qe.join(e,t);await ve.mkdirp(s?i:e);let o=new yu(s?i:i+as,Mu,Pu,Bu,!1,Uu,Du),_=Fa.open(o);_.dbis=Object.create(null);let c=new xa(!1);_.openDB(Je,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Ya(e,t,r);return _[Ct.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(xN,"createEnvironment");async function VN(e,t,r,s=!0){let n=await $a(e,t);if(r===void 0)throw new Error(oe.DESTINATION_PATH_REQUIRED);try{await ve.access(Qe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(VN,"copyEnvironment");async function $a(e,t,r=!1){Va(e,t),t=t.toString();let s=Ya(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 ka(e,t),i=Qe.join(e,t+as),o=n!=i,_=new yu(n,Mu,Pu,Bu,o,Uu,Du),c=Fa.open(_);c.dbis=Object.create(null);let u=Gu(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($a,"openEnvironment");async function kN(e,t,r=!1){Va(e,t),t=t.toString();let s=Qe.join(e,t+as),n=await ka(e,t);if(global.lmdb_map!==void 0){let i=Ya(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await vu(o),delete global.lmdb_map[i]}}await ve.remove(n),await ve.remove(n===s?n+FN:Qe.join(Qe.dirname(n),qN))}a(kN,"deleteEnvironment");async function vu(e){mn.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(vu,"closeEnvironment");function Ya(e,t,r=!1){let n=`${Qe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ya,"getCachedEnvironmentName");function $N(e){mn.validateEnv(e);let t=Object.create(null),r=Ge(e,Je);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Je)try{t[s]=Object.assign(new An,n)}catch{wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a($N,"listDBIDefinitions");function Gu(e){mn.validateEnv(e);let t=[],r=Ge(e,Je);for(let{key:s}of r.getRange({start:!1}))s!==Je&&t.push(s);return t}a(Gu,"listDBIs");function YN(e,t){let s=Ge(e,Je).getEntry(t),n=new An;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(YN,"getDBIDefinition");function qu(e,t,r,s=!1){if(On(e,t),t=t.toString(),t===Je)throw new Error(oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ge(e,t)}catch(n){if(n.message===oe.DBI_DOES_NOT_EXIST){let i=new xa(r,s===!0),o=e.openDB(t,i),_=new An(r===!0,s);return o[Hu]=_,Ge(e,Je).putSync(t,_),e.dbis[t]=o,o}throw n}}a(qu,"createDBI");function Ge(e,t){if(On(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Je?r=YN(e,t):r=new An,r===void 0)throw new Error(oe.DBI_DOES_NOT_EXIST);let s;try{let n=new xa(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(oe.DBI_DOES_NOT_EXIST):n}return s[Hu]=r,e.dbis[t]=s,s}a(Ge,"openDBI");function KN(e,t){On(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(KN,"statDBI");async function WN(e,t){try{let r=Qe.join(e,t+as);return(await ve.stat(r)).size}catch{throw new Error(oe.INVALID_ENVIRONMENT)}}a(WN,"environmentDataSize");function QN(e,t){if(On(e,t),t=t.toString(),t===Je)throw new Error(oe.CANNOT_DROP_INTERNAL_DBIS_NAME);Ge(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ge(e,Je).removeSync(t)}a(QN,"dropDBI");function JN(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===oe.DBI_DOES_NOT_EXIST)qu(e,n,n!==t,n===t);else throw i}}}a(JN,"initializeDBIs");Fu.exports={openDBI:Ge,openEnvironment:$a,createEnvironment:xN,listDBIs:Gu,listDBIDefinitions:$N,createDBI:qu,dropDBI:QN,statDBI:KN,deleteEnvironment:kN,initializeDBIs:JN,TransactionCursor:Rn,environmentDataSize:WN,copyEnvironment:VN,closeEnvironment:vu}});var Vu=d((UB,xu)=>{"use strict";var Nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Nn,"InsertRecordsResponseObject");xu.exports=Nn});var $u=d((DB,ku)=>{"use strict";var gn=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(gn,"UpdateRecordsResponseObject");ku.exports=gn});var Ku=d((MB,Yu)=>{"use strict";var pn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(pn,"UpsertRecordsResponseObject");Yu.exports=pn});var Tr=d((vB,Qu)=>{"use strict";var XN=G(),ZN=Vu(),zN=$u(),jN=Ku(),_s=kt(),os=Ne().LMDB_ERRORS_ENUM,eg=Se(),bt=f(),tg=p(),rg=require("uuid"),PB=require("lmdb"),{handleHDBError:sg,hdb_errors:ng}=Y(),{OVERFLOW_MARKER:BB,MAX_SEARCH_KEY_LENGTH:HB}=eg,Ka=bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$t=bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ig(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new ZN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Wu(u,!0,n);let E=ag(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Qa(o,_,s,i)}a(ig,"insertRecords");function ag(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=_s.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[$t])})}a(ag,"insertRecord");function og(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(og,"removeSkippedRecords");function Wu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[$t]))&&(e[$t]=s),t===!0?(r===!0||!Number.isInteger(e[Ka]))&&(e[Ka]=s):delete e[Ka]}a(Wu,"setTimestamps");function Wa(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),XN.initializeDBIs(e,t,r)}a(Wa,"initializeTransaction");async function _g(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new zN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],T;try{T=Ja(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(T),c.push(l)}return Qa(_,c,s,i,o)}a(_g,"updateRecords");async function cg(e,t,r,s,n=!0){try{Xa(e,t,r,s)}catch(c){throw sg(c,c.message,ng.HTTP_STATUS_CODES.BAD_REQUEST)}Wa(e,t,r);let i=new jN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;tg.isEmpty(u[t])?(E=rg.v4(),u[t]=E):E=u[t];let l=Ja(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Qa(o,_,s,i)}a(cg,"upsertRecords");async function Qa(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=_s.getMicroTime(),og(r,n),s}a(Qa,"finalizeWrite");function Ja(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(Wu(r,!E,o),Number.isInteger(r[$t])&&u[$t]>r[$t])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 O=r[A],I=e.dbis[A];if(I===void 0)continue;let X=u[A];if(typeof O=="function"){let W=O([[u]]);Array.isArray(W)&&(O=W[0][bt.FUNC_VAL],r[A]=O)}if(O===X)continue;let v=_s.getIndexedValues(X);if(v)for(let W=0,$e=v.length;W<$e;W++)I.remove(v[W],s);if(v=_s.getIndexedValues(O),v)for(let W=0,$e=v.length;W<$e;W++)I.put(v[W],s)}let h=Object.assign({},u,r);_.put(s,h,h[$t])},"do_put");return c?l=_.ifVersion(s,c.version,T):l=_.ifNoExists(s,T),l.then(h=>h?!0:Ja(e,t,r,s,n,i,o))}a(Ja,"updateUpsertRecord");function ug(e,t,r){if(_s.validateEnv(e),t===void 0)throw new Error(os.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(os.WRITE_ATTRIBUTES_REQUIRED):new Error(os.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ug,"validateBasic");function Xa(e,t,r,s){if(ug(e,t,r),!Array.isArray(s))throw s===void 0?new Error(os.RECORDS_REQUIRED):new Error(os.RECORDS_MUST_BE_ARRAY)}a(Xa,"validateWrite");Qu.exports={insertRecords:ig,updateRecords:_g,upsertRecords:cg}});var V=d((GB,Xu)=>{"use strict";var Za=f(),fr=Z(),za=require("path");fr.initSync();var In,Cn,bn;function Ju(){if(In!==void 0)return In;if(fr.getHdbBasePath()!==void 0)return In=za.join(fr.getHdbBasePath(),Za.SCHEMA_DIR_NAME),In}a(Ju,"getBaseSchemaPath");function Eg(){if(Cn!==void 0)return Cn;if(fr.getHdbBasePath()!==void 0)return Cn=za.join(Ju(),Za.SYSTEM_SCHEMA_NAME),Cn}a(Eg,"getSystemSchemaPath");function lg(){if(bn!==void 0)return bn;if(fr.getHdbBasePath()!==void 0)return bn=za.join(fr.getHdbBasePath(),Za.TRANSACTIONS_DIR_NAME),bn}a(lg,"getTransactionAuditStorePath");Xu.exports={getBaseSchemaPath:Ju,getSystemSchemaPath:Eg,getTransactionAuditStorePath:lg}});var Yt=d((qB,dg)=>{dg.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 Rr=d((FB,ju)=>{"use strict";var zu=p(),Zu=f(),wn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ja=require("joi"),Ln={schema_format:{pattern:wn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},hg=ja.alternatives(ja.string().min(1).max(Ln.schema_length.maximum).pattern(wn).messages({"string.pattern.base":"{:#label} "+Ln.schema_format.message}),ja.number()).required();function Sg(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ln.schema_length.maximum?`'${e}' maximum of 250 characters`:wn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Sg,"checkValidTable");function Tg(e,t){return zu.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Tg,"validateSchemaExists");function fg(e,t){let r=t.state.ancestors[0].schema;return zu.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(fg,"validateTableExists");function Rg(e,t){return e.toLowerCase()===Zu.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Zu.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Rg,"validateSchemaName");ju.exports={common_validators:Ln,schema_regex:wn,hdb_schema_table:hg,validateSchemaExists:Tg,validateTableExists:fg,validateSchemaName:Rg,checkValidTable:Sg}});var yn=d((xB,eE)=>{var{common_validators:Lt}=Rr(),cs=Ke(),Xe="is required",q={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 us(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(us,"makeAttributesStrings");function mg(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence=!1,q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(mg,"schema_object");function Ag(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(Ag,"table_object");function Og(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence={message:Xe},cs.validateObject(e,q)}a(Og,"create_table_object");function Ng(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence={message:Xe},q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(Ng,"attribute_object");function gg(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(gg,"describe_table");function pg(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(pg,"validateTableResidence");eE.exports={schema_object:mg,create_table_object:Og,table_object:Ag,attribute_object:Ng,describe_table:gg,validateTableResidence:pg}});var rE=d((VB,tE)=>{"use strict";var Ig=require("uuid"),Un=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Ig.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Un,"CreateAttributeObject");tE.exports=Un});var Mn=d((kB,sE)=>{"use strict";var Cg=rE(),Dn=class extends Cg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Dn,"LMDBCreateAttributeObject");sE.exports=Dn});var iE=d(($B,nE)=>{"use strict";nE.exports=Lg;var bg="inserted";function Lg(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===bg?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Lg,"returnObject")});var Pn=d((YB,oE)=>{"use strict";var wg=f(),eo=G(),yg=Tr(),{getSystemSchemaPath:Ug,getBaseSchemaPath:Dg}=V(),Mg=require("path"),Pg=Yt(),Bg=yn(),Hg=Mn(),vg=iE(),{handleHDBError:Gg,hdb_errors:qg}=Y(),Fg=p(),to=Pg.hdb_attribute,aE=[];for(let e=0;e<to.attributes.length;e++)aE.push(to.attributes[e].attribute);var xg="inserted";oE.exports=Vg;async function Vg(e){let t=Bg.attribute_object(e);if(t)throw Gg(new Error,t.message,qg.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 Hg(e.schema,e.table,e.attribute,e.id);try{let n=await eo.openEnvironment(Mg.join(Dg(),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}`);eo.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await eo.openEnvironment(Ug(),wg.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await yg.insertRecords(i,to.hash_attribute,aE,[s]);return vg(xg,o,{records:[s]},_)}catch(n){throw n}}a(Vg,"lmdbCreateAttribute")});var so=d((KB,cE)=>{var{hdb_schema_table:_E}=Rr(),kg=Ke(),ro=require("joi"),$g={undefined:"undefined",null:"null"},Yg=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||$g[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"),Kg=ro.object({schema:_E,table:_E,records:ro.array().items(ro.object().custom(Yg)).required()});cE.exports=function(e){return kg.validateBySchema(e,Kg)}});var Bn=d((QB,EE)=>{"use strict";var dt=p(),uE=g(),WB=so();EE.exports=Wg;function Wg(e){if(dt.isEmpty(e))throw new Error("invalid update parameters defined.");if(dt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(dt.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(dt.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&&dt.isEmptyOrZeroLength(o[r]))throw uE.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(!dt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw uE.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`);!dt.isEmpty(o[r])&&o[r]!==""&&s.has(dt.autoCast(o[r]))&&(o.skip=!0),s.add(dt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Wg,"insertUpdateValidate")});var vn=d((JB,lE)=>{"use strict";var Qg=f().OPERATIONS_ENUM,Hn=class{constructor(t,r,s,n,i=void 0){this.operation=Qg.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Hn,"InsertObject");lE.exports=Hn});var qn=d((ZB,dE)=>{"use strict";var XB=vn(),Gn=f(),io=p(),no=g(),Jg=require("uuid"),{handleHDBError:Es,hdb_errors:Xg}=Y(),{HDB_ERROR_MSGS:ls,HTTP_STATUS_CODES:ds}=Xg;dE.exports=Zg;function Zg(e,t,r){for(let n=0;n<t.length;n++)zg(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];jg(i,r,e.operation)}}a(Zg,"processRows");function zg(e){if(Buffer.byteLength(String(e))>Gn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Es(new Error,ls.ATTR_NAME_LENGTH_ERR(e),ds.BAD_REQUEST,void 0,void 0,!0);if(io.isEmptyOrZeroLength(e)||io.isEmpty(e.trim()))throw Es(new Error,ls.ATTR_NAME_NULLISH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}a(zg,"validateAttribute");function jg(e,t,r){if(!e.hasOwnProperty(t)||io.isEmptyOrZeroLength(e[t])){if(r===Gn.OPERATIONS_ENUM.INSERT||r===Gn.OPERATIONS_ENUM.UPSERT){e[t]=Jg.v4();return}throw no.error("Update transaction aborted due to record with no hash value:",e),Es(new Error,ls.RECORD_MISSING_HASH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Gn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw no.error(e),Es(new Error,ls.HASH_VAL_LENGTH_ERR,ds.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw no.error(e),Es(new Error,ls.INVALID_FORWARD_SLASH_IN_HASH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}a(jg,"validateHash")});var SE=d((zB,hE)=>{"use strict";var Fn=class{constructor(t,r){this.type=t,this.message=r}};a(Fn,"IPCEventObject");hE.exports=Fn});var Kt=d((jB,TE)=>{"use strict";var ep=g(),ao=p(),tp=f(),{IPC_ERRORS:hs}=Ne();TE.exports={sendIpcEvent:rp,validateEvent:sp,SchemaEventMsg:np,UserEventMsg:ip};function rp(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):ep.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(rp,"sendIpcEvent");function sp(e){if(typeof e!="object")return hs.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||ao.isEmpty(e.type))return hs.MISSING_TYPE;if(!e.hasOwnProperty("message")||ao.isEmpty(e.message))return hs.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ao.isEmpty(e.message.originator))return hs.MISSING_ORIGIN;if(tp.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hs.INVALID_EVENT(e.type)}a(sp,"validateEvent");function np(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(np,"SchemaEventMsg");function ip(e){this.originator=e}a(ip,"UserEventMsg")});var Ss=d((tH,AE)=>{"use strict";var fE=f(),eH=p(),xn=g(),RE=SE(),{sendIpcEvent:mE}=Kt();function ap(e){try{xn.trace("signalSchemaChange called with message:",e);let t=new RE(fE.IPC_EVENT_TYPES.SCHEMA,e);mE(t)}catch(t){xn.error(t)}}a(ap,"signalSchemaChange");function op(e){try{xn.trace("signalUserChange called with message:",e);let t=new RE(fE.IPC_EVENT_TYPES.USER,e);mE(t)}catch(t){xn.error(t)}}a(op,"signalUserChange");AE.exports={signalSchemaChange:ap,signalUserChange:op}});var Vn=d((rH,NE)=>{"use strict";var OE=p(),_p=f(),cp=g(),up=Pn(),Ep=Mn(),lp=Ss(),{SchemaEventMsg:dp}=Kt(),hp="already exists in";NE.exports=Sp;async function Sp(e,t,r){try{if(OE.isEmptyOrZeroLength(r))return r;let s=[];OE.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 Tp(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(Sp,"lmdbCheckForNewAttributes");async function Tp(e,t,r,s){let n=new Ep(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await fp(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hp))cp.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(Tp,"createNewAttribute");async function fp(e){let t;try{return t=await up(e),lp.signalSchemaChange(new dp(process.pid,_p.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(fp,"createAttribute")});var mr=d((sH,gE)=>{"use strict";var kn=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(kn,"LMDBTransactionObject");gE.exports=kn});var IE=d((nH,pE)=>{"use strict";var Rp=mr(),mp=f().OPERATIONS_ENUM,$n=class extends Rp{constructor(t,r,s,n,i=void 0){super(mp.INSERT,r,s,n,i),this.records=t}};a($n,"LMDBInsertTransactionObject");pE.exports=$n});var bE=d((iH,CE)=>{"use strict";var Ap=mr(),Op=f().OPERATIONS_ENUM,Yn=class extends Ap{constructor(t,r,s,n,i,o=void 0){super(Op.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Yn,"LMDBUpdateTransactionObject");CE.exports=Yn});var wE=d((aH,LE)=>{"use strict";var Np=mr(),gp=f().OPERATIONS_ENUM,Kn=class extends Np{constructor(t,r,s,n,i,o=void 0){super(gp.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Kn,"LMDBUpsertTransactionObject");LE.exports=Kn});var UE=d((oH,yE)=>{"use strict";var pp=mr(),Ip=f().OPERATIONS_ENUM,Wn=class extends pp{constructor(t,r,s,n,i=void 0){super(Ip.DELETE,s,n,t,i),this.original_records=r}};a(Wn,"LMDBDeleteTransactionObject");yE.exports=Wn});var Ts=d((_H,BE)=>{"use strict";var Cp=require("path"),DE=G(),bp=IE(),Lp=bE(),wp=wE(),yp=UE(),Ar=Se(),ME=p(),{CONFIG_PARAMS:Up}=f(),PE=Z();PE.initSync();var Qn=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Dp}=V();BE.exports=Mp;async function Mp(e,t){if(PE.get(Up.LOGGING_AUDITLOG)===!1)return;let r=Cp.join(Dp(),e.schema.toString()),s=await DE.openEnvironment(r,e.table,!0),n=Pp(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){DE.initializeDBIs(s,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ar.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),ME.isEmpty(n.user_name)||s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(Mp,"writeTransaction");function Pp(e,t){let r=ME.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Qn.INSERT)return new bp(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.UPDATE)return new Lp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.UPSERT)return new wp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.DELETE)return new yp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Pp,"createTransactionObject")});var oo=d((uH,HE)=>{"use strict";var Bp=Bn(),cH=vn(),Or=f(),Hp=qn(),vp=Tr().insertRecords,Gp=G(),qp=require("path"),Fp=g(),xp=Vn(),{getBaseSchemaPath:Vp}=V(),kp=Ts();HE.exports=$p;async function $p(e){try{let{schema_table:t,attributes:r}=Bp(e);Hp(e,r,t.hash_attribute),e.schema!==Or.SYSTEM_SCHEMA_NAME&&(r.includes(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xp(e.hdb_auth_header,t,r),n=qp.join(Vp(),e.schema.toString()),i=await Gp.openEnvironment(n,e.table),o=await vp(i,t.hash_attribute,r,e.records,e[Or.CLUSTERING_FLAG]!==!0);try{await kp(e,o)}catch(_){Fp.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($p,"lmdbCreateRecords")});var qE=d((EH,GE)=>{"use strict";var vE=f(),Yp=oo(),Kp=vn(),Wp=require("fs-extra"),Qp=require("path"),{getBaseSchemaPath:Jp}=V();GE.exports=Xp;async function Xp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Kp(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Yp(r),await Wp.mkdirp(Qp.join(Jp(),e.schema.toString()))}a(Xp,"lmdbCreateSchema")});var xE=d((lH,FE)=>{"use strict";var Jn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Jn,"DeleteRecordsResponseObject");FE.exports=Jn});var uo=d((TH,$E)=>{"use strict";var VE=G(),_o=kt(),co=Ne().LMDB_ERRORS_ENUM,Zp=Se(),kE=g(),dH=p(),zp=require("lmdb"),jp=xE(),{OVERFLOW_MARKER:hH,MAX_SEARCH_KEY_LENGTH:SH}=Zp;async function eI(e,t,r){if(_o.validateEnv(e),t===void 0)throw new Error(co.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(co.IDS_REQUIRED):new Error(co.IDS_MUST_BE_ARRAY);try{let s=VE.listDBIs(e);VE.initializeDBIs(e,t,s);let n=new jp,i,o=[],_=[];for(let l=0,T=r.length;l<T;l++)try{i=r[l];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,zp.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let O=0;O<s.length;O++){let I=s[O];if(!h.hasOwnProperty(I)||I===t)continue;let X=e.dbis[I],v=h[I];if(v!=null)try{let W=_o.getIndexedValues(v);if(W)for(let $e=0,Js=W.length;$e<Js;$e++)X.remove(W[$e],i)}catch{kE.warn(`cannot delete from attribute: ${I}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(h)}catch(h){kE.warn(h),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=_o.getMicroTime(),n}catch(s){throw s}}a(eI,"deleteRecords");$E.exports={deleteRecords:eI}});var fs=d((fH,KE)=>{"use strict";var Nr=p(),tI=uo(),rI=G(),sI=require("path"),{getBaseSchemaPath:nI}=V(),iI=Ts(),aI=g();KE.exports=oI;async function oI(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Nr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Nr.isEmptyOrZeroLength(e.hash_values)&&!Nr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Nr.isEmpty(c)||e.hash_values.push(c)}}if(Nr.isEmptyOrZeroLength(e.hash_values))return YE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Nr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=sI.join(nI(),e.schema.toString()),i=await rI.openEnvironment(n,e.table),o=await tI.deleteRecords(i,s,e.hash_values);try{t===!0&&await iI(e,o)}catch(_){aI.error(`unable to write transaction due to ${_.message}`)}return YE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(oI,"lmdbDeleteRecords");function YE(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(YE,"createDeleteResponse")});var lo=d((mH,WE)=>{"use strict";var _I=f(),RH=kt();function Eo(e,t){let r=Object.create(null);if(t.length===1&&_I.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(Eo,"parseRow");function cI(e,t,r,s){let n=Eo(r,e);s.push(n)}a(cI,"searchAll");function uI(e,t,r,s){let n=Eo(r,e);s[t]=n}a(uI,"searchAllToMap");function EI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(EI,"iterateDBI");function Wt(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(Wt,"pushResults");function lI(e,t,r,s,n,i){t.toString().endsWith(e)&&Wt(t,r,s,n,i)}a(lI,"endsWith");function dI(e,t,r,s,n,i){t.toString().includes(e)&&Wt(t,r,s,n,i)}a(dI,"contains");function hI(e,t,r,s,n,i){t>e&&Wt(t,r,s,n,i)}a(hI,"greaterThanCompare");function SI(e,t,r,s,n,i){t>=e&&Wt(t,r,s,n,i)}a(SI,"greaterThanEqualCompare");function TI(e,t,r,s,n,i){t<e&&Wt(t,r,s,n,i)}a(TI,"lessThanCompare");function fI(e,t,r,s,n,i){t<=e&&Wt(t,r,s,n,i)}a(fI,"lessThanEqualCompare");WE.exports={parseRow:Eo,searchAll:cI,searchAllToMap:uI,iterateDBI:EI,endsWith:lI,contains:dI,greaterThanCompare:hI,greaterThanEqualCompare:SI,lessThanCompare:TI,lessThanEqualCompare:fI,pushResults:Wt}});var gr=d((NH,jE)=>{"use strict";var qe=G(),RI=g(),Me=kt(),wt=Se(),Q=Ne().LMDB_ERRORS_ENUM,AH=p(),mI=f(),Ze=lo(),OH=require("lmdb"),{OVERFLOW_MARKER:QE,MAX_SEARCH_KEY_LENGTH:AI}=wt,Rs={lazy:!0};function JE(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=ho(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(JE,"iterateFullIndex");function ms(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=qe.openDBI(e,r),T=ho(e,t,r);l[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,A=i===!0?n:s,O=i===!0?!c:!u,I=i===!0?u:c;for(let{key:X,value:v}of l.getRange({start:A,end:h,reverse:i,limit:o,offset:_,inclusiveEnd:O,exclusiveStart:I}))Ze.pushResults(T(X,v),v,E,t,r);return E}a(ms,"iterateRangeBetween");function ho(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(QE)){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,Rs)[r]}return n}}a(ho,"getOverflowCheck");function OI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);Xn(r),r=As(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(OI,"searchAll");function NI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return Xn(r),r=As(e,r),JE(e,t,t,Ze.searchAllToMap.bind(null,r),s,n,i)}a(NI,"searchAllToMap");function gI(e,t,r=!1,s=void 0,n=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);return JE(e,void 0,t,Ze.iterateDBI,r,s,n)}a(gI,"iterateDBI");function pI(e,t){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return qe.statDBI(e,t).entryCount}a(pI,"countAll");function II(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=qe.openDBI(e,r);s=Me.convertKeyValueToWrite(s);let c=[[],[]];if(_[wt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Rs);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(II,"equals");function CI(e,t,r){return yt(e,t,r),qe.openDBI(e,t).getValuesCount(r)}a(CI,"count");function bI(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=Me.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(bI,"startsWith");function LI(e,t,r,s,n=!1,i=void 0,o=void 0){return XE(e,t,r,s,n,i,o,!0)}a(LI,"endsWith");function XE(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=ho(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 h=T.toString();if(h.endsWith(QE))for(let A of u.getValues(T)){let O=E(T,A);(_?O.endsWith(s):O.includes(s))&&l(O,A)}else if(_?h.endsWith(s):h.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,h){if(o>0){o--;return}i!==0&&(Ze.pushResults(T,h,c,t,r),i--)}return a(l,"found_match"),c}a(XE,"contains");function wI(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),ms(e,t,r,s,c,n,i,o,!0,!1)}a(wI,"greaterThan");function yI(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),ms(e,t,r,s,c,n,i,o,!1,!1)}a(yI,"greaterThanEqual");function UI(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),ms(e,t,r,c,s,n,i,o,!1,!0)}a(UI,"lessThan");function DI(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),ms(e,t,r,c,s,n,i,o,!1,!1)}a(DI,"lessThanEqual");function MI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Me.validateEnv(e),r===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Q.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Q.END_VALUE_REQUIRED);if(s=Me.convertKeyValueToWrite(s),n=Me.convertKeyValueToWrite(n),s>n)throw new Error(Q.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ms(e,t,r,s,n,i,o,_)}a(MI,"between");function PI(e,t,r,s){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(Xn(r),r=As(e,r),s===void 0)throw new Error(Q.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Rs:void 0);return i&&(n=Ze.parseRow(i,r)),n}a(PI,"searchByHash");function BI(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Rs)===void 0&&(s=!1),s}a(BI,"checkHashExists");function HI(e,t,r,s,n=[]){zE(e,t,r,s,n);let i=ZE(e,t,r,s,n);return Object.values(i)}a(HI,"batchSearchByHash");function vI(e,t,r,s,n=[]){return zE(e,t,r,s,n),ZE(e,t,r,s,n)}a(vI,"batchSearchByHashToMap");function ZE(e,t,r,s,n=[]){r=As(e,r);let i=Object.create(null),o=r.length<3?Rs: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 RI.warn(u),u}}return i}a(ZE,"batchHashSearch");function zE(e,t,r,s,n){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(Xn(r),!Array.isArray(s))throw s===void 0?new Error(Q.IDS_REQUIRED):new Error(Q.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(zE,"initializeBatchSearchByHash");function Xn(e){if(!Array.isArray(e))throw e===void 0?new Error(Q.FETCH_ATTRIBUTES_REQUIRED):new Error(Q.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Xn,"validateFetchAttributes");function yt(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.SEARCH_VALUE_REQUIRED);if(r?.length>AI)throw new Error(Q.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function As(e,t){return t.length===1&&mI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qe.listDBIs(e)),t}a(As,"setGetWholeRowAttributes");jE.exports={searchAll:OI,searchAllToMap:NI,count:CI,countAll:pI,equals:II,startsWith:bI,endsWith:LI,contains:XE,searchByHash:PI,setGetWholeRowAttributes:As,batchSearchByHash:HI,batchSearchByHashToMap:vI,checkHashExists:BI,iterateDBI:gI,greaterThan:wI,greaterThanEqual:yI,lessThan:UI,lessThanEqual:DI,between:MI}});var Os=d((pH,sl)=>{var el=require("lodash"),tl=Ke(),B=require("joi"),GI=p(),{hdb_schema_table:ze,checkValidTable:rl}=Rr(),{handleHDBError:qI,hdb_errors:FI}=Y(),{HTTP_STATUS_CODES:xI}=FI,gH=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()}),VI=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)}),kI=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()});sl.exports=function(e,t){let r=null;switch(t){case"value":r=tl.validateBySchema(e,VI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rl("schema",e.schema)),i(rl("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=tl.validateBySchema(e,kI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=GI.checkGlobalSchemaTable(e.schema,e.table);if(n)return qI(new Error,n,xI.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=el.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!el.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 So=d((IH,nl)=>{"use strict";var $I=G(),YI=Os(),KI=require("path"),{getBaseSchemaPath:WI}=V();nl.exports=QI;function QI(e){let t=YI(e,"hashes");if(t)throw t;let r=KI.join(WI(),e.schema.toString());return $I.openEnvironment(r,e.table)}a(QI,"initialize")});var To=d((CH,il)=>{"use strict";var JI=gr(),XI=So();il.exports=ZI;async function ZI(e){try{let t=await XI(e),r=global.hdb_schema[e.schema][e.table];return JI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(ZI,"lmdbGetDataByHash")});var Ns=d((bH,al)=>{"use strict";var Zn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Zn,"SearchByHashObject");al.exports=Zn});var _l=d((wH,ol)=>{"use strict";var LH=Ns(),zI=gr(),jI=So();ol.exports=eC;async function eC(e){try{let t=await jI(e),r=global.hdb_schema[e.schema][e.table];return zI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(eC,"lmdbSearchByHash")});var ht=d((yH,cl)=>{"use strict";var zn=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(zn,"SearchObject");cl.exports=zn});var jn=d((UH,hl)=>{"use strict";var fe=gr(),tC=G(),rC=require("path"),sC=p(),N=Se(),Qt=f(),{getBaseSchemaPath:nC}=V(),iC=Yt(),ul=Ne().LMDB_ERRORS_ENUM,{compareKeys:pr}=require("ordered-binary"),St=Qt.SEARCH_WILDCARDS;async function aC(e,t,r){let s;e.schema===Qt.SYSTEM_SCHEMA_NAME?s=iC[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dl(e,s.hash_attribute,r,t);return El(e,n,s.hash_attribute,r)}a(aC,"prepSearch");async function El(e,t,r,s){let n=rC.join(nC(),e.schema.toString()),i=await tC.openEnvironment(n,e.table),o=ll(i,e,t,r);if([N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,N.SEARCH_TYPES.SEARCH_ALL,N.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(cC(e,r)===!1)return s===!0?_C(o):o[1];let c=o[0];return s===!0?fe.batchSearchByHashToMap(i,r,e.get_attributes,c):fe.batchSearchByHash(i,r,e.get_attributes,c)}a(El,"executeSearch");function ll(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 N.SEARCH_TYPES.EQUALS:n=fe.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.CONTAINS:n=fe.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.ENDS_WITH:case N.SEARCH_TYPES._ENDS_WITH:n=fe.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.STARTS_WITH:case N.SEARCH_TYPES._STARTS_WITH:n=fe.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return fe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return fe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case N.SEARCH_TYPES.SEARCH_ALL:return fe.searchAll(e,s,t.get_attributes,o,_,c);case N.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return fe.searchAllToMap(e,s,t.get_attributes,o,_,c);case N.SEARCH_TYPES.BETWEEN:n=fe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case N.SEARCH_TYPES.GREATER_THAN:case N.SEARCH_TYPES._GREATER_THAN:n=fe.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.GREATER_THAN_EQUAL:case N.SEARCH_TYPES._GREATER_THAN_EQUAL:n=fe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.LESS_THAN:case N.SEARCH_TYPES._LESS_THAN:n=fe.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.LESS_THAN_EQUAL:case N.SEARCH_TYPES._LESS_THAN_EQUAL:n=fe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(ll,"searchByType");function oC(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case N.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case N.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case N.SEARCH_TYPES.ENDS_WITH:case N.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case N.SEARCH_TYPES.STARTS_WITH:case N.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case N.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return pr(i,s[0])>=0&&pr(i,s[1])<=0};case N.SEARCH_TYPES.GREATER_THAN:case N.SEARCH_TYPES._GREATER_THAN:return n=>pr(n[r],s)>0;case N.SEARCH_TYPES.GREATER_THAN_EQUAL:case N.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>pr(n[r],s)>=0;case N.SEARCH_TYPES.LESS_THAN:case N.SEARCH_TYPES._LESS_THAN:return n=>pr(n[r],s)<0;case N.SEARCH_TYPES.LESS_THAN_EQUAL:case N.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>pr(n[r],s)<=0;default:return Object.create(null)}}a(oC,"filterByType");function _C(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(_C,"createMapFromArrays");function cC(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(cC,"checkToFetchMore");function dl(e,t,r,s){if(sC.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),St.indexOf(n)>-1)return r===!0?N.SEARCH_TYPES.SEARCH_ALL_TO_MAP:N.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(St[0])<0&&n.indexOf(St[1])<0)return _===!0?r===!0?N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:N.SEARCH_TYPES.EQUALS;if(St.indexOf(i)>=0&&St.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),N.SEARCH_TYPES.CONTAINS;if(St.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),N.SEARCH_TYPES.ENDS_WITH;if(St.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),N.SEARCH_TYPES.STARTS_WITH;if(n.includes(St[0])||n.includes(St[1]))return N.SEARCH_TYPES.EQUALS;throw new Error(ul.UNKNOWN_SEARCH_TYPE)}else switch(s){case Qt.VALUE_SEARCH_COMPARATORS.BETWEEN:return N.SEARCH_TYPES.BETWEEN;case Qt.VALUE_SEARCH_COMPARATORS.GREATER:return N.SEARCH_TYPES.GREATER_THAN;case Qt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return N.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qt.VALUE_SEARCH_COMPARATORS.LESS:return N.SEARCH_TYPES.LESS_THAN;case Qt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return N.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ul.UNKNOWN_SEARCH_TYPE)}}a(dl,"createSearchTypeFromSearchObject");hl.exports={executeSearch:El,createSearchTypeFromSearchObject:dl,prepSearch:aC,searchByType:ll,filterByType:oC}});var Tl=d((MH,Sl)=>{"use strict";var DH=ht(),uC=Os(),EC=p(),lC=f(),dC=jn();Sl.exports=hC;async function hC(e,t){if(!EC.isEmpty(t)&&lC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=uC(e,"value");if(s)throw s;let n=!0;try{return await dC.prepSearch(e,t,n)}catch(i){throw i}}a(hC,"lmdbGetDataByValue")});var Ir=d((BH,fl)=>{"use strict";var PH=ht(),SC=Os(),TC=p(),fC=f(),RC=jn();fl.exports=mC;async function mC(e,t){if(!TC.isEmpty(t)&&fC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=SC(e,"value");if(s)throw s;let n=!1;try{return await RC.prepSearch(e,t,n)}catch(i){throw i}}a(mC,"lmdbSearchByValue")});var ml=d((vH,Rl)=>{"use strict";var HH=Se(),ei=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(ei,"SearchByConditionsObject");var ti=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(ti,"SearchCondition");var ri=class{constructor(t,r){this.attribute=t,this.desc=r}};a(ri,"SortAttribute");Rl.exports={SearchByConditionsObject:ei,SearchCondition:ti,SortAttribute:ri}});var Il=d((qH,pl)=>{"use strict";var GH=ml().SearchByConditionsObject,AC=ht(),OC=Os(),fo=gr(),si=Se(),gl=jn(),NC=lo(),Al=require("lodash"),{getBaseSchemaPath:gC}=V(),pC=require("path"),IC=G(),{handleHDBError:Ol,hdb_errors:CC}=Y(),{HTTP_STATUS_CODES:bC}=CC,LC=1e8,wC={lazy:!0};pl.exports=yC;async function yC(e){try{let t=OC(e,"conditions");if(t)throw Ol(t,t.message,bC.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=pC.join(gC(),e.schema.toString()),s=await IC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=Al.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===si.SEARCH_TYPES.EQUALS?o.estimated_count=fo.count(s,o.search_attribute,o.search_value):_===si.SEARCH_TYPES.CONTAINS||_===si.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=LC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await Nl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(gl.filterByType),u=c.length,E=[],l=fo.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let A of o){let O=_.get(A,wC);for(let I=0;I<u;I++)if(!c[I](O))continue e;if(T>0){T--;continue}if(h<=0)break;h--,E.push(NC.parseRow(O,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await Nl(s,e,c,n.hash_attribute);_.push(u)}if(o=Al.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return fo.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw Ol(t)}}a(yC,"lmdbSearchByConditions");async function Nl(e,t,r,s){let n=new AC(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===si.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,gl.searchByType(e,n,i,s)}a(Nl,"executeConditionSearch")});var gs=d((FH,Cl)=>{"use strict";var UC=f().OPERATIONS_ENUM,ni=class{constructor(t,r,s,n=void 0){this.operation=UC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(ni,"DeleteObject");Cl.exports=ni});var Ro=d((xH,bl)=>{"use strict";var ii=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ii,"DropAttributeObject");bl.exports=ii});var Ao=d((kH,Ll)=>{"use strict";var DC=ht(),MC=gs(),VH=Ro(),nt=f(),PC=p(),mo=G(),BC=Yt(),HC=Ir(),vC=fs(),{getBaseSchemaPath:GC}=V(),qC=require("path");Ll.exports=FC;async function FC(e,t=!0){let r;e.schema===nt.SYSTEM_SCHEMA_NAME?r=BC[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await VC(e),n=qC.join(GC(),e.schema.toString()),i=await mo.openEnvironment(n,e.table);return t===!0&&await xC(e,i,r.hash_attribute),mo.dropDBI(i,e.attribute),s}a(FC,"lmdbDropAttribute");async function xC(e,t,r){let s=mo.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(xC,"removeAttributeFromAllObjects");async function VC(e){let t=new DC(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await HC(t)).filter(o=>o[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(PC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new MC(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return vC(i)}a(VC,"dropAttributeFromSystem")});var Dl=d(($H,Ul)=>{"use strict";var kC=Ao(),$C=Ro(),wl=p(),yl=g(),YC=Ne().LMDB_ERRORS_ENUM;Ul.exports=KC;async function KC(e){if(wl.isEmpty(global.hdb_schema[e.schema])||wl.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 $C(e.schema,e.table,r);try{await kC(n,!1)}catch(i){i.message!==YC.DBI_DOES_NOT_EXIST&&yl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw yl.error(`Error dropping attribute ${r}`),s}}a(KC,"lmdbDropAllAttributes")});var Oo=d((KH,xl)=>{"use strict";var vl=ht(),Gl=gs(),ql=Ir(),Fl=fs(),YH=Dl(),Ie=f(),Ml=p(),Pl=G(),{getBaseSchemaPath:WC,getTransactionAuditStorePath:QC}=V(),Bl=require("path"),Hl=g();xl.exports=JC;async function JC(e){try{if(Ml.isEmpty(global.hdb_schema[e.schema])||Ml.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await XC(e),await ZC(e);let t=Bl.join(WC(),e.schema.toString());try{await Pl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Hl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Bl.join(QC(),e.schema.toString());await Pl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Hl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(JC,"lmdbDropTable");async function XC(e){let t=new vl(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 ql(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 Gl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Fl(n)}a(XC,"deleteAttributesFromSystem");async function ZC(e){let t=new vl(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 ql(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 Gl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Fl(n)}catch(i){throw i}}a(ZC,"dropTableFromSystem")});var kl=d((QH,Vl)=>{"use strict";var zC=require("fs-extra"),jC=ht(),eb=Ns(),tb=gs(),rb=Oo(),sb=fs(),nb=To(),ib=Ir(),Tt=f(),WH=p(),ab=require("path"),{getBaseSchemaPath:ob}=V(),{handleHDBError:_b,hdb_errors:cb}=Y(),{HDB_ERROR_MSGS:ub,HTTP_STATUS_CODES:Eb}=cb;Vl.exports=lb;async function lb(e){let t;try{t=await db(e.schema);let r=new jC(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await ib(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await rb(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new tb(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await sb(n);let i=ab.join(ob(),t.toString());await zC.remove(i)}catch(r){throw r}}a(lb,"lmdbDropSchema");async function db(e){let t=new eb(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await nb(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw _b(new Error,ub.SCHEMA_NOT_FOUND(e),Eb.NOT_FOUND,void 0,void 0,!0);return s}a(db,"validateDropSchema")});var No=d((JH,$l)=>{"use strict";var ai=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(ai,"CreateTableObject");$l.exports=ai});var Kl=d((ZH,Yl)=>{"use strict";var hb=require("path"),Sb=require("fs-extra"),oi=G(),{getTransactionAuditStorePath:Tb}=V(),go=Se(),XH=No();Yl.exports=fb;async function fb(e){let t;try{let r=hb.join(Tb(),e.schema.toString());await Sb.mkdirp(r),t=await oi.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{oi.createDBI(t,go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),oi.createDBI(t,go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),oi.createDBI(t,go.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(fb,"createTransactionsAuditEnvironment")});var Xl=d((zH,Jl)=>{"use strict";var po=f(),Wl=G(),Rb=Tr(),mb=require("path"),{getSystemSchemaPath:Ab,getBaseSchemaPath:Ob}=V(),Nb=Yt(),gb=Pn(),Io=Mn(),pb=g(),Ib=Kl(),bo=Nb.hdb_table,Ql=[];for(let e=0;e<bo.attributes.length;e++)Ql.push(bo.attributes[e].attribute);Jl.exports=Cb;async function Cb(e,t){let r=mb.join(Ob(),t.schema.toString()),s=new Io(t.schema,t.table,po.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Io(t.schema,t.table,po.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Io(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Wl.createEnvironment(r,t.table),e!==void 0){let o=await Wl.openEnvironment(Ab(),po.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Rb.insertRecords(o,bo.hash_attribute,Ql,[e]),await Co(s),await Co(n),await Co(i)}await Ib(t)}catch(o){throw o}}a(Cb,"lmdbCreateTable");async function Co(e){try{await gb(e)}catch(t){pb.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Co,"createAttribute")});var zl=d((jH,Zl)=>{"use strict";var bb=Bn(),Lb=qn(),wb=Vn(),Cr=f(),yb=Tr().updateRecords,Ub=G(),Db=require("path"),{getBaseSchemaPath:Mb}=V(),Pb=Ts(),Bb=g();Zl.exports=Hb;async function Hb(e){try{let{schema_table:t,attributes:r}=bb(e);Lb(e,r,t.hash_attribute),e.schema!==Cr.SYSTEM_SCHEMA_NAME&&(r.includes(Cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await wb(e.hdb_auth_header,t,r),n=Db.join(Mb(),e.schema.toString()),i=await Ub.openEnvironment(n,e.table),o=await yb(i,t.hash_attribute,r,e.records,e[Cr.CLUSTERING_FLAG]!==!0);try{await Pb(e,o)}catch(_){Bb.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(Hb,"lmdbUpdateRecords")});var ed=d((ev,jl)=>{"use strict";var vb=f().OPERATIONS_ENUM,_i=class{constructor(t,r,s,n=void 0){this.operation=vb.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(_i,"UpsertObject");jl.exports=_i});var rd=d((rv,td)=>{"use strict";var tv=ed(),Gb=Bn(),qb=qn(),Fb=Vn(),br=f(),xb=Tr().upsertRecords,Vb=G(),kb=require("path"),{getBaseSchemaPath:$b}=V(),Yb=Ts(),Kb=g(),{handleHDBError:Wb,hdb_errors:Qb}=Y();td.exports=Jb;async function Jb(e){let t;try{t=Gb(e)}catch(c){throw Wb(c,c.message,Qb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;qb(e,s,r.hash_attribute),e.schema!==br.SYSTEM_SCHEMA_NAME&&(s.includes(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Fb(e.hdb_auth_header,r,s),i=kb.join($b(),e.schema.toString()),o=await Vb.openEnvironment(i,e.table),_=await xb(o,r.hash_attribute,s,e.records,e[br.CLUSTERING_FLAG]!==!0);try{await Yb(e,_)}catch(c){Kb.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(Jb,"lmdbUpsertRecords")});var _d=d((sv,od)=>{"use strict";var Xb=ht(),sd=p(),nd=g(),Zb=Ir(),id=f(),zb=uo().deleteRecords,jb=G(),eL=require("path"),{getBaseSchemaPath:tL}=V(),{promisify:rL}=require("util"),sL=rL(setTimeout),ad=1e4,nL=10;od.exports=iL;async function iL(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(sd.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 Xb(e.schema,e.table,id.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Zb(n,id.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw nd.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return sd.isEmptyOrZeroLength(s)?(nd.trace("No records found to delete"),{message:"No records found to delete"}):await aL(e,s,t)}a(iL,"lmdbDeleteRecordsBefore");async function aL(e,t,r){let s=eL.join(tL(),e.schema.toString()),n=await jb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=ad){let c=t.slice(o,o+ad),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await zb(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 sL(nL)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(aL,"chunkDeletes")});var ud=d((nv,cd)=>{"use strict";var ci=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ci,"DeleteBeforeObject");cd.exports=ci});var ld=d((iv,Ed)=>{"use strict";var ui=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ui,"DeleteAuditLogsBeforeResults");Ed.exports=ui});var Sd=d((ov,hd)=>{"use strict";var Lo=G(),{getTransactionAuditStorePath:oL}=V(),av=ud(),_L=require("path"),ps=Se(),cL=p(),dd=ld(),uL=require("util").promisify,EL=uL(setTimeout),lL=1e4,dL=100;hd.exports=hL;async function hL(e){let t=_L.join(oL(),e.schema),r=await Lo.openEnvironment(t,e.table,!0),s=Lo.listDBIs(r);Lo.initializeDBIs(r,ps.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new dd;do n=await SL(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 EL(dL);while(n.transactions_deleted>0);return i}a(hL,"deleteAuditLogsBefore");async function SL(e,t){let r=new dd;try{let s=e.dbis[ps.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[ps.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];cL.isEmpty(_)||(n=e.dbis[ps.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ps.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>lL)break}return await n,r}catch(s){throw s}}a(SL,"deleteTransactions")});var Nd=d((_v,Od)=>{"use strict";var wo=G(),Lr=Se(),Td=kt(),yo=f(),fd=p(),{getTransactionAuditStorePath:TL}=V(),fL=require("path"),RL=gr(),Ei=mr(),mL=g();Od.exports=AL;async function AL(e){let t=fL.join(TL(),e.schema),r=await wo.openEnvironment(t,e.table,!0),s=wo.listDBIs(r);wo.initializeDBIs(r,Lr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Rd(r,e.search_values);case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,NL(r,e.search_values,n);case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return OL(r,e.search_values);default:return Rd(r)}}a(AL,"readAuditLog");function Rd(e,t=[0,Td.getMicroTime()]){fd.isEmpty(t[0])&&(t[0]=0),fd.isEmpty(t[1])&&(t[1]=Td.getMicroTime());let r=[];try{let s=e.dbis[Lr.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 Ei,i);r.push(o)}return r}catch(s){throw s}}a(Rd,"searchTransactionsByTimestamp");function OL(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[Lr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Ad(e,i))}return Object.fromEntries(r)}a(OL,"searchTransactionsByUsername");function NL(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=RL.equals(e,Lr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Lr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,T=E[0].length;l<T;l++){let h=E[0][l],A=Number(h);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=Ad(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);md(c,"records",r,E,o),md(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(NL,"searchTransactionsByHashValues");function md(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 Ei(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Ei(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(md,"loopRecords");function Ad(e,t){let r=[];try{let s=e.dbis[Lr.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 Ei,i);r.push(o)}}catch(i){mL.warn(i)}return r}catch(s){throw s}}a(Ad,"batchSearchTransactions")});var pd=d((cv,gd)=>{"use strict";var gL=require("path"),{getBaseSchemaPath:pL}=V(),IL=G();gd.exports={writeTransaction:CL};async function CL(e,t,r){let s=gL.join(pL(),e);return(await IL.openEnvironment(s,t)).transaction(r)}a(CL,"writeTransaction")});var Cd=d((uv,Id)=>{"use strict";var bL=require("path"),{getBaseSchemaPath:LL}=V(),wL=G();Id.exports={flush:yL};async function yL(e,t){let r=bL.join(LL(),e.toString());return(await wL.openEnvironment(r,t.toString())).flushed}a(yL,"flush")});var Ld=d((Ev,bd)=>{"use strict";var ee=g(),{handleHDBError:UL}=Y(),DL=qa(),ML=Pn(),PL=oo(),BL=qE(),HL=fs(),vL=To(),GL=_l(),qL=Tl(),FL=Ir(),xL=Il(),VL=kl(),kL=Xl(),$L=zl(),YL=rd(),KL=_d(),WL=Sd(),QL=Oo(),JL=Ao(),XL=Nd(),ZL=pd(),zL=Cd(),li=class extends DL{async searchByConditions(t){try{return xL(t)}catch(r){throw ee.error(r),r}}async getDataByHash(t){try{return await vL(t)}catch(r){throw ee.error(r),r}}async searchByHash(t){try{return await GL(t)}catch(r){throw ee.error(r),r}}async getDataByValue(t,r){try{return await qL(t,r)}catch(s){throw ee.error(s),s}}async searchByValue(t){try{return await FL(t)}catch(r){throw ee.error(r),r}}async createSchema(t){try{return await BL(t)}catch(r){throw ee.error(r),r}}async dropSchema(t){try{return await VL(t)}catch(r){throw ee.error(r),r}}async createTable(t,r){try{return await kL(t,r)}catch(s){throw ee.error(s),s}}async dropTable(t){try{return await QL(t)}catch(r){throw ee.error(r),r}}async createAttribute(t){try{return await ML(t)}catch(r){throw ee.error(r),r}}async createRecords(t){try{return await PL(t)}catch(r){throw ee.error(r),r}}async updateRecords(t){try{return await $L(t)}catch(r){throw ee.error(r),r}}async upsertRecords(t){try{return await YL(t)}catch(r){throw UL(r,null,null,ee.ERR,r)}}async deleteRecords(t){try{return await HL(t)}catch(r){throw ee.error(r),r}}async deleteRecordsBefore(t){try{return await KL(t)}catch(r){throw ee.error(r),r}}async dropAttribute(t){try{return await JL(t)}catch(r){throw ee.error(r),r}}async deleteAuditLogsBefore(t){try{return await WL(t)}catch(r){throw ee.error(r),r}}async readAuditLog(t){try{return await XL(t)}catch(r){throw ee.error(r),r}}writeTransaction(t,r,s){return ZL.writeTransaction(t,r,s)}flush(t,r){return zL.flush(t,r)}};a(li,"LMDBBridge");bd.exports=li});var Jt=d((lv,yd)=>{"use strict";var jL=Ld(),ew=qa(),tw=Z();tw.initSync();var wd;function rw(){return wd instanceof ew?wd:new jL}a(rw,"getBridge");yd.exports=rw()});var Dd=d((dv,Ud)=>{"use strict";var sw=Jt();Ud.exports={writeTransaction:nw};function nw(e,t,r){return sw.writeTransaction(e,t,r)}a(nw,"writeTransaction")});var Yd=d((Sv,$d)=>{"use strict";var Uo=require("recursive-iterator"),iw=require("alasql"),Do=require("clone"),Md=p(),{handleHDBError:Pd,hdb_errors:aw}=Y(),{HDB_ERROR_MSGS:Bd,HTTP_STATUS_CODES:Hd}=aw,ow=["DISTINCT_ARRAY"],vd=Symbol("validateTables"),Mo=Symbol("validateTable"),hv=Symbol("getAllColumns"),Gd=Symbol("validateAllColumns"),di=Symbol("findColumn"),qd=Symbol("validateOrderBy"),Is=Symbol("validateSegment"),Po=Symbol("validateColumn"),Fd=Symbol("setColumnsForTable"),xd=Symbol("checkColumnsForAsterisk"),Vd=Symbol("validateGroupBy"),kd=Symbol("hasColumns"),hi=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[vd](),this[xd](),this[Gd]()}[vd](){if(this[kd]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mo](t.table)})}}[kd](){let t=!1,r=new Uo(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Mo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Pd(new Error,Bd.SCHEMA_NOT_FOUND(t.databaseid),Hd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Pd(new Error,Bd.TABLE_NOT_FOUND(t.databaseid,t.tableid),Hd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Do(s);n.table=Do(t),this.attributes.push(n)})}[di](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)}[xd](){let t=new Uo(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Fd](r.tableid)}[Fd](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new iw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Gd](){this[Is](this.statement.columns,!1),this[Is](this.statement.joins,!1),this[Is](this.statement.where,!1),this[Vd](this.statement.group,!1),this[Is](this.statement.order,!0)}[Is](t,r){if(!t)return;let s=new Uo(t),n=[];for(let{node:i,path:o}of s)!Md.isEmpty(i)&&!Md.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[qd](i):n.push(this[Po](i)));return n}[Vd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&ow.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Do(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[di](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[di](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`}[qd](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[Po](t)}[Po](t){let r=this[di](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(hi,"SelectValidator");$d.exports=hi});var Jd=d((Tv,Qd)=>{"use strict";var Kd=require("lodash"),Cs=require("mathjs"),_w=require("jsonata"),Wd=p();Qd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Kd.uniqWith(e,Kd.isEqual):e,searchJSON:cw,mad:bs.bind(null,Cs.mad),mean:bs.bind(null,Cs.mean),mode:bs.bind(null,Cs.mode),prod:bs.bind(null,Cs.prod),median:bs.bind(null,Cs.median)};function bs(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(bs,"aggregateFunction");function cw(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(Wd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Wd.isEmpty(this.__ala__.res[r])){let s=_w(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(cw,"searchJSON")});var Zd=d((fv,Xd)=>{"use strict";var z=require("moment"),Bo="YYYY-MM-DDTHH:mm:ss.SSSZZ";z.suppressDeprecationWarnings=!0;Xd.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(Bo),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(Bo),offset_utc:(e,t)=>z(e).utc().utcOffset(t).format(Bo)}});var th=d((Rv,eh)=>{"use strict";var uw=require("@turf/area"),Ew=require("@turf/length"),lw=require("@turf/circle"),dw=require("@turf/difference"),hw=require("@turf/distance"),Sw=require("@turf/boolean-contains"),Tw=require("@turf/boolean-equal"),fw=require("@turf/boolean-disjoint"),Rw=require("@turf/helpers"),zd=f(),D=p();eh.exports={geoArea:mw,geoLength:Aw,geoCircle:Ow,geoDifference:Nw,geoDistance:jd,geoNear:gw,geoContains:pw,geoEqual:Iw,geoCrosses:Cw,geoConvert:bw};var Ho="geo1 is required",vo="geo2 is required";function mw(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),uw.default(e)}a(mw,"geoArea");function Aw(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Ew.default(e,{units:t||"kilometers"})}a(Aw,"geoLength");function Ow(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)),lw.default(e,t,{units:r||"kilometers"})}a(Ow,"geoCircle");function Nw(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)),dw(e,t)}a(Nw,"geoDifference");function jd(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)),hw.default(e,t,{units:r||"kilometers"})}a(jd,"geoDistance");function gw(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 jd(e,t,s)<=r}a(gw,"geoNear");function pw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Sw.default(e,t)}a(pw,"geoContains");function Iw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Tw.default(e,t)}a(Iw,"geoEqual");function Cw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!fw.default(e,t)}a(Cw,"geoCrosses");function bw(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(zd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zd.GEO_CONVERSION_ENUM).join(",")}`);return Rw[t](e,r)}a(bw,"geoConvert")});var sh=d((mv,rh)=>{var Xt=Jd(),Pe=Zd(),it=th();rh.exports=e=>{e.aggr.mad=e.aggr.MAD=Xt.mad,e.aggr.mean=e.aggr.MEAN=Xt.mean,e.aggr.mode=e.aggr.MODE=Xt.mode,e.aggr.prod=e.aggr.PROD=Xt.prod,e.aggr.median=e.aggr.MEDIAN=Xt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pe.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pe.current_time,e.fn.extract=e.fn.EXTRACT=Pe.extract,e.fn.date=e.fn.DATE=Pe.date,e.fn.date_format=e.fn.DATE_FORMAT=Pe.date_format,e.fn.date_add=e.fn.DATE_ADD=Pe.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pe.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pe.date_diff,e.fn.now=e.fn.NOW=Pe.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pe.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pe.get_server_time,e.fn.getdate=e.fn.GETDATE=Pe.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pe.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=it.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=it.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=it.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=it.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=it.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=it.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=it.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=it.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=it.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=it.geoNear}});var ah=d((Av,ih)=>{"use strict";var Ls=require("lodash"),_e=require("alasql");_e.options.cache=!1;var Lw=sh(),nh=require("clone"),Si=require("recursive-iterator"),L=g(),y=p(),wr=Jt(),ww=f(),{hdb_errors:yw}=Y(),Uw="IS NULL",ws="There was a problem performing this search. Please check the logs and try again.";Lw(_e);var Ti=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(ws)}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(ws)}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(ws)}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(ws)}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(ws)}}_getColumns(){let t=new Si(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(nh(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ls.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 Si(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 _e.yy.LogicValue({value:s}):r.right instanceof _e.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new _e.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 _e.yy.LogicValue({value:i}):s instanceof _e.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new _e.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 Si(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(ww.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&&Ls.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 _e.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(nh(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(Uw)>-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=Ls.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 wr.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 wr.getDataByValue(l);for(let h in T)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[h][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(h)))}))}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 h=E[l];_.search_attribute=h.attribute,_.search_value=h.search_value;let A=await wr.getDataByValue(_,h.operation);if(c)for(let O in A)this.data[i].__merged_data[O]||(this.data[i].__merged_data[O]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(O)));else for(let O in A)this.data[i].__merged_data[O]?this._updateMergedAttribute(i,O,n.attribute,A[O][n.attribute]):(this.data[i].__merged_data[O]=[...s[i]],this._updateMergedAttribute(i,O,n.attribute,A[O][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(O)))}}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 wr.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 _e.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 _e.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new _e.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 _e.yy.FuncValue:new _e.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let A=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(A+=" ON "+h.on.toString()),i.push(A),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(h=>{let A=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,O=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${O}.${A}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${A}\` AS "${O}.${A}"`),_[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let 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 h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(h,n);T=await _e.promise(A,t),t=null}catch(h){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(h),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let h=0,A=T.length;h<A;h++){let O=T[h];o.forEach(I=>{O[I.key]!==null&&O[I.key]!==void 0&&I.keys.add(O[I.key])})}o.forEach(h=>{let A=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),O=Ls.difference(A,[...h.keys].map(I=>I.toString()));for(let I=0,X=O.length;I<X;I++){let v=O[I];delete this.data[`${h.schema}_${h.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 Si(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=Ls.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 wr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let T=o[E],h=c[T];for(let A=0;A<u;A++){let O=n.columns[A],I=h[O]===void 0?null:h[O];this.data[s].__merged_data[T].push(I)}}}}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 _e.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(yw.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 wr.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(Ti,"SQLSearch");ih.exports=Ti});var ys=d((Ov,_h)=>{"use strict";var Dw=Yd();_h.exports={searchByConditions:Hw,searchByHash:vw,searchByValue:Gw,search:qw};var Go=Jt(),oh=require("util"),Mw=oh.callbackify(Go.searchByHash),Pw=oh.callbackify(Go.searchByValue),Bw=ah();async function Hw(e){return Go.searchByConditions(e)}a(Hw,"searchByConditions");function vw(e,t){try{Mw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(vw,"searchByHash");function Gw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Pw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Gw,"searchByValue");function qw(e,t){try{let r=new Dw(e);r.validate(),new Bw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(qw,"search")});var Ur=d((Nv,Sh)=>{"use strict";var uh=ys(),Ut=g(),Eh=yn(),Fw=require("lodash"),xw=require("path"),Vw=ns(),qo=p(),{promisify:lh}=require("util"),F=f(),{handleHDBError:fi,hdb_errors:kw}=Y(),{HDB_ERROR_MSGS:Ri,HTTP_STATUS_CODES:dh}=kw,$w=Z();$w.initSync();var ch=G(),Yw=V(),Us=lh(uh.searchByValue),Kw=lh(uh.searchByHash),yr="name",hh="hash_attribute",Fo="schema",Ww="schema_table",Qw="attribute";Sh.exports={describeAll:Jw,describeTable:mi,describeSchema:Zw};async function Jw(e){try{let t=qo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:yr,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[yr]},i=await Us(n);if(qo.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:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:F.ID_ATTRIBUTE_STRING,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[hh,F.ID_ATTRIBUTE_STRING,yr,Fo]},u=await Us(c),E=[];for(let T of u)try{let h;if(t||s)h=await mi({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;h=await mi({schema:T.schema,table:T.name},A)}h&&E.push(h)}catch(h){Ut.error(h)}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),fi(new Error,Ri.DESCRIBE_ALL_ERR)}}a(Jw,"describeAll");async function mi(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=Eh.describe_table(e);if(o)throw o;if(r===F.SYSTEM_SCHEMA_NAME)return global.hdb_schema[F.SYSTEM_SCHEMA_NAME][s];let _={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:yr,search_value:s,hash_values:[],get_attributes:[F.WILDCARD_SEARCH_VALUE]},c=await Us(_);if(!c||c.length===0)throw fi(new Error,Ri.TABLE_NOT_FOUND(e.schema,e.table),dh.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw fi(new Error,Ri.INVALID_TABLE_ERR(i));let E={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Ww,search_value:r+"."+s,get_attributes:[Qw]},l=await Us(E);l=Fw.uniqBy(l,T=>T.attribute),n&&n.length>0&&(l=Xw(n)),i.attributes=l,i.clustering_stream_name=Vw.createNatsTableStreamName(u.schema,u.name);try{let T=xw.join(Yw.getBaseSchemaPath(),i.schema.toString()),h=await ch.openEnvironment(T,i.name),A=ch.statDBI(h,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(mi,"descTable");function Xw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Xw,"getAttrsByPerms");async function Zw(e){let t=Eh.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:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Fo,search_value:s,hash_values:[],get_attributes:[hh,F.ID_ATTRIBUTE_STRING,yr,Fo]},i=await Us(n);if(i&&i.length<1){let o={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[yr]},_=await Kw(o);if(_&&_.length<1)throw fi(new Error,Ri.SCHEMA_NOT_FOUND(e.schema),dh.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]),qo.isEmpty(c)||c.describe){let u=await mi({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(Zw,"describeSchema")});var Ds=d((Iv,Ah)=>{var gv=require("async"),Dr=Yt(),pv=g(),{callbackify:Rh,promisify:zw}=require("util");Ah.exports={setSchemaDataToGlobal:Th,getTableSchema:ty,getSystemSchema:sy,setSchemaDataToGlobalAsync:zw(Th)};var mh=Ur(),jw=Rh(mh.describeAll),ey=Rh(mh.describeTable);function Th(e){jw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Dr),global.hdb_schema=r,e(null,null)})}a(Th,"setSchemaDataToGlobal");function fh(e,t){return e==="system"?Dr[t]:global.hdb_schema[e][t]}a(fh,"returnSchema");function ty(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?ry(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,fh(e,t))}):r(null,fh(e,t))}a(ty,"getTableSchema");function ry(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Dr:global.hdb_schema={system:Dr},r();return}ey(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Dr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(ry,"setTableDataToGlobal");function sy(){return Dr}a(sy,"getSystemSchema")});var Ms=d((Cv,gh)=>{"use strict";var Oi=so(),Fe=p(),ny=require("util"),Ni=Jt(),iy=Ds(),xo=g(),{handleHDBError:Dt,hdb_errors:ay}=Y(),{HTTP_STATUS_CODES:Zt}=ay,oy=ny.promisify(iy.getTableSchema),_y="updated",Oh="inserted",Nh="upserted";gh.exports={insert:uy,update:Ey,upsert:ly,validation:cy,flush:dy};async function cy(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 oy(e.schema,e.table),r=Oi(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 xo.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 xo.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(cy,"validation");async function uy(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Oi(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 Ni.createRecords(e);return Ai(Oh,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(uy,"insertData");async function Ey(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Oi(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 Ni.updateRecords(e);return Fe.isEmpty(s.existing_rows)?Ai(_y,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ai(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Ey,"updateData");async function ly(e){if(e.operation!=="upsert")throw Dt(new Error,"invalid operation, must be upsert",Zt.INTERNAL_SERVER_ERROR);let t=Oi(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 Ni.upsertRecords(e);return Ai(Nh,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,xo.ERR,n)}}a(ly,"upsertData");function Ai(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===Oh?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Nh?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ai,"returnObject");function dy(e){return Ni.flush(e.schema,e.table)}a(dy,"flush")});var bh=d((bv,Ch)=>{var hy=Ke(),Vo=require("joi"),{hdb_schema_table:ph}=Rr(),Ih={schema:ph,table:ph},Sy={date:Vo.date().iso().required()},Ty={timestamp:Vo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ch.exports=function(e,t){let r=t==="timestamp"?{...Ih,...Ty}:{...Ih,...Sy},s=Vo.object(r);return hy.validateBySchema(e,s)}});var Uh=d((Lv,yh)=>{var fy=Ke(),Lh=require("joi"),{hdb_schema_table:wh}=Rr(),Ry=Lh.object({schema:wh,table:wh,hash_values:Lh.array().required()});yh.exports=function(e){return fy.validateBySchema(e,Ry)}});var Mh=d((wv,Dh)=>{"use strict";var gi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(gi,"InsertObject");var pi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(pi,"NoSQLSeachObject");var Ii=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Ii,"DeleteResponseObject");Dh.exports={InsertObject:gi,NoSQLSeachObject:pi,DeleteResponseObject:Ii}});var Yo=d((yv,Gh)=>{"use strict";var Bh=bh(),my=Uh(),Ci=p(),Ph=require("moment"),Hh=g(),{promisify:Ay,callbackify:Oy}=require("util"),zt=f(),Ny=Ds(),ko=Ay(Ny.getTableSchema),$o=Jt(),{DeleteResponseObject:gy}=Mh(),{handleHDBError:Mt,hdb_errors:py}=Y(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Pt}=py,Iy="records successfully deleted",Cy=Oy(vh);Gh.exports={delete:Cy,deleteRecord:vh,deleteFilesBefore:by,deleteAuditLogsBefore:Ly};async function by(e){let t=Bh(e,"date");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(!Ph(e.date,Ph.ISO_8601).isValid())throw Mt(new Error,bi.INVALID_DATE,Pt.BAD_REQUEST,zt.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ci.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,s,!0);try{let n=await $o.deleteRecordsBefore(e);if(await ko(e.schema,e.table),Hh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(by,"deleteFilesBefore");async function Ly(e){let t=Bh(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,bi.INVALID_VALUE("Timestamp"),Pt.BAD_REQUEST,zt.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,r,!0);try{let s=await $o.deleteAuditLogsBefore(e);return await ko(e.schema,e.table),Hh.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Ly,"deleteAuditLogsBefore");async function vh(e){let t=my(e);if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,r,!0);try{await ko(e.schema,e.table);let s=await $o.deleteRecords(e);return Ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Iy}`),s}catch(s){if(s.message===zt.SEARCH_NOT_FOUND_MESSAGE){let n=new gy;return n.message=zt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(vh,"deleteRecord")});var Li=d((Uv,xh)=>{var wy=require("crypto"),qh=9;function yy(e){let t=Dy(qh),r=Fh(e+t);return t+r}a(yy,"createHash");function Uy(e,t){let r=e.substr(0,qh),s=r+Fh(t+r);return e===s}a(Uy,"validateHash");function Dy(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(Dy,"generateSalt");function Fh(e){return wy.createHash("md5").update(e).digest("hex")}a(Fh,"md5");xh.exports={hash:yy,validate:Uy}});var kh=d((Dv,Vh)=>{var Ko=Ke(),Re={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 My(e){return Re.password.presence=!0,Re.username.presence=!0,Re.role.presence=!0,Re.active.presence=!0,Ko.validateObject(e,Re)}a(My,"addUserValidation");function Py(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Ko.validateObject(e,Re)}a(Py,"alterUserValidation");function By(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Ko.validateObject(e,Re)}a(By,"dropUserValidation");Vh.exports={addUserValidation:My,alterUserValidation:Py,dropUserValidation:By}});var Yh=d((Mv,$h)=>{"use strict";var Bt=f(),Ps=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(Ps,"BaseLicense");var wi=class extends Ps{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(wi,"ExtendedLicense");$h.exports={BaseLicense:Ps,ExtendedLicense:wi}});var Zo=d((Pv,Zh)=>{"use strict";var Pr=require("fs-extra"),Kh=Li(),Wh=require("crypto"),Hy=require("moment"),vy=require("uuid").v4,me=g(),Qo=require("path"),Gy=p(),Be=f(),qy=Yh().ExtendedLicense,Mr="invalid license key format",Fy="061183",xy="mofi25",Vy="aes-256-cbc",ky=16,$y=32,Qh=Z();Qh.initSync();var Wo;Zh.exports={validateLicense:Jh,generateFingerPrint:Ky,licenseSearch:Xh,getLicense:Jy};function Jo(){return Qo.join(Qh.getHdbBasePath(),Be.LICENSE_KEY_DIR_NAME,Be.LICENSE_FILE_NAME)}a(Jo,"getLicenseDirPath");function Yy(){let e=Jo();return Qo.join(e,Be.LICENSE_FILE_NAME)}a(Yy,"getLicenseFilePath");function Xo(){let e=Jo();return Qo.join(e,Be.REG_KEY_FILE_NAME)}a(Xo,"getFingerPrintFilePath");async function Ky(){let e=Xo();try{return await Pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Wy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(Ky,"generateFingerPrint");async function Wy(){let e=vy(),t=Kh.hash(e),r=Xo();try{await Pr.mkdirp(Jo()),await Pr.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(Wy,"writeFingerprint");function Jh(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Be.STORAGE_TYPES_ENUM.LMDB,api_call:Be.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Be.RAM_ALLOCATION_ENUM.DEFAULT,version:Be.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Xo(),n=!1;try{n=Pr.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Pr.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(xy),_=o[1];_=Buffer.concat([Buffer.from(_)],ky);let c=Buffer.concat([Buffer.from(i)],$y),u=Wh.createDecipheriv(Vy,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 h=Qy(o[0],i);if(h)E=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Mr),me.error(Mr),new Error(Mr)}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(Mr),me.error(Mr),new Error(Mr)}else r.exp_date=E;r.exp_date<Hy().valueOf()&&(r.valid_date=!1),Kh.validate(o[1],`${Fy}${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(Jh,"validateLicense");function Qy(e,t){try{let r=Wh.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(Qy,"checkOldLicense");function Xh(){let e=new qy;e.api_call=0;let t=[];try{t=Pr.readFileSync(Yy(),"utf-8").split(Be.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(Gy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Jh(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=Be.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Be.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Be.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT),Wo=e,e}a(Xh,"licenseSearch");async function Jy(){return Wo||await Xh(),Wo}a(Jy,"getLicense")});var Hr=d((Bv,ES)=>{"use strict";var tS="username is required",rS="nothing to update, must supply active, role or password to update",sS="password cannot be an empty string",nS="If role is specified, it cannot be empty.",iS="active must be true or false";ES.exports={addUser:sU,alterUser:nU,dropUser:aU,userInfo:oU,listUsers:Ui,listUsersExternal:_U,setUsersToGlobal:Bs,findAndValidateUser:EU,getClusterUser:lU,USERNAME_REQUIRED:tS,ALTERUSER_NOTHING_TO_UPDATE:rS,EMPTY_PASSWORD:sS,EMPTY_ROLE:nS,ACTIVE_BOOLEAN:iS};var aS=Ms(),Xy=Yo(),jo=Li(),oS=kh(),_S=ys(),e_=Ss(),se=p(),cS=require("validate.js"),w=g(),{promisify:t_}=require("util"),r_=ns(),jt=f(),zh=De(),Zy=ts(),s_=Z(),zy=Zo(),jy=Yt(),{handleHDBError:at,hdb_errors:eU}=Y(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:zo,HDB_ERROR_MSGS:Br}=eU,{UserEventMsg:n_}=Kt(),jh=require("lodash"),uS={username:!0,active:!0,role:!0,password:!0},eS=new Map,yi=t_(_S.searchByValue),tU=t_(_S.searchByHash),rU=t_(Xy.delete);async function sU(e){let t=cS.cleanAttributes(e,uS),r=oS.addUserValidation(t);if(r)throw at(new Error,r.message,ot.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 yi(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 at(new Error,Br.ROLE_NAME_NOT_FOUND(t.role),ot.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw at(new Error,Br.DUP_ROLES_FOUND(t.role),ot.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=r_.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 aS.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await Bs()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw at(new Error,Br.USER_ALREADY_EXISTS(t.username),ot.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.ADD_USER,c,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${_.username} successfully added`}a(sU,"addUser");async function nU(e){let t=cS.cleanAttributes(e,uS);if(se.isEmptyOrZeroLength(t.username))throw new Error(tS);if(se.isEmptyOrZeroLength(t.password)&&se.isEmptyOrZeroLength(t.role)&&se.isEmptyOrZeroLength(t.active))throw new Error(rS);if(!se.isEmpty(t.password)&&se.isEmptyOrZeroLength(t.password.trim()))throw new Error(sS);if(!se.isEmpty(t.active)&&!se.isBoolean(t.active))throw new Error(iS);let r=iU(t.username);if(!se.isEmpty(t.password)&&!se.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password)),t.role==="")throw new Error(nS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await yi(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Br.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),at(new Error,c,ot.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Br.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),at(new Error,c,ot.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 aS.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await Bs()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.ALTER_USER,i,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),n}a(nU,"alterUser");function iU(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iU,"isClusterUser");async function aU(e){try{let t=oS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(se.isEmpty(global.hdb_users.get(e.username)))throw at(new Error,Br.USER_NOT_EXIST(e.username),ot.NOT_FOUND,void 0,void 0,!0);let s;try{s=await rU(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await Bs()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.DROP_USER,n,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(aU,"dropUser");async function oU(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 tU(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(oU,"userInfo");async function _U(){let e;try{e=await Ui()}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(_U,"listUsersExternal");async function Ui(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=jh.cloneDeep(await yi(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!se.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=jh.cloneDeep(await yi(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],cU(_.role),i.set(_.username,_)}return(await zy.getLicense()).enterprise?i:uU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),se.errorizeMessage(e)}return null}a(Ui,"listUsers");function cU(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(jy)){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(cU,"appendSystemTablesToRole");function uU(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(uU,"nonEnterpriseFilter");async function Bs(){try{let e=await Ui();global.hdb_users=e}catch(e){throw w.error(e),e}}a(Bs,"setUsersToGlobal");async function EU(e,t,r=!0){global.hdb_users||await Bs();let s=global.hdb_users.get(e);if(!s)throw at(new Error,zo.GENERIC_AUTH_FAIL,ot.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw at(new Error,zo.USER_INACTIVE,ot.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(eS.get(t)===s.password)return n;if(jo.validate(s.password,t))eS.set(t,s.password);else throw at(new Error,zo.GENERIC_AUTH_FAIL,ot.UNAUTHORIZED,void 0,void 0,!0)}return n}a(EU,"findAndValidateUser");async function lU(){let e=await Ui(),t=Zy.getConfigFromFile(jt.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!se.isEmpty(r))return r.decrypt_hash=r_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zh.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zh.SERVER_SUFFIX.ADMIN,r}a(lU,"getClusterUser")});var i_=d((Hv,dU)=>{dU.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 tr=d((Wv,US)=>{"use strict";var ft=Z();ft.initSync();var hU=require("fs-extra"),SU=require("semver"),Fs=require("path"),{monotonicFactory:TU}=require("ulidx"),fU=TU(),dS=require("util"),hS=require("child_process"),RU=dS.promisify(hS.exec),mU=hS.spawn,x=De(),K=f(),E_=p(),Rt=g(),Di=ns(),AU=Dd(),Hs=ts(),{encode:__,decode:SS}=require("msgpackr"),{isEmpty:er}=E_,TS=Hr(),vv=Ns(),OU=ys(),Gv=dS.promisify(OU.searchByHash),{connect:NU,StorageType:fS,RetentionPolicy:RS,AckPolicy:mS,DeliverPolicy:c_,NatsConnection:qv,JetStreamManager:Fv,JetStreamClient:xv,StringCodec:Vv,JSONCodec:gU,createInbox:l_,StreamSource:kv,headers:pU,toJsMsg:IU,nuid:$v,JetStreamOptions:Yv,ErrorCode:lS,nanos:Kv}=require("nats"),{PACKAGE_ROOT:CU}=f(),bU=i_(),AS=gU(),LU="clustering",wU=bU.engines[x.NATS_SERVER_NAME],yU=Fs.join(CU,"dependencies"),u_=Fs.join(yU,`${process.platform}-${process.arch}`,x.NATS_BINARY_NAME),a_,o_,vs,Gs,qs,je;US.exports={runCommand:OS,checkNATSServerInstalled:UU,createConnection:d_,getConnection:Mi,getJetStreamManager:vr,getJetStream:NS,getNATSReferences:xe,getServerList:MU,createLocalStream:h_,listStreams:gS,deleteLocalStream:PU,getServerConfig:xs,listRemoteStreams:BU,viewStream:HU,publishToStream:vU,createWorkQueueStream:GU,addSourceToWorkStream:pS,request:qU,removeSourceFromWorkStream:CS,reloadNATS:S_,reloadNATSHub:FU,reloadNATSLeaf:xU,extractServerName:IS,requestErrorHandler:VU,updateWorkStream:kU,createLocalTableStream:LS,createTableStreams:$U,purgeTableStream:wS,purgeSchemaTableStreams:YU,getStreamInfo:KU,updateNodeNameLocalStreams:WU,closeConnection:DU};async function OS(e,t=void 0){let{stdout:r,stderr:s}=await RU(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Ma(n);let i=n.toJSON();pe=Vt(i),Te.trace(YO)}}a(au,"initConfig");function Ma(e){let t=e.toJSON(),r=vO(t);if(r.error)throw _n.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(Ma,"validateConfig");function ZO(e,t){pe===void 0&&(pe={});let r=k.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}pe[r.toLowerCase()]=t}a(ZO,"updateConfigObject");function ou(e,t,r=void 0,s=!1,n=!1){pe===void 0&&au();let i=iu(k.CONFIG_PARAM_MAP.hdb_root),o=dr.join(i,k.HDB_CONFIG_FILE),_=hr(o);if(r===void 0){let E=k.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=Da(E,t);_.setIn([...l],T)}else for(let E in r){let l=k.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let T=l.split("_"),h=Da(l,r[E]);try{_.setIn([...T],h)}catch(A){Te.error(A)}}}Ma(_);let c=_.getIn(["rootPath"]),u=dr.join(c,k.HDB_CONFIG_FILE);if(s===!0)try{let E=dr.join(c,"backup",`${k.HDB_CONFIG_FILE}.bak`);We.copySync(o,E),Te.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){Te.error(KO),Te.error(E)}We.writeFileSync(u,String(_)),n&&(pe=Vt(_.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ou,"updateConfigValue");function Vt(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=Vt(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(Vt,"flattenConfig");function Da(e,t){if(e===k.CONFIG_PARAMS.CLUSTERING_NODENAME||e===k.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(qO(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(Da,"castConfigValue");function zO(){let e=He.getPropsFilePath(),r=un(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(zO,"getConfiguration");async function jO(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ou(void 0,void 0,n,!0),QO}catch(i){throw typeof i=="string"||i instanceof String?xO(i,i,VO.BAD_REQUEST,void 0,void 0,!0):i}}a(jO,"setConfiguration");function Pa(){let e=He.getPropsFilePath();try{We.accessSync(e,We.constants.F_OK|We.constants.R_OK)}catch(n){throw Te.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=un(e).get(k.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return hr(r).toJSON()}a(Pa,"readConfigFile");function hr(e){return GO.parseDocument(We.readFileSync(e,"utf8"),{simpleKeys:!0})}a(hr,"parseYamlDoc");function eN(){let e=Pa(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=He.isEmptyOrZeroLength(t)?[]:t;let r=su(t);if(r)throw _n.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=He.isEmptyOrZeroLength(s)?[]:s;let n=su(s);if(n)throw _n.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 _n.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(eN,"getClusteringRoutes");function _u(e){let t=un(e);pe={};for(let r in k.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(He.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=k.CONFIG_PARAM_MAP[r].toLowerCase();n===k.CONFIG_PARAMS.LOGGING_ROOT?pe[n]=dr.dirname(s):pe[n]=s}return pe}a(_u,"initOldConfig");function tN(e){let t=Pa();return FO.get(t,e.replaceAll("_","."))}a(tN,"getConfigFromFile")});var Z=d((RB,Eu)=>{"use strict";var Ba=require("fs-extra"),st=require("path"),rN=require("os"),sN=require("properties-reader"),rs=g(),Sr=p(),C=f(),En=ts(),nN="Error initializing environment manager",ln="BOOT_PROPS_FILE_PATH",uu=!1,iN={[C.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},lt={};Eu.exports={BOOT_PROPS_FILE_PATH:ln,getHdbBasePath:aN,setHdbBasePath:oN,get:_N,initSync:uN,setProperty:P,initTestEnvironment:EN};function aN(){return lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(aN,"getHdbBasePath");function oN(e){lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(oN,"setHdbBasePath");function _N(e){let t=En.getConfigValue(e);return t===void 0?lt[e]:t}a(_N,"get");function P(e,t){iN[e]&&(lt[e]=t),En.updateConfigObject(e,t)}a(P,"setProperty");function cN(){let e;try{e=Sr.getPropsFilePath(),Ba.accessSync(e,Ba.constants.F_OK|Ba.constants.R_OK),uu=!0;let t=sN(e);return lt[C.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(C.HDB_SETTINGS_NAMES.INSTALL_USER),lt[C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),lt[ln]=e,!0}catch{return rs.trace(`Environment manager found no properties file at ${e}`),!1}}a(cN,"doesPropFileExist");function uN(e=!1){try{(uu||cN())&&(En.initConfig(e),lt[C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=En.getConfigValue(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){rs.error(nN),rs.error(t),console.error(t),process.exit(1)}}a(uN,"initSync");function EN(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=st.join(__dirname,"../../","unitTests");lt[ln]=st.join(c,"hdb_boot_properties.file"),P(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,st.join(c,"settings.test")),P(C.HDB_SETTINGS_NAMES.INSTALL_USER,rN.userInfo().username),P(C.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,st.join(c,"envDir","utility","keys","privateKey.pem")),P(C.HDB_SETTINGS_NAMES.CERT_KEY,st.join(c,"envDir","utility","keys","certificate.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,st.join(c,"envDir","utility","keys","privateKey.pem")),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,st.join(c,"envDir","utility","keys","certificate.pem")),P(C.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY,st.join(c,"envDir","log")),P(C.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(C.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(C.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,st.join(c,"envDir")),P(C.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Sr.isEmpty(n)?!0:n),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Sr.isEmpty(n)?!0:n),P(C.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(C.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Sr.isEmpty(i)?!1:i),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Sr.isEmpty(i)?!1:i),P(C.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(C.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(C.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(C.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,st.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(C.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Sr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(C.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(C.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(C.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(C.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ln}. Please check your boot props and settings files`;rs.fatal(r),rs.error(t)}}a(EN,"initTestEnvironment")});var De=d((AB,du)=>{"use strict";var{platform:mB}=require("os"),lN="nats-server.zip",Ha="nats-server",dN=process.platform==="win32"?`${Ha}.exe`:Ha,va="HDB",hN=/^[^\s.,*>]+$/,lu="__request__",SN=a(e=>`${e}.${lu}`,"REQUEST_SUBJECT"),TN={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},fN={HUB:"hub.pid",LEAF:"leaf.pid"},RN={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},mN={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:va,deliver_subject:"__HDB__.WORKQUEUE"},AN={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:va,deliver_subject:"HDB.SCHEMAQUEUE"},ON={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:va,deliver_subject:"HDB.USERQUEUE"},NN={SUCCESS:"success",ERROR:"error"},gN={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pN={TXN:"txn",MSGID:"msgid"};du.exports={NATS_SERVER_ZIP:lN,NATS_SERVER_NAME:Ha,NATS_BINARY_NAME:dN,PID_FILES:fN,NATS_CONFIG_FILES:TN,SERVER_SUFFIX:RN,WORK_QUEUE_CONSUMER_NAMES:mN,SCHEMA_QUEUE_CONSUMER_NAMES:AN,USER_QUEUE_CONSUMER_NAMES:ON,NATS_TERM_CONSTRAINTS_RX:hN,REQUEST_SUFFIX:lu,UPDATE_REMOTE_RESPONSE_STATUSES:NN,CLUSTER_STATUS_STATUSES:gN,REQUEST_SUBJECT:SN,SUBJECT_PREFIXES:pN}});var ns=d((OB,fu)=>{"use strict";var ss=require("crypto"),Su="aes-256-cbc",IN=32,CN=16,Ga=64,Tu=32,bN=Ga+Tu,hu=new Map;fu.exports={encrypt:LN,decrypt:wN,createNatsTableStreamName:yN};function LN(e){let t=ss.randomBytes(IN),r=ss.randomBytes(CN),s=ss.createCipheriv(Su,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(LN,"encrypt");function wN(e){let t=e.substr(0,Ga),r=e.substr(Ga,Tu),s=e.substr(bN,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ss.createDecipheriv(Su,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wN,"decrypt");function yN(e,t){let r=`${e}.${t}`,s=hu.get(r);return s||(s=ss.createHash("md5").update(`${e}.${t}`).digest("hex"),hu.set(r,s)),s}a(yN,"createNatsTableStreamName")});var qa=d((NB,Ru)=>{"use strict";var dn=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(dn,"BridgeMethods");Ru.exports=dn});var kt=d((IB,Nu)=>{"use strict";var mu=Ne().LMDB_ERRORS_ENUM,gB=require("lmdb"),UN=Se(),pB=require("buffer").Buffer,DN=require("microtime"),{OVERFLOW_MARKER:Au,MAX_SEARCH_KEY_LENGTH:hn}=UN,Ou=["number","string","symbol","boolean","bigint"];function MN(e){if(!e)throw new Error(mu.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(mu.INVALID_ENVIRONMENT)}a(MN,"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 BN(e){return e instanceof Date?e.valueOf():e}a(BN,"convertKeyValueToWrite");function HN(e){if(e==null)return;if(Ou.includes(typeof e))return e.length>hn?[e.slice(0,hn)+Au]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Ou.includes(typeof n)&&(n.length>hn?t.push(n.slice(0,hn)+Au):t.push(n))}}return t}a(HN,"getIndexedValues");function vN(){let e=DN.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(vN,"getMicroTime");Nu.exports={validateEnv:MN,stringifyData:PN,convertKeyValueToWrite:BN,getMicroTime:vN,getIndexedValues:HN}});var pu=d((CB,gu)=>{"use strict";var Sn=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Sn,"DBIDefinition");gu.exports=Sn});var Cu=d((bB,Iu)=>{"use strict";var Tn=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(Tn,"OpenDBIObject");Iu.exports=Tn});var Lu=d((LB,bu)=>{"use strict";var fn=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(fn,"OpenEnvironmentObject");bu.exports=fn});var G=d((yB,Fu)=>{"use strict";var Fa=require("lmdb"),ve=require("fs-extra"),Qe=require("path"),mn=kt(),wu=g(),oe=Ne().LMDB_ERRORS_ENUM,An=pu(),xa=Cu(),yu=Lu(),Ct=Se(),wB=f(),is=Z();is.initSync();var Uu=is.get("STORAGE_WRITEASYNC")===!0||is.get("STORAGE_WRITEASYNC")==="true"||is.get("STORAGE_WRITEASYNC")==="TRUE",Du=is.get("STORAGE_OVERLAPPINGSYNC"),Mu=1024*1024*1024,Pu=1e4,Bu=1e3,Je=Ct.INTERNAL_DBIS_NAME,Hu=Ct.DBI_DEFINITION_NAME,GN="data.mdb",qN="lock.mdb",as=".mdb",FN="-lock",Rn=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 Fa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Rn,"TransactionCursor");function Va(e,t){if(e===void 0)throw new Error(oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(oe.ENV_NAME_REQUIRED)}a(Va,"pathEnvNameValidation");async function ka(e,t,r=!0){try{await ve.access(e)}catch(s){throw s.code==="ENOENT"?new Error(oe.INVALID_BASE_PATH):s}try{let s=Qe.join(e,t+as);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,GN),ve.constants.R_OK|ve.constants.F_OK),Qe.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(oe.INVALID_ENVIRONMENT)}else throw new Error(oe.INVALID_ENVIRONMENT);throw s}}a(ka,"validateEnvironmentPath");function On(e,t){if(mn.validateEnv(e),t===void 0)throw new Error(oe.DBI_NAME_REQUIRED)}a(On,"validateEnvDBIName");async function xN(e,t,r=!1,s=!1){Va(e,t),t=t.toString();try{return await ka(e,t,s),$a(e,t,r)}catch(n){if(n.message===oe.INVALID_ENVIRONMENT){let i=Qe.join(e,t);await ve.mkdirp(s?i:e);let o=new yu(s?i:i+as,Mu,Pu,Bu,!1,Uu,Du),_=Fa.open(o);_.dbis=Object.create(null);let c=new xa(!1);_.openDB(Je,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Ya(e,t,r);return _[Ct.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(xN,"createEnvironment");async function VN(e,t,r,s=!0){let n=await $a(e,t);if(r===void 0)throw new Error(oe.DESTINATION_PATH_REQUIRED);try{await ve.access(Qe.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(VN,"copyEnvironment");async function $a(e,t,r=!1){Va(e,t),t=t.toString();let s=Ya(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 ka(e,t),i=Qe.join(e,t+as),o=n!=i,_=new yu(n,Mu,Pu,Bu,o,Uu,Du),c=Fa.open(_);c.dbis=Object.create(null);let u=Gu(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($a,"openEnvironment");async function kN(e,t,r=!1){Va(e,t),t=t.toString();let s=Qe.join(e,t+as),n=await ka(e,t);if(global.lmdb_map!==void 0){let i=Ya(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await vu(o),delete global.lmdb_map[i]}}await ve.remove(n),await ve.remove(n===s?n+FN:Qe.join(Qe.dirname(n),qN))}a(kN,"deleteEnvironment");async function vu(e){mn.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(vu,"closeEnvironment");function Ya(e,t,r=!1){let n=`${Qe.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ya,"getCachedEnvironmentName");function $N(e){mn.validateEnv(e);let t=Object.create(null),r=Ge(e,Je);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Je)try{t[s]=Object.assign(new An,n)}catch{wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a($N,"listDBIDefinitions");function Gu(e){mn.validateEnv(e);let t=[],r=Ge(e,Je);for(let{key:s}of r.getRange({start:!1}))s!==Je&&t.push(s);return t}a(Gu,"listDBIs");function YN(e,t){let s=Ge(e,Je).getEntry(t),n=new An;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{wu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(YN,"getDBIDefinition");function qu(e,t,r,s=!1){if(On(e,t),t=t.toString(),t===Je)throw new Error(oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ge(e,t)}catch(n){if(n.message===oe.DBI_DOES_NOT_EXIST){let i=new xa(r,s===!0),o=e.openDB(t,i),_=new An(r===!0,s);return o[Hu]=_,Ge(e,Je).putSync(t,_),e.dbis[t]=o,o}throw n}}a(qu,"createDBI");function Ge(e,t){if(On(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Je?r=YN(e,t):r=new An,r===void 0)throw new Error(oe.DBI_DOES_NOT_EXIST);let s;try{let n=new xa(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(oe.DBI_DOES_NOT_EXIST):n}return s[Hu]=r,e.dbis[t]=s,s}a(Ge,"openDBI");function KN(e,t){On(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(KN,"statDBI");async function WN(e,t){try{let r=Qe.join(e,t+as);return(await ve.stat(r)).size}catch{throw new Error(oe.INVALID_ENVIRONMENT)}}a(WN,"environmentDataSize");function QN(e,t){if(On(e,t),t=t.toString(),t===Je)throw new Error(oe.CANNOT_DROP_INTERNAL_DBIS_NAME);Ge(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ge(e,Je).removeSync(t)}a(QN,"dropDBI");function JN(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===oe.DBI_DOES_NOT_EXIST)qu(e,n,n!==t,n===t);else throw i}}}a(JN,"initializeDBIs");Fu.exports={openDBI:Ge,openEnvironment:$a,createEnvironment:xN,listDBIs:Gu,listDBIDefinitions:$N,createDBI:qu,dropDBI:QN,statDBI:KN,deleteEnvironment:kN,initializeDBIs:JN,TransactionCursor:Rn,environmentDataSize:WN,copyEnvironment:VN,closeEnvironment:vu}});var Vu=d((UB,xu)=>{"use strict";var Nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Nn,"InsertRecordsResponseObject");xu.exports=Nn});var $u=d((DB,ku)=>{"use strict";var gn=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(gn,"UpdateRecordsResponseObject");ku.exports=gn});var Ku=d((MB,Yu)=>{"use strict";var pn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(pn,"UpsertRecordsResponseObject");Yu.exports=pn});var Tr=d((vB,Qu)=>{"use strict";var XN=G(),ZN=Vu(),zN=$u(),jN=Ku(),_s=kt(),os=Ne().LMDB_ERRORS_ENUM,eg=Se(),bt=f(),tg=p(),rg=require("uuid"),PB=require("lmdb"),{handleHDBError:sg,hdb_errors:ng}=Y(),{OVERFLOW_MARKER:BB,MAX_SEARCH_KEY_LENGTH:HB}=eg,Ka=bt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$t=bt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ig(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new ZN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Wu(u,!0,n);let E=ag(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Qa(o,_,s,i)}a(ig,"insertRecords");function ag(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=_s.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[$t])})}a(ag,"insertRecord");function og(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(og,"removeSkippedRecords");function Wu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[$t]))&&(e[$t]=s),t===!0?(r===!0||!Number.isInteger(e[Ka]))&&(e[Ka]=s):delete e[Ka]}a(Wu,"setTimestamps");function Wa(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),XN.initializeDBIs(e,t,r)}a(Wa,"initializeTransaction");async function _g(e,t,r,s,n=!0){Xa(e,t,r,s),Wa(e,t,r);let i=new zN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],T;try{T=Ja(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(T),c.push(l)}return Qa(_,c,s,i,o)}a(_g,"updateRecords");async function cg(e,t,r,s,n=!0){try{Xa(e,t,r,s)}catch(c){throw sg(c,c.message,ng.HTTP_STATUS_CODES.BAD_REQUEST)}Wa(e,t,r);let i=new jN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;tg.isEmpty(u[t])?(E=rg.v4(),u[t]=E):E=u[t];let l=Ja(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Qa(o,_,s,i)}a(cg,"upsertRecords");async function Qa(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=_s.getMicroTime(),og(r,n),s}a(Qa,"finalizeWrite");function Ja(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(Wu(r,!E,o),Number.isInteger(r[$t])&&u[$t]>r[$t])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 O=r[A],I=e.dbis[A];if(I===void 0)continue;let X=u[A];if(typeof O=="function"){let W=O([[u]]);Array.isArray(W)&&(O=W[0][bt.FUNC_VAL],r[A]=O)}if(O===X)continue;let v=_s.getIndexedValues(X);if(v)for(let W=0,$e=v.length;W<$e;W++)I.remove(v[W],s);if(v=_s.getIndexedValues(O),v)for(let W=0,$e=v.length;W<$e;W++)I.put(v[W],s)}let h=Object.assign({},u,r);_.put(s,h,h[$t])},"do_put");return c?l=_.ifVersion(s,c.version,T):l=_.ifNoExists(s,T),l.then(h=>h?!0:Ja(e,t,r,s,n,i,o))}a(Ja,"updateUpsertRecord");function ug(e,t,r){if(_s.validateEnv(e),t===void 0)throw new Error(os.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(os.WRITE_ATTRIBUTES_REQUIRED):new Error(os.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ug,"validateBasic");function Xa(e,t,r,s){if(ug(e,t,r),!Array.isArray(s))throw s===void 0?new Error(os.RECORDS_REQUIRED):new Error(os.RECORDS_MUST_BE_ARRAY)}a(Xa,"validateWrite");Qu.exports={insertRecords:ig,updateRecords:_g,upsertRecords:cg}});var V=d((GB,Xu)=>{"use strict";var Za=f(),fr=Z(),za=require("path");fr.initSync();var In,Cn,bn;function Ju(){if(In!==void 0)return In;if(fr.getHdbBasePath()!==void 0)return In=za.join(fr.getHdbBasePath(),Za.SCHEMA_DIR_NAME),In}a(Ju,"getBaseSchemaPath");function Eg(){if(Cn!==void 0)return Cn;if(fr.getHdbBasePath()!==void 0)return Cn=za.join(Ju(),Za.SYSTEM_SCHEMA_NAME),Cn}a(Eg,"getSystemSchemaPath");function lg(){if(bn!==void 0)return bn;if(fr.getHdbBasePath()!==void 0)return bn=za.join(fr.getHdbBasePath(),Za.TRANSACTIONS_DIR_NAME),bn}a(lg,"getTransactionAuditStorePath");Xu.exports={getBaseSchemaPath:Ju,getSystemSchemaPath:Eg,getTransactionAuditStorePath:lg}});var Yt=d((qB,dg)=>{dg.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 Rr=d((FB,ju)=>{"use strict";var zu=p(),Zu=f(),wn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ja=require("joi"),Ln={schema_format:{pattern:wn,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},hg=ja.alternatives(ja.string().min(1).max(Ln.schema_length.maximum).pattern(wn).messages({"string.pattern.base":"{:#label} "+Ln.schema_format.message}),ja.number()).required();function Sg(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ln.schema_length.maximum?`'${e}' maximum of 250 characters`:wn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Sg,"checkValidTable");function Tg(e,t){return zu.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Tg,"validateSchemaExists");function fg(e,t){let r=t.state.ancestors[0].schema;return zu.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(fg,"validateTableExists");function Rg(e,t){return e.toLowerCase()===Zu.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Zu.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Rg,"validateSchemaName");ju.exports={common_validators:Ln,schema_regex:wn,hdb_schema_table:hg,validateSchemaExists:Tg,validateTableExists:fg,validateSchemaName:Rg,checkValidTable:Sg}});var yn=d((xB,eE)=>{var{common_validators:Lt}=Rr(),cs=Ke(),Xe="is required",q={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 us(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(us,"makeAttributesStrings");function mg(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence=!1,q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(mg,"schema_object");function Ag(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(Ag,"table_object");function Og(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence={message:Xe},cs.validateObject(e,q)}a(Og,"create_table_object");function Ng(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence={message:Xe},q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(Ng,"attribute_object");function gg(e){return e=us(e),q.schema.presence={message:Xe},q.table.presence={message:Xe},q.attribute.presence=!1,q.hash_attribute.presence=!1,cs.validateObject(e,q)}a(gg,"describe_table");function pg(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(pg,"validateTableResidence");eE.exports={schema_object:mg,create_table_object:Og,table_object:Ag,attribute_object:Ng,describe_table:gg,validateTableResidence:pg}});var rE=d((VB,tE)=>{"use strict";var Ig=require("uuid"),Un=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Ig.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Un,"CreateAttributeObject");tE.exports=Un});var Mn=d((kB,sE)=>{"use strict";var Cg=rE(),Dn=class extends Cg{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Dn,"LMDBCreateAttributeObject");sE.exports=Dn});var iE=d(($B,nE)=>{"use strict";nE.exports=Lg;var bg="inserted";function Lg(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===bg?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Lg,"returnObject")});var Pn=d((YB,oE)=>{"use strict";var wg=f(),eo=G(),yg=Tr(),{getSystemSchemaPath:Ug,getBaseSchemaPath:Dg}=V(),Mg=require("path"),Pg=Yt(),Bg=yn(),Hg=Mn(),vg=iE(),{handleHDBError:Gg,hdb_errors:qg}=Y(),Fg=p(),to=Pg.hdb_attribute,aE=[];for(let e=0;e<to.attributes.length;e++)aE.push(to.attributes[e].attribute);var xg="inserted";oE.exports=Vg;async function Vg(e){let t=Bg.attribute_object(e);if(t)throw Gg(new Error,t.message,qg.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 Hg(e.schema,e.table,e.attribute,e.id);try{let n=await eo.openEnvironment(Mg.join(Dg(),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}`);eo.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await eo.openEnvironment(Ug(),wg.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await yg.insertRecords(i,to.hash_attribute,aE,[s]);return vg(xg,o,{records:[s]},_)}catch(n){throw n}}a(Vg,"lmdbCreateAttribute")});var so=d((KB,cE)=>{var{hdb_schema_table:_E}=Rr(),kg=Ke(),ro=require("joi"),$g={undefined:"undefined",null:"null"},Yg=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||$g[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"),Kg=ro.object({schema:_E,table:_E,records:ro.array().items(ro.object().custom(Yg)).required()});cE.exports=function(e){return kg.validateBySchema(e,Kg)}});var Bn=d((QB,EE)=>{"use strict";var dt=p(),uE=g(),WB=so();EE.exports=Wg;function Wg(e){if(dt.isEmpty(e))throw new Error("invalid update parameters defined.");if(dt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(dt.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(dt.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&&dt.isEmptyOrZeroLength(o[r]))throw uE.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(!dt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw uE.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`);!dt.isEmpty(o[r])&&o[r]!==""&&s.has(dt.autoCast(o[r]))&&(o.skip=!0),s.add(dt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Wg,"insertUpdateValidate")});var vn=d((JB,lE)=>{"use strict";var Qg=f().OPERATIONS_ENUM,Hn=class{constructor(t,r,s,n,i=void 0){this.operation=Qg.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Hn,"InsertObject");lE.exports=Hn});var qn=d((ZB,dE)=>{"use strict";var XB=vn(),Gn=f(),io=p(),no=g(),Jg=require("uuid"),{handleHDBError:Es,hdb_errors:Xg}=Y(),{HDB_ERROR_MSGS:ls,HTTP_STATUS_CODES:ds}=Xg;dE.exports=Zg;function Zg(e,t,r){for(let n=0;n<t.length;n++)zg(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];jg(i,r,e.operation)}}a(Zg,"processRows");function zg(e){if(Buffer.byteLength(String(e))>Gn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Es(new Error,ls.ATTR_NAME_LENGTH_ERR(e),ds.BAD_REQUEST,void 0,void 0,!0);if(io.isEmptyOrZeroLength(e)||io.isEmpty(e.trim()))throw Es(new Error,ls.ATTR_NAME_NULLISH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}a(zg,"validateAttribute");function jg(e,t,r){if(!e.hasOwnProperty(t)||io.isEmptyOrZeroLength(e[t])){if(r===Gn.OPERATIONS_ENUM.INSERT||r===Gn.OPERATIONS_ENUM.UPSERT){e[t]=Jg.v4();return}throw no.error("Update transaction aborted due to record with no hash value:",e),Es(new Error,ls.RECORD_MISSING_HASH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Gn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw no.error(e),Es(new Error,ls.HASH_VAL_LENGTH_ERR,ds.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw no.error(e),Es(new Error,ls.INVALID_FORWARD_SLASH_IN_HASH_ERR,ds.BAD_REQUEST,void 0,void 0,!0)}a(jg,"validateHash")});var SE=d((zB,hE)=>{"use strict";var Fn=class{constructor(t,r){this.type=t,this.message=r}};a(Fn,"IPCEventObject");hE.exports=Fn});var Kt=d((jB,TE)=>{"use strict";var ep=g(),ao=p(),tp=f(),{IPC_ERRORS:hs}=Ne();TE.exports={sendIpcEvent:rp,validateEvent:sp,SchemaEventMsg:np,UserEventMsg:ip};function rp(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):ep.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(rp,"sendIpcEvent");function sp(e){if(typeof e!="object")return hs.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||ao.isEmpty(e.type))return hs.MISSING_TYPE;if(!e.hasOwnProperty("message")||ao.isEmpty(e.message))return hs.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ao.isEmpty(e.message.originator))return hs.MISSING_ORIGIN;if(tp.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hs.INVALID_EVENT(e.type)}a(sp,"validateEvent");function np(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(np,"SchemaEventMsg");function ip(e){this.originator=e}a(ip,"UserEventMsg")});var Ss=d((tH,AE)=>{"use strict";var fE=f(),eH=p(),xn=g(),RE=SE(),{sendIpcEvent:mE}=Kt();function ap(e){try{xn.trace("signalSchemaChange called with message:",e);let t=new RE(fE.IPC_EVENT_TYPES.SCHEMA,e);mE(t)}catch(t){xn.error(t)}}a(ap,"signalSchemaChange");function op(e){try{xn.trace("signalUserChange called with message:",e);let t=new RE(fE.IPC_EVENT_TYPES.USER,e);mE(t)}catch(t){xn.error(t)}}a(op,"signalUserChange");AE.exports={signalSchemaChange:ap,signalUserChange:op}});var Vn=d((rH,NE)=>{"use strict";var OE=p(),_p=f(),cp=g(),up=Pn(),Ep=Mn(),lp=Ss(),{SchemaEventMsg:dp}=Kt(),hp="already exists in";NE.exports=Sp;async function Sp(e,t,r){try{if(OE.isEmptyOrZeroLength(r))return r;let s=[];OE.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 Tp(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(Sp,"lmdbCheckForNewAttributes");async function Tp(e,t,r,s){let n=new Ep(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await fp(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hp))cp.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(Tp,"createNewAttribute");async function fp(e){let t;try{return t=await up(e),lp.signalSchemaChange(new dp(process.pid,_p.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(fp,"createAttribute")});var mr=d((sH,gE)=>{"use strict";var kn=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(kn,"LMDBTransactionObject");gE.exports=kn});var IE=d((nH,pE)=>{"use strict";var Rp=mr(),mp=f().OPERATIONS_ENUM,$n=class extends Rp{constructor(t,r,s,n,i=void 0){super(mp.INSERT,r,s,n,i),this.records=t}};a($n,"LMDBInsertTransactionObject");pE.exports=$n});var bE=d((iH,CE)=>{"use strict";var Ap=mr(),Op=f().OPERATIONS_ENUM,Yn=class extends Ap{constructor(t,r,s,n,i,o=void 0){super(Op.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Yn,"LMDBUpdateTransactionObject");CE.exports=Yn});var wE=d((aH,LE)=>{"use strict";var Np=mr(),gp=f().OPERATIONS_ENUM,Kn=class extends Np{constructor(t,r,s,n,i,o=void 0){super(gp.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Kn,"LMDBUpsertTransactionObject");LE.exports=Kn});var UE=d((oH,yE)=>{"use strict";var pp=mr(),Ip=f().OPERATIONS_ENUM,Wn=class extends pp{constructor(t,r,s,n,i=void 0){super(Ip.DELETE,s,n,t,i),this.original_records=r}};a(Wn,"LMDBDeleteTransactionObject");yE.exports=Wn});var Ts=d((_H,BE)=>{"use strict";var Cp=require("path"),DE=G(),bp=IE(),Lp=bE(),wp=wE(),yp=UE(),Ar=Se(),ME=p(),{CONFIG_PARAMS:Up}=f(),PE=Z();PE.initSync();var Qn=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:Dp}=V();BE.exports=Mp;async function Mp(e,t){if(PE.get(Up.LOGGING_AUDITLOG)===!1)return;let r=Cp.join(Dp(),e.schema.toString()),s=await DE.openEnvironment(r,e.table,!0),n=Pp(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){DE.initializeDBIs(s,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ar.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),ME.isEmpty(n.user_name)||s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(Mp,"writeTransaction");function Pp(e,t){let r=ME.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Qn.INSERT)return new bp(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.UPDATE)return new Lp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.UPSERT)return new wp(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Qn.DELETE)return new yp(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Pp,"createTransactionObject")});var oo=d((uH,HE)=>{"use strict";var Bp=Bn(),cH=vn(),Or=f(),Hp=qn(),vp=Tr().insertRecords,Gp=G(),qp=require("path"),Fp=g(),xp=Vn(),{getBaseSchemaPath:Vp}=V(),kp=Ts();HE.exports=$p;async function $p(e){try{let{schema_table:t,attributes:r}=Bp(e);Hp(e,r,t.hash_attribute),e.schema!==Or.SYSTEM_SCHEMA_NAME&&(r.includes(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xp(e.hdb_auth_header,t,r),n=qp.join(Vp(),e.schema.toString()),i=await Gp.openEnvironment(n,e.table),o=await vp(i,t.hash_attribute,r,e.records,e[Or.CLUSTERING_FLAG]!==!0);try{await kp(e,o)}catch(_){Fp.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($p,"lmdbCreateRecords")});var qE=d((EH,GE)=>{"use strict";var vE=f(),Yp=oo(),Kp=vn(),Wp=require("fs-extra"),Qp=require("path"),{getBaseSchemaPath:Jp}=V();GE.exports=Xp;async function Xp(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Kp(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Yp(r),await Wp.mkdirp(Qp.join(Jp(),e.schema.toString()))}a(Xp,"lmdbCreateSchema")});var xE=d((lH,FE)=>{"use strict";var Jn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Jn,"DeleteRecordsResponseObject");FE.exports=Jn});var uo=d((TH,$E)=>{"use strict";var VE=G(),_o=kt(),co=Ne().LMDB_ERRORS_ENUM,Zp=Se(),kE=g(),dH=p(),zp=require("lmdb"),jp=xE(),{OVERFLOW_MARKER:hH,MAX_SEARCH_KEY_LENGTH:SH}=Zp;async function eI(e,t,r){if(_o.validateEnv(e),t===void 0)throw new Error(co.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(co.IDS_REQUIRED):new Error(co.IDS_MUST_BE_ARRAY);try{let s=VE.listDBIs(e);VE.initializeDBIs(e,t,s);let n=new jp,i,o=[],_=[];for(let l=0,T=r.length;l<T;l++)try{i=r[l];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,zp.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let O=0;O<s.length;O++){let I=s[O];if(!h.hasOwnProperty(I)||I===t)continue;let X=e.dbis[I],v=h[I];if(v!=null)try{let W=_o.getIndexedValues(v);if(W)for(let $e=0,Js=W.length;$e<Js;$e++)X.remove(W[$e],i)}catch{kE.warn(`cannot delete from attribute: ${I}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(h)}catch(h){kE.warn(h),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=_o.getMicroTime(),n}catch(s){throw s}}a(eI,"deleteRecords");$E.exports={deleteRecords:eI}});var fs=d((fH,KE)=>{"use strict";var Nr=p(),tI=uo(),rI=G(),sI=require("path"),{getBaseSchemaPath:nI}=V(),iI=Ts(),aI=g();KE.exports=oI;async function oI(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Nr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Nr.isEmptyOrZeroLength(e.hash_values)&&!Nr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Nr.isEmpty(c)||e.hash_values.push(c)}}if(Nr.isEmptyOrZeroLength(e.hash_values))return YE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Nr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=sI.join(nI(),e.schema.toString()),i=await rI.openEnvironment(n,e.table),o=await tI.deleteRecords(i,s,e.hash_values);try{t===!0&&await iI(e,o)}catch(_){aI.error(`unable to write transaction due to ${_.message}`)}return YE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(oI,"lmdbDeleteRecords");function YE(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(YE,"createDeleteResponse")});var lo=d((mH,WE)=>{"use strict";var _I=f(),RH=kt();function Eo(e,t){let r=Object.create(null);if(t.length===1&&_I.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(Eo,"parseRow");function cI(e,t,r,s){let n=Eo(r,e);s.push(n)}a(cI,"searchAll");function uI(e,t,r,s){let n=Eo(r,e);s[t]=n}a(uI,"searchAllToMap");function EI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(EI,"iterateDBI");function Wt(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(Wt,"pushResults");function lI(e,t,r,s,n,i){t.toString().endsWith(e)&&Wt(t,r,s,n,i)}a(lI,"endsWith");function dI(e,t,r,s,n,i){t.toString().includes(e)&&Wt(t,r,s,n,i)}a(dI,"contains");function hI(e,t,r,s,n,i){t>e&&Wt(t,r,s,n,i)}a(hI,"greaterThanCompare");function SI(e,t,r,s,n,i){t>=e&&Wt(t,r,s,n,i)}a(SI,"greaterThanEqualCompare");function TI(e,t,r,s,n,i){t<e&&Wt(t,r,s,n,i)}a(TI,"lessThanCompare");function fI(e,t,r,s,n,i){t<=e&&Wt(t,r,s,n,i)}a(fI,"lessThanEqualCompare");WE.exports={parseRow:Eo,searchAll:cI,searchAllToMap:uI,iterateDBI:EI,endsWith:lI,contains:dI,greaterThanCompare:hI,greaterThanEqualCompare:SI,lessThanCompare:TI,lessThanEqualCompare:fI,pushResults:Wt}});var gr=d((NH,jE)=>{"use strict";var qe=G(),RI=g(),Me=kt(),wt=Se(),Q=Ne().LMDB_ERRORS_ENUM,AH=p(),mI=f(),Ze=lo(),OH=require("lmdb"),{OVERFLOW_MARKER:QE,MAX_SEARCH_KEY_LENGTH:AI}=wt,Rs={lazy:!0};function JE(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=ho(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(JE,"iterateFullIndex");function ms(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=qe.openDBI(e,r),T=ho(e,t,r);l[wt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,A=i===!0?n:s,O=i===!0?!c:!u,I=i===!0?u:c;for(let{key:X,value:v}of l.getRange({start:A,end:h,reverse:i,limit:o,offset:_,inclusiveEnd:O,exclusiveStart:I}))Ze.pushResults(T(X,v),v,E,t,r);return E}a(ms,"iterateRangeBetween");function ho(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(QE)){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,Rs)[r]}return n}}a(ho,"getOverflowCheck");function OI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);Xn(r),r=As(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(OI,"searchAll");function NI(e,t,r,s=!1,n=void 0,i=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return Xn(r),r=As(e,r),JE(e,t,t,Ze.searchAllToMap.bind(null,r),s,n,i)}a(NI,"searchAllToMap");function gI(e,t,r=!1,s=void 0,n=void 0){if(Me.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);return JE(e,void 0,t,Ze.iterateDBI,r,s,n)}a(gI,"iterateDBI");function pI(e,t){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);return qe.statDBI(e,t).entryCount}a(pI,"countAll");function II(e,t,r,s,n=!1,i=void 0,o=void 0){yt(e,r,s);let _=qe.openDBI(e,r);s=Me.convertKeyValueToWrite(s);let c=[[],[]];if(_[wt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Rs);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(II,"equals");function CI(e,t,r){return yt(e,t,r),qe.openDBI(e,t).getValuesCount(r)}a(CI,"count");function bI(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=Me.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(bI,"startsWith");function LI(e,t,r,s,n=!1,i=void 0,o=void 0){return XE(e,t,r,s,n,i,o,!0)}a(LI,"endsWith");function XE(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=ho(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 h=T.toString();if(h.endsWith(QE))for(let A of u.getValues(T)){let O=E(T,A);(_?O.endsWith(s):O.includes(s))&&l(O,A)}else if(_?h.endsWith(s):h.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,h){if(o>0){o--;return}i!==0&&(Ze.pushResults(T,h,c,t,r),i--)}return a(l,"found_match"),c}a(XE,"contains");function wI(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),ms(e,t,r,s,c,n,i,o,!0,!1)}a(wI,"greaterThan");function yI(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),ms(e,t,r,s,c,n,i,o,!1,!1)}a(yI,"greaterThanEqual");function UI(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),ms(e,t,r,c,s,n,i,o,!1,!0)}a(UI,"lessThan");function DI(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),ms(e,t,r,c,s,n,i,o,!1,!1)}a(DI,"lessThanEqual");function MI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Me.validateEnv(e),r===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Q.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Q.END_VALUE_REQUIRED);if(s=Me.convertKeyValueToWrite(s),n=Me.convertKeyValueToWrite(n),s>n)throw new Error(Q.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ms(e,t,r,s,n,i,o,_)}a(MI,"between");function PI(e,t,r,s){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(Xn(r),r=As(e,r),s===void 0)throw new Error(Q.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Rs:void 0);return i&&(n=Ze.parseRow(i,r)),n}a(PI,"searchByHash");function BI(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Rs)===void 0&&(s=!1),s}a(BI,"checkHashExists");function HI(e,t,r,s,n=[]){zE(e,t,r,s,n);let i=ZE(e,t,r,s,n);return Object.values(i)}a(HI,"batchSearchByHash");function vI(e,t,r,s,n=[]){return zE(e,t,r,s,n),ZE(e,t,r,s,n)}a(vI,"batchSearchByHashToMap");function ZE(e,t,r,s,n=[]){r=As(e,r);let i=Object.create(null),o=r.length<3?Rs: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 RI.warn(u),u}}return i}a(ZE,"batchHashSearch");function zE(e,t,r,s,n){if(Me.validateEnv(e),t===void 0)throw new Error(Q.HASH_ATTRIBUTE_REQUIRED);if(Xn(r),!Array.isArray(s))throw s===void 0?new Error(Q.IDS_REQUIRED):new Error(Q.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(zE,"initializeBatchSearchByHash");function Xn(e){if(!Array.isArray(e))throw e===void 0?new Error(Q.FETCH_ATTRIBUTES_REQUIRED):new Error(Q.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Xn,"validateFetchAttributes");function yt(e,t,r){if(Me.validateEnv(e),t===void 0)throw new Error(Q.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Q.SEARCH_VALUE_REQUIRED);if(r?.length>AI)throw new Error(Q.SEARCH_VALUE_TOO_LARGE)}a(yt,"validateComparisonFunctions");function As(e,t){return t.length===1&&mI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qe.listDBIs(e)),t}a(As,"setGetWholeRowAttributes");jE.exports={searchAll:OI,searchAllToMap:NI,count:CI,countAll:pI,equals:II,startsWith:bI,endsWith:LI,contains:XE,searchByHash:PI,setGetWholeRowAttributes:As,batchSearchByHash:HI,batchSearchByHashToMap:vI,checkHashExists:BI,iterateDBI:gI,greaterThan:wI,greaterThanEqual:yI,lessThan:UI,lessThanEqual:DI,between:MI}});var Os=d((pH,sl)=>{var el=require("lodash"),tl=Ke(),B=require("joi"),GI=p(),{hdb_schema_table:ze,checkValidTable:rl}=Rr(),{handleHDBError:qI,hdb_errors:FI}=Y(),{HTTP_STATUS_CODES:xI}=FI,gH=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()}),VI=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)}),kI=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()});sl.exports=function(e,t){let r=null;switch(t){case"value":r=tl.validateBySchema(e,VI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rl("schema",e.schema)),i(rl("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=tl.validateBySchema(e,kI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=GI.checkGlobalSchemaTable(e.schema,e.table);if(n)return qI(new Error,n,xI.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=el.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!el.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 So=d((IH,nl)=>{"use strict";var $I=G(),YI=Os(),KI=require("path"),{getBaseSchemaPath:WI}=V();nl.exports=QI;function QI(e){let t=YI(e,"hashes");if(t)throw t;let r=KI.join(WI(),e.schema.toString());return $I.openEnvironment(r,e.table)}a(QI,"initialize")});var To=d((CH,il)=>{"use strict";var JI=gr(),XI=So();il.exports=ZI;async function ZI(e){try{let t=await XI(e),r=global.hdb_schema[e.schema][e.table];return JI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(ZI,"lmdbGetDataByHash")});var Ns=d((bH,al)=>{"use strict";var Zn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Zn,"SearchByHashObject");al.exports=Zn});var _l=d((wH,ol)=>{"use strict";var LH=Ns(),zI=gr(),jI=So();ol.exports=eC;async function eC(e){try{let t=await jI(e),r=global.hdb_schema[e.schema][e.table];return zI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(eC,"lmdbSearchByHash")});var ht=d((yH,cl)=>{"use strict";var zn=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(zn,"SearchObject");cl.exports=zn});var jn=d((UH,hl)=>{"use strict";var fe=gr(),tC=G(),rC=require("path"),sC=p(),N=Se(),Qt=f(),{getBaseSchemaPath:nC}=V(),iC=Yt(),ul=Ne().LMDB_ERRORS_ENUM,{compareKeys:pr}=require("ordered-binary"),St=Qt.SEARCH_WILDCARDS;async function aC(e,t,r){let s;e.schema===Qt.SYSTEM_SCHEMA_NAME?s=iC[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dl(e,s.hash_attribute,r,t);return El(e,n,s.hash_attribute,r)}a(aC,"prepSearch");async function El(e,t,r,s){let n=rC.join(nC(),e.schema.toString()),i=await tC.openEnvironment(n,e.table),o=ll(i,e,t,r);if([N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,N.SEARCH_TYPES.SEARCH_ALL,N.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(cC(e,r)===!1)return s===!0?_C(o):o[1];let c=o[0];return s===!0?fe.batchSearchByHashToMap(i,r,e.get_attributes,c):fe.batchSearchByHash(i,r,e.get_attributes,c)}a(El,"executeSearch");function ll(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 N.SEARCH_TYPES.EQUALS:n=fe.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.CONTAINS:n=fe.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.ENDS_WITH:case N.SEARCH_TYPES._ENDS_WITH:n=fe.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.STARTS_WITH:case N.SEARCH_TYPES._STARTS_WITH:n=fe.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return fe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return fe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case N.SEARCH_TYPES.SEARCH_ALL:return fe.searchAll(e,s,t.get_attributes,o,_,c);case N.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return fe.searchAllToMap(e,s,t.get_attributes,o,_,c);case N.SEARCH_TYPES.BETWEEN:n=fe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case N.SEARCH_TYPES.GREATER_THAN:case N.SEARCH_TYPES._GREATER_THAN:n=fe.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.GREATER_THAN_EQUAL:case N.SEARCH_TYPES._GREATER_THAN_EQUAL:n=fe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.LESS_THAN:case N.SEARCH_TYPES._LESS_THAN:n=fe.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case N.SEARCH_TYPES.LESS_THAN_EQUAL:case N.SEARCH_TYPES._LESS_THAN_EQUAL:n=fe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(ll,"searchByType");function oC(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case N.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case N.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case N.SEARCH_TYPES.ENDS_WITH:case N.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case N.SEARCH_TYPES.STARTS_WITH:case N.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case N.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return pr(i,s[0])>=0&&pr(i,s[1])<=0};case N.SEARCH_TYPES.GREATER_THAN:case N.SEARCH_TYPES._GREATER_THAN:return n=>pr(n[r],s)>0;case N.SEARCH_TYPES.GREATER_THAN_EQUAL:case N.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>pr(n[r],s)>=0;case N.SEARCH_TYPES.LESS_THAN:case N.SEARCH_TYPES._LESS_THAN:return n=>pr(n[r],s)<0;case N.SEARCH_TYPES.LESS_THAN_EQUAL:case N.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>pr(n[r],s)<=0;default:return Object.create(null)}}a(oC,"filterByType");function _C(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(_C,"createMapFromArrays");function cC(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(cC,"checkToFetchMore");function dl(e,t,r,s){if(sC.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),St.indexOf(n)>-1)return r===!0?N.SEARCH_TYPES.SEARCH_ALL_TO_MAP:N.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(St[0])<0&&n.indexOf(St[1])<0)return _===!0?r===!0?N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:N.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:N.SEARCH_TYPES.EQUALS;if(St.indexOf(i)>=0&&St.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),N.SEARCH_TYPES.CONTAINS;if(St.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),N.SEARCH_TYPES.ENDS_WITH;if(St.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),N.SEARCH_TYPES.STARTS_WITH;if(n.includes(St[0])||n.includes(St[1]))return N.SEARCH_TYPES.EQUALS;throw new Error(ul.UNKNOWN_SEARCH_TYPE)}else switch(s){case Qt.VALUE_SEARCH_COMPARATORS.BETWEEN:return N.SEARCH_TYPES.BETWEEN;case Qt.VALUE_SEARCH_COMPARATORS.GREATER:return N.SEARCH_TYPES.GREATER_THAN;case Qt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return N.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qt.VALUE_SEARCH_COMPARATORS.LESS:return N.SEARCH_TYPES.LESS_THAN;case Qt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return N.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ul.UNKNOWN_SEARCH_TYPE)}}a(dl,"createSearchTypeFromSearchObject");hl.exports={executeSearch:El,createSearchTypeFromSearchObject:dl,prepSearch:aC,searchByType:ll,filterByType:oC}});var Tl=d((MH,Sl)=>{"use strict";var DH=ht(),uC=Os(),EC=p(),lC=f(),dC=jn();Sl.exports=hC;async function hC(e,t){if(!EC.isEmpty(t)&&lC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=uC(e,"value");if(s)throw s;let n=!0;try{return await dC.prepSearch(e,t,n)}catch(i){throw i}}a(hC,"lmdbGetDataByValue")});var Ir=d((BH,fl)=>{"use strict";var PH=ht(),SC=Os(),TC=p(),fC=f(),RC=jn();fl.exports=mC;async function mC(e,t){if(!TC.isEmpty(t)&&fC.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=SC(e,"value");if(s)throw s;let n=!1;try{return await RC.prepSearch(e,t,n)}catch(i){throw i}}a(mC,"lmdbSearchByValue")});var ml=d((vH,Rl)=>{"use strict";var HH=Se(),ei=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(ei,"SearchByConditionsObject");var ti=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(ti,"SearchCondition");var ri=class{constructor(t,r){this.attribute=t,this.desc=r}};a(ri,"SortAttribute");Rl.exports={SearchByConditionsObject:ei,SearchCondition:ti,SortAttribute:ri}});var Il=d((qH,pl)=>{"use strict";var GH=ml().SearchByConditionsObject,AC=ht(),OC=Os(),fo=gr(),si=Se(),gl=jn(),NC=lo(),Al=require("lodash"),{getBaseSchemaPath:gC}=V(),pC=require("path"),IC=G(),{handleHDBError:Ol,hdb_errors:CC}=Y(),{HTTP_STATUS_CODES:bC}=CC,LC=1e8,wC={lazy:!0};pl.exports=yC;async function yC(e){try{let t=OC(e,"conditions");if(t)throw Ol(t,t.message,bC.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=pC.join(gC(),e.schema.toString()),s=await IC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=Al.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===si.SEARCH_TYPES.EQUALS?o.estimated_count=fo.count(s,o.search_attribute,o.search_value):_===si.SEARCH_TYPES.CONTAINS||_===si.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=LC}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await Nl(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(gl.filterByType),u=c.length,E=[],l=fo.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let A of o){let O=_.get(A,wC);for(let I=0;I<u;I++)if(!c[I](O))continue e;if(T>0){T--;continue}if(h<=0)break;h--,E.push(NC.parseRow(O,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await Nl(s,e,c,n.hash_attribute);_.push(u)}if(o=Al.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return fo.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw Ol(t)}}a(yC,"lmdbSearchByConditions");async function Nl(e,t,r,s){let n=new AC(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===si.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,gl.searchByType(e,n,i,s)}a(Nl,"executeConditionSearch")});var gs=d((FH,Cl)=>{"use strict";var UC=f().OPERATIONS_ENUM,ni=class{constructor(t,r,s,n=void 0){this.operation=UC.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(ni,"DeleteObject");Cl.exports=ni});var Ro=d((xH,bl)=>{"use strict";var ii=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(ii,"DropAttributeObject");bl.exports=ii});var Ao=d((kH,Ll)=>{"use strict";var DC=ht(),MC=gs(),VH=Ro(),nt=f(),PC=p(),mo=G(),BC=Yt(),HC=Ir(),vC=fs(),{getBaseSchemaPath:GC}=V(),qC=require("path");Ll.exports=FC;async function FC(e,t=!0){let r;e.schema===nt.SYSTEM_SCHEMA_NAME?r=BC[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await VC(e),n=qC.join(GC(),e.schema.toString()),i=await mo.openEnvironment(n,e.table);return t===!0&&await xC(e,i,r.hash_attribute),mo.dropDBI(i,e.attribute),s}a(FC,"lmdbDropAttribute");async function xC(e,t,r){let s=mo.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(xC,"removeAttributeFromAllObjects");async function VC(e){let t=new DC(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await HC(t)).filter(o=>o[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(PC.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[nt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new MC(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return vC(i)}a(VC,"dropAttributeFromSystem")});var Dl=d(($H,Ul)=>{"use strict";var kC=Ao(),$C=Ro(),wl=p(),yl=g(),YC=Ne().LMDB_ERRORS_ENUM;Ul.exports=KC;async function KC(e){if(wl.isEmpty(global.hdb_schema[e.schema])||wl.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 $C(e.schema,e.table,r);try{await kC(n,!1)}catch(i){i.message!==YC.DBI_DOES_NOT_EXIST&&yl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw yl.error(`Error dropping attribute ${r}`),s}}a(KC,"lmdbDropAllAttributes")});var Oo=d((KH,xl)=>{"use strict";var vl=ht(),Gl=gs(),ql=Ir(),Fl=fs(),YH=Dl(),Ie=f(),Ml=p(),Pl=G(),{getBaseSchemaPath:WC,getTransactionAuditStorePath:QC}=V(),Bl=require("path"),Hl=g();xl.exports=JC;async function JC(e){try{if(Ml.isEmpty(global.hdb_schema[e.schema])||Ml.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await XC(e),await ZC(e);let t=Bl.join(WC(),e.schema.toString());try{await Pl.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Hl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Bl.join(QC(),e.schema.toString());await Pl.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Hl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(JC,"lmdbDropTable");async function XC(e){let t=new vl(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 ql(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 Gl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Fl(n)}a(XC,"deleteAttributesFromSystem");async function ZC(e){let t=new vl(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 ql(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 Gl(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Fl(n)}catch(i){throw i}}a(ZC,"dropTableFromSystem")});var kl=d((QH,Vl)=>{"use strict";var zC=require("fs-extra"),jC=ht(),eb=Ns(),tb=gs(),rb=Oo(),sb=fs(),nb=To(),ib=Ir(),Tt=f(),WH=p(),ab=require("path"),{getBaseSchemaPath:ob}=V(),{handleHDBError:_b,hdb_errors:cb}=Y(),{HDB_ERROR_MSGS:ub,HTTP_STATUS_CODES:Eb}=cb;Vl.exports=lb;async function lb(e){let t;try{t=await db(e.schema);let r=new jC(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await ib(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await rb(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new tb(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await sb(n);let i=ab.join(ob(),t.toString());await zC.remove(i)}catch(r){throw r}}a(lb,"lmdbDropSchema");async function db(e){let t=new eb(Tt.SYSTEM_SCHEMA_NAME,Tt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Tt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await nb(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw _b(new Error,ub.SCHEMA_NOT_FOUND(e),Eb.NOT_FOUND,void 0,void 0,!0);return s}a(db,"validateDropSchema")});var No=d((JH,$l)=>{"use strict";var ai=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(ai,"CreateTableObject");$l.exports=ai});var Kl=d((ZH,Yl)=>{"use strict";var hb=require("path"),Sb=require("fs-extra"),oi=G(),{getTransactionAuditStorePath:Tb}=V(),go=Se(),XH=No();Yl.exports=fb;async function fb(e){let t;try{let r=hb.join(Tb(),e.schema.toString());await Sb.mkdirp(r),t=await oi.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{oi.createDBI(t,go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),oi.createDBI(t,go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),oi.createDBI(t,go.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(fb,"createTransactionsAuditEnvironment")});var Xl=d((zH,Jl)=>{"use strict";var po=f(),Wl=G(),Rb=Tr(),mb=require("path"),{getSystemSchemaPath:Ab,getBaseSchemaPath:Ob}=V(),Nb=Yt(),gb=Pn(),Io=Mn(),pb=g(),Ib=Kl(),bo=Nb.hdb_table,Ql=[];for(let e=0;e<bo.attributes.length;e++)Ql.push(bo.attributes[e].attribute);Jl.exports=Cb;async function Cb(e,t){let r=mb.join(Ob(),t.schema.toString()),s=new Io(t.schema,t.table,po.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Io(t.schema,t.table,po.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Io(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Wl.createEnvironment(r,t.table),e!==void 0){let o=await Wl.openEnvironment(Ab(),po.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Rb.insertRecords(o,bo.hash_attribute,Ql,[e]),await Co(s),await Co(n),await Co(i)}await Ib(t)}catch(o){throw o}}a(Cb,"lmdbCreateTable");async function Co(e){try{await gb(e)}catch(t){pb.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Co,"createAttribute")});var zl=d((jH,Zl)=>{"use strict";var bb=Bn(),Lb=qn(),wb=Vn(),Cr=f(),yb=Tr().updateRecords,Ub=G(),Db=require("path"),{getBaseSchemaPath:Mb}=V(),Pb=Ts(),Bb=g();Zl.exports=Hb;async function Hb(e){try{let{schema_table:t,attributes:r}=bb(e);Lb(e,r,t.hash_attribute),e.schema!==Cr.SYSTEM_SCHEMA_NAME&&(r.includes(Cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await wb(e.hdb_auth_header,t,r),n=Db.join(Mb(),e.schema.toString()),i=await Ub.openEnvironment(n,e.table),o=await yb(i,t.hash_attribute,r,e.records,e[Cr.CLUSTERING_FLAG]!==!0);try{await Pb(e,o)}catch(_){Bb.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(Hb,"lmdbUpdateRecords")});var ed=d((ev,jl)=>{"use strict";var vb=f().OPERATIONS_ENUM,_i=class{constructor(t,r,s,n=void 0){this.operation=vb.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(_i,"UpsertObject");jl.exports=_i});var rd=d((rv,td)=>{"use strict";var tv=ed(),Gb=Bn(),qb=qn(),Fb=Vn(),br=f(),xb=Tr().upsertRecords,Vb=G(),kb=require("path"),{getBaseSchemaPath:$b}=V(),Yb=Ts(),Kb=g(),{handleHDBError:Wb,hdb_errors:Qb}=Y();td.exports=Jb;async function Jb(e){let t;try{t=Gb(e)}catch(c){throw Wb(c,c.message,Qb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;qb(e,s,r.hash_attribute),e.schema!==br.SYSTEM_SCHEMA_NAME&&(s.includes(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(br.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Fb(e.hdb_auth_header,r,s),i=kb.join($b(),e.schema.toString()),o=await Vb.openEnvironment(i,e.table),_=await xb(o,r.hash_attribute,s,e.records,e[br.CLUSTERING_FLAG]!==!0);try{await Yb(e,_)}catch(c){Kb.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(Jb,"lmdbUpsertRecords")});var _d=d((sv,od)=>{"use strict";var Xb=ht(),sd=p(),nd=g(),Zb=Ir(),id=f(),zb=uo().deleteRecords,jb=G(),eL=require("path"),{getBaseSchemaPath:tL}=V(),{promisify:rL}=require("util"),sL=rL(setTimeout),ad=1e4,nL=10;od.exports=iL;async function iL(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(sd.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 Xb(e.schema,e.table,id.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Zb(n,id.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw nd.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return sd.isEmptyOrZeroLength(s)?(nd.trace("No records found to delete"),{message:"No records found to delete"}):await aL(e,s,t)}a(iL,"lmdbDeleteRecordsBefore");async function aL(e,t,r){let s=eL.join(tL(),e.schema.toString()),n=await jb.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=ad){let c=t.slice(o,o+ad),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await zb(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 sL(nL)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(aL,"chunkDeletes")});var ud=d((nv,cd)=>{"use strict";var ci=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ci,"DeleteBeforeObject");cd.exports=ci});var ld=d((iv,Ed)=>{"use strict";var ui=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ui,"DeleteAuditLogsBeforeResults");Ed.exports=ui});var Sd=d((ov,hd)=>{"use strict";var Lo=G(),{getTransactionAuditStorePath:oL}=V(),av=ud(),_L=require("path"),ps=Se(),cL=p(),dd=ld(),uL=require("util").promisify,EL=uL(setTimeout),lL=1e4,dL=100;hd.exports=hL;async function hL(e){let t=_L.join(oL(),e.schema),r=await Lo.openEnvironment(t,e.table,!0),s=Lo.listDBIs(r);Lo.initializeDBIs(r,ps.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new dd;do n=await SL(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 EL(dL);while(n.transactions_deleted>0);return i}a(hL,"deleteAuditLogsBefore");async function SL(e,t){let r=new dd;try{let s=e.dbis[ps.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[ps.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];cL.isEmpty(_)||(n=e.dbis[ps.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ps.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>lL)break}return await n,r}catch(s){throw s}}a(SL,"deleteTransactions")});var Nd=d((_v,Od)=>{"use strict";var wo=G(),Lr=Se(),Td=kt(),yo=f(),fd=p(),{getTransactionAuditStorePath:TL}=V(),fL=require("path"),RL=gr(),Ei=mr(),mL=g();Od.exports=AL;async function AL(e){let t=fL.join(TL(),e.schema),r=await wo.openEnvironment(t,e.table,!0),s=wo.listDBIs(r);wo.initializeDBIs(r,Lr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Rd(r,e.search_values);case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,NL(r,e.search_values,n);case yo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return OL(r,e.search_values);default:return Rd(r)}}a(AL,"readAuditLog");function Rd(e,t=[0,Td.getMicroTime()]){fd.isEmpty(t[0])&&(t[0]=0),fd.isEmpty(t[1])&&(t[1]=Td.getMicroTime());let r=[];try{let s=e.dbis[Lr.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 Ei,i);r.push(o)}return r}catch(s){throw s}}a(Rd,"searchTransactionsByTimestamp");function OL(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[Lr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Ad(e,i))}return Object.fromEntries(r)}a(OL,"searchTransactionsByUsername");function NL(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=RL.equals(e,Lr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Lr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,T=E[0].length;l<T;l++){let h=E[0][l],A=Number(h);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=Ad(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);md(c,"records",r,E,o),md(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(NL,"searchTransactionsByHashValues");function md(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 Ei(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Ei(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(md,"loopRecords");function Ad(e,t){let r=[];try{let s=e.dbis[Lr.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 Ei,i);r.push(o)}}catch(i){mL.warn(i)}return r}catch(s){throw s}}a(Ad,"batchSearchTransactions")});var pd=d((cv,gd)=>{"use strict";var gL=require("path"),{getBaseSchemaPath:pL}=V(),IL=G();gd.exports={writeTransaction:CL};async function CL(e,t,r){let s=gL.join(pL(),e);return(await IL.openEnvironment(s,t)).transaction(r)}a(CL,"writeTransaction")});var Cd=d((uv,Id)=>{"use strict";var bL=require("path"),{getBaseSchemaPath:LL}=V(),wL=G();Id.exports={flush:yL};async function yL(e,t){let r=bL.join(LL(),e.toString());return(await wL.openEnvironment(r,t.toString())).flushed}a(yL,"flush")});var Ld=d((Ev,bd)=>{"use strict";var ee=g(),{handleHDBError:UL}=Y(),DL=qa(),ML=Pn(),PL=oo(),BL=qE(),HL=fs(),vL=To(),GL=_l(),qL=Tl(),FL=Ir(),xL=Il(),VL=kl(),kL=Xl(),$L=zl(),YL=rd(),KL=_d(),WL=Sd(),QL=Oo(),JL=Ao(),XL=Nd(),ZL=pd(),zL=Cd(),li=class extends DL{async searchByConditions(t){try{return xL(t)}catch(r){throw ee.error(r),r}}async getDataByHash(t){try{return await vL(t)}catch(r){throw ee.error(r),r}}async searchByHash(t){try{return await GL(t)}catch(r){throw ee.error(r),r}}async getDataByValue(t,r){try{return await qL(t,r)}catch(s){throw ee.error(s),s}}async searchByValue(t){try{return await FL(t)}catch(r){throw ee.error(r),r}}async createSchema(t){try{return await BL(t)}catch(r){throw ee.error(r),r}}async dropSchema(t){try{return await VL(t)}catch(r){throw ee.error(r),r}}async createTable(t,r){try{return await kL(t,r)}catch(s){throw ee.error(s),s}}async dropTable(t){try{return await QL(t)}catch(r){throw ee.error(r),r}}async createAttribute(t){try{return await ML(t)}catch(r){throw ee.error(r),r}}async createRecords(t){try{return await PL(t)}catch(r){throw ee.error(r),r}}async updateRecords(t){try{return await $L(t)}catch(r){throw ee.error(r),r}}async upsertRecords(t){try{return await YL(t)}catch(r){throw UL(r,null,null,ee.ERR,r)}}async deleteRecords(t){try{return await HL(t)}catch(r){throw ee.error(r),r}}async deleteRecordsBefore(t){try{return await KL(t)}catch(r){throw ee.error(r),r}}async dropAttribute(t){try{return await JL(t)}catch(r){throw ee.error(r),r}}async deleteAuditLogsBefore(t){try{return await WL(t)}catch(r){throw ee.error(r),r}}async readAuditLog(t){try{return await XL(t)}catch(r){throw ee.error(r),r}}writeTransaction(t,r,s){return ZL.writeTransaction(t,r,s)}flush(t,r){return zL.flush(t,r)}};a(li,"LMDBBridge");bd.exports=li});var Jt=d((lv,yd)=>{"use strict";var jL=Ld(),ew=qa(),tw=Z();tw.initSync();var wd;function rw(){return wd instanceof ew?wd:new jL}a(rw,"getBridge");yd.exports=rw()});var Dd=d((dv,Ud)=>{"use strict";var sw=Jt();Ud.exports={writeTransaction:nw};function nw(e,t,r){return sw.writeTransaction(e,t,r)}a(nw,"writeTransaction")});var Yd=d((Sv,$d)=>{"use strict";var Uo=require("recursive-iterator"),iw=require("alasql"),Do=require("clone"),Md=p(),{handleHDBError:Pd,hdb_errors:aw}=Y(),{HDB_ERROR_MSGS:Bd,HTTP_STATUS_CODES:Hd}=aw,ow=["DISTINCT_ARRAY"],vd=Symbol("validateTables"),Mo=Symbol("validateTable"),hv=Symbol("getAllColumns"),Gd=Symbol("validateAllColumns"),di=Symbol("findColumn"),qd=Symbol("validateOrderBy"),Is=Symbol("validateSegment"),Po=Symbol("validateColumn"),Fd=Symbol("setColumnsForTable"),xd=Symbol("checkColumnsForAsterisk"),Vd=Symbol("validateGroupBy"),kd=Symbol("hasColumns"),hi=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[vd](),this[xd](),this[Gd]()}[vd](){if(this[kd]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mo](t.table)})}}[kd](){let t=!1,r=new Uo(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Mo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Pd(new Error,Bd.SCHEMA_NOT_FOUND(t.databaseid),Hd.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Pd(new Error,Bd.TABLE_NOT_FOUND(t.databaseid,t.tableid),Hd.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Do(s);n.table=Do(t),this.attributes.push(n)})}[di](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)}[xd](){let t=new Uo(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Fd](r.tableid)}[Fd](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new iw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Gd](){this[Is](this.statement.columns,!1),this[Is](this.statement.joins,!1),this[Is](this.statement.where,!1),this[Vd](this.statement.group,!1),this[Is](this.statement.order,!0)}[Is](t,r){if(!t)return;let s=new Uo(t),n=[];for(let{node:i,path:o}of s)!Md.isEmpty(i)&&!Md.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[qd](i):n.push(this[Po](i)));return n}[Vd](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&ow.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Do(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[di](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[di](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`}[qd](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[Po](t)}[Po](t){let r=this[di](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(hi,"SelectValidator");$d.exports=hi});var Jd=d((Tv,Qd)=>{"use strict";var Kd=require("lodash"),Cs=require("mathjs"),_w=require("jsonata"),Wd=p();Qd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Kd.uniqWith(e,Kd.isEqual):e,searchJSON:cw,mad:bs.bind(null,Cs.mad),mean:bs.bind(null,Cs.mean),mode:bs.bind(null,Cs.mode),prod:bs.bind(null,Cs.prod),median:bs.bind(null,Cs.median)};function bs(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(bs,"aggregateFunction");function cw(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(Wd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Wd.isEmpty(this.__ala__.res[r])){let s=_w(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(cw,"searchJSON")});var Zd=d((fv,Xd)=>{"use strict";var z=require("moment"),Bo="YYYY-MM-DDTHH:mm:ss.SSSZZ";z.suppressDeprecationWarnings=!0;Xd.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(Bo),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(Bo),offset_utc:(e,t)=>z(e).utc().utcOffset(t).format(Bo)}});var th=d((Rv,eh)=>{"use strict";var uw=require("@turf/area"),Ew=require("@turf/length"),lw=require("@turf/circle"),dw=require("@turf/difference"),hw=require("@turf/distance"),Sw=require("@turf/boolean-contains"),Tw=require("@turf/boolean-equal"),fw=require("@turf/boolean-disjoint"),Rw=require("@turf/helpers"),zd=f(),D=p();eh.exports={geoArea:mw,geoLength:Aw,geoCircle:Ow,geoDifference:Nw,geoDistance:jd,geoNear:gw,geoContains:pw,geoEqual:Iw,geoCrosses:Cw,geoConvert:bw};var Ho="geo1 is required",vo="geo2 is required";function mw(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),uw.default(e)}a(mw,"geoArea");function Aw(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Ew.default(e,{units:t||"kilometers"})}a(Aw,"geoLength");function Ow(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)),lw.default(e,t,{units:r||"kilometers"})}a(Ow,"geoCircle");function Nw(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)),dw(e,t)}a(Nw,"geoDifference");function jd(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)),hw.default(e,t,{units:r||"kilometers"})}a(jd,"geoDistance");function gw(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 jd(e,t,s)<=r}a(gw,"geoNear");function pw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Sw.default(e,t)}a(pw,"geoContains");function Iw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Tw.default(e,t)}a(Iw,"geoEqual");function Cw(e,t){if(D.isEmpty(e))throw new Error(Ho);if(D.isEmpty(e))throw new Error(vo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!fw.default(e,t)}a(Cw,"geoCrosses");function bw(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(zd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zd.GEO_CONVERSION_ENUM).join(",")}`);return Rw[t](e,r)}a(bw,"geoConvert")});var sh=d((mv,rh)=>{var Xt=Jd(),Pe=Zd(),it=th();rh.exports=e=>{e.aggr.mad=e.aggr.MAD=Xt.mad,e.aggr.mean=e.aggr.MEAN=Xt.mean,e.aggr.mode=e.aggr.MODE=Xt.mode,e.aggr.prod=e.aggr.PROD=Xt.prod,e.aggr.median=e.aggr.MEDIAN=Xt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pe.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pe.current_time,e.fn.extract=e.fn.EXTRACT=Pe.extract,e.fn.date=e.fn.DATE=Pe.date,e.fn.date_format=e.fn.DATE_FORMAT=Pe.date_format,e.fn.date_add=e.fn.DATE_ADD=Pe.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pe.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pe.date_diff,e.fn.now=e.fn.NOW=Pe.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pe.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pe.get_server_time,e.fn.getdate=e.fn.GETDATE=Pe.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pe.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=it.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=it.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=it.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=it.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=it.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=it.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=it.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=it.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=it.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=it.geoNear}});var ah=d((Av,ih)=>{"use strict";var Ls=require("lodash"),_e=require("alasql");_e.options.cache=!1;var Lw=sh(),nh=require("clone"),Si=require("recursive-iterator"),L=g(),y=p(),wr=Jt(),ww=f(),{hdb_errors:yw}=Y(),Uw="IS NULL",ws="There was a problem performing this search. Please check the logs and try again.";Lw(_e);var Ti=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(ws)}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(ws)}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(ws)}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(ws)}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(ws)}}_getColumns(){let t=new Si(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(nh(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ls.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 Si(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 _e.yy.LogicValue({value:s}):r.right instanceof _e.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new _e.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 _e.yy.LogicValue({value:i}):s instanceof _e.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new _e.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 Si(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(ww.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&&Ls.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 _e.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(nh(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(Uw)>-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=Ls.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 wr.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 wr.getDataByValue(l);for(let h in T)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[h][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(h)))}))}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 h=E[l];_.search_attribute=h.attribute,_.search_value=h.search_value;let A=await wr.getDataByValue(_,h.operation);if(c)for(let O in A)this.data[i].__merged_data[O]||(this.data[i].__merged_data[O]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(O)));else for(let O in A)this.data[i].__merged_data[O]?this._updateMergedAttribute(i,O,n.attribute,A[O][n.attribute]):(this.data[i].__merged_data[O]=[...s[i]],this._updateMergedAttribute(i,O,n.attribute,A[O][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(O)))}}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 wr.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 _e.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 _e.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new _e.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 _e.yy.FuncValue:new _e.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let A=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(A+=" ON "+h.on.toString()),i.push(A),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(h=>{let A=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,O=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${O}.${A}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${A}\` AS "${O}.${A}"`),_[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let 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 h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(h,n);T=await _e.promise(A,t),t=null}catch(h){throw L.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),L.error(h),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let h=0,A=T.length;h<A;h++){let O=T[h];o.forEach(I=>{O[I.key]!==null&&O[I.key]!==void 0&&I.keys.add(O[I.key])})}o.forEach(h=>{let A=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),O=Ls.difference(A,[...h.keys].map(I=>I.toString()));for(let I=0,X=O.length;I<X;I++){let v=O[I];delete this.data[`${h.schema}_${h.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 Si(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=Ls.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 wr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let T=o[E],h=c[T];for(let A=0;A<u;A++){let O=n.columns[A],I=h[O]===void 0?null:h[O];this.data[s].__merged_data[T].push(I)}}}}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 _e.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(yw.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 wr.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(Ti,"SQLSearch");ih.exports=Ti});var ys=d((Ov,_h)=>{"use strict";var Dw=Yd();_h.exports={searchByConditions:Hw,searchByHash:vw,searchByValue:Gw,search:qw};var Go=Jt(),oh=require("util"),Mw=oh.callbackify(Go.searchByHash),Pw=oh.callbackify(Go.searchByValue),Bw=ah();async function Hw(e){return Go.searchByConditions(e)}a(Hw,"searchByConditions");function vw(e,t){try{Mw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(vw,"searchByHash");function Gw(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Pw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(Gw,"searchByValue");function qw(e,t){try{let r=new Dw(e);r.validate(),new Bw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(qw,"search")});var Ur=d((Nv,Sh)=>{"use strict";var uh=ys(),Ut=g(),Eh=yn(),Fw=require("lodash"),xw=require("path"),Vw=ns(),qo=p(),{promisify:lh}=require("util"),F=f(),{handleHDBError:fi,hdb_errors:kw}=Y(),{HDB_ERROR_MSGS:Ri,HTTP_STATUS_CODES:dh}=kw,$w=Z();$w.initSync();var ch=G(),Yw=V(),Us=lh(uh.searchByValue),Kw=lh(uh.searchByHash),yr="name",hh="hash_attribute",Fo="schema",Ww="schema_table",Qw="attribute";Sh.exports={describeAll:Jw,describeTable:mi,describeSchema:Zw};async function Jw(e){try{let t=qo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:yr,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[yr]},i=await Us(n);if(qo.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:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:F.ID_ATTRIBUTE_STRING,search_value:F.WILDCARD_SEARCH_VALUE,get_attributes:[hh,F.ID_ATTRIBUTE_STRING,yr,Fo]},u=await Us(c),E=[];for(let T of u)try{let h;if(t||s)h=await mi({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;h=await mi({schema:T.schema,table:T.name},A)}h&&E.push(h)}catch(h){Ut.error(h)}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),fi(new Error,Ri.DESCRIBE_ALL_ERR)}}a(Jw,"describeAll");async function mi(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=Eh.describe_table(e);if(o)throw o;if(r===F.SYSTEM_SCHEMA_NAME)return global.hdb_schema[F.SYSTEM_SCHEMA_NAME][s];let _={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:yr,search_value:s,hash_values:[],get_attributes:[F.WILDCARD_SEARCH_VALUE]},c=await Us(_);if(!c||c.length===0)throw fi(new Error,Ri.TABLE_NOT_FOUND(e.schema,e.table),dh.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw fi(new Error,Ri.INVALID_TABLE_ERR(i));let E={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Ww,search_value:r+"."+s,get_attributes:[Qw]},l=await Us(E);l=Fw.uniqBy(l,T=>T.attribute),n&&n.length>0&&(l=Xw(n)),i.attributes=l,i.clustering_stream_name=Vw.createNatsTableStreamName(u.schema,u.name);try{let T=xw.join(Yw.getBaseSchemaPath(),i.schema.toString()),h=await ch.openEnvironment(T,i.name),A=ch.statDBI(h,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(mi,"descTable");function Xw(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Xw,"getAttrsByPerms");async function Zw(e){let t=Eh.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:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Fo,search_value:s,hash_values:[],get_attributes:[hh,F.ID_ATTRIBUTE_STRING,yr,Fo]},i=await Us(n);if(i&&i.length<1){let o={schema:F.SYSTEM_SCHEMA_NAME,table:F.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:F.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[yr]},_=await Kw(o);if(_&&_.length<1)throw fi(new Error,Ri.SCHEMA_NOT_FOUND(e.schema),dh.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]),qo.isEmpty(c)||c.describe){let u=await mi({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(Zw,"describeSchema")});var Ds=d((Iv,Ah)=>{var gv=require("async"),Dr=Yt(),pv=g(),{callbackify:Rh,promisify:zw}=require("util");Ah.exports={setSchemaDataToGlobal:Th,getTableSchema:ty,getSystemSchema:sy,setSchemaDataToGlobalAsync:zw(Th)};var mh=Ur(),jw=Rh(mh.describeAll),ey=Rh(mh.describeTable);function Th(e){jw(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Dr),global.hdb_schema=r,e(null,null)})}a(Th,"setSchemaDataToGlobal");function fh(e,t){return e==="system"?Dr[t]:global.hdb_schema[e][t]}a(fh,"returnSchema");function ty(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?ry(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,fh(e,t))}):r(null,fh(e,t))}a(ty,"getTableSchema");function ry(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Dr:global.hdb_schema={system:Dr},r();return}ey(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Dr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(ry,"setTableDataToGlobal");function sy(){return Dr}a(sy,"getSystemSchema")});var Ms=d((Cv,gh)=>{"use strict";var Oi=so(),Fe=p(),ny=require("util"),Ni=Jt(),iy=Ds(),xo=g(),{handleHDBError:Dt,hdb_errors:ay}=Y(),{HTTP_STATUS_CODES:Zt}=ay,oy=ny.promisify(iy.getTableSchema),_y="updated",Oh="inserted",Nh="upserted";gh.exports={insert:uy,update:Ey,upsert:ly,validation:cy,flush:dy};async function cy(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 oy(e.schema,e.table),r=Oi(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 xo.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 xo.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(cy,"validation");async function uy(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Oi(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 Ni.createRecords(e);return Ai(Oh,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(uy,"insertData");async function Ey(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Oi(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 Ni.updateRecords(e);return Fe.isEmpty(s.existing_rows)?Ai(_y,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ai(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Ey,"updateData");async function ly(e){if(e.operation!=="upsert")throw Dt(new Error,"invalid operation, must be upsert",Zt.INTERNAL_SERVER_ERROR);let t=Oi(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 Ni.upsertRecords(e);return Ai(Nh,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,xo.ERR,n)}}a(ly,"upsertData");function Ai(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===Oh?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Nh?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ai,"returnObject");function dy(e){return Ni.flush(e.schema,e.table)}a(dy,"flush")});var bh=d((bv,Ch)=>{var hy=Ke(),Vo=require("joi"),{hdb_schema_table:ph}=Rr(),Ih={schema:ph,table:ph},Sy={date:Vo.date().iso().required()},Ty={timestamp:Vo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ch.exports=function(e,t){let r=t==="timestamp"?{...Ih,...Ty}:{...Ih,...Sy},s=Vo.object(r);return hy.validateBySchema(e,s)}});var Uh=d((Lv,yh)=>{var fy=Ke(),Lh=require("joi"),{hdb_schema_table:wh}=Rr(),Ry=Lh.object({schema:wh,table:wh,hash_values:Lh.array().required()});yh.exports=function(e){return fy.validateBySchema(e,Ry)}});var Mh=d((wv,Dh)=>{"use strict";var gi=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(gi,"InsertObject");var pi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(pi,"NoSQLSeachObject");var Ii=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Ii,"DeleteResponseObject");Dh.exports={InsertObject:gi,NoSQLSeachObject:pi,DeleteResponseObject:Ii}});var Yo=d((yv,Gh)=>{"use strict";var Bh=bh(),my=Uh(),Ci=p(),Ph=require("moment"),Hh=g(),{promisify:Ay,callbackify:Oy}=require("util"),zt=f(),Ny=Ds(),ko=Ay(Ny.getTableSchema),$o=Jt(),{DeleteResponseObject:gy}=Mh(),{handleHDBError:Mt,hdb_errors:py}=Y(),{HDB_ERROR_MSGS:bi,HTTP_STATUS_CODES:Pt}=py,Iy="records successfully deleted",Cy=Oy(vh);Gh.exports={delete:Cy,deleteRecord:vh,deleteFilesBefore:by,deleteAuditLogsBefore:Ly};async function by(e){let t=Bh(e,"date");if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);if(!Ph(e.date,Ph.ISO_8601).isValid())throw Mt(new Error,bi.INVALID_DATE,Pt.BAD_REQUEST,zt.LOG_LEVELS.ERROR,bi.INVALID_DATE,!0);let s=Ci.checkSchemaTableExist(e.schema,e.table);if(s)throw Mt(new Error,s,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,s,!0);try{let n=await $o.deleteRecordsBefore(e);if(await ko(e.schema,e.table),Hh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(by,"deleteFilesBefore");async function Ly(e){let t=Bh(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,bi.INVALID_VALUE("Timestamp"),Pt.BAD_REQUEST,zt.LOG_LEVELS.ERROR,bi.INVALID_VALUE("Timestamp"),!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,r,!0);try{let s=await $o.deleteAuditLogsBefore(e);return await ko(e.schema,e.table),Hh.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Ly,"deleteAuditLogsBefore");async function vh(e){let t=my(e);if(t)throw Mt(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=Ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Pt.NOT_FOUND,zt.LOG_LEVELS.ERROR,r,!0);try{await ko(e.schema,e.table);let s=await $o.deleteRecords(e);return Ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Iy}`),s}catch(s){if(s.message===zt.SEARCH_NOT_FOUND_MESSAGE){let n=new gy;return n.message=zt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(vh,"deleteRecord")});var Li=d((Uv,xh)=>{var wy=require("crypto"),qh=9;function yy(e){let t=Dy(qh),r=Fh(e+t);return t+r}a(yy,"createHash");function Uy(e,t){let r=e.substr(0,qh),s=r+Fh(t+r);return e===s}a(Uy,"validateHash");function Dy(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(Dy,"generateSalt");function Fh(e){return wy.createHash("md5").update(e).digest("hex")}a(Fh,"md5");xh.exports={hash:yy,validate:Uy}});var kh=d((Dv,Vh)=>{var Ko=Ke(),Re={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 My(e){return Re.password.presence=!0,Re.username.presence=!0,Re.role.presence=!0,Re.active.presence=!0,Ko.validateObject(e,Re)}a(My,"addUserValidation");function Py(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Ko.validateObject(e,Re)}a(Py,"alterUserValidation");function By(e){return Re.password.presence=!1,Re.username.presence=!0,Re.role.presence=!1,Re.active.presence=!1,Ko.validateObject(e,Re)}a(By,"dropUserValidation");Vh.exports={addUserValidation:My,alterUserValidation:Py,dropUserValidation:By}});var Yh=d((Mv,$h)=>{"use strict";var Bt=f(),Ps=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(Ps,"BaseLicense");var wi=class extends Ps{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(wi,"ExtendedLicense");$h.exports={BaseLicense:Ps,ExtendedLicense:wi}});var Zo=d((Pv,Zh)=>{"use strict";var Pr=require("fs-extra"),Kh=Li(),Wh=require("crypto"),Hy=require("moment"),vy=require("uuid").v4,me=g(),Qo=require("path"),Gy=p(),Be=f(),qy=Yh().ExtendedLicense,Mr="invalid license key format",Fy="061183",xy="mofi25",Vy="aes-256-cbc",ky=16,$y=32,Qh=Z();Qh.initSync();var Wo;Zh.exports={validateLicense:Jh,generateFingerPrint:Ky,licenseSearch:Xh,getLicense:Jy};function Jo(){return Qo.join(Qh.getHdbBasePath(),Be.LICENSE_KEY_DIR_NAME,Be.LICENSE_FILE_NAME)}a(Jo,"getLicenseDirPath");function Yy(){let e=Jo();return Qo.join(e,Be.LICENSE_FILE_NAME)}a(Yy,"getLicenseFilePath");function Xo(){let e=Jo();return Qo.join(e,Be.REG_KEY_FILE_NAME)}a(Xo,"getFingerPrintFilePath");async function Ky(){let e=Xo();try{return await Pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Wy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}a(Ky,"generateFingerPrint");async function Wy(){let e=vy(),t=Kh.hash(e),r=Xo();try{await Pr.mkdirp(Jo()),await Pr.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(Wy,"writeFingerprint");function Jh(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Be.STORAGE_TYPES_ENUM.LMDB,api_call:Be.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Be.RAM_ALLOCATION_ENUM.DEFAULT,version:Be.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Xo(),n=!1;try{n=Pr.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Pr.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(xy),_=o[1];_=Buffer.concat([Buffer.from(_)],ky);let c=Buffer.concat([Buffer.from(i)],$y),u=Wh.createDecipheriv(Vy,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 h=Qy(o[0],i);if(h)E=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Mr),me.error(Mr),new Error(Mr)}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(Mr),me.error(Mr),new Error(Mr)}else r.exp_date=E;r.exp_date<Hy().valueOf()&&(r.valid_date=!1),Kh.validate(o[1],`${Fy}${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(Jh,"validateLicense");function Qy(e,t){try{let r=Wh.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(Qy,"checkOldLicense");function Xh(){let e=new qy;e.api_call=0;let t=[];try{t=Pr.readFileSync(Yy(),"utf-8").split(Be.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(Gy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Jh(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=Be.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Be.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Be.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Be.LICENSE_VALUES.API_CALL_DEFAULT),Wo=e,e}a(Xh,"licenseSearch");async function Jy(){return Wo||await Xh(),Wo}a(Jy,"getLicense")});var Hr=d((Bv,ES)=>{"use strict";var tS="username is required",rS="nothing to update, must supply active, role or password to update",sS="password cannot be an empty string",nS="If role is specified, it cannot be empty.",iS="active must be true or false";ES.exports={addUser:sU,alterUser:nU,dropUser:aU,userInfo:oU,listUsers:Ui,listUsersExternal:_U,setUsersToGlobal:Bs,findAndValidateUser:EU,getClusterUser:lU,USERNAME_REQUIRED:tS,ALTERUSER_NOTHING_TO_UPDATE:rS,EMPTY_PASSWORD:sS,EMPTY_ROLE:nS,ACTIVE_BOOLEAN:iS};var aS=Ms(),Xy=Yo(),jo=Li(),oS=kh(),_S=ys(),e_=Ss(),se=p(),cS=require("validate.js"),w=g(),{promisify:t_}=require("util"),r_=ns(),jt=f(),zh=De(),Zy=ts(),s_=Z(),zy=Zo(),jy=Yt(),{handleHDBError:at,hdb_errors:eU}=Y(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:zo,HDB_ERROR_MSGS:Br}=eU,{UserEventMsg:n_}=Kt(),jh=require("lodash"),uS={username:!0,active:!0,role:!0,password:!0},eS=new Map,yi=t_(_S.searchByValue),tU=t_(_S.searchByHash),rU=t_(Xy.delete);async function sU(e){let t=cS.cleanAttributes(e,uS),r=oS.addUserValidation(t);if(r)throw at(new Error,r.message,ot.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 yi(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 at(new Error,Br.ROLE_NAME_NOT_FOUND(t.role),ot.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw at(new Error,Br.DUP_ROLES_FOUND(t.role),ot.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=r_.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 aS.insert(i)}catch(u){throw w.error("There was an error searching for a user."),w.error(u),u}w.debug(o);try{await Bs()}catch(u){throw w.error("Got an error setting users to global"),w.error(u),u}if(o.skipped_hashes.length===1)throw at(new Error,Br.USER_ALREADY_EXISTS(t.username),ot.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.ADD_USER,c,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${_.username} successfully added`}a(sU,"addUser");async function nU(e){let t=cS.cleanAttributes(e,uS);if(se.isEmptyOrZeroLength(t.username))throw new Error(tS);if(se.isEmptyOrZeroLength(t.password)&&se.isEmptyOrZeroLength(t.role)&&se.isEmptyOrZeroLength(t.active))throw new Error(rS);if(!se.isEmpty(t.password)&&se.isEmptyOrZeroLength(t.password.trim()))throw new Error(sS);if(!se.isEmpty(t.active)&&!se.isBoolean(t.active))throw new Error(iS);let r=iU(t.username);if(!se.isEmpty(t.password)&&!se.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=r_.encrypt(t.password)),t.password=jo.hash(t.password)),t.role==="")throw new Error(nS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await yi(o)}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!_||_.length===0){let c=Br.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),at(new Error,c,ot.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Br.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),at(new Error,c,ot.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 aS.update(s)}catch(o){throw w.error("Error during update."),w.error(o),o}try{await Bs()}catch(o){throw w.error("Got an error setting users to global"),w.error(o),o}let i={user:null};return i.user=t,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.ALTER_USER,i,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),n}a(nU,"alterUser");function iU(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iU,"isClusterUser");async function aU(e){try{let t=oS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(se.isEmpty(global.hdb_users.get(e.username)))throw at(new Error,Br.USER_NOT_EXIST(e.username),ot.NOT_FOUND,void 0,void 0,!0);let s;try{s=await rU(r)}catch(i){throw w.error("Got an error deleting a user."),w.error(i),i}w.debug(s);try{await Bs()}catch(i){throw w.error("Got an error setting users to global."),w.error(i),i}let n={user:null};return n.user=e,se.sendTransactionToSocketCluster(jt.INTERNAL_SC_CHANNELS.DROP_USER,n,s_.get(jt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),e_.signalUserChange(new n_(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(aU,"dropUser");async function oU(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 tU(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(oU,"userInfo");async function _U(){let e;try{e=await Ui()}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(_U,"listUsersExternal");async function Ui(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=jh.cloneDeep(await yi(e))}catch(r){throw w.error("Got an error searching for roles."),w.error(r),r}if(!se.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=jh.cloneDeep(await yi(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],cU(_.role),i.set(_.username,_)}return(await zy.getLicense()).enterprise?i:uU(i)}}catch(e){throw w.error("got an error listing users"),w.error(e),se.errorizeMessage(e)}return null}a(Ui,"listUsers");function cU(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(jy)){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(cU,"appendSystemTablesToRole");function uU(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(uU,"nonEnterpriseFilter");async function Bs(){try{let e=await Ui();global.hdb_users=e}catch(e){throw w.error(e),e}}a(Bs,"setUsersToGlobal");async function EU(e,t,r=!0){global.hdb_users||await Bs();let s=global.hdb_users.get(e);if(!s)throw at(new Error,zo.GENERIC_AUTH_FAIL,ot.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw at(new Error,zo.USER_INACTIVE,ot.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(eS.get(t)===s.password)return n;if(jo.validate(s.password,t))eS.set(t,s.password);else throw at(new Error,zo.GENERIC_AUTH_FAIL,ot.UNAUTHORIZED,void 0,void 0,!0)}return n}a(EU,"findAndValidateUser");async function lU(){let e=await Ui(),t=Zy.getConfigFromFile(jt.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!se.isEmpty(r))return r.decrypt_hash=r_.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zh.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zh.SERVER_SUFFIX.ADMIN,r}a(lU,"getClusterUser")});var i_=d((Hv,dU)=>{dU.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 tr=d((Wv,US)=>{"use strict";var ft=Z();ft.initSync();var hU=require("fs-extra"),SU=require("semver"),Fs=require("path"),{monotonicFactory:TU}=require("ulidx"),fU=TU(),dS=require("util"),hS=require("child_process"),RU=dS.promisify(hS.exec),mU=hS.spawn,x=De(),K=f(),E_=p(),Rt=g(),Di=ns(),AU=Dd(),Hs=ts(),{encode:__,decode:SS}=require("msgpackr"),{isEmpty:er}=E_,TS=Hr(),vv=Ns(),OU=ys(),Gv=dS.promisify(OU.searchByHash),{connect:NU,StorageType:fS,RetentionPolicy:RS,AckPolicy:mS,DeliverPolicy:c_,NatsConnection:qv,JetStreamManager:Fv,JetStreamClient:xv,StringCodec:Vv,JSONCodec:gU,createInbox:l_,StreamSource:kv,headers:pU,toJsMsg:IU,nuid:$v,JetStreamOptions:Yv,ErrorCode:lS,nanos:Kv}=require("nats"),{PACKAGE_ROOT:CU}=f(),bU=i_(),AS=gU(),LU="clustering",wU=bU.engines[x.NATS_SERVER_NAME],yU=Fs.join(CU,"dependencies"),u_=Fs.join(yU,`${process.platform}-${process.arch}`,x.NATS_BINARY_NAME),a_,o_,vs,Gs,qs,je;US.exports={runCommand:OS,checkNATSServerInstalled:UU,createConnection:d_,getConnection:Mi,getJetStreamManager:vr,getJetStream:NS,getNATSReferences:xe,getServerList:MU,createLocalStream:h_,listStreams:gS,deleteLocalStream:PU,getServerConfig:xs,listRemoteStreams:BU,viewStream:HU,publishToStream:vU,createWorkQueueStream:GU,addSourceToWorkStream:pS,request:qU,removeSourceFromWorkStream:CS,reloadNATS:S_,reloadNATSHub:FU,reloadNATSLeaf:xU,extractServerName:IS,requestErrorHandler:VU,updateWorkStream:kU,createLocalTableStream:LS,createTableStreams:$U,purgeTableStream:wS,purgeSchemaTableStreams:YU,getStreamInfo:KU,updateNodeNameLocalStreams:WU,closeConnection:DU};async function OS(e,t=void 0){let{stdout:r,stderr:s}=await RU(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
7
|
`,"")}a(OS,"runCommand");async function UU(){try{await hU.access(u_)}catch{return!1}let e=await OS(`${u_} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return SU.eq(t,wU)}a(UU,"checkNATSServerInstalled");async function d_(e,t,r,s=!0,n="127.0.0.1"){return NU({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ft.get(K.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ft.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ft.get(K.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(d_,"createConnection");async function DU(){je&&(await je.close(),je=void 0)}a(DU,"closeConnection");async function Mi(){if(!je){let e=await TS.getClusterUser();if(er(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ft.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);je=await d_(t,e.username,e.decrypt_hash)}return je}a(Mi,"getConnection");async function vr(){if(Gs)return Gs;er(je)&&await Mi();let{domain:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(er(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gs=await je.jetstreamManager({domain:e}),Gs}a(vr,"getJetStreamManager");async function NS(){if(qs)return qs;er(je)&&await Mi();let{domain:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(er(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qs=je.jetstream({domain:e}),qs}a(NS,"getJetStream");async function xe(){let e=je||await Mi(),t=Gs||await vr(),r=qs||await NS();return{connection:e,jsm:t,js:r}}a(xe,"getNATSReferences");async function MU(){let e=ft.get(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await TS.getClusterUser(),s=await d_(e,t,r),n=l_(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(AS.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await E_.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(MU,"getServerList");async function h_(e,t){let{jsm:r}=await xe();await r.streams.add({name:e,storage:fS.File,retention:RS.Limits,subjects:t})}a(h_,"createLocalStream");async function gS(){let{jsm:e}=await xe(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(gS,"listStreams");async function PU(e){let{jsm:t}=await xe();await t.streams.delete(e)}a(PU,"deleteLocalStream");async function BU(e){let{connection:t}=await xe(),r=[],s=l_(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(AS.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(BU,"listRemoteStreams");async function HU(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await xe(),i=fU(),o=[],_={ack_policy:mS.None,durable_name:i,deliver_subject:i,deliver_policy:c_.All};t&&(_.deliver_policy=c_.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=IU(E),T=SS(l.data),h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:T,originators:[]},A=[];if(l.headers){let O=l.headers.get("originators");O&&(A=O.split(","),h.originators=A)}o.push(h),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(HU,"viewStream");async function vU(e,t,r=[],s=[]){Rt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await xe(),o=await Pi(),_=`${e}.${o}`,c=pU();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{Rt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,__(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")Rt.trace(`publishToStream creating stream: ${t}`),await h_(t,[_]),await i.publish(_,__(r[u]),{headers:c});else throw l}}a(vU,"publishToStream");function xs(e){e=e.toLowerCase();let t=Fs.join(ft.get(K.CONFIG_PARAMS.ROOTPATH),LU);if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return er(o_)&&(o_={port:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.HUB,config_file:x.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fs.join(t,x.PID_FILES.HUB),hdb_nats_path:t}),o_;if(e===K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return er(a_)&&(a_={port:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,config_file:x.NATS_CONFIG_FILES.LEAF_SERVER,domain:Hs.getConfigFromFile(K.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,pid_file_path:Fs.join(t,x.PID_FILES.LEAF),hdb_nats_path:t}),a_;Rt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(xs,"getServerConfig");async function GU(e){let{jsm:t}=await xe(),r=await Pi();try{await t.streams.add({name:e.stream_name,storage:fS.File,retention:RS.Workqueue,subjects:[`${x.SUBJECT_PREFIXES.MSGID}.${r}`,`${x.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:mS.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:c_.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${x.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(GU,"createWorkQueueStream");async function pS(e,t,r){let{jsm:s}=await xe(),n=await s.streams.info(t),i=IS(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Di.createNatsTableStreamName(_,c),E=i===e,l,T,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let O=0,I=n.config.sources.length;O<I;O++)if(l=n.config.sources[O],T=O,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(l.opt_start_time===o)return;await bS(_,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:`${x.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(pS,"addSourceToWorkStream");function IS(e){return e.split(".")[1]}a(IS,"extractServerName");async function CS(e,t,r){let{schema:s,table:n}=r,i=Di.createNatsTableStreamName(s,n),{jsm:o}=await xe(),_=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 bS(s,n,u,t)}a(CS,"removeSourceFromWorkStream");async function bS(e,t,r,s){let n=await vr(),i;try{i=yS(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{Rt.error("Error purging source subject",i,"from work stream",s)}}a(bS,"purgeSourceFromWorkStream");async function qU(e,t,r=2e3,s=l_()){if(!E_.isObject(t))throw new Error("data param must be an object");let n=__(t),{connection:i}=await xe(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return SS(_.data)}a(qU,"request");function S_(e){return new Promise(async(t,r)=>{let s=mU(u_,["--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(S_,"reloadNATS");async function FU(){let{pid_file_path:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await S_(e)}a(FU,"reloadNATSHub");async function xU(){let{pid_file_path:e}=xs(K.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await S_(e)}a(xU,"reloadNATSLeaf");function VU(e,t,r){let s;switch(e.code){case lS.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case lS.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(VU,"requestErrorHandler");async function kU(e,t){let r=t+x.SERVER_SUFFIX.LEAF;await AU.writeTransaction(K.SYSTEM_SCHEMA_NAME,K.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await pS(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await CS(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(kU,"updateWorkStream");async function LS(e,t){let r=Di.createNatsTableStreamName(e,t),s=await Pi(),n=yS(e,t,s);await h_(r,[n])}a(LS,"createLocalTableStream");async function $U(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await LS(s,n)}}a($U,"createTableStreams");async function wS(e,t){if(ft.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Di.createNatsTableStreamName(e,t),{jsm:s}=await xe();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Rt.warn(r);else throw r}}a(wS,"purgeTableStream");async function YU(e,t){if(ft.get(K.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await wS(e,t[r])}a(YU,"purgeSchemaTableStreams");async function KU(e){return(await vr()).streams.info(e)}a(KU,"getStreamInfo");function yS(e,t,r){return`${x.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(yS,"createSubjectName");async function Pi(){if(vs)return vs;if(vs=(await vr())?.nc?.info?.server_name,vs===void 0)throw new Error("Unable to get jetstream manager server name");return vs}a(Pi,"getJsmServerName");async function WU(){let e=await vr(),t=await Pi(),r=await gS();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===x.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Rt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===x.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Rt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(x.WORK_QUEUE_CONSUMER_NAMES.stream_name,x.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${x.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");Rt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(WU,"updateNodeNameLocalStreams")});var PS=d((Qv,MS)=>{"use strict";var T_=G(),QU=g(),DS=Ne().LMDB_ERRORS_ENUM;MS.exports=JU;async function JU(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await T_.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==DS.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await T_.closeEnvironment(global.lmdb_map[s]),await T_.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==DS.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){QU.error(t)}}a(JU,"cleanLMDBMap")});var qS=d((Jv,GS)=>{"use strict";var rr=g(),Bi=f(),XU=PS(),BS=Ds(),ZU=Ur(),zU=Hr(),{validateEvent:vS}=Kt(),jU={[Bi.IPC_EVENT_TYPES.SCHEMA]:eD,[Bi.IPC_EVENT_TYPES.USER]:rD};async function eD(e){let t=vS(e);if(t){rr.error(t);return}rr.trace(`IPC schemaHandler ${Bi.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await XU(e.message),await tD(e.message)}a(eD,"schemaHandler");async function tD(e){try{if(global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await ZU.describeTable({schema:e.schema,table:e.table});break;default:BS.setSchemaDataToGlobal(HS);break}else BS.setSchemaDataToGlobal(HS)}catch(t){rr.error(t)}}a(tD,"syncSchemaMetadata");function HS(e){e&&rr.error(e)}a(HS,"handleErrorCallback");async function rD(e){try{let t=vS(e);if(t){rr.error(t);return}rr.trace(`IPC userHandler ${Bi.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await zU.setUsersToGlobal()}catch(t){rr.error(t)}}a(rD,"userHandler");GS.exports=jU});var kS=d((Xv,VS)=>{"use strict";var sD=require("node-ipc").IPC,FS=p(),xS=f(),mt=g(),{IPC_ERRORS:Gr}=Ne(),nD=require("os"),Hi=class{constructor(t,r){this.ipc=new sD,this.server_name=xS.HDB_IPC_SERVER,this.ipc.config.retry=nD.platform()=="win32"?6e5:100,this.ipc.config.id=xS.HDB_IPC_CLIENT_PREFIX+t,this.ipc.config.silent=!0,this.event_handlers=r,this.connect()}connect(){this.ipc.connectTo(this.server_name,()=>{this.generateEventHandlers(this.event_handlers)})}addEventHandler(t,r){this.ipc.of[this.server_name].on(t,r)}generateEventHandlers(t){this.ipc.of[this.server_name].on("connect",()=>{mt.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{mt.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&mt.warn("Error connecting to HDB IPC server. Confirm that the server is running."),mt.warn(`Error with IPC client ${this.ipc.config.id}`),mt.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw mt.warn(Gr.INVALID_IPC_DATA_TYPE),new Error(Gr.INVALID_IPC_DATA_TYPE);if(FS.isEmpty(t.type))throw mt.warn(Gr.MISSING_TYPE),new Error(Gr.MISSING_TYPE);if(FS.isEmpty(t.message))throw mt.warn(Gr.MISSING_MSG),new Error(Gr.MISSING_MSG);mt.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(Hi,"IPCClient");VS.exports=Hi});var QS=d((Zv,WS)=>{"use strict";var KS=require("joi"),{string:Vs,boolean:$S,array:iD}=KS.types(),YS=f(),aD=Ke();WS.exports=oD;function oD(e){let t=KS.object({operation:Vs.valid(YS.OPERATIONS_ENUM.ADD_NODE,YS.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Vs.required(),subscriptions:iD.items({schema:Vs.required(),table:Vs.required(),hash_attribute:Vs.optional(),subscribe:$S.required(),publish:$S.required()}).min(1).required()});return aD.validateBySchema(e,t)}a(oD,"updateRemoteSourceValidator")});var XS=d((zv,JS)=>{var _D=Ke(),cD={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JS.exports=function(e){return _D.validateObject(e,cD)}});var f_=d((jv,ZS)=>{"use strict";var uD=f().OPERATIONS_ENUM,vi=class{constructor(t,r,s,n=void 0){this.operation=uD.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(vi,"UpdateObject");ZS.exports=vi});var jS=d((eG,zS)=>{"use strict";var ED={OPERATION:"operation",REFRESH:"refresh"},Gi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Gi,"JWTTokens");var qi=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(qi,"JWTRSAKeys");zS.exports={JWTTokens:Gi,TOKEN_TYPE_ENUM:ED,JWTRSAKeys:qi}});var nT=d((tG,sT)=>{"use strict";var $s=require("jsonwebtoken"),R_=require("fs-extra"),m_=p(),Ve=f(),{handleHDBError:Ce,hdb_errors:lD}=Y(),{HTTP_STATUS_CODES:be,AUTHENTICATION_ERROR_MSGS:Le}=lD,ks=g(),eT=Li(),N_=Hr(),dD=Ms().update,hD=f_(),SD=Ss(),{UserEventMsg:TD}=Kt(),Ht=Z();Ht.initSync();var A_=require("path"),{JWTTokens:fD,JWTRSAKeys:RD,TOKEN_TYPE_ENUM:Fi}=jS(),mD=Ht.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ht.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",AD=Ht.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ht.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",xi="RS256",O_;sT.exports={createTokens:OD,validateOperationToken:gD,refreshOperationToken:ND,validateRefreshToken:rT};async function OD(e){if(m_.isEmpty(e)||typeof e!="object")throw Ce(new Error,Le.INVALID_AUTH_OBJECT,be.BAD_REQUEST,void 0,void 0,!0);if(m_.isEmpty(e.username))throw Ce(new Error,Le.USERNAME_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);if(m_.isEmpty(e.password))throw Ce(new Error,Le.PASSWORD_REQUIRED,be.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await N_.findAndValidateUser(e.username,e.password),!t)throw Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ks.error(T),Ce(new Error,Le.INVALID_CREDENTIALS,be.UNAUTHORIZED,void 0,void 0,!0)}let r=await Vi(),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 tT(i,r.private_key,r.passphrase),_=await $s.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:AD,algorithm:xi,subject:Fi.REFRESH}),c=eT.hash(_),u=new hD(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await dD(u)}catch(T){ks.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 SD.signalUserChange(new TD(process.pid)),new fD(o,_)}a(OD,"createTokens");async function tT(e,t,r){return await $s.sign(e,{key:t,passphrase:r},{expiresIn:mD,algorithm:xi,subject:Fi.OPERATION})}a(tT,"signOperationToken");async function Vi(){if(O_===void 0)try{let e=A_.join(Ht.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=A_.join(Ht.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=A_.join(Ht.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await R_.readFile(e)).toString(),n=(await R_.readFile(t)).toString(),i=(await R_.readFile(r)).toString();O_=new RD(i,n,s)}catch(e){throw ks.error(e),Ce(new Error,Le.NO_ENCRYPTION_KEYS,be.INTERNAL_SERVER_ERROR)}return O_}a(Vi,"getJWTRSAKeys");async function ND(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 rT(e.refresh_token);let t=await Vi(),r=await $s.decode(e.refresh_token);return{operation_token:await tT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(ND,"refreshOperationToken");async function gD(e){try{let t=await Vi(),r=await $s.verify(e,t.public_key,{algorithms:xi,subject:Fi.OPERATION});return await N_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ks.warn(t),t.name&&t.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}}a(gD,"validateOperationToken");async function rT(e){let t;try{let r=await Vi(),s=await $s.verify(e,r.public_key,{algorithms:xi,subject:Fi.REFRESH});t=await N_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ks.warn(r),r.name&&r.name==="TokenExpiredError"?Ce(new Error,Le.TOKEN_EXPIRED,be.FORBIDDEN):Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED)}if(!eT.validate(t.refresh_token,e))throw Ce(new Error,Le.INVALID_TOKEN,be.UNAUTHORIZED);return t}a(rT,"validateRefreshToken")});var _T=d((sG,oT)=>{"use strict";var pD=XS(),qr=require("passport"),ID=require("passport-local").Strategy,CD=require("passport-http").BasicStrategy,bD=require("util"),LD=Hr(),aT=bD.callbackify(LD.findAndValidateUser),rG=Ne(),wD=f(),iT=nT();qr.use(new ID(function(e,t,r){aT(e,t,r)}));qr.use(new CD(function(e,t,r){aT(e,t,r)}));qr.serializeUser(function(e,t){t(null,e)});qr.deserializeUser(function(e,t){t(null,e)});function yD(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":qr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===wD.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):iT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:qr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(yD,"authorize");function UD(e,t){let r=pD(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(UD,"checkPermissions");oT.exports={authorize:yD,checkPermissions:UD}});var Yi=d((nG,cT)=>{"use strict";var ki=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(ki,"Node");var $i=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a($i,"NodeSubscription");cT.exports={Node:ki,NodeSubscription:$i}});var ET=d((iG,uT)=>{"use strict";var DD=f().OPERATIONS_ENUM,Ki=class{constructor(t,r,s,n=void 0){this.operation=DD.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ki,"UpsertObject");uT.exports=Ki});var dT=d((aG,lT)=>{"use strict";var Wi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Wi,"RemotePayloadObject");var Qi=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(Qi,"RemotePayloadSubscription");lT.exports={RemotePayloadObject:Wi,RemotePayloadSubscription:Qi}});var ST=d((oG,hT)=>{"use strict";var Ji=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(Ji,"TableSizeObject");hT.exports=Ji});var mT=d((_G,RT)=>{"use strict";var MD=ST(),TT=require("path"),fT=V(),PD=Se(),Fr=G(),BD=g();RT.exports=HD;async function HD(e){let t=new MD;try{let r=TT.join(fT.getBaseSchemaPath(),e.schema.toString()),s=await Fr.openEnvironment(r,e.name),n=Fr.statDBI(s,e.hash_attribute),i=TT.join(fT.getTransactionAuditStorePath(),e.schema.toString()),o=await Fr.openEnvironment(i,e.name,!0),_=Fr.statDBI(o,PD.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Fr.environmentDataSize(r,e.name),u=await Fr.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){BD.warn(`unable to stat table dbi due to ${r}`)}return t}a(HD,"lmdbGetTableSize")});var OT=d((cG,AT)=>{"use strict";var vD=f(),Xi=class{constructor(t){this.operator=vD.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Xi,"SystemInformationOperation");AT.exports=Xi});var gT=d((uG,NT)=>{"use strict";var Zi=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(Zi,"SystemInformationObject");NT.exports=Zi});var IT=d((lG,pT)=>{"use strict";var ce=require("systeminformation"),xr=g(),GD=f(),qD=mT(),FD=Ur(),xD=Z();xD.initSync();var EG=OT(),VD=gT(),zi;pT.exports={getHDBProcessInfo:C_,getNetworkInfo:L_,getDiskInfo:b_,getMemoryInfo:I_,getCPUInfo:p_,getTimeInfo:g_,getSystemInformation:w_,systemInformation:kD,getTableSize:y_};function g_(){return ce.time()}a(g_,"getTimeInfo");async function p_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ce.cpu();E.cpu_speed=await ce.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:T,raw_currentload_irq:h,raw_currentload_nice:A,raw_currentload_system:O,raw_currentload_user:I,cpus:X,...v}=await ce.currentLoad();return v.cpus=[],X.forEach(W=>{let{raw_load:$e,raw_load_idle:Js,raw_load_irq:J_,raw_load_nice:X_,raw_load_system:Z_,raw_load_user:Xs,...Nt}=W;v.cpus.push(Nt)}),E.current_load=v,E}catch(e){return xr.error(`error in getCPUInfo: ${e}`),{}}}a(p_,"getCPUInfo");async function I_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ce.mem();return n}catch(e){return xr.error(`error in getMemoryInfo: ${e}`),{}}}a(I_,"getMemoryInfo");async function C_(){let e={core:[],clustering:[]};try{return(await ce.processes()).list.forEach(r=>{r.params.includes(GD.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return xr.error(`error in getHDBProcessInfo: ${t}`),e}}a(C_,"getHDBProcessInfo");async function b_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ce.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ce.fsStats();return e.read_write=u,e.size=await ce.fsSize(),e}catch(t){return xr.error(`error in getDiskInfo: ${t}`),e}}a(b_,"getDiskInfo");async function L_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ce.networkInterfaceDefault(),e.latency=await ce.inetChecksite("google.com"),(await ce.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 ce.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await ce.networkConnections(),e}catch(t){return xr.error(`error in getNetworkInfo: ${t}`),e}}a(L_,"getNetworkInfo");async function w_(){if(zi!==void 0)return zi;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ce.osInfo();e=_;let c=await ce.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,zi=e,zi}catch(t){return xr.error(`error in getSystemInformation: ${t}`),e}}a(w_,"getSystemInformation");async function y_(){let e=[],t=await FD.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await qD(s));return e}a(y_,"getTableSize");async function kD(e){let t=new VD;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await w_(),t.time=g_(),t.cpu=await p_(),t.memory=await I_(),t.disk=await b_(),t.network=await L_(),t.harperdb_processes=await C_(),t.table_size=await y_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await w_();break;case"time":t.time=g_();break;case"cpu":t.cpu=await p_();break;case"memory":t.memory=await I_();break;case"disk":t.disk=await b_();break;case"network":t.network=await L_();break;case"harperdb_processes":t.harperdb_processes=await C_();break;case"table_size":t.table_size=await y_();break;default:break}return t}a(kD,"systemInformation")});var bT=d((SG,CT)=>{"use strict";var dG=require("fs-extra"),hG=g();CT.exports={version:$D,printVersion:KD,nodeVersion:YD};var vt=i_();function $D(){if(vt)return vt.version}a($D,"version");function YD(){if(vt&&vt.engines&&vt.engines["preferred-node"])return vt.engines["preferred-node"]}a(YD,"nodeVersion");function KD(){vt&&console.log(`HarperDB Version ${vt.version}`)}a(KD,"printVersion")});var Ys=d((RG,UT)=>{"use strict";var WD=Ms(),U_=p(),D_=require("util"),sr=f(),LT=Z();LT.initSync();var QD=_T(),wT=ys(),{Node:TG,NodeSubscription:fG}=Yi(),JD=Ns(),XD=ET(),{RemotePayloadObject:ZD,RemotePayloadSubscription:zD}=dT(),{handleHDBError:jD,hdb_errors:eM}=Y(),{HTTP_STATUS_CODES:tM,HDB_ERROR_MSGS:rM}=eM,sM=ht(),nM=IT(),iM=bT(),aM=D_.promisify(QD.authorize),oM=D_.promisify(wT.searchByHash),_M=D_.promisify(wT.searchByValue);UT.exports={authHeaderToUser:cM,isEmpty:uM,getNodeRecord:EM,upsertNodeRecord:lM,buildNodePayloads:dM,checkClusteringEnabled:hM,getAllNodeRecords:SM,getSystemInfo:TM,reverseSubscription:yT};async function cM(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await aM(t,null),e}a(cM,"authHeaderToUser");function uM(e){return e==null}a(uM,"isEmpty");async function EM(e){let t=new JD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return oM(t)}a(EM,"getNodeRecord");async function lM(e){let t=new XD(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return WD.upsert(t)}a(lM,"upsertNodeRecord");function yT(e){if(U_.isEmpty(e.subscribe)||U_.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(yT,"reverseSubscription");function dM(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=U_.getTableHashAttribute(c,u),{subscribe:l,publish:T}=yT(_),h=new zD(c,u,E,T,l,_.start_time);n.push(h)}return new ZD(r,t,n,s)}a(dM,"buildNodePayloads");function hM(){if(!LT.get(sr.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jD(new Error,rM.CLUSTERING_NOT_ENABLED,tM.BAD_REQUEST,void 0,void 0,!0)}a(hM,"checkClusteringEnabled");async function SM(){let e=new sM(sr.SYSTEM_SCHEMA_NAME,sr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return _M(e)}a(SM,"getAllNodeRecords");async function TM(){let e=await nM.getSystemInformation();return{hdb_version:iM.version(),node_version:e.node_version,platform:e.platform}}a(TM,"getSystemInfo")});var PT=d((mG,MT)=>{"use strict";var P_=Ur(),{hdb_errors:M_}=Y();MT.exports={checkSchemaExists:DT,checkSchemaTableExists:fM,schema_describe:P_};async function DT(e){if(!global.hdb_schema[e])try{let t=await P_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return M_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(DT,"checkSchemaExists");async function fM(e,t){let r=await DT(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await P_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return M_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return M_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(fM,"checkSchemaTableExists")});var FT=d((OG,qT)=>{"use strict";var Vr=yn(),nr=PT(),BT=g(),RM=require("uuid").v4,AG=require("clone"),$r=Ss(),ir=f(),mM=require("util"),ar=Jt(),{handleHDBError:ue,hdb_errors:AM}=Y(),{HDB_ERROR_MSGS:kr,HTTP_STATUS_CODES:Ee}=AM,{SchemaEventMsg:Yr}=Kt(),HT=tr();qT.exports={createSchema:OM,createSchemaStructure:vT,createTable:NM,createTableStructure:GT,createAttribute:bM,dropSchema:gM,dropTable:pM,dropAttribute:IM};async function OM(e){try{let t=await vT(e);return $r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(OM,"createSchema");async function vT(e){let t=Vr.schema_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);if(!await nr.checkSchemaExists(e.schema))throw ue(new Error,kr.SCHEMA_EXISTS_ERR(e.schema),Ee.BAD_REQUEST,ir.LOG_LEVELS.ERROR,kr.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await ar.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(vT,"createSchemaStructure");async function NM(e){try{let t=await GT(e);return $r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(NM,"createTable");async function GT(e){let t=Vr.create_table_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);Vr.validateTableResidence(e.residence);let r=await nr.checkSchemaExists(e.schema);if(r)throw ue(new Error,r,Ee.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(!await nr.checkSchemaTableExists(e.schema,e.table))throw ue(new Error,kr.TABLE_EXISTS_ERR(e.schema,e.table),Ee.BAD_REQUEST,ir.LOG_LEVELS.ERROR,kr.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:RM(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ar.createTable(n,e);else throw ue(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ee.BAD_REQUEST);else await ar.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(GT,"createTableStructure");async function gM(e){let t=Vr.schema_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaExists(e.schema);if(r)throw ue(new Error,r,Ee.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),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await HT.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(gM,"dropSchema");async function pM(e){let t=Vr.table_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ue(new Error,r,Ee.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);return await ar.dropTable(e),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table)),await HT.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(pM,"dropTable");async function IM(e){let t=Vr.attribute_object(e);if(t)throw ue(t,t.message,Ee.BAD_REQUEST,void 0,void 0,!0);let r=await nr.checkSchemaTableExists(e.schema,e.table);if(r)throw ue(new Error,r,Ee.NOT_FOUND,ir.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ue(new Error,"You cannot drop a hash attribute",Ee.BAD_REQUEST,void 0,void 0,!0);if(ir.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ue(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ee.BAD_REQUEST,void 0,void 0,!0);try{return await ar.dropAttribute(e),CM(e),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw BT.error(`Got an error deleting attribute ${mM.inspect(e)}.`),s}}a(IM,"dropAttribute");function CM(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(CM,"dropAttributeFromGlobal");async function bM(e){if(!global.hdb_schema[e.schema])throw ue(new Error,kr.SCHEMA_NOT_FOUND(e.schema),Ee.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw ue(new Error,kr.TABLE_NOT_FOUND(e.schema,e.table),Ee.NOT_FOUND,void 0,void 0,!0);try{return await ar.createAttribute(e),$r.signalSchemaChange(new Yr(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw BT.error(t),t}}a(bM,"createAttribute")});var Ks=d((NG,xT)=>{"use strict";var ji=class{constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};a(ji,"UpdateRemoteResponseObject");xT.exports=ji});var KT=d((gG,YT)=>{"use strict";var LM=QS(),or=g(),B_=De(),wM=f(),H_=Ys(),VT=tr(),kT=FT(),yM=No(),{Node:UM,NodeSubscription:$T}=Yi(),v_=Ks(),G_=p(),DM=Z(),{cloneDeep:MM}=require("lodash");YT.exports=PM;async function PM(e){try{let t=LM(e);if(t)return or.error(`Validation error in updateRemoteSource: ${t.message}`),new v_(B_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=MM(await H_.getNodeRecord(s)),_=!G_.isEmptyOrZeroLength(o);o=_?o[0]:o,_&&or.trace(`Existing record found for ${s}, updating records subscriptions`);for(let u=0,E=r.length;u<E;u++){let l=r[u],T=l.schema,h=l.table;if(G_.doesSchemaExist(T)||(or.trace(`updateRemoteSource creating schema: ${T}`),await kT.createSchema({operation:"create_schema",schema:T})),!G_.doesTableExist(T,h)){or.trace(`updateRemoteSource creating table: ${h} in schema: ${T}`);let A=new yM(T,h,l.hash_attribute);await kT.createTable(A),or.trace(`Creating local stream for ${T}.${h}`),await VT.createLocalTableStream(T,h)}if(await VT.updateWorkStream(l,s),_){let A=!1;for(let O=0,I=o.subscriptions.length;O<I;O++){let X=o.subscriptions[O];if(X.schema===T&&X.table===h){X.publish=l.publish,X.subscribe=l.subscribe,A=!0;break}}A||o.subscriptions.push(new $T(T,h,l.publish,l.subscribe))}else i.push(new $T(T,h,l.publish,l.subscribe))}_||(o=new UM(s,i,void 0),or.trace(`No record found for ${s}, creating a new one`));let c=Object.create({});return Object.assign(c,o),c.system_info=n,await H_.upsertNodeRecord(c),new v_(B_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${DM.get(wM.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await H_.getSystemInfo())}catch(t){or.error(t);let r=t.message?t.message:t;return new v_(B_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(PM,"updateRemoteSource")});var XT=d((pG,JT)=>{"use strict";var QT=require("joi"),{string:WT}=QT.types(),BM=f(),HM=Ke();JT.exports=vM;function vM(e){let t=QT.object({operation:WT.valid(BM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:WT.required()});return HM.validateBySchema(e,t)}a(vM,"removeRemoteSourceValidator")});var zT=d((IG,ZT)=>{"use strict";var GM=XT(),ea=g(),ta=De(),q_=f(),qM=Ys(),FM=p(),xM=tr(),VM=Z(),ra=Ks(),{NodeSubscription:kM}=Yi(),$M=gs(),YM=Yo(),KM=VM.get(q_.CONFIG_PARAMS.CLUSTERING_NODENAME);ZT.exports=WM;async function WM(e){try{let t=GM(e);if(t)return ea.error(`Validation error in removeRemoteSource: ${t.message}`),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await qM.getNodeRecord(r);if(FM.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return ea.error(i),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let _=s.subscriptions[i];ea.trace(`remove remote source removing subscription: ${_.schema}.${_.table} for node: ${r}`);let c=new kM(_.schema,_.table,!1,!1);await xM.updateWorkStream(c,r)}let n=new $M(q_.SYSTEM_SCHEMA_NAME,q_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await YM.deleteRecord(n),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${KM} successfully removed node '${r}'.`)}catch(t){ea.error(t);let r=t.message?t.message:t;return new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(WM,"removeRemoteSource")});var ef=d((CG,jT)=>{"use strict";var QM=De(),sa=class{constructor(t,r,s,n,i,o,_,c,u,E,l,T,h){this.port=t,o===null&&(o=void 0),this.server_name=r+QM.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:h}},this.system_account="SYS"}};a(sa,"HubConfigObject");jT.exports=sa});var sf=d((bG,rf)=>{"use strict";var tf=De(),na=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+tf.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+tf.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(na,"LeafConfigObject");rf.exports=na});var af=d((LG,nf)=>{"use strict";var ia=class{constructor(t,r){this.user=t,this.password=r}};a(ia,"HdbUserObject");nf.exports=ia});var _f=d((wG,of)=>{"use strict";var JM=De(),aa=class{constructor(t,r){this.user=t+JM.SERVER_SUFFIX.ADMIN,this.password=r}};a(aa,"SysUserObject");of.exports=aa});var lf=d((yG,Ef)=>{"use strict";var Kr=require("path"),ua=require("fs-extra"),XM=ef(),ZM=sf(),zM=af(),jM=_f(),F_=Hr(),Qr=p(),ke=ts(),ca=f(),oa=De(),{CONFIG_PARAMS:ne}=ca,Ea=g(),la=Z(),cf=ns(),x_=tr(),Wr="clustering",eP=1e4,uf=5;Ef.exports={generateNatsConfig:tP,removeNatsConfig:rP};async function tP(e=!1,t=void 0){la.initSync();let r=la.get(ne.ROOTPATH),s=Kr.join(r,Wr,oa.PID_FILES.HUB),n=Kr.join(r,Wr,oa.PID_FILES.LEAF),i=Kr.join(r,Wr,"leaf"),o=Kr.join(r,Wr,oa.NATS_CONFIG_FILES.HUB_SERVER),_=Kr.join(r,Wr,oa.NATS_CONFIG_FILES.LEAF_SERVER),c=ke.getConfigFromFile(ne.CLUSTERING_TLS_CERTIFICATE),u=ke.getConfigFromFile(ne.CLUSTERING_TLS_PRIVATEKEY),E=ke.getConfigFromFile(ne.CLUSTERING_TLS_CERT_AUTH),l=ke.getConfigFromFile(ne.CLUSTERING_TLS_INSECURE),T=ke.getConfigFromFile(ne.CLUSTERING_NODENAME),h=ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await x_.checkNATSServerInstalled()||da("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await F_.listUsers(),O=ke.getConfigFromFile(ne.CLUSTERING_USER),I=await F_.getClusterUser();(Qr.isEmpty(I)||I.active!==!0)&&da(`invalid cluster user '${O}'`),e||(await _a(ne.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await _a(ne.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await _a(ne.CLUSTERING_HUBSERVER_NETWORK_PORT),await _a(ne.CLUSTERING_LEAFSERVER_NETWORK_PORT));let X=[],v=[];for(let[Xs,Nt]of A.entries())Nt.role.role===ca.ROLE_TYPES_ENUM.CLUSTER_USER&&Nt.active&&(X.push(new jM(Nt.username,cf.decrypt(Nt.hash))),v.push(new zM(Nt.username,cf.decrypt(Nt.hash))));let W=[],{hub_routes:$e}=ke.getClusteringRoutes();if(!Qr.isEmptyOrZeroLength($e))for(let Xs of $e)W.push(`tls://${I.sys_name_encoded}:${I.uri_encoded_d_hash}@${Xs.host}:${Xs.port}`);let Js=new XM(ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_NETWORK_PORT),T,s,c,u,E,l,h,ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_CLUSTER_NAME),ke.getConfigFromFile(ne.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),W,X,v);t=Qr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ca.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ua.writeJson(o,Js),Ea.trace(`Hub server config written to ${o}`));let J_=`tls://${I.sys_name_encoded}:${I.uri_encoded_d_hash}@0.0.0.0:${h}`,X_=`tls://${I.uri_encoded_name}:${I.uri_encoded_d_hash}@0.0.0.0:${h}`,Z_=new ZM(ke.getConfigFromFile(ne.CLUSTERING_LEAFSERVER_NETWORK_PORT),T,n,i,[J_],[X_],X,v,c,u,E,l);(t===void 0||t===ca.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ua.writeJson(_,Z_),Ea.trace(`Leaf server config written to ${_}`))}a(tP,"generateNatsConfig");async function _a(e){let t=la.get(e);Qr.isEmpty(t)&&da(`port undefined for '${e}'`),await Qr.isPortTaken(t)&&da(`'${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(_a,"isPortAvailable");function da(e){let t=`Error generating clustering config: ${e}`;Ea.error(t),console.error(t),process.exit(1)}a(da,"generateNatsConfigError");async function rP(e){let{port:t,config_file:r}=x_.getServerConfig(e),{username:s,decrypt_hash:n}=await F_.getClusterUser(),i=0,o=500;for(;i<uf;){try{let u=await x_.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=uf)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 Qr.async_set_timeout(o*i)}let _="0".repeat(eP),c=Kr.join(la.get(ne.ROOTPATH),Wr,r);await ua.writeFile(c,_),await ua.remove(c)}a(rP,"removeNatsConfig")});var k_=d((UG,mf)=>{"use strict";var $=Z(),df=Zo(),m=f(),V_=De(),te=require("path"),{PACKAGE_ROOT:ha}=f(),J="/dev/null",Jr=te.join(ha,"launchServiceScripts"),hf=te.join(ha,"utility/scripts"),sP=te.join(hf,m.HDB_RESTART_SCRIPT),Sf=te.resolve(ha,"dependencies",`${process.platform}-${process.arch}`,V_.NATS_BINARY_NAME),le,de;function _t(){(le===void 0||de===void 0)&&($.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(_t,"initLogConfig");function Tf(){_t();let e=te.join(de,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 le||(t.out_file=J,t.error_file=J),{...t,script:m.SERVICE_SERVERS.IPC}}a(Tf,"generateIPCServerConfig");function ff(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=te.join(de,m.PROCESS_LOG_NAMES.HDB),t=df.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:$.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Jr};return le||(s.out_file=J,s.error_file=J),s}a(ff,"generateHDBServerConfig");function Rf(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=te.join(de,m.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=df.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:$.get(m.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Jr};return le||(s.out_file=J,s.error_file=J),s}a(Rf,"generateCFServerConfig");function nP(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=$.get(m.CONFIG_PARAMS.ROOTPATH),t=te.join(e,"clustering",V_.NATS_CONFIG_FILES.HUB_SERVER),r=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:Sf,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 le||(s.out_file=J,s.error_file=J),s}a(nP,"generateNatsHubServerConfig");function iP(){_t(),$.initSync(),le=$.get(m.HDB_SETTINGS_NAMES.LOG_TO_FILE),de=$.get(m.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=$.get(m.CONFIG_PARAMS.ROOTPATH),t=te.join(e,"clustering",V_.NATS_CONFIG_FILES.LEAF_SERVER),r=te.join(de,m.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:m.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:Sf,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 le||(s.out_file=J,s.error_file=J),s}a(iP,"generateNatsLeafServerConfig");function aP(){_t(),$.initSync();let e=te.join(de,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:Jr};return le||(t.out_file=J,t.error_file=J),t}a(aP,"generateNatsIngestServiceConfig");function oP(){_t(),$.initSync();let e=te.join(de,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:Jr};return le||(t.out_file=J,t.error_file=J),t}a(oP,"generateNatsReplyServiceConfig");function _P(){_t(),$.initSync();let e=te.join(de,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:Jr,autorestart:!1};return le||(t.out_file=J,t.error_file=J),t}a(_P,"generateClusteringUpgradeV4ServiceConfig");function cP(){_t();let e=te.join(de,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:hf};return le||(t.out_file=J,t.error_file=J),{...t,script:sP}}a(cP,"generateRestart");function uP(e){_t();let t=te.join(de,m.PROCESS_LOG_NAMES.JOBS),r=te.join(ha,"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:Jr,autorestart:!1};return le||(s.out_file=J,s.error_file=J),{...s,script:te.join(r,"jobProcess.js")}}a(uP,"generateJobConfig");function EP(){return{apps:[Tf(),ff(),Rf()]}}a(EP,"generateAllServiceConfigs");mf.exports={generateAllServiceConfigs:EP,generateIPCServerConfig:Tf,generateHDBServerConfig:ff,generateCFServerConfig:Rf,generateRestart:cP,generateNatsHubServerConfig:nP,generateNatsLeafServerConfig:iP,generateNatsIngestServiceConfig:aP,generateNatsReplyServiceConfig:oP,generateClusteringUpgradeV4ServiceConfig:_P,generateJobConfig:uP}});var Uf=d((DG,yf)=>{"use strict";var b=f(),Sa=p(),Ws=lf(),Ta=tr(),lP=De(),M=require("pm2"),dP=require("fs-extra"),At=k_(),we=Z(),Ot=g(),hP=k_(),SP=Ys(),TP=require("util"),Of=TP.promisify(require("child_process").exec),Nf=require("path");yf.exports={start:_r,stop:Ra,reload:pf,restart:If,list:Y_,describe:ma,connect:ct,kill:bf,startAllServices:CP,startService:fa,getUniqueServicesList:K_,restartAllServices:bP,stopAllServices:LP,isServiceRegistered:Lf,reloadStopStart:$_,restartHdb:Cf,deleteProcess:pP,configureLogRotate:UP,startClustering:wf,isHdbRestartRunning:IP,isClusteringRunning:MP,stopClustering:DP,reloadClustering:PP};var{PACKAGE_ROOT:fP}=f(),RP="2.7.0",gf=Nf.join(fP,"node_modules/pm2/bin/pm2"),mP="Log rotate installed.",AP="Error installing log rotate.",OP="Log rotate updated.",NP="Error updating log rotate.",gP="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 ct(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(ct,"connect");function _r(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(_r,"start");function Ra(e){return new Promise(async(t,r)=>{try{await ct()}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(Ra,"stop");function pf(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(pf,"reload");function If(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(If,"restart");function pP(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(pP,"deleteProcess");async function Cf(){await _r(hP.generateRestart())}a(Cf,"restartHdb");async function IP(){let e=await Y_();for(let t in e)if(e[t].name===b.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(IP,"isHdbRestartRunning");function Y_(){return new Promise(async(e,t)=>{try{await ct()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(Y_,"list");function ma(e){return new Promise(async(t,r)=>{try{await ct()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ma,"describe");function bf(){return new Promise(async(e,t)=>{try{await ct()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(bf,"kill");async function CP(){try{await wf(),await _r(At.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(CP,"startAllServices");async function fa(e){try{let t;switch(e=e.toLowerCase(),e){case b.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=At.generateIPCServerConfig();break;case b.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=At.generateHDBServerConfig();break;case b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=At.generateCFServerConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=At.generateNatsIngestServiceConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=At.generateNatsReplyServiceConfig();break;case b.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=At.generateNatsHubServerConfig(),await _r(t),await Ws.removeNatsConfig(e);return;case b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=At.generateNatsLeafServerConfig(),await _r(t),await Ws.removeNatsConfig(e);return;case b.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 _r(t)}catch(t){throw M.disconnect(),t}}a(fa,"startService");async function K_(){try{let e=await Y_(),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(K_,"getUniqueServicesList");async function bP(e=[]){try{let t=!1,r=await K_();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===b.PROCESS_DESCRIPTORS.HDB?t=!0:await $_(o):await If(o))}t&&await $_(b.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(bP,"restartAllServices");async function LP(){try{let e=await K_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Ra(s.name)}if(await bf(),we.get(b.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await dP.readFile(Nf.join(we.get(b.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),b.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ot.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(LP,"stopAllServices");async function Lf(e){return!Sa.isEmptyOrZeroLength(await ma(e))}a(Lf,"isServiceRegistered");async function $_(e){let t=e===b.PROCESS_DESCRIPTORS.HDB?we.get(b.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):we.get(b.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await ma(e),s=Sa.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===b.PROCESS_DESCRIPTORS.HDB?Ot.error(gP):(await Ra(e),await fa(e)):e===b.PROCESS_DESCRIPTORS.HDB?await Cf():await pf(e)}a($_,"reloadStopStart");function wP(){return new Promise(async(e,t)=>{try{await ct()}catch(r){t(r)}M.stop(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(wP,"stopLogrotate");async function yP(){let{stdout:e,stderr:t}=await Of(`${process.platform==="win32"?"node":""} ${gf} install pm2-logrotate@${RP}`);if(Ot.debug(`loadLogRotate stdout: ${e}`),t)throw Ot.error(AP),t;Ot.info(mP)}a(yP,"installLogRotate");async function Af(){let e={max_size:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${gf} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Of(t);if(Ot.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ot.error(NP),s;Ot.info(OP)}a(Af,"updateLogRotateConfig");async function UP(){we.initSync();let e=Sa.autoCastBoolean(we.get(b.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await ma(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Sa.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await yP(),await Af();return}if(e&&s){await _r(b.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Af();return}!e&&r===b.PM2_PROCESS_STATUSES.ONLINE&&await wP()}a(UP,"configureLogRotate");async function wf(){for(let t in b.CLUSTERING_PROCESSES){let r=b.CLUSTERING_PROCESSES[t];await fa(r)}await Ta.createWorkQueueStream(lP.WORK_QUEUE_CONSUMER_NAMES),await Ta.updateNodeNameLocalStreams();let e=await SP.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===b.PRE_4_0_0_VERSION){Ot.info("Starting clustering upgrade 4.0.0 process"),await fa(b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(wf,"startClustering");async function DP(){for(let e in b.CLUSTERING_PROCESSES){let t=b.CLUSTERING_PROCESSES[e];await Ra(t)}}a(DP,"stopClustering");async function MP(){for(let e in b.CLUSTERING_PROCESSES){let t=b.CLUSTERING_PROCESSES[e];if(await Lf(t)===!1)return!1}return!0}a(MP,"isClusteringRunning");async function PP(){await Ws.generateNatsConfig(!0),await Ta.reloadNATSHub(),await Ta.reloadNATSLeaf(),await Ws.removeNatsConfig(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ws.removeNatsConfig(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(PP,"reloadClustering")});var Hf=d((MG,Bf)=>{"use strict";var Aa=g(),Qs=f(),Df=De(),Mf=Z(),BP=p(),Pf=Ks(),HP=Uf(),vP=Ys(),GP=f_(),qP=Ms();Bf.exports=FP;async function FP(e){try{Aa.trace("getRemoteSourceConfig called");let r=(await HP.describe(Qs.CLUSTERING_HUB_PROC_DESCRIPTOR))[0].pm2_env.pm_uptime,s=BP.ms_to_time(Date.now()-r),n=new xP(Mf.get(Qs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Mf.get(Qs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),s,await vP.getSystemInfo());try{let i={name:e.node_name,system_info:e.system_info},o=new GP(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[i]);await qP.update(o)}catch(i){Aa.error("Get remote config encountered an error updating system info for node:",e.node_name,i)}return Aa.trace("getRemoteSourceConfig response:",n),new Pf(Df.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){Aa.error(t);let r=t.message?t.message:t;return new Pf(Df.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(FP,"getRemoteSourceConfig");function xP(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(xP,"ConfigResponseObject")});var qf=d((PG,Gf)=>{"use strict";var vf=Z();vf.initSync();var VP=tr(),kP=qS(),$P=kS(),cr=g(),Xr=f(),W_=De(),YP=KT(),KP=zT(),WP=Hf(),QP=Ks(),{encode:JP,decode:XP}=require("msgpackr"),ZP=Ds(),zP=Ur(),jP=require("util"),eB=jP.promisify(ZP.setSchemaDataToGlobal),Q_=vf.get(Xr.CONFIG_PARAMS.CLUSTERING_NODENAME);Gf.exports=tB;async function tB(){try{cr.notify("Starting reply service."),await eB();try{global.hdb_ipc=new $P(process.pid,kP)}catch(s){throw cr.error("Error instantiating new instance of IPC client in natsReplyService"),s}let e=await VP.getConnection(),t=`${Q_}.__request__`,r=e.subscribe(t,{queue:Q_});await rB(r)}catch(e){cr.error(e)}}a(tB,"initialize");async function rB(e){for await(let t of e){let r=XP(t.data);cr.trace("Received request:",r);let s;switch(r.operation){case Xr.OPERATIONS_ENUM.ADD_NODE:case Xr.OPERATIONS_ENUM.UPDATE_NODE:s=await YP(r);break;case Xr.OPERATIONS_ENUM.REMOVE_NODE:s=await KP(r);break;case Xr.OPERATIONS_ENUM.CLUSTER_STATUS:s=await WP(r);break;case Xr.OPERATIONS_ENUM.DESCRIBE_ALL:s=await sB();break;default:let n=`node '${Q_}' reply service received unrecognized request operation`;cr.error(n),s=new QP(W_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}cr.trace(s),t.respond(JP(s))}}a(rB,"handleRequest");async function sB(){try{return{status:W_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await zP.describeAll()}}catch(e){return cr.error(e),{status:W_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(sB,"getRemoteDescribeAll")});var nB=qf();(async()=>{try{await nB()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|