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,7 +2,7 @@
|
|
|
2
2
|
`,rw={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},sw=["*","%"],nw="unauthorized_access",iw="func_val",aw={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ow={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cw="hdb_ipc_server",_w="hdb_ipc_client_",uw={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"},lw={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Ew={STOPPED:"stopped",ONLINE:"online"},dw="3.x.x";sh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:Jd,HDB_SUPPORT_URL:Zd,HDB_PRICING_URL:vb,SUPPORT_HELP_MSG:Hb,LICENSE_HELP_MSG:zd,HDB_PROC_NAME:Kd,HDB_PROC_DESCRIPTOR:z_,CLUSTERING_LEAF_PROC_DESCRIPTOR:fa,CLUSTERING_HUB_PROC_DESCRIPTOR:Sa,SYSTEM_SCHEMA_NAME:rC,HASH_FOLDER_NAME:sC,HDB_HOME_DIR_NAME:nC,UPDATE_FILE_NAME:cC,LICENSE_KEY_DIR_NAME:aC,BOOT_PROPS_FILE_NAME:oC,JOB_TYPE_ENUM:FC,JOB_STATUS_ENUM:DC,SYSTEM_TABLE_NAMES:bC,SYSTEM_TABLE_HASH_ATTRIBUTES:CC,OPERATIONS_ENUM:I,VALID_S3_FILE_TYPES:MC,S3_BUCKET_AUTH_KEYS:PC,VALID_SQL_OPS_ENUM:BC,GEO_CONVERSION_ENUM:HC,HDB_SETTINGS_NAMES:eh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:qC,SERVICE_ACTIONS_ENUM:vC,CLUSTER_MESSAGE_TYPE_ENUM:VC,CLUSTER_CONNECTION_DIRECTION_ENUM:$C,CLUSTER_EVENTS_DEFS_ENUM:KC,PERIOD_REGEX:xb,DOUBLE_PERIOD_REGEX:Yb,UNICODE_PERIOD:Kb,FORWARD_SLASH_REGEX:Wb,UNICODE_FORWARD_SLASH:Qb,ESCAPED_FORWARD_SLASH_REGEX:Jb,ESCAPED_PERIOD_REGEX:Xb,ESCAPED_DOUBLE_PERIOD_REGEX:Zb,REG_KEY_FILE_NAME:UC,RESTART_TIMEOUT_MS:lC,HDB_FILE_PERMISSIONS:EC,SCHEMA_DIR_NAME:SC,TRANSACTIONS_DIR_NAME:fC,LIMIT_COUNT_NAME:TC,ID_ATTRIBUTE_STRING:mC,INSERT_MODULE_ENUM:gC,UPGRADE_JSON_FIELD_NAMES_ENUM:IC,RESTART_CODE:_C,RESTART_CODE_NUM:uC,CLUSTER_OPERATIONS:Dr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:LC,HDB_INTERNAL_SC_CHANNEL_PREFIX:dt,INTERNAL_SC_CHANNELS:wC,CLUSTERING_MESSAGE_TYPES:jC,HDB_FILE_SUFFIX:iC,BLOB_FOLDER_NAME:dC,HDB_TRASH_DIR:hC,ORIGINATOR_SET_VALUE:ew,LICENSE_VALUES:xC,RAM_ALLOCATION_ENUM:YC,STORAGE_TYPES_ENUM:kC,TIME_STAMP_NAMES_ENUM:th,TIME_STAMP_NAMES:XC,PERMS_UPDATE_RELEASE_TIMESTAMP:ZC,SEARCH_NOT_FOUND_MESSAGE:qb,SEARCH_ATTRIBUTE_NOT_FOUND:Gb,LICENSE_ROLE_DENIED_RESPONSE:Fb,LICENSE_MAX_CONNS_REACHED:Vb,BASIC_LICENSE_MAX_NON_CU_ROLES:Xd,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Bb,VALUE_SEARCH_COMPARATORS:rh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:zC,LICENSE_FILE_NAME:yC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:WC,NEW_LINE:tw,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:kb,MOMENT_DAYS_TAG:zb,API_TURNOVER_SEC:jb,LOOPBACK:$b,CODE_EXTENSION:xn,WILDCARD_SEARCH_VALUE:eC,NODE_ERROR_CODES:QC,JAVASCRIPT_EXTENSION:Yd,PERMS_CRUD_ENUM:rw,UNAUTHORIZED_PERMISSION_NAME:nw,SEARCH_WILDCARDS:sw,FUNC_VAL:iw,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:aw,JWT_ENUM:ow,CLUSTERING_FLAG:JC,RUN_LOG:AC,INSTALL_LOG:RC,IPC_SERVER_MODULE:Qd,HDB_IPC_SERVER:cw,IPC_EVENT_TYPES:uw,HDB_IPC_CLIENT_PREFIX:_w,CUSTOM_FUNCTION_PROC_NAME:Wd,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ha,SERVICES:lw,MEM_SETTING_KEY:tC,HDB_RESTART_SCRIPT:Ib,PROCESS_DESCRIPTORS:Z_,SERVICE_SERVERS:yb,SERVICE_SERVERS_CWD:da,PROCESS_DESCRIPTORS_VALIDATE:Lb,LAUNCH_SERVICE_SCRIPTS:Db,LOG_LEVELS:wb,PROCESS_NAME_ENV_PROP:pC,PROCESS_LOG_NAMES:Cb,PM2_PROCESS_STATUSES:Ew,CONFIG_PARAM_MAP:GC,CONFIG_PARAMS:f,HDB_CONFIG_FILE:Ob,HDB_DEFAULT_CONFIG_FILE:Nb,ROLE_TYPES_ENUM:Mb,BOOT_PROP_PARAMS:OC,INSTALL_PROMPTS:NC,HDB_ROOT_DIR_NAME:gb,CLUSTERING_PROCESSES:Ub,FOREGROUND_PID_FILE:bb,PACKAGE_ROOT:qt,PRE_4_0_0_VERSION:dw}});var tu=h((SJ,ah)=>{"use strict";var nh=require("minimist");ah.exports=hw;function hw(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ih(process.env),s=ih(nh(process.argv))):(r=process.env,s=nh(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(hw,"assignCMDENVVariables");function ih(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ih,"objKeysToLowerCase")});var g=h((fJ,dh)=>{"use strict";var is=require("fs-extra"),as=require("path"),ch=require("yaml"),_h=require("properties-reader"),me=T(),Sw=tu(),fw=require("os"),{PACKAGE_ROOT:nu}=T(),rt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ta=as.join(nu,"logs"),Mr=process.env.pm_id===void 0,Tw=as.join(nu,"config/yaml/",me.HDB_DEFAULT_CONFIG_FILE),iu=process.env.PROCESS_NAME===void 0?me.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,xs,Xt,lr,tt,ru,Ys;Ys===void 0&&uh();dh.exports={createLogFile:mw,notify:pw,fatal:Ow,error:su,warn:Nw,info:Rw,debug:Aw,trace:Eh,setLogLevel:Iw,log_level:tt};function uh(){try{if(Ys===void 0){let e=gw();Ys=_h(e),{level:tt,config_log_path:ru,to_file:Xt,to_stream:lr}=bw(Ys.get("settings_path"))}}catch(e){if(Ys=void 0,e.code===me.NODE_ERROR_CODES.ENOENT){let t=Sw(Object.keys(me.CONFIG_PARAM_MAP),!0);for(let i in t){let o=me.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let c=t[i];if(o===me.CONFIG_PARAMS.LOGGING_LEVEL){tt=c;continue}if(o===me.CONFIG_PARAMS.LOGGING_STDSTREAMS){lr=c;continue}o===me.CONFIG_PARAMS.LOGGING_FILE&&(Xt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Cw();Xt=Xt===void 0?s:Xt,Xt=oh(Xt),lr=lr===void 0?n:lr,lr=oh(lr),tt=tt===void 0?r:tt,ru=Ta;return}throw su("Error initializing log settings"),su(e),e}}a(uh,"initLogSettings");function mw(e,t){if(!Mr){Eh("createLogFile should only be used if the process is not being managed by pm2");return}Ys===void 0&&uh(),iu=t;let r;e===me.PROCESS_LOG_NAMES.INSTALL?r=Ta:r=ru,Xt&&(xs=as.join(r,e),is.ensureFileSync(xs))}a(mw,"createLogFile");function os(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let c=t[o];c instanceof Error&&c.stack?s+=c.stack:typeof c=="object"?s+=JSON.stringify(c):s+=c,o<i&&(s+=" ")}return`{"process_name": "${iu}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
3
|
`}a(os,"createLogRecord");function lh(e){xs===void 0&&(iu=me.PROCESS_DESCRIPTORS.INSTALL,is.ensureDirSync(Ta),xs=as.join(Ta,me.PROCESS_LOG_NAMES.INSTALL),is.ensureFileSync(xs)),is.appendFileSync(xs,e)}a(lh,"writeToLogFile");function ma(e){Xt&&lh(e),lr&&process.stdout.write(e)}a(ma,"nonPm2LogStdOut");function au(e){Xt&&lh(e),lr&&process.stderr.write(e)}a(au,"nonPm2LogStdErr");function Rw(...e){if(rt[tt]<=rt.info){let t=os("info",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(Rw,"info");function Eh(...e){if(rt[tt]<=rt.trace){let t=os("trace",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(Eh,"trace");function su(...e){if(rt[tt]<=rt.error){let t=os("error",e);if(Mr){au(t);return}process.stderr.write(t)}}a(su,"error");function Aw(...e){if(rt[tt]<=rt.debug){let t=os("debug",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(Aw,"debug");function pw(...e){if(rt[tt]<=rt.notify){let t=os("notify",e);if(Mr){ma(t);return}process.stdout.write(t)}}a(pw,"notify");function Ow(...e){if(rt[tt]<=rt.fatal){let t=os("fatal",e);if(Mr){au(t);return}process.stderr.write(t)}}a(Ow,"fatal");function Nw(...e){if(rt[tt]<=rt.warn){let t=os("warn",e);if(Mr){au(t);return}process.stderr.write(t)}}a(Nw,"warn");function gw(){let e;try{e=fw.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=as.join(e,me.HDB_HOME_DIR_NAME,me.BOOT_PROPS_FILE_NAME);return is.existsSync(t)||(t=as.join(nu,"utility/hdb_boot_properties.file")),t}a(gw,"getPropsFilePath");function Iw(e){tt=e}a(Iw,"setLogLevel");function oh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(oh,"autoCastBoolean");function bw(e){try{if(e.includes("config/settings.js")){let o=_h(e);return{level:o.get(me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:as.dirname(o.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=ch.parseDocument(is.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===me.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(bw,"getLogConfig");function Cw(){try{let e=ch.parseDocument(is.readFileSync(Tw,"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(Cw,"getDefaultConfig")});var Sh=h((TJ,hh)=>{"use strict";var ww=require("util"),Lw=require("path"),Uw=require("child_process"),yw=ww.promisify(Uw.execFile),Dw=1e3*1e3*10;hh.exports={findPs:Mw};async function Mw(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await yw("ps",["wwxo",`pid,${r}`],{maxBuffer:Dw});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:Lw.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(Mw,"findPs")});var Ye=h((mJ,Th)=>{"use strict";var Pw="__dbis__",Bw="__environment_name__",vw="__dbi_defintion__",Hw={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"},qw=["__createdtime__","__updatedtime__"],Gw="\uFFFF",fh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Fw=Object.values(fh);Th.exports={INTERNAL_DBIS_NAME:Pw,DBI_DEFINITION_NAME:vw,SEARCH_TYPES:Hw,TIMESTAMP_NAMES:qw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Bw,TRANSACTIONS_DBI_NAMES_ENUM:fh,TRANSACTIONS_DBIS:Fw,OVERFLOW_MARKER:Gw}});var Ke=h((RJ,bh)=>{"use strict";var mh=T(),Rh=Ye(),Ah={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},ph=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Oh={500:ph("There was an error processing your request."),400:"Invalid request"},Vw=Oh[Ah.INTERNAL_SERVER_ERROR],$w={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.`},kw={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},xw={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"},Yw={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 ${Rh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Rh.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"},Kw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${mh.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 ${mh.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"},Nh={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"},Ww={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."},Qw={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`},Jw={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"},Xw={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Zw={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`},gh={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.`},Ih={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}`},zw={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."},jw={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},eL={...Nh,...xw,...$w,...Ww,...Qw,...Jw,...Xw,...Zw,...Kw,...gh,...Ih,...zw,...jw,...kw};bh.exports={CHECK_LOGS_WRAPPER:ph,HDB_ERROR_MSGS:eL,DEFAULT_ERROR_MSGS:Oh,DEFAULT_ERROR_RESP:Vw,HTTP_STATUS_CODES:Ah,LMDB_ERRORS_ENUM:Yw,AUTHENTICATION_ERROR_MSGS:Nh,VALIDATION_ERROR_MSGS:gh,IPC_ERRORS:Ih}});var D=h((AJ,Lh)=>{"use strict";var Ks=Ke(),tL=g(),rL=T(),Yn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Ch),this.http_resp_code=s||Ks.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ks.DEFAULT_ERROR_MSGS[s]?Ks.DEFAULT_ERROR_MSGS[s]:Ks.DEFAULT_ERROR_MSGS[Ks.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&&tL[n](i)}};a(Yn,"HdbError");function Ch(e,t,r,s=rL.LOG_LEVELS.ERROR,n=null,i=!1){if(wh(e))return e;let o=new Yn(e,t,r,s,n);return i&&delete o.stack,o}a(Ch,"handleHDBError");function wh(e){return e.__proto__.constructor.name===Yn.name}a(wh,"isHDBError");Lh.exports={isHDBError:wh,handleHDBError:Ch,hdb_errors:Ks}});var b=h((OJ,xh)=>{"use strict";var cs=require("path"),sL=require("fs-extra"),Ie=g(),Uh=require("fs-extra"),nL=require("truncate-utf8-bytes"),Kn=require("os"),iL=require("net"),aL=require("recursive-iterator"),Ue=T(),Bh=Sh(),yh=require("papaparse"),Ra=require("moment"),{inspect:oL}=require("util"),Dh=require("is-number"),pJ=require("lodash"),{hdb_errors:Aa}=D(),vh=require("util").promisify(setTimeout),cL=100,_L=5,uL="",lL=4,Mh=255,Ph={true:!0,false:!1,undefined:null,null:null,NaN:NaN};xh.exports={isEmpty:ht,isEmptyOrZeroLength:Zt,arrayHasEmptyValues:hL,arrayHasEmptyOrZeroLengthValues:SL,buildFolderPath:fL,isBoolean:Hh,errorizeMessage:EL,stripFileExtension:mL,autoCast:RL,autoCastJSONDeep:ou,removeDir:pL,compareVersions:OL,isCompatibleDataVersion:NL,escapeRawValue:Gh,unescapeValue:gL,stringifyProps:IL,valueConverter:bL,timeoutPromise:wL,isClusterOperation:UL,getClusterUser:ML,sendTransactionToSocketCluster:yL,checkGlobalSchemaTable:DL,getHomeDir:Fh,getPropsFilePath:CL,promisifyPapaParse:PL,removeBOM:Vh,createEventPromise:BL,checkProcessRunning:vL,checkSchemaTableExist:HL,checkSchemaExists:$h,checkTableExists:kh,getStartOfTomorrowInSeconds:qL,getLimitKey:GL,isObject:TL,isNotEmptyAndHasValue:dL,autoCasterIsNumberCheck:qh,backtickASTSchemaItems:FL,isPortTaken:LL,stopProcess:VL,createForkArgs:$L,autoCastBoolean:kL,async_set_timeout:vh,getTableHashAttribute:xL,doesSchemaExist:YL,doesTableExist:KL,stringifyObj:WL,ms_to_time:QL,changeExtension:JL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function EL(e){return e instanceof Error?e:new Error(e)}a(EL,"errorizeMessage");function ht(e){return e==null}a(ht,"isEmpty");function dL(e){return!ht(e)&&(e||e===0||e===""||Hh(e))}a(dL,"isNotEmptyAndHasValue");function Zt(e){return ht(e)||e.length===0||e.size===0}a(Zt,"isEmptyOrZeroLength");function hL(e){if(ht(e))return!0;for(let t=0;t<e.length;t++)if(ht(e[t]))return!0;return!1}a(hL,"arrayHasEmptyValues");function SL(e){if(Zt(e))return!0;for(let t=0;t<e.length;t++)if(Zt(e[t]))return!0;return!1}a(SL,"arrayHasEmptyOrZeroLengthValues");function fL(...e){try{return e.join(cs.sep)}catch{console.error(e)}}a(fL,"buildFolderPath");function Hh(e){return ht(e)?!1:e===!0||e===!1}a(Hh,"isBoolean");function TL(e){return ht(e)?!1:typeof e=="object"}a(TL,"isObject");function mL(e){return Zt(e)?uL:e.slice(0,-lL)}a(mL,"stripFileExtension");function RL(e){return ht(e)||e===""||typeof e!="string"?e:Ph[e]!==void 0?Ph[e]:qh(e)===!0?Number(e):e}a(RL,"autoCast");function AL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AL,"autoCastJSON");function ou(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=ou(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ou(r);s!==r&&(e[t]=s)}return e}else return AL(e)}a(ou,"autoCastJSONDeep");function qh(e){if(e.startsWith("0.")&&Dh(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Dh(e))}a(qh,"autoCasterIsNumberCheck");async function pL(e){if(Zt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Uh.emptyDir(e),await Uh.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(pL,"removeDir");function OL(e,t){if(Zt(e)){Ie.info("Invalid current version sent as parameter.");return}if(Zt(t)){Ie.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(OL,"compareVersions");function NL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(NL,"isCompatibleDataVersion");function Gh(e){if(ht(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(Gh,"escapeRawValue");function gL(e){if(ht(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(gL,"unescapeValue");function IL(e,t){if(ht(e))return Ie.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Kn.EOL}!Zt(s)&&s[0]===";"?r+=" "+s+n+Kn.EOL:Zt(s)||(r+=s+"="+n+Kn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(IL,"stringifyProps");function bL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(Gh(t)),s=Buffer.byteLength(r)>Mh?nL(r,Mh)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(bL,"valueConverter");function Fh(){let e;try{e=Kn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Fh,"getHomeDir");function CL(){let e=cs.join(Fh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return sL.existsSync(e)||(e=cs.join(__dirname,"../","hdb_boot_properties.file")),e}a(CL,"getPropsFilePath");function wL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(wL,"timeoutPromise");async function LL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=iL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(LL,"isPortTaken");function UL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(UL,"isClusterOperation");function yL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(yL,"sendTransactionToSocketCluster");function DL(e,t){if(!global.hdb_schema[e])return Aa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Aa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(DL,"checkGlobalSchemaTable");function ML(e,t){if(ht(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ht(e)||Zt(e)){Ie.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ML,"getClusterUser");function PL(){yh.parsePromise=function(e,t){return new Promise(function(r,s){yh.parse(e,{header:!0,transformHeader:Vh,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(PL,"promisifyPapaParse");function Vh(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Vh,"removeBOM");function BL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${oL(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(BL,"createEventPromise");async function vL(e){let t=!0,r=0;do await vh(cL*r++),(await Bh.findPs(e)).length>0&&(t=!1);while(t&&r<_L);if(t)throw new Error(`process ${e} was not started`)}a(vL,"checkProcessRunning");function HL(e,t){let r=$h(e);if(r)return r;let s=kh(e,t);if(s)return s}a(HL,"checkSchemaTableExist");function $h(e){if(!global.hdb_schema[e])return Aa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a($h,"checkSchemaExists");function kh(e,t){if(!global.hdb_schema[e][t])return Aa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kh,"checkTableExists");function qL(){let e=Ra().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=Ra().utc().unix();return e-t}a(qL,"getStartOfTomorrowInSeconds");function GL(){return Ra().utc().format("DD-MM-YYYY")}a(GL,"getLimitKey");function FL(e){try{let t=new aL(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(FL,"backtickASTSchemaItems");async function VL(e){let t=Kn.userInfo();(await Bh.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(VL,"stopProcess");function $L(e){return[e]}a($L,"createForkArgs");function kL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kL,"autoCastBoolean");function xL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(xL,"getTableHashAttribute");function YL(e){return global?.hdb_schema?.[e]!==void 0}a(YL,"doesSchemaExist");function KL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(KL,"doesTableExist");function WL(e){try{return JSON.stringify(e)}catch{return e}}a(WL,"stringifyObj");function QL(e){let t=Ra.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(QL,"ms_to_time");function JL(e,t){let r=cs.basename(e,cs.extname(e));return cs.join(cs.dirname(e),r+t)}a(JL,"changeExtension")});var Ee=h((NJ,Yh)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Yh.exports={validateObject:XL,validateObjectAsync:ZL,validateBySchema:zL};function XL(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(XL,"validateObject");async function ZL(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(ZL,"validateObjectAsync");function zL(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(zL,"validateBySchema")});var _u=h((gJ,Wh)=>{"use strict";var jL=require("fs-extra"),F=require("joi"),eU=require("os"),{boolean:ye,string:Er,number:zt,array:cu}=F.types(),Kh=require("path"),tU=g(),pa=b(),rU=Ee(),sU="log",nU="custom_functions",iU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",aU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",oU="rootPath config parameter is undefined",cU="clustering.enabled config parameter is undefined",Pr=zt.min(0).required(),Oa=cu.items({host:Er.required(),port:Pr}).empty(null),Wn;Wh.exports={configValidator:_U,routesValidator:SU,route_constraints:Oa};function _U(e){if(Wn=e.rootPath,pa.isEmpty(Wn))throw oU;let t=ye.required(),r=F.valid("production","development").required(),s=zt.min(1).max(1e3).empty(null).default(dU),n=Er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hU),i=F.custom(lU).messages({"any.custom":"{:#label} {:#error}"}),o=Er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(pa.isEmpty(c))throw cU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:Pr,routes:Oa}).required()}).required(),leafNodes:F.object({network:F.object({port:Pr}).required()}).required(),network:F.object({port:Pr}).required()}).required(),leafServer:F.object({network:F.object({port:Pr,routes:Oa}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:cu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:Pr})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:Er.required(),maxSize:Er.custom(EU).required(),retain:zt.min(0).required(),rotate:ye.required(),rotateInterval:Er.required(),rotateModule:ye.required(),timezone:Er.required(),workerInterval:zt.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:cu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(_U,"configValidator");function uU(e){return jL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(uU,"doesPathExist");function lU(e,t){if(e===null)return;F.assert(e,Er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=uU(e);return r?t.message(r):e}a(lU,"validatePemFile");function EU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(iU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(aU)}a(EU,"validateRotationMaxSize");function dU(e,t){let r=t.state.path.join("."),s=eU.cpus().length,n=s-1;return n<=2&&(n=2),tU.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(dU,"setDefaultThreads");function hU(e,t){if(!pa.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(pa.isEmpty(Wn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Kh.join(Wn,nU);case"logging.root":return Kh.join(Wn,sU);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hU,"setDefaultRoot");function SU(e){let t=F.object({routes:Oa});return rU.validateBySchema({routes:e},t)}a(SU,"routesValidator")});var dr=h((IJ,eS)=>{"use strict";var re=T(),It=b(),We=g(),{configValidator:fU,routesValidator:Qh}=_u(),Gt=require("fs-extra"),TU=require("yaml"),Ws=require("path"),mU=require("is-number"),Ia=require("properties-reader"),RU=require("lodash"),{handleHDBError:AU}=D(),{HTTP_STATUS_CODES:pU,HDB_ERROR_MSGS:Na}=Ke(),{PACKAGE_ROOT:OU}=T(),NU="Unable to get config value because config is uninitialized",gU="Config successfully initialized",IU="Error backing up config file",bU="Empty parameter sent to getConfigValue",Jh=Ws.join(OU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),CU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ga,nt;eS.exports={createConfigFile:wU,getDefaultConfig:LU,getConfigValue:Xh,initConfig:Zh,flattenConfig:_s,updateConfigValue:zh,updateConfigObject:UU,getConfiguration:yU,setConfiguration:DU,readConfigFile:Eu,getClusteringRoutes:MU,initOldConfig:jh,getConfigFromFile:PU};function wU(e){let t=Qs(Jh);ga=_s(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=uu(o,e[i]);try{t.setIn([...c],_)}catch(u){We.error(u)}}}lu(t);let r=t.toJSON();nt=_s(r);let s=t.getIn(["rootPath"]),n=Ws.join(s,re.HDB_CONFIG_FILE);Gt.createFileSync(n),Gt.writeFileSync(n,String(t)),We.trace(`Config file written to ${n}`)}a(wU,"createConfigFile");function LU(e){if(ga===void 0){let r=Qs(Jh);ga=_s(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ga[t.toLowerCase()]}a(LU,"getDefaultConfig");function Xh(e){if(It.isEmpty(e)){We.error(bU);return}if(nt===void 0){We.trace(NU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return nt[t.toLowerCase()]}a(Xh,"getConfigValue");function Zh(e=!1){if(nt===void 0||e){let t=It.getPropsFilePath();try{Gt.accessSync(t,Gt.constants.F_OK|Gt.constants.R_OK)}catch(o){throw We.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ia(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{jh(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Qs(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){We.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 We.error(o),new Error(`Error reading HarperDB config file at ${s}`)}lu(n);let i=n.toJSON();nt=_s(i),We.trace(gU)}}a(Zh,"initConfig");function lu(e){let t=e.toJSON(),r=fU(t);if(r.error)throw Na.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(lu,"validateConfig");function UU(e,t){nt===void 0&&(nt={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){We.trace(`Unable to update config object because config param '${e}' does not exist`);return}nt[r.toLowerCase()]=t}a(UU,"updateConfigObject");function zh(e,t,r=void 0,s=!1,n=!1){nt===void 0&&Zh();let i=Xh(re.CONFIG_PARAM_MAP.hdb_root),o=Ws.join(i,re.HDB_CONFIG_FILE),c=Qs(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=uu(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),S=uu(E,r[l]);try{c.setIn([...d],S)}catch(m){We.error(m)}}}lu(c);let _=c.getIn(["rootPath"]),u=Ws.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Ws.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Gt.copySync(o,l),We.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){We.error(IU),We.error(l)}Gt.writeFileSync(u,String(c)),n&&(nt=_s(c.toJSON())),We.trace(`Config parameter: ${e} updated with value: ${t}`)}a(zh,"updateConfigValue");function _s(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=_s(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(_s,"flattenConfig");function uu(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(mU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||It.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 It.autoCast(t)}a(uu,"castConfigValue");function yU(){let e=It.getPropsFilePath(),r=Ia(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Qs(r).toJSON()}a(yU,"getConfiguration");async function DU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return zh(void 0,void 0,n,!0),CU}catch(i){throw typeof i=="string"||i instanceof String?AU(i,i,pU.BAD_REQUEST,void 0,void 0,!0):i}}a(DU,"setConfiguration");function Eu(){let e=It.getPropsFilePath();try{Gt.accessSync(e,Gt.constants.F_OK|Gt.constants.R_OK)}catch(n){throw We.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ia(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Qs(r).toJSON()}a(Eu,"readConfigFile");function Qs(e){return TU.parseDocument(Gt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qs,"parseYamlDoc");function MU(){let e=Eu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=It.isEmptyOrZeroLength(t)?[]:t;let r=Qh(t);if(r)throw Na.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=It.isEmptyOrZeroLength(s)?[]:s;let n=Qh(s);if(n)throw Na.CONFIG_VALIDATION(n.message);if(!It.isEmptyOrZeroLength(s)&&!It.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!It.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Na.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(MU,"getClusteringRoutes");function jh(e){let t=Ia(e);nt={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(It.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?nt[n]=Ws.dirname(s):nt[n]=s}return nt}a(jh,"initOldConfig");function PU(e){let t=Eu();return RU.get(t,e.replaceAll("_","."))}a(PU,"getConfigFromFile")});var Y=h((bJ,rS)=>{"use strict";var du=require("fs-extra"),jt=require("path"),BU=require("os"),vU=require("properties-reader"),Qn=g(),Js=b(),M=T(),ba=dr(),HU="Error initializing environment manager",Ca="BOOT_PROPS_FILE_PATH",tS=!1,qU={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},hr={};rS.exports={BOOT_PROPS_FILE_PATH:Ca,getHdbBasePath:GU,setHdbBasePath:FU,get:VU,initSync:kU,setProperty:x,initTestEnvironment:xU};function GU(){return hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(GU,"getHdbBasePath");function FU(e){hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(FU,"setHdbBasePath");function VU(e){let t=ba.getConfigValue(e);return t===void 0?hr[e]:t}a(VU,"get");function x(e,t){qU[e]&&(hr[e]=t),ba.updateConfigObject(e,t)}a(x,"setProperty");function $U(){let e;try{e=Js.getPropsFilePath(),du.accessSync(e,du.constants.F_OK|du.constants.R_OK),tS=!0;let t=vU(e);return hr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),hr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),hr[Ca]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a($U,"doesPropFileExist");function kU(e=!1){try{(tS||$U())&&(ba.initConfig(e),hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ba.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(HU),Qn.error(t),console.error(t),process.exit(1)}}a(kU,"initSync");function xU(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=jt.join(__dirname,"../../","unitTests");hr[Ca]=jt.join(_,"hdb_boot_properties.file"),x(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,jt.join(_,"settings.test")),x(M.HDB_SETTINGS_NAMES.INSTALL_USER,BU.userInfo().username),x(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.HDB_SETTINGS_NAMES.CERT_KEY,jt.join(_,"envDir","utility","keys","certificate.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,jt.join(_,"envDir","utility","keys","certificate.pem")),x(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),x(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,jt.join(_,"envDir","log")),x(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),x(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),x(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,jt.join(_,"envDir")),x(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Js.isEmpty(n)?!0:n),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Js.isEmpty(n)?!0:n),x(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),x(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Js.isEmpty(i)?!1:i),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Js.isEmpty(i)?!1:i),x(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),x(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),x(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,jt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),x(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Js.isEmpty(c)?!1:c),o&&(x("CORS_ACCESSLIST",o),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(x(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(x(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(x(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ca}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(xU,"initTestEnvironment")});var wa=h((CJ,YU)=>{YU.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 nS=h((wJ,sS)=>{var KU=require("fastify-plugin");sS.exports=KU(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var us=h((LJ,WU)=>{WU.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 TS=h((yJ,fS)=>{"use strict";var hu=require("recursive-iterator"),QU=require("alasql"),Su=require("clone"),iS=b(),{handleHDBError:aS,hdb_errors:JU}=D(),{HDB_ERROR_MSGS:oS,HTTP_STATUS_CODES:cS}=JU,XU=["DISTINCT_ARRAY"],_S=Symbol("validateTables"),fu=Symbol("validateTable"),UJ=Symbol("getAllColumns"),uS=Symbol("validateAllColumns"),La=Symbol("findColumn"),lS=Symbol("validateOrderBy"),Jn=Symbol("validateSegment"),Tu=Symbol("validateColumn"),ES=Symbol("setColumnsForTable"),dS=Symbol("checkColumnsForAsterisk"),hS=Symbol("validateGroupBy"),SS=Symbol("hasColumns"),Ua=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_S](),this[dS](),this[uS]()}[_S](){if(this[SS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fu](t.table)})}}[SS](){let t=!1,r=new hu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw aS(new Error,oS.SCHEMA_NOT_FOUND(t.databaseid),cS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw aS(new Error,oS.TABLE_NOT_FOUND(t.databaseid,t.tableid),cS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Su(s);n.table=Su(t),this.attributes.push(n)})}[La](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)}[dS](){let t=new hu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ES](r.tableid)}[ES](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new QU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[uS](){this[Jn](this.statement.columns,!1),this[Jn](this.statement.joins,!1),this[Jn](this.statement.where,!1),this[hS](this.statement.group,!1),this[Jn](this.statement.order,!0)}[Jn](t,r){if(!t)return;let s=new hu(t),n=[];for(let{node:i,path:o}of s)!iS.isEmpty(i)&&!iS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[lS](i):n.push(this[Tu](i)));return n}[hS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&XU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Su(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[La](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[La](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[lS](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[Tu](t)}[Tu](t){let r=this[La](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(Ua,"SelectValidator");fS.exports=Ua});var mu=h((DJ,mS)=>{"use strict";var ya=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(ya,"BridgeMethods");mS.exports=ya});var ls=h((BJ,OS)=>{"use strict";var RS=Ke().LMDB_ERRORS_ENUM,MJ=require("lmdb"),ZU=Ye(),PJ=require("buffer").Buffer,zU=require("microtime"),{OVERFLOW_MARKER:AS,MAX_SEARCH_KEY_LENGTH:Da}=ZU,pS=["number","string","symbol","boolean","bigint"];function jU(e){if(!e)throw new Error(RS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(RS.INVALID_ENVIRONMENT)}a(jU,"validateEnv");function ey(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(ey,"stringifyData");function ty(e){return e instanceof Date?e.valueOf():e}a(ty,"convertKeyValueToWrite");function ry(e){if(e==null)return;if(pS.includes(typeof e))return e.length>Da?[e.slice(0,Da)+AS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];pS.includes(typeof n)&&(n.length>Da?t.push(n.slice(0,Da)+AS):t.push(n))}}return t}a(ry,"getIndexedValues");function sy(){let e=zU.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(sy,"getMicroTime");OS.exports={validateEnv:jU,stringifyData:ey,convertKeyValueToWrite:ty,getMicroTime:sy,getIndexedValues:ry}});var gS=h((vJ,NS)=>{"use strict";var Ma=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Ma,"DBIDefinition");NS.exports=Ma});var bS=h((HJ,IS)=>{"use strict";var Pa=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(Pa,"OpenDBIObject");IS.exports=Pa});var wS=h((qJ,CS)=>{"use strict";var Ba=class{constructor(t,r,s,n,i=!1,o=!1,c=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,c!==void 0&&(this.overlappingSync=c)}};a(Ba,"OpenEnvironmentObject");CS.exports=Ba});var X=h((FJ,FS)=>{"use strict";var Ru=require("lmdb"),bt=require("fs-extra"),Ft=require("path"),Ha=ls(),LS=g(),De=Ke().LMDB_ERRORS_ENUM,qa=gS(),Au=bS(),US=wS(),Br=Ye(),GJ=T(),Xn=Y();Xn.initSync();var yS=Xn.get("STORAGE_WRITEASYNC")===!0||Xn.get("STORAGE_WRITEASYNC")==="true"||Xn.get("STORAGE_WRITEASYNC")==="TRUE",DS=Xn.get("STORAGE_OVERLAPPINGSYNC"),MS=1024*1024*1024,PS=1e4,BS=1e3,Vt=Br.INTERNAL_DBIS_NAME,vS=Br.DBI_DEFINITION_NAME,ny="data.mdb",iy="lock.mdb",Zn=".mdb",ay="-lock",va=class{constructor(t,r,s=!1){this.dbi=Ct(t,r),this.key_type=this.dbi[Br.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Br.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ru.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(va,"TransactionCursor");function pu(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(pu,"pathEnvNameValidation");async function Ou(e,t,r=!0){try{await bt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Ft.join(e,t+Zn);return await bt.access(s,bt.constants.R_OK|bt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bt.access(Ft.join(e,t,ny),bt.constants.R_OK|bt.constants.F_OK),Ft.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(Ou,"validateEnvironmentPath");function Ga(e,t){if(Ha.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ga,"validateEnvDBIName");async function oy(e,t,r=!1,s=!1){pu(e,t),t=t.toString();try{return await Ou(e,t,s),Nu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Ft.join(e,t);await bt.mkdirp(s?i:e);let o=new US(s?i:i+Zn,MS,PS,BS,!1,yS,DS),c=Ru.open(o);c.dbis=Object.create(null);let _=new Au(!1);c.openDB(Vt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=gu(e,t,r);return c[Br.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(oy,"createEnvironment");async function cy(e,t,r,s=!0){let n=await Nu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await bt.access(Ft.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(cy,"copyEnvironment");async function Nu(e,t,r=!1){pu(e,t),t=t.toString();let s=gu(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 Ou(e,t),i=Ft.join(e,t+Zn),o=n!=i,c=new US(n,MS,PS,BS,o,yS,DS),_=Ru.open(c);_.dbis=Object.create(null);let u=qS(_);for(let l=0;l<u.length;l++)Ct(_,u[l]);return _[Br.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Nu,"openEnvironment");async function _y(e,t,r=!1){pu(e,t),t=t.toString();let s=Ft.join(e,t+Zn),n=await Ou(e,t);if(global.lmdb_map!==void 0){let i=gu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await HS(o),delete global.lmdb_map[i]}}await bt.remove(n),await bt.remove(n===s?n+ay:Ft.join(Ft.dirname(n),iy))}a(_y,"deleteEnvironment");async function HS(e){Ha.validateEnv(e);let t=e[Br.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(HS,"closeEnvironment");function gu(e,t,r=!1){let n=`${Ft.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(gu,"getCachedEnvironmentName");function uy(e){Ha.validateEnv(e);let t=Object.create(null),r=Ct(e,Vt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Vt)try{t[s]=Object.assign(new qa,n)}catch{LS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(uy,"listDBIDefinitions");function qS(e){Ha.validateEnv(e);let t=[],r=Ct(e,Vt);for(let{key:s}of r.getRange({start:!1}))s!==Vt&&t.push(s);return t}a(qS,"listDBIs");function ly(e,t){let s=Ct(e,Vt).getEntry(t),n=new qa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{LS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ly,"getDBIDefinition");function GS(e,t,r,s=!1){if(Ga(e,t),t=t.toString(),t===Vt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ct(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Au(r,s===!0),o=e.openDB(t,i),c=new qa(r===!0,s);return o[vS]=c,Ct(e,Vt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(GS,"createDBI");function Ct(e,t){if(Ga(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Vt?r=ly(e,t):r=new qa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Au(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(De.DBI_DOES_NOT_EXIST):n}return s[vS]=r,e.dbis[t]=s,s}a(Ct,"openDBI");function Ey(e,t){Ga(e,t),t=t.toString();let r=Ct(e,t),s=r.getStats();return r[Br.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Ey,"statDBI");async function dy(e,t){try{let r=Ft.join(e,t+Zn);return(await bt.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(dy,"environmentDataSize");function hy(e,t){if(Ga(e,t),t=t.toString(),t===Vt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);Ct(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ct(e,Vt).removeSync(t)}a(hy,"dropDBI");function Sy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ct(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)GS(e,n,n!==t,n===t);else throw i}}}a(Sy,"initializeDBIs");FS.exports={openDBI:Ct,openEnvironment:Nu,createEnvironment:oy,listDBIs:qS,listDBIDefinitions:uy,createDBI:GS,dropDBI:hy,statDBI:Ey,deleteEnvironment:_y,initializeDBIs:Sy,TransactionCursor:va,environmentDataSize:dy,copyEnvironment:cy,closeEnvironment:HS}});var $S=h((VJ,VS)=>{"use strict";var Fa=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Fa,"InsertRecordsResponseObject");VS.exports=Fa});var xS=h(($J,kS)=>{"use strict";var Va=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(Va,"UpdateRecordsResponseObject");kS.exports=Va});var KS=h((kJ,YS)=>{"use strict";var $a=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a($a,"UpsertRecordsResponseObject");YS.exports=$a});var Xs=h((WJ,QS)=>{"use strict";var fy=X(),Ty=$S(),my=xS(),Ry=KS(),jn=ls(),zn=Ke().LMDB_ERRORS_ENUM,Ay=Ye(),vr=T(),py=b(),Oy=require("uuid"),xJ=require("lmdb"),{handleHDBError:Ny,hdb_errors:gy}=D(),{OVERFLOW_MARKER:YJ,MAX_SEARCH_KEY_LENGTH:KJ}=Ay,Iu=vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Es=vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Iy(e,t,r,s,n=!0){Lu(e,t,r,s),bu(e,t,r);let i=new Ty,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];WS(u,!0,n);let l=by(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Cu(o,c,s,i)}a(Iy,"insertRecords");function by(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][vr.FUNC_VAL],s[o]=c)}let _=jn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[Es])})}a(by,"insertRecord");function Cy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Cy,"removeSkippedRecords");function WS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Es]))&&(e[Es]=s),t===!0?(r===!0||!Number.isInteger(e[Iu]))&&(e[Iu]=s):delete e[Iu]}a(WS,"setTimestamps");function bu(e,t,r){r.indexOf(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),fy.initializeDBIs(e,t,r)}a(bu,"initializeTransaction");async function wy(e,t,r,s,n=!0){Lu(e,t,r,s),bu(e,t,r);let i=new my,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=wu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Cu(c,_,s,i,o)}a(wy,"updateRecords");async function Ly(e,t,r,s,n=!0){try{Lu(e,t,r,s)}catch(_){throw Ny(_,_.message,gy.HTTP_STATUS_CODES.BAD_REQUEST)}bu(e,t,r);let i=new Ry,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;py.isEmpty(u[t])?(l=Oy.v4(),u[t]=l):l=u[t];let E=wu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Cu(o,c,s,i)}a(Ly,"upsertRecords");async function Cu(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=jn.getMicroTime(),Cy(r,n),s}a(Cu,"finalizeWrite");function wu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(WS(r,!l,o),Number.isInteger(r[Es])&&u[Es]>r[Es])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let z=R([[u]]);Array.isArray(z)&&(R=z[0][vr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=jn.getIndexedValues(L);if(B)for(let z=0,V=B.length;z<V;z++)w.remove(B[z],s);if(B=jn.getIndexedValues(R),B)for(let z=0,V=B.length;z<V;z++)w.put(B[z],s)}let S=Object.assign({},u,r);c.put(s,S,S[Es])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:wu(e,t,r,s,n,i,o))}a(wu,"updateUpsertRecord");function Uy(e,t,r){if(jn.validateEnv(e),t===void 0)throw new Error(zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zn.WRITE_ATTRIBUTES_REQUIRED):new Error(zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Uy,"validateBasic");function Lu(e,t,r,s){if(Uy(e,t,r),!Array.isArray(s))throw s===void 0?new Error(zn.RECORDS_REQUIRED):new Error(zn.RECORDS_MUST_BE_ARRAY)}a(Lu,"validateWrite");QS.exports={insertRecords:Iy,updateRecords:wy,upsertRecords:Ly}});var te=h((QJ,XS)=>{"use strict";var Uu=T(),Zs=Y(),yu=require("path");Zs.initSync();var ka,xa,Ya;function JS(){if(ka!==void 0)return ka;if(Zs.getHdbBasePath()!==void 0)return ka=yu.join(Zs.getHdbBasePath(),Uu.SCHEMA_DIR_NAME),ka}a(JS,"getBaseSchemaPath");function yy(){if(xa!==void 0)return xa;if(Zs.getHdbBasePath()!==void 0)return xa=yu.join(JS(),Uu.SYSTEM_SCHEMA_NAME),xa}a(yy,"getSystemSchemaPath");function Dy(){if(Ya!==void 0)return Ya;if(Zs.getHdbBasePath()!==void 0)return Ya=yu.join(Zs.getHdbBasePath(),Uu.TRANSACTIONS_DIR_NAME),Ya}a(Dy,"getTransactionAuditStorePath");XS.exports={getBaseSchemaPath:JS,getSystemSchemaPath:yy,getTransactionAuditStorePath:Dy}});var Sr=h((JJ,jS)=>{"use strict";var zS=b(),ZS=T(),Wa=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Du=require("joi"),Ka={schema_format:{pattern:Wa,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},My=Du.alternatives(Du.string().min(1).max(Ka.schema_length.maximum).pattern(Wa).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Du.number()).required();function Py(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ka.schema_length.maximum?`'${e}' maximum of 250 characters`:Wa.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Py,"checkValidTable");function By(e,t){return zS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(By,"validateSchemaExists");function vy(e,t){let r=t.state.ancestors[0].schema;return zS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(vy,"validateTableExists");function Hy(e,t){return e.toLowerCase()===ZS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${ZS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Hy,"validateSchemaName");jS.exports={common_validators:Ka,schema_regex:Wa,hdb_schema_table:My,validateSchemaExists:By,validateTableExists:vy,validateSchemaName:Hy,checkValidTable:Py}});var Qa=h((XJ,ef)=>{var{common_validators:Hr}=Sr(),ei=Ee(),$t="is required",Z={schema:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},table:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},hash_attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length}};function ti(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(ti,"makeAttributesStrings");function qy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(qy,"schema_object");function Gy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(Gy,"table_object");function Fy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence={message:$t},ei.validateObject(e,Z)}a(Fy,"create_table_object");function Vy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence={message:$t},Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(Vy,"attribute_object");function $y(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a($y,"describe_table");function ky(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(ky,"validateTableResidence");ef.exports={schema_object:qy,create_table_object:Fy,table_object:Gy,attribute_object:Vy,describe_table:$y,validateTableResidence:ky}});var rf=h((ZJ,tf)=>{"use strict";var xy=require("uuid"),Ja=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||xy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ja,"CreateAttributeObject");tf.exports=Ja});var Za=h((zJ,sf)=>{"use strict";var Yy=rf(),Xa=class extends Yy{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Xa,"LMDBCreateAttributeObject");sf.exports=Xa});var af=h((jJ,nf)=>{"use strict";nf.exports=Wy;var Ky="inserted";function Wy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ky?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Wy,"returnObject")});var za=h((eX,cf)=>{"use strict";var Qy=T(),Mu=X(),Jy=Xs(),{getSystemSchemaPath:Xy,getBaseSchemaPath:Zy}=te(),zy=require("path"),jy=us(),eD=Qa(),tD=Za(),rD=af(),{handleHDBError:sD,hdb_errors:nD}=D(),iD=b(),Pu=jy.hdb_attribute,of=[];for(let e=0;e<Pu.attributes.length;e++)of.push(Pu.attributes[e].attribute);var aD="inserted";cf.exports=oD;async function oD(e){let t=eD.attribute_object(e);if(t)throw sD(new Error,t.message,nD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=iD.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 tD(e.schema,e.table,e.attribute,e.id);try{let n=await Mu.openEnvironment(zy.join(Zy(),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}`);Mu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Mu.openEnvironment(Xy(),Qy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await Jy.insertRecords(i,Pu.hash_attribute,of,[s]);return rD(aD,o,{records:[s]},c)}catch(n){throw n}}a(oD,"lmdbCreateAttribute")});var vu=h((tX,uf)=>{var{hdb_schema_table:_f}=Sr(),cD=Ee(),Bu=require("joi"),_D={undefined:"undefined",null:"null"},uD=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||_D[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"),lD=Bu.object({schema:_f,table:_f,records:Bu.array().items(Bu.object().custom(uD)).required()});uf.exports=function(e){return cD.validateBySchema(e,lD)}});var ja=h((sX,Ef)=>{"use strict";var fr=b(),lf=g(),rX=vu();Ef.exports=ED;function ED(e){if(fr.isEmpty(e))throw new Error("invalid update parameters defined.");if(fr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(fr.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(fr.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&&fr.isEmptyOrZeroLength(o[r]))throw lf.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(!fr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw lf.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`);!fr.isEmpty(o[r])&&o[r]!==""&&s.has(fr.autoCast(o[r]))&&(o.skip=!0),s.add(fr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(ED,"insertUpdateValidate")});var ri=h((nX,df)=>{"use strict";var dD=T().OPERATIONS_ENUM,eo=class{constructor(t,r,s,n,i=void 0){this.operation=dD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(eo,"InsertObject");df.exports=eo});var ro=h((aX,hf)=>{"use strict";var iX=ri(),to=T(),qu=b(),Hu=g(),hD=require("uuid"),{handleHDBError:si,hdb_errors:SD}=D(),{HDB_ERROR_MSGS:ni,HTTP_STATUS_CODES:ii}=SD;hf.exports=fD;function fD(e,t,r){for(let n=0;n<t.length;n++)TD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];mD(i,r,e.operation)}}a(fD,"processRows");function TD(e){if(Buffer.byteLength(String(e))>to.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw si(new Error,ni.ATTR_NAME_LENGTH_ERR(e),ii.BAD_REQUEST,void 0,void 0,!0);if(qu.isEmptyOrZeroLength(e)||qu.isEmpty(e.trim()))throw si(new Error,ni.ATTR_NAME_NULLISH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}a(TD,"validateAttribute");function mD(e,t,r){if(!e.hasOwnProperty(t)||qu.isEmptyOrZeroLength(e[t])){if(r===to.OPERATIONS_ENUM.INSERT||r===to.OPERATIONS_ENUM.UPSERT){e[t]=hD.v4();return}throw Hu.error("Update transaction aborted due to record with no hash value:",e),si(new Error,ni.RECORD_MISSING_HASH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>to.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Hu.error(e),si(new Error,ni.HASH_VAL_LENGTH_ERR,ii.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Hu.error(e),si(new Error,ni.INVALID_FORWARD_SLASH_IN_HASH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}a(mD,"validateHash")});var ff=h((oX,Sf)=>{"use strict";var so=class{constructor(t,r){this.type=t,this.message=r}};a(so,"IPCEventObject");Sf.exports=so});var qr=h((cX,Tf)=>{"use strict";var RD=g(),Gu=b(),AD=T(),{IPC_ERRORS:ai}=Ke();Tf.exports={sendIpcEvent:pD,validateEvent:OD,SchemaEventMsg:ND,UserEventMsg:gD};function pD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):RD.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(pD,"sendIpcEvent");function OD(e){if(typeof e!="object")return ai.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Gu.isEmpty(e.type))return ai.MISSING_TYPE;if(!e.hasOwnProperty("message")||Gu.isEmpty(e.message))return ai.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Gu.isEmpty(e.message.originator))return ai.MISSING_ORIGIN;if(AD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ai.INVALID_EVENT(e.type)}a(OD,"validateEvent");function ND(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(ND,"SchemaEventMsg");function gD(e){this.originator=e}a(gD,"UserEventMsg")});var zs=h((uX,pf)=>{"use strict";var mf=T(),_X=b(),no=g(),Rf=ff(),{sendIpcEvent:Af}=qr();function ID(e){try{no.trace("signalSchemaChange called with message:",e);let t=new Rf(mf.IPC_EVENT_TYPES.SCHEMA,e);Af(t)}catch(t){no.error(t)}}a(ID,"signalSchemaChange");function bD(e){try{no.trace("signalUserChange called with message:",e);let t=new Rf(mf.IPC_EVENT_TYPES.USER,e);Af(t)}catch(t){no.error(t)}}a(bD,"signalUserChange");pf.exports={signalSchemaChange:ID,signalUserChange:bD}});var io=h((lX,Nf)=>{"use strict";var Of=b(),CD=T(),wD=g(),LD=za(),UD=Za(),yD=zs(),{SchemaEventMsg:DD}=qr(),MD="already exists in";Nf.exports=PD;async function PD(e,t,r){try{if(Of.isEmptyOrZeroLength(r))return r;let s=[];Of.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 BD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(PD,"lmdbCheckForNewAttributes");async function BD(e,t,r,s){let n=new UD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await vD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(MD))wD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(BD,"createNewAttribute");async function vD(e){let t;try{return t=await LD(e),yD.signalSchemaChange(new DD(process.pid,CD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(vD,"createAttribute")});var js=h((EX,gf)=>{"use strict";var ao=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(ao,"LMDBTransactionObject");gf.exports=ao});var bf=h((dX,If)=>{"use strict";var HD=js(),qD=T().OPERATIONS_ENUM,oo=class extends HD{constructor(t,r,s,n,i=void 0){super(qD.INSERT,r,s,n,i),this.records=t}};a(oo,"LMDBInsertTransactionObject");If.exports=oo});var wf=h((hX,Cf)=>{"use strict";var GD=js(),FD=T().OPERATIONS_ENUM,co=class extends GD{constructor(t,r,s,n,i,o=void 0){super(FD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(co,"LMDBUpdateTransactionObject");Cf.exports=co});var Uf=h((SX,Lf)=>{"use strict";var VD=js(),$D=T().OPERATIONS_ENUM,_o=class extends VD{constructor(t,r,s,n,i,o=void 0){super($D.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(_o,"LMDBUpsertTransactionObject");Lf.exports=_o});var Df=h((fX,yf)=>{"use strict";var kD=js(),xD=T().OPERATIONS_ENUM,uo=class extends kD{constructor(t,r,s,n,i=void 0){super(xD.DELETE,s,n,t,i),this.original_records=r}};a(uo,"LMDBDeleteTransactionObject");yf.exports=uo});var oi=h((TX,vf)=>{"use strict";var YD=require("path"),Mf=X(),KD=bf(),WD=wf(),QD=Uf(),JD=Df(),en=Ye(),Pf=b(),{CONFIG_PARAMS:XD}=T(),Bf=Y();Bf.initSync();var lo=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:ZD}=te();vf.exports=zD;async function zD(e,t){if(Bf.get(XD.LOGGING_AUDITLOG)===!1)return;let r=YD.join(ZD(),e.schema.toString()),s=await Mf.openEnvironment(r,e.table,!0),n=jD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Mf.initializeDBIs(s,en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,en.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Pf.isEmpty(n.user_name)||s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(zD,"writeTransaction");function jD(e,t){let r=Pf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===lo.INSERT)return new KD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.UPDATE)return new WD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.UPSERT)return new QD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.DELETE)return new JD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(jD,"createTransactionObject")});var Fu=h((RX,Hf)=>{"use strict";var eM=ja(),mX=ri(),tn=T(),tM=ro(),rM=Xs().insertRecords,sM=X(),nM=require("path"),iM=g(),aM=io(),{getBaseSchemaPath:oM}=te(),cM=oi();Hf.exports=_M;async function _M(e){try{let{schema_table:t,attributes:r}=eM(e);tM(e,r,t.hash_attribute),e.schema!==tn.SYSTEM_SCHEMA_NAME&&(r.includes(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aM(e.hdb_auth_header,t,r),n=nM.join(oM(),e.schema.toString()),i=await sM.openEnvironment(n,e.table),o=await rM(i,t.hash_attribute,r,e.records,e[tn.CLUSTERING_FLAG]!==!0);try{await cM(e,o)}catch(c){iM.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(_M,"lmdbCreateRecords")});var Ff=h((AX,Gf)=>{"use strict";var qf=T(),uM=Fu(),lM=ri(),EM=require("fs-extra"),dM=require("path"),{getBaseSchemaPath:hM}=te();Gf.exports=SM;async function SM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new lM(qf.SYSTEM_SCHEMA_NAME,qf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await uM(r),await EM.mkdirp(dM.join(hM(),e.schema.toString()))}a(SM,"lmdbCreateSchema")});var $f=h((pX,Vf)=>{"use strict";var Eo=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Eo,"DeleteRecordsResponseObject");Vf.exports=Eo});var ku=h((IX,Yf)=>{"use strict";var kf=X(),Vu=ls(),$u=Ke().LMDB_ERRORS_ENUM,fM=Ye(),xf=g(),OX=b(),TM=require("lmdb"),mM=$f(),{OVERFLOW_MARKER:NX,MAX_SEARCH_KEY_LENGTH:gX}=fM;async function RM(e,t,r){if(Vu.validateEnv(e),t===void 0)throw new Error($u.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($u.IDS_REQUIRED):new Error($u.IDS_MUST_BE_ARRAY);try{let s=kf.listDBIs(e);kf.initializeDBIs(e,t,s);let n=new mM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,TM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let z=Vu.getIndexedValues(B);if(z)for(let V=0,Q=z.length;V<Q;V++)L.remove(z[V],i)}catch{xf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){xf.warn(S),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Vu.getMicroTime(),n}catch(s){throw s}}a(RM,"deleteRecords");Yf.exports={deleteRecords:RM}});var ci=h((bX,Wf)=>{"use strict";var rn=b(),AM=ku(),pM=X(),OM=require("path"),{getBaseSchemaPath:NM}=te(),gM=oi(),IM=g();Wf.exports=bM;async function bM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(rn.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(rn.isEmptyOrZeroLength(e.hash_values)&&!rn.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];rn.isEmpty(_)||e.hash_values.push(_)}}if(rn.isEmptyOrZeroLength(e.hash_values))return Kf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(rn.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=OM.join(NM(),e.schema.toString()),i=await pM.openEnvironment(n,e.table),o=await AM.deleteRecords(i,s,e.hash_values);try{t===!0&&await gM(e,o)}catch(c){IM.error(`unable to write transaction due to ${c.message}`)}return Kf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(bM,"lmdbDeleteRecords");function Kf(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(Kf,"createDeleteResponse")});var Yu=h((wX,Qf)=>{"use strict";var CM=T(),CX=ls();function xu(e,t){let r=Object.create(null);if(t.length===1&&CM.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(xu,"parseRow");function wM(e,t,r,s){let n=xu(r,e);s.push(n)}a(wM,"searchAll");function LM(e,t,r,s){let n=xu(r,e);s[t]=n}a(LM,"searchAllToMap");function UM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(UM,"iterateDBI");function ds(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(ds,"pushResults");function yM(e,t,r,s,n,i){t.toString().endsWith(e)&&ds(t,r,s,n,i)}a(yM,"endsWith");function DM(e,t,r,s,n,i){t.toString().includes(e)&&ds(t,r,s,n,i)}a(DM,"contains");function MM(e,t,r,s,n,i){t>e&&ds(t,r,s,n,i)}a(MM,"greaterThanCompare");function PM(e,t,r,s,n,i){t>=e&&ds(t,r,s,n,i)}a(PM,"greaterThanEqualCompare");function BM(e,t,r,s,n,i){t<e&&ds(t,r,s,n,i)}a(BM,"lessThanCompare");function vM(e,t,r,s,n,i){t<=e&&ds(t,r,s,n,i)}a(vM,"lessThanEqualCompare");Qf.exports={parseRow:xu,searchAll:wM,searchAllToMap:LM,iterateDBI:UM,endsWith:yM,contains:DM,greaterThanCompare:MM,greaterThanEqualCompare:PM,lessThanCompare:BM,lessThanEqualCompare:vM,pushResults:ds}});var sn=h((yX,eT)=>{"use strict";var wt=X(),HM=g(),St=ls(),Gr=Ye(),ce=Ke().LMDB_ERRORS_ENUM,LX=b(),qM=T(),kt=Yu(),UX=require("lmdb"),{OVERFLOW_MARKER:Jf,MAX_SEARCH_KEY_LENGTH:GM}=Gr,_i={lazy:!0};function Xf(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Ku(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Xf,"iterateFullIndex");function ui(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=Ku(e,t,r);E[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,w=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))kt.pushResults(d(L,B),B,l,t,r);return l}a(ui,"iterateRangeBetween");function Ku(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(Jf)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Gr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,_i)[r]}return n}}a(Ku,"getOverflowCheck");function FM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);ho(r),r=li(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))kt.searchAll(r,_,u,o);return o}a(FM,"searchAll");function VM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return ho(r),r=li(e,r),Xf(e,t,t,kt.searchAllToMap.bind(null,r),s,n,i)}a(VM,"searchAllToMap");function $M(e,t,r=!1,s=void 0,n=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Xf(e,void 0,t,kt.iterateDBI,r,s,n)}a($M,"iterateDBI");function kM(e,t){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(kM,"countAll");function xM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=wt.openDBI(e,r);s=St.convertKeyValueToWrite(s);let _=[[],[]];if(c[Gr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,_i);u!==void 0&&kt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))kt.pushResults(s,u,_,t,r);return _}a(xM,"equals");function YM(e,t,r){return Fr(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(YM,"count");function KM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=St.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))kt.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))kt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(KM,"startsWith");function WM(e,t,r,s,n=!1,i=void 0,o=void 0){return Zf(e,t,r,s,n,i,o,!0)}a(WM,"endsWith");function Zf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){Fr(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Ku(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=d.toString();if(S.endsWith(Jf))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?S.endsWith(s):S.includes(s))if(u[Gr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&(kt.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(Zf,"contains");function QM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ui(e,t,r,s,_,n,i,o,!0,!1)}a(QM,"greaterThan");function JM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ui(e,t,r,s,_,n,i,o,!1,!1)}a(JM,"greaterThanEqual");function XM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ui(e,t,r,_,s,n,i,o,!1,!0)}a(XM,"lessThan");function ZM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ui(e,t,r,_,s,n,i,o,!1,!1)}a(ZM,"lessThanEqual");function zM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(St.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=St.convertKeyValueToWrite(s),n=St.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ui(e,t,r,s,n,i,o,c)}a(zM,"between");function jM(e,t,r,s){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ho(r),r=li(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?_i:void 0);return i&&(n=kt.parseRow(i,r)),n}a(jM,"searchByHash");function eP(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,_i)===void 0&&(s=!1),s}a(eP,"checkHashExists");function tP(e,t,r,s,n=[]){jf(e,t,r,s,n);let i=zf(e,t,r,s,n);return Object.values(i)}a(tP,"batchSearchByHash");function rP(e,t,r,s,n=[]){return jf(e,t,r,s,n),zf(e,t,r,s,n)}a(rP,"batchSearchByHashToMap");function zf(e,t,r,s,n=[]){r=li(e,r);let i=Object.create(null),o=r.length<3?_i:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=kt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw HM.warn(u),u}}return i}a(zf,"batchHashSearch");function jf(e,t,r,s,n){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ho(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(jf,"initializeBatchSearchByHash");function ho(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ho,"validateFetchAttributes");function Fr(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>GM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Fr,"validateComparisonFunctions");function li(e,t){return t.length===1&&qM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(li,"setGetWholeRowAttributes");eT.exports={searchAll:FM,searchAllToMap:VM,count:YM,countAll:kM,equals:xM,startsWith:KM,endsWith:WM,contains:Zf,searchByHash:jM,setGetWholeRowAttributes:li,batchSearchByHash:tP,batchSearchByHashToMap:rP,checkHashExists:eP,iterateDBI:$M,greaterThan:QM,greaterThanEqual:JM,lessThan:XM,lessThanEqual:ZM,between:zM}});var Ei=h((MX,nT)=>{var tT=require("lodash"),rT=Ee(),W=require("joi"),sP=b(),{hdb_schema_table:xt,checkValidTable:sT}=Sr(),{handleHDBError:nP,hdb_errors:iP}=D(),{HTTP_STATUS_CODES:aP}=iP,DX=W.object({schema:xt,table:xt,hash_values:W.array().min(1).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(xt).required()}),oP=W.object({schema:xt,table:xt,search_attribute:xt,search_value:W.any().required(),get_attributes:W.array().min(1).items(xt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),cP=W.object({schema:xt,table:xt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(xt).required(),conditions:W.array().min(1).items(W.object({search_attribute:xt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});nT.exports=function(e,t){let r=null;switch(t){case"value":r=rT.validateBySchema(e,oP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(sT("schema",e.schema)),i(sT("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=rT.validateBySchema(e,cP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=sP.checkGlobalSchemaTable(e.schema,e.table);if(n)return nP(new Error,n,aP.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=tT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!tT.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Wu=h((PX,iT)=>{"use strict";var _P=X(),uP=Ei(),lP=require("path"),{getBaseSchemaPath:EP}=te();iT.exports=dP;function dP(e){let t=uP(e,"hashes");if(t)throw t;let r=lP.join(EP(),e.schema.toString());return _P.openEnvironment(r,e.table)}a(dP,"initialize")});var Qu=h((BX,aT)=>{"use strict";var hP=sn(),SP=Wu();aT.exports=fP;async function fP(e){try{let t=await SP(e),r=global.hdb_schema[e.schema][e.table];return hP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(fP,"lmdbGetDataByHash")});var hs=h((vX,oT)=>{"use strict";var So=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(So,"SearchByHashObject");oT.exports=So});var _T=h((qX,cT)=>{"use strict";var HX=hs(),TP=sn(),mP=Wu();cT.exports=RP;async function RP(e){try{let t=await mP(e),r=global.hdb_schema[e.schema][e.table];return TP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(RP,"lmdbSearchByHash")});var Yt=h((GX,uT)=>{"use strict";var fo=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(fo,"SearchObject");uT.exports=fo});var To=h((FX,ST)=>{"use strict";var Qe=sn(),AP=X(),pP=require("path"),OP=b(),U=Ye(),Ss=T(),{getBaseSchemaPath:NP}=te(),gP=us(),lT=Ke().LMDB_ERRORS_ENUM,{compareKeys:nn}=require("ordered-binary"),Tr=Ss.SEARCH_WILDCARDS;async function IP(e,t,r){let s;e.schema===Ss.SYSTEM_SCHEMA_NAME?s=gP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hT(e,s.hash_attribute,r,t);return ET(e,n,s.hash_attribute,r)}a(IP,"prepSearch");async function ET(e,t,r,s){let n=pP.join(NP(),e.schema.toString()),i=await AP.openEnvironment(n,e.table),o=dT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(wP(e,r)===!1)return s===!0?CP(o):o[1];let _=o[0];return s===!0?Qe.batchSearchByHashToMap(i,r,e.get_attributes,_):Qe.batchSearchByHash(i,r,e.get_attributes,_)}a(ET,"executeSearch");function dT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=Qe.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=Qe.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=Qe.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=Qe.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return Qe.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qe.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=Qe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=Qe.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=Qe.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(dT,"searchByType");function bP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return nn(i,s[0])>=0&&nn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>nn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>nn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>nn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>nn(n[r],s)<=0;default:return Object.create(null)}}a(bP,"filterByType");function CP(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(CP,"createMapFromArrays");function wP(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(wP,"checkToFetchMore");function hT(e,t,r,s){if(OP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Tr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tr[0])<0&&n.indexOf(Tr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(Tr.indexOf(i)>=0&&Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Tr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tr[0])||n.includes(Tr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(lT.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ss.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case Ss.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case Ss.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ss.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case Ss.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lT.UNKNOWN_SEARCH_TYPE)}}a(hT,"createSearchTypeFromSearchObject");ST.exports={executeSearch:ET,createSearchTypeFromSearchObject:hT,prepSearch:IP,searchByType:dT,filterByType:bP}});var TT=h(($X,fT)=>{"use strict";var VX=Yt(),LP=Ei(),UP=b(),yP=T(),DP=To();fT.exports=MP;async function MP(e,t){if(!UP.isEmpty(t)&&yP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=LP(e,"value");if(s)throw s;let n=!0;try{return await DP.prepSearch(e,t,n)}catch(i){throw i}}a(MP,"lmdbGetDataByValue")});var an=h((xX,mT)=>{"use strict";var kX=Yt(),PP=Ei(),BP=b(),vP=T(),HP=To();mT.exports=qP;async function qP(e,t){if(!BP.isEmpty(t)&&vP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=PP(e,"value");if(s)throw s;let n=!1;try{return await HP.prepSearch(e,t,n)}catch(i){throw i}}a(qP,"lmdbSearchByValue")});var AT=h((KX,RT)=>{"use strict";var YX=Ye(),mo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(mo,"SearchByConditionsObject");var Ro=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Ro,"SearchCondition");var Ao=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ao,"SortAttribute");RT.exports={SearchByConditionsObject:mo,SearchCondition:Ro,SortAttribute:Ao}});var bT=h((QX,IT)=>{"use strict";var WX=AT().SearchByConditionsObject,GP=Yt(),FP=Ei(),Ju=sn(),po=Ye(),gT=To(),VP=Yu(),pT=require("lodash"),{getBaseSchemaPath:$P}=te(),kP=require("path"),xP=X(),{handleHDBError:OT,hdb_errors:YP}=D(),{HTTP_STATUS_CODES:KP}=YP,WP=1e8,QP={lazy:!0};IT.exports=JP;async function JP(e){try{let t=FP(e,"conditions");if(t)throw OT(t,t.message,KP.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=kP.join($P(),e.schema.toString()),s=await xP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=pT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===po.SEARCH_TYPES.EQUALS?o.estimated_count=Ju.count(s,o.search_attribute,o.search_value):c===po.SEARCH_TYPES.CONTAINS||c===po.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=WP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await NT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(gT.filterByType),u=_.length,l=[],E=Ju.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,QP);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(VP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await NT(s,e,_,n.hash_attribute);c.push(u)}if(o=pT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return Ju.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw OT(t)}}a(JP,"lmdbSearchByConditions");async function NT(e,t,r,s){let n=new GP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===po.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,gT.searchByType(e,n,i,s)}a(NT,"executeConditionSearch")});var di=h((JX,CT)=>{"use strict";var XP=T().OPERATIONS_ENUM,Oo=class{constructor(t,r,s,n=void 0){this.operation=XP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Oo,"DeleteObject");CT.exports=Oo});var Xu=h((XX,wT)=>{"use strict";var No=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(No,"DropAttributeObject");wT.exports=No});var zu=h((zX,LT)=>{"use strict";var ZP=Yt(),zP=di(),ZX=Xu(),er=T(),jP=b(),Zu=X(),eB=us(),tB=an(),rB=ci(),{getBaseSchemaPath:sB}=te(),nB=require("path");LT.exports=iB;async function iB(e,t=!0){let r;e.schema===er.SYSTEM_SCHEMA_NAME?r=eB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oB(e),n=nB.join(sB(),e.schema.toString()),i=await Zu.openEnvironment(n,e.table);return t===!0&&await aB(e,i,r.hash_attribute),Zu.dropDBI(i,e.attribute),s}a(iB,"lmdbDropAttribute");async function aB(e,t,r){let s=Zu.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(aB,"removeAttributeFromAllObjects");async function oB(e){let t=new ZP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await tB(t)).filter(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jP.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new zP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rB(i)}a(oB,"dropAttributeFromSystem")});var MT=h((jX,DT)=>{"use strict";var cB=zu(),_B=Xu(),UT=b(),yT=g(),uB=Ke().LMDB_ERRORS_ENUM;DT.exports=lB;async function lB(e){if(UT.isEmpty(global.hdb_schema[e.schema])||UT.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 _B(e.schema,e.table,r);try{await cB(n,!1)}catch(i){i.message!==uB.DBI_DOES_NOT_EXIST&&yT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw yT.error(`Error dropping attribute ${r}`),s}}a(lB,"lmdbDropAllAttributes")});var ju=h((tZ,$T)=>{"use strict";var qT=Yt(),GT=di(),FT=an(),VT=ci(),eZ=MT(),it=T(),PT=b(),BT=X(),{getBaseSchemaPath:EB,getTransactionAuditStorePath:dB}=te(),vT=require("path"),HT=g();$T.exports=hB;async function hB(e){try{if(PT.isEmpty(global.hdb_schema[e.schema])||PT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await SB(e),await fB(e);let t=vT.join(EB(),e.schema.toString());try{await BT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")HT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=vT.join(dB(),e.schema.toString());await BT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")HT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(hB,"lmdbDropTable");async function SB(e){let t=new qT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await FT(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 GT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await VT(n)}a(SB,"deleteAttributesFromSystem");async function fB(e){let t=new qT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await FT(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 GT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await VT(n)}catch(i){throw i}}a(fB,"dropTableFromSystem")});var xT=h((sZ,kT)=>{"use strict";var TB=require("fs-extra"),mB=Yt(),RB=hs(),AB=di(),pB=ju(),OB=ci(),NB=Qu(),gB=an(),mr=T(),rZ=b(),IB=require("path"),{getBaseSchemaPath:bB}=te(),{handleHDBError:CB,hdb_errors:wB}=D(),{HDB_ERROR_MSGS:LB,HTTP_STATUS_CODES:UB}=wB;kT.exports=yB;async function yB(e){let t;try{t=await DB(e.schema);let r=new mB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await gB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await pB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new AB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await OB(n);let i=IB.join(bB(),t.toString());await TB.remove(i)}catch(r){throw r}}a(yB,"lmdbDropSchema");async function DB(e){let t=new RB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mr.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 CB(new Error,LB.SCHEMA_NOT_FOUND(e),UB.NOT_FOUND,void 0,void 0,!0);return s}a(DB,"validateDropSchema")});var el=h((nZ,YT)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(go,"CreateTableObject");YT.exports=go});var WT=h((aZ,KT)=>{"use strict";var MB=require("path"),PB=require("fs-extra"),Io=X(),{getTransactionAuditStorePath:BB}=te(),tl=Ye(),iZ=el();KT.exports=vB;async function vB(e){let t;try{let r=MB.join(BB(),e.schema.toString());await PB.mkdirp(r),t=await Io.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{Io.createDBI(t,tl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Io.createDBI(t,tl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Io.createDBI(t,tl.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(vB,"createTransactionsAuditEnvironment")});var ZT=h((oZ,XT)=>{"use strict";var rl=T(),QT=X(),HB=Xs(),qB=require("path"),{getSystemSchemaPath:GB,getBaseSchemaPath:FB}=te(),VB=us(),$B=za(),sl=Za(),kB=g(),xB=WT(),il=VB.hdb_table,JT=[];for(let e=0;e<il.attributes.length;e++)JT.push(il.attributes[e].attribute);XT.exports=YB;async function YB(e,t){let r=qB.join(FB(),t.schema.toString()),s=new sl(t.schema,t.table,rl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new sl(t.schema,t.table,rl.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new sl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await QT.createEnvironment(r,t.table),e!==void 0){let o=await QT.openEnvironment(GB(),rl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await HB.insertRecords(o,il.hash_attribute,JT,[e]),await nl(s),await nl(n),await nl(i)}await xB(t)}catch(o){throw o}}a(YB,"lmdbCreateTable");async function nl(e){try{await $B(e)}catch(t){kB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(nl,"createAttribute")});var jT=h((cZ,zT)=>{"use strict";var KB=ja(),WB=ro(),QB=io(),on=T(),JB=Xs().updateRecords,XB=X(),ZB=require("path"),{getBaseSchemaPath:zB}=te(),jB=oi(),ev=g();zT.exports=tv;async function tv(e){try{let{schema_table:t,attributes:r}=KB(e);WB(e,r,t.hash_attribute),e.schema!==on.SYSTEM_SCHEMA_NAME&&(r.includes(on.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(on.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(on.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(on.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await QB(e.hdb_auth_header,t,r),n=ZB.join(zB(),e.schema.toString()),i=await XB.openEnvironment(n,e.table),o=await JB(i,t.hash_attribute,r,e.records,e[on.CLUSTERING_FLAG]!==!0);try{await jB(e,o)}catch(c){ev.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(tv,"lmdbUpdateRecords")});var tm=h((_Z,em)=>{"use strict";var rv=T().OPERATIONS_ENUM,bo=class{constructor(t,r,s,n=void 0){this.operation=rv.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(bo,"UpsertObject");em.exports=bo});var sm=h((lZ,rm)=>{"use strict";var uZ=tm(),sv=ja(),nv=ro(),iv=io(),cn=T(),av=Xs().upsertRecords,ov=X(),cv=require("path"),{getBaseSchemaPath:_v}=te(),uv=oi(),lv=g(),{handleHDBError:Ev,hdb_errors:dv}=D();rm.exports=hv;async function hv(e){let t;try{t=sv(e)}catch(_){throw Ev(_,_.message,dv.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;nv(e,s,r.hash_attribute),e.schema!==cn.SYSTEM_SCHEMA_NAME&&(s.includes(cn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(cn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(cn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(cn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await iv(e.hdb_auth_header,r,s),i=cv.join(_v(),e.schema.toString()),o=await ov.openEnvironment(i,e.table),c=await av(o,r.hash_attribute,s,e.records,e[cn.CLUSTERING_FLAG]!==!0);try{await uv(e,c)}catch(_){lv.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(hv,"lmdbUpsertRecords")});var _m=h((EZ,cm)=>{"use strict";var Sv=Yt(),nm=b(),im=g(),fv=an(),am=T(),Tv=ku().deleteRecords,mv=X(),Rv=require("path"),{getBaseSchemaPath:Av}=te(),{promisify:pv}=require("util"),Ov=pv(setTimeout),om=1e4,Nv=10;cm.exports=gv;async function gv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(nm.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 Sv(e.schema,e.table,am.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await fv(n,am.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw im.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return nm.isEmptyOrZeroLength(s)?(im.trace("No records found to delete"),{message:"No records found to delete"}):await Iv(e,s,t)}a(gv,"lmdbDeleteRecordsBefore");async function Iv(e,t,r){let s=Rv.join(Av(),e.schema.toString()),n=await mv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=om){let _=t.slice(o,o+om),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await Tv(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await Ov(Nv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Iv,"chunkDeletes")});var lm=h((dZ,um)=>{"use strict";var Co=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Co,"DeleteBeforeObject");um.exports=Co});var dm=h((hZ,Em)=>{"use strict";var wo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(wo,"DeleteAuditLogsBeforeResults");Em.exports=wo});var fm=h((fZ,Sm)=>{"use strict";var al=X(),{getTransactionAuditStorePath:bv}=te(),SZ=lm(),Cv=require("path"),hi=Ye(),wv=b(),hm=dm(),Lv=require("util").promisify,Uv=Lv(setTimeout),yv=1e4,Dv=100;Sm.exports=Mv;async function Mv(e){let t=Cv.join(bv(),e.schema),r=await al.openEnvironment(t,e.table,!0),s=al.listDBIs(r);al.initializeDBIs(r,hi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new hm;do n=await Pv(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 Uv(Dv);while(n.transactions_deleted>0);return i}a(Mv,"deleteAuditLogsBefore");async function Pv(e,t){let r=new hm;try{let s=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];wv.isEmpty(c)||(n=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>yv)break}return await n,r}catch(s){throw s}}a(Pv,"deleteTransactions")});var Nm=h((TZ,Om)=>{"use strict";var ol=X(),_n=Ye(),Tm=ls(),cl=T(),mm=b(),{getTransactionAuditStorePath:Bv}=te(),vv=require("path"),Hv=sn(),Lo=js(),qv=g();Om.exports=Gv;async function Gv(e){let t=vv.join(Bv(),e.schema),r=await ol.openEnvironment(t,e.table,!0),s=ol.listDBIs(r);ol.initializeDBIs(r,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Rm(r,e.search_values);case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Vv(r,e.search_values,n);case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Fv(r,e.search_values);default:return Rm(r)}}a(Gv,"readAuditLog");function Rm(e,t=[0,Tm.getMicroTime()]){mm.isEmpty(t[0])&&(t[0]=0),mm.isEmpty(t[1])&&(t[1]=Tm.getMicroTime());let r=[];try{let s=e.dbis[_n.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 Lo,i);r.push(o)}return r}catch(s){throw s}}a(Rm,"searchTransactionsByTimestamp");function Fv(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[_n.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,pm(e,i))}return Object.fromEntries(r)}a(Fv,"searchTransactionsByUsername");function Vv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=Hv.equals(e,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_n.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=pm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);Am(_,"records",r,l,o),Am(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(Vv,"searchTransactionsByHashValues");function Am(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new Lo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Lo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(Am,"loopRecords");function pm(e,t){let r=[];try{let s=e.dbis[_n.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 Lo,i);r.push(o)}}catch(i){qv.warn(i)}return r}catch(s){throw s}}a(pm,"batchSearchTransactions")});var Im=h((mZ,gm)=>{"use strict";var $v=require("path"),{getBaseSchemaPath:kv}=te(),xv=X();gm.exports={writeTransaction:Yv};async function Yv(e,t,r){let s=$v.join(kv(),e);return(await xv.openEnvironment(s,t)).transaction(r)}a(Yv,"writeTransaction")});var Cm=h((RZ,bm)=>{"use strict";var Kv=require("path"),{getBaseSchemaPath:Wv}=te(),Qv=X();bm.exports={flush:Jv};async function Jv(e,t){let r=Kv.join(Wv(),e.toString());return(await Qv.openEnvironment(r,t.toString())).flushed}a(Jv,"flush")});var Lm=h((AZ,wm)=>{"use strict";var Re=g(),{handleHDBError:Xv}=D(),Zv=mu(),zv=za(),jv=Fu(),eH=Ff(),tH=ci(),rH=Qu(),sH=_T(),nH=TT(),iH=an(),aH=bT(),oH=xT(),cH=ZT(),_H=jT(),uH=sm(),lH=_m(),EH=fm(),dH=ju(),hH=zu(),SH=Nm(),fH=Im(),TH=Cm(),Uo=class extends Zv{async searchByConditions(t){try{return aH(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await rH(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await sH(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await nH(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await iH(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await eH(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await oH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await cH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await dH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await zv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await jv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await _H(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await uH(t)}catch(r){throw Xv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await tH(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await lH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await hH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await EH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await SH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return fH.writeTransaction(t,r,s)}flush(t,r){return TH.flush(t,r)}};a(Uo,"LMDBBridge");wm.exports=Uo});var Rr=h((pZ,ym)=>{"use strict";var mH=Lm(),RH=mu(),AH=Y();AH.initSync();var Um;function pH(){return Um instanceof RH?Um:new mH}a(pH,"getBridge");ym.exports=pH()});var Bm=h((OZ,Pm)=>{"use strict";var Dm=require("lodash"),Si=require("mathjs"),OH=require("jsonata"),Mm=b();Pm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Dm.uniqWith(e,Dm.isEqual):e,searchJSON:NH,mad:fi.bind(null,Si.mad),mean:fi.bind(null,Si.mean),mode:fi.bind(null,Si.mode),prod:fi.bind(null,Si.prod),median:fi.bind(null,Si.median)};function fi(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(fi,"aggregateFunction");function NH(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(Mm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Mm.isEmpty(this.__ala__.res[r])){let s=OH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(NH,"searchJSON")});var Hm=h((NZ,vm)=>{"use strict";var de=require("moment"),_l="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;vm.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(_l),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(_l),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(_l)}});var Vm=h((gZ,Fm)=>{"use strict";var gH=require("@turf/area"),IH=require("@turf/length"),bH=require("@turf/circle"),CH=require("@turf/difference"),wH=require("@turf/distance"),LH=require("@turf/boolean-contains"),UH=require("@turf/boolean-equal"),yH=require("@turf/boolean-disjoint"),DH=require("@turf/helpers"),qm=T(),$=b();Fm.exports={geoArea:MH,geoLength:PH,geoCircle:BH,geoDifference:vH,geoDistance:Gm,geoNear:HH,geoContains:qH,geoEqual:GH,geoCrosses:FH,geoConvert:VH};var ul="geo1 is required",ll="geo2 is required";function MH(e){if($.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=$.autoCast(e)),gH.default(e)}a(MH,"geoArea");function PH(e,t){if($.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=$.autoCast(e)),IH.default(e,{units:t||"kilometers"})}a(PH,"geoLength");function BH(e,t,r){if($.isEmpty(e))throw new Error("point is required");if($.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=$.autoCast(e)),bH.default(e,t,{units:r||"kilometers"})}a(BH,"geoCircle");function vH(e,t){if($.isEmpty(e))throw new Error("poly1 is required");if($.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),CH(e,t)}a(vH,"geoDifference");function Gm(e,t,r){if($.isEmpty(e))throw new Error("point1 is required");if($.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),wH.default(e,t,{units:r||"kilometers"})}a(Gm,"geoDistance");function HH(e,t,r,s){if($.isEmpty(e))throw new Error("point1 is required");if($.isEmpty(t))throw new Error("point2 is required");if($.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Gm(e,t,s)<=r}a(HH,"geoNear");function qH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),LH.default(e,t)}a(qH,"geoContains");function GH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),UH.default(e,t)}a(GH,"geoEqual");function FH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),!yH.default(e,t)}a(FH,"geoCrosses");function VH(e,t,r){if($.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($.isEmpty(t))throw new Error("geo_type is required");if($.isEmpty(qm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qm.GEO_CONVERSION_ENUM).join(",")}`);return DH[t](e,r)}a(VH,"geoConvert")});var yo=h((IZ,$m)=>{var fs=Bm(),ft=Hm(),tr=Vm();$m.exports=e=>{e.aggr.mad=e.aggr.MAD=fs.mad,e.aggr.mean=e.aggr.MEAN=fs.mean,e.aggr.mode=e.aggr.MODE=fs.mode,e.aggr.prod=e.aggr.PROD=fs.prod,e.aggr.median=e.aggr.MEDIAN=fs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=fs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=fs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ft.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ft.current_time,e.fn.extract=e.fn.EXTRACT=ft.extract,e.fn.date=e.fn.DATE=ft.date,e.fn.date_format=e.fn.DATE_FORMAT=ft.date_format,e.fn.date_add=e.fn.DATE_ADD=ft.date_add,e.fn.date_sub=e.fn.DATE_SUB=ft.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ft.date_diff,e.fn.now=e.fn.NOW=ft.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ft.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ft.get_server_time,e.fn.getdate=e.fn.GETDATE=ft.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ft.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tr.geoNear}});var Ym=h((bZ,xm)=>{"use strict";var Ti=require("lodash"),Me=require("alasql");Me.options.cache=!1;var $H=yo(),km=require("clone"),Do=require("recursive-iterator"),v=g(),q=b(),un=Rr(),kH=T(),{hdb_errors:xH}=D(),YH="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";$H(Me);var Mo=class{constructor(t,r){if(q.isEmpty(t))throw v.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),q.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!q.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(mi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(mi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(mi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(mi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(mi)}}_getColumns(){let t=new Do(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(km(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ti.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(q.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Do(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!q.isEmpty(r)&&r.right)if(q.isNotEmptyAndHasValue(r.right.value)){let s=q.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!q.isEmpty(s)&&q.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=q.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&q.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Do(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!q.isEmpty(kH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(q.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(q.isEmptyOrZeroLength(r.left.columnid)||q.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(q.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!q.isEmpty(r.right.value)||!q.isEmpty(r.left.value)?s.add(q.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from)&&q.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Ti.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(q.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);q.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(q.isEmptyOrZeroLength(this.all_table_attributes)&&!q.isEmptyOrZeroLength(this.columns.columns))return t;if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(km(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(q.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(YH)>-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=Ti.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!q.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await un.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await un.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(S)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!q.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await un.getDataByValue(c,S.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await un.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Me.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Me.yy.FuncValue:new Me.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Ti.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Do(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ti.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await un.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[R];this.data[s].__merged_data[d].push(w)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return v.error(xH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await un.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Mo,"SQLSearch");xm.exports=Mo});var Tt=h((CZ,Wm)=>{"use strict";var KH=TS();Wm.exports={searchByConditions:XH,searchByHash:ZH,searchByValue:zH,search:jH};var El=Rr(),Km=require("util"),WH=Km.callbackify(El.searchByHash),QH=Km.callbackify(El.searchByValue),JH=Ym();async function XH(e){return El.searchByConditions(e)}a(XH,"searchByConditions");function ZH(e,t){try{WH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ZH,"searchByHash");function zH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),QH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(zH,"searchByValue");function jH(e,t){try{let r=new KH(e);r.validate(),new JH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(jH,"search")});var Vr=h((wZ,Zm)=>{"use strict";var Ri=require("crypto"),Jm="aes-256-cbc",eq=32,tq=16,dl=64,Xm=32,rq=dl+Xm,Qm=new Map;Zm.exports={encrypt:sq,decrypt:nq,createNatsTableStreamName:iq};function sq(e){let t=Ri.randomBytes(eq),r=Ri.randomBytes(tq),s=Ri.createCipheriv(Jm,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(sq,"encrypt");function nq(e){let t=e.substr(0,dl),r=e.substr(dl,Xm),s=e.substr(rq,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ri.createDecipheriv(Jm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(nq,"decrypt");function iq(e,t){let r=`${e}.${t}`,s=Qm.get(r);return s||(s=Ri.createHash("md5").update(`${e}.${t}`).digest("hex"),Qm.set(r,s)),s}a(iq,"createNatsTableStreamName")});var Ts=h((LZ,nR)=>{"use strict";var jm=Tt(),$r=g(),eR=Qa(),aq=require("lodash"),oq=require("path"),cq=Vr(),hl=b(),{promisify:tR}=require("util"),j=T(),{handleHDBError:Po,hdb_errors:_q}=D(),{HDB_ERROR_MSGS:Bo,HTTP_STATUS_CODES:rR}=_q,uq=Y();uq.initSync();var zm=X(),lq=te(),Ai=tR(jm.searchByValue),Eq=tR(jm.searchByHash),ln="name",sR="hash_attribute",Sl="schema",dq="schema_table",hq="attribute";nR.exports={describeAll:Sq,describeTable:vo,describeSchema:Tq};async function Sq(e){try{let t=hl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:ln,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[ln]},i=await Ai(n);if(hl.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[sR,j.ID_ATTRIBUTE_STRING,ln,Sl]},u=await Ai(_),l=[];for(let d of u)try{let S;if(t||s)S=await vo({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;S=await vo({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){$r.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return $r.error("Got an error in describeAll"),$r.error(t),Po(new Error,Bo.DESCRIBE_ALL_ERR)}}a(Sq,"describeAll");async function vo(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=eR.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ln,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await Ai(c);if(!_||_.length===0)throw Po(new Error,Bo.TABLE_NOT_FOUND(e.schema,e.table),rR.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Po(new Error,Bo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:dq,search_value:r+"."+s,get_attributes:[hq]},E=await Ai(l);E=aq.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=fq(n)),i.attributes=E,i.clustering_stream_name=cq.createNatsTableStreamName(u.schema,u.name);try{let d=oq.join(lq.getBaseSchemaPath(),i.schema.toString()),S=await zm.openEnvironment(d,i.name),m=zm.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){$r.warn(`unable to stat table dbi due to ${d}`)}}catch(l){$r.error(`There was an error getting attributes for table '${u.name}'`),$r.error(l)}return i}a(vo,"descTable");function fq(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(fq,"getAttrsByPerms");async function Tq(e){let t=eR.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Sl,search_value:s,hash_values:[],get_attributes:[sR,j.ID_ATTRIBUTE_STRING,ln,Sl]},i=await Ai(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[ln]},c=await Eq(o);if(c&&c.length<1)throw Po(new Error,Bo.SCHEMA_NOT_FOUND(e.schema),rR.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),hl.isEmpty(_)||_.describe){let u=await vo({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){$r.error(`Error describing schema table '${e.schema}.${c}'`),$r.error(_)}})),o}}a(Tq,"describeSchema")});var kr=h((DZ,_R)=>{var UZ=require("async"),En=us(),yZ=g(),{callbackify:oR,promisify:mq}=require("util");_R.exports={setSchemaDataToGlobal:iR,getTableSchema:pq,getSystemSchema:Nq,setSchemaDataToGlobalAsync:mq(iR)};var cR=Ts(),Rq=oR(cR.describeAll),Aq=oR(cR.describeTable);function iR(e){Rq(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=En),global.hdb_schema=r,e(null,null)})}a(iR,"setSchemaDataToGlobal");function aR(e,t){return e==="system"?En[t]:global.hdb_schema[e][t]}a(aR,"returnSchema");function pq(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Oq(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,aR(e,t))}):r(null,aR(e,t))}a(pq,"getTableSchema");function Oq(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=En:global.hdb_schema={system:En},r();return}Aq(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:En}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Oq,"setTableDataToGlobal");function Nq(){return En}a(Nq,"getSystemSchema")});var Ut=h((MZ,ER)=>{"use strict";var qo=vu(),Lt=b(),gq=require("util"),Go=Rr(),Iq=kr(),fl=g(),{handleHDBError:xr,hdb_errors:bq}=D(),{HTTP_STATUS_CODES:ms}=bq,Cq=gq.promisify(Iq.getTableSchema),wq="updated",uR="inserted",lR="upserted";ER.exports={insert:Uq,update:yq,upsert:Dq,validation:Lq,flush:Mq};async function Lq(e){if(Lt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Lt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cq(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Lt.isEmptyOrZeroLength(c[s]))throw fl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Lt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw fl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Lt.isEmpty(c[s])&&c[s]!==""&&n.has(Lt.autoCast(c[s]))&&(c.skip=!0),n.add(Lt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Lq,"validation");async function Uq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.createRecords(e);return Ho(uR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(Uq,"insertData");async function yq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.updateRecords(e);return Lt.isEmpty(s.existing_rows)?Ho(wq,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(yq,"updateData");async function Dq(e){if(e.operation!=="upsert")throw xr(new Error,"invalid operation, must be upsert",ms.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.upsertRecords(e);return Ho(lR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw xr(s,null,null,fl.ERR,n)}}a(Dq,"upsertData");function Ho(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===uR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===lR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Mq(e){return Go.flush(e.schema,e.table)}a(Mq,"flush")});var ml=h((PZ,SR)=>{var Pq=Ee(),Tl=require("joi"),{hdb_schema_table:dR}=Sr(),hR={schema:dR,table:dR},Bq={date:Tl.date().iso().required()},vq={timestamp:Tl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};SR.exports=function(e,t){let r=t==="timestamp"?{...hR,...vq}:{...hR,...Bq},s=Tl.object(r);return Pq.validateBySchema(e,s)}});var RR=h((BZ,mR)=>{var Hq=Ee(),fR=require("joi"),{hdb_schema_table:TR}=Sr(),qq=fR.object({schema:TR,table:TR,hash_values:fR.array().required()});mR.exports=function(e){return Hq.validateBySchema(e,qq)}});var pR=h((vZ,AR)=>{"use strict";var Fo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Fo,"InsertObject");var Vo=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(Vo,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a($o,"DeleteResponseObject");AR.exports={InsertObject:Fo,NoSQLSeachObject:Vo,DeleteResponseObject:$o}});var As=h((HZ,bR)=>{"use strict";var NR=ml(),Gq=RR(),ko=b(),OR=require("moment"),gR=g(),{promisify:Fq,callbackify:Vq}=require("util"),Rs=T(),$q=kr(),Rl=Fq($q.getTableSchema),Al=Rr(),{DeleteResponseObject:kq}=pR(),{handleHDBError:Yr,hdb_errors:xq}=D(),{HDB_ERROR_MSGS:xo,HTTP_STATUS_CODES:Kr}=xq,Yq="records successfully deleted",Kq=Vq(IR);bR.exports={delete:Kq,deleteRecord:IR,deleteFilesBefore:Wq,deleteAuditLogsBefore:Qq};async function Wq(e){let t=NR(e,"date");if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);if(!OR(e.date,OR.ISO_8601).isValid())throw Yr(new Error,xo.INVALID_DATE,Kr.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,xo.INVALID_DATE,!0);let s=ko.checkSchemaTableExist(e.schema,e.table);if(s)throw Yr(new Error,s,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,s,!0);try{let n=await Al.deleteRecordsBefore(e);if(await Rl(e.schema,e.table),gR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Wq,"deleteFilesBefore");async function Qq(e){let t=NR(e,"timestamp");if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Yr(new Error,xo.INVALID_VALUE("Timestamp"),Kr.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,xo.INVALID_VALUE("Timestamp"),!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw Yr(new Error,r,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,r,!0);try{let s=await Al.deleteAuditLogsBefore(e);return await Rl(e.schema,e.table),gR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Qq,"deleteAuditLogsBefore");async function IR(e){let t=Gq(e);if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw Yr(new Error,r,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,r,!0);try{await Rl(e.schema,e.table);let s=await Al.deleteRecords(e);return ko.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Yq}`),s}catch(s){if(s.message===Rs.SEARCH_NOT_FOUND_MESSAGE){let n=new kq;return n.message=Rs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(IR,"deleteRecord")});var Yo=h((qZ,LR)=>{var Jq=require("crypto"),CR=9;function Xq(e){let t=zq(CR),r=wR(e+t);return t+r}a(Xq,"createHash");function Zq(e,t){let r=e.substr(0,CR),s=r+wR(t+r);return e===s}a(Zq,"validateHash");function zq(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(zq,"generateSalt");function wR(e){return Jq.createHash("md5").update(e).digest("hex")}a(wR,"md5");LR.exports={hash:Xq,validate:Zq}});var yR=h((GZ,UR)=>{var pl=Ee(),Je={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 jq(e){return Je.password.presence=!0,Je.username.presence=!0,Je.role.presence=!0,Je.active.presence=!0,pl.validateObject(e,Je)}a(jq,"addUserValidation");function eG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,pl.validateObject(e,Je)}a(eG,"alterUserValidation");function tG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,pl.validateObject(e,Je)}a(tG,"dropUserValidation");UR.exports={addUserValidation:jq,alterUserValidation:eG,dropUserValidation:tG}});var he=h((VZ,MR)=>{"use strict";var{platform:FZ}=require("os"),rG="nats-server.zip",Ol="nats-server",sG=process.platform==="win32"?`${Ol}.exe`:Ol,Nl="HDB",nG=/^[^\s.,*>]+$/,DR="__request__",iG=a(e=>`${e}.${DR}`,"REQUEST_SUBJECT"),aG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},oG={HUB:"hub.pid",LEAF:"leaf.pid"},cG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},_G={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Nl,deliver_subject:"__HDB__.WORKQUEUE"},uG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Nl,deliver_subject:"HDB.SCHEMAQUEUE"},lG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Nl,deliver_subject:"HDB.USERQUEUE"},EG={SUCCESS:"success",ERROR:"error"},dG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},hG={TXN:"txn",MSGID:"msgid"};MR.exports={NATS_SERVER_ZIP:rG,NATS_SERVER_NAME:Ol,NATS_BINARY_NAME:sG,PID_FILES:oG,NATS_CONFIG_FILES:aG,SERVER_SUFFIX:cG,WORK_QUEUE_CONSUMER_NAMES:_G,SCHEMA_QUEUE_CONSUMER_NAMES:uG,USER_QUEUE_CONSUMER_NAMES:lG,NATS_TERM_CONSTRAINTS_RX:nG,REQUEST_SUFFIX:DR,UPDATE_REMOTE_RESPONSE_STATUSES:EG,CLUSTER_STATUS_STATUSES:dG,REQUEST_SUBJECT:iG,SUBJECT_PREFIXES:hG}});var BR=h(($Z,PR)=>{"use strict";var Wr=T(),pi=class{constructor(t=0,r=Wr.STORAGE_TYPES_ENUM.LMDB,s=Wr.LICENSE_VALUES.API_CALL_DEFAULT,n=Wr.RAM_ALLOCATION_ENUM.DEFAULT,i=Wr.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(pi,"BaseLicense");var Ko=class extends pi{constructor(t=0,r=Wr.STORAGE_TYPES_ENUM.LMDB,s=Wr.LICENSE_VALUES.API_CALL_DEFAULT,n=Wr.RAM_ALLOCATION_ENUM.DEFAULT,i=Wr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Ko,"ExtendedLicense");PR.exports={BaseLicense:pi,ExtendedLicense:Ko}});var Sn=h((kZ,VR)=>{"use strict";var hn=require("fs-extra"),vR=Yo(),HR=require("crypto"),SG=require("moment"),fG=require("uuid").v4,Xe=g(),Il=require("path"),TG=b(),mt=T(),mG=BR().ExtendedLicense,dn="invalid license key format",RG="061183",AG="mofi25",pG="aes-256-cbc",OG=16,NG=32,qR=Y();qR.initSync();var gl;VR.exports={validateLicense:GR,generateFingerPrint:IG,licenseSearch:FR,getLicense:wG};function bl(){return Il.join(qR.getHdbBasePath(),mt.LICENSE_KEY_DIR_NAME,mt.LICENSE_FILE_NAME)}a(bl,"getLicenseDirPath");function gG(){let e=bl();return Il.join(e,mt.LICENSE_FILE_NAME)}a(gG,"getLicenseFilePath");function Cl(){let e=bl();return Il.join(e,mt.REG_KEY_FILE_NAME)}a(Cl,"getFingerPrintFilePath");async function IG(){let e=Cl();try{return await hn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await bG();throw Xe.error(`Error writing fingerprint file to ${e}`),Xe.error(t),new Error("There was an error generating the fingerprint")}}a(IG,"generateFingerPrint");async function bG(){let e=fG(),t=vR.hash(e),r=Cl();try{await hn.mkdirp(bl()),await hn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Xe.error(`Error writing fingerprint file to ${r}`),Xe.error(s),new Error("There was an error generating the fingerprint")}return t}a(bG,"writeFingerprint");function GR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:mt.STORAGE_TYPES_ENUM.LMDB,api_call:mt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:mt.RAM_ALLOCATION_ENUM.DEFAULT,version:mt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Xe.error("empty license key passed to validate."),r;let s=Cl(),n=!1;try{n=hn.statSync(s)}catch(i){Xe.error(i)}if(n){let i;try{i=hn.readFileSync(s,"utf8")}catch{Xe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(AG),c=o[1];c=Buffer.concat([Buffer.from(c)],OG);let _=Buffer.concat([Buffer.from(i)],NG),u=HR.createDecipheriv(pG,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=CG(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(dn),Xe.error(dn),new Error(dn)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(dn),Xe.error(dn),new Error(dn)}else r.exp_date=l;r.exp_date<SG().valueOf()&&(r.valid_date=!1),vR.validate(o[1],`${RG}${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||Xe.error("Invalid licence"),r}a(GR,"validateLicense");function CG(e,t){try{let r=HR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Xe.warn("Check old license failed")}}a(CG,"checkOldLicense");function FR(){let e=new mG;e.api_call=0;let t=[];try{t=hn.readFileSync(gG(),"utf-8").split(mt.NEW_LINE)}catch(r){r.code==="ENOENT"?Xe.info("no license file found"):Xe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(TG.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=GR(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){Xe.error("There was an error parsing the license string."),Xe.error(n),e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=mt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=mt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT),gl=e,e}a(FR,"licenseSearch");async function wG(){return gl||await FR(),gl}a(wG,"getLicense")});var Ar=h((xZ,tA)=>{"use strict";var YR="username is required",KR="nothing to update, must supply active, role or password to update",WR="password cannot be an empty string",QR="If role is specified, it cannot be empty.",JR="active must be true or false";tA.exports={addUser:vG,alterUser:HG,dropUser:GG,userInfo:FG,listUsers:Qo,listUsersExternal:VG,setUsersToGlobal:Oi,findAndValidateUser:xG,getClusterUser:YG,USERNAME_REQUIRED:YR,ALTERUSER_NOTHING_TO_UPDATE:KR,EMPTY_PASSWORD:WR,EMPTY_ROLE:QR,ACTIVE_BOOLEAN:JR};var XR=Ut(),LG=As(),Ll=Yo(),ZR=yR(),zR=Tt(),Ul=zs(),be=b(),jR=require("validate.js"),H=g(),{promisify:yl}=require("util"),Dl=Vr(),ps=T(),$R=he(),UG=dr(),Ml=Y(),yG=Sn(),DG=us(),{handleHDBError:rr,hdb_errors:MG}=D(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:wl,HDB_ERROR_MSGS:fn}=MG,{UserEventMsg:Pl}=qr(),kR=require("lodash"),eA={username:!0,active:!0,role:!0,password:!0},xR=new Map,Wo=yl(zR.searchByValue),PG=yl(zR.searchByHash),BG=yl(LG.delete);async function vG(e){let t=jR.cleanAttributes(e,eA),r=ZR.addUserValidation(t);if(r)throw rr(new Error,r.message,sr.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Wo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw rr(new Error,fn.ROLE_NAME_NOT_FOUND(t.role),sr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw rr(new Error,fn.DUP_ROLES_FOUND(t.role),sr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Dl.encrypt(t.password)),t.password=Ll.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await XR.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Oi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw rr(new Error,fn.USER_ALREADY_EXISTS(t.username),sr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.ADD_USER,_,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),`${c.username} successfully added`}a(vG,"addUser");async function HG(e){let t=jR.cleanAttributes(e,eA);if(be.isEmptyOrZeroLength(t.username))throw new Error(YR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(KR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(WR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(JR);let r=qG(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Dl.encrypt(t.password)),t.password=Ll.hash(t.password)),t.role==="")throw new Error(QR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Wo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=fn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),rr(new Error,_,sr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=fn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),rr(new Error,_,sr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await XR.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Oi()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.ALTER_USER,i,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),n}a(HG,"alterUser");function qG(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(qG,"isClusterUser");async function GG(e){try{let t=ZR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(be.isEmpty(global.hdb_users.get(e.username)))throw rr(new Error,fn.USER_NOT_EXIST(e.username),sr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await BG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Oi()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.DROP_USER,n,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(GG,"dropUser");async function FG(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 PG(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(FG,"userInfo");async function VG(){let e;try{e=await Qo()}catch(t){throw H.error("Got an error listing users."),H.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(VG,"listUsersExternal");async function Qo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=kR.cloneDeep(await Wo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!be.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=kR.cloneDeep(await Wo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],$G(c.role),i.set(c.username,c)}return(await yG.getLicense()).enterprise?i:kG(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Qo,"listUsers");function $G(e){try{if(!e){H.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(DG)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a($G,"appendSystemTablesToRole");function kG(e){try{if(H.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(kG,"nonEnterpriseFilter");async function Oi(){try{let e=await Qo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Oi,"setUsersToGlobal");async function xG(e,t,r=!0){global.hdb_users||await Oi();let s=global.hdb_users.get(e);if(!s)throw rr(new Error,wl.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw rr(new Error,wl.USER_INACTIVE,sr.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(xR.get(t)===s.password)return n;if(Ll.validate(s.password,t))xR.set(t,s.password);else throw rr(new Error,wl.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(xG,"findAndValidateUser");async function YG(){let e=await Qo(),t=UG.getConfigFromFile(ps.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!be.isEmpty(r))return r.decrypt_hash=Dl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+$R.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+$R.SERVER_SUFFIX.ADMIN,r}a(YG,"getClusterUser")});var nA=h((YZ,sA)=>{"use strict";var Bl=X(),KG=g(),rA=Ke().LMDB_ERRORS_ENUM;sA.exports=WG;async function WG(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 Bl.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==rA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Bl.closeEnvironment(global.lmdb_map[s]),await Bl.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==rA.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){KG.error(t)}}a(WG,"cleanLMDBMap")});var _A=h((KZ,cA)=>{"use strict";var Os=g(),Jo=T(),QG=nA(),iA=kr(),JG=Ts(),XG=Ar(),{validateEvent:oA}=qr(),ZG={[Jo.IPC_EVENT_TYPES.SCHEMA]:zG,[Jo.IPC_EVENT_TYPES.USER]:eF};async function zG(e){let t=oA(e);if(t){Os.error(t);return}Os.trace(`IPC schemaHandler ${Jo.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await QG(e.message),await jG(e.message)}a(zG,"schemaHandler");async function jG(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 JG.describeTable({schema:e.schema,table:e.table});break;default:iA.setSchemaDataToGlobal(aA);break}else iA.setSchemaDataToGlobal(aA)}catch(t){Os.error(t)}}a(jG,"syncSchemaMetadata");function aA(e){e&&Os.error(e)}a(aA,"handleErrorCallback");async function eF(e){try{let t=oA(e);if(t){Os.error(t);return}Os.trace(`IPC userHandler ${Jo.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await XG.setUsersToGlobal()}catch(t){Os.error(t)}}a(eF,"userHandler");cA.exports=ZG});var dA=h((WZ,EA)=>{"use strict";var tF=require("node-ipc").IPC,uA=b(),lA=T(),pr=g(),{IPC_ERRORS:Tn}=Ke(),rF=require("os"),Xo=class{constructor(t,r){this.ipc=new tF,this.server_name=lA.HDB_IPC_SERVER,this.ipc.config.retry=rF.platform()=="win32"?6e5:100,this.ipc.config.id=lA.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",()=>{pr.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{pr.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&pr.warn("Error connecting to HDB IPC server. Confirm that the server is running."),pr.warn(`Error with IPC client ${this.ipc.config.id}`),pr.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw pr.warn(Tn.INVALID_IPC_DATA_TYPE),new Error(Tn.INVALID_IPC_DATA_TYPE);if(uA.isEmpty(t.type))throw pr.warn(Tn.MISSING_TYPE),new Error(Tn.MISSING_TYPE);if(uA.isEmpty(t.message))throw pr.warn(Tn.MISSING_MSG),new Error(Tn.MISSING_MSG);pr.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(Xo,"IPCClient");EA.exports=Xo});var SA=h((QZ,hA)=>{var sF=Ee(),nF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};hA.exports=function(e){return sF.validateObject(e,nF)}});var vl=h((JZ,fA)=>{"use strict";var iF=T().OPERATIONS_ENUM,Zo=class{constructor(t,r,s,n=void 0){this.operation=iF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Zo,"UpdateObject");fA.exports=Zo});var mA=h((XZ,TA)=>{"use strict";var aF={OPERATION:"operation",REFRESH:"refresh"},zo=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(zo,"JWTTokens");var jo=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(jo,"JWTRSAKeys");TA.exports={JWTTokens:zo,TOKEN_TYPE_ENUM:aF,JWTRSAKeys:jo}});var sc=h((ZZ,OA)=>{"use strict";var gi=require("jsonwebtoken"),Hl=require("fs-extra"),ql=b(),yt=T(),{handleHDBError:at,hdb_errors:oF}=D(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:ct}=oF,Ni=g(),RA=Yo(),Vl=Ar(),cF=Ut().update,_F=vl(),uF=zs(),{UserEventMsg:lF}=qr(),Qr=Y();Qr.initSync();var Gl=require("path"),{JWTTokens:EF,JWTRSAKeys:dF,TOKEN_TYPE_ENUM:ec}=mA(),hF=Qr.get(yt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Qr.get(yt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",SF=Qr.get(yt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Qr.get(yt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",tc="RS256",Fl;OA.exports={createTokens:fF,validateOperationToken:mF,refreshOperationToken:TF,validateRefreshToken:pA};async function fF(e){if(ql.isEmpty(e)||typeof e!="object")throw at(new Error,ct.INVALID_AUTH_OBJECT,ot.BAD_REQUEST,void 0,void 0,!0);if(ql.isEmpty(e.username))throw at(new Error,ct.USERNAME_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);if(ql.isEmpty(e.password))throw at(new Error,ct.PASSWORD_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Vl.findAndValidateUser(e.username,e.password),!t)throw at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Ni.error(d),at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}let r=await rc(),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 AA(i,r.private_key,r.passphrase),c=await gi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:SF,algorithm:tc,subject:ec.REFRESH}),_=RA.hash(c),u=new _F(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await cF(u)}catch(d){Ni.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw at(new Error,ct.REFRESH_TOKEN_SAVE_FAILED,ot.INTERNAL_SERVER_ERROR);return uF.signalUserChange(new lF(process.pid)),new EF(o,c)}a(fF,"createTokens");async function AA(e,t,r){return await gi.sign(e,{key:t,passphrase:r},{expiresIn:hF,algorithm:tc,subject:ec.OPERATION})}a(AA,"signOperationToken");async function rc(){if(Fl===void 0)try{let e=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Hl.readFile(e)).toString(),n=(await Hl.readFile(t)).toString(),i=(await Hl.readFile(r)).toString();Fl=new dF(i,n,s)}catch(e){throw Ni.error(e),at(new Error,ct.NO_ENCRYPTION_KEYS,ot.INTERNAL_SERVER_ERROR)}return Fl}a(rc,"getJWTRSAKeys");async function TF(e){if(!e)throw at(new Error,ct.INVALID_BODY,ot.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw at(new Error,ct.REFRESH_TOKEN_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);await pA(e.refresh_token);let t=await rc(),r=await gi.decode(e.refresh_token);return{operation_token:await AA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(TF,"refreshOperationToken");async function mF(e){try{let t=await rc(),r=await gi.verify(e,t.public_key,{algorithms:tc,subject:ec.OPERATION});return await Vl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ni.warn(t),t.name&&t.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}}a(mF,"validateOperationToken");async function pA(e){let t;try{let r=await rc(),s=await gi.verify(e,r.public_key,{algorithms:tc,subject:ec.REFRESH});t=await Vl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ni.warn(r),r.name&&r.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}if(!RA.validate(t.refresh_token,e))throw at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED);return t}a(pA,"validateRefreshToken")});var $l=h((jZ,IA)=>{"use strict";var RF=SA(),mn=require("passport"),AF=require("passport-local").Strategy,pF=require("passport-http").BasicStrategy,OF=require("util"),NF=Ar(),gA=OF.callbackify(NF.findAndValidateUser),zZ=Ke(),gF=T(),NA=sc();mn.use(new AF(function(e,t,r){gA(e,t,r)}));mn.use(new pF(function(e,t,r){gA(e,t,r)}));mn.serializeUser(function(e,t){t(null,e)});mn.deserializeUser(function(e,t){t(null,e)});function IF(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":mn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===gF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?NA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):NA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:mn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(IF,"authorize");function bF(e,t){let r=RF(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(bF,"checkPermissions");IA.exports={authorize:IF,checkPermissions:bF}});var nc=h((e3,bA)=>{"use strict";var CF=Rr();bA.exports={writeTransaction:wF};function wF(e,t,r){return CF.writeTransaction(e,t,r)}a(wF,"writeTransaction")});var Rt=h((l3,KA)=>{"use strict";var Or=Y();Or.initSync();var LF=require("fs-extra"),UF=require("semver"),Li=require("path"),{monotonicFactory:yF}=require("ulidx"),DF=yF(),wA=require("util"),LA=require("child_process"),MF=wA.promisify(LA.exec),PF=LA.spawn,ee=he(),ie=T(),Ql=b(),Nr=g(),ic=Vr(),BF=nc(),Ii=dr(),{encode:Yl,decode:UA}=require("msgpackr"),{isEmpty:Ns}=Ql,yA=Ar(),t3=hs(),vF=Tt(),r3=wA.promisify(vF.searchByHash),{connect:HF,StorageType:DA,RetentionPolicy:MA,AckPolicy:PA,DeliverPolicy:Kl,NatsConnection:s3,JetStreamManager:n3,JetStreamClient:i3,StringCodec:a3,JSONCodec:qF,createInbox:Jl,StreamSource:o3,headers:GF,toJsMsg:FF,nuid:c3,JetStreamOptions:_3,ErrorCode:CA,nanos:u3}=require("nats"),{PACKAGE_ROOT:VF}=T(),$F=wa(),BA=qF(),kF="clustering",xF=$F.engines[ee.NATS_SERVER_NAME],YF=Li.join(VF,"dependencies"),Wl=Li.join(YF,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),kl,xl,bi,Ci,wi,Kt;KA.exports={runCommand:vA,checkNATSServerInstalled:KF,createConnection:Xl,getConnection:ac,getJetStreamManager:Rn,getJetStream:HA,getNATSReferences:Dt,getServerList:QF,createLocalStream:Zl,listStreams:qA,deleteLocalStream:JF,getServerConfig:Ui,listRemoteStreams:XF,viewStream:ZF,publishToStream:zF,createWorkQueueStream:jF,addSourceToWorkStream:GA,request:e0,removeSourceFromWorkStream:VA,reloadNATS:zl,reloadNATSHub:t0,reloadNATSLeaf:r0,extractServerName:FA,requestErrorHandler:s0,updateWorkStream:n0,createLocalTableStream:kA,createTableStreams:i0,purgeTableStream:xA,purgeSchemaTableStreams:a0,getStreamInfo:o0,updateNodeNameLocalStreams:c0,closeConnection:WF};async function vA(e,t=void 0){let{stdout:r,stderr:s}=await MF(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 We.error(o),new Error(`Error reading HarperDB config file at ${s}`)}lu(n);let i=n.toJSON();nt=_s(i),We.trace(gU)}}a(Zh,"initConfig");function lu(e){let t=e.toJSON(),r=fU(t);if(r.error)throw Na.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(lu,"validateConfig");function UU(e,t){nt===void 0&&(nt={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){We.trace(`Unable to update config object because config param '${e}' does not exist`);return}nt[r.toLowerCase()]=t}a(UU,"updateConfigObject");function zh(e,t,r=void 0,s=!1,n=!1){nt===void 0&&Zh();let i=Xh(re.CONFIG_PARAM_MAP.hdb_root),o=Ws.join(i,re.HDB_CONFIG_FILE),c=Qs(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=uu(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),S=uu(E,r[l]);try{c.setIn([...d],S)}catch(m){We.error(m)}}}lu(c);let _=c.getIn(["rootPath"]),u=Ws.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Ws.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Gt.copySync(o,l),We.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){We.error(IU),We.error(l)}Gt.writeFileSync(u,String(c)),n&&(nt=_s(c.toJSON())),We.trace(`Config parameter: ${e} updated with value: ${t}`)}a(zh,"updateConfigValue");function _s(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=_s(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(_s,"flattenConfig");function uu(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(mU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||It.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 It.autoCast(t)}a(uu,"castConfigValue");function yU(){let e=It.getPropsFilePath(),r=Ia(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Qs(r).toJSON()}a(yU,"getConfiguration");async function DU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return zh(void 0,void 0,n,!0),CU}catch(i){throw typeof i=="string"||i instanceof String?AU(i,i,pU.BAD_REQUEST,void 0,void 0,!0):i}}a(DU,"setConfiguration");function Eu(){let e=It.getPropsFilePath();try{Gt.accessSync(e,Gt.constants.F_OK|Gt.constants.R_OK)}catch(n){throw We.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ia(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Qs(r).toJSON()}a(Eu,"readConfigFile");function Qs(e){return TU.parseDocument(Gt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qs,"parseYamlDoc");function MU(){let e=Eu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=It.isEmptyOrZeroLength(t)?[]:t;let r=Qh(t);if(r)throw Na.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=It.isEmptyOrZeroLength(s)?[]:s;let n=Qh(s);if(n)throw Na.CONFIG_VALIDATION(n.message);if(!It.isEmptyOrZeroLength(s)&&!It.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!It.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Na.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(MU,"getClusteringRoutes");function jh(e){let t=Ia(e);nt={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(It.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?nt[n]=Ws.dirname(s):nt[n]=s}return nt}a(jh,"initOldConfig");function PU(e){let t=Eu();return RU.get(t,e.replaceAll("_","."))}a(PU,"getConfigFromFile")});var Y=h((bJ,rS)=>{"use strict";var du=require("fs-extra"),jt=require("path"),BU=require("os"),vU=require("properties-reader"),Qn=g(),Js=b(),M=T(),ba=dr(),HU="Error initializing environment manager",Ca="BOOT_PROPS_FILE_PATH",tS=!1,qU={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},hr={};rS.exports={BOOT_PROPS_FILE_PATH:Ca,getHdbBasePath:GU,setHdbBasePath:FU,get:VU,initSync:kU,setProperty:x,initTestEnvironment:xU};function GU(){return hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(GU,"getHdbBasePath");function FU(e){hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(FU,"setHdbBasePath");function VU(e){let t=ba.getConfigValue(e);return t===void 0?hr[e]:t}a(VU,"get");function x(e,t){qU[e]&&(hr[e]=t),ba.updateConfigObject(e,t)}a(x,"setProperty");function $U(){let e;try{e=Js.getPropsFilePath(),du.accessSync(e,du.constants.F_OK|du.constants.R_OK),tS=!0;let t=vU(e);return hr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),hr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),hr[Ca]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a($U,"doesPropFileExist");function kU(e=!1){try{(tS||$U())&&(ba.initConfig(e),hr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ba.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(HU),Qn.error(t),console.error(t),process.exit(1)}}a(kU,"initSync");function xU(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=jt.join(__dirname,"../../","unitTests");hr[Ca]=jt.join(_,"hdb_boot_properties.file"),x(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,jt.join(_,"settings.test")),x(M.HDB_SETTINGS_NAMES.INSTALL_USER,BU.userInfo().username),x(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.HDB_SETTINGS_NAMES.CERT_KEY,jt.join(_,"envDir","utility","keys","certificate.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,jt.join(_,"envDir","utility","keys","certificate.pem")),x(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),x(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,jt.join(_,"envDir","log")),x(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),x(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),x(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,jt.join(_,"envDir")),x(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Js.isEmpty(n)?!0:n),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Js.isEmpty(n)?!0:n),x(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),x(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Js.isEmpty(i)?!1:i),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Js.isEmpty(i)?!1:i),x(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),x(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),x(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,jt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),x(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Js.isEmpty(c)?!1:c),o&&(x("CORS_ACCESSLIST",o),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(x(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(x(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(x(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ca}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(xU,"initTestEnvironment")});var wa=h((CJ,YU)=>{YU.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 nS=h((wJ,sS)=>{var KU=require("fastify-plugin");sS.exports=KU(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var us=h((LJ,WU)=>{WU.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 TS=h((yJ,fS)=>{"use strict";var hu=require("recursive-iterator"),QU=require("alasql"),Su=require("clone"),iS=b(),{handleHDBError:aS,hdb_errors:JU}=D(),{HDB_ERROR_MSGS:oS,HTTP_STATUS_CODES:cS}=JU,XU=["DISTINCT_ARRAY"],_S=Symbol("validateTables"),fu=Symbol("validateTable"),UJ=Symbol("getAllColumns"),uS=Symbol("validateAllColumns"),La=Symbol("findColumn"),lS=Symbol("validateOrderBy"),Jn=Symbol("validateSegment"),Tu=Symbol("validateColumn"),ES=Symbol("setColumnsForTable"),dS=Symbol("checkColumnsForAsterisk"),hS=Symbol("validateGroupBy"),SS=Symbol("hasColumns"),Ua=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_S](),this[dS](),this[uS]()}[_S](){if(this[SS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fu](t.table)})}}[SS](){let t=!1,r=new hu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw aS(new Error,oS.SCHEMA_NOT_FOUND(t.databaseid),cS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw aS(new Error,oS.TABLE_NOT_FOUND(t.databaseid,t.tableid),cS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Su(s);n.table=Su(t),this.attributes.push(n)})}[La](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)}[dS](){let t=new hu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ES](r.tableid)}[ES](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new QU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[uS](){this[Jn](this.statement.columns,!1),this[Jn](this.statement.joins,!1),this[Jn](this.statement.where,!1),this[hS](this.statement.group,!1),this[Jn](this.statement.order,!0)}[Jn](t,r){if(!t)return;let s=new hu(t),n=[];for(let{node:i,path:o}of s)!iS.isEmpty(i)&&!iS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[lS](i):n.push(this[Tu](i)));return n}[hS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&XU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Su(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[La](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[La](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[lS](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[Tu](t)}[Tu](t){let r=this[La](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(Ua,"SelectValidator");fS.exports=Ua});var mu=h((DJ,mS)=>{"use strict";var ya=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(ya,"BridgeMethods");mS.exports=ya});var ls=h((BJ,OS)=>{"use strict";var RS=Ke().LMDB_ERRORS_ENUM,MJ=require("lmdb"),ZU=Ye(),PJ=require("buffer").Buffer,zU=require("microtime"),{OVERFLOW_MARKER:AS,MAX_SEARCH_KEY_LENGTH:Da}=ZU,pS=["number","string","symbol","boolean","bigint"];function jU(e){if(!e)throw new Error(RS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(RS.INVALID_ENVIRONMENT)}a(jU,"validateEnv");function ey(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(ey,"stringifyData");function ty(e){return e instanceof Date?e.valueOf():e}a(ty,"convertKeyValueToWrite");function ry(e){if(e==null)return;if(pS.includes(typeof e))return e.length>Da?[e.slice(0,Da)+AS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];pS.includes(typeof n)&&(n.length>Da?t.push(n.slice(0,Da)+AS):t.push(n))}}return t}a(ry,"getIndexedValues");function sy(){let e=zU.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(sy,"getMicroTime");OS.exports={validateEnv:jU,stringifyData:ey,convertKeyValueToWrite:ty,getMicroTime:sy,getIndexedValues:ry}});var gS=h((vJ,NS)=>{"use strict";var Ma=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Ma,"DBIDefinition");NS.exports=Ma});var bS=h((HJ,IS)=>{"use strict";var Pa=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(Pa,"OpenDBIObject");IS.exports=Pa});var wS=h((qJ,CS)=>{"use strict";var Ba=class{constructor(t,r,s,n,i=!1,o=!1,c=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,c!==void 0&&(this.overlappingSync=c)}};a(Ba,"OpenEnvironmentObject");CS.exports=Ba});var X=h((FJ,FS)=>{"use strict";var Ru=require("lmdb"),bt=require("fs-extra"),Ft=require("path"),Ha=ls(),LS=g(),De=Ke().LMDB_ERRORS_ENUM,qa=gS(),Au=bS(),US=wS(),Br=Ye(),GJ=T(),Xn=Y();Xn.initSync();var yS=Xn.get("STORAGE_WRITEASYNC")===!0||Xn.get("STORAGE_WRITEASYNC")==="true"||Xn.get("STORAGE_WRITEASYNC")==="TRUE",DS=Xn.get("STORAGE_OVERLAPPINGSYNC"),MS=1024*1024*1024,PS=1e4,BS=1e3,Vt=Br.INTERNAL_DBIS_NAME,vS=Br.DBI_DEFINITION_NAME,ny="data.mdb",iy="lock.mdb",Zn=".mdb",ay="-lock",va=class{constructor(t,r,s=!1){this.dbi=Ct(t,r),this.key_type=this.dbi[Br.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Br.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ru.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(va,"TransactionCursor");function pu(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(pu,"pathEnvNameValidation");async function Ou(e,t,r=!0){try{await bt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Ft.join(e,t+Zn);return await bt.access(s,bt.constants.R_OK|bt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bt.access(Ft.join(e,t,ny),bt.constants.R_OK|bt.constants.F_OK),Ft.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(Ou,"validateEnvironmentPath");function Ga(e,t){if(Ha.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ga,"validateEnvDBIName");async function oy(e,t,r=!1,s=!1){pu(e,t),t=t.toString();try{return await Ou(e,t,s),Nu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Ft.join(e,t);await bt.mkdirp(s?i:e);let o=new US(s?i:i+Zn,MS,PS,BS,!1,yS,DS),c=Ru.open(o);c.dbis=Object.create(null);let _=new Au(!1);c.openDB(Vt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=gu(e,t,r);return c[Br.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(oy,"createEnvironment");async function cy(e,t,r,s=!0){let n=await Nu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await bt.access(Ft.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(cy,"copyEnvironment");async function Nu(e,t,r=!1){pu(e,t),t=t.toString();let s=gu(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 Ou(e,t),i=Ft.join(e,t+Zn),o=n!=i,c=new US(n,MS,PS,BS,o,yS,DS),_=Ru.open(c);_.dbis=Object.create(null);let u=qS(_);for(let l=0;l<u.length;l++)Ct(_,u[l]);return _[Br.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Nu,"openEnvironment");async function _y(e,t,r=!1){pu(e,t),t=t.toString();let s=Ft.join(e,t+Zn),n=await Ou(e,t);if(global.lmdb_map!==void 0){let i=gu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await HS(o),delete global.lmdb_map[i]}}await bt.remove(n),await bt.remove(n===s?n+ay:Ft.join(Ft.dirname(n),iy))}a(_y,"deleteEnvironment");async function HS(e){Ha.validateEnv(e);let t=e[Br.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(HS,"closeEnvironment");function gu(e,t,r=!1){let n=`${Ft.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(gu,"getCachedEnvironmentName");function uy(e){Ha.validateEnv(e);let t=Object.create(null),r=Ct(e,Vt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Vt)try{t[s]=Object.assign(new qa,n)}catch{LS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(uy,"listDBIDefinitions");function qS(e){Ha.validateEnv(e);let t=[],r=Ct(e,Vt);for(let{key:s}of r.getRange({start:!1}))s!==Vt&&t.push(s);return t}a(qS,"listDBIs");function ly(e,t){let s=Ct(e,Vt).getEntry(t),n=new qa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{LS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ly,"getDBIDefinition");function GS(e,t,r,s=!1){if(Ga(e,t),t=t.toString(),t===Vt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ct(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Au(r,s===!0),o=e.openDB(t,i),c=new qa(r===!0,s);return o[vS]=c,Ct(e,Vt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(GS,"createDBI");function Ct(e,t){if(Ga(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Vt?r=ly(e,t):r=new qa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Au(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(De.DBI_DOES_NOT_EXIST):n}return s[vS]=r,e.dbis[t]=s,s}a(Ct,"openDBI");function Ey(e,t){Ga(e,t),t=t.toString();let r=Ct(e,t),s=r.getStats();return r[Br.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Ey,"statDBI");async function dy(e,t){try{let r=Ft.join(e,t+Zn);return(await bt.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(dy,"environmentDataSize");function hy(e,t){if(Ga(e,t),t=t.toString(),t===Vt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);Ct(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ct(e,Vt).removeSync(t)}a(hy,"dropDBI");function Sy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ct(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)GS(e,n,n!==t,n===t);else throw i}}}a(Sy,"initializeDBIs");FS.exports={openDBI:Ct,openEnvironment:Nu,createEnvironment:oy,listDBIs:qS,listDBIDefinitions:uy,createDBI:GS,dropDBI:hy,statDBI:Ey,deleteEnvironment:_y,initializeDBIs:Sy,TransactionCursor:va,environmentDataSize:dy,copyEnvironment:cy,closeEnvironment:HS}});var $S=h((VJ,VS)=>{"use strict";var Fa=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Fa,"InsertRecordsResponseObject");VS.exports=Fa});var xS=h(($J,kS)=>{"use strict";var Va=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(Va,"UpdateRecordsResponseObject");kS.exports=Va});var KS=h((kJ,YS)=>{"use strict";var $a=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a($a,"UpsertRecordsResponseObject");YS.exports=$a});var Xs=h((WJ,QS)=>{"use strict";var fy=X(),Ty=$S(),my=xS(),Ry=KS(),jn=ls(),zn=Ke().LMDB_ERRORS_ENUM,Ay=Ye(),vr=T(),py=b(),Oy=require("uuid"),xJ=require("lmdb"),{handleHDBError:Ny,hdb_errors:gy}=D(),{OVERFLOW_MARKER:YJ,MAX_SEARCH_KEY_LENGTH:KJ}=Ay,Iu=vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Es=vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Iy(e,t,r,s,n=!0){Lu(e,t,r,s),bu(e,t,r);let i=new Ty,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];WS(u,!0,n);let l=by(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Cu(o,c,s,i)}a(Iy,"insertRecords");function by(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][vr.FUNC_VAL],s[o]=c)}let _=jn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[Es])})}a(by,"insertRecord");function Cy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Cy,"removeSkippedRecords");function WS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Es]))&&(e[Es]=s),t===!0?(r===!0||!Number.isInteger(e[Iu]))&&(e[Iu]=s):delete e[Iu]}a(WS,"setTimestamps");function bu(e,t,r){r.indexOf(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),fy.initializeDBIs(e,t,r)}a(bu,"initializeTransaction");async function wy(e,t,r,s,n=!0){Lu(e,t,r,s),bu(e,t,r);let i=new my,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=wu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Cu(c,_,s,i,o)}a(wy,"updateRecords");async function Ly(e,t,r,s,n=!0){try{Lu(e,t,r,s)}catch(_){throw Ny(_,_.message,gy.HTTP_STATUS_CODES.BAD_REQUEST)}bu(e,t,r);let i=new Ry,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;py.isEmpty(u[t])?(l=Oy.v4(),u[t]=l):l=u[t];let E=wu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Cu(o,c,s,i)}a(Ly,"upsertRecords");async function Cu(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=jn.getMicroTime(),Cy(r,n),s}a(Cu,"finalizeWrite");function wu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(WS(r,!l,o),Number.isInteger(r[Es])&&u[Es]>r[Es])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let z=R([[u]]);Array.isArray(z)&&(R=z[0][vr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=jn.getIndexedValues(L);if(B)for(let z=0,V=B.length;z<V;z++)w.remove(B[z],s);if(B=jn.getIndexedValues(R),B)for(let z=0,V=B.length;z<V;z++)w.put(B[z],s)}let S=Object.assign({},u,r);c.put(s,S,S[Es])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:wu(e,t,r,s,n,i,o))}a(wu,"updateUpsertRecord");function Uy(e,t,r){if(jn.validateEnv(e),t===void 0)throw new Error(zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zn.WRITE_ATTRIBUTES_REQUIRED):new Error(zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Uy,"validateBasic");function Lu(e,t,r,s){if(Uy(e,t,r),!Array.isArray(s))throw s===void 0?new Error(zn.RECORDS_REQUIRED):new Error(zn.RECORDS_MUST_BE_ARRAY)}a(Lu,"validateWrite");QS.exports={insertRecords:Iy,updateRecords:wy,upsertRecords:Ly}});var te=h((QJ,XS)=>{"use strict";var Uu=T(),Zs=Y(),yu=require("path");Zs.initSync();var ka,xa,Ya;function JS(){if(ka!==void 0)return ka;if(Zs.getHdbBasePath()!==void 0)return ka=yu.join(Zs.getHdbBasePath(),Uu.SCHEMA_DIR_NAME),ka}a(JS,"getBaseSchemaPath");function yy(){if(xa!==void 0)return xa;if(Zs.getHdbBasePath()!==void 0)return xa=yu.join(JS(),Uu.SYSTEM_SCHEMA_NAME),xa}a(yy,"getSystemSchemaPath");function Dy(){if(Ya!==void 0)return Ya;if(Zs.getHdbBasePath()!==void 0)return Ya=yu.join(Zs.getHdbBasePath(),Uu.TRANSACTIONS_DIR_NAME),Ya}a(Dy,"getTransactionAuditStorePath");XS.exports={getBaseSchemaPath:JS,getSystemSchemaPath:yy,getTransactionAuditStorePath:Dy}});var Sr=h((JJ,jS)=>{"use strict";var zS=b(),ZS=T(),Wa=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Du=require("joi"),Ka={schema_format:{pattern:Wa,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},My=Du.alternatives(Du.string().min(1).max(Ka.schema_length.maximum).pattern(Wa).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Du.number()).required();function Py(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ka.schema_length.maximum?`'${e}' maximum of 250 characters`:Wa.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Py,"checkValidTable");function By(e,t){return zS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(By,"validateSchemaExists");function vy(e,t){let r=t.state.ancestors[0].schema;return zS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(vy,"validateTableExists");function Hy(e,t){return e.toLowerCase()===ZS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${ZS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Hy,"validateSchemaName");jS.exports={common_validators:Ka,schema_regex:Wa,hdb_schema_table:My,validateSchemaExists:By,validateTableExists:vy,validateSchemaName:Hy,checkValidTable:Py}});var Qa=h((XJ,ef)=>{var{common_validators:Hr}=Sr(),ei=Ee(),$t="is required",Z={schema:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},table:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},hash_attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length}};function ti(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(ti,"makeAttributesStrings");function qy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(qy,"schema_object");function Gy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(Gy,"table_object");function Fy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence={message:$t},ei.validateObject(e,Z)}a(Fy,"create_table_object");function Vy(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence={message:$t},Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a(Vy,"attribute_object");function $y(e){return e=ti(e),Z.schema.presence={message:$t},Z.table.presence={message:$t},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ei.validateObject(e,Z)}a($y,"describe_table");function ky(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(ky,"validateTableResidence");ef.exports={schema_object:qy,create_table_object:Fy,table_object:Gy,attribute_object:Vy,describe_table:$y,validateTableResidence:ky}});var rf=h((ZJ,tf)=>{"use strict";var xy=require("uuid"),Ja=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||xy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ja,"CreateAttributeObject");tf.exports=Ja});var Za=h((zJ,sf)=>{"use strict";var Yy=rf(),Xa=class extends Yy{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Xa,"LMDBCreateAttributeObject");sf.exports=Xa});var af=h((jJ,nf)=>{"use strict";nf.exports=Wy;var Ky="inserted";function Wy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ky?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Wy,"returnObject")});var za=h((eX,cf)=>{"use strict";var Qy=T(),Mu=X(),Jy=Xs(),{getSystemSchemaPath:Xy,getBaseSchemaPath:Zy}=te(),zy=require("path"),jy=us(),eD=Qa(),tD=Za(),rD=af(),{handleHDBError:sD,hdb_errors:nD}=D(),iD=b(),Pu=jy.hdb_attribute,of=[];for(let e=0;e<Pu.attributes.length;e++)of.push(Pu.attributes[e].attribute);var aD="inserted";cf.exports=oD;async function oD(e){let t=eD.attribute_object(e);if(t)throw sD(new Error,t.message,nD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=iD.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 tD(e.schema,e.table,e.attribute,e.id);try{let n=await Mu.openEnvironment(zy.join(Zy(),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}`);Mu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Mu.openEnvironment(Xy(),Qy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await Jy.insertRecords(i,Pu.hash_attribute,of,[s]);return rD(aD,o,{records:[s]},c)}catch(n){throw n}}a(oD,"lmdbCreateAttribute")});var vu=h((tX,uf)=>{var{hdb_schema_table:_f}=Sr(),cD=Ee(),Bu=require("joi"),_D={undefined:"undefined",null:"null"},uD=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||_D[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"),lD=Bu.object({schema:_f,table:_f,records:Bu.array().items(Bu.object().custom(uD)).required()});uf.exports=function(e){return cD.validateBySchema(e,lD)}});var ja=h((sX,Ef)=>{"use strict";var fr=b(),lf=g(),rX=vu();Ef.exports=ED;function ED(e){if(fr.isEmpty(e))throw new Error("invalid update parameters defined.");if(fr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(fr.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(fr.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&&fr.isEmptyOrZeroLength(o[r]))throw lf.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(!fr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw lf.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`);!fr.isEmpty(o[r])&&o[r]!==""&&s.has(fr.autoCast(o[r]))&&(o.skip=!0),s.add(fr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(ED,"insertUpdateValidate")});var ri=h((nX,df)=>{"use strict";var dD=T().OPERATIONS_ENUM,eo=class{constructor(t,r,s,n,i=void 0){this.operation=dD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(eo,"InsertObject");df.exports=eo});var ro=h((aX,hf)=>{"use strict";var iX=ri(),to=T(),qu=b(),Hu=g(),hD=require("uuid"),{handleHDBError:si,hdb_errors:SD}=D(),{HDB_ERROR_MSGS:ni,HTTP_STATUS_CODES:ii}=SD;hf.exports=fD;function fD(e,t,r){for(let n=0;n<t.length;n++)TD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];mD(i,r,e.operation)}}a(fD,"processRows");function TD(e){if(Buffer.byteLength(String(e))>to.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw si(new Error,ni.ATTR_NAME_LENGTH_ERR(e),ii.BAD_REQUEST,void 0,void 0,!0);if(qu.isEmptyOrZeroLength(e)||qu.isEmpty(e.trim()))throw si(new Error,ni.ATTR_NAME_NULLISH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}a(TD,"validateAttribute");function mD(e,t,r){if(!e.hasOwnProperty(t)||qu.isEmptyOrZeroLength(e[t])){if(r===to.OPERATIONS_ENUM.INSERT||r===to.OPERATIONS_ENUM.UPSERT){e[t]=hD.v4();return}throw Hu.error("Update transaction aborted due to record with no hash value:",e),si(new Error,ni.RECORD_MISSING_HASH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>to.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Hu.error(e),si(new Error,ni.HASH_VAL_LENGTH_ERR,ii.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Hu.error(e),si(new Error,ni.INVALID_FORWARD_SLASH_IN_HASH_ERR,ii.BAD_REQUEST,void 0,void 0,!0)}a(mD,"validateHash")});var ff=h((oX,Sf)=>{"use strict";var so=class{constructor(t,r){this.type=t,this.message=r}};a(so,"IPCEventObject");Sf.exports=so});var qr=h((cX,Tf)=>{"use strict";var RD=g(),Gu=b(),AD=T(),{IPC_ERRORS:ai}=Ke();Tf.exports={sendIpcEvent:pD,validateEvent:OD,SchemaEventMsg:ND,UserEventMsg:gD};function pD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):RD.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(pD,"sendIpcEvent");function OD(e){if(typeof e!="object")return ai.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Gu.isEmpty(e.type))return ai.MISSING_TYPE;if(!e.hasOwnProperty("message")||Gu.isEmpty(e.message))return ai.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Gu.isEmpty(e.message.originator))return ai.MISSING_ORIGIN;if(AD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ai.INVALID_EVENT(e.type)}a(OD,"validateEvent");function ND(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(ND,"SchemaEventMsg");function gD(e){this.originator=e}a(gD,"UserEventMsg")});var zs=h((uX,pf)=>{"use strict";var mf=T(),_X=b(),no=g(),Rf=ff(),{sendIpcEvent:Af}=qr();function ID(e){try{no.trace("signalSchemaChange called with message:",e);let t=new Rf(mf.IPC_EVENT_TYPES.SCHEMA,e);Af(t)}catch(t){no.error(t)}}a(ID,"signalSchemaChange");function bD(e){try{no.trace("signalUserChange called with message:",e);let t=new Rf(mf.IPC_EVENT_TYPES.USER,e);Af(t)}catch(t){no.error(t)}}a(bD,"signalUserChange");pf.exports={signalSchemaChange:ID,signalUserChange:bD}});var io=h((lX,Nf)=>{"use strict";var Of=b(),CD=T(),wD=g(),LD=za(),UD=Za(),yD=zs(),{SchemaEventMsg:DD}=qr(),MD="already exists in";Nf.exports=PD;async function PD(e,t,r){try{if(Of.isEmptyOrZeroLength(r))return r;let s=[];Of.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 BD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(PD,"lmdbCheckForNewAttributes");async function BD(e,t,r,s){let n=new UD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await vD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(MD))wD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(BD,"createNewAttribute");async function vD(e){let t;try{return t=await LD(e),yD.signalSchemaChange(new DD(process.pid,CD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(vD,"createAttribute")});var js=h((EX,gf)=>{"use strict";var ao=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(ao,"LMDBTransactionObject");gf.exports=ao});var bf=h((dX,If)=>{"use strict";var HD=js(),qD=T().OPERATIONS_ENUM,oo=class extends HD{constructor(t,r,s,n,i=void 0){super(qD.INSERT,r,s,n,i),this.records=t}};a(oo,"LMDBInsertTransactionObject");If.exports=oo});var wf=h((hX,Cf)=>{"use strict";var GD=js(),FD=T().OPERATIONS_ENUM,co=class extends GD{constructor(t,r,s,n,i,o=void 0){super(FD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(co,"LMDBUpdateTransactionObject");Cf.exports=co});var Uf=h((SX,Lf)=>{"use strict";var VD=js(),$D=T().OPERATIONS_ENUM,_o=class extends VD{constructor(t,r,s,n,i,o=void 0){super($D.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(_o,"LMDBUpsertTransactionObject");Lf.exports=_o});var Df=h((fX,yf)=>{"use strict";var kD=js(),xD=T().OPERATIONS_ENUM,uo=class extends kD{constructor(t,r,s,n,i=void 0){super(xD.DELETE,s,n,t,i),this.original_records=r}};a(uo,"LMDBDeleteTransactionObject");yf.exports=uo});var oi=h((TX,vf)=>{"use strict";var YD=require("path"),Mf=X(),KD=bf(),WD=wf(),QD=Uf(),JD=Df(),en=Ye(),Pf=b(),{CONFIG_PARAMS:XD}=T(),Bf=Y();Bf.initSync();var lo=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:ZD}=te();vf.exports=zD;async function zD(e,t){if(Bf.get(XD.LOGGING_AUDITLOG)===!1)return;let r=YD.join(ZD(),e.schema.toString()),s=await Mf.openEnvironment(r,e.table,!0),n=jD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Mf.initializeDBIs(s,en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,en.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Pf.isEmpty(n.user_name)||s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[en.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(zD,"writeTransaction");function jD(e,t){let r=Pf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===lo.INSERT)return new KD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.UPDATE)return new WD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.UPSERT)return new QD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===lo.DELETE)return new JD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(jD,"createTransactionObject")});var Fu=h((RX,Hf)=>{"use strict";var eM=ja(),mX=ri(),tn=T(),tM=ro(),rM=Xs().insertRecords,sM=X(),nM=require("path"),iM=g(),aM=io(),{getBaseSchemaPath:oM}=te(),cM=oi();Hf.exports=_M;async function _M(e){try{let{schema_table:t,attributes:r}=eM(e);tM(e,r,t.hash_attribute),e.schema!==tn.SYSTEM_SCHEMA_NAME&&(r.includes(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aM(e.hdb_auth_header,t,r),n=nM.join(oM(),e.schema.toString()),i=await sM.openEnvironment(n,e.table),o=await rM(i,t.hash_attribute,r,e.records,e[tn.CLUSTERING_FLAG]!==!0);try{await cM(e,o)}catch(c){iM.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(_M,"lmdbCreateRecords")});var Ff=h((AX,Gf)=>{"use strict";var qf=T(),uM=Fu(),lM=ri(),EM=require("fs-extra"),dM=require("path"),{getBaseSchemaPath:hM}=te();Gf.exports=SM;async function SM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new lM(qf.SYSTEM_SCHEMA_NAME,qf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await uM(r),await EM.mkdirp(dM.join(hM(),e.schema.toString()))}a(SM,"lmdbCreateSchema")});var $f=h((pX,Vf)=>{"use strict";var Eo=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Eo,"DeleteRecordsResponseObject");Vf.exports=Eo});var ku=h((IX,Yf)=>{"use strict";var kf=X(),Vu=ls(),$u=Ke().LMDB_ERRORS_ENUM,fM=Ye(),xf=g(),OX=b(),TM=require("lmdb"),mM=$f(),{OVERFLOW_MARKER:NX,MAX_SEARCH_KEY_LENGTH:gX}=fM;async function RM(e,t,r){if(Vu.validateEnv(e),t===void 0)throw new Error($u.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($u.IDS_REQUIRED):new Error($u.IDS_MUST_BE_ARRAY);try{let s=kf.listDBIs(e);kf.initializeDBIs(e,t,s);let n=new mM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,TM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let z=Vu.getIndexedValues(B);if(z)for(let V=0,Q=z.length;V<Q;V++)L.remove(z[V],i)}catch{xf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){xf.warn(S),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Vu.getMicroTime(),n}catch(s){throw s}}a(RM,"deleteRecords");Yf.exports={deleteRecords:RM}});var ci=h((bX,Wf)=>{"use strict";var rn=b(),AM=ku(),pM=X(),OM=require("path"),{getBaseSchemaPath:NM}=te(),gM=oi(),IM=g();Wf.exports=bM;async function bM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(rn.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(rn.isEmptyOrZeroLength(e.hash_values)&&!rn.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];rn.isEmpty(_)||e.hash_values.push(_)}}if(rn.isEmptyOrZeroLength(e.hash_values))return Kf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(rn.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=OM.join(NM(),e.schema.toString()),i=await pM.openEnvironment(n,e.table),o=await AM.deleteRecords(i,s,e.hash_values);try{t===!0&&await gM(e,o)}catch(c){IM.error(`unable to write transaction due to ${c.message}`)}return Kf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(bM,"lmdbDeleteRecords");function Kf(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(Kf,"createDeleteResponse")});var Yu=h((wX,Qf)=>{"use strict";var CM=T(),CX=ls();function xu(e,t){let r=Object.create(null);if(t.length===1&&CM.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(xu,"parseRow");function wM(e,t,r,s){let n=xu(r,e);s.push(n)}a(wM,"searchAll");function LM(e,t,r,s){let n=xu(r,e);s[t]=n}a(LM,"searchAllToMap");function UM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(UM,"iterateDBI");function ds(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(ds,"pushResults");function yM(e,t,r,s,n,i){t.toString().endsWith(e)&&ds(t,r,s,n,i)}a(yM,"endsWith");function DM(e,t,r,s,n,i){t.toString().includes(e)&&ds(t,r,s,n,i)}a(DM,"contains");function MM(e,t,r,s,n,i){t>e&&ds(t,r,s,n,i)}a(MM,"greaterThanCompare");function PM(e,t,r,s,n,i){t>=e&&ds(t,r,s,n,i)}a(PM,"greaterThanEqualCompare");function BM(e,t,r,s,n,i){t<e&&ds(t,r,s,n,i)}a(BM,"lessThanCompare");function vM(e,t,r,s,n,i){t<=e&&ds(t,r,s,n,i)}a(vM,"lessThanEqualCompare");Qf.exports={parseRow:xu,searchAll:wM,searchAllToMap:LM,iterateDBI:UM,endsWith:yM,contains:DM,greaterThanCompare:MM,greaterThanEqualCompare:PM,lessThanCompare:BM,lessThanEqualCompare:vM,pushResults:ds}});var sn=h((yX,eT)=>{"use strict";var wt=X(),HM=g(),St=ls(),Gr=Ye(),ce=Ke().LMDB_ERRORS_ENUM,LX=b(),qM=T(),kt=Yu(),UX=require("lmdb"),{OVERFLOW_MARKER:Jf,MAX_SEARCH_KEY_LENGTH:GM}=Gr,_i={lazy:!0};function Xf(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Ku(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Xf,"iterateFullIndex");function ui(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=Ku(e,t,r);E[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,w=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))kt.pushResults(d(L,B),B,l,t,r);return l}a(ui,"iterateRangeBetween");function Ku(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(Jf)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Gr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,_i)[r]}return n}}a(Ku,"getOverflowCheck");function FM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);ho(r),r=li(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))kt.searchAll(r,_,u,o);return o}a(FM,"searchAll");function VM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return ho(r),r=li(e,r),Xf(e,t,t,kt.searchAllToMap.bind(null,r),s,n,i)}a(VM,"searchAllToMap");function $M(e,t,r=!1,s=void 0,n=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Xf(e,void 0,t,kt.iterateDBI,r,s,n)}a($M,"iterateDBI");function kM(e,t){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(kM,"countAll");function xM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=wt.openDBI(e,r);s=St.convertKeyValueToWrite(s);let _=[[],[]];if(c[Gr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,_i);u!==void 0&&kt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))kt.pushResults(s,u,_,t,r);return _}a(xM,"equals");function YM(e,t,r){return Fr(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(YM,"count");function KM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=St.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))kt.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))kt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(KM,"startsWith");function WM(e,t,r,s,n=!1,i=void 0,o=void 0){return Zf(e,t,r,s,n,i,o,!0)}a(WM,"endsWith");function Zf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){Fr(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Ku(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=d.toString();if(S.endsWith(Jf))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?S.endsWith(s):S.includes(s))if(u[Gr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&(kt.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(Zf,"contains");function QM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ui(e,t,r,s,_,n,i,o,!0,!1)}a(QM,"greaterThan");function JM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ui(e,t,r,s,_,n,i,o,!1,!1)}a(JM,"greaterThanEqual");function XM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ui(e,t,r,_,s,n,i,o,!1,!0)}a(XM,"lessThan");function ZM(e,t,r,s,n=!1,i=void 0,o=void 0){Fr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ui(e,t,r,_,s,n,i,o,!1,!1)}a(ZM,"lessThanEqual");function zM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(St.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=St.convertKeyValueToWrite(s),n=St.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ui(e,t,r,s,n,i,o,c)}a(zM,"between");function jM(e,t,r,s){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ho(r),r=li(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?_i:void 0);return i&&(n=kt.parseRow(i,r)),n}a(jM,"searchByHash");function eP(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,_i)===void 0&&(s=!1),s}a(eP,"checkHashExists");function tP(e,t,r,s,n=[]){jf(e,t,r,s,n);let i=zf(e,t,r,s,n);return Object.values(i)}a(tP,"batchSearchByHash");function rP(e,t,r,s,n=[]){return jf(e,t,r,s,n),zf(e,t,r,s,n)}a(rP,"batchSearchByHashToMap");function zf(e,t,r,s,n=[]){r=li(e,r);let i=Object.create(null),o=r.length<3?_i:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=kt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw HM.warn(u),u}}return i}a(zf,"batchHashSearch");function jf(e,t,r,s,n){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ho(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(jf,"initializeBatchSearchByHash");function ho(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ho,"validateFetchAttributes");function Fr(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>GM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Fr,"validateComparisonFunctions");function li(e,t){return t.length===1&&qM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(li,"setGetWholeRowAttributes");eT.exports={searchAll:FM,searchAllToMap:VM,count:YM,countAll:kM,equals:xM,startsWith:KM,endsWith:WM,contains:Zf,searchByHash:jM,setGetWholeRowAttributes:li,batchSearchByHash:tP,batchSearchByHashToMap:rP,checkHashExists:eP,iterateDBI:$M,greaterThan:QM,greaterThanEqual:JM,lessThan:XM,lessThanEqual:ZM,between:zM}});var Ei=h((MX,nT)=>{var tT=require("lodash"),rT=Ee(),W=require("joi"),sP=b(),{hdb_schema_table:xt,checkValidTable:sT}=Sr(),{handleHDBError:nP,hdb_errors:iP}=D(),{HTTP_STATUS_CODES:aP}=iP,DX=W.object({schema:xt,table:xt,hash_values:W.array().min(1).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(xt).required()}),oP=W.object({schema:xt,table:xt,search_attribute:xt,search_value:W.any().required(),get_attributes:W.array().min(1).items(xt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),cP=W.object({schema:xt,table:xt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(xt).required(),conditions:W.array().min(1).items(W.object({search_attribute:xt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});nT.exports=function(e,t){let r=null;switch(t){case"value":r=rT.validateBySchema(e,oP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(sT("schema",e.schema)),i(sT("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=rT.validateBySchema(e,cP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=sP.checkGlobalSchemaTable(e.schema,e.table);if(n)return nP(new Error,n,aP.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=tT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!tT.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Wu=h((PX,iT)=>{"use strict";var _P=X(),uP=Ei(),lP=require("path"),{getBaseSchemaPath:EP}=te();iT.exports=dP;function dP(e){let t=uP(e,"hashes");if(t)throw t;let r=lP.join(EP(),e.schema.toString());return _P.openEnvironment(r,e.table)}a(dP,"initialize")});var Qu=h((BX,aT)=>{"use strict";var hP=sn(),SP=Wu();aT.exports=fP;async function fP(e){try{let t=await SP(e),r=global.hdb_schema[e.schema][e.table];return hP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(fP,"lmdbGetDataByHash")});var hs=h((vX,oT)=>{"use strict";var So=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(So,"SearchByHashObject");oT.exports=So});var _T=h((qX,cT)=>{"use strict";var HX=hs(),TP=sn(),mP=Wu();cT.exports=RP;async function RP(e){try{let t=await mP(e),r=global.hdb_schema[e.schema][e.table];return TP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(RP,"lmdbSearchByHash")});var Yt=h((GX,uT)=>{"use strict";var fo=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(fo,"SearchObject");uT.exports=fo});var To=h((FX,ST)=>{"use strict";var Qe=sn(),AP=X(),pP=require("path"),OP=b(),U=Ye(),Ss=T(),{getBaseSchemaPath:NP}=te(),gP=us(),lT=Ke().LMDB_ERRORS_ENUM,{compareKeys:nn}=require("ordered-binary"),Tr=Ss.SEARCH_WILDCARDS;async function IP(e,t,r){let s;e.schema===Ss.SYSTEM_SCHEMA_NAME?s=gP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hT(e,s.hash_attribute,r,t);return ET(e,n,s.hash_attribute,r)}a(IP,"prepSearch");async function ET(e,t,r,s){let n=pP.join(NP(),e.schema.toString()),i=await AP.openEnvironment(n,e.table),o=dT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(wP(e,r)===!1)return s===!0?CP(o):o[1];let _=o[0];return s===!0?Qe.batchSearchByHashToMap(i,r,e.get_attributes,_):Qe.batchSearchByHash(i,r,e.get_attributes,_)}a(ET,"executeSearch");function dT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=Qe.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=Qe.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=Qe.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=Qe.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return Qe.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qe.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=Qe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=Qe.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=Qe.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(dT,"searchByType");function bP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return nn(i,s[0])>=0&&nn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>nn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>nn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>nn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>nn(n[r],s)<=0;default:return Object.create(null)}}a(bP,"filterByType");function CP(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(CP,"createMapFromArrays");function wP(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(wP,"checkToFetchMore");function hT(e,t,r,s){if(OP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Tr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tr[0])<0&&n.indexOf(Tr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(Tr.indexOf(i)>=0&&Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Tr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tr[0])||n.includes(Tr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(lT.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ss.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case Ss.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case Ss.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ss.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case Ss.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lT.UNKNOWN_SEARCH_TYPE)}}a(hT,"createSearchTypeFromSearchObject");ST.exports={executeSearch:ET,createSearchTypeFromSearchObject:hT,prepSearch:IP,searchByType:dT,filterByType:bP}});var TT=h(($X,fT)=>{"use strict";var VX=Yt(),LP=Ei(),UP=b(),yP=T(),DP=To();fT.exports=MP;async function MP(e,t){if(!UP.isEmpty(t)&&yP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=LP(e,"value");if(s)throw s;let n=!0;try{return await DP.prepSearch(e,t,n)}catch(i){throw i}}a(MP,"lmdbGetDataByValue")});var an=h((xX,mT)=>{"use strict";var kX=Yt(),PP=Ei(),BP=b(),vP=T(),HP=To();mT.exports=qP;async function qP(e,t){if(!BP.isEmpty(t)&&vP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=PP(e,"value");if(s)throw s;let n=!1;try{return await HP.prepSearch(e,t,n)}catch(i){throw i}}a(qP,"lmdbSearchByValue")});var AT=h((KX,RT)=>{"use strict";var YX=Ye(),mo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(mo,"SearchByConditionsObject");var Ro=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Ro,"SearchCondition");var Ao=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ao,"SortAttribute");RT.exports={SearchByConditionsObject:mo,SearchCondition:Ro,SortAttribute:Ao}});var bT=h((QX,IT)=>{"use strict";var WX=AT().SearchByConditionsObject,GP=Yt(),FP=Ei(),Ju=sn(),po=Ye(),gT=To(),VP=Yu(),pT=require("lodash"),{getBaseSchemaPath:$P}=te(),kP=require("path"),xP=X(),{handleHDBError:OT,hdb_errors:YP}=D(),{HTTP_STATUS_CODES:KP}=YP,WP=1e8,QP={lazy:!0};IT.exports=JP;async function JP(e){try{let t=FP(e,"conditions");if(t)throw OT(t,t.message,KP.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=kP.join($P(),e.schema.toString()),s=await xP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=pT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===po.SEARCH_TYPES.EQUALS?o.estimated_count=Ju.count(s,o.search_attribute,o.search_value):c===po.SEARCH_TYPES.CONTAINS||c===po.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=WP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await NT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(gT.filterByType),u=_.length,l=[],E=Ju.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,QP);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(VP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await NT(s,e,_,n.hash_attribute);c.push(u)}if(o=pT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return Ju.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw OT(t)}}a(JP,"lmdbSearchByConditions");async function NT(e,t,r,s){let n=new GP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===po.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,gT.searchByType(e,n,i,s)}a(NT,"executeConditionSearch")});var di=h((JX,CT)=>{"use strict";var XP=T().OPERATIONS_ENUM,Oo=class{constructor(t,r,s,n=void 0){this.operation=XP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Oo,"DeleteObject");CT.exports=Oo});var Xu=h((XX,wT)=>{"use strict";var No=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(No,"DropAttributeObject");wT.exports=No});var zu=h((zX,LT)=>{"use strict";var ZP=Yt(),zP=di(),ZX=Xu(),er=T(),jP=b(),Zu=X(),eB=us(),tB=an(),rB=ci(),{getBaseSchemaPath:sB}=te(),nB=require("path");LT.exports=iB;async function iB(e,t=!0){let r;e.schema===er.SYSTEM_SCHEMA_NAME?r=eB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oB(e),n=nB.join(sB(),e.schema.toString()),i=await Zu.openEnvironment(n,e.table);return t===!0&&await aB(e,i,r.hash_attribute),Zu.dropDBI(i,e.attribute),s}a(iB,"lmdbDropAttribute");async function aB(e,t,r){let s=Zu.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(aB,"removeAttributeFromAllObjects");async function oB(e){let t=new ZP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await tB(t)).filter(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jP.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new zP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rB(i)}a(oB,"dropAttributeFromSystem")});var MT=h((jX,DT)=>{"use strict";var cB=zu(),_B=Xu(),UT=b(),yT=g(),uB=Ke().LMDB_ERRORS_ENUM;DT.exports=lB;async function lB(e){if(UT.isEmpty(global.hdb_schema[e.schema])||UT.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 _B(e.schema,e.table,r);try{await cB(n,!1)}catch(i){i.message!==uB.DBI_DOES_NOT_EXIST&&yT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw yT.error(`Error dropping attribute ${r}`),s}}a(lB,"lmdbDropAllAttributes")});var ju=h((tZ,$T)=>{"use strict";var qT=Yt(),GT=di(),FT=an(),VT=ci(),eZ=MT(),it=T(),PT=b(),BT=X(),{getBaseSchemaPath:EB,getTransactionAuditStorePath:dB}=te(),vT=require("path"),HT=g();$T.exports=hB;async function hB(e){try{if(PT.isEmpty(global.hdb_schema[e.schema])||PT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await SB(e),await fB(e);let t=vT.join(EB(),e.schema.toString());try{await BT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")HT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=vT.join(dB(),e.schema.toString());await BT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")HT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(hB,"lmdbDropTable");async function SB(e){let t=new qT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await FT(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 GT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await VT(n)}a(SB,"deleteAttributesFromSystem");async function fB(e){let t=new qT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await FT(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 GT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await VT(n)}catch(i){throw i}}a(fB,"dropTableFromSystem")});var xT=h((sZ,kT)=>{"use strict";var TB=require("fs-extra"),mB=Yt(),RB=hs(),AB=di(),pB=ju(),OB=ci(),NB=Qu(),gB=an(),mr=T(),rZ=b(),IB=require("path"),{getBaseSchemaPath:bB}=te(),{handleHDBError:CB,hdb_errors:wB}=D(),{HDB_ERROR_MSGS:LB,HTTP_STATUS_CODES:UB}=wB;kT.exports=yB;async function yB(e){let t;try{t=await DB(e.schema);let r=new mB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await gB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await pB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new AB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await OB(n);let i=IB.join(bB(),t.toString());await TB.remove(i)}catch(r){throw r}}a(yB,"lmdbDropSchema");async function DB(e){let t=new RB(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mr.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 CB(new Error,LB.SCHEMA_NOT_FOUND(e),UB.NOT_FOUND,void 0,void 0,!0);return s}a(DB,"validateDropSchema")});var el=h((nZ,YT)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(go,"CreateTableObject");YT.exports=go});var WT=h((aZ,KT)=>{"use strict";var MB=require("path"),PB=require("fs-extra"),Io=X(),{getTransactionAuditStorePath:BB}=te(),tl=Ye(),iZ=el();KT.exports=vB;async function vB(e){let t;try{let r=MB.join(BB(),e.schema.toString());await PB.mkdirp(r),t=await Io.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{Io.createDBI(t,tl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Io.createDBI(t,tl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Io.createDBI(t,tl.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(vB,"createTransactionsAuditEnvironment")});var ZT=h((oZ,XT)=>{"use strict";var rl=T(),QT=X(),HB=Xs(),qB=require("path"),{getSystemSchemaPath:GB,getBaseSchemaPath:FB}=te(),VB=us(),$B=za(),sl=Za(),kB=g(),xB=WT(),il=VB.hdb_table,JT=[];for(let e=0;e<il.attributes.length;e++)JT.push(il.attributes[e].attribute);XT.exports=YB;async function YB(e,t){let r=qB.join(FB(),t.schema.toString()),s=new sl(t.schema,t.table,rl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new sl(t.schema,t.table,rl.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new sl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await QT.createEnvironment(r,t.table),e!==void 0){let o=await QT.openEnvironment(GB(),rl.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await HB.insertRecords(o,il.hash_attribute,JT,[e]),await nl(s),await nl(n),await nl(i)}await xB(t)}catch(o){throw o}}a(YB,"lmdbCreateTable");async function nl(e){try{await $B(e)}catch(t){kB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(nl,"createAttribute")});var jT=h((cZ,zT)=>{"use strict";var KB=ja(),WB=ro(),QB=io(),on=T(),JB=Xs().updateRecords,XB=X(),ZB=require("path"),{getBaseSchemaPath:zB}=te(),jB=oi(),ev=g();zT.exports=tv;async function tv(e){try{let{schema_table:t,attributes:r}=KB(e);WB(e,r,t.hash_attribute),e.schema!==on.SYSTEM_SCHEMA_NAME&&(r.includes(on.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(on.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(on.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(on.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await QB(e.hdb_auth_header,t,r),n=ZB.join(zB(),e.schema.toString()),i=await XB.openEnvironment(n,e.table),o=await JB(i,t.hash_attribute,r,e.records,e[on.CLUSTERING_FLAG]!==!0);try{await jB(e,o)}catch(c){ev.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(tv,"lmdbUpdateRecords")});var tm=h((_Z,em)=>{"use strict";var rv=T().OPERATIONS_ENUM,bo=class{constructor(t,r,s,n=void 0){this.operation=rv.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(bo,"UpsertObject");em.exports=bo});var sm=h((lZ,rm)=>{"use strict";var uZ=tm(),sv=ja(),nv=ro(),iv=io(),cn=T(),av=Xs().upsertRecords,ov=X(),cv=require("path"),{getBaseSchemaPath:_v}=te(),uv=oi(),lv=g(),{handleHDBError:Ev,hdb_errors:dv}=D();rm.exports=hv;async function hv(e){let t;try{t=sv(e)}catch(_){throw Ev(_,_.message,dv.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;nv(e,s,r.hash_attribute),e.schema!==cn.SYSTEM_SCHEMA_NAME&&(s.includes(cn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(cn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(cn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(cn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await iv(e.hdb_auth_header,r,s),i=cv.join(_v(),e.schema.toString()),o=await ov.openEnvironment(i,e.table),c=await av(o,r.hash_attribute,s,e.records,e[cn.CLUSTERING_FLAG]!==!0);try{await uv(e,c)}catch(_){lv.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(hv,"lmdbUpsertRecords")});var _m=h((EZ,cm)=>{"use strict";var Sv=Yt(),nm=b(),im=g(),fv=an(),am=T(),Tv=ku().deleteRecords,mv=X(),Rv=require("path"),{getBaseSchemaPath:Av}=te(),{promisify:pv}=require("util"),Ov=pv(setTimeout),om=1e4,Nv=10;cm.exports=gv;async function gv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(nm.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 Sv(e.schema,e.table,am.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await fv(n,am.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw im.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return nm.isEmptyOrZeroLength(s)?(im.trace("No records found to delete"),{message:"No records found to delete"}):await Iv(e,s,t)}a(gv,"lmdbDeleteRecordsBefore");async function Iv(e,t,r){let s=Rv.join(Av(),e.schema.toString()),n=await mv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=om){let _=t.slice(o,o+om),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await Tv(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await Ov(Nv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Iv,"chunkDeletes")});var lm=h((dZ,um)=>{"use strict";var Co=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Co,"DeleteBeforeObject");um.exports=Co});var dm=h((hZ,Em)=>{"use strict";var wo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(wo,"DeleteAuditLogsBeforeResults");Em.exports=wo});var fm=h((fZ,Sm)=>{"use strict";var al=X(),{getTransactionAuditStorePath:bv}=te(),SZ=lm(),Cv=require("path"),hi=Ye(),wv=b(),hm=dm(),Lv=require("util").promisify,Uv=Lv(setTimeout),yv=1e4,Dv=100;Sm.exports=Mv;async function Mv(e){let t=Cv.join(bv(),e.schema),r=await al.openEnvironment(t,e.table,!0),s=al.listDBIs(r);al.initializeDBIs(r,hi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new hm;do n=await Pv(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 Uv(Dv);while(n.transactions_deleted>0);return i}a(Mv,"deleteAuditLogsBefore");async function Pv(e,t){let r=new hm;try{let s=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];wv.isEmpty(c)||(n=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[hi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>yv)break}return await n,r}catch(s){throw s}}a(Pv,"deleteTransactions")});var Nm=h((TZ,Om)=>{"use strict";var ol=X(),_n=Ye(),Tm=ls(),cl=T(),mm=b(),{getTransactionAuditStorePath:Bv}=te(),vv=require("path"),Hv=sn(),Lo=js(),qv=g();Om.exports=Gv;async function Gv(e){let t=vv.join(Bv(),e.schema),r=await ol.openEnvironment(t,e.table,!0),s=ol.listDBIs(r);ol.initializeDBIs(r,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Rm(r,e.search_values);case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Vv(r,e.search_values,n);case cl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Fv(r,e.search_values);default:return Rm(r)}}a(Gv,"readAuditLog");function Rm(e,t=[0,Tm.getMicroTime()]){mm.isEmpty(t[0])&&(t[0]=0),mm.isEmpty(t[1])&&(t[1]=Tm.getMicroTime());let r=[];try{let s=e.dbis[_n.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 Lo,i);r.push(o)}return r}catch(s){throw s}}a(Rm,"searchTransactionsByTimestamp");function Fv(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[_n.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,pm(e,i))}return Object.fromEntries(r)}a(Fv,"searchTransactionsByUsername");function Vv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=Hv.equals(e,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_n.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=pm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);Am(_,"records",r,l,o),Am(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(Vv,"searchTransactionsByHashValues");function Am(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new Lo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Lo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(Am,"loopRecords");function pm(e,t){let r=[];try{let s=e.dbis[_n.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 Lo,i);r.push(o)}}catch(i){qv.warn(i)}return r}catch(s){throw s}}a(pm,"batchSearchTransactions")});var Im=h((mZ,gm)=>{"use strict";var $v=require("path"),{getBaseSchemaPath:kv}=te(),xv=X();gm.exports={writeTransaction:Yv};async function Yv(e,t,r){let s=$v.join(kv(),e);return(await xv.openEnvironment(s,t)).transaction(r)}a(Yv,"writeTransaction")});var Cm=h((RZ,bm)=>{"use strict";var Kv=require("path"),{getBaseSchemaPath:Wv}=te(),Qv=X();bm.exports={flush:Jv};async function Jv(e,t){let r=Kv.join(Wv(),e.toString());return(await Qv.openEnvironment(r,t.toString())).flushed}a(Jv,"flush")});var Lm=h((AZ,wm)=>{"use strict";var Re=g(),{handleHDBError:Xv}=D(),Zv=mu(),zv=za(),jv=Fu(),eH=Ff(),tH=ci(),rH=Qu(),sH=_T(),nH=TT(),iH=an(),aH=bT(),oH=xT(),cH=ZT(),_H=jT(),uH=sm(),lH=_m(),EH=fm(),dH=ju(),hH=zu(),SH=Nm(),fH=Im(),TH=Cm(),Uo=class extends Zv{async searchByConditions(t){try{return aH(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await rH(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await sH(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await nH(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await iH(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await eH(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await oH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await cH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await dH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await zv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await jv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await _H(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await uH(t)}catch(r){throw Xv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await tH(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await lH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await hH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await EH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await SH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return fH.writeTransaction(t,r,s)}flush(t,r){return TH.flush(t,r)}};a(Uo,"LMDBBridge");wm.exports=Uo});var Rr=h((pZ,ym)=>{"use strict";var mH=Lm(),RH=mu(),AH=Y();AH.initSync();var Um;function pH(){return Um instanceof RH?Um:new mH}a(pH,"getBridge");ym.exports=pH()});var Bm=h((OZ,Pm)=>{"use strict";var Dm=require("lodash"),Si=require("mathjs"),OH=require("jsonata"),Mm=b();Pm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Dm.uniqWith(e,Dm.isEqual):e,searchJSON:NH,mad:fi.bind(null,Si.mad),mean:fi.bind(null,Si.mean),mode:fi.bind(null,Si.mode),prod:fi.bind(null,Si.prod),median:fi.bind(null,Si.median)};function fi(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(fi,"aggregateFunction");function NH(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(Mm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Mm.isEmpty(this.__ala__.res[r])){let s=OH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(NH,"searchJSON")});var Hm=h((NZ,vm)=>{"use strict";var de=require("moment"),_l="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;vm.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(_l),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(_l),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(_l)}});var Vm=h((gZ,Fm)=>{"use strict";var gH=require("@turf/area"),IH=require("@turf/length"),bH=require("@turf/circle"),CH=require("@turf/difference"),wH=require("@turf/distance"),LH=require("@turf/boolean-contains"),UH=require("@turf/boolean-equal"),yH=require("@turf/boolean-disjoint"),DH=require("@turf/helpers"),qm=T(),$=b();Fm.exports={geoArea:MH,geoLength:PH,geoCircle:BH,geoDifference:vH,geoDistance:Gm,geoNear:HH,geoContains:qH,geoEqual:GH,geoCrosses:FH,geoConvert:VH};var ul="geo1 is required",ll="geo2 is required";function MH(e){if($.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=$.autoCast(e)),gH.default(e)}a(MH,"geoArea");function PH(e,t){if($.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=$.autoCast(e)),IH.default(e,{units:t||"kilometers"})}a(PH,"geoLength");function BH(e,t,r){if($.isEmpty(e))throw new Error("point is required");if($.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=$.autoCast(e)),bH.default(e,t,{units:r||"kilometers"})}a(BH,"geoCircle");function vH(e,t){if($.isEmpty(e))throw new Error("poly1 is required");if($.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),CH(e,t)}a(vH,"geoDifference");function Gm(e,t,r){if($.isEmpty(e))throw new Error("point1 is required");if($.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),wH.default(e,t,{units:r||"kilometers"})}a(Gm,"geoDistance");function HH(e,t,r,s){if($.isEmpty(e))throw new Error("point1 is required");if($.isEmpty(t))throw new Error("point2 is required");if($.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Gm(e,t,s)<=r}a(HH,"geoNear");function qH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),LH.default(e,t)}a(qH,"geoContains");function GH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),UH.default(e,t)}a(GH,"geoEqual");function FH(e,t){if($.isEmpty(e))throw new Error(ul);if($.isEmpty(e))throw new Error(ll);return typeof e=="string"&&(e=$.autoCast(e)),typeof t=="string"&&(t=$.autoCast(t)),!yH.default(e,t)}a(FH,"geoCrosses");function VH(e,t,r){if($.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($.isEmpty(t))throw new Error("geo_type is required");if($.isEmpty(qm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qm.GEO_CONVERSION_ENUM).join(",")}`);return DH[t](e,r)}a(VH,"geoConvert")});var yo=h((IZ,$m)=>{var fs=Bm(),ft=Hm(),tr=Vm();$m.exports=e=>{e.aggr.mad=e.aggr.MAD=fs.mad,e.aggr.mean=e.aggr.MEAN=fs.mean,e.aggr.mode=e.aggr.MODE=fs.mode,e.aggr.prod=e.aggr.PROD=fs.prod,e.aggr.median=e.aggr.MEDIAN=fs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=fs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=fs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ft.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ft.current_time,e.fn.extract=e.fn.EXTRACT=ft.extract,e.fn.date=e.fn.DATE=ft.date,e.fn.date_format=e.fn.DATE_FORMAT=ft.date_format,e.fn.date_add=e.fn.DATE_ADD=ft.date_add,e.fn.date_sub=e.fn.DATE_SUB=ft.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ft.date_diff,e.fn.now=e.fn.NOW=ft.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ft.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ft.get_server_time,e.fn.getdate=e.fn.GETDATE=ft.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ft.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tr.geoNear}});var Ym=h((bZ,xm)=>{"use strict";var Ti=require("lodash"),Me=require("alasql");Me.options.cache=!1;var $H=yo(),km=require("clone"),Do=require("recursive-iterator"),v=g(),q=b(),un=Rr(),kH=T(),{hdb_errors:xH}=D(),YH="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";$H(Me);var Mo=class{constructor(t,r){if(q.isEmpty(t))throw v.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),q.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!q.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(mi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(mi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(mi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(mi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(mi)}}_getColumns(){let t=new Do(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(km(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ti.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(q.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Do(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!q.isEmpty(r)&&r.right)if(q.isNotEmptyAndHasValue(r.right.value)){let s=q.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!q.isEmpty(s)&&q.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=q.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&q.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Do(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!q.isEmpty(kH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(q.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(q.isEmptyOrZeroLength(r.left.columnid)||q.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(q.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!q.isEmpty(r.right.value)||!q.isEmpty(r.left.value)?s.add(q.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from)&&q.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Ti.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(q.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);q.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(q.isEmptyOrZeroLength(this.all_table_attributes)&&!q.isEmptyOrZeroLength(this.columns.columns))return t;if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(km(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(q.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(YH)>-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=Ti.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!q.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await un.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await un.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(S)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!q.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await un.getDataByValue(c,S.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await un.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Me.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Me.yy.FuncValue:new Me.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Ti.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Do(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ti.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await un.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[R];this.data[s].__merged_data[d].push(w)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return v.error(xH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await un.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Mo,"SQLSearch");xm.exports=Mo});var Tt=h((CZ,Wm)=>{"use strict";var KH=TS();Wm.exports={searchByConditions:XH,searchByHash:ZH,searchByValue:zH,search:jH};var El=Rr(),Km=require("util"),WH=Km.callbackify(El.searchByHash),QH=Km.callbackify(El.searchByValue),JH=Ym();async function XH(e){return El.searchByConditions(e)}a(XH,"searchByConditions");function ZH(e,t){try{WH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ZH,"searchByHash");function zH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),QH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(zH,"searchByValue");function jH(e,t){try{let r=new KH(e);r.validate(),new JH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(jH,"search")});var Vr=h((wZ,Zm)=>{"use strict";var Ri=require("crypto"),Jm="aes-256-cbc",eq=32,tq=16,dl=64,Xm=32,rq=dl+Xm,Qm=new Map;Zm.exports={encrypt:sq,decrypt:nq,createNatsTableStreamName:iq};function sq(e){let t=Ri.randomBytes(eq),r=Ri.randomBytes(tq),s=Ri.createCipheriv(Jm,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(sq,"encrypt");function nq(e){let t=e.substr(0,dl),r=e.substr(dl,Xm),s=e.substr(rq,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ri.createDecipheriv(Jm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(nq,"decrypt");function iq(e,t){let r=`${e}.${t}`,s=Qm.get(r);return s||(s=Ri.createHash("md5").update(`${e}.${t}`).digest("hex"),Qm.set(r,s)),s}a(iq,"createNatsTableStreamName")});var Ts=h((LZ,nR)=>{"use strict";var jm=Tt(),$r=g(),eR=Qa(),aq=require("lodash"),oq=require("path"),cq=Vr(),hl=b(),{promisify:tR}=require("util"),j=T(),{handleHDBError:Po,hdb_errors:_q}=D(),{HDB_ERROR_MSGS:Bo,HTTP_STATUS_CODES:rR}=_q,uq=Y();uq.initSync();var zm=X(),lq=te(),Ai=tR(jm.searchByValue),Eq=tR(jm.searchByHash),ln="name",sR="hash_attribute",Sl="schema",dq="schema_table",hq="attribute";nR.exports={describeAll:Sq,describeTable:vo,describeSchema:Tq};async function Sq(e){try{let t=hl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:ln,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[ln]},i=await Ai(n);if(hl.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[sR,j.ID_ATTRIBUTE_STRING,ln,Sl]},u=await Ai(_),l=[];for(let d of u)try{let S;if(t||s)S=await vo({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;S=await vo({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){$r.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return $r.error("Got an error in describeAll"),$r.error(t),Po(new Error,Bo.DESCRIBE_ALL_ERR)}}a(Sq,"describeAll");async function vo(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=eR.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ln,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await Ai(c);if(!_||_.length===0)throw Po(new Error,Bo.TABLE_NOT_FOUND(e.schema,e.table),rR.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Po(new Error,Bo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:dq,search_value:r+"."+s,get_attributes:[hq]},E=await Ai(l);E=aq.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=fq(n)),i.attributes=E,i.clustering_stream_name=cq.createNatsTableStreamName(u.schema,u.name);try{let d=oq.join(lq.getBaseSchemaPath(),i.schema.toString()),S=await zm.openEnvironment(d,i.name),m=zm.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){$r.warn(`unable to stat table dbi due to ${d}`)}}catch(l){$r.error(`There was an error getting attributes for table '${u.name}'`),$r.error(l)}return i}a(vo,"descTable");function fq(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(fq,"getAttrsByPerms");async function Tq(e){let t=eR.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Sl,search_value:s,hash_values:[],get_attributes:[sR,j.ID_ATTRIBUTE_STRING,ln,Sl]},i=await Ai(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[ln]},c=await Eq(o);if(c&&c.length<1)throw Po(new Error,Bo.SCHEMA_NOT_FOUND(e.schema),rR.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),hl.isEmpty(_)||_.describe){let u=await vo({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){$r.error(`Error describing schema table '${e.schema}.${c}'`),$r.error(_)}})),o}}a(Tq,"describeSchema")});var kr=h((DZ,_R)=>{var UZ=require("async"),En=us(),yZ=g(),{callbackify:oR,promisify:mq}=require("util");_R.exports={setSchemaDataToGlobal:iR,getTableSchema:pq,getSystemSchema:Nq,setSchemaDataToGlobalAsync:mq(iR)};var cR=Ts(),Rq=oR(cR.describeAll),Aq=oR(cR.describeTable);function iR(e){Rq(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=En),global.hdb_schema=r,e(null,null)})}a(iR,"setSchemaDataToGlobal");function aR(e,t){return e==="system"?En[t]:global.hdb_schema[e][t]}a(aR,"returnSchema");function pq(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Oq(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,aR(e,t))}):r(null,aR(e,t))}a(pq,"getTableSchema");function Oq(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=En:global.hdb_schema={system:En},r();return}Aq(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:En}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Oq,"setTableDataToGlobal");function Nq(){return En}a(Nq,"getSystemSchema")});var Ut=h((MZ,ER)=>{"use strict";var qo=vu(),Lt=b(),gq=require("util"),Go=Rr(),Iq=kr(),fl=g(),{handleHDBError:xr,hdb_errors:bq}=D(),{HTTP_STATUS_CODES:ms}=bq,Cq=gq.promisify(Iq.getTableSchema),wq="updated",uR="inserted",lR="upserted";ER.exports={insert:Uq,update:yq,upsert:Dq,validation:Lq,flush:Mq};async function Lq(e){if(Lt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Lt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cq(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Lt.isEmptyOrZeroLength(c[s]))throw fl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Lt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw fl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Lt.isEmpty(c[s])&&c[s]!==""&&n.has(Lt.autoCast(c[s]))&&(c.skip=!0),n.add(Lt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Lq,"validation");async function Uq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.createRecords(e);return Ho(uR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(Uq,"insertData");async function yq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.updateRecords(e);return Lt.isEmpty(s.existing_rows)?Ho(wq,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(yq,"updateData");async function Dq(e){if(e.operation!=="upsert")throw xr(new Error,"invalid operation, must be upsert",ms.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw xr(new Error,t.message,ms.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,ms.BAD_REQUEST);try{let s=await Go.upsertRecords(e);return Ho(lR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw xr(s,null,null,fl.ERR,n)}}a(Dq,"upsertData");function Ho(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===uR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===lR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Mq(e){return Go.flush(e.schema,e.table)}a(Mq,"flush")});var ml=h((PZ,SR)=>{var Pq=Ee(),Tl=require("joi"),{hdb_schema_table:dR}=Sr(),hR={schema:dR,table:dR},Bq={date:Tl.date().iso().required()},vq={timestamp:Tl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};SR.exports=function(e,t){let r=t==="timestamp"?{...hR,...vq}:{...hR,...Bq},s=Tl.object(r);return Pq.validateBySchema(e,s)}});var RR=h((BZ,mR)=>{var Hq=Ee(),fR=require("joi"),{hdb_schema_table:TR}=Sr(),qq=fR.object({schema:TR,table:TR,hash_values:fR.array().required()});mR.exports=function(e){return Hq.validateBySchema(e,qq)}});var pR=h((vZ,AR)=>{"use strict";var Fo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Fo,"InsertObject");var Vo=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(Vo,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a($o,"DeleteResponseObject");AR.exports={InsertObject:Fo,NoSQLSeachObject:Vo,DeleteResponseObject:$o}});var As=h((HZ,bR)=>{"use strict";var NR=ml(),Gq=RR(),ko=b(),OR=require("moment"),gR=g(),{promisify:Fq,callbackify:Vq}=require("util"),Rs=T(),$q=kr(),Rl=Fq($q.getTableSchema),Al=Rr(),{DeleteResponseObject:kq}=pR(),{handleHDBError:Yr,hdb_errors:xq}=D(),{HDB_ERROR_MSGS:xo,HTTP_STATUS_CODES:Kr}=xq,Yq="records successfully deleted",Kq=Vq(IR);bR.exports={delete:Kq,deleteRecord:IR,deleteFilesBefore:Wq,deleteAuditLogsBefore:Qq};async function Wq(e){let t=NR(e,"date");if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);if(!OR(e.date,OR.ISO_8601).isValid())throw Yr(new Error,xo.INVALID_DATE,Kr.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,xo.INVALID_DATE,!0);let s=ko.checkSchemaTableExist(e.schema,e.table);if(s)throw Yr(new Error,s,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,s,!0);try{let n=await Al.deleteRecordsBefore(e);if(await Rl(e.schema,e.table),gR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Wq,"deleteFilesBefore");async function Qq(e){let t=NR(e,"timestamp");if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Yr(new Error,xo.INVALID_VALUE("Timestamp"),Kr.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,xo.INVALID_VALUE("Timestamp"),!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw Yr(new Error,r,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,r,!0);try{let s=await Al.deleteAuditLogsBefore(e);return await Rl(e.schema,e.table),gR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Qq,"deleteAuditLogsBefore");async function IR(e){let t=Gq(e);if(t)throw Yr(t,t.message,Kr.BAD_REQUEST,void 0,void 0,!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw Yr(new Error,r,Kr.NOT_FOUND,Rs.LOG_LEVELS.ERROR,r,!0);try{await Rl(e.schema,e.table);let s=await Al.deleteRecords(e);return ko.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Yq}`),s}catch(s){if(s.message===Rs.SEARCH_NOT_FOUND_MESSAGE){let n=new kq;return n.message=Rs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(IR,"deleteRecord")});var Yo=h((qZ,LR)=>{var Jq=require("crypto"),CR=9;function Xq(e){let t=zq(CR),r=wR(e+t);return t+r}a(Xq,"createHash");function Zq(e,t){let r=e.substr(0,CR),s=r+wR(t+r);return e===s}a(Zq,"validateHash");function zq(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(zq,"generateSalt");function wR(e){return Jq.createHash("md5").update(e).digest("hex")}a(wR,"md5");LR.exports={hash:Xq,validate:Zq}});var yR=h((GZ,UR)=>{var pl=Ee(),Je={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 jq(e){return Je.password.presence=!0,Je.username.presence=!0,Je.role.presence=!0,Je.active.presence=!0,pl.validateObject(e,Je)}a(jq,"addUserValidation");function eG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,pl.validateObject(e,Je)}a(eG,"alterUserValidation");function tG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,pl.validateObject(e,Je)}a(tG,"dropUserValidation");UR.exports={addUserValidation:jq,alterUserValidation:eG,dropUserValidation:tG}});var he=h((VZ,MR)=>{"use strict";var{platform:FZ}=require("os"),rG="nats-server.zip",Ol="nats-server",sG=process.platform==="win32"?`${Ol}.exe`:Ol,Nl="HDB",nG=/^[^\s.,*>]+$/,DR="__request__",iG=a(e=>`${e}.${DR}`,"REQUEST_SUBJECT"),aG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},oG={HUB:"hub.pid",LEAF:"leaf.pid"},cG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},_G={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Nl,deliver_subject:"__HDB__.WORKQUEUE"},uG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Nl,deliver_subject:"HDB.SCHEMAQUEUE"},lG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Nl,deliver_subject:"HDB.USERQUEUE"},EG={SUCCESS:"success",ERROR:"error"},dG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},hG={TXN:"txn",MSGID:"msgid"};MR.exports={NATS_SERVER_ZIP:rG,NATS_SERVER_NAME:Ol,NATS_BINARY_NAME:sG,PID_FILES:oG,NATS_CONFIG_FILES:aG,SERVER_SUFFIX:cG,WORK_QUEUE_CONSUMER_NAMES:_G,SCHEMA_QUEUE_CONSUMER_NAMES:uG,USER_QUEUE_CONSUMER_NAMES:lG,NATS_TERM_CONSTRAINTS_RX:nG,REQUEST_SUFFIX:DR,UPDATE_REMOTE_RESPONSE_STATUSES:EG,CLUSTER_STATUS_STATUSES:dG,REQUEST_SUBJECT:iG,SUBJECT_PREFIXES:hG}});var BR=h(($Z,PR)=>{"use strict";var Wr=T(),pi=class{constructor(t=0,r=Wr.STORAGE_TYPES_ENUM.LMDB,s=Wr.LICENSE_VALUES.API_CALL_DEFAULT,n=Wr.RAM_ALLOCATION_ENUM.DEFAULT,i=Wr.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(pi,"BaseLicense");var Ko=class extends pi{constructor(t=0,r=Wr.STORAGE_TYPES_ENUM.LMDB,s=Wr.LICENSE_VALUES.API_CALL_DEFAULT,n=Wr.RAM_ALLOCATION_ENUM.DEFAULT,i=Wr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Ko,"ExtendedLicense");PR.exports={BaseLicense:pi,ExtendedLicense:Ko}});var Sn=h((kZ,VR)=>{"use strict";var hn=require("fs-extra"),vR=Yo(),HR=require("crypto"),SG=require("moment"),fG=require("uuid").v4,Xe=g(),Il=require("path"),TG=b(),mt=T(),mG=BR().ExtendedLicense,dn="invalid license key format",RG="061183",AG="mofi25",pG="aes-256-cbc",OG=16,NG=32,qR=Y();qR.initSync();var gl;VR.exports={validateLicense:GR,generateFingerPrint:IG,licenseSearch:FR,getLicense:wG};function bl(){return Il.join(qR.getHdbBasePath(),mt.LICENSE_KEY_DIR_NAME,mt.LICENSE_FILE_NAME)}a(bl,"getLicenseDirPath");function gG(){let e=bl();return Il.join(e,mt.LICENSE_FILE_NAME)}a(gG,"getLicenseFilePath");function Cl(){let e=bl();return Il.join(e,mt.REG_KEY_FILE_NAME)}a(Cl,"getFingerPrintFilePath");async function IG(){let e=Cl();try{return await hn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await bG();throw Xe.error(`Error writing fingerprint file to ${e}`),Xe.error(t),new Error("There was an error generating the fingerprint")}}a(IG,"generateFingerPrint");async function bG(){let e=fG(),t=vR.hash(e),r=Cl();try{await hn.mkdirp(bl()),await hn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Xe.error(`Error writing fingerprint file to ${r}`),Xe.error(s),new Error("There was an error generating the fingerprint")}return t}a(bG,"writeFingerprint");function GR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:mt.STORAGE_TYPES_ENUM.LMDB,api_call:mt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:mt.RAM_ALLOCATION_ENUM.DEFAULT,version:mt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Xe.error("empty license key passed to validate."),r;let s=Cl(),n=!1;try{n=hn.statSync(s)}catch(i){Xe.error(i)}if(n){let i;try{i=hn.readFileSync(s,"utf8")}catch{Xe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(AG),c=o[1];c=Buffer.concat([Buffer.from(c)],OG);let _=Buffer.concat([Buffer.from(i)],NG),u=HR.createDecipheriv(pG,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=CG(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(dn),Xe.error(dn),new Error(dn)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(dn),Xe.error(dn),new Error(dn)}else r.exp_date=l;r.exp_date<SG().valueOf()&&(r.valid_date=!1),vR.validate(o[1],`${RG}${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||Xe.error("Invalid licence"),r}a(GR,"validateLicense");function CG(e,t){try{let r=HR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Xe.warn("Check old license failed")}}a(CG,"checkOldLicense");function FR(){let e=new mG;e.api_call=0;let t=[];try{t=hn.readFileSync(gG(),"utf-8").split(mt.NEW_LINE)}catch(r){r.code==="ENOENT"?Xe.info("no license file found"):Xe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(TG.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=GR(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){Xe.error("There was an error parsing the license string."),Xe.error(n),e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=mt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=mt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT),gl=e,e}a(FR,"licenseSearch");async function wG(){return gl||await FR(),gl}a(wG,"getLicense")});var Ar=h((xZ,tA)=>{"use strict";var YR="username is required",KR="nothing to update, must supply active, role or password to update",WR="password cannot be an empty string",QR="If role is specified, it cannot be empty.",JR="active must be true or false";tA.exports={addUser:vG,alterUser:HG,dropUser:GG,userInfo:FG,listUsers:Qo,listUsersExternal:VG,setUsersToGlobal:Oi,findAndValidateUser:xG,getClusterUser:YG,USERNAME_REQUIRED:YR,ALTERUSER_NOTHING_TO_UPDATE:KR,EMPTY_PASSWORD:WR,EMPTY_ROLE:QR,ACTIVE_BOOLEAN:JR};var XR=Ut(),LG=As(),Ll=Yo(),ZR=yR(),zR=Tt(),Ul=zs(),be=b(),jR=require("validate.js"),H=g(),{promisify:yl}=require("util"),Dl=Vr(),ps=T(),$R=he(),UG=dr(),Ml=Y(),yG=Sn(),DG=us(),{handleHDBError:rr,hdb_errors:MG}=D(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:wl,HDB_ERROR_MSGS:fn}=MG,{UserEventMsg:Pl}=qr(),kR=require("lodash"),eA={username:!0,active:!0,role:!0,password:!0},xR=new Map,Wo=yl(zR.searchByValue),PG=yl(zR.searchByHash),BG=yl(LG.delete);async function vG(e){let t=jR.cleanAttributes(e,eA),r=ZR.addUserValidation(t);if(r)throw rr(new Error,r.message,sr.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Wo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw rr(new Error,fn.ROLE_NAME_NOT_FOUND(t.role),sr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw rr(new Error,fn.DUP_ROLES_FOUND(t.role),sr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Dl.encrypt(t.password)),t.password=Ll.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await XR.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Oi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw rr(new Error,fn.USER_ALREADY_EXISTS(t.username),sr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.ADD_USER,_,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),`${c.username} successfully added`}a(vG,"addUser");async function HG(e){let t=jR.cleanAttributes(e,eA);if(be.isEmptyOrZeroLength(t.username))throw new Error(YR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(KR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(WR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(JR);let r=qG(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Dl.encrypt(t.password)),t.password=Ll.hash(t.password)),t.role==="")throw new Error(QR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Wo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=fn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),rr(new Error,_,sr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=fn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),rr(new Error,_,sr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await XR.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Oi()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.ALTER_USER,i,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),n}a(HG,"alterUser");function qG(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(qG,"isClusterUser");async function GG(e){try{let t=ZR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(be.isEmpty(global.hdb_users.get(e.username)))throw rr(new Error,fn.USER_NOT_EXIST(e.username),sr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await BG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Oi()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,be.sendTransactionToSocketCluster(ps.INTERNAL_SC_CHANNELS.DROP_USER,n,Ml.get(ps.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ul.signalUserChange(new Pl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(GG,"dropUser");async function FG(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 PG(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(FG,"userInfo");async function VG(){let e;try{e=await Qo()}catch(t){throw H.error("Got an error listing users."),H.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(VG,"listUsersExternal");async function Qo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=kR.cloneDeep(await Wo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!be.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=kR.cloneDeep(await Wo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],$G(c.role),i.set(c.username,c)}return(await yG.getLicense()).enterprise?i:kG(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Qo,"listUsers");function $G(e){try{if(!e){H.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(DG)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a($G,"appendSystemTablesToRole");function kG(e){try{if(H.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(kG,"nonEnterpriseFilter");async function Oi(){try{let e=await Qo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Oi,"setUsersToGlobal");async function xG(e,t,r=!0){global.hdb_users||await Oi();let s=global.hdb_users.get(e);if(!s)throw rr(new Error,wl.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw rr(new Error,wl.USER_INACTIVE,sr.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(xR.get(t)===s.password)return n;if(Ll.validate(s.password,t))xR.set(t,s.password);else throw rr(new Error,wl.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(xG,"findAndValidateUser");async function YG(){let e=await Qo(),t=UG.getConfigFromFile(ps.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!be.isEmpty(r))return r.decrypt_hash=Dl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+$R.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+$R.SERVER_SUFFIX.ADMIN,r}a(YG,"getClusterUser")});var nA=h((YZ,sA)=>{"use strict";var Bl=X(),KG=g(),rA=Ke().LMDB_ERRORS_ENUM;sA.exports=WG;async function WG(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 Bl.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==rA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Bl.closeEnvironment(global.lmdb_map[s]),await Bl.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==rA.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){KG.error(t)}}a(WG,"cleanLMDBMap")});var _A=h((KZ,cA)=>{"use strict";var Os=g(),Jo=T(),QG=nA(),iA=kr(),JG=Ts(),XG=Ar(),{validateEvent:oA}=qr(),ZG={[Jo.IPC_EVENT_TYPES.SCHEMA]:zG,[Jo.IPC_EVENT_TYPES.USER]:eF};async function zG(e){let t=oA(e);if(t){Os.error(t);return}Os.trace(`IPC schemaHandler ${Jo.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await QG(e.message),await jG(e.message)}a(zG,"schemaHandler");async function jG(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 JG.describeTable({schema:e.schema,table:e.table});break;default:iA.setSchemaDataToGlobal(aA);break}else iA.setSchemaDataToGlobal(aA)}catch(t){Os.error(t)}}a(jG,"syncSchemaMetadata");function aA(e){e&&Os.error(e)}a(aA,"handleErrorCallback");async function eF(e){try{let t=oA(e);if(t){Os.error(t);return}Os.trace(`IPC userHandler ${Jo.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await XG.setUsersToGlobal()}catch(t){Os.error(t)}}a(eF,"userHandler");cA.exports=ZG});var dA=h((WZ,EA)=>{"use strict";var tF=require("node-ipc").IPC,uA=b(),lA=T(),pr=g(),{IPC_ERRORS:Tn}=Ke(),rF=require("os"),Xo=class{constructor(t,r){this.ipc=new tF,this.server_name=lA.HDB_IPC_SERVER,this.ipc.config.retry=rF.platform()=="win32"?6e5:100,this.ipc.config.id=lA.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",()=>{pr.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{pr.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&pr.warn("Error connecting to HDB IPC server. Confirm that the server is running."),pr.warn(`Error with IPC client ${this.ipc.config.id}`),pr.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw pr.warn(Tn.INVALID_IPC_DATA_TYPE),new Error(Tn.INVALID_IPC_DATA_TYPE);if(uA.isEmpty(t.type))throw pr.warn(Tn.MISSING_TYPE),new Error(Tn.MISSING_TYPE);if(uA.isEmpty(t.message))throw pr.warn(Tn.MISSING_MSG),new Error(Tn.MISSING_MSG);pr.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(Xo,"IPCClient");EA.exports=Xo});var SA=h((QZ,hA)=>{var sF=Ee(),nF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};hA.exports=function(e){return sF.validateObject(e,nF)}});var vl=h((JZ,fA)=>{"use strict";var iF=T().OPERATIONS_ENUM,Zo=class{constructor(t,r,s,n=void 0){this.operation=iF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Zo,"UpdateObject");fA.exports=Zo});var mA=h((XZ,TA)=>{"use strict";var aF={OPERATION:"operation",REFRESH:"refresh"},zo=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(zo,"JWTTokens");var jo=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(jo,"JWTRSAKeys");TA.exports={JWTTokens:zo,TOKEN_TYPE_ENUM:aF,JWTRSAKeys:jo}});var sc=h((ZZ,OA)=>{"use strict";var gi=require("jsonwebtoken"),Hl=require("fs-extra"),ql=b(),yt=T(),{handleHDBError:at,hdb_errors:oF}=D(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:ct}=oF,Ni=g(),RA=Yo(),Vl=Ar(),cF=Ut().update,_F=vl(),uF=zs(),{UserEventMsg:lF}=qr(),Qr=Y();Qr.initSync();var Gl=require("path"),{JWTTokens:EF,JWTRSAKeys:dF,TOKEN_TYPE_ENUM:ec}=mA(),hF=Qr.get(yt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Qr.get(yt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",SF=Qr.get(yt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Qr.get(yt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",tc="RS256",Fl;OA.exports={createTokens:fF,validateOperationToken:mF,refreshOperationToken:TF,validateRefreshToken:pA};async function fF(e){if(ql.isEmpty(e)||typeof e!="object")throw at(new Error,ct.INVALID_AUTH_OBJECT,ot.BAD_REQUEST,void 0,void 0,!0);if(ql.isEmpty(e.username))throw at(new Error,ct.USERNAME_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);if(ql.isEmpty(e.password))throw at(new Error,ct.PASSWORD_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Vl.findAndValidateUser(e.username,e.password),!t)throw at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Ni.error(d),at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}let r=await rc(),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 AA(i,r.private_key,r.passphrase),c=await gi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:SF,algorithm:tc,subject:ec.REFRESH}),_=RA.hash(c),u=new _F(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await cF(u)}catch(d){Ni.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw at(new Error,ct.REFRESH_TOKEN_SAVE_FAILED,ot.INTERNAL_SERVER_ERROR);return uF.signalUserChange(new lF(process.pid)),new EF(o,c)}a(fF,"createTokens");async function AA(e,t,r){return await gi.sign(e,{key:t,passphrase:r},{expiresIn:hF,algorithm:tc,subject:ec.OPERATION})}a(AA,"signOperationToken");async function rc(){if(Fl===void 0)try{let e=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Gl.join(Qr.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Hl.readFile(e)).toString(),n=(await Hl.readFile(t)).toString(),i=(await Hl.readFile(r)).toString();Fl=new dF(i,n,s)}catch(e){throw Ni.error(e),at(new Error,ct.NO_ENCRYPTION_KEYS,ot.INTERNAL_SERVER_ERROR)}return Fl}a(rc,"getJWTRSAKeys");async function TF(e){if(!e)throw at(new Error,ct.INVALID_BODY,ot.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw at(new Error,ct.REFRESH_TOKEN_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);await pA(e.refresh_token);let t=await rc(),r=await gi.decode(e.refresh_token);return{operation_token:await AA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(TF,"refreshOperationToken");async function mF(e){try{let t=await rc(),r=await gi.verify(e,t.public_key,{algorithms:tc,subject:ec.OPERATION});return await Vl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ni.warn(t),t.name&&t.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}}a(mF,"validateOperationToken");async function pA(e){let t;try{let r=await rc(),s=await gi.verify(e,r.public_key,{algorithms:tc,subject:ec.REFRESH});t=await Vl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ni.warn(r),r.name&&r.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}if(!RA.validate(t.refresh_token,e))throw at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED);return t}a(pA,"validateRefreshToken")});var $l=h((jZ,IA)=>{"use strict";var RF=SA(),mn=require("passport"),AF=require("passport-local").Strategy,pF=require("passport-http").BasicStrategy,OF=require("util"),NF=Ar(),gA=OF.callbackify(NF.findAndValidateUser),zZ=Ke(),gF=T(),NA=sc();mn.use(new AF(function(e,t,r){gA(e,t,r)}));mn.use(new pF(function(e,t,r){gA(e,t,r)}));mn.serializeUser(function(e,t){t(null,e)});mn.deserializeUser(function(e,t){t(null,e)});function IF(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":mn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===gF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?NA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):NA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:mn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(IF,"authorize");function bF(e,t){let r=RF(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(bF,"checkPermissions");IA.exports={authorize:IF,checkPermissions:bF}});var nc=h((e3,bA)=>{"use strict";var CF=Rr();bA.exports={writeTransaction:wF};function wF(e,t,r){return CF.writeTransaction(e,t,r)}a(wF,"writeTransaction")});var Rt=h((l3,KA)=>{"use strict";var Or=Y();Or.initSync();var LF=require("fs-extra"),UF=require("semver"),Li=require("path"),{monotonicFactory:yF}=require("ulidx"),DF=yF(),wA=require("util"),LA=require("child_process"),MF=wA.promisify(LA.exec),PF=LA.spawn,ee=he(),ie=T(),Ql=b(),Nr=g(),ic=Vr(),BF=nc(),Ii=dr(),{encode:Yl,decode:UA}=require("msgpackr"),{isEmpty:Ns}=Ql,yA=Ar(),t3=hs(),vF=Tt(),r3=wA.promisify(vF.searchByHash),{connect:HF,StorageType:DA,RetentionPolicy:MA,AckPolicy:PA,DeliverPolicy:Kl,NatsConnection:s3,JetStreamManager:n3,JetStreamClient:i3,StringCodec:a3,JSONCodec:qF,createInbox:Jl,StreamSource:o3,headers:GF,toJsMsg:FF,nuid:c3,JetStreamOptions:_3,ErrorCode:CA,nanos:u3}=require("nats"),{PACKAGE_ROOT:VF}=T(),$F=wa(),BA=qF(),kF="clustering",xF=$F.engines[ee.NATS_SERVER_NAME],YF=Li.join(VF,"dependencies"),Wl=Li.join(YF,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),kl,xl,bi,Ci,wi,Kt;KA.exports={runCommand:vA,checkNATSServerInstalled:KF,createConnection:Xl,getConnection:ac,getJetStreamManager:Rn,getJetStream:HA,getNATSReferences:Dt,getServerList:QF,createLocalStream:Zl,listStreams:qA,deleteLocalStream:JF,getServerConfig:Ui,listRemoteStreams:XF,viewStream:ZF,publishToStream:zF,createWorkQueueStream:jF,addSourceToWorkStream:GA,request:e0,removeSourceFromWorkStream:VA,reloadNATS:zl,reloadNATSHub:t0,reloadNATSLeaf:r0,extractServerName:FA,requestErrorHandler:s0,updateWorkStream:n0,createLocalTableStream:kA,createTableStreams:i0,purgeTableStream:xA,purgeSchemaTableStreams:a0,getStreamInfo:o0,updateNodeNameLocalStreams:c0,closeConnection:WF};async function vA(e,t=void 0){let{stdout:r,stderr:s}=await MF(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
7
|
`,"")}a(vA,"runCommand");async function KF(){try{await LF.access(Wl)}catch{return!1}let e=await vA(`${Wl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return UF.eq(t,xF)}a(KF,"checkNATSServerInstalled");async function Xl(e,t,r,s=!0,n="127.0.0.1"){return HF({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Or.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(Xl,"createConnection");async function WF(){Kt&&(await Kt.close(),Kt=void 0)}a(WF,"closeConnection");async function ac(){if(!Kt){let e=await yA.getClusterUser();if(Ns(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Or.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Kt=await Xl(t,e.username,e.decrypt_hash)}return Kt}a(ac,"getConnection");async function Rn(){if(Ci)return Ci;Ns(Kt)&&await ac();let{domain:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ns(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ci=await Kt.jetstreamManager({domain:e}),Ci}a(Rn,"getJetStreamManager");async function HA(){if(wi)return wi;Ns(Kt)&&await ac();let{domain:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ns(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wi=Kt.jetstream({domain:e}),wi}a(HA,"getJetStream");async function Dt(){let e=Kt||await ac(),t=Ci||await Rn(),r=wi||await HA();return{connection:e,jsm:t,js:r}}a(Dt,"getNATSReferences");async function QF(){let e=Or.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await yA.getClusterUser(),s=await Xl(e,t,r),n=Jl(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(BA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Ql.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(QF,"getServerList");async function Zl(e,t){let{jsm:r}=await Dt();await r.streams.add({name:e,storage:DA.File,retention:MA.Limits,subjects:t})}a(Zl,"createLocalStream");async function qA(){let{jsm:e}=await Dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(qA,"listStreams");async function JF(e){let{jsm:t}=await Dt();await t.streams.delete(e)}a(JF,"deleteLocalStream");async function XF(e){let{connection:t}=await Dt(),r=[],s=Jl(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(BA.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(XF,"listRemoteStreams");async function ZF(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Dt(),i=DF(),o=[],c={ack_policy:PA.None,durable_name:i,deliver_subject:i,deliver_policy:Kl.All};t&&(c.deliver_policy=Kl.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=FF(l),d=UA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d,originators:[]},m=[];if(E.headers){let R=E.headers.get("originators");R&&(m=R.split(","),S.originators=m)}o.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(ZF,"viewStream");async function zF(e,t,r=[],s=[]){Nr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Dt(),o=await oc(),c=`${e}.${o}`,_=GF();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{Nr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Yl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")Nr.trace(`publishToStream creating stream: ${t}`),await Zl(t,[c]),await i.publish(c,Yl(r[u]),{headers:_});else throw E}}a(zF,"publishToStream");function Ui(e){e=e.toLowerCase();let t=Li.join(Or.get(ie.CONFIG_PARAMS.ROOTPATH),kF);if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ns(xl)&&(xl={port:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Li.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),xl;if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ns(kl)&&(kl={port:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ii.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:Li.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),kl;Nr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ui,"getServerConfig");async function jF(e){let{jsm:t}=await Dt(),r=await oc();try{await t.streams.add({name:e.stream_name,storage:DA.File,retention:MA.Workqueue,subjects:[`${ee.SUBJECT_PREFIXES.MSGID}.${r}`,`${ee.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:PA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Kl.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(jF,"createWorkQueueStream");async function GA(e,t,r){let{jsm:s}=await Dt(),n=await s.streams.info(t),i=FA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=ic.createNatsTableStreamName(c,_),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,w=n.config.sources.length;R<w;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===o)return;await $A(c,_,E,t),n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(GA,"addSourceToWorkStream");function FA(e){return e.split(".")[1]}a(FA,"extractServerName");async function VA(e,t,r){let{schema:s,table:n}=r,i=ic.createNatsTableStreamName(s,n),{jsm:o}=await Dt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config),await $A(s,n,u,t)}a(VA,"removeSourceFromWorkStream");async function $A(e,t,r,s){let n=await Rn(),i;try{i=YA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{Nr.error("Error purging source subject",i,"from work stream",s)}}a($A,"purgeSourceFromWorkStream");async function e0(e,t,r=2e3,s=Jl()){if(!Ql.isObject(t))throw new Error("data param must be an object");let n=Yl(t),{connection:i}=await Dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return UA(c.data)}a(e0,"request");function zl(e){return new Promise(async(t,r)=>{let s=PF(Wl,["--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(zl,"reloadNATS");async function t0(){let{pid_file_path:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await zl(e)}a(t0,"reloadNATSHub");async function r0(){let{pid_file_path:e}=Ui(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await zl(e)}a(r0,"reloadNATSLeaf");function s0(e,t,r){let s;switch(e.code){case CA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case CA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(s0,"requestErrorHandler");async function n0(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await BF.writeTransaction(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await GA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await VA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(n0,"updateWorkStream");async function kA(e,t){let r=ic.createNatsTableStreamName(e,t),s=await oc(),n=YA(e,t,s);await Zl(r,[n])}a(kA,"createLocalTableStream");async function i0(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await kA(s,n)}}a(i0,"createTableStreams");async function xA(e,t){if(Or.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ic.createNatsTableStreamName(e,t),{jsm:s}=await Dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Nr.warn(r);else throw r}}a(xA,"purgeTableStream");async function a0(e,t){if(Or.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await xA(e,t[r])}a(a0,"purgeSchemaTableStreams");async function o0(e){return(await Rn()).streams.info(e)}a(o0,"getStreamInfo");function YA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(YA,"createSubjectName");async function oc(){if(bi)return bi;if(bi=(await Rn())?.nc?.info?.server_name,bi===void 0)throw new Error("Unable to get jetstream manager server name");return bi}a(oc,"getJsmServerName");async function c0(){let e=await Rn(),t=await oc(),r=await qA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===ee.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ee.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_,await e.consumers.update(ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,ee.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${ee.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");Nr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(c0,"updateNodeNameLocalStreams")});var jl=h((E3,WA)=>{"use strict";var cc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(cc,"ClusteringOriginObject");WA.exports=cc});var On=h((d3,XA)=>{"use strict";var QA=b(),Di=Y(),_e=T(),eE=he(),An=Rt(),Se=g(),JA=jl(),_0=Vr();Di.initSync();var pn=eE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,yi=eE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;XA.exports={sendAttributeTransaction:uc,postOperationHandler:l0};async function uc(e,t,r=[]){if(!!Di.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!QA.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==_e.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=Di.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new JA(e.txn_time,s,n)};Se.trace(`sendAttributeTransaction publishing ${pn}`,o),await An.publishToStream(yi,pn,[o],r)}}}a(uc,"sendAttributeTransaction");async function _c(e,t,r,s=[]){if(e.schema===_e.SYSTEM_SCHEMA_NAME)return;let n=u0(e,t,r);n&&(Se.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await An.publishToStream(`${eE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,_0.createNatsTableStreamName(e.schema,e.table),[n],s))}a(_c,"sendOperationTransaction");function u0(e,t,r){if(QA.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_e.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(u0,"convertCRUDOperationToTransaction");async function l0(e,t,r=[]){if(!Di.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Se.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=Di.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new JA(t.txn_time,s,n);switch(e.operation){case _e.OPERATIONS_ENUM.INSERT:try{await _c(e,t.inserted_hashes,i,r),await uc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for insert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.DELETE:try{await _c(e,t.deleted_hashes,i,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for delete."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPDATE:try{await _c(e,t.update_hashes,i,r),await uc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for update."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPSERT:try{await _c(e,t.upserted_hashes,i,r),await uc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for upsert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_schema."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_table."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_attribute."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:_e.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await An.publishToStream(yi,pn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for csv_data_load."),Se.error(o)}break;default:break}return t}a(l0,"postOperationHandler")});var tp=h((h3,ep)=>{"use strict";var E0=Tt(),d0=kr(),ZA=g(),zA=Ut(),h0=nc(),S0=require("clone"),rE=require("alasql"),f0=yo(),jA=require("util"),T0=jA.promisify(d0.getTableSchema),m0=jA.promisify(E0.search),R0=T(),tE=b(),A0=On();f0(rE);ep.exports={update:O0};var p0="There was a problem performing this update. Please check the logs and try again.";async function O0({statement:e,hdb_user:t}){let r=await T0(e.table.databaseid,e.table.tableid),s=N0(e.columns);tE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=S0(n),c=tE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=rE.parse(_).statements[0],l=await h0.writeTransaction(r.schema,r.name,async()=>{let E=await m0(u),d=g0(s,E);return I0(o,d,t)});return await zA.flush({schema:r.schema,table:r.name}),l}a(O0,"update");function N0(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=rE.compile(`SELECT ${r.expression.toString()} AS [${R0.FUNC_VAL}] FROM ?`)}),t}catch(t){throw ZA.error(t),new Error(p0)}}a(N0,"createUpdateRecord");function g0(e,t){return tE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(g0,"buildUpdateRecords");async function I0(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await zA.update(s);await A0.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){ZA.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(I0,"updateRecords")});var sp=h((S3,rp)=>{var b0=require("alasql"),C0=Tt(),w0=g(),L0=Rr(),nE=require("util"),sE=b(),U0=T(),y0=kr(),D0=nc(),M0=On(),P0=Ut(),B0="record",v0="successfully deleted",H0=nE.callbackify(V0),q0=nE.promisify(C0.search),G0=nE.promisify(y0.getTableSchema);rp.exports={convertDelete:H0};function F0(e){return`${e.deleted_hashes.length} ${B0}${e.deleted_hashes.length===1?"":"s"} ${v0}`}a(F0,"generateReturnMessage");async function V0({statement:e,hdb_user:t}){let r=await G0(e.table.databaseid,e.table.tableid);sE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=sE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=b0.parse(o).statements[0],_={operation:U0.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await D0.writeTransaction(r.schema,r.name,async()=>(_.records=await q0(c),L0.deleteRecords(_)));return await P0.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await M0.postOperationHandler(_,u),sE.isEmptyOrZeroLength(u.message)&&(u.message=F0(u)),delete u.txn_time,u}catch(u){throw w0.error(u),u.hdb_code?u.message:u}}a(V0,"convertDelete")});var ap=h((f3,ip)=>{"use strict";var aE=Ts(),{hdb_errors:iE}=D();ip.exports={checkSchemaExists:np,checkSchemaTableExists:$0,schema_describe:aE};async function np(e){if(!global.hdb_schema[e])try{let t=await aE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(np,"checkSchemaExists");async function $0(e,t){let r=await np(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await aE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a($0,"checkSchemaTableExists")});var lc=h((m3,lp)=>{"use strict";var Nn=Qa(),gs=ap(),op=g(),k0=require("uuid").v4,T3=require("clone"),In=zs(),Is=T(),x0=require("util"),bs=Rr(),{handleHDBError:Pe,hdb_errors:Y0}=D(),{HDB_ERROR_MSGS:gn,HTTP_STATUS_CODES:Be}=Y0,{SchemaEventMsg:bn}=qr(),cp=Rt();lp.exports={createSchema:K0,createSchemaStructure:_p,createTable:W0,createTableStructure:up,createAttribute:z0,dropSchema:Q0,dropTable:J0,dropAttribute:X0};async function K0(e){try{let t=await _p(e);return In.signalSchemaChange(new bn(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(K0,"createSchema");async function _p(e){let t=Nn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);if(!await gs.checkSchemaExists(e.schema))throw Pe(new Error,gn.SCHEMA_EXISTS_ERR(e.schema),Be.BAD_REQUEST,Is.LOG_LEVELS.ERROR,gn.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await bs.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(_p,"createSchemaStructure");async function W0(e){try{let t=await up(e);return In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(W0,"createTable");async function up(e){let t=Nn.create_table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);Nn.validateTableResidence(e.residence);let r=await gs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(!await gs.checkSchemaTableExists(e.schema,e.table))throw Pe(new Error,gn.TABLE_EXISTS_ERR(e.schema,e.table),Be.BAD_REQUEST,Is.LOG_LEVELS.ERROR,gn.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:k0(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await bs.createTable(n,e);else throw Pe(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Be.BAD_REQUEST);else await bs.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(up,"createTableStructure");async function Q0(e){let t=Nn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);let s=await gs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await bs.dropSchema(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await cp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(Q0,"dropSchema");async function J0(e){let t=Nn.table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);return await bs.dropTable(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table)),await cp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(J0,"dropTable");async function X0(e){let t=Nn.attribute_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Pe(new Error,"You cannot drop a hash attribute",Be.BAD_REQUEST,void 0,void 0,!0);if(Is.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Pe(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Be.BAD_REQUEST,void 0,void 0,!0);try{return await bs.dropAttribute(e),Z0(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw op.error(`Got an error deleting attribute ${x0.inspect(e)}.`),s}}a(X0,"dropAttribute");function Z0(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(Z0,"dropAttributeFromGlobal");async function z0(e){if(!global.hdb_schema[e.schema])throw Pe(new Error,gn.SCHEMA_NOT_FOUND(e.schema),Be.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw Pe(new Error,gn.TABLE_NOT_FOUND(e.schema,e.table),Be.NOT_FOUND,void 0,void 0,!0);try{return await bs.createAttribute(e),In.signalSchemaChange(new bn(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw op.error(t),t}}a(z0,"createAttribute")});var dp=h((R3,Ep)=>{"use strict";var{OPERATIONS_ENUM:j0}=T(),Ec=class{constructor(t,r,s=void 0,n=void 0){this.operation=j0.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Ec,"ReadAuditLogObject");Ep.exports=Ec});var oE=h((p3,mp)=>{"use strict";var eV=Rr(),A3=dp(),dc=b(),hc=T(),tV=Y(),{handleHDBError:hp,hdb_errors:rV}=D(),{HDB_ERROR_MSGS:Sp,HTTP_STATUS_CODES:fp}=rV,sV=Object.values(hc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Tp="To use this operation audit log must be enabled in harperdb-config.yaml";mp.exports=nV;async function nV(e){if(dc.isEmpty(e.schema))throw new Error(Sp.SCHEMA_REQUIRED_ERR);if(dc.isEmpty(e.table))throw new Error(Sp.TABLE_REQUIRED_ERR);if(!tV.get(hc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw hp(new Error,Tp,fp.BAD_REQUEST,hc.LOG_LEVELS.ERROR,Tp,!0);let t=dc.checkSchemaTableExist(e.schema,e.table);if(t)throw hp(new Error,t,fp.NOT_FOUND,hc.LOG_LEVELS.ERROR,t,!0);if(!dc.isEmpty(e.search_type)&&sV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await eV.readAuditLog(e)}a(nV,"readAuditLog")});var gp=h((O3,Np)=>{var Jr=require("validate.js"),Ap=Ee(),Cn=T(),{handleHDBError:iV,hdb_errors:aV}=D(),{HDB_ERROR_MSGS:ue,HTTP_STATUS_CODES:oV}=aV,cE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cV={STRUCTURE_USER:"structure_user"},Rp=Object.values(Cn.ROLE_TYPES_ENUM),_V="attribute_permissions",uV="attribute_name",{PERMS_CRUD_ENUM:wn}=Cn,lV=[_V,...Object.values(wn)],pp=[wn.READ,wn.INSERT,wn.UPDATE],EV=[uV,...pp];function dV(e){let t=cE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Op(e,t)}a(dV,"addRoleValidation");function hV(e){let t=cE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Op(e,t)}a(hV,"alterRoleValidation");function SV(e){let t=cE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ap.validateObject(e,t)}a(SV,"dropRoleValidation");var fV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Op(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)fV.includes(s[o])||n.push(s[o]);n.length>0&&fe(ue.INVALID_ROLE_JSON_KEYS(n),r);let i=Ap.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=TV(e);o&&fe(o,r),Rp.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&fe(ue.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Rp.indexOf(o)<0){if(o===cV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||fe(ue.SCHEMA_NOT_FOUND(E),r)}continue}fe(ue.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(ue.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(ue.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{lV.includes(l)||fe(ue.INVALID_PERM_KEY(l),r,o,_)}),Object.values(wn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||fe(ue.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(ue.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){fe(ue.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(ue.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(R=>{!EV.includes(R)&&R!==wn.DELETE&&fe(ue.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(S.attribute_name)){fe(ue.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=S.attribute_name;if(!l.includes(m)){fe(ue.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}pp.forEach(R=>{Jr.isDefined(S[R])?Jr.isBoolean(S[R])||fe(ue.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(ue.ATTR_PERM_MISSING(R,m),r,o,_)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;fe(ue.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return mV(r)}a(Op,"customValidate");Np.exports={addRoleValidation:dV,alterRoleValidation:hV,dropRoleValidation:SV};function TV(e){let{operation:t,permission:r}=e;if(t===Cn.OPERATIONS_ENUM.ADD_ROLE||t===Cn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return ue.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Cn.ROLE_TYPES_ENUM.SUPER_USER:Cn.ROLE_TYPES_ENUM.CLUSTER_USER;return ue.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(TV,"validateNoSUPerms");function mV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ue.ROLE_PERMS_ERROR,...e};return iV(new Error,s,oV.BAD_REQUEST)}else return null}a(mV,"generateRolePermResponse");function fe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(fe,"addPermError")});var fE=h((N3,Up)=>{"use strict";var Ip=Ut(),bp=Tt(),RV=As(),lE=gp(),EE=zs(),AV=require("uuid").v4,dE=require("util"),pV=Sn(),gr=T(),Cp=b(),hE=dE.promisify(bp.searchByValue),OV=dE.promisify(bp.searchByHash),NV=dE.promisify(RV.delete),gV=Yt(),IV=hs(),{hdb_errors:bV,handleHDBError:Mi}=D(),{HDB_ERROR_MSGS:wp,HTTP_STATUS_CODES:_E}=bV,{UserEventMsg:SE}=qr();Up.exports={addRole:CV,alterRole:LV,dropRole:UV,listRoles:Lp};function uE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(uE,"scrubRoleDetails");async function CV(e){let t=lE.addRoleValidation(e);if(t)throw t;if(!(await pV.getLicense()).enterprise){let o=await Lp();if(wV(e,o))throw new Error(`Your current license only supports ${gr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${gr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${gr.BASIC_LICENSE_MAX_NON_CU_ROLES+gr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${gr.SUPPORT_HELP_MSG}`)}e=uE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await hE(s)}catch(o){throw Mi(o)}if(n&&n.length>0)throw Mi(new Error,wp.ROLE_ALREADY_EXISTS(e.role),_E.CONFLICT,void 0,void 0,!0);e.id||(e.id=AV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ip.insert(i),EE.signalUserChange(new SE(process.pid)),e=uE(e),e}a(CV,"addRole");function wV(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!Cp.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(wV,"checkClusterUserRole");async function LV(e){let t=lE.alterRoleValidation(e);if(t)throw t;e=uE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await Ip.update(r)}catch(s){throw Mi(s)}return EE.signalUserChange(new SE(process.pid)),e}a(LV,"alterRole");async function UV(e){let t=lE.dropRoleValidation(e);if(t)throw Mi(new Error,t,_E.BAD_REQUEST,void 0,void 0,!0);let r=new IV(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await OV(r);if(s.length===0)throw Mi(new Error,wp.ROLE_NOT_FOUND,_E.NOT_FOUND,void 0,void 0,!0);let n=new gV(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await hE(n),o=!1;if(Cp.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await NV(c),EE.signalUserChange(new SE(process.pid)),`${s[0].role} successfully deleted`}a(UV,"dropRole");async function Lp(){return hE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Lp,"listRoles")});var Pp=h((g3,Mp)=>{"use strict";var yV=Y(),Xr=require("joi"),DV=Ee(),yp=require("moment"),MV=require("fs-extra"),TE=require("path"),PV=require("lodash"),Pi=T(),{LOG_LEVELS:Cs}=T(),BV="YYYY-MM-DD hh:mm:ss",vV=TE.resolve(__dirname,"../logs");Mp.exports=function(e){return DV.validateBySchema(e,HV)};var HV=Xr.object({from:Xr.custom(Dp),until:Xr.custom(Dp),level:Xr.valid(Cs.NOTIFY,Cs.FATAL,Cs.ERROR,Cs.WARN,Cs.INFO,Cs.DEBUG,Cs.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom(qV)});function Dp(e,t){if(yp(e,yp.ISO_8601).format(BV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Dp,"validateDatetime");function qV(e,t){if(PV.invert(Pi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=yV.get(Pi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Pi.PROCESS_LOG_NAMES.HDB:e,i=n===Pi.PROCESS_LOG_NAMES.INSTALL?TE.join(vV,Pi.PROCESS_LOG_NAMES.INSTALL):TE.join(s,n);return MV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(qV,"validateReadLogPath")});var RE=h((I3,vp)=>{"use strict";var Sc=T(),Bp=g(),GV=Y(),FV=Pp(),mE=require("path"),VV=require("fs-extra"),$V=require("readline"),{once:kV}=require("events"),{handleHDBError:xV,hdb_errors:YV}=D(),{PACKAGE_ROOT:KV}=T(),WV=mE.join(KV,"logs"),QV=1e3;vp.exports=JV;async function JV(e){let t=FV(e);if(t)throw xV(t,t.message,YV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=GV.get(Sc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Sc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===Sc.PROCESS_LOG_NAMES.INSTALL?mE.join(WV,Sc.PROCESS_LOG_NAMES.INSTALL):mE.join(r,s),i=VV.createReadStream(n);i.on("error",z=>{Bp.error(z)});let o=$V.createInterface({input:i,crlfDelay:1/0}),c=e.level!==void 0,_=c?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,E=e.until!==void 0,d=E?new Date(e.until):void 0,S=e.limit===void 0?QV:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,w=R+S,L=0,B=[];return o.on("line",z=>{let V,Q,$e,ke;try{V=JSON.parse(z)}catch(la){Bp.warn(la.message);return}switch(!0){case(c&&u&&E):Q=new Date(V.timestamp),$e=new Date(l),ke=new Date(d),V.level===_&&Q>=$e&&Q<=ke&&L<R?L++:V.level===_&&Q>=$e&&Q<=ke&&(zr(V,m,B),L++,L===w&&Zr(o));break;case(c&&u):Q=new Date(V.timestamp),$e=new Date(l),V.level===_&&Q>=$e&&L<R?L++:V.level===_&&Q>=$e&&(zr(V,m,B),L++,L===w&&Zr(o));break;case(c&&E):Q=new Date(V.timestamp),ke=new Date(d),V.level===_&&Q<=ke&&L<R?L++:V.level===_&&Q<=ke&&(zr(V,m,B),L++,L===w&&Zr(o));break;case(u&&E):Q=new Date(V.timestamp),$e=new Date(l),ke=new Date(d),Q>=$e&&Q<=ke&&L<R?L++:Q>=$e&&Q<=ke&&(zr(V,m,B),L++,L===w&&Zr(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(zr(V,m,B),L++,L===w&&Zr(o));break;case u:Q=new Date(V.timestamp),$e=new Date(l),Q>=$e&&L<R?L++:Q>=$e&&L>=R&&(zr(V,m,B),L++,L===w&&Zr(o));break;case E:Q=new Date(V.timestamp),ke=new Date(d),Q<=ke&&L<R?L++:Q<=ke&&L>=R&&(zr(V,m,B),L++,L===w&&Zr(o));break;default:L<R?L++:(zr(V,m,B),L++,L===w&&Zr(o))}}),await kV(o,"close"),B}a(JV,"readLog");function Zr(e){e.close(),e.removeAllListeners()}a(Zr,"endReadLine");function zr(e,t,r){t==="desc"?XV(e,r):t==="asc"?ZV(e,r):r.push(e)}a(zr,"pushLineToResult");function XV(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(XV,"insertDescending");function ZV(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(ZV,"insertAscending")});var Tc=h((w3,Gp)=>{"use strict";var AE=require("joi"),{string:fc,boolean:Hp,date:zV}=AE.types(),jV=Ee(),{validateSchemaExists:b3,validateTableExists:C3,validateSchemaName:e$}=Sr(),t$=T(),r$=he(),s$=Y(),n$=fc.invalid(s$.get(t$.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(r$.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),qp={operation:fc.valid("add_node","update_node"),node_name:n$,subscriptions:AE.array().items({table:fc.required(),schema:fc.custom(e$).required(),subscribe:Hp.required(),publish:Hp.required().custom(a$),start_time:zV.iso()}).min(1).required()};function i$(e){return jV.validateBySchema(e,AE.object(qp))}a(i$,"addUpdateNodeValidator");function a$(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(a$,"checkForFalsy");Gp.exports={addUpdateNodeValidator:i$,validation_schema:qp}});var Ln=h((L3,Fp)=>{"use strict";var mc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(mc,"Node");var Rc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Rc,"NodeSubscription");Fp.exports={Node:mc,NodeSubscription:Rc}});var $p=h((U3,Vp)=>{"use strict";var o$=T().OPERATIONS_ENUM,Ac=class{constructor(t,r,s,n=void 0){this.operation=o$.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ac,"UpsertObject");Vp.exports=Ac});var Bi=h((y3,kp)=>{"use strict";var pc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(pc,"RemotePayloadObject");var Oc=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(Oc,"RemotePayloadSubscription");kp.exports={RemotePayloadObject:pc,RemotePayloadSubscription:Oc}});var Yp=h((D3,xp)=>{"use strict";var Nc=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(Nc,"TableSizeObject");xp.exports=Nc});var Jp=h((M3,Qp)=>{"use strict";var c$=Yp(),Kp=require("path"),Wp=te(),_$=Ye(),Un=X(),u$=g();Qp.exports=l$;async function l$(e){let t=new c$;try{let r=Kp.join(Wp.getBaseSchemaPath(),e.schema.toString()),s=await Un.openEnvironment(r,e.name),n=Un.statDBI(s,e.hash_attribute),i=Kp.join(Wp.getTransactionAuditStorePath(),e.schema.toString()),o=await Un.openEnvironment(i,e.name,!0),c=Un.statDBI(o,_$.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Un.environmentDataSize(r,e.name),u=await Un.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){u$.warn(`unable to stat table dbi due to ${r}`)}return t}a(l$,"lmdbGetTableSize")});var Zp=h((P3,Xp)=>{"use strict";var E$=T(),gc=class{constructor(t){this.operator=E$.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(gc,"SystemInformationOperation");Xp.exports=gc});var jp=h((B3,zp)=>{"use strict";var Ic=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(Ic,"SystemInformationObject");zp.exports=Ic});var Cc=h((H3,eO)=>{"use strict";var ve=require("systeminformation"),yn=g(),d$=T(),h$=Jp(),S$=Ts(),f$=Y();f$.initSync();var v3=Zp(),T$=jp(),bc;eO.exports={getHDBProcessInfo:gE,getNetworkInfo:bE,getDiskInfo:IE,getMemoryInfo:NE,getCPUInfo:OE,getTimeInfo:pE,getSystemInformation:CE,systemInformation:m$,getTableSize:wE};function pE(){return ve.time()}a(pE,"getTimeInfo");async function OE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await ve.cpu();l.cpu_speed=await ve.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:w,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(z=>{let{raw_load:V,raw_load_idle:Q,raw_load_irq:$e,raw_load_nice:ke,raw_load_system:la,raw_load_user:Ea,...yr}=z;B.cpus.push(yr)}),l.current_load=B,l}catch(e){return yn.error(`error in getCPUInfo: ${e}`),{}}}a(OE,"getCPUInfo");async function NE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return yn.error(`error in getMemoryInfo: ${e}`),{}}}a(NE,"getMemoryInfo");async function gE(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(d$.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return yn.error(`error in getHDBProcessInfo: ${t}`),e}}a(gE,"getHDBProcessInfo");async function IE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ve.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await ve.fsStats();return e.read_write=u,e.size=await ve.fsSize(),e}catch(t){return yn.error(`error in getDiskInfo: ${t}`),e}}a(IE,"getDiskInfo");async function bE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ve.networkInterfaceDefault(),e.latency=await ve.inetChecksite("google.com"),(await ve.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await ve.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e.connections=await ve.networkConnections(),e}catch(t){return yn.error(`error in getNetworkInfo: ${t}`),e}}a(bE,"getNetworkInfo");async function CE(){if(bc!==void 0)return bc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await ve.osInfo();e=c;let _=await ve.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,bc=e,bc}catch(t){return yn.error(`error in getSystemInformation: ${t}`),e}}a(CE,"getSystemInformation");async function wE(){let e=[],t=await S$.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await h$(s));return e}a(wE,"getTableSize");async function m$(e){let t=new T$;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await CE(),t.time=pE(),t.cpu=await OE(),t.memory=await NE(),t.disk=await IE(),t.network=await bE(),t.harperdb_processes=await gE(),t.table_size=await wE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await CE();break;case"time":t.time=pE();break;case"cpu":t.cpu=await OE();break;case"memory":t.memory=await NE();break;case"disk":t.disk=await IE();break;case"network":t.network=await bE();break;case"harperdb_processes":t.harperdb_processes=await gE();break;case"table_size":t.table_size=await wE();break;default:break}return t}a(m$,"systemInformation")});var LE=h((F3,tO)=>{"use strict";var q3=require("fs-extra"),G3=g();tO.exports={version:R$,printVersion:p$,nodeVersion:A$};var jr=wa();function R$(){if(jr)return jr.version}a(R$,"version");function A$(){if(jr&&jr.engines&&jr.engines["preferred-node"])return jr.engines["preferred-node"]}a(A$,"nodeVersion");function p$(){jr&&console.log(`HarperDB Version ${jr.version}`)}a(p$,"printVersion")});var Ls=h((k3,iO)=>{"use strict";var O$=Ut(),UE=b(),yE=require("util"),ws=T(),rO=Y();rO.initSync();var N$=$l(),sO=Tt(),{Node:V3,NodeSubscription:$3}=Ln(),g$=hs(),I$=$p(),{RemotePayloadObject:b$,RemotePayloadSubscription:C$}=Bi(),{handleHDBError:w$,hdb_errors:L$}=D(),{HTTP_STATUS_CODES:U$,HDB_ERROR_MSGS:y$}=L$,D$=Yt(),M$=Cc(),P$=LE(),B$=yE.promisify(N$.authorize),v$=yE.promisify(sO.searchByHash),H$=yE.promisify(sO.searchByValue);iO.exports={authHeaderToUser:q$,isEmpty:G$,getNodeRecord:F$,upsertNodeRecord:V$,buildNodePayloads:$$,checkClusteringEnabled:k$,getAllNodeRecords:x$,getSystemInfo:Y$,reverseSubscription:nO};async function q$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await B$(t,null),e}a(q$,"authHeaderToUser");function G$(e){return e==null}a(G$,"isEmpty");async function F$(e){let t=new g$(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return v$(t)}a(F$,"getNodeRecord");async function V$(e){let t=new I$(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return O$.upsert(t)}a(V$,"upsertNodeRecord");function nO(e){if(UE.isEmpty(e.subscribe)||UE.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(nO,"reverseSubscription");function $$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=UE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=nO(c),S=new C$(_,u,l,d,E,c.start_time);n.push(S)}return new b$(r,t,n,s)}a($$,"buildNodePayloads");function k$(){if(!rO.get(ws.CONFIG_PARAMS.CLUSTERING_ENABLED))throw w$(new Error,y$.CLUSTERING_NOT_ENABLED,U$.BAD_REQUEST,void 0,void 0,!0)}a(k$,"checkClusteringEnabled");async function x$(){let e=new D$(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return H$(e)}a(x$,"getAllNodeRecords");async function Y$(){let e=await M$.getSystemInformation();return{hdb_version:P$.version(),node_version:e.node_version,platform:e.platform}}a(Y$,"getSystemInfo")});var ME=h((x3,lO)=>{"use strict";var DE=Rt(),aO=b(),oO=he(),K$=T(),wc=g(),cO=lc(),W$=el(),{RemotePayloadObject:Q$}=Bi(),{handleHDBError:_O,hdb_errors:J$}=D(),{HTTP_STATUS_CODES:uO}=J$,{NodeSubscription:X$}=Ln();lO.exports=Z$;async function Z$(e,t){let r;try{r=await DE.request(`${t}.${oO.REQUEST_SUFFIX}`,new Q$(K$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),wc.trace("Response from remote describe all request:",r)}catch(o){wc.error(`addNode received error from describe all request to remote node: ${o}`);let c=DE.requestErrorHandler(o,"add_node",t);throw _O(new Error,c,uO.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===oO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw _O(new Error,o,uO.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=aO.doesSchemaExist(c),l=s[c]!==void 0,E=aO.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(wc.trace(`addNode creating schema: ${c}`),await cO.createSchema({operation:"create_schema",schema:c})),!E&&d){wc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new W$(c,_,s[c][_].hash_attribute);await cO.createTable(m)}await DE.createLocalTableStream(c,_);let S=new X$(c,_,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(Z$,"reviewSubscriptions")});var yc=h((Y3,hO)=>{"use strict";var{handleHDBError:Lc,hdb_errors:z$}=D(),{HTTP_STATUS_CODES:Uc}=z$,{addUpdateNodeValidator:j$}=Tc(),vi=g(),dO=T(),EO=he(),ek=b(),PE=Rt(),Hi=Ls(),tk=Y(),rk=ME(),{Node:sk,NodeSubscription:nk}=Ln(),ik="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",ak="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ok=tk.get(dO.CONFIG_PARAMS.CLUSTERING_NODENAME);hO.exports=ck;async function ck(e,t=!1){vi.trace("addNode called with:",e),Hi.checkClusteringEnabled();let r=j$(e);if(r)throw Lc(r,r.message,Uc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Hi.getNodeRecord(s);if(!ek.isEmptyOrZeroLength(E))throw Lc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Uc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await rk(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=ik,o;let c=Hi.buildNodePayloads(n,ok,dO.OPERATIONS_ENUM.ADD_NODE,await Hi.getSystemInfo());vi.trace("addNode sending remote payload:",c);let _;try{_=await PE.request(`${s}.${EO.REQUEST_SUFFIX}`,c)}catch(E){vi.error(`addNode received error from request: ${E}`);let d=PE.requestErrorHandler(E,"add_node",s);throw Lc(new Error,d,Uc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===EO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Lc(new Error,E,Uc.INTERNAL_SERVER_ERROR,"error",E)}vi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let S=n[E];vi.trace("Add node updating work stream for node:",s,"subscriptions:",S),await PE.updateWorkStream(S,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new nk(S.schema,S.table,S.publish,S.subscribe))}let l=new sk(s,u,_.system_info);return await Hi.upsertNodeRecord(l),i.length>0?o.message=ak:o.message=`Successfully added '${s}' to manifest`,o}a(ck,"addNode")});var vE=h((K3,TO)=>{"use strict";var{handleHDBError:Dc,hdb_errors:_k}=D(),{HTTP_STATUS_CODES:Mc}=_k,{addUpdateNodeValidator:uk}=Tc(),qi=g(),fO=T(),SO=he(),lk=b(),BE=Rt(),Gi=Ls(),Ek=Y(),{cloneDeep:dk}=require("lodash"),hk=ME(),{NodeSubscription:Sk}=Ln(),fk="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Tk="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mk=Ek.get(fO.CONFIG_PARAMS.CLUSTERING_NODENAME);TO.exports=Rk;async function Rk(e){qi.trace("updateNode called with:",e),Gi.checkClusteringEnabled();let t=uk(e);if(t)throw Dc(t,t.message,Mc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=dk(await Gi.getNodeRecord(r));if(lk.isEmptyOrZeroLength(s))throw Dc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Mc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await hk(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=fk,o;let c=Gi.buildNodePayloads(n,mk,fO.OPERATIONS_ENUM.UPDATE_NODE,await Gi.getSystemInfo());qi.trace("updateNode sending remote payload:",c);let _;try{_=await BE.request(`${r}.${SO.REQUEST_SUFFIX}`,c)}catch(u){qi.error(`updateNode received error from request: ${u}`);let l=BE.requestErrorHandler(u,"update_node",r);throw Dc(new Error,l,Mc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===SO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Dc(new Error,u,Mc.INTERNAL_SERVER_ERROR,"error",u)}qi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];qi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await BE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await Ak(s[0],n,_.system_info),i.length>0?o.message=Tk:o.message=`Successfully updated '${r}'`,o}a(Rk,"updateNode");async function Ak(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Sk(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Gi.upsertNodeRecord(s)}a(Ak,"updateNodeTable")});var OO=h((W3,pO)=>{"use strict";var AO=require("joi"),{string:mO}=AO.types(),pk=Ee(),RO=T(),Ok=Y(),Nk=he();pO.exports=gk;function gk(e){let t=mO.invalid(Ok.get(RO.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Nk.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=AO.object({operation:mO.valid(RO.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pk.validateBySchema(e,r)}a(gk,"removeNodeValidator")});var Bc=h((Q3,wO)=>{"use strict";var{handleHDBError:NO,hdb_errors:Ik}=D(),{HTTP_STATUS_CODES:gO}=Ik,bk=OO(),Fi=g(),IO=Ls(),Ck=b(),Pc=T(),bO=he(),CO=Rt(),wk=Y(),{RemotePayloadObject:Lk}=Bi(),{NodeSubscription:Uk}=Ln(),yk=di(),Dk=As(),Mk=wk.get(Pc.CONFIG_PARAMS.CLUSTERING_NODENAME);wO.exports=Pk;async function Pk(e){Fi.trace("removeNode called with:",e),IO.checkClusteringEnabled();let t=bk(e);if(t)throw NO(t,t.message,gO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await IO.getNodeRecord(r);if(Ck.isEmptyOrZeroLength(s))throw NO(new Error,`Node '${r}' was not found.`,gO.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Lk(Pc.OPERATIONS_ENUM.REMOVE_NODE,Mk,[]),i,o=!1;try{i=await CO.request(`${r}.${bO.REQUEST_SUFFIX}`,n),Fi.trace("Remove node reply from remote node:",r,i)}catch(_){Fi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Fi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new Uk(l.schema,l.table,!1,!1);await CO.updateWorkStream(E,r)}let c=new yk(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Dk.deleteRecord(c),i?.status===bO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Pk,"removeNode")});var yO=h((J3,UO)=>{"use strict";var LO=require("joi"),{string:Bk,array:vk}=LO.types(),Hk=Ee(),qk=Tc();UO.exports=Gk;function Gk(e){let t=LO.object({operation:Bk.valid("configure_cluster").required(),connections:vk.items(qk.validation_schema).required()});return Hk.validateBySchema(e,t)}a(Gk,"configureClusterValidator")});var HE=h((X3,vO)=>{"use strict";var Fk=T(),vc=g(),Vk=b(),$k=Bc(),kk=yc(),DO=Ls(),xk=yO(),{handleHDBError:MO,hdb_errors:Yk}=D(),{HTTP_STATUS_CODES:PO}=Yk,Kk="Configure cluster complete.",Wk="Failed to configure the cluster. Check the logs for more details.",Qk="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";vO.exports=Jk;async function Jk(e){vc.trace("configure cluster called with:",e),DO.checkClusteringEnabled();let t=xk(e);if(t)throw MO(t,t.message,PO.BAD_REQUEST,void 0,void 0,!0);let r=await DO.getAllNodeRecords(),s=[];for(let d=0,S=r.length;d<S;d++)s.push(BO($k,{operation:Fk.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);vc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let S=e.connections[d];i.push(BO(kk,S,S.node_name))}let c=await Promise.allSettled(i);vc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,S=E.length;d<S;d++){let m=E[d];m.status==="rejected"&&(vc.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(Vk.isEmptyOrZeroLength(_))return{message:Kk,connections:u};if(l)return{message:Qk,failed_nodes:_,connections:u};throw MO(new Error,Wk,PO.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Jk,"configureCluster");async function BO(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(BO,"functionWrapper")});var FE=h((Z3,$O)=>{"use strict";var GE=Ls(),Xk=Rt(),GO=Y(),Hc=T(),Us=he(),Zk=b(),qE=g(),{RemotePayloadObject:zk}=Bi(),{ErrorCode:HO}=require("nats"),qO=GO.get(Hc.CONFIG_PARAMS.CLUSTERING_ENABLED),FO=GO.get(Hc.CONFIG_PARAMS.CLUSTERING_NODENAME);$O.exports={clusterStatus:jk,buildNodeStatus:VO};async function jk(){let e={node_name:FO,is_enabled:qO,connections:[]};if(!qO)return e;let t=await GE.getAllNodeRecords();if(Zk.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(VO(t[s],e.connections));return await Promise.allSettled(r),e}a(jk,"clusterStatus");async function VO(e,t){let r=e.name,s=new zk(Hc.OPERATIONS_ENUM.CLUSTER_STATUS,FO,void 0,await GE.getSystemInfo()),n,i,o=Us.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await Xk.request(Us.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Us.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Us.CLUSTER_STATUS_STATUSES.CLOSED,qE.error(`Error getting node status from ${r} `,n))}catch(_){qE.warn(`Error getting node status from ${r}`,_),_.code===HO.NoResponders?o=Us.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===HO.Timeout?o=Us.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Us.CLUSTER_STATUS_STATUSES.CLOSED}let c=new ex(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Hc.PRE_4_0_0_VERSION&&await GE.upsertNodeRecord(_)}catch(_){qE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(VO,"buildNodeStatus");function ex(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(ex,"NodeStatusObject")});var KO=h((z3,YO)=>{"use strict";var VE=require("joi"),kO=Ee(),{route_constraints:xO}=_u();YO.exports={setRoutesValidator:tx,deleteRoutesValidator:rx};function tx(e){let t=VE.object({server:VE.valid("hub","leaf").required(),routes:xO.required()});return kO.validateBySchema(e,t)}a(tx,"setRoutesValidator");function rx(e){let t=VE.object({routes:xO.required()});return kO.validateBySchema(e,t)}a(rx,"deleteRoutesValidator")});var kE=h((j3,XO)=>{"use strict";var ys=dr(),$E=b(),qc=T(),WO=KO(),{handleHDBError:QO,hdb_errors:sx}=D(),{HTTP_STATUS_CODES:JO}=sx,nx="cluster routes successfully set",ix="cluster routes successfully deleted";XO.exports={setRoutes:ax,getRoutes:ox,deleteRoutes:cx};function ax(e){let t=WO.setRoutesValidator(e);if(t)throw QO(t,t.message,JO.BAD_REQUEST,void 0,void 0,!0);let r=ys.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=$E.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:nx,set:o,skipped:i}}a(ax,"setRoutes");function ox(){let e=ys.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(ox,"getRoutes");function cx(e){let t=WO.deleteRoutesValidator(e);if(t)throw QO(t,t.message,JO.BAD_REQUEST,void 0,void 0,!0);let r=ys.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let S=0,m=s.length;S<m;S++){let R=s[S];if(E.host===R.host&&E.port===R.port){s.splice(S,1),d=!0,c=!0,i.push(E);break}}if(!d){let S=!0;for(let m=0,R=n.length;m<R;m++){let w=n[m];if(E.host===w.host&&E.port===w.port){n.splice(m,1),_=!0,S=!1,i.push(E);break}}S&&o.push(E)}}return c&&(s=$E.isEmptyOrZeroLength(s)?null:s,ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=$E.isEmptyOrZeroLength(n)?null:n,ys.updateConfigValue(qc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:ix,deleted:i,skipped:o}}a(cx,"deleteRoutes")});var zO=h((ez,ZO)=>{"use strict";var Vi=require("alasql"),Ds=require("recursive-iterator"),Wt=g(),_x=b(),$i=T(),Gc=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,lx(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>$i.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!$i.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][$i.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=ux(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!$i.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Vi.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(Gc,"sql_statement_bucket");function ux(e){return e.filter(t=>t[$i.PERMS_CRUD_ENUM.READ])}a(ux,"filterReadRestrictedAttrs");function lx(e,t,r,s,n){Ex(e,t,r,s,n)}a(lx,"interpretAST");function ki(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(ki,"addSchemaTableToMap");function Ex(e,t,r,s,n){if(!e){Wt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Vi.yy.Insert?fx(e,t,r):e instanceof Vi.yy.Select?dx(e,t,r,s,n):e instanceof Vi.yy.Update?hx(e,t,r):e instanceof Vi.yy.Delete?Sx(e,t,r):Wt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Ex,"getRecordAttributesAST");function dx(e,t,r,s,n){if(!e){Wt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(_x.isEmptyOrZeroLength(i)){Wt.error("No schema specified");return}e.from.forEach(c=>{ki(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ki(c.table,t,r,s,n)});let o=new Ds(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Wt.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ds(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ds(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ds(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Wt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(dx,"getSelectAttributes");function hx(e,t,r){if(!e){Wt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.table.databaseid;ki(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(hx,"getUpdateAttributes");function Sx(e,t,r){if(!e){Wt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ds(e.where),n=e.table.databaseid;ki(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(Sx,"getDeleteAttributes");function fx(e,t,r){if(!e){Wt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.into.databaseid;ki(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.into.tableid,n,i.columnid,t,r)}a(fx,"getInsertAttributes");function xE(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(xE,"pushAttribute");ZO.exports=Gc});var tN=h((tz,eN)=>{var Tx=require("os"),jO=Y();eN.exports={checkPermission:mx};function mx(){if(Tx.userInfo().username!==jO.get("install_user"))throw new Error(`Error: Must execute as ${jO.get("install_user")}`)}a(mx,"checkPermission")});var KE=h((rz,aN)=>{var Vc=Sn(),rN=require("chalk"),nr=g(),sN=tN(),nN=require("prompt"),{promisify:Rx}=require("util"),Fc=T(),Ax=require("fs-extra"),px=require("path"),Ox=b(),Nx=LE(),iN=Y();iN.initSync();var gx=require("moment"),Ix=Rx(nN.get),bx=px.join(iN.getHdbBasePath(),Fc.LICENSE_KEY_DIR_NAME,Fc.LICENSE_FILE_NAME,Fc.LICENSE_FILE_NAME);aN.exports={getFingerprint:wx,setLicense:Cx,parseLicense:YE,register:Lx,getRegistrationInfo:yx};async function Cx(e){if(e&&e.key&&e.company){try{nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await YE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw nr.error(r),nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Cx,"setLicense");async function wx(){try{sN.checkPermission()}catch(t){throw nr.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await Vc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw nr.error(r),nr.error(t),new Error(r)}return e}a(wx,"getFingerprint");async function YE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=Vc.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{nr.info("writing license to disk"),await Ax.writeFile(bx,JSON.stringify({license_key:e,company:t}))}catch(s){throw nr.error("Failed to write License"),s}return"Registration successful."}a(YE,"parseLicense");async function Lx(){let e=await Ux();return YE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Lx,"register");async function Ux(){try{sN.checkPermission()}catch(s){return console.error(s.message)}let e=await Vc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:rN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:rN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{nN.start()}catch(s){nr.error(s)}let r;try{r=await Ix(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Ux,"promptForRegistration");async function yx(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Vc.getLicense()}catch(r){throw nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Ox.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Nx.version(),e.storage_type=Fc.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=gx.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(yx,"getRegistrationInfo")});var cN=h((sz,oN)=>{"use strict";var Dx=he(),$c=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,S){this.port=t,o===null&&(o=void 0),this.server_name=r+Dx.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:S}},this.system_account="SYS"}};a($c,"HubConfigObject");oN.exports=$c});var lN=h((nz,uN)=>{"use strict";var _N=he(),kc=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+_N.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+_N.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(kc,"LeafConfigObject");uN.exports=kc});var dN=h((iz,EN)=>{"use strict";var xc=class{constructor(t,r){this.user=t,this.password=r}};a(xc,"HdbUserObject");EN.exports=xc});var SN=h((az,hN)=>{"use strict";var Mx=he(),Yc=class{constructor(t,r){this.user=t+Mx.SERVER_SUFFIX.ADMIN,this.password=r}};a(Yc,"SysUserObject");hN.exports=Yc});var JE=h((oz,mN)=>{"use strict";var Dn=require("path"),Jc=require("fs-extra"),Px=cN(),Bx=lN(),vx=dN(),Hx=SN(),WE=Ar(),Pn=b(),Mt=dr(),Qc=T(),Kc=he(),{CONFIG_PARAMS:Ce}=Qc,Xc=g(),Zc=Y(),fN=Vr(),QE=Rt(),Mn="clustering",qx=1e4,TN=5;mN.exports={generateNatsConfig:Gx,removeNatsConfig:Fx};async function Gx(e=!1,t=void 0){Zc.initSync();let r=Zc.get(Ce.ROOTPATH),s=Dn.join(r,Mn,Kc.PID_FILES.HUB),n=Dn.join(r,Mn,Kc.PID_FILES.LEAF),i=Dn.join(r,Mn,"leaf"),o=Dn.join(r,Mn,Kc.NATS_CONFIG_FILES.HUB_SERVER),c=Dn.join(r,Mn,Kc.NATS_CONFIG_FILES.LEAF_SERVER),_=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_CERTIFICATE),u=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_PRIVATEKEY),l=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_CERT_AUTH),E=Mt.getConfigFromFile(Ce.CLUSTERING_TLS_INSECURE),d=Mt.getConfigFromFile(Ce.CLUSTERING_NODENAME),S=Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await QE.checkNATSServerInstalled()||zc("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await WE.listUsers(),R=Mt.getConfigFromFile(Ce.CLUSTERING_USER),w=await WE.getClusterUser();(Pn.isEmpty(w)||w.active!==!0)&&zc(`invalid cluster user '${R}'`),e||(await Wc(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Wc(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Wc(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),await Wc(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[Ea,yr]of m.entries())yr.role.role===Qc.ROLE_TYPES_ENUM.CLUSTER_USER&&yr.active&&(L.push(new Hx(yr.username,fN.decrypt(yr.hash))),B.push(new vx(yr.username,fN.decrypt(yr.hash))));let z=[],{hub_routes:V}=Mt.getClusteringRoutes();if(!Pn.isEmptyOrZeroLength(V))for(let Ea of V)z.push(`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@${Ea.host}:${Ea.port}`);let Q=new Px(Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,S,Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NAME),Mt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),z,L,B);t=Pn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Qc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Jc.writeJson(o,Q),Xc.trace(`Hub server config written to ${o}`));let $e=`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,ke=`tls://${w.uri_encoded_name}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,la=new Bx(Mt.getConfigFromFile(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[$e],[ke],L,B,_,u,l,E);(t===void 0||t===Qc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Jc.writeJson(c,la),Xc.trace(`Leaf server config written to ${c}`))}a(Gx,"generateNatsConfig");async function Wc(e){let t=Zc.get(e);Pn.isEmpty(t)&&zc(`port undefined for '${e}'`),await Pn.isPortTaken(t)&&zc(`'${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(Wc,"isPortAvailable");function zc(e){let t=`Error generating clustering config: ${e}`;Xc.error(t),console.error(t),process.exit(1)}a(zc,"generateNatsConfigError");async function Fx(e){let{port:t,config_file:r}=QE.getServerConfig(e),{username:s,decrypt_hash:n}=await WE.getClusterUser(),i=0,o=500;for(;i<TN;){try{let u=await QE.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Xc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=TN)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 Pn.async_set_timeout(o*i)}let c="0".repeat(qx),_=Dn.join(Zc.get(Ce.ROOTPATH),Mn,r);await Jc.writeFile(_,c),await Jc.remove(_)}a(Fx,"removeNatsConfig")});var e_=h((cz,IN)=>{"use strict";var se=Y(),RN=Sn(),C=T(),XE=he(),Ae=require("path"),{PACKAGE_ROOT:jc}=T(),le="/dev/null",Bn=Ae.join(jc,"launchServiceScripts"),AN=Ae.join(jc,"utility/scripts"),Vx=Ae.join(AN,C.HDB_RESTART_SCRIPT),pN=Ae.resolve(jc,"dependencies",`${process.platform}-${process.arch}`,XE.NATS_BINARY_NAME),He,qe;function ir(){(He===void 0||qe===void 0)&&(se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ir,"initLogConfig");function ON(){ir();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.IPC),t={name:C.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:C.SERVICE_SERVERS_CWD.IPC};return He||(t.out_file=le,t.error_file=le),{...t,script:C.SERVICE_SERVERS.IPC}}a(ON,"generateIPCServerConfig");function NN(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.HDB),t=RN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.HDB,script:C.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:se.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Bn};return He||(s.out_file=le,s.error_file=le),s}a(NN,"generateHDBServerConfig");function gN(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=RN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:C.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:se.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Bn};return He||(s.out_file=le,s.error_file=le),s}a(gN,"generateCFServerConfig");function $x(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",XE.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:pN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a($x,"generateNatsHubServerConfig");function kx(){ir(),se.initSync(),He=se.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=se.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",XE.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:pN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a(kx,"generateNatsLeafServerConfig");function xx(){ir(),se.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bn};return He||(t.out_file=le,t.error_file=le),t}a(xx,"generateNatsIngestServiceConfig");function Yx(){ir(),se.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bn};return He||(t.out_file=le,t.error_file=le),t}a(Yx,"generateNatsReplyServiceConfig");function Kx(){ir(),se.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:C.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Bn,autorestart:!1};return He||(t.out_file=le,t.error_file=le),t}a(Kx,"generateClusteringUpgradeV4ServiceConfig");function Wx(){ir();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.PM2),t={name:C.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:AN};return He||(t.out_file=le,t.error_file=le),{...t,script:Vx}}a(Wx,"generateRestart");function Qx(e){ir();let t=Ae.join(qe,C.PROCESS_LOG_NAMES.JOBS),r=Ae.join(jc,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Bn,autorestart:!1};return He||(s.out_file=le,s.error_file=le),{...s,script:Ae.join(r,"jobProcess.js")}}a(Qx,"generateJobConfig");function Jx(){return{apps:[ON(),NN(),gN()]}}a(Jx,"generateAllServiceConfigs");IN.exports={generateAllServiceConfigs:Jx,generateIPCServerConfig:ON,generateHDBServerConfig:NN,generateCFServerConfig:gN,generateRestart:Wx,generateNatsHubServerConfig:$x,generateNatsLeafServerConfig:kx,generateNatsIngestServiceConfig:xx,generateNatsReplyServiceConfig:Yx,generateClusteringUpgradeV4ServiceConfig:Kx,generateJobConfig:Qx}});var Yi=h((_z,vN)=>{"use strict";var P=T(),t_=b(),xi=JE(),r_=Rt(),Xx=he(),k=require("pm2"),Zx=require("fs-extra"),Ir=e_(),_t=Y(),br=g(),zx=e_(),jx=Ls(),eY=require("util"),CN=eY.promisify(require("child_process").exec),wN=require("path");vN.exports={start:Ms,stop:n_,reload:UN,restart:yN,list:zE,describe:i_,connect:ar,kill:MN,startAllServices:uY,startService:s_,getUniqueServicesList:jE,restartAllServices:lY,stopAllServices:EY,isServiceRegistered:PN,reloadStopStart:ZE,restartHdb:DN,deleteProcess:cY,configureLogRotate:SY,startClustering:BN,isHdbRestartRunning:_Y,isClusteringRunning:TY,stopClustering:fY,reloadClustering:mY};var{PACKAGE_ROOT:tY}=T(),rY="2.7.0",LN=wN.join(tY,"node_modules/pm2/bin/pm2"),sY="Log rotate installed.",nY="Error installing log rotate.",iY="Log rotate updated.",aY="Error updating log rotate.",oY="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 ar(){return new Promise((e,t)=>{k.connect((r,s)=>{r&&t(r),e(s)})})}a(ar,"connect");function Ms(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.start(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(Ms,"start");function n_(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.stop(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.delete(e,(i,o)=>{i&&(k.disconnect(),r(s)),k.disconnect(),t(o)})})})}a(n_,"stop");function UN(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.reload(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(UN,"reload");function yN(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.restart(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(yN,"restart");function cY(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.delete(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(cY,"deleteProcess");async function DN(){await Ms(zx.generateRestart())}a(DN,"restartHdb");async function _Y(){let e=await zE();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(_Y,"isHdbRestartRunning");function zE(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}k.list((r,s)=>{r&&(k.disconnect(),t(r)),k.disconnect(),e(s)})})}a(zE,"list");function i_(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}k.describe(e,(s,n)=>{s&&(k.disconnect(),r(s)),k.disconnect(),t(n)})})}a(i_,"describe");function MN(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}k.killDaemon((r,s)=>{r&&(k.disconnect(),t(r)),k.disconnect(),e(s)})})}a(MN,"kill");async function uY(){try{await BN(),await Ms(Ir.generateAllServiceConfigs())}catch(e){throw k.disconnect(),e}}a(uY,"startAllServices");async function s_(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Ir.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Ir.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Ir.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Ir.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Ir.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Ir.generateNatsHubServerConfig(),await Ms(t),await xi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Ir.generateNatsLeafServerConfig(),await Ms(t),await xi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Ir.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ms(t)}catch(t){throw k.disconnect(),t}}a(s_,"startService");async function jE(){try{let e=await zE(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw k.disconnect(),e}}a(jE,"getUniqueServicesList");async function lY(e=[]){try{let t=!1,r=await jE();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await ZE(o):await yN(o))}t&&await ZE(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw k.disconnect(),t}}a(lY,"restartAllServices");async function EY(){try{let e=await jE();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await n_(s.name)}if(await MN(),_t.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Zx.readFile(wN.join(_t.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){br.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw k.disconnect(),e}}a(EY,"stopAllServices");async function PN(e){return!t_.isEmptyOrZeroLength(await i_(e))}a(PN,"isServiceRegistered");async function ZE(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?_t.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):_t.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await i_(e),s=t_.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?br.error(oY):(await n_(e),await s_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await DN():await UN(e)}a(ZE,"reloadStopStart");function dY(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}k.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(k.disconnect(),t(r)),k.disconnect(),e(s)})})}a(dY,"stopLogrotate");async function hY(){let{stdout:e,stderr:t}=await CN(`${process.platform==="win32"?"node":""} ${LN} install pm2-logrotate@${rY}`);if(br.debug(`loadLogRotate stdout: ${e}`),t)throw br.error(nY),t;br.info(sY)}a(hY,"installLogRotate");async function bN(){let e={max_size:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${LN} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await CN(t);if(br.debug(`updateLogRotateConfig stdout: ${r}`),s)throw br.error(aY),s;br.info(iY)}a(bN,"updateLogRotateConfig");async function SY(){_t.initSync();let e=t_.autoCastBoolean(_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await i_(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(t_.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await hY(),await bN();return}if(e&&s){await Ms(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await bN();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await dY()}a(SY,"configureLogRotate");async function BN(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await s_(r)}await r_.createWorkQueueStream(Xx.WORK_QUEUE_CONSUMER_NAMES),await r_.updateNodeNameLocalStreams();let e=await jx.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){br.info("Starting clustering upgrade 4.0.0 process"),await s_(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(BN,"startClustering");async function fY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await n_(t)}}a(fY,"stopClustering");async function TY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await PN(t)===!1)return!1}return!0}a(TY,"isClusteringRunning");async function mY(){await xi.generateNatsConfig(!0),await r_.reloadNATSHub(),await r_.reloadNATSLeaf(),await xi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await xi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(mY,"reloadClustering")});var nd=h((uz,VN)=>{"use strict";var y=T(),K=g(),a_=b(),RY=tu(),ed=JE(),sd=Rt(),AY=he(),qN=require("minimist"),{handleHDBError:td,hdb_errors:pY}=D(),Ki=dr(),{HTTP_STATUS_CODES:rd}=pY,G,HN=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,Ps="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",OY="Invalid service",NY="'service' is required",gY="Restarting all services",IY="Clustering is not enabled so cannot be restarted";VN.exports={stop:CY,restartProcesses:bY,restartService:GN};async function bY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Yi());let e=RY(Object.keys(y.CONFIG_PARAM_MAP),!0);a_.isEmptyOrZeroLength(Object.keys(e))||Ki.updateConfigValue(void 0,void 0,e,!0,!0);let t=Ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=Ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=qN(process.argv);if(!a_.isEmpty(s.service)){if(typeof s.service!="string"){let c=`Restart service argument expected a string but received: ${s.service}`;return K.error(c),c}let o=s.service.split(",");for(let c of o){let _=c.toLowerCase();if(_===y.HDB_PROC_DESCRIPTOR.toLowerCase()&&await G.isHdbRestartRunning()===!0){K.notify(Ps),console.error(Ps);continue}if(y.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){console.error(`Restart received unrecognized service command argument: ${_}`),K.error(`Restart received unrecognized service command argument: ${_}`);continue}let u=y.PROCESS_DESCRIPTORS_VALIDATE[_];if(console.log(`Restarting ${u}`),K.trace(`Restarting ${u}`),u===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(_.toLowerCase().includes("clustering"))await vn(_);else if(await G.isServiceRegistered(u))u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await GN({service:u});else if(u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await G.startService(u),K.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;K.error(l),console.log(l)}else await G.startService(u);K.notify(`${u} successfully restarted.`)}return}if(await G.isHdbRestartRunning()===!0)return K.notify(Ps),console.error(Ps),Ps;console.log(HN),t&&await FN();let n=await G.isServiceRegistered(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await G.startService(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Starting ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[y.PROCESS_DESCRIPTORS.CLUSTERING_HUB,y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await G.configureLogRotate(),K.notify(gY),await G.restartAllServices(i),HN}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(bY,"restartProcesses");async function GN(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),G===void 0&&(G=Yi()),a_.isEmpty(e.service))throw td(new Error,NY,rd.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw td(new Error,OY,rd.BAD_REQUEST,void 0,void 0,!0);let r=Ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=y.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===y.PROCESS_DESCRIPTORS.HDB){if(await G.isHdbRestartRunning()===!0)return K.notify(Ps),Ps;await G.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await vn(s);else if(s===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===y.SERVICES.CUSTOM_FUNCTIONS){let i=await G.isServiceRegistered(s);if(r)i?(await G.reloadStopStart(s),K.trace(`Reloading ${s}`)):(await G.startService(s),K.trace(`Starting ${s}`));else if(!r&&i)await G.stop(s),K.trace(`Stopping ${s}`);else{let o=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw K.error(o),td(new Error,o,rd.BAD_REQUEST,void 0,void 0,!0)}}else await G.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a(GN,"restartService");async function CY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Yi());let e=qN(process.argv);if(a_.isEmpty(e.service))console.log("Stopping HarperDB."),await G.stopAllServices(),K.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;K.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){K.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await G.stopClustering():await G.stop(y.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${y.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;K.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}a(CY,"stop");async function FN(){await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await vn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await sd.updateNodeNameLocalStreams(),await sd.closeConnection()}a(FN,"restartAllClusteringServices");async function vn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=Ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await G.isServiceRegistered(e),i=r||s?await G.isClusteringRunning():void 0;switch(!0){case s:if(!i){K.error(IY);break}await G.reloadClustering();break;case(r&&i&&!t):await G.stopClustering();break;case(r&&!i&&t):await G.startClustering();break;case(r&&i&&t):await FN();break;case(r&&!i&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await G.stop(e),K.trace(`Stopping ${e}`);break;case(!n&&t):e!==y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await ed.generateNatsConfig(!0,e),await G.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await sd.createWorkQueueStream(AY.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await G.reload(e):(await ed.generateNatsConfig(!0,e),await G.restart(e),await ed.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(vn,"restartClustering")});var zN=h((Ez,ZN)=>{"use strict";var lz=require("lodash"),Ze=T(),{handleHDBError:$N,hdb_errors:wY}=D(),{HDB_ERROR_MSGS:LY,HTTP_STATUS_CODES:UY}=wY,id=g();ZN.exports={getRolePermissions:DY};var Bs=Object.create(null),yY=a(e=>({key:e,perms:{}}),"perms_template_obj"),KN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),WN=a((e=!1,t=!1,r=!1,s=!1)=>({[Ze.PERMS_CRUD_ENUM.READ]:e,[Ze.PERMS_CRUD_ENUM.INSERT]:t,[Ze.PERMS_CRUD_ENUM.UPDATE]:r,[Ze.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),ad=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...WN(t,r,s,n)}),"table_perms_template"),kN=a((e,t=WN())=>({attribute_name:e,describe:XN(t),[Wi]:t[Wi],[od]:t[od],[cd]:t[cd]}),"attr_perms_template"),xN=a((e,t=!1)=>({attribute_name:e,describe:t,[Wi]:t}),"timestamp_attr_perms_template"),{READ:Wi,INSERT:od,UPDATE:cd}=Ze.PERMS_CRUD_ENUM,QN=Object.values(Ze.PERMS_CRUD_ENUM),JN=[Wi,od,cd];function DY(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Ze.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bs[t]&&Bs[t].key===s)return Bs[t].perms;let n=MY(e,r);return Bs[t]?Bs[t].key=s:Bs[t]=yY(s),Bs[t].perms=n,n}catch(r){if(!e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ze.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw id.error(s),id.debug(r),$N(new Error,LY.OUTDATED_PERMS_TRANSLATION_ERROR,UY.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
8
|
${r.stack}`;throw id.error(s),$N(new Error)}}}a(DY,"getRolePermissions");function MY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Ze.SYSTEM_SCHEMA_NAME]=s[Ze.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=PY(t[i]);return}r[i]=KN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=BY(c,_);r[i].describe||QN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=ad()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ad()})}),r}a(MY,"translateRolePermissions");function PY(e){let t=KN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ad(!0,!0,!0,!0,!0)}),t}a(PY,"createStructureUserPermissions");function BY(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return Ze.TIME_STAMP_NAMES.includes(E)&&(d=xN(E,l[Wi])),u[E]=d,u},{}),o=t[Ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=kN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=XN(l),n.attribute_permissions.push(l),c||vY(l,_)}else if(u!==o){let l;Ze.TIME_STAMP_NAMES.includes(u)?l=xN(u):l=kN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=YN(n),n}else return e.describe=YN(e),e}a(BY,"getTableAttrPerms");function YN(e){return QN.filter(t=>e[t]).length>0}a(YN,"getSchemaTableDescribePerm");function XN(e){return JN.filter(t=>e[t]).length>0}a(XN,"getAttributeDescribePerm");function vY(e,t){JN.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(vY,"checkForHashPerms")});var ig=h((dz,ng)=>{"use strict";var Te=require("joi"),jN=require("fs-extra"),eg=require("path"),Hn=Ee(),tg=Y(),rg=T(),sg=g(),{hdb_errors:HY}=D(),{HDB_ERROR_MSGS:ut}=HY,es=/^[a-zA-Z0-9-_]+$/;ng.exports={getDropCustomFunctionValidator:GY,setCustomFunctionValidator:FY,addCustomFunctionProjectValidator:VY,dropCustomFunctionProjectValidator:$Y,packageCustomFunctionProjectValidator:kY,deployCustomFunctionProjectValidator:xY};function Qi(e,t,r){try{let s=tg.get(rg.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=eg.join(s,t);return jN.existsSync(n)?e?t:r.message(ut.PROJECT_EXISTS):e?r.message(ut.NO_PROJECT):t}catch(s){return sg.error(s),r.message(ut.VALIDATION_ERR)}}a(Qi,"checkProjectExists");function qY(e,t,r,s){try{let n=tg.get(rg.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=eg.join(n,e,t,r+".js");return jN.existsSync(i)?r:s.message(ut.NO_FILE)}catch(n){return sg.error(n),s.message(ut.VALIDATION_ERR)}}a(qY,"checkFileExists");function GY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(es).custom(qY.bind(null,e.project,e.type)).required().messages({"string.pattern.base":ut.BAD_FILE_NAME})});return Hn.validateBySchema(e,t)}a(GY,"getDropCustomFunctionValidator");function FY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(es).required().messages({"string.pattern.base":ut.BAD_FILE_NAME}),function_content:Te.string().required()});return Hn.validateBySchema(e,t)}a(FY,"setCustomFunctionValidator");function VY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!1)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Hn.validateBySchema(e,t)}a(VY,"addCustomFunctionProjectValidator");function $Y(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Hn.validateBySchema(e,t)}a($Y,"dropCustomFunctionProjectValidator");function kY(e){let t=Te.object({project:Te.string().pattern(es).custom(Qi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Hn.validateBySchema(e,t)}a(kY,"packageCustomFunctionProjectValidator");function xY(e){let t=Te.object({project:Te.string().pattern(es).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":ut.BAD_PACKAGE})});return Hn.validateBySchema(e,t)}a(xY,"deployCustomFunctionProjectValidator")});var ld=h((hz,cg)=>{"use strict";var we=require("fs-extra"),o_=require("fast-glob"),ne=require("path"),ag=require("tar-fs"),og=require("uuid").v4,Ji=require("normalize-path"),vs=ig(),Le=g(),At=T(),pt=Y(),{PACKAGE_ROOT:YY}=T(),{handleHDBError:ze,hdb_errors:KY}=D(),{HDB_ERROR_MSGS:ts,HTTP_STATUS_CODES:je}=KY,WY=ne.join(YY,"custom_function_template"),_d=ne.join(pt.get(At.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ud(){let e=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ze(new Error,ts.NOT_ENABLED,je.BAD_REQUEST,void 0,void 0,!0)}a(ud,"isCFEnabled");function QY(){Le.trace("getting custom api status");let e={};try{e={is_enabled:pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ze(new Error,ts.FUNCTION_STATUS,je.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(QY,"customFunctionsStatus");function JY(){Le.trace("getting custom api endpoints");let e={},t=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{o_.sync(Ji(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:o_.sync(Ji(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:o_.sync(Ji(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:we.existsSync(Ji(`${s}/static`))&&o_.sync(Ji(`${s}/static/**/*`)).length}})}catch(r){throw ze(new Error,ts.GET_FUNCTIONS,je.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(JY,"getCustomFunctions");function XY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ne.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw ze(new Error,ts.GET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(XY,"getCustomFunction");function ZY(e){ud(),e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=vs.setCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("setting custom function file content");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ne.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ze(new Error,ts.SET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(ZY,"setCustomFunction");function zY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function file");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ne.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ze(new Error,ts.DROP_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(zY,"dropCustomFunction");function jY(e){ud(),e.project&&(e.project=ne.parse(e.project).name);let t=vs.addCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("adding custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(WY,n),`Successfully created custom function project: ${s}`}catch(n){throw ze(new Error,ts.ADD_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(jY,"addCustomFunctionProject");function eK(e){e.project&&(e.project=ne.parse(e.project).name);let t=vs.dropCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw ze(new Error,ts.DROP_FUNCTION_PROJECT,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(eK,"dropCustomFunctionProject");async function tK(e){e.project&&(e.project=ne.parse(e.project).name);let t=vs.packageCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("packaging custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ne.join(r,s),i=og();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}we.ensureDirSync(_d);let c=ne.join(_d,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ne.join(n,"node_modules"))}),ag.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(tK,"packageCustomFunctionProject");async function rK(e){ud(),e.project&&(e.project=ne.parse(e.project).name);let t=vs.deployCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("deploying custom function project");let r=pt.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,file:i}=e,o=ne.join(r,s);await we.ensureDir(o);let c,_;do c=ne.join(_d,og()+".tar"),_=await we.pathExists(c);while(_);await we.outputFile(c,n,{encoding:"base64"});let u=we.createReadStream(c);return u.pipe(ag.extract(o)),await new Promise(l=>u.on("end",l)),await we.unlink(c),`Successfully deployed project: ${s}`}a(rK,"deployCustomFunctionProject");cg.exports={customFunctionsStatus:QY,getCustomFunctions:JY,getCustomFunction:XY,setCustomFunction:ZY,dropCustomFunction:zY,addCustomFunctionProject:jY,dropCustomFunctionProject:eK,packageCustomFunctionProject:tK,deployCustomFunctionProject:rK}});var Ed=h((Sz,ug)=>{"use strict";var or=require("joi"),_g=Ee();ug.exports={readTransactionLogValidator:sK,deleteTransactionLogsBeforeValidator:nK};function sK(e){let t=or.object({schema:or.string().required(),table:or.string().required(),from:or.date().timestamp(),to:or.date().timestamp(),limit:or.number().min(1)});return _g.validateBySchema(e,t)}a(sK,"readTransactionLogValidator");function nK(e){let t=or.object({schema:or.string().required(),table:or.string().required(),timestamp:or.date().timestamp().required()});return _g.validateBySchema(e,t)}a(nK,"deleteTransactionLogsBeforeValidator")});var __=h((fz,Sg)=>{"use strict";var dd=T(),c_=Rt(),lg=b(),Eg=Y(),dg=Vr(),{handleHDBError:qn,hdb_errors:iK}=D(),{HTTP_STATUS_CODES:Gn}=iK,{readTransactionLogValidator:aK,deleteTransactionLogsBeforeValidator:oK}=Ed(),hg="This operation relies on clustering and cannot run with it disable.",cK="Logs successfully deleted from transaction log.",_K="All logs successfully deleted from transaction log.";Sg.exports={readTransactionLog:uK,deleteTransactionLogsBefore:lK};async function uK(e){let t=aK(e);if(t)throw qn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(!Eg.get(dd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw qn(new Error,hg,Gn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lg.checkSchemaTableExist(r,s);if(n)throw qn(new Error,n,Gn.NOT_FOUND,void 0,void 0,!0);let i=dg.createNatsTableStreamName(r,s),o=await c_.viewStream(i,parseInt(e.from),e.limit),c=[];for(let _=0,u=o.length;_<u;_++){let l=o[_],E=Math.floor(l?.nats_timestamp/1e6);if(e.to&&E>e.to)break;let d={operation:l?.entry?.operation,user:l?.entry?.__origin?.user,timestamp:E,records:l?.entry?.records};l?.entry?.operation===dd.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(uK,"readTransactionLog");async function lK(e){let t=oK(e);if(t)throw qn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(!Eg.get(dd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw qn(new Error,hg,Gn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lg.checkSchemaTableExist(r,s);if(i)throw qn(new Error,i,Gn.NOT_FOUND,void 0,void 0,!0);let o=dg.createNatsTableStreamName(r,s),{jsm:c}=await c_.getNATSReferences(),_=await c_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=cK,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=_K):E=(await c_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(lK,"deleteTransactionLogsBefore")});var Sd=h((Tz,Ig)=>{"use strict";var u_=require("joi"),l_=require("path"),fg=require("fs-extra"),{exec:EK}=require("child_process"),dK=require("util"),Tg=dK.promisify(EK),hK=T(),{handleHDBError:Fn,hdb_errors:SK}=D(),{HTTP_STATUS_CODES:Vn}=SK,mg=Y(),fK=Ee(),E_=g();mg.initSync();var hd=mg.get(hK.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),Rg="npm install --omit=dev --json",TK=`${Rg} --dry-run`;Ig.exports={installModules:mK,auditModules:RK};async function Ag(e,t=void 0){let{stdout:r,stderr:s}=await Tg(e,{cwd:t});if(s)throw new Error(s.replace(`
|