harperdb 4.1.2 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,6 @@
2
2
  `,Zm={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zm=["*","%"],jm="unauthorized_access",eA="func_val",tA={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rA={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},sA={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},nA={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iA={HTTP:"http"},aA={STOPPED:"stopped",ONLINE:"online"},oA="3.x.x";k_.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:D_,HDB_SUPPORT_URL:H_,HDB_PRICING_URL:Pf,SUPPORT_HELP_MSG:Hf,LICENSE_HELP_MSG:B_,HDB_PROC_NAME:L_,HDB_PROC_DESCRIPTOR:aa,CLUSTERING_LEAF_PROC_DESCRIPTOR:Fs,CLUSTERING_HUB_PROC_DESCRIPTOR:qs,SYSTEM_SCHEMA_NAME:em,HASH_FOLDER_NAME:tm,HDB_HOME_DIR_NAME:rm,UPDATE_FILE_NAME:am,LICENSE_KEY_DIR_NAME:nm,BOOT_PROPS_FILE_NAME:im,JOB_TYPE_ENUM:Hm,JOB_STATUS_ENUM:Cm,SYSTEM_TABLE_NAMES:gm,SYSTEM_TABLE_HASH_ATTRIBUTES:Nm,OPERATIONS_ENUM:m,VALID_S3_FILE_TYPES:ym,S3_BUCKET_AUTH_KEYS:Mm,VALID_SQL_OPS_ENUM:wm,GEO_CONVERSION_ENUM:Um,HDB_SETTINGS_NAMES:q_,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Dm,SERVICE_ACTIONS_ENUM:Lm,CLUSTER_MESSAGE_TYPE_ENUM:Bm,CLUSTER_CONNECTION_DIRECTION_ENUM:vm,CLUSTER_EVENTS_DEFS_ENUM:xm,PERIOD_REGEX:Vf,DOUBLE_PERIOD_REGEX:kf,UNICODE_PERIOD:Yf,FORWARD_SLASH_REGEX:$f,UNICODE_FORWARD_SLASH:Kf,ESCAPED_FORWARD_SLASH_REGEX:Wf,ESCAPED_PERIOD_REGEX:Qf,ESCAPED_DOUBLE_PERIOD_REGEX:Jf,REG_KEY_FILE_NAME:Im,RESTART_TIMEOUT_MS:cm,HDB_FILE_PERMISSIONS:um,SCHEMA_DIR_NAME:dm,TRANSACTIONS_DIR_NAME:hm,LIMIT_COUNT_NAME:Tm,ID_ATTRIBUTE_STRING:Sm,INSERT_MODULE_ENUM:Am,UPGRADE_JSON_FIELD_NAMES_ENUM:Rm,RESTART_CODE:om,RESTART_CODE_NUM:_m,CLUSTER_OPERATIONS:yr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Om,HDB_INTERNAL_SC_CHANNEL_PREFIX:fe,INTERNAL_SC_CHANNELS:pm,CLUSTERING_MESSAGE_TYPES:Qm,HDB_FILE_SUFFIX:sm,BLOB_FOLDER_NAME:lm,HDB_TRASH_DIR:Em,ORIGINATOR_SET_VALUE:Jm,LICENSE_VALUES:qm,RAM_ALLOCATION_ENUM:Fm,STORAGE_TYPES_ENUM:Gm,TIME_STAMP_NAMES_ENUM:x_,TIME_STAMP_NAMES:$m,PERMS_UPDATE_RELEASE_TIMESTAMP:Km,SEARCH_NOT_FOUND_MESSAGE:Bf,SEARCH_ATTRIBUTE_NOT_FOUND:vf,LICENSE_ROLE_DENIED_RESPONSE:Gf,LICENSE_MAX_CONNS_REACHED:qf,BASIC_LICENSE_MAX_NON_CU_ROLES:P_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Df,VALUE_SEARCH_COMPARATORS:V_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Wm,LICENSE_FILE_NAME:bm,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Vm,NEW_LINE:Xm,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:xf,MOMENT_DAYS_TAG:Xf,API_TURNOVER_SEC:Zf,LOOPBACK:Ff,CODE_EXTENSION:Gs,WILDCARD_SEARCH_VALUE:zf,NODE_ERROR_CODES:km,JAVASCRIPT_EXTENSION:w_,PERMS_CRUD_ENUM:Zm,UNAUTHORIZED_PERMISSION_NAME:jm,SEARCH_WILDCARDS:zm,FUNC_VAL:eA,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tA,JWT_ENUM:rA,CLUSTERING_FLAG:Ym,ITC_EVENT_TYPES:sA,CUSTOM_FUNCTION_PROC_NAME:U_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:vs,SERVICES:nA,THREAD_TYPES:iA,MEM_SETTING_KEY:jf,HDB_RESTART_SCRIPT:Af,PROCESS_DESCRIPTORS:Of,SERVICE_SERVERS:Mf,SERVICE_SERVERS_CWD:ia,PROCESS_DESCRIPTORS_VALIDATE:Cf,LAUNCH_SERVICE_SCRIPTS:wf,LOG_LEVELS:bf,PROCESS_NAME_ENV_PROP:fm,LOG_NAMES:If,PM2_PROCESS_STATUSES:aA,CONFIG_PARAM_MAP:F_,CONFIG_PARAMS:S,HDB_CONFIG_FILE:Sf,HDB_DEFAULT_CONFIG_FILE:ff,ROLE_TYPES_ENUM:Lf,BOOT_PROP_PARAMS:v_,INSTALL_PROMPTS:mm,HDB_ROOT_DIR_NAME:mf,CLUSTERING_PROCESSES:yf,FOREGROUND_PID_FILE:Nf,PACKAGE_ROOT:ct,PRE_4_0_0_VERSION:oA,SCHEMAS_PARAM_CONFIG:Pm,HDB_PID_FILE:pf}});var W_=T((AP,K_)=>{"use strict";var Y_=require("minimist");K_.exports=_A;function _A(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=$_(process.env),s=$_(Y_(process.argv))):(r=process.env,s=Y_(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(_A,"assignCMDENVVariables");function $_(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a($_,"objKeysToLowerCase")});var N=T((gP,ic)=>{"use strict";var jt=require("fs-extra"),{workerData:cA,threadId:uA}=require("worker_threads"),ut=require("path"),X_=require("yaml"),Z_=require("properties-reader"),J=f(),Q_=W_(),lA=require("os"),{PACKAGE_ROOT:_a}=f(),z_={};for(let e in console)z_[e]=console[e];var _e={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},j_={STDOUT:"stdOut",STDERR:"stdErr"},EA=ut.join(_a,"logs"),dA=ut.join(_a,"config/yaml/",J.HDB_DEFAULT_CONFIG_FILE),hA=1e4,Ze,ze,oe,xs,Vs,ks,wr,Mr;Mr===void 0&&ec();ic.exports={notify:sc,fatal:nc,error:Lr,warn:Ea,info:Ys,debug:la,trace:ua,setLogLevel:gA,log_level:oe,loggerWithTag:TA,suppressLogging:SA,initLogSettings:ec,setupConsoleLogging:tc,logCustomLevel:AA,closeLogFile:ca,getLogFilePath:()=>ks,OUTPUTS:j_};function ec(e=!1){try{if(Mr===void 0||e){ca();let t=RA();Mr=Z_(t);let r=Q_(["ROOTPATH"]);({level:oe,config_log_path:Vs,to_file:Ze,to_stream:ze}=NA(r.ROOTPATH?ut.join(r.ROOTPATH,J.HDB_CONFIG_FILE):Mr.get("settings_path"))),xs=J.LOG_NAMES.HDB,ks=ut.join(Vs,xs)}}catch(t){if(Mr=void 0,t.code===J.NODE_ERROR_CODES.ENOENT){let r=Q_(Object.keys(J.CONFIG_PARAM_MAP),!0);for(let o in r){let _=J.CONFIG_PARAM_MAP[o];_&&_.toLowerCase();let c=r[o];if(_===J.CONFIG_PARAMS.LOGGING_LEVEL){oe=c;continue}if(_===J.CONFIG_PARAMS.LOGGING_STDSTREAMS){ze=c;continue}_===J.CONFIG_PARAMS.LOGGING_FILE&&(Ze=_)}let{default_level:s,default_to_file:n,default_to_stream:i}=pA();Ze=Ze===void 0?n:Ze,Ze=J_(Ze),ze=ze===void 0?i:ze,ze=J_(ze),oe=oe===void 0?s:oe,Vs=EA,xs=J.LOG_NAMES.INSTALL,ks=ut.join(Vs,xs);return}throw Lr("Error initializing log settings"),Lr(t),t}tc()}a(ec,"initLogSettings");var oa=!0;function tc(){zt("error",Lr),zt("warn",Ea),zt("log",Ys),zt("info",Ys),zt("debug",la),zt("trace",ua)}a(tc,"setupConsoleLogging");function zt(e,t){console[e]=function(...r){if(oa&&t(...r),!/PM2 log:|App \[/.test(r[0]))return z_[e](...r)}}a(zt,"logConsole");function TA(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(sc),fatal:r(nc),error:r(Lr),warn:r(Ea),info:r(Ys),debug:r(la),trace:r(ua)};function r(s){return function(...n){return s(t,...n)}}}a(TA,"loggerWithTag");function SA(e){try{oa=!1,e()}finally{oa=!0}}a(SA,"suppressLogging");var fA=cA?.name?.replace(/ /g,"-")||"main";function je(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],_=0,c;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),_++):t[0]?.serviceName&&(c=t[0]?.serviceName,_++)),o.unshift(c||fA+"/"+uA);_<n;_++){let u=t[_];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,_<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
3
  `}a(je,"createLogRecord");function Ur(e){Ze&&rc(e),ze&&process.stdout.write(e)}a(Ur,"logStdOut");function $s(e){Ze&&rc(e),ze&&process.stderr.write(e)}a($s,"logStdErr");function rc(e){mA(),jt.appendFileSync(wr,e)}a(rc,"logToFile");function ca(){try{jt.closeSync(wr)}catch{}wr=null}a(ca,"closeLogFile");function mA(){wr||(wr=jt.openSync(ks,"a"),setTimeout(()=>{ca()},hA).unref())}a(mA,"openLogFile");function Ys(...e){_e[oe]<=_e.info&&Ur(je("info",e))}a(Ys,"info");function ua(...e){_e[oe]<=_e.trace&&Ur(je("trace",e))}a(ua,"trace");function Lr(...e){_e[oe]<=_e.error&&$s(je("error",e))}a(Lr,"error");function la(...e){_e[oe]<=_e.debug&&Ur(je("debug",e))}a(la,"debug");function sc(...e){_e[oe]<=_e.notify&&Ur(je("notify",e))}a(sc,"notify");function nc(...e){_e[oe]<=_e.fatal&&$s(je("fatal",e))}a(nc,"fatal");function Ea(...e){_e[oe]<=_e.warn&&$s(je("warn",e))}a(Ea,"warn");function AA(e,t,...r){t===j_.STDERR?$s(je(e,r)):Ur(je(e,r))}a(AA,"logCustomLevel");function RA(){let e;try{e=lA.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ut.join(e,J.HDB_HOME_DIR_NAME,J.BOOT_PROPS_FILE_NAME);return jt.existsSync(t)||(t=ut.join(_a,"utility/hdb_boot_properties.file")),t}a(RA,"getPropsFilePath");function gA(e){oe=e}a(gA,"setLogLevel");function J_(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(J_,"autoCastBoolean");function NA(e){try{if(e.includes("config/settings.js")){let o=Z_(e);return{level:o.get(J.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ut.dirname(o.get(J.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(J.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(J.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=X_.parseDocument(jt.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===J.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(NA,"getLogConfig");function pA(){try{let e=X_.parseDocument(jt.readFileSync(dA,"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(pA,"getDefaultConfig")});var oc=T((pP,ac)=>{"use strict";var OA=require("util"),IA=require("path"),bA=require("child_process"),CA=OA.promisify(bA.execFile),yA=1e3*1e3*10;ac.exports={findPs:MA};async function MA(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await CA("ps",["wwxo",`pid,${r}`],{maxBuffer:yA});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:IA.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(MA,"findPs")});var ee=T((IP,cc)=>{"use strict";var wA="__dbis__",LA="__environment_name__",UA="__dbi_defintion__",DA={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"},PA=["__createdtime__","__updatedtime__"],HA="\uFFFF",_c={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},BA=Object.values(_c);cc.exports={INTERNAL_DBIS_NAME:wA,DBI_DEFINITION_NAME:UA,SEARCH_TYPES:DA,TIMESTAMP_NAMES:PA,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:LA,TRANSACTIONS_DBI_NAMES_ENUM:_c,TRANSACTIONS_DBIS:BA,OVERFLOW_MARKER:HA}});var be=T((bP,mc)=>{"use strict";var uc=f(),lc=ee(),Ec={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},dc=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),hc={500:dc("There was an error processing your request."),400:"Invalid request"},vA=hc[Ec.INTERNAL_SERVER_ERROR],GA={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.`},qA={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},FA={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"},xA={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${lc.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${lc.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"},VA={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${uc.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 ${uc.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"},Tc={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"},kA={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."},YA={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},$A={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},KA={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},WA={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`},Sc={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.`},fc={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},QA={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."},JA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},XA={...Tc,...FA,...GA,...kA,...YA,...$A,...KA,...WA,...VA,...Sc,...fc,...QA,...JA,...qA};mc.exports={CHECK_LOGS_WRAPPER:dc,HDB_ERROR_MSGS:XA,DEFAULT_ERROR_MSGS:hc,DEFAULT_ERROR_RESP:vA,HTTP_STATUS_CODES:Ec,LMDB_ERRORS_ENUM:xA,AUTHENTICATION_ERROR_MSGS:Tc,VALIDATION_ERROR_MSGS:Sc,ITC_ERRORS:fc}});var V=T((yP,gc)=>{"use strict";var er=be(),ZA=N(),zA=f(),Dr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Ac),this.http_resp_code=s||er.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(er.DEFAULT_ERROR_MSGS[s]?er.DEFAULT_ERROR_MSGS[s]:er.DEFAULT_ERROR_MSGS[er.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&ZA[n](i)}};a(Dr,"HdbError");function Ac(e,t,r,s=zA.LOG_LEVELS.ERROR,n=null,i=!1){if(Rc(e))return e;let o=new Dr(e,t,r,s,n);return i&&delete o.stack,o}a(Ac,"handleHDBError");function Rc(e){return e.__proto__.constructor.name===Dr.name}a(Rc,"isHDBError");gc.exports={isHDBError:Rc,handleHDBError:Ac,hdb_errors:er}});var p=T((LP,Hc)=>{"use strict";var Mt=require("path"),jA=require("fs-extra"),re=N(),Nc=require("fs-extra"),Pr=require("os"),eR=require("net"),tR=require("recursive-iterator"),te=f(),bc=oc(),pc=require("papaparse"),Ks=require("moment"),{inspect:rR}=require("util"),Oc=require("is-number"),wP=require("lodash"),{hdb_errors:Ws}=V(),Cc=require("util").promisify(setTimeout),sR=100,nR=5,iR="",aR=4,Ic={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Hc.exports={isEmpty:me,isEmptyOrZeroLength:Ve,arrayHasEmptyValues:cR,arrayHasEmptyOrZeroLengthValues:uR,buildFolderPath:lR,isBoolean:yc,errorizeMessage:oR,stripFileExtension:dR,autoCast:hR,autoCastJSON:Mc,autoCastJSONDeep:da,removeDir:TR,compareVersions:SR,isCompatibleDataVersion:fR,escapeRawValue:mR,unescapeValue:AR,stringifyProps:RR,timeoutPromise:NR,isClusterOperation:OR,getClusterUser:bR,checkGlobalSchemaTable:IR,getHomeDir:Lc,getPropsFilePath:gR,promisifyPapaParse:CR,removeBOM:Uc,createEventPromise:yR,checkProcessRunning:MR,checkSchemaTableExist:wR,checkSchemaExists:Dc,checkTableExists:Pc,getStartOfTomorrowInSeconds:LR,getLimitKey:UR,isObject:ER,isNotEmptyAndHasValue:_R,autoCasterIsNumberCheck:wc,backtickASTSchemaItems:DR,isPortTaken:pR,stopProcess:PR,createForkArgs:HR,autoCastBoolean:BR,async_set_timeout:Cc,getTableHashAttribute:vR,doesSchemaExist:GR,doesTableExist:qR,stringifyObj:FR,ms_to_time:xR,changeExtension:VR,PACKAGE_ROOT:te.PACKAGE_ROOT};function oR(e){return e instanceof Error?e:new Error(e)}a(oR,"errorizeMessage");function me(e){return e==null}a(me,"isEmpty");function _R(e){return!me(e)&&(e||e===0||e===""||yc(e))}a(_R,"isNotEmptyAndHasValue");function Ve(e){return me(e)||e.length===0||e.size===0}a(Ve,"isEmptyOrZeroLength");function cR(e){if(me(e))return!0;for(let t=0;t<e.length;t++)if(me(e[t]))return!0;return!1}a(cR,"arrayHasEmptyValues");function uR(e){if(Ve(e))return!0;for(let t=0;t<e.length;t++)if(Ve(e[t]))return!0;return!1}a(uR,"arrayHasEmptyOrZeroLengthValues");function lR(...e){try{return e.join(Mt.sep)}catch{console.error(e)}}a(lR,"buildFolderPath");function yc(e){return me(e)?!1:e===!0||e===!1}a(yc,"isBoolean");function ER(e){return me(e)?!1:typeof e=="object"}a(ER,"isObject");function dR(e){return Ve(e)?iR:e.slice(0,-aR)}a(dR,"stripFileExtension");function hR(e){return me(e)||e===""||typeof e!="string"?e:Ic[e]!==void 0?Ic[e]:wc(e)===!0?Number(e):e}a(hR,"autoCast");function Mc(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Mc,"autoCastJSON");function da(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=da(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=da(r);s!==r&&(e[t]=s)}return e}else return Mc(e)}a(da,"autoCastJSONDeep");function wc(e){if(e.startsWith("0.")&&Oc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Oc(e))}a(wc,"autoCasterIsNumberCheck");async function TR(e){if(Ve(e))throw new Error(`Directory path: ${e} does not exist`);try{await Nc.emptyDir(e),await Nc.remove(e)}catch(t){throw re.error(`Error removing files in ${e} -- ${t}`),t}}a(TR,"removeDir");function SR(e,t){if(Ve(e)){re.info("Invalid current version sent as parameter.");return}if(Ve(t)){re.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(SR,"compareVersions");function fR(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(fR,"isCompatibleDataVersion");function mR(e){if(me(e))return e;let t=String(e);return t==="."?te.UNICODE_PERIOD:t===".."?te.UNICODE_PERIOD+te.UNICODE_PERIOD:t.replace(te.FORWARD_SLASH_REGEX,te.UNICODE_FORWARD_SLASH)}a(mR,"escapeRawValue");function AR(e){if(me(e))return e;let t=String(e);return t===te.UNICODE_PERIOD?".":t===te.UNICODE_PERIOD+te.UNICODE_PERIOD?"..":String(e).replace(te.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(AR,"unescapeValue");function RR(e,t){if(me(e))return re.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Pr.EOL}!Ve(s)&&s[0]===";"?r+=" "+s+n+Pr.EOL:Ve(s)||(r+=s+"="+n+Pr.EOL)}catch{re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(RR,"stringifyProps");function Lc(){let e;try{e=Pr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Lc,"getHomeDir");function gR(){let e=Mt.join(Lc(),te.HDB_HOME_DIR_NAME,te.BOOT_PROPS_FILE_NAME);return jA.existsSync(e)||(e=Mt.join(__dirname,"../","hdb_boot_properties.file")),e}a(gR,"getPropsFilePath");function NR(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(NR,"timeoutPromise");async function pR(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=eR.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(pR,"isPortTaken");function OR(e){try{return te.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){re.error(`Error checking operation against cluster ops ${t}`)}return!1}a(OR,"isClusterOperation");function IR(e,t){if(!global.hdb_schema[e])return Ws.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ws.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IR,"checkGlobalSchemaTable");function bR(e,t){if(me(t)){re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(me(e)||Ve(e)){re.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(bR,"getClusterUser");function CR(){pc.parsePromise=function(e,t){return new Promise(function(r,s){pc.parse(e,{header:!0,transformHeader:Uc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(CR,"promisifyPapaParse");function Uc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Uc,"removeBOM");function yR(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;re.info(`Got cluster status event response: ${rR(n)}`);try{i.cancel()}catch{re.error("Error trying to cancel timeout.")}s(n)})})}a(yR,"createEventPromise");async function MR(e){let t=!0,r=0;do await Cc(sR*r++),(await bc.findPs(e)).length>0&&(t=!1);while(t&&r<nR);if(t)throw new Error(`process ${e} was not started`)}a(MR,"checkProcessRunning");function wR(e,t){let r=Dc(e);if(r)return r;let s=Pc(e,t);if(s)return s}a(wR,"checkSchemaTableExist");function Dc(e){if(!global.hdb_schema[e])return Ws.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Dc,"checkSchemaExists");function Pc(e,t){if(!global.hdb_schema[e][t])return Ws.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Pc,"checkTableExists");function LR(){let e=Ks().utc().add(1,te.MOMENT_DAYS_TAG).startOf(te.MOMENT_DAYS_TAG).unix(),t=Ks().utc().unix();return e-t}a(LR,"getStartOfTomorrowInSeconds");function UR(){return Ks().utc().format("DD-MM-YYYY")}a(UR,"getLimitKey");function DR(e){try{let t=new tR(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){re.error("Got an error back ticking items."),re.error(t)}}a(DR,"backtickASTSchemaItems");async function PR(e){let t=Pr.userInfo();(await bc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(PR,"stopProcess");function HR(e){return[e]}a(HR,"createForkArgs");function BR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(BR,"autoCastBoolean");function vR(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(vR,"getTableHashAttribute");function GR(e){return global?.hdb_schema?.[e]!==void 0}a(GR,"doesSchemaExist");function qR(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(qR,"doesTableExist");function FR(e){try{return JSON.stringify(e)}catch{return e}}a(FR,"stringifyObj");function xR(e){let t=Ks.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(xR,"ms_to_time");function VR(e,t){let r=Mt.basename(e,Mt.extname(e));return Mt.join(Mt.dirname(e),r+t)}a(VR,"changeExtension")});var vc=T((DP,Bc)=>{"use strict";var kR={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},YR="certificate.pem",$R="privateKey.pem",KR="ca.pem";Bc.exports={CERTIFICATE_VALUES:kR,CERTIFICATE_PEM_NAME:YR,PRIVATEKEY_PEM_NAME:$R,CA_PEM_NAME:KR}});var Pe=T((PP,Gc)=>{"use strict";var ce=require("validate.js");ce.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ce.validators.type.checks[t](e)?null:` must be a '${t}' value`};ce.validators.type.checks={Object:function(e){return ce.isObject(e)&&!ce.isArray(e)},Array:ce.isArray,Integer:ce.isInteger,Number:ce.isNumber,String:ce.isString,Date:ce.isDate,Boolean:function(e){return typeof e=="boolean"}};ce.validators.hasValidFileExt=function(e,t){return ce.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Gc.exports={validateObject:WR,validateObjectAsync:QR,validateBySchema:JR};function WR(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ce(e,t,{format:"flat"});return r?new Error(r):null}a(WR,"validateObject");async function QR(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ce.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(QR,"validateObjectAsync");function JR(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(JR,"validateBySchema")});var kc=T((vP,Vc)=>{"use strict";var XR=require("fs-extra"),C=require("joi"),ZR=require("os"),{boolean:k,string:et,number:He,array:ha}=C.types(),{totalmem:qc}=require("os"),Hr=require("path"),zR=N(),Js=p(),BP=vc(),jR=f(),eg=Pe(),Fc="log",tg="custom_functions",rg="Invalid logging.rotation.maxSize unit. Available units are G, M or K",sg="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",ng="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",ig="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",ag="rootPath config parameter is undefined",og="clustering.enabled config parameter is undefined",wt=He.min(0).required(),Xs=ha.items({host:et.required(),port:wt}).empty(null),lt;Vc.exports={configValidator:_g,routesValidator:hg,route_constraints:Xs};function _g(e){if(lt=e.rootPath,Js.isEmpty(lt))throw ag;let t=k.required(),r=C.valid("production","development").required(),s=He.min(1).max(1e3).empty(null).default(dg),n=et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Qs),i=C.custom(cg).messages({"any.custom":"{:#label} {:#error}"}),o=et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),_=C.string().empty(null).default(Qs),c=C.custom(ug).empty(null).default(Qs),u=e.clustering?.enabled;if(Js.isEmpty(u))throw og;let l;return u===!0?l=C.object({enabled:t,hubServer:C.object({cluster:C.object({name:C.required().empty(null),network:C.object({port:wt,routes:Xs}).required()}).required(),leafNodes:C.object({network:C.object({port:wt}).required()}).required(),network:C.object({port:wt}).required()}).required(),leafServer:C.object({network:C.object({port:wt,routes:Xs}).required(),streams:C.object({maxAge:He.min(120).allow(null).optional(),maxBytes:He.min(1).allow(null).optional(),maxMsgs:He.min(1).allow(null).optional(),path:_}).required()}).required(),logLevel:C.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:k.optional(),tls:C.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:k.required(),verify:k.optional()}),user:et.optional().empty(null)}).required():l=C.object({enabled:t,tls:C.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:k.required()})}).required(),C.object({clustering:l,customFunctions:C.object({enabled:t,network:C.object({cors:k.required(),corsAccessList:ha.required(),headersTimeout:He.min(1).required(),https:k.required(),keepAliveTimeout:He.min(1).required(),port:wt,timeout:He.min(1).required()}),nodeEnv:r,root:n,tls:C.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:C.object({enabled:t}).required(),logging:C.object({file:k.required(),level:C.valid("notify","fatal","error","warn","info","debug","trace"),rotation:C.object({enabled:k.optional(),compress:k.optional(),interval:et.custom(Eg).optional().empty(null),maxSize:et.custom(lg).optional().empty(null),path:et.optional().empty(null).default(Qs)}).required(),root:n,stdStreams:k.required(),auditLog:k.required()}).required(),operationsApi:C.object({authentication:C.object({operationTokenTimeout:C.required(),refreshTokenTimeout:C.required()}).required(),foreground:k.required(),network:C.object({cors:k.required(),corsAccessList:ha.required(),headersTimeout:He.min(1).required(),https:k.required(),keepAliveTimeout:He.min(1).required(),port:wt,timeout:He.min(1).required()}).required(),nodeEnv:r,tls:C.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:C.object({threads:s}).required(),storage:C.object({writeAsync:k.required(),overlappingSync:k.optional(),caching:k.optional(),compression:k.optional(),noReadAhead:k.optional(),path:c,prefetchWrites:k.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(_g,"configValidator");function xc(e){return XR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(xc,"doesPathExist");function cg(e,t){if(e===null)return;let r=xc(e);return r?t.message(r):e}a(cg,"validatePemFile");function ug(e,t){C.assert(e,et.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=xc(e);if(r)return t.message(r)}a(ug,"validatePath");function lg(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(rg);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(ng):e}a(lg,"validateRotationMaxSize");function Eg(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(sg);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(ig):e}a(Eg,"validateRotationInterval");function dg(e,t){let r=t.state.path.join("."),s=ZR.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||qc();return i=Math.round(Math.min(i,qc())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),zR.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(dg,"setDefaultThreads");function Qs(e,t){if(!Js.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Js.isEmpty(lt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Hr.join(lt,tg);case"logging.root":return Hr.join(lt,Fc);case"clustering.leafServer.streams.path":return Hr.join(lt,"clustering","leaf");case"storage.path":return Hr.join(lt,jR.SCHEMA_DIR_NAME);case"logging.rotation.path":return Hr.join(lt,Fc);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Qs,"setDefaultRoot");function hg(e){let t=C.object({routes:Xs});return eg.validateBySchema({routes:e},t)}a(hg,"routesValidator")});var js=T((qP,jc)=>{"use strict";var ye=f(),Ae=p(),Q=N(),{configValidator:Tg,routesValidator:Yc}=kc(),Ce=require("fs-extra"),Sg=require("yaml"),ke=require("path"),fg=require("is-number"),Kc=require("properties-reader"),mg=require("lodash"),{handleHDBError:Ag}=V(),{HTTP_STATUS_CODES:Rg,HDB_ERROR_MSGS:Zs}=be(),gg=require("minimist"),{SCHEMAS_PARAM_CONFIG:Br,CONFIG_PARAMS:Et,CONFIG_PARAM_MAP:tt}=ye,Ng="Unable to get config value because config is uninitialized",pg="Config successfully initialized",Og="Error backing up config file",Ig="Empty parameter sent to getConfigValue",Wc=ke.join(ye.PACKAGE_ROOT,"config","yaml",ye.HDB_DEFAULT_CONFIG_FILE),bg="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",$c={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},zs,Z;jc.exports={createConfigFile:Cg,getDefaultConfig:yg,getConfigValue:Jc,initConfig:Xc,flattenConfig:Lt,updateConfigValue:Zc,updateConfigObject:wg,getConfiguration:Dg,setConfiguration:Pg,readConfigFile:ma,getClusteringRoutes:Hg,initOldConfig:zc,getConfigFromFile:Bg};function Cg(e){let t=tr(Wc);zs=Lt(t.toJSON());let r;for(let o in e){let _=tt[o.toLowerCase()];if(_===Et.SCHEMAS){r=e[o];continue}if(_!==void 0){let c=_.split("_"),u=Ta(_,e[o]);try{t.setIn([...c],u)}catch(l){Q.error(l)}}}r&&Qc(t,r),fa(t);let s=t.toJSON();Z=Lt(s);let n=t.getIn(["rootPath"]),i=ke.join(n,ye.HDB_CONFIG_FILE);Ce.createFileSync(i),Ce.writeFileSync(i,String(t)),Q.trace(`Config file written to ${i}`)}a(Cg,"createConfigFile");function Qc(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Ae.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Br.TABLES))for(let i in s[n][Br.TABLES])for(let o in s[n][Br.TABLES][i]){let _=s[n][Br.TABLES][i][o],c=[Et.SCHEMAS,n,Br.TABLES,i,o];e.hasIn(c)?e.setIn(c,_):e.addIn(c,_)}else for(let i in s[n]){let o=s[n][i],_=[Et.SCHEMAS,n,i];e.hasIn(_)?e.setIn(_,o):e.addIn(_,o)}}}catch(s){Q.error("Error parsing schemas CLI/env config arguments",s)}}a(Qc,"setSchemasConfig");function yg(e){if(zs===void 0){let r=tr(Wc);zs=Lt(r.toJSON())}let t=tt[e.toLowerCase()];if(t!==void 0)return zs[t.toLowerCase()]}a(yg,"getDefaultConfig");function Jc(e){if(Ae.isEmpty(e)){Q.error(Ig);return}if(Z===void 0){Q.trace(Ng);return}let t=tt[e.toLowerCase()];if(t!==void 0)return Z[t.toLowerCase()]}a(Jc,"getConfigValue");function Sa(e){let t=gg(process.argv);return t.ROOTPATH?ke.join(t.ROOTPATH,ye.HDB_CONFIG_FILE):Kc(e).get(ye.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Sa,"getConfigFilePath");function Xc(e=!1){if(Z===void 0||e){let t=Ae.getPropsFilePath();try{Ce.accessSync(t,Ce.constants.F_OK|Ce.constants.R_OK)}catch(i){throw Q.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Sa(t),s;if(r.includes("config/settings.js"))try{zc(r);return}catch(i){if(i.code!==ye.NODE_ERROR_CODES.ENOENT)throw i}try{s=tr(r)}catch(i){if(i.code===ye.NODE_ERROR_CODES.ENOENT){Q.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Q.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Mg(s,r),fa(s);let n=s.toJSON();if(Z=Lt(n),Z.logging_rotation_rotate)for(let i in $c)Z[i]&&Q.error(`Config ${$c[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Q.trace(pg)}}a(Xc,"initConfig");function Mg(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ke.join(r,ye.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ke.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ke.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Q.trace("Updating config file with missing config params"),Ce.writeFileSync(t,String(e)))}a(Mg,"checkForUpdatedConfig");function fa(e){let t=e.toJSON(),r=Tg(t);if(r.error)throw Zs.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}a(fa,"validateConfig");function wg(e,t){Z===void 0&&(Z={});let r=tt[e.toLowerCase()];if(r===void 0){Q.trace(`Unable to update config object because config param '${e}' does not exist`);return}Z[r.toLowerCase()]=t}a(wg,"updateConfigObject");function Zc(e,t,r=void 0,s=!1,n=!1){Z===void 0&&Xc();let i=Jc(tt.hdb_root),o=ke.join(i,ye.HDB_CONFIG_FILE),_=tr(o),c;if(r===void 0&&e.toLowerCase()===Et.SCHEMAS)c=t;else if(r===void 0){let E=tt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=E.split("_"),d=Ta(E,t);_.setIn([...h],d)}else for(let E in r){let h=tt[E.toLowerCase()];if(h===Et.SCHEMAS){c=r[E];continue}if(h!==void 0){let d=h.split("_"),A=Ta(h,r[E]);try{_.setIn([...d],A)}catch(R){Q.error(R)}}}c&&Qc(_,c),fa(_);let u=_.getIn(["rootPath"]),l=ke.join(u,ye.HDB_CONFIG_FILE);s===!0&&Lg(o,u),Ce.writeFileSync(l,String(_)),n&&(Z=Lt(_.toJSON())),Q.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Zc,"updateConfigValue");function Lg(e,t){try{let r=ke.join(t,"backup",`${ye.HDB_CONFIG_FILE}.bak`);Ce.copySync(e,r),Q.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Q.error(Og),Q.error(r)}}a(Lg,"backupConfigFile");var Ug=["schemas"];function Lt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Ug.includes(r)){let s=Lt(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(Lt,"flattenConfig");function Ta(e,t){if(e===Et.CLUSTERING_NODENAME||e===Et.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(fg(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ae.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 Ae.autoCast(t)}a(Ta,"castConfigValue");function Dg(){let e=Ae.getPropsFilePath(),t=Sa(e);return tr(t).toJSON()}a(Dg,"getConfiguration");async function Pg(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Zc(void 0,void 0,n,!0),bg}catch(i){throw typeof i=="string"||i instanceof String?Ag(i,i,Rg.BAD_REQUEST,void 0,void 0,!0):i}}a(Pg,"setConfiguration");function ma(){let e=Ae.getPropsFilePath();try{Ce.accessSync(e,Ce.constants.F_OK|Ce.constants.R_OK)}catch(s){throw Q.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Sa(e);return tr(t).toJSON()}a(ma,"readConfigFile");function tr(e){return Sg.parseDocument(Ce.readFileSync(e,"utf8"),{simpleKeys:!0})}a(tr,"parseYamlDoc");function Hg(){let e=ma(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ae.isEmptyOrZeroLength(t)?[]:t;let r=Yc(t);if(r)throw Zs.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Ae.isEmptyOrZeroLength(s)?[]:s;let n=Yc(s);if(n)throw Zs.CONFIG_VALIDATION(n.message);if(!Ae.isEmptyOrZeroLength(s)&&!Ae.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!Ae.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Zs.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Hg,"getClusteringRoutes");function zc(e){let t=Kc(e);Z={};for(let r in tt){let s=t.get(r.toUpperCase());if(Ae.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=tt[r].toLowerCase();n===Et.LOGGING_ROOT?Z[n]=ke.dirname(s):Z[n]=s}return Z}a(zc,"initOldConfig");function Bg(e){let t=ma();return mg.get(t,e.replaceAll("_","."))}a(Bg,"getConfigFromFile")});var $=T((xP,tu)=>{"use strict";var Aa=require("fs-extra"),Ye=require("path"),vg=require("os"),Gg=require("properties-reader"),vr=N(),rr=p(),O=f(),en=js(),qg="Error initializing environment manager",tn="BOOT_PROPS_FILE_PATH",eu=!1,Fg={[O.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},rt={};tu.exports={BOOT_PROPS_FILE_PATH:tn,getHdbBasePath:xg,setHdbBasePath:Vg,get:kg,initSync:$g,setProperty:U,initTestEnvironment:Kg};function xg(){return rt[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(xg,"getHdbBasePath");function Vg(e){rt[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Vg,"setHdbBasePath");function kg(e){let t=en.getConfigValue(e);return t===void 0?rt[e]:t}a(kg,"get");function U(e,t){Fg[e]&&(rt[e]=t),en.updateConfigObject(e,t)}a(U,"setProperty");function Yg(){let e;try{e=rr.getPropsFilePath(),Aa.accessSync(e,Aa.constants.F_OK|Aa.constants.R_OK),eu=!0;let t=Gg(e);return rt[O.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(O.HDB_SETTINGS_NAMES.INSTALL_USER),rt[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),rt[tn]=e,!0}catch{return vr.trace(`Environment manager found no properties file at ${e}`),!1}}a(Yg,"doesPropFileExist");function $g(e=!1){try{(eu||Yg())&&(en.initConfig(e),rt[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=en.getConfigValue(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){vr.error(qg),vr.error(t),console.error(t),process.exit(1)}}a($g,"initSync");function Kg(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=Ye.join(__dirname,"../../","unitTests");rt[tn]=Ye.join(c,"hdb_boot_properties.file"),U(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ye.join(c,"settings.test")),U(O.HDB_SETTINGS_NAMES.INSTALL_USER,vg.userInfo().username),U(O.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ye.join(c,"envDir","utility","keys","privateKey.pem")),U(O.HDB_SETTINGS_NAMES.CERT_KEY,Ye.join(c,"envDir","utility","keys","certificate.pem")),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ye.join(c,"envDir","utility","keys","privateKey.pem")),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ye.join(c,"envDir","utility","keys","certificate.pem")),U(O.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),U(O.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ye.join(c,"envDir","log")),U(O.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),U(O.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),U(O.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),U(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ye.join(c,"envDir")),U(O.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,rr.isEmpty(n)?!0:n),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,rr.isEmpty(n)?!0:n),U(O.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),U(O.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rr.isEmpty(i)?!1:i),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,rr.isEmpty(i)?!1:i),U(O.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),U(O.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),U(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),U(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),U(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ye.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),U(O.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rr.isEmpty(_)?!1:_),o&&(U("CORS_ACCESSLIST",o),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(U(O.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(U(O.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(U(O.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${tn}. Please check your boot props and settings files`;vr.fatal(r),vr.error(t)}}a(Kg,"initTestEnvironment")});var Ut=T((YP,su)=>{"use strict";var{platform:kP}=require("os"),Wg="nats-server.zip",Ra="nats-server",Qg=process.platform==="win32"?`${Ra}.exe`:Ra,ga="HDB",Jg=/^[^\s.,*>]+$/,ru="__request__",Xg=a(e=>`${e}.${ru}`,"REQUEST_SUBJECT"),Zg={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},zg={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},jg={HUB:"hub.pid",LEAF:"leaf.pid"},eN={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tN={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ga,deliver_subject:"__HDB__.WORKQUEUE"},rN={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ga,deliver_subject:"HDB.SCHEMAQUEUE"},sN={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ga,deliver_subject:"HDB.USERQUEUE"},nN={SUCCESS:"success",ERROR:"error"},iN={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},aN={TXN:"txn",MSGID:"msgid"},sr={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},oN={[sr.ERR]:1,[sr.WRN]:2,[sr.INF]:3,[sr.DBG]:4,[sr.TRC]:5},_N={debug:"-D",trace:"-DVV"};su.exports={NATS_SERVER_ZIP:Wg,NATS_SERVER_NAME:Ra,NATS_BINARY_NAME:Qg,PID_FILES:jg,NATS_CONFIG_FILES:zg,SERVER_SUFFIX:eN,WORK_QUEUE_CONSUMER_NAMES:tN,SCHEMA_QUEUE_CONSUMER_NAMES:rN,USER_QUEUE_CONSUMER_NAMES:sN,NATS_TERM_CONSTRAINTS_RX:Jg,REQUEST_SUFFIX:ru,UPDATE_REMOTE_RESPONSE_STATUSES:nN,CLUSTER_STATUS_STATUSES:iN,REQUEST_SUBJECT:Xg,SUBJECT_PREFIXES:aN,MSG_HEADERS:Zg,LOG_LEVELS:sr,LOG_LEVEL_FLAGS:_N,LOG_LEVEL_HIERARCHY:oN}});var rn=T((KP,ou)=>{"use strict";var Gr=require("crypto"),iu="aes-256-cbc",cN=32,uN=16,Na=64,au=32,lN=Na+au,nu=new Map;ou.exports={encrypt:EN,decrypt:dN,createNatsTableStreamName:hN};function EN(e){let t=Gr.randomBytes(cN),r=Gr.randomBytes(uN),s=Gr.createCipheriv(iu,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(EN,"encrypt");function dN(e){let t=e.substr(0,Na),r=e.substr(Na,au),s=e.substr(lN,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Gr.createDecipheriv(iu,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(dN,"decrypt");function hN(e,t){let r=`${e}.${t}`,s=nu.get(r);return s||(s=Gr.createHash("md5").update(`${e}.${t}`).digest("hex"),nu.set(r,s)),s}a(hN,"createNatsTableStreamName")});var pa=T((QP,_u)=>{"use strict";var sn=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(sn,"BridgeMethods");_u.exports=sn});var Dt=T((zP,hu)=>{"use strict";var cu=be().LMDB_ERRORS_ENUM,XP=require("lmdb"),TN=ee(),ZP=require("buffer").Buffer,{OVERFLOW_MARKER:uu,MAX_SEARCH_KEY_LENGTH:nn}=TN,lu=["number","string","symbol","boolean","bigint"];function SN(e){if(e=e?.database||e,!e)throw new Error(cu.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(cu.INVALID_ENVIRONMENT)}a(SN,"validateEnv");function fN(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(fN,"stringifyData");function mN(e){return e instanceof Date?e.valueOf():e}a(mN,"convertKeyValueToWrite");function AN(e){if(e==null)return;if(lu.includes(typeof e))return e.length>nn?[e.slice(0,nn)+uu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];lu.includes(typeof n)&&(n.length>nn?t.push(n.slice(0,nn)+uu):t.push(n))}}return t}a(AN,"getIndexedValues");var an=0,Eu=0;function du(){Eu=Date.now()-performance.now()}a(du,"adjustStartTime");du();var RN=6e4;setInterval(du,RN).unref();function gN(){let e=performance.now()+Eu;return e>an?(an=e,e):(an+=488e-6,an)}a(gN,"getNextMonotonicTime");hu.exports={validateEnv:SN,stringifyData:fN,convertKeyValueToWrite:mN,getNextMonotonicTime:gN,getIndexedValues:AN}});var Su=T((eH,Tu)=>{"use strict";var on=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(on,"DBIDefinition");Tu.exports=on});var Au=T((rH,mu)=>{"use strict";var Oa=$(),fu=f();Oa.initSync();var NN=Oa.get(fu.CONFIG_PARAMS.STORAGE_COMPRESSION),pN=Oa.get(fu.CONFIG_PARAMS.STORAGE_CACHING)!==!1,_n=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=NN&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=pN&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(_n,"OpenDBIObject");mu.exports=_n});var Nu=T((nH,gu)=>{"use strict";var nr=$(),qr=f();nr.initSync();var ON=nr.get(qr.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||nr.get(qr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||nr.get(qr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ru=nr.get(qr.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),IN=nr.get(qr.CONFIG_PARAMS.STORAGE_NOREADAHEAD),cn=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=ON,Ru!==void 0&&(this.overlappingSync=Ru),this.noReadAhead=IN}};a(cn,"OpenEnvironmentObject");gu.exports=cn});var B=T((aH,Mu)=>{"use strict";var Ia=require("lmdb"),Me=require("fs-extra"),Be=require("path"),ln=Dt(),pu=N(),z=be().LMDB_ERRORS_ENUM,En=Su(),ba=Au(),Ou=Nu(),dt=ee(),ve=dt.INTERNAL_DBIS_NAME,Iu=dt.DBI_DEFINITION_NAME,bN="data.mdb",CN="lock.mdb",Fr=".mdb",yN="-lock",un=class{constructor(t,r,s=!1){this.dbi=we(t,r),this.key_type=this.dbi[dt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ia.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(un,"TransactionCursor");function Ca(e,t){if(e===void 0)throw new Error(z.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(z.ENV_NAME_REQUIRED)}a(Ca,"pathEnvNameValidation");async function ya(e,t,r=!0){try{await Me.access(e)}catch(s){throw s.code==="ENOENT"?new Error(z.INVALID_BASE_PATH):s}try{let s=Be.join(e,t+Fr);return await Me.access(s,Me.constants.R_OK|Me.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Me.access(Be.join(e,t,bN),Me.constants.R_OK|Me.constants.F_OK),Be.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(z.INVALID_ENVIRONMENT)}else throw new Error(z.INVALID_ENVIRONMENT);throw s}}a(ya,"validateEnvironmentPath");function dn(e,t){if(ln.validateEnv(e),t===void 0)throw new Error(z.DBI_NAME_REQUIRED)}a(dn,"validateEnvDBIName");async function MN(e,t,r=!1,s=!1){Ca(e,t),t=t.toString();try{return await ya(e,t,s),Ma(e,t,r)}catch(n){if(n.message===z.INVALID_ENVIRONMENT){let i=Be.join(e,t);await Me.mkdirp(s?i:e);let o=new Ou(s?i:i+Fr,!1),_=Ia.open(o);_.dbis=Object.create(null);let c=new ba(!1);_.openDB(ve,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=wa(e,t,r);return _[dt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(MN,"createEnvironment");async function wN(e,t,r,s=!0){let n=await Ma(e,t);if(r===void 0)throw new Error(z.DESTINATION_PATH_REQUIRED);try{await Me.access(Be.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(z.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(wN,"copyEnvironment");async function Ma(e,t,r=!1){Ca(e,t),t=t.toString();let s=wa(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 ya(e,t),i=Be.join(e,t+Fr),o=n!=i,_=new Ou(n,o),c=Ia.open(_);c.dbis=Object.create(null);let u=Cu(c);for(let l=0;l<u.length;l++)we(c,u[l]);return c[dt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ma,"openEnvironment");async function LN(e,t,r=!1){Ca(e,t),t=t.toString();let s=Be.join(e,t+Fr),n=await ya(e,t);if(global.lmdb_map!==void 0){let i=wa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await bu(o),delete global.lmdb_map[i]}}await Me.remove(n),await Me.remove(n===s?n+yN:Be.join(Be.dirname(n),CN))}a(LN,"deleteEnvironment");async function bu(e){ln.validateEnv(e);let t=e[dt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(bu,"closeEnvironment");function wa(e,t,r=!1){let n=`${Be.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(wa,"getCachedEnvironmentName");function UN(e){ln.validateEnv(e);let t=Object.create(null),r=we(e,ve);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ve)try{t[s]=Object.assign(new En,n)}catch{pu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(UN,"listDBIDefinitions");function Cu(e){ln.validateEnv(e);let t=[],r=we(e,ve);for(let{key:s}of r.getRange({start:!1}))s!==ve&&t.push(s);return t}a(Cu,"listDBIs");function DN(e,t){let s=we(e,ve).getEntry(t),n=new En;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{pu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(DN,"getDBIDefinition");function yu(e,t,r,s=!1){if(dn(e,t),t=t.toString(),t===ve)throw new Error(z.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return we(e,t)}catch(n){if(n.message===z.DBI_DOES_NOT_EXIST){let i=new ba(r,s===!0),o=e.openDB(t,i),_=new En(r===!0,s);return o[Iu]=_,we(e,ve).putSync(t,_),e.dbis[t]=o,o}throw n}}a(yu,"createDBI");function we(e,t){if(dn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ve?r=DN(e,t):r=new En,r===void 0)throw new Error(z.DBI_DOES_NOT_EXIST);let s;try{let n=new ba(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(z.DBI_DOES_NOT_EXIST):n}return s[Iu]=r,e.dbis[t]=s,s}a(we,"openDBI");function PN(e,t){dn(e,t),t=t.toString();let r=we(e,t),s=r.getStats();return r[dt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(PN,"statDBI");async function HN(e,t){try{let r=Be.join(e,t+Fr);return(await Me.stat(r)).size}catch{throw new Error(z.INVALID_ENVIRONMENT)}}a(HN,"environmentDataSize");function BN(e,t){if(dn(e,t),t=t.toString(),t===ve)throw new Error(z.CANNOT_DROP_INTERNAL_DBIS_NAME);we(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],we(e,ve).removeSync(t)}a(BN,"dropDBI");function vN(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{we(e,n)}catch(i){if(i.message===z.DBI_DOES_NOT_EXIST)yu(e,n,n!==t,n===t);else throw i}}}a(vN,"initializeDBIs");Mu.exports={openDBI:we,openEnvironment:Ma,createEnvironment:MN,listDBIs:Cu,listDBIDefinitions:UN,createDBI:yu,dropDBI:BN,statDBI:PN,deleteEnvironment:LN,initializeDBIs:vN,TransactionCursor:un,environmentDataSize:HN,copyEnvironment:wN,closeEnvironment:bu}});var Lu=T((_H,wu)=>{"use strict";var hn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(hn,"InsertRecordsResponseObject");wu.exports=hn});var Du=T((uH,Uu)=>{"use strict";var Tn=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(Tn,"UpdateRecordsResponseObject");Uu.exports=Tn});var Hu=T((EH,Pu)=>{"use strict";var Sn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Sn,"UpsertRecordsResponseObject");Pu.exports=Sn});var ir=T((fH,Gu)=>{"use strict";var GN=B(),qN=Lu(),FN=Du(),xN=Hu(),$e=Dt(),xr=be().LMDB_ERRORS_ENUM,VN=ee(),st=f(),kN=p(),YN=require("uuid"),hH=require("lmdb"),{handleHDBError:$N,hdb_errors:KN}=V(),{OVERFLOW_MARKER:TH,MAX_SEARCH_KEY_LENGTH:SH}=VN,Bu=$();Bu.initSync();var fn=Bu.get(st.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),La=st.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pt=st.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WN(e,t,r,s,n=$e.getNextMonotonicTime()){Ha(e,t,r,s),Ua(e,t,r);let i=new qN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];vu(u,!0,n);let l=QN(e,t,r,u),E=u[t];o.push(l),_.push(E)}return Da(o,_,s,i,n)}a(WN,"insertRecords");function QN(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let l=_([[{}]]);Array.isArray(l)&&(_=l[0][st.FUNC_VAL],s[o]=_)}let c=$e.getIndexedValues(_),u=e.dbis[o];if(c){fn&&u.prefetch(c.map(l=>({key:l,value:n})),mn);for(let l=0,E=c.length;l<E;l++)u.put(c[l],n)}}fn&&e.dbis[t].prefetch([n],mn),e.dbis[t].put(n,s,s[Pt])})}a(QN,"insertRecord");function JN(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(JN,"removeSkippedRecords");function vu(e,t,r){let s=r>0;(s||!Number.isInteger(e[Pt]))&&(e[Pt]=r||(r=$e.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[La]))&&(e[La]=r||$e.getNextMonotonicTime()):delete e[La]}a(vu,"setTimestamps");function Ua(e,t,r){r.indexOf(st.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(st.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(st.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(st.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),GN.initializeDBIs(e,t,r)}a(Ua,"initializeTransaction");async function XN(e,t,r,s,n=$e.getNextMonotonicTime()){Ha(e,t,r,s),Ua(e,t,r);let i=new FN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],h;try{h=Pa(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}_.push(h),c.push(E)}return Da(_,c,s,i,n,o)}a(XN,"updateRecords");async function ZN(e,t,r,s,n=$e.getNextMonotonicTime()){try{Ha(e,t,r,s)}catch(c){throw $N(c,c.message,KN.HTTP_STATUS_CODES.BAD_REQUEST)}Ua(e,t,r);let i=new xN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;kN.isEmpty(u[t])?(l=YN.v4(),u[t]=l):l=u[t];let E=Pa(e,t,u,l,i,!1,n);o.push(E),_.push(l)}return Da(o,_,s,i,n)}a(ZN,"upsertRecords");async function Da(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||$e.getNextMonotonicTime(),JN(r,i),s}a(Da,"finalizeWrite");function Pa(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(vu(r,!l,o),Number.isInteger(r[Pt])&&u[Pt]>r[Pt])return!1;l&&n.original_records.push(u);let E,h=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let R=r[A],M=e.dbis[A];if(M===void 0)continue;let W=u[A];if(typeof R=="function"){let F=R([[u]]);Array.isArray(F)&&(R=F[0][st.FUNC_VAL],r[A]=R)}if(R===W)continue;let x=$e.getIndexedValues(W);if(x){fn&&M.prefetch(x.map(F=>({key:F,value:s})),mn);for(let F=0,Xe=x.length;F<Xe;F++)M.remove(x[F],s)}if(x=$e.getIndexedValues(R),x){fn&&M.prefetch(x.map(F=>({key:F,value:s})),mn);for(let F=0,Xe=x.length;F<Xe;F++)M.put(x[F],s)}}let d=Object.assign({},u,r);_.put(s,d,d[Pt])},"do_put");return c?E=_.ifVersion(s,c.version,h):E=_.ifNoExists(s,h),E.then(d=>d?!0:Pa(e,t,r,s,n,i,o))}a(Pa,"updateUpsertRecord");function zN(e,t,r){if($e.validateEnv(e),t===void 0)throw new Error(xr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xr.WRITE_ATTRIBUTES_REQUIRED):new Error(xr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(zN,"validateBasic");function Ha(e,t,r,s){if(zN(e,t,r),!Array.isArray(s))throw s===void 0?new Error(xr.RECORDS_REQUIRED):new Error(xr.RECORDS_MUST_BE_ARRAY)}a(Ha,"validateWrite");function mn(){}a(mn,"noop");Gu.exports={insertRecords:WN,updateRecords:XN,upsertRecords:ZN}});var q=T((AH,Yu)=>{"use strict";var Kr=f(),jN=p(),ue=$(),Wr=require("path"),ep=require("minimist"),qu=require("fs-extra"),Fu=require("lodash");ue.initSync();var{CONFIG_PARAMS:ht,SCHEMAS_PARAM_CONFIG:Vr,SYSTEM_SCHEMA_NAME:An}=Kr,kr,Yr,$r;function xu(){if(kr!==void 0)return kr;if(ue.getHdbBasePath()!==void 0)return kr=ue.get(ht.STORAGE_PATH)||Wr.join(ue.getHdbBasePath(),Kr.SCHEMA_DIR_NAME),kr}a(xu,"getBaseSchemaPath");function Vu(){if(Yr!==void 0)return Yr;if(ue.getHdbBasePath()!==void 0)return Yr=ku(An),Yr}a(Vu,"getSystemSchemaPath");function tp(){if($r!==void 0)return $r;if(ue.getHdbBasePath()!==void 0)return $r=ue.get(Kr.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Wr.join(ue.getHdbBasePath(),Kr.TRANSACTIONS_DIR_NAME),$r}a(tp,"getTransactionAuditStoreBasePath");function rp(e,t){let r=ue.get(ht.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Wr.join(tp(),e.toString())}a(rp,"getTransactionAuditStorePath");function ku(e,t){e=e.toString(),t=t&&t.toString();let r=ue.get(Kr.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Wr.join(xu(),e)}a(ku,"getSchemaPath");function sp(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ep(process.argv));let s=r[ht.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!jN.isObject(s))throw o;i=s}for(let o of i){let _=o[An];if(!_)continue;let c=ue.get(ht.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Vr.PATH];if(u)return Fu.set(c,[An,Vr.TABLES,t,Vr.PATH],u),ue.setProperty(ht.SCHEMAS,c),u;let l=_?.[Vr.PATH];if(l)return Fu.set(c,[An,Vr.PATH],l),ue.setProperty(ht.SCHEMAS,c),l}}let n=r[ht.STORAGE_PATH.toUpperCase()];if(n){if(!qu.pathExistsSync(n))throw new Error(n+" does not exist");let i=Wr.join(n,e);return qu.mkdirsSync(i),ue.setProperty(ht.STORAGE_PATH,n),i}return Vu()}a(sp,"initSystemSchemaPaths");function np(){kr=void 0,Yr=void 0,$r=void 0}a(np,"resetPaths");Yu.exports={getBaseSchemaPath:xu,getSystemSchemaPath:Vu,getTransactionAuditStorePath:rp,getSchemaPath:ku,initSystemSchemaPaths:sp,resetPaths:np}});var Ht=T((gH,ip)=>{ip.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 ar=T((NH,Wu)=>{"use strict";var Ku=p(),$u=f(),gn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ba=require("joi"),Rn={schema_format:{pattern:gn,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ap=Ba.alternatives(Ba.string().min(1).max(Rn.schema_length.maximum).pattern(gn).messages({"string.pattern.base":"{:#label} "+Rn.schema_format.message}),Ba.number()).required();function op(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Rn.schema_length.maximum?`'${e}' maximum of 250 characters`:gn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(op,"checkValidTable");function _p(e,t){return Ku.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(_p,"validateSchemaExists");function cp(e,t){let r=t.state.ancestors[0].schema;return Ku.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(cp,"validateTableExists");function up(e,t){return e.toLowerCase()===$u.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${$u.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(up,"validateSchemaName");Wu.exports={common_validators:Rn,schema_regex:gn,hdb_schema_table:ap,validateSchemaExists:_p,validateTableExists:cp,validateSchemaName:up,checkValidTable:op}});var Nn=T((OH,Qu)=>{var{common_validators:Tt}=ar(),Qr=Pe(),Ge="is required",v={schema:{presence:!0,format:Tt.schema_format,length:Tt.schema_length},table:{presence:!0,format:Tt.schema_format,length:Tt.schema_length},attribute:{presence:!0,format:Tt.schema_format,length:Tt.schema_length},hash_attribute:{presence:!0,format:Tt.schema_format,length:Tt.schema_length}};function Jr(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(Jr,"makeAttributesStrings");function lp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence=!1,v.attribute.presence=!1,v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(lp,"schema_object");function Ep(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence=!1,v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(Ep,"table_object");function dp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence=!1,v.hash_attribute.presence={message:Ge},Qr.validateObject(e,v)}a(dp,"create_table_object");function hp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence={message:Ge},v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(hp,"attribute_object");function Tp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence=!1,v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(Tp,"describe_table");function Sp(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(Sp,"validateTableResidence");Qu.exports={schema_object:lp,create_table_object:dp,table_object:Ep,attribute_object:hp,describe_table:Tp,validateTableResidence:Sp}});var Xu=T((bH,Ju)=>{"use strict";var fp=require("uuid"),pn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||fp.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(pn,"CreateAttributeObject");Ju.exports=pn});var In=T((yH,Zu)=>{"use strict";var mp=Xu(),On=class extends mp{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(On,"LMDBCreateAttributeObject");Zu.exports=On});var ju=T((wH,zu)=>{"use strict";zu.exports=Rp;var Ap="inserted";function Rp(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ap?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Rp,"returnObject")});var bn=T((UH,nl)=>{"use strict";var gp=f(),va=B(),Np=ir(),{getSystemSchemaPath:pp,getSchemaPath:Op}=q(),Ip=Ht(),bp=Nn(),Cp=In(),yp=ju(),{handleHDBError:el,hdb_errors:rl}=V(),tl=p(),{HTTP_STATUS_CODES:Mp}=rl,Ga=Ip.hdb_attribute,sl=[];for(let e=0;e<Ga.attributes.length;e++)sl.push(Ga.attributes[e].attribute);var wp="inserted";nl.exports=Lp;async function Lp(e){let t=bp.attribute_object(e);if(t)throw el(new Error,t.message,rl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&tl.checkGlobalSchemaTable(e.schema,e.table);if(r)throw el(new Error,r,Mp.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=tl.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Cp(e.schema,e.table,e.attribute,e.id);try{let i=await va.openEnvironment(Op(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);va.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await va.openEnvironment(pp(),gp.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await Np.insertRecords(o,Ga.hash_attribute,sl,[n]);return yp(wp,_,{records:[n]},c)}catch(i){throw i}}a(Lp,"lmdbCreateAttribute")});var Fa=T((PH,al)=>{var{hdb_schema_table:il}=ar(),Up=Pe(),qa=require("joi"),Dp={undefined:"undefined",null:"null"},Pp=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||Dp[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"),Hp=qa.object({schema:il,table:il,records:qa.array().items(qa.object().custom(Pp)).required()});al.exports=function(e){return Up.validateBySchema(e,Hp)}});var Cn=T((vH,_l)=>{"use strict";var nt=p(),ol=N(),BH=Fa();_l.exports=Bp;function Bp(e){if(nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(nt.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&&nt.isEmptyOrZeroLength(o[r]))throw ol.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(!nt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ol.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`);!nt.isEmpty(o[r])&&o[r]!==""&&s.has(nt.autoCast(o[r]))&&(o.skip=!0),s.add(nt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Bp,"insertUpdateValidate")});var Mn=T((qH,cl)=>{"use strict";var vp=f().OPERATIONS_ENUM,yn=class{constructor(t,r,s,n,i=void 0){this.operation=vp.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(yn,"InsertObject");cl.exports=yn});var Ln=T((VH,ul)=>{"use strict";var xH=Mn(),wn=f(),Va=p(),xa=N(),Gp=require("uuid"),{handleHDBError:Xr,hdb_errors:qp}=V(),{HDB_ERROR_MSGS:Zr,HTTP_STATUS_CODES:zr}=qp;ul.exports=Fp;function Fp(e,t,r){for(let n=0;n<t.length;n++)xp(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Vp(i,r,e.operation)}}a(Fp,"processRows");function xp(e){if(Buffer.byteLength(String(e))>wn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Xr(new Error,Zr.ATTR_NAME_LENGTH_ERR(e),zr.BAD_REQUEST,void 0,void 0,!0);if(Va.isEmptyOrZeroLength(e)||Va.isEmpty(e.trim()))throw Xr(new Error,Zr.ATTR_NAME_NULLISH_ERR,zr.BAD_REQUEST,void 0,void 0,!0)}a(xp,"validateAttribute");function Vp(e,t,r){if(!e.hasOwnProperty(t)||Va.isEmptyOrZeroLength(e[t])){if(r===wn.OPERATIONS_ENUM.INSERT||r===wn.OPERATIONS_ENUM.UPSERT){e[t]=Gp.v4();return}throw xa.error("Update transaction aborted due to record with no hash value:",e),Xr(new Error,Zr.RECORD_MISSING_HASH_ERR,zr.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>wn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw xa.error(e),Xr(new Error,Zr.HASH_VAL_LENGTH_ERR,zr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw xa.error(e),Xr(new Error,Zr.INVALID_FORWARD_SLASH_IN_HASH_ERR,zr.BAD_REQUEST,void 0,void 0,!0)}a(Vp,"validateHash")});var El=T((YH,ll)=>{"use strict";var Un=class{constructor(t,r){this.type=t,this.message=r}};a(Un,"ITCEventObject");ll.exports=Un});var Dn=T((KH,Tl)=>{var kp=require("crypto"),dl=9;function Yp(e){let t=Kp(dl),r=hl(e+t);return t+r}a(Yp,"createHash");function $p(e,t){let r=e.substr(0,dl),s=r+hl(t+r);return e===s}a($p,"validateHash");function Kp(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(Kp,"generateSalt");function hl(e){return kp.createHash("md5").update(e).digest("hex")}a(hl,"md5");Tl.exports={hash:Yp,validate:$p}});var fl=T((QH,Sl)=>{"use strict";var St=f(),jr=class{constructor(t=0,r=St.STORAGE_TYPES_ENUM.LMDB,s=St.LICENSE_VALUES.API_CALL_DEFAULT,n=St.RAM_ALLOCATION_ENUM.DEFAULT,i=St.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(jr,"BaseLicense");var Pn=class extends jr{constructor(t=0,r=St.STORAGE_TYPES_ENUM.LMDB,s=St.LICENSE_VALUES.API_CALL_DEFAULT,n=St.RAM_ALLOCATION_ENUM.DEFAULT,i=St.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(Pn,"ExtendedLicense");Sl.exports={BaseLicense:jr,ExtendedLicense:Pn}});var Wa=T((XH,pl)=>{"use strict";var _r=require("fs-extra"),ml=Dn(),Al=require("crypto"),Wp=require("moment"),Qp=require("uuid").v4,se=N(),Ya=require("path"),Jp=p(),Re=f(),Xp=fl().ExtendedLicense,or="invalid license key format",Zp="061183",zp="mofi25",jp="aes-256-cbc",eO=16,tO=32,Rl=$();Rl.initSync();var ka;pl.exports={validateLicense:gl,generateFingerPrint:sO,licenseSearch:Nl,getLicense:aO};function $a(){return Ya.join(Rl.getHdbBasePath(),Re.LICENSE_KEY_DIR_NAME,Re.LICENSE_FILE_NAME)}a($a,"getLicenseDirPath");function rO(){let e=$a();return Ya.join(e,Re.LICENSE_FILE_NAME)}a(rO,"getLicenseFilePath");function Ka(){let e=$a();return Ya.join(e,Re.REG_KEY_FILE_NAME)}a(Ka,"getFingerPrintFilePath");async function sO(){let e=Ka();try{return await _r.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await nO();throw se.error(`Error writing fingerprint file to ${e}`),se.error(t),new Error("There was an error generating the fingerprint")}}a(sO,"generateFingerPrint");async function nO(){let e=Qp(),t=ml.hash(e),r=Ka();try{await _r.mkdirp($a()),await _r.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw se.error(`Error writing fingerprint file to ${r}`),se.error(s),new Error("There was an error generating the fingerprint")}return t}a(nO,"writeFingerprint");function gl(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Re.STORAGE_TYPES_ENUM.LMDB,api_call:Re.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Re.RAM_ALLOCATION_ENUM.DEFAULT,version:Re.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return se.error("empty license key passed to validate."),r;let s=Ka(),n=!1;try{n=_r.statSync(s)}catch(i){se.error(i)}if(n){let i;try{i=_r.readFileSync(s,"utf8")}catch{se.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(zp),_=o[1];_=Buffer.concat([Buffer.from(_)],eO);let c=Buffer.concat([Buffer.from(i)],tO),u=Al.createDecipheriv(jp,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 d=iO(o[0],i);if(d)l=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(or),se.error(or),new Error(or)}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(or),se.error(or),new Error(or)}else r.exp_date=l;r.exp_date<Wp().valueOf()&&(r.valid_date=!1),ml.validate(o[1],`${Zp}${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||se.error("Invalid licence"),r}a(gl,"validateLicense");function iO(e,t){try{let r=Al.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{se.warn("Check old license failed")}}a(iO,"checkOldLicense");function Nl(){let e=new Xp;e.api_call=0;let t=[];try{t=_r.readFileSync(rO(),"utf-8").split(Re.NEW_LINE)}catch(r){r.code==="ENOENT"?se.info("no license file found"):se.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Jp.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=gl(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){se.error("There was an error parsing the license string."),se.error(n),e.api_call=Re.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Re.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Re.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Re.LICENSE_VALUES.API_CALL_DEFAULT),ka=e,e}a(Nl,"licenseSearch");async function aO(){return ka||await Nl(),ka}a(aO,"getLicense")});var vn=T((zH,ja)=>{"use strict";var{Worker:oO,MessageChannel:_O,parentPort:it,isMainThread:bl,threadId:cO,workerData:uO}=require("worker_threads"),{PACKAGE_ROOT:lO}=f(),{join:EO,isAbsolute:dO,extname:hO}=require("path"),{totalmem:Ol}=require("os"),Za=f(),Cl=$(),TO=Wa(),Hn=N(),SO=f();Cl.initSync();var fO=Cl.get(Za.CONFIG_PARAMS.HTTP_THREADS)||1,mO=1024*1024,ft=[],Bt=[],AO=50,yl=1e4,Ml="restart",wl="request_thread_info",Ll="resource_report",Ul="thread_info",Dl="added-port",Qa;ja.exports={startWorker:Ja,restartWorkers:za,shutdownWorkers:gO,workers:ft,setMonitorListener:bO,onMessageFromWorkers:NO,broadcast:pO};function Ja(e,t={}){let s=TO.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||Ol();n=Math.min(n,Ol());let i=Math.min(Math.max(Math.floor(n/mO/(1+fO/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of Bt){let{port1:l,port2:E}=new _O;u.postMessage({type:Dl,port:l},[l]),_.push(E)}hO(e)||(e+=".js");let c=new oO(dO(e)?e:EO(lO,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return Bn(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{Ja(e,t)},c.on("error",u=>{console.error("Worker error:",u),Hn.error("Worker error:",u)}),c.on("exit",u=>{ft.splice(ft.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<AO?(t.unexpectedRestarts=c.unexpectedRestarts+1,Ja(e,t)):Hn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===Ml&&za(u.workerType),u.type===wl&&OO(c),u.type===Ll&&IO(c,u)}),ft.push(c),yO(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Ja,"startWorker");var RO=[Za.THREAD_TYPES.HTTP];async function za(e=null,t=2,r=!0){if(bl){t<1&&(t=t*ft.length);let s=[];for(let n of ft.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Za.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=RO.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),yl*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else it.postMessage({type:Ml,workerType:e})}a(za,"restartWorkers");function gO(e){return za(e,1/0,!1)}a(gO,"shutdownWorkers");var Pl=[];function NO(e){Pl.push(e)}a(NO,"onMessageFromWorkers");function pO(e){for(let t of Bt)try{t.postMessage(e)}catch(r){Hn.error("Unable to send message to worker",r)}}a(pO,"broadcast");function OO(e){e.postMessage({type:Ul,workers:Hl()})}a(OO,"sendThreadInfo");function Hl(){let e=Date.now();return ft.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(Hl,"getChildWorkerInfo");function IO(e,t){e.resources=t,e.resources.updated=Date.now()}a(IO,"recordResourceReport");var Xa;function bO(e){Xa=e}a(bO,"setMonitorListener");var CO=1e3,Il=!1;function yO(){Il||(Il=!0,setInterval(()=>{for(let e of ft){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Xa&&Xa()},CO).unref())}a(yO,"startMonitoring");var MO=1e3;if(it){Bn(it);for(let e of uO.addPorts)Bn(e);setInterval(()=>{let e=process.memoryUsage();it.postMessage({type:Ll,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},MO).unref(),Qa=a(()=>new Promise((e,t)=>{it.on("message",r),it.postMessage({type:wl});function r(s){s.type===Ul&&(it.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Qa=Hl;ja.exports.getThreadInfo=Qa;function Bn(e,t){Bt.push(e),e.on("message",r=>{if(r.type===Dl)Bn(r.port);else for(let s of Pl)s(r)}).on("close",()=>{Bt.splice(Bt.indexOf(e),1)}).on("exit",()=>{Bt.splice(Bt.indexOf(e),1)}),t||e.unref()}a(Bn,"addPort");bl||it.on("message",async e=>{let{type:t}=e;t===SO.ITC_EVENT_TYPES.SHUTDOWN&&(it.unref(),setTimeout(()=>{Hn.warn("Thread did not voluntarily terminate",cO),process.exit(0)},yl).unref())})});var Gl=T((eB,vl)=>{"use strict";var eo=B(),wO=N(),Bl=be().LMDB_ERRORS_ENUM;vl.exports=LO;async function LO(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 eo.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==Bl.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await eo.closeEnvironment(global.lmdb_map[s]),await eo.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Bl.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){wO.error(t)}}a(LO,"cleanLMDBMap")});var Zl=T((sB,Xl)=>{"use strict";var to=require("recursive-iterator"),UO=require("alasql"),ro=require("clone"),ql=p(),{handleHDBError:Fl,hdb_errors:DO}=V(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:Vl}=DO,PO=["DISTINCT_ARRAY"],kl=Symbol("validateTables"),so=Symbol("validateTable"),rB=Symbol("getAllColumns"),Yl=Symbol("validateAllColumns"),Gn=Symbol("findColumn"),$l=Symbol("validateOrderBy"),es=Symbol("validateSegment"),no=Symbol("validateColumn"),Kl=Symbol("setColumnsForTable"),Wl=Symbol("checkColumnsForAsterisk"),Ql=Symbol("validateGroupBy"),Jl=Symbol("hasColumns"),qn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[kl](),this[Wl](),this[Yl]()}[kl](){if(this[Jl]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[so](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[so](t.table)})}}[Jl](){let t=!1,r=new to(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[so](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Fl(new Error,xl.SCHEMA_NOT_FOUND(t.databaseid),Vl.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Fl(new Error,xl.TABLE_NOT_FOUND(t.databaseid,t.tableid),Vl.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=ro(s);n.table=ro(t),this.attributes.push(n)})}[Gn](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)}[Wl](){let t=new to(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Kl](r.tableid)}[Kl](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new UO.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Yl](){this[es](this.statement.columns,!1),this[es](this.statement.joins,!1),this[es](this.statement.where,!1),this[Ql](this.statement.group,!1),this[es](this.statement.order,!0)}[es](t,r){if(!t)return;let s=new to(t),n=[];for(let{node:i,path:o}of s)!ql.isEmpty(i)&&!ql.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$l](i):n.push(this[no](i)));return n}[Ql](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&PO.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=ro(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Gn](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[Gn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[$l](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[no](t)}[no](t){let r=this[Gn](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(qn,"SelectValidator");Xl.exports=qn});var tE=T((iB,eE)=>{"use strict";var zl=require("lodash"),ts=require("mathjs"),HO=require("jsonata"),jl=p();eE.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?zl.uniqWith(e,zl.isEqual):e,searchJSON:BO,mad:rs.bind(null,ts.mad),mean:rs.bind(null,ts.mean),mode:rs.bind(null,ts.mode),prod:rs.bind(null,ts.prod),median:rs.bind(null,ts.median)};function rs(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(rs,"aggregateFunction");function BO(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(jl.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),jl.isEmpty(this.__ala__.res[r])){let s=HO(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(BO,"searchJSON")});var sE=T((oB,rE)=>{"use strict";var K=require("moment"),io="YYYY-MM-DDTHH:mm:ss.SSSZZ";K.suppressDeprecationWarnings=!0;rE.exports={current_date:()=>K().utc().format("YYYY-MM-DD"),current_time:()=>K().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return K(e).utc().format("YYYY");case"month":return K(e).utc().format("MM");case"day":return K(e).utc().format("DD");case"hour":return K(e).utc().format("HH");case"minute":return K(e).utc().format("mm");case"second":return K(e).utc().format("ss");case"millisecond":return K(e).utc().format("SSS");default:break}},date:e=>K(e).utc().format(io),date_format:(e,t)=>K(e).utc().format(t),date_add:(e,t,r)=>K(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>K(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=K(e).utc(),n=K(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>K().utc().valueOf(),get_server_time:()=>K().format(io),offset_utc:(e,t)=>K(e).utc().utcOffset(t).format(io)}});var oE=T((_B,aE)=>{"use strict";var vO=require("@turf/area"),GO=require("@turf/length"),qO=require("@turf/circle"),FO=require("@turf/difference"),xO=require("@turf/distance"),VO=require("@turf/boolean-contains"),kO=require("@turf/boolean-equal"),YO=require("@turf/boolean-disjoint"),$O=require("@turf/helpers"),nE=f(),w=p();aE.exports={geoArea:KO,geoLength:WO,geoCircle:QO,geoDifference:JO,geoDistance:iE,geoNear:XO,geoContains:ZO,geoEqual:zO,geoCrosses:jO,geoConvert:eI};var ao="geo1 is required",oo="geo2 is required";function KO(e){if(w.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),vO.default(e)}a(KO,"geoArea");function WO(e,t){if(w.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),GO.default(e,{units:t||"kilometers"})}a(WO,"geoLength");function QO(e,t,r){if(w.isEmpty(e))throw new Error("point is required");if(w.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),qO.default(e,t,{units:r||"kilometers"})}a(QO,"geoCircle");function JO(e,t){if(w.isEmpty(e))throw new Error("poly1 is required");if(w.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),FO(e,t)}a(JO,"geoDifference");function iE(e,t,r){if(w.isEmpty(e))throw new Error("point1 is required");if(w.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),xO.default(e,t,{units:r||"kilometers"})}a(iE,"geoDistance");function XO(e,t,r,s){if(w.isEmpty(e))throw new Error("point1 is required");if(w.isEmpty(t))throw new Error("point2 is required");if(w.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return iE(e,t,s)<=r}a(XO,"geoNear");function ZO(e,t){if(w.isEmpty(e))throw new Error(ao);if(w.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),VO.default(e,t)}a(ZO,"geoContains");function zO(e,t){if(w.isEmpty(e))throw new Error(ao);if(w.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),kO.default(e,t)}a(zO,"geoEqual");function jO(e,t){if(w.isEmpty(e))throw new Error(ao);if(w.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),!YO.default(e,t)}a(jO,"geoCrosses");function eI(e,t,r){if(w.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(w.isEmpty(t))throw new Error("geo_type is required");if(w.isEmpty(nE.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(nE.GEO_CONVERSION_ENUM).join(",")}`);return $O[t](e,r)}a(eI,"geoConvert")});var cE=T((uB,_E)=>{var vt=tE(),ge=sE(),Ke=oE();_E.exports=e=>{e.aggr.mad=e.aggr.MAD=vt.mad,e.aggr.mean=e.aggr.MEAN=vt.mean,e.aggr.mode=e.aggr.MODE=vt.mode,e.aggr.prod=e.aggr.PROD=vt.prod,e.aggr.median=e.aggr.MEDIAN=vt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=vt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=vt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ge.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ge.current_time,e.fn.extract=e.fn.EXTRACT=ge.extract,e.fn.date=e.fn.DATE=ge.date,e.fn.date_format=e.fn.DATE_FORMAT=ge.date_format,e.fn.date_add=e.fn.DATE_ADD=ge.date_add,e.fn.date_sub=e.fn.DATE_SUB=ge.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ge.date_diff,e.fn.now=e.fn.NOW=ge.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ge.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ge.get_server_time,e.fn.getdate=e.fn.GETDATE=ge.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ge.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ke.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ke.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ke.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ke.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ke.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ke.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ke.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ke.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ke.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ke.geoNear}});var EE=T((lB,lE)=>{"use strict";var ss=require("lodash"),j=require("alasql");j.options.cache=!1;var tI=cE(),uE=require("clone"),Fn=require("recursive-iterator"),I=N(),y=p(),cr=mt(),rI=f(),{hdb_errors:sI}=V(),nI="IS NULL",qe="There was a problem performing this search. Please check the logs and try again.";tI(j);var xn=class{constructor(t,r){if(y.isEmpty(t))throw I.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(qe)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(qe)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(qe)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(qe)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(qe)}}_getColumns(){let t=new Fn(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(uE(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ss.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(y.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Fn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new j.yy.LogicValue({value:s}):r.right instanceof j.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new j.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new j.yy.LogicValue({value:i}):s instanceof j.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new j.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Fn(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!y.isEmpty(rI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&ss.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await j.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.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(uE(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(y.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(nI)>-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=ss.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await cr.getDataByHash(_);for(let E of _.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(qe)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let h=await cr.getDataByValue(E);for(let[d,A]of h)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]),this._setMergedHashAttribute(i,y.autoCast(d)))}))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(qe)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,h=l.length;E<h;E++){let d=l[E];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await cr.getDataByValue(_,d.operation);if(c)for(let[R]of A)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(R)));else for(let[R,M]of A)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,M[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,M[n.attribute]),this._setMergedHashAttribute(i,y.autoCast(R)))}}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(l),new Error(qe)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await cr.getDataByValue(_);if(c)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(E)));else for(let[E,h]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,y.autoCast(E)))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(l),new Error(qe)}}}_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 j.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 j.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new j.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 j.yy.FuncValue:new j.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,R=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${R}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${R}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let 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 h=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,A=this._convertColumnsToIndexes(d,n);h=await j.promise(A,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let d=0,A=h.length;d<A;d++){let R=h[d];o.forEach(M=>{R[M.key]!==null&&R[M.key]!==void 0&&M.keys.add(R[M.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),R=ss.difference(A,[...d.keys].map(M=>M.toString()));for(let M=0,W=R.length;M<W;M++){let x=R[M];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Fn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=ss.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(qe)}}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 _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await cr.getDataByHash(_),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let h=o[l],d=c.get(h);for(let A=0;A<u;A++){let R=n.columns[A],M=d[R]===void 0?null:d[R];this.data[s].__merged_data[h].push(M)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await j.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.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 I.error(sI.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await cr.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(qe)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(xn,"SQLSearch");lE.exports=xn});var Vn=T((dB,hE)=>{"use strict";var iI=Zl();hE.exports={searchByConditions:cI,searchByHash:uI,searchByValue:lI,search:EI};var _o=mt(),dE=require("util"),aI=dE.callbackify(_o.searchByHash),oI=dE.callbackify(_o.searchByValue),_I=EE();async function cI(e){return _o.searchByConditions(e)}a(cI,"searchByConditions");function uI(e,t){try{aI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(uI,"searchByHash");function lI(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),oI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(lI,"searchByValue");function EI(e,t){try{let r=new iI(e);r.validate(),new _I(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(EI,"search")});var uo=T((SB,TE)=>{"use strict";var dI=f(),TB=Dt();function co(e,t){let r=Object.create(null);if(t.length===1&&dI.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(co,"parseRow");function hI(e,t,r,s){let n=co(r,e);s.push(n)}a(hI,"searchAll");function TI(e,t,r,s){let n=co(r,e);s[t]=n}a(TI,"searchAllToMap");function SI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(SI,"iterateDBI");function Gt(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(Gt,"pushResults");function fI(e,t,r,s,n,i){t.toString().endsWith(e)&&Gt(t,r,s,n,i)}a(fI,"endsWith");function mI(e,t,r,s,n,i){t.toString().includes(e)&&Gt(t,r,s,n,i)}a(mI,"contains");function AI(e,t,r,s,n,i){t>e&&Gt(t,r,s,n,i)}a(AI,"greaterThanCompare");function RI(e,t,r,s,n,i){t>=e&&Gt(t,r,s,n,i)}a(RI,"greaterThanEqualCompare");function gI(e,t,r,s,n,i){t<e&&Gt(t,r,s,n,i)}a(gI,"lessThanCompare");function NI(e,t,r,s,n,i){t<=e&&Gt(t,r,s,n,i)}a(NI,"lessThanEqualCompare");TE.exports={parseRow:co,searchAll:hI,searchAllToMap:TI,iterateDBI:SI,endsWith:fI,contains:mI,greaterThanCompare:AI,greaterThanEqualCompare:RI,lessThanCompare:gI,lessThanEqualCompare:NI,pushResults:Gt}});var Ft=T((gB,NE)=>{"use strict";var At=B(),mB=N(),Ne=Dt(),kn=ee(),Y=be().LMDB_ERRORS_ENUM,AB=p(),pI=f(),Yn=uo(),{parseRow:OI}=Yn,RB=require("lmdb"),{OVERFLOW_MARKER:SE,MAX_SEARCH_KEY_LENGTH:II}=kn;function fE(e,t,r,s=!1,n=void 0,i=void 0){return qt(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(fE,"iterateFullIndex");function ns(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return qt(e,t,r,(l,E,h,d)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,E.getRange(x).map(F=>({value:F}))):E.getRange(x)})}a(ns,"iterateRangeBetween");function qt(e,t,r,s){let n=e.database||e,i=At.openDBI(n,r);i[kn.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&At.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(qt,"setupTransaction");function mE(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(SE)){if(!n)if(r)n=At.openDBI(e,r);else{let c=At.listDBIs(e);for(let u=0,l=c.length;u<l&&(n=At.openDBI(e,c[u]),!n[kn.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(mE,"getOverflowCheck");function bI(e,t,r,s=!1,n=void 0,i=void 0){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);return qt(e,t,t,(o,_,c)=>($n(r),r=is(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>OI(u.value,r))))}a(bI,"searchAll");function CI(e,t,r,s=!1,n=void 0,i=void 0){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);$n(r),r=is(e.database||e,r);let o=new Map;for(let{key:_,value:c}of fE(e,t,t,s,n,i))o.set(_,Yn.parseRow(c,r));return o}a(CI,"searchAllToMap");function yI(e,t,r=!1,s=void 0,n=void 0){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=fE(e,void 0,t,r,s,n),_=o.transaction,c=mE(_.database,_,void 0,t);for(let{key:u,value:l}of o){let E=c(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(yI,"iterateDBI");function MI(e,t){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);return At.statDBI(e,t).entryCount}a(MI,"countAll");function wI(e,t,r,s,n=!1,i=void 0,o=void 0){return Rt(e,r,s),qt(e,t,r,(_,c,u,l)=>(s=Ne.convertKeyValueToWrite(s),l===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(wI,"equals");function LI(e,t,r){return Rt(e,t,r),At.openDBI(e,t).getValuesCount(r)}a(LI,"count");function UI(e,t,r,s,n=!1,i=void 0,o=void 0){return Rt(e,r,s),qt(e,null,r,(_,c)=>{s=Ne.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let h of c.getKeys({transaction:_,start:s}))if(!h.startsWith(s)){E=h;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=c.getRange({transaction:_,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(h=>{let{key:d}=h;if(d!==E){if(d.toString().startsWith(s))return h;if(u===!0)return l.DONE}}),l.filter(h=>h)}else return l=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(UI,"startsWith");function DI(e,t,r,s,n=!1,i=void 0,o=void 0){return AE(e,t,r,s,n,i,o,!0)}a(DI,"endsWith");function AE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return Rt(e,r,s),qt(e,null,r,(c,u,l,E)=>{let h=mE(l,c,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let A=d.toString();return A.endsWith(SE)?u.getValues(d,{transaction:c}).map(R=>{let M=h(d,R);if(_?M.endsWith(s):M.includes(s))return{key:M,value:R}}).filter(R=>R):(_?A.endsWith(s):A.includes(s))?u[kn.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(R=>({key:d,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(AE,"contains");function PI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ns(e,t,r,s,c,n,i,o,!0,!1)}a(PI,"greaterThan");function HI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ns(e,t,r,s,c,n,i,o,!1,!1)}a(HI,"greaterThanEqual");function BI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ns(e,t,r,c,s,n,i,o,!1,!0)}a(BI,"lessThan");function vI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ns(e,t,r,c,s,n,i,o,!1,!1)}a(vI,"lessThanEqual");function GI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Ne.validateEnv(e),r===void 0)throw new Error(Y.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Y.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Y.END_VALUE_REQUIRED);if(s=Ne.convertKeyValueToWrite(s),n=Ne.convertKeyValueToWrite(n),s>n)throw new Error(Y.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ns(e,t,r,s,n,i,o,_)}a(GI,"between");function qI(e,t,r,s){Ne.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);if($n(r),r=is(n,r),s===void 0)throw new Error(Y.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=Yn.parseRow(_,r)),o}a(qI,"searchByHash");function FI(e,t,r){Ne.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Y.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(FI,"checkHashExists");function xI(e,t,r,s,n=[]){return gE(e,t,r,s,n),RE(e,t,r,s,n).map(i=>i[1])}a(xI,"batchSearchByHash");function VI(e,t,r,s,n=[]){gE(e,t,r,s,n);let i=new Map;for(let[o,_]of RE(e,t,r,s,n))i.set(o,_);return i}a(VI,"batchSearchByHashToMap");function RE(e,t,r,s,n=[]){return qt(e,t,t,(i,o,_)=>{r=is(_,r);let c=r.length<3;return s.map(u=>{let l=_.dbis[t].get(u,{transaction:i,lazy:c});if(l)return[u,Yn.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(RE,"batchHashSearch");function gE(e,t,r,s,n){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);if($n(r),s==null)throw new Error(Y.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Y.IDS_MUST_BE_ITERABLE)}a(gE,"initializeBatchSearchByHash");function $n(e){if(!Array.isArray(e))throw e===void 0?new Error(Y.FETCH_ATTRIBUTES_REQUIRED):new Error(Y.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a($n,"validateFetchAttributes");function Rt(e,t,r){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Y.SEARCH_VALUE_REQUIRED);if(r?.length>II)throw new Error(Y.SEARCH_VALUE_TOO_LARGE)}a(Rt,"validateComparisonFunctions");function is(e,t){return t.length===1&&pI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=At.listDBIs(e)),t}a(is,"setGetWholeRowAttributes");NE.exports={searchAll:bI,searchAllToMap:CI,count:LI,countAll:MI,equals:wI,startsWith:UI,endsWith:DI,contains:AE,searchByHash:qI,setGetWholeRowAttributes:is,batchSearchByHash:xI,batchSearchByHashToMap:VI,checkHashExists:FI,iterateDBI:yI,greaterThan:PI,greaterThanEqual:HI,lessThan:BI,lessThanEqual:vI,between:GI}});var lr=T((pB,wE)=>{"use strict";var OE=Vn(),gt=N(),IE=Nn(),kI=require("lodash"),YI=rn(),bE=p(),{promisify:CE}=require("util"),G=f(),{handleHDBError:Kn,hdb_errors:$I}=V(),{HDB_ERROR_MSGS:Wn,HTTP_STATUS_CODES:yE}=$I,KI=$();KI.initSync();var pE=B(),WI=Ft(),{getSchemaPath:QI}=q(),as=CE(OE.searchByValue),JI=CE(OE.searchByHash),ur="name",ME="hash_attribute",lo="schema",XI="schema_table",ZI="attribute";wE.exports={describeAll:zI,describeTable:Qn,describeSchema:eb};async function zI(e){try{let t=bE.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:ur,search_value:G.WILDCARD_SEARCH_VALUE,get_attributes:[ur]},i=await as(n),o={},_={};for(let h of i)o[h.name]=!0,!t&&!s&&(_[h.name]=r[h.name].describe);let c={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:G.ID_ATTRIBUTE_STRING,search_value:G.WILDCARD_SEARCH_VALUE,get_attributes:[ME,G.ID_ATTRIBUTE_STRING,ur,lo]},u=await as(c),l=[];for(let h of u)try{let d;if(t||s)d=await Qn({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let A=r[h.schema].tables[h.name].attribute_permissions;d=await Qn({schema:h.schema,table:h.name},A)}d&&l.push(d)}catch(d){gt.error(d)}let E={};for(let h in l)t||s?(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],o[l[h].schema]&&delete o[l[h].schema]):_[l[h].schema]&&(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],o[l[h].schema]&&delete o[l[h].schema]);for(let h in o)t||s?E[h]={}:_[h]&&(E[h]={});return E}catch(t){return gt.error("Got an error in describeAll"),gt.error(t),Kn(new Error,Wn.DESCRIBE_ALL_ERR)}}a(zI,"describeAll");async function Qn(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=IE.describe_table(e);if(o)throw o;if(r===G.SYSTEM_SCHEMA_NAME)return global.hdb_schema[G.SYSTEM_SCHEMA_NAME][s];let _={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ur,search_value:s,hash_values:[],get_attributes:[G.WILDCARD_SEARCH_VALUE]},c=Array.from(await as(_));if(!c||c.length===0)throw Kn(new Error,Wn.TABLE_NOT_FOUND(e.schema,e.table),yE.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Kn(new Error,Wn.INVALID_TABLE_ERR(i));let l={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:XI,search_value:r+"."+s,get_attributes:[ZI]},E=Array.from(await as(l));E=kI.uniqBy(E,h=>h.attribute),n&&n.length>0&&(E=jI(n)),i.attributes=E,i.clustering_stream_name=YI.createNatsTableStreamName(u.schema,u.name);try{let h=QI(i.schema,i.name),d=await pE.openEnvironment(h,i.name),A=pE.statDBI(d,i.hash_attribute);i.record_count=A.entryCount;for(let{key:R}of WI.lessThan(d,i.hash_attribute,G.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(h){gt.warn(`unable to stat table dbi due to ${h}`)}}catch(l){gt.error(`There was an error getting attributes for table '${u.name}'`),gt.error(l)}return i}a(Qn,"descTable");function jI(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(jI,"getAttrsByPerms");async function eb(e){let t=IE.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:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:lo,search_value:s,hash_values:[],get_attributes:[ME,G.ID_ATTRIBUTE_STRING,ur,lo]},i=Array.from(await as(n));if(i&&i.length<1){let o={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[ur]},_=Array.from(await JI(o));if(_&&_.length<1)throw Kn(new Error,Wn.SCHEMA_NOT_FOUND(e.schema),yE.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),bE.isEmpty(c)||c.describe){let u=await Qn({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){gt.error(`Error describing schema table '${e.schema}.${_}'`),gt.error(c)}})),o}}a(eb,"describeSchema")});var os=T((IB,HE)=>{var Er=Ht(),{callbackify:DE,promisify:tb}=require("util");HE.exports={setSchemaDataToGlobal:LE,getTableSchema:nb,getSystemSchema:ab,setSchemaDataToGlobalAsync:tb(LE)};var PE=lr(),rb=DE(PE.describeAll),sb=DE(PE.describeTable);function LE(e){rb(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Er),global.hdb_schema=r,e(null,null)})}a(LE,"setSchemaDataToGlobal");function UE(e,t){return e==="system"?Er[t]:global.hdb_schema[e][t]}a(UE,"returnSchema");function nb(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?ib(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,UE(e,t))}):r(null,UE(e,t))}a(nb,"getTableSchema");function ib(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Er:global.hdb_schema={system:Er},r();return}sb(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Er}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(ib,"setTableDataToGlobal");function ab(){return Er}a(ab,"getSystemSchema")});var _s=T((CB,GE)=>{"use strict";var Xn=Fa(),Le=p(),ob=require("util"),Zn=mt(),_b=os(),Eo=N(),{handleHDBError:Nt,hdb_errors:cb}=V(),{HTTP_STATUS_CODES:xt}=cb,ub=ob.promisify(_b.getTableSchema),lb="updated",BE="inserted",vE="upserted";GE.exports={insert:db,update:hb,upsert:Tb,validation:Eb,flush:Sb};async function Eb(e){if(Le.isEmpty(e))throw new Error("invalid update parameters defined.");if(Le.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Le.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ub(e.schema,e.table),r=Xn(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Le.isEmptyOrZeroLength(_[s]))throw Eo.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Le.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Eo.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Le.isEmpty(_[s])&&_[s]!==""&&n.has(Le.autoCast(_[s]))&&(_.skip=!0),n.add(Le.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Eb,"validation");async function db(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xn(e);if(t)throw Nt(new Error,t.message,xt.BAD_REQUEST);let r=Le.checkSchemaTableExist(e.schema,e.table);if(r)throw Nt(new Error,r,xt.BAD_REQUEST);let s=await Zn.createRecords(e);return Jn(BE,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(db,"insertData");async function hb(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xn(e);if(t)throw Nt(new Error,t.message,xt.BAD_REQUEST);let r=Le.checkSchemaTableExist(e.schema,e.table);if(r)throw Nt(new Error,r,xt.BAD_REQUEST);let s=await Zn.updateRecords(e);return Le.isEmpty(s.existing_rows)?Jn(lb,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Jn(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(hb,"updateData");async function Tb(e){if(e.operation!=="upsert")throw Nt(new Error,"invalid operation, must be upsert",xt.INTERNAL_SERVER_ERROR);let t=Xn(e);if(t)throw Nt(new Error,t.message,xt.BAD_REQUEST);let r=Le.checkSchemaTableExist(e.schema,e.table);if(r)throw Nt(new Error,r,xt.BAD_REQUEST);try{let s=await Zn.upsertRecords(e);return Jn(vE,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Nt(s,null,null,Eo.ERR,n)}}a(Tb,"upsertData");function Jn(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===BE?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===vE?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Jn,"returnObject");function Sb(e){return Zn.flush(e.schema,e.table)}a(Sb,"flush")});var VE=T((MB,xE)=>{var fb=Pe(),ho=require("joi"),{hdb_schema_table:qE}=ar(),FE={schema:qE,table:qE},mb={date:ho.date().iso().required()},Ab={timestamp:ho.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};xE.exports=function(e,t){let r=t==="timestamp"?{...FE,...Ab}:{...FE,...mb},s=ho.object(r);return fb.validateBySchema(e,s)}});var KE=T((wB,$E)=>{var Rb=Pe(),kE=require("joi"),{hdb_schema_table:YE}=ar(),gb=kE.object({schema:YE,table:YE,hash_values:kE.array().required()});$E.exports=function(e){return Rb.validateBySchema(e,gb)}});var QE=T((LB,WE)=>{"use strict";var zn=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(zn,"InsertObject");var jn=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(jn,"NoSQLSeachObject");var ei=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(ei,"DeleteResponseObject");WE.exports={InsertObject:zn,NoSQLSeachObject:jn,DeleteResponseObject:ei}});var fo=T((DB,jE)=>{"use strict";var XE=VE(),Nb=KE(),ti=p(),JE=require("moment"),ZE=N(),{promisify:pb,callbackify:Ob}=require("util"),Vt=f(),Ib=os(),To=pb(Ib.getTableSchema),So=mt(),{DeleteResponseObject:bb}=QE(),{handleHDBError:pt,hdb_errors:Cb}=V(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:Ot}=Cb,yb="records successfully deleted",Mb=Ob(zE);jE.exports={delete:Mb,deleteRecord:zE,deleteFilesBefore:wb,deleteAuditLogsBefore:Lb};async function wb(e){let t=XE(e,"date");if(t)throw pt(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);if(!JE(e.date,JE.ISO_8601).isValid())throw pt(new Error,ri.INVALID_DATE,Ot.BAD_REQUEST,Vt.LOG_LEVELS.ERROR,ri.INVALID_DATE,!0);let s=ti.checkSchemaTableExist(e.schema,e.table);if(s)throw pt(new Error,s,Ot.NOT_FOUND,Vt.LOG_LEVELS.ERROR,s,!0);let n=await So.deleteRecordsBefore(e);if(await To(e.schema,e.table),ZE.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(wb,"deleteFilesBefore");async function Lb(e){let t=XE(e,"timestamp");if(t)throw pt(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw pt(new Error,ri.INVALID_VALUE("Timestamp"),Ot.BAD_REQUEST,Vt.LOG_LEVELS.ERROR,ri.INVALID_VALUE("Timestamp"),!0);let r=ti.checkSchemaTableExist(e.schema,e.table);if(r)throw pt(new Error,r,Ot.NOT_FOUND,Vt.LOG_LEVELS.ERROR,r,!0);let s=await So.deleteAuditLogsBefore(e);return await To(e.schema,e.table),ZE.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Lb,"deleteAuditLogsBefore");async function zE(e){let t=Nb(e);if(t)throw pt(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r=ti.checkSchemaTableExist(e.schema,e.table);if(r)throw pt(new Error,r,Ot.NOT_FOUND,Vt.LOG_LEVELS.ERROR,r,!0);try{await To(e.schema,e.table);let s=await So.deleteRecords(e);return ti.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${yb}`),s}catch(s){if(s.message===Vt.SEARCH_NOT_FOUND_MESSAGE){let n=new bb;return n.message=Vt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(zE,"deleteRecord")});var td=T((HB,ed)=>{var mo=Pe(),ne={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 Ub(e){return ne.password.presence=!0,ne.username.presence=!0,ne.role.presence=!0,ne.active.presence=!0,mo.validateObject(e,ne)}a(Ub,"addUserValidation");function Db(e){return ne.password.presence=!1,ne.username.presence=!0,ne.role.presence=!1,ne.active.presence=!1,mo.validateObject(e,ne)}a(Db,"alterUserValidation");function Pb(e){return ne.password.presence=!1,ne.username.presence=!0,ne.role.presence=!1,ne.active.presence=!1,mo.validateObject(e,ne)}a(Pb,"dropUserValidation");ed.exports={addUserValidation:Ub,alterUserValidation:Db,dropUserValidation:Pb}});var us=T((GB,Sd)=>{"use strict";var ad="username is required",od="nothing to update, must supply active, role or password to update",_d="password cannot be an empty string",cd="If role is specified, it cannot be empty.",ud="active must be true or false";Sd.exports={addUser:Vb,alterUser:kb,dropUser:$b,userInfo:Kb,listUsers:ni,listUsersExternal:Wb,setUsersToGlobal:cs,findAndValidateUser:Xb,getClusterUser:Zb,USERNAME_REQUIRED:ad,ALTERUSER_NOTHING_TO_UPDATE:od,EMPTY_PASSWORD:_d,EMPTY_ROLE:cd,ACTIVE_BOOLEAN:ud};var ld=_s(),Hb=fo(),Ro=Dn(),Ed=td(),dd=Vn(),go=ls(),pe=p(),hd=require("validate.js"),b=N(),{promisify:No}=require("util"),po=rn(),rd=f(),sd=Ut(),Bb=js(),vB=$(),vb=Wa(),Gb=Ht(),{handleHDBError:We,hdb_errors:qb}=V(),{HTTP_STATUS_CODES:Qe,AUTHENTICATION_ERROR_MSGS:Ao,HDB_ERROR_MSGS:dr}=qb,{UserEventMsg:Oo}=kt(),nd=require("lodash"),Td={username:!0,active:!0,role:!0,password:!0},id=new Map,si=No(dd.searchByValue),Fb=No(dd.searchByHash),xb=No(Hb.delete);async function Vb(e){let t=hd.cleanAttributes(e,Td),r=Ed.addUserValidation(t);if(r)throw We(new Error,r.message,Qe.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 si(s),n=n&&Array.from(n)}catch(c){throw b.error("There was an error searching for a role in add user"),b.error(c),c}if(!n||n.length<1)throw We(new Error,dr.ROLE_NAME_NOT_FOUND(t.role),Qe.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw We(new Error,dr.DUP_ROLES_FOUND(t.role),Qe.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=po.encrypt(t.password)),t.password=Ro.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await ld.insert(i)}catch(c){throw b.error("There was an error searching for a user."),b.error(c),c}b.debug(o);try{await cs()}catch(c){throw b.error("Got an error setting users to global"),b.error(c),c}if(o.skipped_hashes.length===1)throw We(new Error,dr.USER_ALREADY_EXISTS(t.username),Qe.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],go.signalUserChange(new Oo(process.pid)),`${_.username} successfully added`}a(Vb,"addUser");async function kb(e){let t=hd.cleanAttributes(e,Td);if(pe.isEmptyOrZeroLength(t.username))throw new Error(ad);if(pe.isEmptyOrZeroLength(t.password)&&pe.isEmptyOrZeroLength(t.role)&&pe.isEmptyOrZeroLength(t.active))throw new Error(od);if(!pe.isEmpty(t.password)&&pe.isEmptyOrZeroLength(t.password.trim()))throw new Error(_d);if(!pe.isEmpty(t.active)&&!pe.isBoolean(t.active))throw new Error(ud);let r=Yb(t.username);if(!pe.isEmpty(t.password)&&!pe.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=po.encrypt(t.password)),t.password=Ro.hash(t.password)),t.role==="")throw new Error(cd);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await si(i)||[])}catch(_){throw b.error("Got an error searching for a role."),b.error(_),_}if(!o||o.length===0){let _=dr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw b.error(_),We(new Error,_,Qe.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=dr.ALTER_USER_DUP_ROLES(t.role);throw b.error(_),We(new Error,_,Qe.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await ld.update(s)}catch(i){throw b.error("Error during update."),b.error(i),i}try{await cs()}catch(i){throw b.error("Got an error setting users to global"),b.error(i),i}return go.signalUserChange(new Oo(process.pid)),n}a(kb,"alterUser");function Yb(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Yb,"isClusterUser");async function $b(e){try{let t=Ed.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(pe.isEmpty(global.hdb_users.get(e.username)))throw We(new Error,dr.USER_NOT_EXIST(e.username),Qe.NOT_FOUND,void 0,void 0,!0);let s;try{s=await xb(r)}catch(n){throw b.error("Got an error deleting a user."),b.error(n),n}b.debug(s);try{await cs()}catch(n){throw b.error("Got an error setting users to global."),b.error(n),n}return go.signalUserChange(new Oo(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a($b,"dropUser");async function Kb(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 Fb(r)}catch(n){throw b.error("Got an error searching for a role."),b.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw b.error(r),r}return t}a(Kb,"userInfo");async function Wb(){let e;try{e=await ni()}catch(t){throw b.error("Got an error listing users."),b.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(Wb,"listUsersExternal");async function ni(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await si(e)}catch(o){throw b.error("Got an error searching for roles."),b.error(o),o}let r={};for(let o of t)r[o.id]=nd.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await si(s)}catch(o){throw b.error("Got an error searching for users."),b.error(o),o}let i=new Map;for(let o of n)o=nd.cloneDeep(o),o.role=r[o.role],Qb(o.role),i.set(o.username,o);return(await vb.getLicense()).enterprise?i:Jb(Array.from(i.values()))}catch(e){throw b.error("got an error listing users"),b.error(e),pe.errorizeMessage(e)}return null}a(ni,"listUsers");function Qb(e){try{if(!e){b.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Gb)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){b.error("Got an error trying to set system permissions."),b.error(t)}}a(Qb,"appendSystemTablesToRole");function Jb(e){try{if(b.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1)?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(n.username,n)):r.set(n.username,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(b.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return b.error("error filtering users."),b.error(t),new Map}}a(Jb,"nonEnterpriseFilter");async function cs(){try{let e=await ni();global.hdb_users=e}catch(e){throw b.error(e),e}}a(cs,"setUsersToGlobal");async function Xb(e,t,r=!0){global.hdb_users||await cs();let s=global.hdb_users.get(e);if(!s)throw We(new Error,Ao.GENERIC_AUTH_FAIL,Qe.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw We(new Error,Ao.USER_INACTIVE,Qe.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(id.get(t)===s.password)return n;if(Ro.validate(s.password,t))id.set(t,s.password);else throw We(new Error,Ao.GENERIC_AUTH_FAIL,Qe.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Xb,"findAndValidateUser");async function Zb(){let e=await ni(),t=Bb.getConfigFromFile(rd.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!pe.isEmpty(r)&&r?.role?.role===rd.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=po.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sd.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sd.SERVER_SUFFIX.ADMIN,r}a(Zb,"getClusterUser")});var ii=T((FB,Rd)=>{"use strict";var Yt=N(),Oe=f(),zb=Gl(),fd=os(),jb=lr(),eC=us(),{validateEvent:Ad}=kt(),Es=mt(),tC=require("process"),rC={[Oe.ITC_EVENT_TYPES.SCHEMA]:sC,[Oe.ITC_EVENT_TYPES.USER]:iC};async function sC(e){let t=Ad(e);if(t){Yt.error(t);return}Yt.trace("ITC schemaHandler received schema event:",e),await zb(e.message),await nC(e.message)}a(sC,"schemaHandler");async function nC(e){try{if(Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await jb.describeTable({schema:e.schema,table:e.table});break;default:fd.setSchemaDataToGlobal(md);break}else fd.setSchemaDataToGlobal(md)}catch(t){Yt.error(t)}}a(nC,"syncSchemaMetadata");function md(e){e&&Yt.error(e)}a(md,"handleErrorCallback");async function iC(e){try{Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Ad(e);if(t){Yt.error(t);return}Yt.trace(`ITC userHandler ${Oe.HDB_ITC_CLIENT_PREFIX}${tC.pid} received user event:`,e),await eC.setUsersToGlobal()}catch(t){Yt.error(t)}}a(iC,"userHandler");Rd.exports=rC});var kt=T(($B,Nd)=>{"use strict";var VB=N(),Io=p(),aC=f(),{ITC_ERRORS:ds}=be(),{parentPort:kB,threadId:oC,isMainThread:_C,workerData:YB}=require("worker_threads"),{onMessageFromWorkers:cC,broadcast:uC}=vn();Nd.exports={sendItcEvent:lC,validateEvent:gd,SchemaEventMsg:EC,UserEventMsg:dC};var ai;cC(e=>{ai=ai||ii(),gd(e),ai[e.type]&&ai[e.type](e)});function lC(e){!_C&&e.message&&(e.message.originator=oC),uC(e)}a(lC,"sendItcEvent");function gd(e){if(typeof e!="object")return ds.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Io.isEmpty(e.type))return ds.MISSING_TYPE;if(!e.hasOwnProperty("message")||Io.isEmpty(e.message))return ds.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Io.isEmpty(e.message.originator))return ds.MISSING_ORIGIN;if(aC.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ds.INVALID_EVENT(e.type)}a(gd,"validateEvent");function EC(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(EC,"SchemaEventMsg");function dC(e){this.originator=e}a(dC,"UserEventMsg")});var ls=T((QB,bd)=>{"use strict";var pd=f(),WB=p(),oi=N(),Od=El(),hr,{sendItcEvent:Id}=kt();function hC(e){try{oi.trace("signalSchemaChange called with message:",e),hr=hr||ii();let t=new Od(pd.ITC_EVENT_TYPES.SCHEMA,e);hr.schema(t),Id(t)}catch(t){oi.error(t)}}a(hC,"signalSchemaChange");function TC(e){try{oi.trace("signalUserChange called with message:",e),hr=hr||ii();let t=new Od(pd.ITC_EVENT_TYPES.USER,e);hr.user(t),Id(t)}catch(t){oi.error(t)}}a(TC,"signalUserChange");bd.exports={signalSchemaChange:hC,signalUserChange:TC}});var _i=T((XB,yd)=>{"use strict";var Cd=p(),SC=f(),fC=N(),mC=bn(),AC=In(),RC=ls(),{SchemaEventMsg:gC}=kt(),NC="already exists in";yd.exports=pC;async function pC(e,t,r){if(Cd.isEmptyOrZeroLength(r))return r;let s=[];Cd.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 OC(e,t.schema,t.name,i)})),n}a(pC,"lmdbCheckForNewAttributes");async function OC(e,t,r,s){let n=new AC(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await IC(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(NC))fC.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(OC,"createNewAttribute");async function IC(e){let t;return t=await mC(e),RC.signalSchemaChange(new gC(process.pid,SC.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(IC,"createAttribute")});var Tr=T((zB,Md)=>{"use strict";var ci=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(ci,"LMDBTransactionObject");Md.exports=ci});var Ld=T((ev,wd)=>{"use strict";var bC=Tr(),CC=f().OPERATIONS_ENUM,ui=class extends bC{constructor(t,r,s,n,i=void 0){super(CC.INSERT,r,s,n,i),this.records=t}};a(ui,"LMDBInsertTransactionObject");wd.exports=ui});var Dd=T((rv,Ud)=>{"use strict";var yC=Tr(),MC=f().OPERATIONS_ENUM,li=class extends yC{constructor(t,r,s,n,i,o=void 0){super(MC.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(li,"LMDBUpdateTransactionObject");Ud.exports=li});var Hd=T((nv,Pd)=>{"use strict";var wC=Tr(),LC=f().OPERATIONS_ENUM,Ei=class extends wC{constructor(t,r,s,n,i,o=void 0){super(LC.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Ei,"LMDBUpsertTransactionObject");Pd.exports=Ei});var vd=T((av,Bd)=>{"use strict";var UC=Tr(),DC=f().OPERATIONS_ENUM,di=class extends UC{constructor(t,r,s,n,i=void 0){super(DC.DELETE,s,n,t,i),this.original_records=r}};a(di,"LMDBDeleteTransactionObject");Bd.exports=di});var hs=T((cv,xd)=>{"use strict";var _v=require("path"),Gd=B(),PC=Ld(),HC=Dd(),BC=Hd(),vC=vd(),Sr=ee(),qd=p(),{CONFIG_PARAMS:GC}=f(),Fd=$();Fd.initSync();var hi=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:qC}=q();xd.exports=FC;async function FC(e,t){if(Fd.get(GC.LOGGING_AUDITLOG)===!1)return;let r=qC(e.schema,e.table),s=await Gd.openEnvironment(r,e.table,!0),n=xC(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Gd.initializeDBIs(s,Sr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Sr.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),qd.isEmpty(n.user_name)||s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(FC,"writeTransaction");function xC(e,t){let r=qd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===hi.INSERT)return new PC(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hi.UPDATE)return new HC(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hi.UPSERT)return new BC(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hi.DELETE)return new vC(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(xC,"createTransactionObject")});var bo=T((Ev,Vd)=>{"use strict";var VC=Cn(),lv=Mn(),Ts=f(),kC=Ln(),YC=ir().insertRecords,$C=B(),KC=N(),WC=_i(),{getSchemaPath:QC}=q(),JC=hs();Vd.exports=XC;async function XC(e){try{let{schema_table:t,attributes:r}=VC(e);kC(e,r,t.hash_attribute),e.schema!==Ts.SYSTEM_SCHEMA_NAME&&(r.includes(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await WC(e.hdb_auth_header,t,r),n=QC(e.schema,e.table),i=await $C.openEnvironment(n,e.table),o=await YC(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await JC(e,o)}catch(_){KC.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(XC,"lmdbCreateRecords")});var $d=T((hv,Yd)=>{"use strict";var kd=f(),ZC=bo(),zC=Mn(),jC=require("fs-extra"),{getSchemaPath:ey}=q();Yd.exports=ty;async function ty(e){let t=[{name:e.schema,createddate:Date.now()}],r=new zC(kd.SYSTEM_SCHEMA_NAME,kd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await ZC(r),await jC.mkdirp(ey(e.schema))}a(ty,"lmdbCreateSchema")});var Wd=T((Sv,Kd)=>{"use strict";var Ti=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Ti,"DeleteRecordsResponseObject");Kd.exports=Ti});var Mo=T((gv,Xd)=>{"use strict";var Qd=B(),Co=Dt(),yo=be().LMDB_ERRORS_ENUM,ry=ee(),Jd=N(),mv=p(),sy=require("lmdb"),ny=Wd(),iy=f(),{OVERFLOW_MARKER:Av,MAX_SEARCH_KEY_LENGTH:Rv}=ry,ay=iy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function oy(e,t,r,s){if(Co.validateEnv(e),t===void 0)throw new Error(yo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yo.IDS_REQUIRED):new Error(yo.IDS_MUST_BE_ITERABLE);try{let n=Qd.listDBIs(e);Qd.initializeDBIs(e,t,n);let i=new ny,o,_=[],c=[];for(let h=0,d=r.length;h<d;h++)try{o=r[h];let A=e.dbis[t].get(o);if(!A||s&&A[ay]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,sy.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let M=0;M<n.length;M++){let W=n[M];if(!A.hasOwnProperty(W)||W===t)continue;let x=e.dbis[W],F=A[W];if(F!=null)try{let Xe=Co.getIndexedValues(F);if(Xe)for(let Bs=0,M_=Xe.length;Bs<M_;Bs++)x.remove(Xe[Bs],o)}catch{Jd.warn(`cannot delete from attribute: ${W}, ${F}:${o}`)}}});_.push(R),c.push(o),i.original_records.push(A)}catch(A){Jd.warn(A),i.skipped.push(o)}let u=[],l=await Promise.all(_);for(let h=0,d=l.length;h<d;h++)l[h]===!0?i.deleted.push(c[h]):(i.skipped.push(c[h]),u.push(h));let E=0;for(let h=0;h<u.length;h++){let d=u[h];i.original_records.splice(d-E,1),E++}return i.txn_time=Co.getNextMonotonicTime(),i}catch(n){throw n}}a(oy,"deleteRecords");Xd.exports={deleteRecords:oy}});var Ss=T((pv,zd)=>{"use strict";var fr=p(),_y=Mo(),cy=B(),{getSchemaPath:uy}=q(),ly=hs(),Ey=N();zd.exports=dy;async function dy(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(fr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fr.isEmptyOrZeroLength(e.hash_values)&&!fr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];fr.isEmpty(c)||e.hash_values.push(c)}}if(fr.isEmptyOrZeroLength(e.hash_values))return Zd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=uy(e.schema,e.table),i=await cy.openEnvironment(n,e.table),o=await _y.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await ly(e,o)}catch(_){Ey.error(`unable to write transaction due to ${_.message}`)}return Zd(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(dy,"lmdbDeleteRecords");function Zd(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(Zd,"createDeleteResponse")});var fs=T((bv,rh)=>{var jd=require("lodash"),eh=Pe(),D=require("joi"),hy=p(),{hdb_schema_table:Fe,checkValidTable:th}=ar(),{handleHDBError:Ty,hdb_errors:Sy}=V(),{HTTP_STATUS_CODES:fy}=Sy,Iv=D.object({schema:Fe,table:Fe,hash_values:D.array().min(0).items(D.alternatives(D.string(),D.number())).required(),get_attributes:D.array().min(1).items(Fe).required()}),my=D.object({schema:Fe,table:Fe,search_attribute:Fe,search_value:D.any().required(),get_attributes:D.array().min(1).items(Fe).required(),desc:D.bool(),limit:D.number().integer().min(1),offset:D.number().integer().min(0)}),Ay=D.object({schema:Fe,table:Fe,operator:D.string().valid("and","or").default("and").lowercase(),offset:D.number().integer().min(0),limit:D.number().integer().min(1),get_attributes:D.array().min(1).items(Fe).required(),conditions:D.array().min(1).items(D.object({search_attribute:Fe,search_type:D.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:D.when("search_type",{switch:[{is:"equals",then:D.any()},{is:"between",then:D.array().items(D.alternatives([D.string(),D.number()])).length(2)}],otherwise:D.alternatives(D.string(),D.number())}).required()})).required()});rh.exports=function(e,t){let r=null;switch(t){case"value":r=eh.validateBySchema(e,my);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(th("schema",e.schema)),i(th("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=eh.validateBySchema(e,Ay);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=hy.checkGlobalSchemaTable(e.schema,e.table);if(n)return Ty(new Error,n,fy.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=jd.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!jd.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var wo=T((yv,sh)=>{"use strict";var Ry=B(),gy=fs(),{getSchemaPath:Ny}=q();sh.exports=py;function py(e){let t=gy(e,"hashes");if(t)throw t;let r=Ny(e.schema,e.table);return Ry.openEnvironment(r,e.table)}a(py,"initialize")});var Lo=T((wv,nh)=>{"use strict";var Oy=Ft(),Iy=wo();nh.exports=by;async function by(e){let t=await Iy(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Oy.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(by,"lmdbGetDataByHash")});var fi=T((Uv,ih)=>{"use strict";var Si=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Si,"SearchByHashObject");ih.exports=Si});var oh=T((Hv,ah)=>{"use strict";var Pv=fi(),Cy=Ft(),yy=wo();ah.exports=My;async function My(e){let t=await yy(e),r=global.hdb_schema[e.schema][e.table];return Cy.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(My,"lmdbSearchByHash")});var at=T((vv,_h)=>{"use strict";var mi=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=_,this.reverse=c,this.limit=u,this.offset=l}};a(mi,"SearchObject");_h.exports=mi});var Ai=T((qv,hh)=>{"use strict";var ie=Ft(),wy=B(),Ly=p(),g=ee(),$t=f(),Uy=Ht(),ch=be().LMDB_ERRORS_ENUM,{compareKeys:mr}=require("ordered-binary"),{getSchemaPath:Dy}=q(),ot=$t.SEARCH_WILDCARDS;async function Py(e,t,r){let s;e.schema===$t.SYSTEM_SCHEMA_NAME?s=Uy[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dh(e,s.hash_attribute,r,t);return lh(e,n,s.hash_attribute,r)}a(Py,"prepSearch");async function lh(e,t,r,s){let n=Dy(e.schema,e.table),i=await wy.openEnvironment(n,e.table),o=Eh(i,e,t,r),_=o.transaction||i;if([g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,g.SEARCH_TYPES.SEARCH_ALL,g.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(By(e,r)===!1){let l=e.search_attribute;if(l===r)return s?uh(o,()=>!0):o.map(h=>({[r]:h.key}));let E=a(h=>({[r]:h.value,[l]:h.key}),"toObject");return s?uh(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ie.batchSearchByHashToMap(_,r,e.get_attributes,u):ie.batchSearchByHash(_,r,e.get_attributes,u)}a(lh,"executeSearch");function Eh(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case g.SEARCH_TYPES.EQUALS:n=ie.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.CONTAINS:n=ie.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.ENDS_WITH:case g.SEARCH_TYPES._ENDS_WITH:n=ie.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.STARTS_WITH:case g.SEARCH_TYPES._STARTS_WITH:n=ie.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ie.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ie.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case g.SEARCH_TYPES.SEARCH_ALL:return ie.searchAll(e,s,t.get_attributes,o,_,c);case g.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ie.searchAllToMap(e,s,t.get_attributes,o,_,c);case g.SEARCH_TYPES.BETWEEN:n=ie.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case g.SEARCH_TYPES.GREATER_THAN:case g.SEARCH_TYPES._GREATER_THAN:n=ie.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.GREATER_THAN_EQUAL:case g.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ie.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.LESS_THAN:case g.SEARCH_TYPES._LESS_THAN:n=ie.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.LESS_THAN_EQUAL:case g.SEARCH_TYPES._LESS_THAN_EQUAL:n=ie.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(Eh,"searchByType");function Hy(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case g.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case g.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case g.SEARCH_TYPES.ENDS_WITH:case g.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case g.SEARCH_TYPES.STARTS_WITH:case g.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case g.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return mr(i,s[0])>=0&&mr(i,s[1])<=0};case g.SEARCH_TYPES.GREATER_THAN:case g.SEARCH_TYPES._GREATER_THAN:return n=>mr(n[r],s)>0;case g.SEARCH_TYPES.GREATER_THAN_EQUAL:case g.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>mr(n[r],s)>=0;case g.SEARCH_TYPES.LESS_THAN:case g.SEARCH_TYPES._LESS_THAN:return n=>mr(n[r],s)<0;case g.SEARCH_TYPES.LESS_THAN_EQUAL:case g.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>mr(n[r],s)<=0;default:return Object.create(null)}}a(Hy,"filterByType");function uh(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(uh,"createMapFromIterable");function By(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(By,"checkToFetchMore");function dh(e,t,r,s){if(Ly.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),ot.indexOf(n)>-1)return r===!0?g.SEARCH_TYPES.SEARCH_ALL_TO_MAP:g.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ot[0])<0&&n.indexOf(ot[1])<0)return _===!0?r===!0?g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:g.SEARCH_TYPES.EQUALS;if(ot.indexOf(i)>=0&&ot.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),g.SEARCH_TYPES.CONTAINS;if(ot.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),g.SEARCH_TYPES.ENDS_WITH;if(ot.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),g.SEARCH_TYPES.STARTS_WITH;if(n.includes(ot[0])||n.includes(ot[1]))return g.SEARCH_TYPES.EQUALS;throw new Error(ch.UNKNOWN_SEARCH_TYPE)}else switch(s){case $t.VALUE_SEARCH_COMPARATORS.BETWEEN:return g.SEARCH_TYPES.BETWEEN;case $t.VALUE_SEARCH_COMPARATORS.GREATER:return g.SEARCH_TYPES.GREATER_THAN;case $t.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return g.SEARCH_TYPES.GREATER_THAN_EQUAL;case $t.VALUE_SEARCH_COMPARATORS.LESS:return g.SEARCH_TYPES.LESS_THAN;case $t.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return g.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ch.UNKNOWN_SEARCH_TYPE)}}a(dh,"createSearchTypeFromSearchObject");hh.exports={executeSearch:lh,createSearchTypeFromSearchObject:dh,prepSearch:Py,searchByType:Eh,filterByType:Hy}});var Sh=T((Vv,Th)=>{"use strict";var xv=at(),vy=fs(),Gy=p(),qy=f(),Fy=Ai();Th.exports=xy;function xy(e,t){if(!Gy.isEmpty(t)&&qy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vy(e,"value");if(s)throw s;let n=!0;return Fy.prepSearch(e,t,n)}a(xy,"lmdbGetDataByValue")});var Ar=T(($v,fh)=>{"use strict";var Yv=at(),Vy=fs(),ky=p(),Yy=f(),$y=Ai();fh.exports=Ky;async function Ky(e,t){if(!ky.isEmpty(t)&&Yy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Vy(e,"value");if(s)throw s;return $y.prepSearch(e,t,!1)}a(Ky,"lmdbSearchByValue")});var Ah=T((Qv,mh)=>{"use strict";var Wv=ee(),Ri=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Ri,"SearchByConditionsObject");var gi=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(gi,"SearchCondition");var Ni=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ni,"SortAttribute");mh.exports={SearchByConditionsObject:Ri,SearchCondition:gi,SortAttribute:Ni}});var Oh=T((Zv,ph)=>{"use strict";var Xv=Ah().SearchByConditionsObject,Wy=at(),Qy=fs(),Uo=Ft(),pi=ee(),Nh=Ai(),Jy=uo(),Xy=require("lodash"),{getSchemaPath:Zy}=q(),Rh=B(),{handleHDBError:zy,hdb_errors:jy}=V(),{HTTP_STATUS_CODES:eM}=jy,tM=1e8;ph.exports=rM;async function rM(e){let t=Qy(e,"conditions");if(t)throw zy(t,t.message,eM.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=Zy(e.schema,e.table),s=await Rh.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Rh.openDBI(s,u.search_attribute);let i=Xy.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===pi.SEARCH_TYPES.EQUALS?u.estimated_count=Uo.count(s,u.search_attribute,u.search_value):l===pi.SEARCH_TYPES.CONTAINS||l===pi.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=tM}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await gh(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(Nh.filterByType),E=l.length,h=Uo.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),E>0&&(c=c.filter(d=>{for(let A=0;A<E;A++)if(!l[A](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>Jy.parseRow(d,h))}else{for(let E=1;E<i.length;E++){let h=i[E],d=await gh(o,e,h,n.hash_attribute);_=_.concat(d)}let u=new Set,l=e.offset||0;_=_.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),c=Uo.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(rM,"lmdbSearchByConditions");async function gh(e,t,r,s){let n=new Wy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===pi.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Nh.searchByType(e,n,i,s).map(o=>o.value)}a(gh,"executeConditionSearch")});var ms=T((jv,Ih)=>{"use strict";var sM=f().OPERATIONS_ENUM,Oi=class{constructor(t,r,s,n=void 0){this.operation=sM.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Oi,"DeleteObject");Ih.exports=Oi});var Do=T((tG,Dh)=>{"use strict";var Mh=at(),wh=ms(),Lh=Ar(),Uh=Ss(),le=f(),bh=p(),Ch=B(),{getTransactionAuditStorePath:nM,getSchemaPath:iM}=q(),yh=N();Dh.exports=aM;async function aM(e){try{if(bh.isEmpty(global.hdb_schema[e.schema])||bh.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await oM(e),await _M(e);let t=iM(e.schema,e.table);try{await Ch.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")yh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=nM(e.schema,e.table);await Ch.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")yh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(aM,"lmdbDropTable");async function oM(e){let t=new Mh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Lh(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 wh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Uh(n)}a(oM,"deleteAttributesFromSystem");async function _M(e){let t=new Mh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Lh(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 wh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Uh(n)}catch(i){throw i}}a(_M,"dropTableFromSystem")});var Hh=T((sG,Ph)=>{"use strict";var cM=require("fs-extra"),uM=at(),lM=fi(),EM=ms(),dM=Do(),hM=Ss(),TM=Lo(),SM=Ar(),_t=f(),{getSchemaPath:fM}=q(),{handleHDBError:mM,hdb_errors:AM}=V(),{HDB_ERROR_MSGS:RM,HTTP_STATUS_CODES:gM}=AM;Ph.exports=NM;async function NM(e){let t;try{t=await pM(e.schema);let r=new uM(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_t.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[_t.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await SM(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await dM(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new EM(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await hM(n);let i=fM(t);await cM.remove(i)}catch(r){throw r}}a(NM,"lmdbDropSchema");async function pM(e){let t=new lM(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[_t.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await TM(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw mM(new Error,RM.SCHEMA_NOT_FOUND(e),gM.NOT_FOUND,void 0,void 0,!0);return s}a(pM,"validateDropSchema")});var Po=T((iG,Bh)=>{"use strict";var Ii=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Ii,"CreateTableObject");Bh.exports=Ii});var Gh=T((_G,vh)=>{"use strict";var OM=require("fs-extra"),bi=B(),{getTransactionAuditStorePath:IM}=q(),Ho=ee(),oG=Po();vh.exports=bM;async function bM(e){let t;try{let r=IM(e.schema,e.table);await OM.mkdirp(r),t=await bi.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{bi.createDBI(t,Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bi.createDBI(t,Ho.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bi.createDBI(t,Ho.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(bM,"createTransactionsAuditEnvironment")});var Vh=T((uG,xh)=>{"use strict";var Bo=f(),qh=B(),CM=ir(),{getSystemSchemaPath:yM,getSchemaPath:MM}=q(),wM=Ht(),LM=bn(),vo=In(),UM=N(),DM=Gh(),qo=wM.hdb_table,Fh=[];for(let e=0;e<qo.attributes.length;e++)Fh.push(qo.attributes[e].attribute);xh.exports=PM;async function PM(e,t){let r=MM(t.schema,t.table),s=new vo(t.schema,t.table,Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new vo(t.schema,t.table,Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await qh.createEnvironment(r,t.table),e!==void 0){let o=await qh.openEnvironment(yM(),Bo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await CM.insertRecords(o,qo.hash_attribute,Fh,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Go(s),await Go(n),await Go(i)}await DM(t)}catch(o){throw o}}a(PM,"lmdbCreateTable");async function Go(e){try{await LM(e)}catch(t){UM.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Go,"createAttribute")});var Yh=T((EG,kh)=>{"use strict";var HM=Cn(),BM=Ln(),vM=_i(),As=f(),GM=ir().updateRecords,qM=B(),{getSchemaPath:FM}=q(),xM=hs(),VM=N();kh.exports=kM;async function kM(e){try{let{schema_table:t,attributes:r}=HM(e);BM(e,r,t.hash_attribute),e.schema!==As.SYSTEM_SCHEMA_NAME&&(r.includes(As.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(As.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(As.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(As.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vM(e.hdb_auth_header,t,r),n=FM(e.schema,e.table),i=await qM.openEnvironment(n,e.table),o=await GM(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await xM(e,o)}catch(_){VM.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(kM,"lmdbUpdateRecords")});var Kh=T((hG,$h)=>{"use strict";var YM=f().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=YM.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ci,"UpsertObject");$h.exports=Ci});var Qh=T((fG,Wh)=>{"use strict";var SG=Kh(),$M=Cn(),KM=Ln(),WM=_i(),Rs=f(),QM=ir().upsertRecords,JM=B(),{getSchemaPath:XM}=q(),ZM=hs(),zM=N(),{handleHDBError:jM,hdb_errors:ew}=V();Wh.exports=tw;async function tw(e){let t;try{t=$M(e)}catch(c){throw jM(c,c.message,ew.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;KM(e,s,r.hash_attribute),e.schema!==Rs.SYSTEM_SCHEMA_NAME&&(s.includes(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await WM(e.hdb_auth_header,r,s),i=XM(e.schema,e.table),o=await JM.openEnvironment(i,e.table),_=await QM(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await ZM(e,_)}catch(c){zM.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(tw,"lmdbUpsertRecords")});var eT=T((AG,jh)=>{"use strict";var rw=at(),Jh=p(),Xh=N(),sw=Ar(),Zh=f(),nw=Mo().deleteRecords,iw=B(),{getSchemaPath:aw}=q(),{promisify:ow}=require("util"),_w=ow(setTimeout),zh=1e4,cw=10;jh.exports=uw;async function uw(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jh.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 rw(e.schema,e.table,Zh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await sw(n,Zh.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw Xh.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return Jh.isEmptyOrZeroLength(s)?(Xh.trace("No records found to delete"),{message:"No records found to delete"}):await lw(e,s,t)}a(uw,"lmdbDeleteRecordsBefore");async function lw(e,t,r){let s=aw(e.schema,e.table),n=await iw.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=zh){let c=t.slice(o,o+zh),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await nw(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 _w(cw)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(lw,"chunkDeletes")});var rT=T((gG,tT)=>{"use strict";var yi=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(yi,"DeleteBeforeObject");tT.exports=yi});var nT=T((pG,sT)=>{"use strict";var Mi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Mi,"DeleteAuditLogsBeforeResults");sT.exports=Mi});var oT=T((bG,aT)=>{"use strict";var Fo=B(),{getTransactionAuditStorePath:Ew}=q(),IG=rT(),gs=ee(),dw=p(),iT=nT(),hw=require("util").promisify,Tw=hw(setTimeout),Sw=1e4,fw=100;aT.exports=mw;async function mw(e){let t=Ew(e.schema,e.table),r=await Fo.openEnvironment(t,e.table,!0),s=Fo.listDBIs(r);Fo.initializeDBIs(r,gs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new iT;do n=await Aw(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 Tw(fw);while(n.transactions_deleted>0);return i}a(mw,"deleteAuditLogsBefore");async function Aw(e,t){let r=new iT;try{let s=e.dbis[gs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[gs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];dw.isEmpty(_)||(n=e.dbis[gs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[gs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Sw)break}return await n,r}catch(s){throw s}}a(Aw,"deleteTransactions")});var cT=T((yG,_T)=>{"use strict";var wi=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(wi,"DropAttributeObject");_T.exports=wi});var lT=T((LG,uT)=>{"use strict";var Rw=at(),gw=ms(),wG=cT(),Je=f(),Nw=p(),xo=B(),pw=Ht(),Ow=Ar(),Iw=Ss(),{getSchemaPath:bw}=q();uT.exports=Cw;async function Cw(e,t=!0){let r;e.schema===Je.SYSTEM_SCHEMA_NAME?r=pw[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Mw(e),n=bw(e.schema,e.table),i=await xo.openEnvironment(n,e.table);return t===!0&&await yw(e,i,r.hash_attribute),xo.dropDBI(i,e.attribute),s}a(Cw,"lmdbDropAttribute");async function yw(e,t,r){let s=xo.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(o,u,c)}await n}a(yw,"removeAttributeFromAllObjects");async function Mw(e){let t=new Rw(Je.SYSTEM_SCHEMA_NAME,Je.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await Ow(t)).filter(o=>o[Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Nw.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new gw(Je.SYSTEM_SCHEMA_NAME,Je.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Iw(i)}a(Mw,"dropAttributeFromSystem")});var fT=T((PG,ST)=>{"use strict";var Vo=B(),Rr=ee(),DG=Dt(),ko=f(),ET=p(),{getTransactionAuditStorePath:ww}=q(),Lw=Ft(),Li=Tr(),Uw=N();ST.exports=Dw;async function Dw(e){let t=ww(e.schema,e.table),r=await Vo.openEnvironment(t,e.table,!0),s=Vo.listDBIs(r);Vo.initializeDBIs(r,Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case ko.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return dT(r,e.search_values);case ko.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Hw(r,e.search_values,n);case ko.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Pw(r,e.search_values);default:return dT(r)}}a(Dw,"readAuditLog");function dT(e,t=[0,Date.now()]){ET.isEmpty(t[0])&&(t[0]=0),ET.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Li,n))}a(dT,"searchTransactionsByTimestamp");function Pw(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[Rr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,TT(e,i))}return Object.fromEntries(r)}a(Pw,"searchTransactionsByUsername");function Hw(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=Lw.equals(e,Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let h=Number(E);s.has(h)?s.get(h).push(u.toString()):s.set(h,[u.toString()])}}let n=Array.from(s.keys()),i=TT(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);hT(c,"records",r,l,o),hT(c,"original_records",r,l,o)}return Object.fromEntries(o)}a(Hw,"searchTransactionsByHashValues");function hT(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new Li(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new Li(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(hT,"loopRecords");function TT(e,t){let r=[];try{let s=e.dbis[Rr.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 Li,i);r.push(o)}}catch(i){Uw.warn(i)}return r}catch(s){throw s}}a(TT,"batchSearchTransactions")});var AT=T((BG,mT)=>{"use strict";var{getSchemaPath:Bw}=q(),vw=B();mT.exports={writeTransaction:Gw};async function Gw(e,t,r){let s=Bw(e,t);return(await vw.openEnvironment(s,t)).transaction(r)}a(Gw,"writeTransaction")});var pT=T((GG,NT)=>{"use strict";var{getSchemaPath:RT}=q(),gT=B();NT.exports={flush:qw,resetReadTxn:Fw};async function qw(e,t){return(await gT.openEnvironment(RT(e,t),t.toString())).flushed}a(qw,"flush");async function Fw(e,t){try{(await gT.openEnvironment(RT(e,t),t.toString())).resetReadTxn()}catch{}}a(Fw,"resetReadTxn")});var bT=T((FG,IT)=>{"use strict";var xw=N(),{handleHDBError:Vw}=V(),kw=pa(),Yw=bn(),$w=bo(),Kw=$d(),Ww=Ss(),Qw=Lo(),Jw=oh(),Xw=Sh(),Zw=Ar(),zw=Oh(),jw=Hh(),eL=Vh(),tL=Yh(),rL=Qh(),sL=eT(),nL=oT(),iL=Do(),aL=lT(),oL=fT(),_L=AT(),OT=pT(),Ui=class extends kw{async searchByConditions(t){return zw(t)}async getDataByHash(t){return await Qw(t)}async searchByHash(t){return await Jw(t)}async getDataByValue(t,r){return await Xw(t,r)}async searchByValue(t){return await Zw(t)}async createSchema(t){return await Kw(t)}async dropSchema(t){return await jw(t)}async createTable(t,r){return await eL(t,r)}async dropTable(t){return await iL(t)}async createAttribute(t){return await Yw(t)}async createRecords(t){return await $w(t)}async updateRecords(t){return await tL(t)}async upsertRecords(t){try{return await rL(t)}catch(r){throw Vw(r,null,null,xw.ERR,r)}}async deleteRecords(t){return await Ww(t)}async deleteRecordsBefore(t){return await sL(t)}async dropAttribute(t){return await aL(t)}async deleteAuditLogsBefore(t){return await nL(t)}async readAuditLog(t){return await oL(t)}writeTransaction(t,r,s){return _L.writeTransaction(t,r,s)}flush(t,r){return OT.flush(t,r)}resetReadTxn(t,r){return OT.resetReadTxn(t,r)}};a(Ui,"LMDBBridge");IT.exports=Ui});var mt=T((VG,yT)=>{"use strict";var cL=bT(),uL=pa(),lL=$();lL.initSync();var CT;function EL(){return CT instanceof uL?CT:new cL}a(EL,"getBridge");yT.exports=EL()});var wT=T((YG,MT)=>{"use strict";var dL=mt();MT.exports={writeTransaction:hL};function hL(e,t,r){return dL.writeTransaction(e,t,r)}a(hL,"writeTransaction")});var Yo=T((KG,TL)=>{TL.exports={name:"harperdb",version:"4.1.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.2",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var Ls=T((tq,QT)=>{"use strict";var X=$();X.initSync();var SL=require("fs-extra"),fL=require("semver"),bs=require("path"),{monotonicFactory:mL}=require("ulidx"),Jo=mL(),AL=require("util"),UT=require("child_process"),RL=AL.promisify(UT.exec),gL=UT.spawn,L=Ut(),P=f(),Di=p(),It=N(),Pi=rn(),NL=wT(),Ns=js(),{encode:Wo,decode:Xo}=require("msgpackr"),{isEmpty:Kt}=Di,DT=us(),PT=12e10,{connect:pL,StorageType:HT,RetentionPolicy:BT,AckPolicy:Zo,DeliverPolicy:Cs,DiscardPolicy:OL,NatsConnection:WG,JetStreamManager:QG,JetStreamClient:JG,StringCodec:XG,JSONCodec:IL,createInbox:zo,StreamSource:ZG,headers:bL,toJsMsg:vT,nuid:zG,JetStreamOptions:jG,ErrorCode:LT,nanos:eq}=require("nats"),{PACKAGE_ROOT:CL}=f(),yL=Yo(),GT=IL(),ML="clustering",wL=yL.engines[L.NATS_SERVER_NAME],LL=bs.join(CL,"dependencies"),Qo=bs.join(LL,`${process.platform}-${process.arch}`,L.NATS_BINARY_NAME),$o,Ko,ps,Os,Is,xe;QT.exports={runCommand:qT,checkNATSServerInstalled:UL,createConnection:jo,getConnection:Hi,getJetStreamManager:ys,getJetStream:FT,getNATSReferences:Ie,getServerList:PL,createLocalStream:e_,listStreams:xT,deleteLocalStream:HL,getServerConfig:Ms,listRemoteStreams:BL,viewStream:vL,viewStreamIterator:GL,publishToStream:qL,createWorkQueueStream:FL,addSourceToWorkStream:kT,request:xL,removeSourceFromWorkStream:$T,reloadNATS:t_,reloadNATSHub:VL,reloadNATSLeaf:kL,extractServerName:YT,requestErrorHandler:YL,updateWorkStream:$L,createLocalTableStream:KT,createTableStreams:KL,purgeTableStream:WT,purgeSchemaTableStreams:WL,getStreamInfo:QL,updateLocalStreams:XL,closeConnection:DL,getJsmServerName:ws,addNatsMsgHeader:VT};async function qT(e,t=void 0){let{stdout:r,stderr:s}=await RL(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 Q.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Mg(s,r),fa(s);let n=s.toJSON();if(Z=Lt(n),Z.logging_rotation_rotate)for(let i in $c)Z[i]&&Q.error(`Config ${$c[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Q.trace(pg)}}a(Xc,"initConfig");function Mg(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ke.join(r,ye.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ke.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ke.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Q.trace("Updating config file with missing config params"),Ce.writeFileSync(t,String(e)))}a(Mg,"checkForUpdatedConfig");function fa(e){let t=e.toJSON(),r=Tg(t);if(r.error)throw Zs.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}a(fa,"validateConfig");function wg(e,t){Z===void 0&&(Z={});let r=tt[e.toLowerCase()];if(r===void 0){Q.trace(`Unable to update config object because config param '${e}' does not exist`);return}Z[r.toLowerCase()]=t}a(wg,"updateConfigObject");function Zc(e,t,r=void 0,s=!1,n=!1){Z===void 0&&Xc();let i=Jc(tt.hdb_root),o=ke.join(i,ye.HDB_CONFIG_FILE),_=tr(o),c;if(r===void 0&&e.toLowerCase()===Et.SCHEMAS)c=t;else if(r===void 0){let E=tt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=E.split("_"),d=Ta(E,t);_.setIn([...h],d)}else for(let E in r){let h=tt[E.toLowerCase()];if(h===Et.SCHEMAS){c=r[E];continue}if(h!==void 0){let d=h.split("_"),A=Ta(h,r[E]);try{_.setIn([...d],A)}catch(R){Q.error(R)}}}c&&Qc(_,c),fa(_);let u=_.getIn(["rootPath"]),l=ke.join(u,ye.HDB_CONFIG_FILE);s===!0&&Lg(o,u),Ce.writeFileSync(l,String(_)),n&&(Z=Lt(_.toJSON())),Q.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Zc,"updateConfigValue");function Lg(e,t){try{let r=ke.join(t,"backup",`${ye.HDB_CONFIG_FILE}.bak`);Ce.copySync(e,r),Q.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Q.error(Og),Q.error(r)}}a(Lg,"backupConfigFile");var Ug=["schemas"];function Lt(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Ug.includes(r)){let s=Lt(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(Lt,"flattenConfig");function Ta(e,t){if(e===Et.CLUSTERING_NODENAME||e===Et.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(fg(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ae.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 Ae.autoCast(t)}a(Ta,"castConfigValue");function Dg(){let e=Ae.getPropsFilePath(),t=Sa(e);return tr(t).toJSON()}a(Dg,"getConfiguration");async function Pg(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Zc(void 0,void 0,n,!0),bg}catch(i){throw typeof i=="string"||i instanceof String?Ag(i,i,Rg.BAD_REQUEST,void 0,void 0,!0):i}}a(Pg,"setConfiguration");function ma(){let e=Ae.getPropsFilePath();try{Ce.accessSync(e,Ce.constants.F_OK|Ce.constants.R_OK)}catch(s){throw Q.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Sa(e);return tr(t).toJSON()}a(ma,"readConfigFile");function tr(e){return Sg.parseDocument(Ce.readFileSync(e,"utf8"),{simpleKeys:!0})}a(tr,"parseYamlDoc");function Hg(){let e=ma(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ae.isEmptyOrZeroLength(t)?[]:t;let r=Yc(t);if(r)throw Zs.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Ae.isEmptyOrZeroLength(s)?[]:s;let n=Yc(s);if(n)throw Zs.CONFIG_VALIDATION(n.message);if(!Ae.isEmptyOrZeroLength(s)&&!Ae.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!Ae.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Zs.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Hg,"getClusteringRoutes");function zc(e){let t=Kc(e);Z={};for(let r in tt){let s=t.get(r.toUpperCase());if(Ae.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=tt[r].toLowerCase();n===Et.LOGGING_ROOT?Z[n]=ke.dirname(s):Z[n]=s}return Z}a(zc,"initOldConfig");function Bg(e){let t=ma();return mg.get(t,e.replaceAll("_","."))}a(Bg,"getConfigFromFile")});var $=T((xP,tu)=>{"use strict";var Aa=require("fs-extra"),Ye=require("path"),vg=require("os"),Gg=require("properties-reader"),vr=N(),rr=p(),O=f(),en=js(),qg="Error initializing environment manager",tn="BOOT_PROPS_FILE_PATH",eu=!1,Fg={[O.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},rt={};tu.exports={BOOT_PROPS_FILE_PATH:tn,getHdbBasePath:xg,setHdbBasePath:Vg,get:kg,initSync:$g,setProperty:U,initTestEnvironment:Kg};function xg(){return rt[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(xg,"getHdbBasePath");function Vg(e){rt[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Vg,"setHdbBasePath");function kg(e){let t=en.getConfigValue(e);return t===void 0?rt[e]:t}a(kg,"get");function U(e,t){Fg[e]&&(rt[e]=t),en.updateConfigObject(e,t)}a(U,"setProperty");function Yg(){let e;try{e=rr.getPropsFilePath(),Aa.accessSync(e,Aa.constants.F_OK|Aa.constants.R_OK),eu=!0;let t=Gg(e);return rt[O.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(O.HDB_SETTINGS_NAMES.INSTALL_USER),rt[O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),rt[tn]=e,!0}catch{return vr.trace(`Environment manager found no properties file at ${e}`),!1}}a(Yg,"doesPropFileExist");function $g(e=!1){try{(eu||Yg())&&(en.initConfig(e),rt[O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=en.getConfigValue(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){vr.error(qg),vr.error(t),console.error(t),process.exit(1)}}a($g,"initSync");function Kg(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=Ye.join(__dirname,"../../","unitTests");rt[tn]=Ye.join(c,"hdb_boot_properties.file"),U(O.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ye.join(c,"settings.test")),U(O.HDB_SETTINGS_NAMES.INSTALL_USER,vg.userInfo().username),U(O.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ye.join(c,"envDir","utility","keys","privateKey.pem")),U(O.HDB_SETTINGS_NAMES.CERT_KEY,Ye.join(c,"envDir","utility","keys","certificate.pem")),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ye.join(c,"envDir","utility","keys","privateKey.pem")),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ye.join(c,"envDir","utility","keys","certificate.pem")),U(O.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),U(O.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ye.join(c,"envDir","log")),U(O.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),U(O.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),U(O.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),U(O.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ye.join(c,"envDir")),U(O.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,rr.isEmpty(n)?!0:n),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,rr.isEmpty(n)?!0:n),U(O.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),U(O.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rr.isEmpty(i)?!1:i),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,rr.isEmpty(i)?!1:i),U(O.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),U(O.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),U(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),U(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),U(O.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ye.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),U(O.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rr.isEmpty(_)?!1:_),o&&(U("CORS_ACCESSLIST",o),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(U(O.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(U(O.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(U(O.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),U(O.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${tn}. Please check your boot props and settings files`;vr.fatal(r),vr.error(t)}}a(Kg,"initTestEnvironment")});var Ut=T((YP,su)=>{"use strict";var{platform:kP}=require("os"),Wg="nats-server.zip",Ra="nats-server",Qg=process.platform==="win32"?`${Ra}.exe`:Ra,ga="HDB",Jg=/^[^\s.,*>]+$/,ru="__request__",Xg=a(e=>`${e}.${ru}`,"REQUEST_SUBJECT"),Zg={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},zg={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},jg={HUB:"hub.pid",LEAF:"leaf.pid"},eN={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tN={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ga,deliver_subject:"__HDB__.WORKQUEUE"},rN={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ga,deliver_subject:"HDB.SCHEMAQUEUE"},sN={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ga,deliver_subject:"HDB.USERQUEUE"},nN={SUCCESS:"success",ERROR:"error"},iN={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},aN={TXN:"txn",MSGID:"msgid"},sr={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},oN={[sr.ERR]:1,[sr.WRN]:2,[sr.INF]:3,[sr.DBG]:4,[sr.TRC]:5},_N={debug:"-D",trace:"-DVV"};su.exports={NATS_SERVER_ZIP:Wg,NATS_SERVER_NAME:Ra,NATS_BINARY_NAME:Qg,PID_FILES:jg,NATS_CONFIG_FILES:zg,SERVER_SUFFIX:eN,WORK_QUEUE_CONSUMER_NAMES:tN,SCHEMA_QUEUE_CONSUMER_NAMES:rN,USER_QUEUE_CONSUMER_NAMES:sN,NATS_TERM_CONSTRAINTS_RX:Jg,REQUEST_SUFFIX:ru,UPDATE_REMOTE_RESPONSE_STATUSES:nN,CLUSTER_STATUS_STATUSES:iN,REQUEST_SUBJECT:Xg,SUBJECT_PREFIXES:aN,MSG_HEADERS:Zg,LOG_LEVELS:sr,LOG_LEVEL_FLAGS:_N,LOG_LEVEL_HIERARCHY:oN}});var rn=T((KP,ou)=>{"use strict";var Gr=require("crypto"),iu="aes-256-cbc",cN=32,uN=16,Na=64,au=32,lN=Na+au,nu=new Map;ou.exports={encrypt:EN,decrypt:dN,createNatsTableStreamName:hN};function EN(e){let t=Gr.randomBytes(cN),r=Gr.randomBytes(uN),s=Gr.createCipheriv(iu,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(EN,"encrypt");function dN(e){let t=e.substr(0,Na),r=e.substr(Na,au),s=e.substr(lN,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Gr.createDecipheriv(iu,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(dN,"decrypt");function hN(e,t){let r=`${e}.${t}`,s=nu.get(r);return s||(s=Gr.createHash("md5").update(`${e}.${t}`).digest("hex"),nu.set(r,s)),s}a(hN,"createNatsTableStreamName")});var pa=T((QP,_u)=>{"use strict";var sn=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(sn,"BridgeMethods");_u.exports=sn});var Dt=T((zP,hu)=>{"use strict";var cu=be().LMDB_ERRORS_ENUM,XP=require("lmdb"),TN=ee(),ZP=require("buffer").Buffer,{OVERFLOW_MARKER:uu,MAX_SEARCH_KEY_LENGTH:nn}=TN,lu=["number","string","symbol","boolean","bigint"];function SN(e){if(e=e?.database||e,!e)throw new Error(cu.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(cu.INVALID_ENVIRONMENT)}a(SN,"validateEnv");function fN(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(fN,"stringifyData");function mN(e){return e instanceof Date?e.valueOf():e}a(mN,"convertKeyValueToWrite");function AN(e){if(e==null)return;if(lu.includes(typeof e))return e.length>nn?[e.slice(0,nn)+uu]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];lu.includes(typeof n)&&(n.length>nn?t.push(n.slice(0,nn)+uu):t.push(n))}}return t}a(AN,"getIndexedValues");var an=0,Eu=0;function du(){Eu=Date.now()-performance.now()}a(du,"adjustStartTime");du();var RN=6e4;setInterval(du,RN).unref();function gN(){let e=performance.now()+Eu;return e>an?(an=e,e):(an+=488e-6,an)}a(gN,"getNextMonotonicTime");hu.exports={validateEnv:SN,stringifyData:fN,convertKeyValueToWrite:mN,getNextMonotonicTime:gN,getIndexedValues:AN}});var Su=T((eH,Tu)=>{"use strict";var on=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(on,"DBIDefinition");Tu.exports=on});var Au=T((rH,mu)=>{"use strict";var Oa=$(),fu=f();Oa.initSync();var NN=Oa.get(fu.CONFIG_PARAMS.STORAGE_COMPRESSION),pN=Oa.get(fu.CONFIG_PARAMS.STORAGE_CACHING)!==!1,_n=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=NN&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=pN&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(_n,"OpenDBIObject");mu.exports=_n});var Nu=T((nH,gu)=>{"use strict";var nr=$(),qr=f();nr.initSync();var ON=nr.get(qr.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||nr.get(qr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||nr.get(qr.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ru=nr.get(qr.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),IN=nr.get(qr.CONFIG_PARAMS.STORAGE_NOREADAHEAD),cn=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=ON,Ru!==void 0&&(this.overlappingSync=Ru),this.noReadAhead=IN}};a(cn,"OpenEnvironmentObject");gu.exports=cn});var B=T((aH,Mu)=>{"use strict";var Ia=require("lmdb"),Me=require("fs-extra"),Be=require("path"),ln=Dt(),pu=N(),z=be().LMDB_ERRORS_ENUM,En=Su(),ba=Au(),Ou=Nu(),dt=ee(),ve=dt.INTERNAL_DBIS_NAME,Iu=dt.DBI_DEFINITION_NAME,bN="data.mdb",CN="lock.mdb",Fr=".mdb",yN="-lock",un=class{constructor(t,r,s=!1){this.dbi=we(t,r),this.key_type=this.dbi[dt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ia.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(un,"TransactionCursor");function Ca(e,t){if(e===void 0)throw new Error(z.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(z.ENV_NAME_REQUIRED)}a(Ca,"pathEnvNameValidation");async function ya(e,t,r=!0){try{await Me.access(e)}catch(s){throw s.code==="ENOENT"?new Error(z.INVALID_BASE_PATH):s}try{let s=Be.join(e,t+Fr);return await Me.access(s,Me.constants.R_OK|Me.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Me.access(Be.join(e,t,bN),Me.constants.R_OK|Me.constants.F_OK),Be.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(z.INVALID_ENVIRONMENT)}else throw new Error(z.INVALID_ENVIRONMENT);throw s}}a(ya,"validateEnvironmentPath");function dn(e,t){if(ln.validateEnv(e),t===void 0)throw new Error(z.DBI_NAME_REQUIRED)}a(dn,"validateEnvDBIName");async function MN(e,t,r=!1,s=!1){Ca(e,t),t=t.toString();try{return await ya(e,t,s),Ma(e,t,r)}catch(n){if(n.message===z.INVALID_ENVIRONMENT){let i=Be.join(e,t);await Me.mkdirp(s?i:e);let o=new Ou(s?i:i+Fr,!1),_=Ia.open(o);_.dbis=Object.create(null);let c=new ba(!1);_.openDB(ve,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=wa(e,t,r);return _[dt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(MN,"createEnvironment");async function wN(e,t,r,s=!0){let n=await Ma(e,t);if(r===void 0)throw new Error(z.DESTINATION_PATH_REQUIRED);try{await Me.access(Be.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(z.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(wN,"copyEnvironment");async function Ma(e,t,r=!1){Ca(e,t),t=t.toString();let s=wa(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 ya(e,t),i=Be.join(e,t+Fr),o=n!=i,_=new Ou(n,o),c=Ia.open(_);c.dbis=Object.create(null);let u=Cu(c);for(let l=0;l<u.length;l++)we(c,u[l]);return c[dt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ma,"openEnvironment");async function LN(e,t,r=!1){Ca(e,t),t=t.toString();let s=Be.join(e,t+Fr),n=await ya(e,t);if(global.lmdb_map!==void 0){let i=wa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await bu(o),delete global.lmdb_map[i]}}await Me.remove(n),await Me.remove(n===s?n+yN:Be.join(Be.dirname(n),CN))}a(LN,"deleteEnvironment");async function bu(e){ln.validateEnv(e);let t=e[dt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(bu,"closeEnvironment");function wa(e,t,r=!1){let n=`${Be.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(wa,"getCachedEnvironmentName");function UN(e){ln.validateEnv(e);let t=Object.create(null),r=we(e,ve);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ve)try{t[s]=Object.assign(new En,n)}catch{pu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(UN,"listDBIDefinitions");function Cu(e){ln.validateEnv(e);let t=[],r=we(e,ve);for(let{key:s}of r.getRange({start:!1}))s!==ve&&t.push(s);return t}a(Cu,"listDBIs");function DN(e,t){let s=we(e,ve).getEntry(t),n=new En;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{pu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(DN,"getDBIDefinition");function yu(e,t,r,s=!1){if(dn(e,t),t=t.toString(),t===ve)throw new Error(z.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return we(e,t)}catch(n){if(n.message===z.DBI_DOES_NOT_EXIST){let i=new ba(r,s===!0),o=e.openDB(t,i),_=new En(r===!0,s);return o[Iu]=_,we(e,ve).putSync(t,_),e.dbis[t]=o,o}throw n}}a(yu,"createDBI");function we(e,t){if(dn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ve?r=DN(e,t):r=new En,r===void 0)throw new Error(z.DBI_DOES_NOT_EXIST);let s;try{let n=new ba(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(z.DBI_DOES_NOT_EXIST):n}return s[Iu]=r,e.dbis[t]=s,s}a(we,"openDBI");function PN(e,t){dn(e,t),t=t.toString();let r=we(e,t),s=r.getStats();return r[dt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(PN,"statDBI");async function HN(e,t){try{let r=Be.join(e,t+Fr);return(await Me.stat(r)).size}catch{throw new Error(z.INVALID_ENVIRONMENT)}}a(HN,"environmentDataSize");function BN(e,t){if(dn(e,t),t=t.toString(),t===ve)throw new Error(z.CANNOT_DROP_INTERNAL_DBIS_NAME);we(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],we(e,ve).removeSync(t)}a(BN,"dropDBI");function vN(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{we(e,n)}catch(i){if(i.message===z.DBI_DOES_NOT_EXIST)yu(e,n,n!==t,n===t);else throw i}}}a(vN,"initializeDBIs");Mu.exports={openDBI:we,openEnvironment:Ma,createEnvironment:MN,listDBIs:Cu,listDBIDefinitions:UN,createDBI:yu,dropDBI:BN,statDBI:PN,deleteEnvironment:LN,initializeDBIs:vN,TransactionCursor:un,environmentDataSize:HN,copyEnvironment:wN,closeEnvironment:bu}});var Lu=T((_H,wu)=>{"use strict";var hn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(hn,"InsertRecordsResponseObject");wu.exports=hn});var Du=T((uH,Uu)=>{"use strict";var Tn=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(Tn,"UpdateRecordsResponseObject");Uu.exports=Tn});var Hu=T((EH,Pu)=>{"use strict";var Sn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Sn,"UpsertRecordsResponseObject");Pu.exports=Sn});var ir=T((fH,Gu)=>{"use strict";var GN=B(),qN=Lu(),FN=Du(),xN=Hu(),$e=Dt(),xr=be().LMDB_ERRORS_ENUM,VN=ee(),st=f(),kN=p(),YN=require("uuid"),hH=require("lmdb"),{handleHDBError:$N,hdb_errors:KN}=V(),{OVERFLOW_MARKER:TH,MAX_SEARCH_KEY_LENGTH:SH}=VN,Bu=$();Bu.initSync();var fn=Bu.get(st.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),La=st.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pt=st.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WN(e,t,r,s,n=$e.getNextMonotonicTime()){Ha(e,t,r,s),Ua(e,t,r);let i=new qN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];vu(u,!0,n);let l=QN(e,t,r,u),E=u[t];o.push(l),_.push(E)}return Da(o,_,s,i,n)}a(WN,"insertRecords");function QN(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let l=_([[{}]]);Array.isArray(l)&&(_=l[0][st.FUNC_VAL],s[o]=_)}let c=$e.getIndexedValues(_),u=e.dbis[o];if(c){fn&&u.prefetch(c.map(l=>({key:l,value:n})),mn);for(let l=0,E=c.length;l<E;l++)u.put(c[l],n)}}fn&&e.dbis[t].prefetch([n],mn),e.dbis[t].put(n,s,s[Pt])})}a(QN,"insertRecord");function JN(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(JN,"removeSkippedRecords");function vu(e,t,r){let s=r>0;(s||!Number.isInteger(e[Pt]))&&(e[Pt]=r||(r=$e.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[La]))&&(e[La]=r||$e.getNextMonotonicTime()):delete e[La]}a(vu,"setTimestamps");function Ua(e,t,r){r.indexOf(st.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(st.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(st.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(st.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),GN.initializeDBIs(e,t,r)}a(Ua,"initializeTransaction");async function XN(e,t,r,s,n=$e.getNextMonotonicTime()){Ha(e,t,r,s),Ua(e,t,r);let i=new FN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],h;try{h=Pa(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}_.push(h),c.push(E)}return Da(_,c,s,i,n,o)}a(XN,"updateRecords");async function ZN(e,t,r,s,n=$e.getNextMonotonicTime()){try{Ha(e,t,r,s)}catch(c){throw $N(c,c.message,KN.HTTP_STATUS_CODES.BAD_REQUEST)}Ua(e,t,r);let i=new xN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;kN.isEmpty(u[t])?(l=YN.v4(),u[t]=l):l=u[t];let E=Pa(e,t,u,l,i,!1,n);o.push(E),_.push(l)}return Da(o,_,s,i,n)}a(ZN,"upsertRecords");async function Da(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let _=0,c=o.length;_<c;_++)o[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||$e.getNextMonotonicTime(),JN(r,i),s}a(Da,"finalizeWrite");function Pa(e,t,r,s,n,i=!1,o){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(vu(r,!l,o),Number.isInteger(r[Pt])&&u[Pt]>r[Pt])return!1;l&&n.original_records.push(u);let E,h=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let R=r[A],M=e.dbis[A];if(M===void 0)continue;let W=u[A];if(typeof R=="function"){let F=R([[u]]);Array.isArray(F)&&(R=F[0][st.FUNC_VAL],r[A]=R)}if(R===W)continue;let x=$e.getIndexedValues(W);if(x){fn&&M.prefetch(x.map(F=>({key:F,value:s})),mn);for(let F=0,Xe=x.length;F<Xe;F++)M.remove(x[F],s)}if(x=$e.getIndexedValues(R),x){fn&&M.prefetch(x.map(F=>({key:F,value:s})),mn);for(let F=0,Xe=x.length;F<Xe;F++)M.put(x[F],s)}}let d=Object.assign({},u,r);_.put(s,d,d[Pt])},"do_put");return c?E=_.ifVersion(s,c.version,h):E=_.ifNoExists(s,h),E.then(d=>d?!0:Pa(e,t,r,s,n,i,o))}a(Pa,"updateUpsertRecord");function zN(e,t,r){if($e.validateEnv(e),t===void 0)throw new Error(xr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xr.WRITE_ATTRIBUTES_REQUIRED):new Error(xr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(zN,"validateBasic");function Ha(e,t,r,s){if(zN(e,t,r),!Array.isArray(s))throw s===void 0?new Error(xr.RECORDS_REQUIRED):new Error(xr.RECORDS_MUST_BE_ARRAY)}a(Ha,"validateWrite");function mn(){}a(mn,"noop");Gu.exports={insertRecords:WN,updateRecords:XN,upsertRecords:ZN}});var q=T((AH,Yu)=>{"use strict";var Kr=f(),jN=p(),ue=$(),Wr=require("path"),ep=require("minimist"),qu=require("fs-extra"),Fu=require("lodash");ue.initSync();var{CONFIG_PARAMS:ht,SCHEMAS_PARAM_CONFIG:Vr,SYSTEM_SCHEMA_NAME:An}=Kr,kr,Yr,$r;function xu(){if(kr!==void 0)return kr;if(ue.getHdbBasePath()!==void 0)return kr=ue.get(ht.STORAGE_PATH)||Wr.join(ue.getHdbBasePath(),Kr.SCHEMA_DIR_NAME),kr}a(xu,"getBaseSchemaPath");function Vu(){if(Yr!==void 0)return Yr;if(ue.getHdbBasePath()!==void 0)return Yr=ku(An),Yr}a(Vu,"getSystemSchemaPath");function tp(){if($r!==void 0)return $r;if(ue.getHdbBasePath()!==void 0)return $r=ue.get(Kr.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Wr.join(ue.getHdbBasePath(),Kr.TRANSACTIONS_DIR_NAME),$r}a(tp,"getTransactionAuditStoreBasePath");function rp(e,t){let r=ue.get(ht.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Wr.join(tp(),e.toString())}a(rp,"getTransactionAuditStorePath");function ku(e,t){e=e.toString(),t=t&&t.toString();let r=ue.get(Kr.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Wr.join(xu(),e)}a(ku,"getSchemaPath");function sp(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ep(process.argv));let s=r[ht.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!jN.isObject(s))throw o;i=s}for(let o of i){let _=o[An];if(!_)continue;let c=ue.get(ht.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Vr.PATH];if(u)return Fu.set(c,[An,Vr.TABLES,t,Vr.PATH],u),ue.setProperty(ht.SCHEMAS,c),u;let l=_?.[Vr.PATH];if(l)return Fu.set(c,[An,Vr.PATH],l),ue.setProperty(ht.SCHEMAS,c),l}}let n=r[ht.STORAGE_PATH.toUpperCase()];if(n){if(!qu.pathExistsSync(n))throw new Error(n+" does not exist");let i=Wr.join(n,e);return qu.mkdirsSync(i),ue.setProperty(ht.STORAGE_PATH,n),i}return Vu()}a(sp,"initSystemSchemaPaths");function np(){kr=void 0,Yr=void 0,$r=void 0}a(np,"resetPaths");Yu.exports={getBaseSchemaPath:xu,getSystemSchemaPath:Vu,getTransactionAuditStorePath:rp,getSchemaPath:ku,initSystemSchemaPaths:sp,resetPaths:np}});var Ht=T((gH,ip)=>{ip.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 ar=T((NH,Wu)=>{"use strict";var Ku=p(),$u=f(),gn=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ba=require("joi"),Rn={schema_format:{pattern:gn,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ap=Ba.alternatives(Ba.string().min(1).max(Rn.schema_length.maximum).pattern(gn).messages({"string.pattern.base":"{:#label} "+Rn.schema_format.message}),Ba.number()).required();function op(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Rn.schema_length.maximum?`'${e}' maximum of 250 characters`:gn.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(op,"checkValidTable");function _p(e,t){return Ku.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(_p,"validateSchemaExists");function cp(e,t){let r=t.state.ancestors[0].schema;return Ku.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(cp,"validateTableExists");function up(e,t){return e.toLowerCase()===$u.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${$u.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(up,"validateSchemaName");Wu.exports={common_validators:Rn,schema_regex:gn,hdb_schema_table:ap,validateSchemaExists:_p,validateTableExists:cp,validateSchemaName:up,checkValidTable:op}});var Nn=T((OH,Qu)=>{var{common_validators:Tt}=ar(),Qr=Pe(),Ge="is required",v={schema:{presence:!0,format:Tt.schema_format,length:Tt.schema_length},table:{presence:!0,format:Tt.schema_format,length:Tt.schema_length},attribute:{presence:!0,format:Tt.schema_format,length:Tt.schema_length},hash_attribute:{presence:!0,format:Tt.schema_format,length:Tt.schema_length}};function Jr(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(Jr,"makeAttributesStrings");function lp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence=!1,v.attribute.presence=!1,v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(lp,"schema_object");function Ep(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence=!1,v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(Ep,"table_object");function dp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence=!1,v.hash_attribute.presence={message:Ge},Qr.validateObject(e,v)}a(dp,"create_table_object");function hp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence={message:Ge},v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(hp,"attribute_object");function Tp(e){return e=Jr(e),v.schema.presence={message:Ge},v.table.presence={message:Ge},v.attribute.presence=!1,v.hash_attribute.presence=!1,Qr.validateObject(e,v)}a(Tp,"describe_table");function Sp(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(Sp,"validateTableResidence");Qu.exports={schema_object:lp,create_table_object:dp,table_object:Ep,attribute_object:hp,describe_table:Tp,validateTableResidence:Sp}});var Xu=T((bH,Ju)=>{"use strict";var fp=require("uuid"),pn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||fp.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(pn,"CreateAttributeObject");Ju.exports=pn});var In=T((yH,Zu)=>{"use strict";var mp=Xu(),On=class extends mp{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(On,"LMDBCreateAttributeObject");Zu.exports=On});var ju=T((wH,zu)=>{"use strict";zu.exports=Rp;var Ap="inserted";function Rp(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ap?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Rp,"returnObject")});var bn=T((UH,nl)=>{"use strict";var gp=f(),va=B(),Np=ir(),{getSystemSchemaPath:pp,getSchemaPath:Op}=q(),Ip=Ht(),bp=Nn(),Cp=In(),yp=ju(),{handleHDBError:el,hdb_errors:rl}=V(),tl=p(),{HTTP_STATUS_CODES:Mp}=rl,Ga=Ip.hdb_attribute,sl=[];for(let e=0;e<Ga.attributes.length;e++)sl.push(Ga.attributes[e].attribute);var wp="inserted";nl.exports=Lp;async function Lp(e){let t=bp.attribute_object(e);if(t)throw el(new Error,t.message,rl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&tl.checkGlobalSchemaTable(e.schema,e.table);if(r)throw el(new Error,r,Mp.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=tl.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Cp(e.schema,e.table,e.attribute,e.id);try{let i=await va.openEnvironment(Op(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);va.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await va.openEnvironment(pp(),gp.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await Np.insertRecords(o,Ga.hash_attribute,sl,[n]);return yp(wp,_,{records:[n]},c)}catch(i){throw i}}a(Lp,"lmdbCreateAttribute")});var Fa=T((PH,al)=>{var{hdb_schema_table:il}=ar(),Up=Pe(),qa=require("joi"),Dp={undefined:"undefined",null:"null"},Pp=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||Dp[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"),Hp=qa.object({schema:il,table:il,records:qa.array().items(qa.object().custom(Pp)).required()});al.exports=function(e){return Up.validateBySchema(e,Hp)}});var Cn=T((vH,_l)=>{"use strict";var nt=p(),ol=N(),BH=Fa();_l.exports=Bp;function Bp(e){if(nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(nt.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&&nt.isEmptyOrZeroLength(o[r]))throw ol.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(!nt.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ol.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`);!nt.isEmpty(o[r])&&o[r]!==""&&s.has(nt.autoCast(o[r]))&&(o.skip=!0),s.add(nt.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Bp,"insertUpdateValidate")});var Mn=T((qH,cl)=>{"use strict";var vp=f().OPERATIONS_ENUM,yn=class{constructor(t,r,s,n,i=void 0){this.operation=vp.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(yn,"InsertObject");cl.exports=yn});var Ln=T((VH,ul)=>{"use strict";var xH=Mn(),wn=f(),Va=p(),xa=N(),Gp=require("uuid"),{handleHDBError:Xr,hdb_errors:qp}=V(),{HDB_ERROR_MSGS:Zr,HTTP_STATUS_CODES:zr}=qp;ul.exports=Fp;function Fp(e,t,r){for(let n=0;n<t.length;n++)xp(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Vp(i,r,e.operation)}}a(Fp,"processRows");function xp(e){if(Buffer.byteLength(String(e))>wn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Xr(new Error,Zr.ATTR_NAME_LENGTH_ERR(e),zr.BAD_REQUEST,void 0,void 0,!0);if(Va.isEmptyOrZeroLength(e)||Va.isEmpty(e.trim()))throw Xr(new Error,Zr.ATTR_NAME_NULLISH_ERR,zr.BAD_REQUEST,void 0,void 0,!0)}a(xp,"validateAttribute");function Vp(e,t,r){if(!e.hasOwnProperty(t)||Va.isEmptyOrZeroLength(e[t])){if(r===wn.OPERATIONS_ENUM.INSERT||r===wn.OPERATIONS_ENUM.UPSERT){e[t]=Gp.v4();return}throw xa.error("Update transaction aborted due to record with no hash value:",e),Xr(new Error,Zr.RECORD_MISSING_HASH_ERR,zr.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>wn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw xa.error(e),Xr(new Error,Zr.HASH_VAL_LENGTH_ERR,zr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw xa.error(e),Xr(new Error,Zr.INVALID_FORWARD_SLASH_IN_HASH_ERR,zr.BAD_REQUEST,void 0,void 0,!0)}a(Vp,"validateHash")});var El=T((YH,ll)=>{"use strict";var Un=class{constructor(t,r){this.type=t,this.message=r}};a(Un,"ITCEventObject");ll.exports=Un});var Dn=T((KH,Tl)=>{var kp=require("crypto"),dl=9;function Yp(e){let t=Kp(dl),r=hl(e+t);return t+r}a(Yp,"createHash");function $p(e,t){let r=e.substr(0,dl),s=r+hl(t+r);return e===s}a($p,"validateHash");function Kp(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(Kp,"generateSalt");function hl(e){return kp.createHash("md5").update(e).digest("hex")}a(hl,"md5");Tl.exports={hash:Yp,validate:$p}});var fl=T((QH,Sl)=>{"use strict";var St=f(),jr=class{constructor(t=0,r=St.STORAGE_TYPES_ENUM.LMDB,s=St.LICENSE_VALUES.API_CALL_DEFAULT,n=St.RAM_ALLOCATION_ENUM.DEFAULT,i=St.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(jr,"BaseLicense");var Pn=class extends jr{constructor(t=0,r=St.STORAGE_TYPES_ENUM.LMDB,s=St.LICENSE_VALUES.API_CALL_DEFAULT,n=St.RAM_ALLOCATION_ENUM.DEFAULT,i=St.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(Pn,"ExtendedLicense");Sl.exports={BaseLicense:jr,ExtendedLicense:Pn}});var Wa=T((XH,pl)=>{"use strict";var _r=require("fs-extra"),ml=Dn(),Al=require("crypto"),Wp=require("moment"),Qp=require("uuid").v4,se=N(),Ya=require("path"),Jp=p(),Re=f(),Xp=fl().ExtendedLicense,or="invalid license key format",Zp="061183",zp="mofi25",jp="aes-256-cbc",eO=16,tO=32,Rl=$();Rl.initSync();var ka;pl.exports={validateLicense:gl,generateFingerPrint:sO,licenseSearch:Nl,getLicense:aO};function $a(){return Ya.join(Rl.getHdbBasePath(),Re.LICENSE_KEY_DIR_NAME,Re.LICENSE_FILE_NAME)}a($a,"getLicenseDirPath");function rO(){let e=$a();return Ya.join(e,Re.LICENSE_FILE_NAME)}a(rO,"getLicenseFilePath");function Ka(){let e=$a();return Ya.join(e,Re.REG_KEY_FILE_NAME)}a(Ka,"getFingerPrintFilePath");async function sO(){let e=Ka();try{return await _r.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await nO();throw se.error(`Error writing fingerprint file to ${e}`),se.error(t),new Error("There was an error generating the fingerprint")}}a(sO,"generateFingerPrint");async function nO(){let e=Qp(),t=ml.hash(e),r=Ka();try{await _r.mkdirp($a()),await _r.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw se.error(`Error writing fingerprint file to ${r}`),se.error(s),new Error("There was an error generating the fingerprint")}return t}a(nO,"writeFingerprint");function gl(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Re.STORAGE_TYPES_ENUM.LMDB,api_call:Re.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Re.RAM_ALLOCATION_ENUM.DEFAULT,version:Re.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return se.error("empty license key passed to validate."),r;let s=Ka(),n=!1;try{n=_r.statSync(s)}catch(i){se.error(i)}if(n){let i;try{i=_r.readFileSync(s,"utf8")}catch{se.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(zp),_=o[1];_=Buffer.concat([Buffer.from(_)],eO);let c=Buffer.concat([Buffer.from(i)],tO),u=Al.createDecipheriv(jp,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 d=iO(o[0],i);if(d)l=d;else throw r.valid_license=!1,r.valid_machine=!1,console.error(or),se.error(or),new Error(or)}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(or),se.error(or),new Error(or)}else r.exp_date=l;r.exp_date<Wp().valueOf()&&(r.valid_date=!1),ml.validate(o[1],`${Zp}${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||se.error("Invalid licence"),r}a(gl,"validateLicense");function iO(e,t){try{let r=Al.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{se.warn("Check old license failed")}}a(iO,"checkOldLicense");function Nl(){let e=new Xp;e.api_call=0;let t=[];try{t=_r.readFileSync(rO(),"utf-8").split(Re.NEW_LINE)}catch(r){r.code==="ENOENT"?se.info("no license file found"):se.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Jp.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=gl(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){se.error("There was an error parsing the license string."),se.error(n),e.api_call=Re.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Re.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Re.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Re.LICENSE_VALUES.API_CALL_DEFAULT),ka=e,e}a(Nl,"licenseSearch");async function aO(){return ka||await Nl(),ka}a(aO,"getLicense")});var vn=T((zH,ja)=>{"use strict";var{Worker:oO,MessageChannel:_O,parentPort:it,isMainThread:bl,threadId:cO,workerData:uO}=require("worker_threads"),{PACKAGE_ROOT:lO}=f(),{join:EO,isAbsolute:dO,extname:hO}=require("path"),{totalmem:Ol}=require("os"),Za=f(),Cl=$(),TO=Wa(),Hn=N(),SO=f();Cl.initSync();var fO=Cl.get(Za.CONFIG_PARAMS.HTTP_THREADS)||1,mO=1024*1024,ft=[],Bt=[],AO=50,yl=1e4,Ml="restart",wl="request_thread_info",Ll="resource_report",Ul="thread_info",Dl="added-port",Qa;ja.exports={startWorker:Ja,restartWorkers:za,shutdownWorkers:gO,workers:ft,setMonitorListener:bO,onMessageFromWorkers:NO,broadcast:pO};function Ja(e,t={}){let s=TO.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||Ol();n=Math.min(n,Ol());let i=Math.min(Math.max(Math.floor(n/mO/(1+fO/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),_=[];for(let u of Bt){let{port1:l,port2:E}=new _O;u.postMessage({type:Dl,port:l},[l]),_.push(E)}hO(e)||(e+=".js");let c=new oO(dO(e)?e:EO(lO,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return Bn(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{Ja(e,t)},c.on("error",u=>{console.error("Worker error:",u),Hn.error("Worker error:",u)}),c.on("exit",u=>{ft.splice(ft.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<AO?(t.unexpectedRestarts=c.unexpectedRestarts+1,Ja(e,t)):Hn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===Ml&&za(u.workerType),u.type===wl&&OO(c),u.type===Ll&&IO(c,u)}),ft.push(c),yO(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Ja,"startWorker");var RO=[Za.THREAD_TYPES.HTTP];async function za(e=null,t=2,r=!0){if(bl){t<1&&(t=t*ft.length);let s=[];for(let n of ft.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Za.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=RO.indexOf(n.name)>-1,o=new Promise(_=>{let c=setTimeout(()=>n.terminate(),yl*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),_()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else it.postMessage({type:Ml,workerType:e})}a(za,"restartWorkers");function gO(e){return za(e,1/0,!1)}a(gO,"shutdownWorkers");var Pl=[];function NO(e){Pl.push(e)}a(NO,"onMessageFromWorkers");function pO(e){for(let t of Bt)try{t.postMessage(e)}catch(r){Hn.error("Unable to send message to worker",r)}}a(pO,"broadcast");function OO(e){e.postMessage({type:Ul,workers:Hl()})}a(OO,"sendThreadInfo");function Hl(){let e=Date.now();return ft.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(Hl,"getChildWorkerInfo");function IO(e,t){e.resources=t,e.resources.updated=Date.now()}a(IO,"recordResourceReport");var Xa;function bO(e){Xa=e}a(bO,"setMonitorListener");var CO=1e3,Il=!1;function yO(){Il||(Il=!0,setInterval(()=>{for(let e of ft){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Xa&&Xa()},CO).unref())}a(yO,"startMonitoring");var MO=1e3;if(it){Bn(it);for(let e of uO.addPorts)Bn(e);setInterval(()=>{let e=process.memoryUsage();it.postMessage({type:Ll,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},MO).unref(),Qa=a(()=>new Promise((e,t)=>{it.on("message",r),it.postMessage({type:wl});function r(s){s.type===Ul&&(it.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Qa=Hl;ja.exports.getThreadInfo=Qa;function Bn(e,t){Bt.push(e),e.on("message",r=>{if(r.type===Dl)Bn(r.port);else for(let s of Pl)s(r)}).on("close",()=>{Bt.splice(Bt.indexOf(e),1)}).on("exit",()=>{Bt.splice(Bt.indexOf(e),1)}),t||e.unref()}a(Bn,"addPort");bl||it.on("message",async e=>{let{type:t}=e;t===SO.ITC_EVENT_TYPES.SHUTDOWN&&(it.unref(),setTimeout(()=>{Hn.warn("Thread did not voluntarily terminate",cO),process.exit(0)},yl).unref())})});var Gl=T((eB,vl)=>{"use strict";var eo=B(),wO=N(),Bl=be().LMDB_ERRORS_ENUM;vl.exports=LO;async function LO(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 eo.closeEnvironment(global.lmdb_map[o])}catch(_){if(_.message!==Bl.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await eo.closeEnvironment(global.lmdb_map[s]),await eo.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Bl.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){wO.error(t)}}a(LO,"cleanLMDBMap")});var Zl=T((sB,Xl)=>{"use strict";var to=require("recursive-iterator"),UO=require("alasql"),ro=require("clone"),ql=p(),{handleHDBError:Fl,hdb_errors:DO}=V(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:Vl}=DO,PO=["DISTINCT_ARRAY"],kl=Symbol("validateTables"),so=Symbol("validateTable"),rB=Symbol("getAllColumns"),Yl=Symbol("validateAllColumns"),Gn=Symbol("findColumn"),$l=Symbol("validateOrderBy"),es=Symbol("validateSegment"),no=Symbol("validateColumn"),Kl=Symbol("setColumnsForTable"),Wl=Symbol("checkColumnsForAsterisk"),Ql=Symbol("validateGroupBy"),Jl=Symbol("hasColumns"),qn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[kl](),this[Wl](),this[Yl]()}[kl](){if(this[Jl]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[so](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[so](t.table)})}}[Jl](){let t=!1,r=new to(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[so](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Fl(new Error,xl.SCHEMA_NOT_FOUND(t.databaseid),Vl.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Fl(new Error,xl.TABLE_NOT_FOUND(t.databaseid,t.tableid),Vl.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=ro(s);n.table=ro(t),this.attributes.push(n)})}[Gn](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)}[Wl](){let t=new to(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Kl](r.tableid)}[Kl](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new UO.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Yl](){this[es](this.statement.columns,!1),this[es](this.statement.joins,!1),this[es](this.statement.where,!1),this[Ql](this.statement.group,!1),this[es](this.statement.order,!0)}[es](t,r){if(!t)return;let s=new to(t),n=[];for(let{node:i,path:o}of s)!ql.isEmpty(i)&&!ql.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$l](i):n.push(this[no](i)));return n}[Ql](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&PO.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=ro(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Gn](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[Gn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[$l](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[no](t)}[no](t){let r=this[Gn](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(qn,"SelectValidator");Xl.exports=qn});var tE=T((iB,eE)=>{"use strict";var zl=require("lodash"),ts=require("mathjs"),HO=require("jsonata"),jl=p();eE.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?zl.uniqWith(e,zl.isEqual):e,searchJSON:BO,mad:rs.bind(null,ts.mad),mean:rs.bind(null,ts.mean),mode:rs.bind(null,ts.mode),prod:rs.bind(null,ts.prod),median:rs.bind(null,ts.median)};function rs(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(rs,"aggregateFunction");function BO(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(jl.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),jl.isEmpty(this.__ala__.res[r])){let s=HO(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(BO,"searchJSON")});var sE=T((oB,rE)=>{"use strict";var K=require("moment"),io="YYYY-MM-DDTHH:mm:ss.SSSZZ";K.suppressDeprecationWarnings=!0;rE.exports={current_date:()=>K().utc().format("YYYY-MM-DD"),current_time:()=>K().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return K(e).utc().format("YYYY");case"month":return K(e).utc().format("MM");case"day":return K(e).utc().format("DD");case"hour":return K(e).utc().format("HH");case"minute":return K(e).utc().format("mm");case"second":return K(e).utc().format("ss");case"millisecond":return K(e).utc().format("SSS");default:break}},date:e=>K(e).utc().format(io),date_format:(e,t)=>K(e).utc().format(t),date_add:(e,t,r)=>K(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>K(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=K(e).utc(),n=K(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>K().utc().valueOf(),get_server_time:()=>K().format(io),offset_utc:(e,t)=>K(e).utc().utcOffset(t).format(io)}});var oE=T((_B,aE)=>{"use strict";var vO=require("@turf/area"),GO=require("@turf/length"),qO=require("@turf/circle"),FO=require("@turf/difference"),xO=require("@turf/distance"),VO=require("@turf/boolean-contains"),kO=require("@turf/boolean-equal"),YO=require("@turf/boolean-disjoint"),$O=require("@turf/helpers"),nE=f(),w=p();aE.exports={geoArea:KO,geoLength:WO,geoCircle:QO,geoDifference:JO,geoDistance:iE,geoNear:XO,geoContains:ZO,geoEqual:zO,geoCrosses:jO,geoConvert:eI};var ao="geo1 is required",oo="geo2 is required";function KO(e){if(w.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),vO.default(e)}a(KO,"geoArea");function WO(e,t){if(w.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),GO.default(e,{units:t||"kilometers"})}a(WO,"geoLength");function QO(e,t,r){if(w.isEmpty(e))throw new Error("point is required");if(w.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),qO.default(e,t,{units:r||"kilometers"})}a(QO,"geoCircle");function JO(e,t){if(w.isEmpty(e))throw new Error("poly1 is required");if(w.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),FO(e,t)}a(JO,"geoDifference");function iE(e,t,r){if(w.isEmpty(e))throw new Error("point1 is required");if(w.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),xO.default(e,t,{units:r||"kilometers"})}a(iE,"geoDistance");function XO(e,t,r,s){if(w.isEmpty(e))throw new Error("point1 is required");if(w.isEmpty(t))throw new Error("point2 is required");if(w.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return iE(e,t,s)<=r}a(XO,"geoNear");function ZO(e,t){if(w.isEmpty(e))throw new Error(ao);if(w.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),VO.default(e,t)}a(ZO,"geoContains");function zO(e,t){if(w.isEmpty(e))throw new Error(ao);if(w.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),kO.default(e,t)}a(zO,"geoEqual");function jO(e,t){if(w.isEmpty(e))throw new Error(ao);if(w.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=w.autoCastJSON(e)),typeof t=="string"&&(t=w.autoCastJSON(t)),!YO.default(e,t)}a(jO,"geoCrosses");function eI(e,t,r){if(w.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(w.isEmpty(t))throw new Error("geo_type is required");if(w.isEmpty(nE.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(nE.GEO_CONVERSION_ENUM).join(",")}`);return $O[t](e,r)}a(eI,"geoConvert")});var cE=T((uB,_E)=>{var vt=tE(),ge=sE(),Ke=oE();_E.exports=e=>{e.aggr.mad=e.aggr.MAD=vt.mad,e.aggr.mean=e.aggr.MEAN=vt.mean,e.aggr.mode=e.aggr.MODE=vt.mode,e.aggr.prod=e.aggr.PROD=vt.prod,e.aggr.median=e.aggr.MEDIAN=vt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=vt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=vt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ge.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ge.current_time,e.fn.extract=e.fn.EXTRACT=ge.extract,e.fn.date=e.fn.DATE=ge.date,e.fn.date_format=e.fn.DATE_FORMAT=ge.date_format,e.fn.date_add=e.fn.DATE_ADD=ge.date_add,e.fn.date_sub=e.fn.DATE_SUB=ge.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ge.date_diff,e.fn.now=e.fn.NOW=ge.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ge.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ge.get_server_time,e.fn.getdate=e.fn.GETDATE=ge.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ge.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ke.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ke.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ke.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ke.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ke.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ke.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ke.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ke.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ke.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ke.geoNear}});var EE=T((lB,lE)=>{"use strict";var ss=require("lodash"),j=require("alasql");j.options.cache=!1;var tI=cE(),uE=require("clone"),Fn=require("recursive-iterator"),I=N(),y=p(),cr=mt(),rI=f(),{hdb_errors:sI}=V(),nI="IS NULL",qe="There was a problem performing this search. Please check the logs and try again.";tI(j);var xn=class{constructor(t,r){if(y.isEmpty(t))throw I.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return I.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw I.error("Error thrown from checkEmptySQL in SQLSearch class method search."),I.error(s),new Error(qe)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw I.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),I.error(s),new Error(qe)}if(Object.keys(this.data).length===0)return I.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw I.error("Error thrown from processJoins in SQLSearch class method search."),I.error(s),new Error(qe)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw I.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),I.error(s),new Error(qe)}try{return t=await this._finalSQL(),t}catch(s){throw I.error("Error thrown from finalSQL in SQLSearch class method search."),I.error(s),new Error(qe)}}_getColumns(){let t=new Fn(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(uE(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ss.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(y.isEmpty(this.statement.where)){I.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Fn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new j.yy.LogicValue({value:s}):r.right instanceof j.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new j.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new j.yy.LogicValue({value:i}):s instanceof j.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new j.yy.NumValue({value:i}))});if(t){I.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Fn(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!y.isEmpty(rI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&ss.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await j.promise(r)}catch(r){throw I.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),I.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(uE(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(y.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(nI)>-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=ss.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await cr.getDataByHash(_);for(let E of _.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(qe)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let h=await cr.getDataByValue(E);for(let[d,A]of h)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,A[n.attribute]),this._setMergedHashAttribute(i,y.autoCast(d)))}))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),I.error(l),new Error(qe)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,h=l.length;E<h;E++){let d=l[E];_.search_attribute=d.attribute,_.search_value=d.search_value;let A=await cr.getDataByValue(_,d.operation);if(c)for(let[R]of A)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(R)));else for(let[R,M]of A)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,M[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,M[n.attribute]),this._setMergedHashAttribute(i,y.autoCast(R)))}}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),I.error(l),new Error(qe)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await cr.getDataByValue(_);if(c)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(E)));else for(let[E,h]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,y.autoCast(E)))}catch(l){throw I.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),I.error(l),new Error(qe)}}}_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 j.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 j.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new j.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 j.yy.FuncValue:new j.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(d=>{d.joinmode&&d.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(d.table);let A=d.joinmode+" JOIN ? AS "+(d.as?d.as:d.table.tableid);d.on&&(A+=" ON "+d.on.toString()),i.push(A),t.push(Object.values(this.data[`${d.table.databaseid_orig}_${d.table.as?d.table.as_orig:d.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(d=>{let A=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__hash_name,R=d.as?d.as_orig:d.tableid_orig;o.push({key:`'${R}.${A}'`,schema:d.databaseid_orig,table:d.as?d.as_orig:d.tableid_orig,keys:new Set}),r.push(`${d.as?d.as:d.tableid}.\`${A}\` AS "${R}.${A}"`),_[d.as?d.as_orig:d.tableid_orig]=this.data[`${d.databaseid_orig}_${d.as?d.as_orig:d.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(d=>{d.is_func?r.push(d.initial_select_column.toString()):d.initial_select_column.tableid?r.push(`${d.initial_select_column.tableid}.${d.initial_select_column.columnid} AS ${d.expression.columnid}`):r.push(`${d.initial_select_column.columnid} AS ${d.expression.columnid}`)}));let 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 h=[];try{let d=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,A=this._convertColumnsToIndexes(d,n);h=await j.promise(A,t),t=null}catch(d){throw I.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),I.error(d),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let d=0,A=h.length;d<A;d++){let R=h[d];o.forEach(M=>{R[M.key]!==null&&R[M.key]!==void 0&&M.keys.add(R[M.key])})}o.forEach(d=>{let A=Object.keys(this.data[`${d.schema}_${d.table}`].__merged_data),R=ss.difference(A,[...d.keys].map(M=>M.toString()));for(let M=0,W=R.length;M<W;M++){let x=R[M];delete this.data[`${d.schema}_${d.table}`].__merged_data[x]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Fn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=ss.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw I.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),I.error(i),new Error(qe)}}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 _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await cr.getDataByHash(_),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let h=o[l],d=c.get(h);for(let A=0;A<u;A++){let R=n.columns[A],M=d[R]===void 0?null:d[R];this.data[s].__merged_data[h].push(M)}}}}catch(r){throw I.error("Error thrown from getDataByHash function in SQLSearch class method getData."),I.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();I.trace(`Final SQL: ${n}`),s=await j.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),I.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw I.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),I.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 I.error(sI.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),I.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await cr.getDataByValue(i);for(let[_,c]of o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(o){throw I.error("There was an error when processing this SQL operation. Check your logs"),I.error(o),new Error(qe)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(xn,"SQLSearch");lE.exports=xn});var Vn=T((dB,hE)=>{"use strict";var iI=Zl();hE.exports={searchByConditions:cI,searchByHash:uI,searchByValue:lI,search:EI};var _o=mt(),dE=require("util"),aI=dE.callbackify(_o.searchByHash),oI=dE.callbackify(_o.searchByValue),_I=EE();async function cI(e){return _o.searchByConditions(e)}a(cI,"searchByConditions");function uI(e,t){try{aI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(uI,"searchByHash");function lI(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),oI(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(lI,"searchByValue");function EI(e,t){try{let r=new iI(e);r.validate(),new _I(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(EI,"search")});var uo=T((SB,TE)=>{"use strict";var dI=f(),TB=Dt();function co(e,t){let r=Object.create(null);if(t.length===1&&dI.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(co,"parseRow");function hI(e,t,r,s){let n=co(r,e);s.push(n)}a(hI,"searchAll");function TI(e,t,r,s){let n=co(r,e);s[t]=n}a(TI,"searchAllToMap");function SI(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(SI,"iterateDBI");function Gt(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(Gt,"pushResults");function fI(e,t,r,s,n,i){t.toString().endsWith(e)&&Gt(t,r,s,n,i)}a(fI,"endsWith");function mI(e,t,r,s,n,i){t.toString().includes(e)&&Gt(t,r,s,n,i)}a(mI,"contains");function AI(e,t,r,s,n,i){t>e&&Gt(t,r,s,n,i)}a(AI,"greaterThanCompare");function RI(e,t,r,s,n,i){t>=e&&Gt(t,r,s,n,i)}a(RI,"greaterThanEqualCompare");function gI(e,t,r,s,n,i){t<e&&Gt(t,r,s,n,i)}a(gI,"lessThanCompare");function NI(e,t,r,s,n,i){t<=e&&Gt(t,r,s,n,i)}a(NI,"lessThanEqualCompare");TE.exports={parseRow:co,searchAll:hI,searchAllToMap:TI,iterateDBI:SI,endsWith:fI,contains:mI,greaterThanCompare:AI,greaterThanEqualCompare:RI,lessThanCompare:gI,lessThanEqualCompare:NI,pushResults:Gt}});var Ft=T((gB,NE)=>{"use strict";var At=B(),mB=N(),Ne=Dt(),kn=ee(),Y=be().LMDB_ERRORS_ENUM,AB=p(),pI=f(),Yn=uo(),{parseRow:OI}=Yn,RB=require("lmdb"),{OVERFLOW_MARKER:SE,MAX_SEARCH_KEY_LENGTH:II}=kn;function fE(e,t,r,s=!1,n=void 0,i=void 0){return qt(e,t,r,(o,_)=>_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(fE,"iterateFullIndex");function ns(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){return qt(e,t,r,(l,E,h,d)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return d===r?(x.values=!1,E.getRange(x).map(F=>({value:F}))):E.getRange(x)})}a(ns,"iterateRangeBetween");function qt(e,t,r,s){let n=e.database||e,i=At.openDBI(n,r);i[kn.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&At.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let _=s(o,i,n,t);return _.transaction=o,e.database||(_.onDone=()=>{o.done()}),_}a(qt,"setupTransaction");function mE(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(SE)){if(!n)if(r)n=At.openDBI(e,r);else{let c=At.listDBIs(e);for(let u=0,l=c.length;u<l&&(n=At.openDBI(e,c[u]),!n[kn.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(mE,"getOverflowCheck");function bI(e,t,r,s=!1,n=void 0,i=void 0){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);return qt(e,t,t,(o,_,c)=>($n(r),r=is(c,r),_.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>OI(u.value,r))))}a(bI,"searchAll");function CI(e,t,r,s=!1,n=void 0,i=void 0){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);$n(r),r=is(e.database||e,r);let o=new Map;for(let{key:_,value:c}of fE(e,t,t,s,n,i))o.set(_,Yn.parseRow(c,r));return o}a(CI,"searchAllToMap");function yI(e,t,r=!1,s=void 0,n=void 0){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=fE(e,void 0,t,r,s,n),_=o.transaction,c=mE(_.database,_,void 0,t);for(let{key:u,value:l}of o){let E=c(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(yI,"iterateDBI");function MI(e,t){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);return At.statDBI(e,t).entryCount}a(MI,"countAll");function wI(e,t,r,s,n=!1,i=void 0,o=void 0){return Rt(e,r,s),qt(e,t,r,(_,c,u,l)=>(s=Ne.convertKeyValueToWrite(s),l===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(wI,"equals");function LI(e,t,r){return Rt(e,t,r),At.openDBI(e,t).getValuesCount(r)}a(LI,"count");function UI(e,t,r,s,n=!1,i=void 0,o=void 0){return Rt(e,r,s),qt(e,null,r,(_,c)=>{s=Ne.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let h of c.getKeys({transaction:_,start:s}))if(!h.startsWith(s)){E=h;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=c.getRange({transaction:_,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(h=>{let{key:d}=h;if(d!==E){if(d.toString().startsWith(s))return h;if(u===!0)return l.DONE}}),l.filter(h=>h)}else return l=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(UI,"startsWith");function DI(e,t,r,s,n=!1,i=void 0,o=void 0){return AE(e,t,r,s,n,i,o,!0)}a(DI,"endsWith");function AE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){return Rt(e,r,s),qt(e,null,r,(c,u,l,E)=>{let h=mE(l,c,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(d=>{let A=d.toString();return A.endsWith(SE)?u.getValues(d,{transaction:c}).map(R=>{let M=h(d,R);if(_?M.endsWith(s):M.includes(s))return{key:M,value:R}}).filter(R=>R):(_?A.endsWith(s):A.includes(s))?u[kn.DBI_DEFINITION_NAME].is_hash_attribute?{key:d,value:d}:u.getValues(d,{transaction:c}).map(R=>({key:d,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(AE,"contains");function PI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ns(e,t,r,s,c,n,i,o,!0,!1)}a(PI,"greaterThan");function HI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),ns(e,t,r,s,c,n,i,o,!1,!1)}a(HI,"greaterThanEqual");function BI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ns(e,t,r,c,s,n,i,o,!1,!0)}a(BI,"lessThan");function vI(e,t,r,s,n=!1,i=void 0,o=void 0){Rt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),ns(e,t,r,c,s,n,i,o,!1,!1)}a(vI,"lessThanEqual");function GI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(Ne.validateEnv(e),r===void 0)throw new Error(Y.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Y.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Y.END_VALUE_REQUIRED);if(s=Ne.convertKeyValueToWrite(s),n=Ne.convertKeyValueToWrite(n),s>n)throw new Error(Y.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ns(e,t,r,s,n,i,o,_)}a(GI,"between");function qI(e,t,r,s){Ne.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);if($n(r),r=is(n,r),s===void 0)throw new Error(Y.ID_REQUIRED);let o=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(o=Yn.parseRow(_,r)),o}a(qI,"searchByHash");function FI(e,t,r){Ne.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Y.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(FI,"checkHashExists");function xI(e,t,r,s,n=[]){return gE(e,t,r,s,n),RE(e,t,r,s,n).map(i=>i[1])}a(xI,"batchSearchByHash");function VI(e,t,r,s,n=[]){gE(e,t,r,s,n);let i=new Map;for(let[o,_]of RE(e,t,r,s,n))i.set(o,_);return i}a(VI,"batchSearchByHashToMap");function RE(e,t,r,s,n=[]){return qt(e,t,t,(i,o,_)=>{r=is(_,r);let c=r.length<3;return s.map(u=>{let l=_.dbis[t].get(u,{transaction:i,lazy:c});if(l)return[u,Yn.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(RE,"batchHashSearch");function gE(e,t,r,s,n){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.HASH_ATTRIBUTE_REQUIRED);if($n(r),s==null)throw new Error(Y.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Y.IDS_MUST_BE_ITERABLE)}a(gE,"initializeBatchSearchByHash");function $n(e){if(!Array.isArray(e))throw e===void 0?new Error(Y.FETCH_ATTRIBUTES_REQUIRED):new Error(Y.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a($n,"validateFetchAttributes");function Rt(e,t,r){if(Ne.validateEnv(e),t===void 0)throw new Error(Y.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Y.SEARCH_VALUE_REQUIRED);if(r?.length>II)throw new Error(Y.SEARCH_VALUE_TOO_LARGE)}a(Rt,"validateComparisonFunctions");function is(e,t){return t.length===1&&pI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=At.listDBIs(e)),t}a(is,"setGetWholeRowAttributes");NE.exports={searchAll:bI,searchAllToMap:CI,count:LI,countAll:MI,equals:wI,startsWith:UI,endsWith:DI,contains:AE,searchByHash:qI,setGetWholeRowAttributes:is,batchSearchByHash:xI,batchSearchByHashToMap:VI,checkHashExists:FI,iterateDBI:yI,greaterThan:PI,greaterThanEqual:HI,lessThan:BI,lessThanEqual:vI,between:GI}});var lr=T((pB,wE)=>{"use strict";var OE=Vn(),gt=N(),IE=Nn(),kI=require("lodash"),YI=rn(),bE=p(),{promisify:CE}=require("util"),G=f(),{handleHDBError:Kn,hdb_errors:$I}=V(),{HDB_ERROR_MSGS:Wn,HTTP_STATUS_CODES:yE}=$I,KI=$();KI.initSync();var pE=B(),WI=Ft(),{getSchemaPath:QI}=q(),as=CE(OE.searchByValue),JI=CE(OE.searchByHash),ur="name",ME="hash_attribute",lo="schema",XI="schema_table",ZI="attribute";wE.exports={describeAll:zI,describeTable:Qn,describeSchema:eb};async function zI(e){try{let t=bE.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:ur,search_value:G.WILDCARD_SEARCH_VALUE,get_attributes:[ur]},i=await as(n),o={},_={};for(let h of i)o[h.name]=!0,!t&&!s&&(_[h.name]=r[h.name].describe);let c={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:G.ID_ATTRIBUTE_STRING,search_value:G.WILDCARD_SEARCH_VALUE,get_attributes:[ME,G.ID_ATTRIBUTE_STRING,ur,lo]},u=await as(c),l=[];for(let h of u)try{let d;if(t||s)d=await Qn({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let A=r[h.schema].tables[h.name].attribute_permissions;d=await Qn({schema:h.schema,table:h.name},A)}d&&l.push(d)}catch(d){gt.error(d)}let E={};for(let h in l)t||s?(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],o[l[h].schema]&&delete o[l[h].schema]):_[l[h].schema]&&(E[l[h].schema]==null&&(E[l[h].schema]={}),E[l[h].schema][l[h].name]=l[h],o[l[h].schema]&&delete o[l[h].schema]);for(let h in o)t||s?E[h]={}:_[h]&&(E[h]={});return E}catch(t){return gt.error("Got an error in describeAll"),gt.error(t),Kn(new Error,Wn.DESCRIBE_ALL_ERR)}}a(zI,"describeAll");async function Qn(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=IE.describe_table(e);if(o)throw o;if(r===G.SYSTEM_SCHEMA_NAME)return global.hdb_schema[G.SYSTEM_SCHEMA_NAME][s];let _={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ur,search_value:s,hash_values:[],get_attributes:[G.WILDCARD_SEARCH_VALUE]},c=Array.from(await as(_));if(!c||c.length===0)throw Kn(new Error,Wn.TABLE_NOT_FOUND(e.schema,e.table),yE.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Kn(new Error,Wn.INVALID_TABLE_ERR(i));let l={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:XI,search_value:r+"."+s,get_attributes:[ZI]},E=Array.from(await as(l));E=kI.uniqBy(E,h=>h.attribute),n&&n.length>0&&(E=jI(n)),i.attributes=E,i.clustering_stream_name=YI.createNatsTableStreamName(u.schema,u.name);try{let h=QI(i.schema,i.name),d=await pE.openEnvironment(h,i.name),A=pE.statDBI(d,i.hash_attribute);i.record_count=A.entryCount;for(let{key:R}of WI.lessThan(d,i.hash_attribute,G.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(h){gt.warn(`unable to stat table dbi due to ${h}`)}}catch(l){gt.error(`There was an error getting attributes for table '${u.name}'`),gt.error(l)}return i}a(Qn,"descTable");function jI(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(jI,"getAttrsByPerms");async function eb(e){let t=IE.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:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:lo,search_value:s,hash_values:[],get_attributes:[ME,G.ID_ATTRIBUTE_STRING,ur,lo]},i=Array.from(await as(n));if(i&&i.length<1){let o={schema:G.SYSTEM_SCHEMA_NAME,table:G.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:G.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[ur]},_=Array.from(await JI(o));if(_&&_.length<1)throw Kn(new Error,Wn.SCHEMA_NOT_FOUND(e.schema),yE.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),bE.isEmpty(c)||c.describe){let u=await Qn({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){gt.error(`Error describing schema table '${e.schema}.${_}'`),gt.error(c)}})),o}}a(eb,"describeSchema")});var os=T((IB,HE)=>{var Er=Ht(),{callbackify:DE,promisify:tb}=require("util");HE.exports={setSchemaDataToGlobal:LE,getTableSchema:nb,getSystemSchema:ab,setSchemaDataToGlobalAsync:tb(LE)};var PE=lr(),rb=DE(PE.describeAll),sb=DE(PE.describeTable);function LE(e){rb(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Er),global.hdb_schema=r,e(null,null)})}a(LE,"setSchemaDataToGlobal");function UE(e,t){return e==="system"?Er[t]:global.hdb_schema[e][t]}a(UE,"returnSchema");function nb(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?ib(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,UE(e,t))}):r(null,UE(e,t))}a(nb,"getTableSchema");function ib(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Er:global.hdb_schema={system:Er},r();return}sb(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Er}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(ib,"setTableDataToGlobal");function ab(){return Er}a(ab,"getSystemSchema")});var _s=T((CB,GE)=>{"use strict";var Xn=Fa(),Le=p(),ob=require("util"),Zn=mt(),_b=os(),Eo=N(),{handleHDBError:Nt,hdb_errors:cb}=V(),{HTTP_STATUS_CODES:xt}=cb,ub=ob.promisify(_b.getTableSchema),lb="updated",BE="inserted",vE="upserted";GE.exports={insert:db,update:hb,upsert:Tb,validation:Eb,flush:Sb};async function Eb(e){if(Le.isEmpty(e))throw new Error("invalid update parameters defined.");if(Le.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Le.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ub(e.schema,e.table),r=Xn(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&Le.isEmptyOrZeroLength(_[s]))throw Eo.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!Le.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Eo.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!Le.isEmpty(_[s])&&_[s]!==""&&n.has(Le.autoCast(_[s]))&&(_.skip=!0),n.add(Le.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Eb,"validation");async function db(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xn(e);if(t)throw Nt(new Error,t.message,xt.BAD_REQUEST);let r=Le.checkSchemaTableExist(e.schema,e.table);if(r)throw Nt(new Error,r,xt.BAD_REQUEST);let s=await Zn.createRecords(e);return Jn(BE,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(db,"insertData");async function hb(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xn(e);if(t)throw Nt(new Error,t.message,xt.BAD_REQUEST);let r=Le.checkSchemaTableExist(e.schema,e.table);if(r)throw Nt(new Error,r,xt.BAD_REQUEST);let s=await Zn.updateRecords(e);return Le.isEmpty(s.existing_rows)?Jn(lb,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Jn(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(hb,"updateData");async function Tb(e){if(e.operation!=="upsert")throw Nt(new Error,"invalid operation, must be upsert",xt.INTERNAL_SERVER_ERROR);let t=Xn(e);if(t)throw Nt(new Error,t.message,xt.BAD_REQUEST);let r=Le.checkSchemaTableExist(e.schema,e.table);if(r)throw Nt(new Error,r,xt.BAD_REQUEST);try{let s=await Zn.upsertRecords(e);return Jn(vE,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Nt(s,null,null,Eo.ERR,n)}}a(Tb,"upsertData");function Jn(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===BE?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===vE?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Jn,"returnObject");function Sb(e){return Zn.flush(e.schema,e.table)}a(Sb,"flush")});var VE=T((MB,xE)=>{var fb=Pe(),ho=require("joi"),{hdb_schema_table:qE}=ar(),FE={schema:qE,table:qE},mb={date:ho.date().iso().required()},Ab={timestamp:ho.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};xE.exports=function(e,t){let r=t==="timestamp"?{...FE,...Ab}:{...FE,...mb},s=ho.object(r);return fb.validateBySchema(e,s)}});var KE=T((wB,$E)=>{var Rb=Pe(),kE=require("joi"),{hdb_schema_table:YE}=ar(),gb=kE.object({schema:YE,table:YE,hash_values:kE.array().required()});$E.exports=function(e){return Rb.validateBySchema(e,gb)}});var QE=T((LB,WE)=>{"use strict";var zn=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(zn,"InsertObject");var jn=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(jn,"NoSQLSeachObject");var ei=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(ei,"DeleteResponseObject");WE.exports={InsertObject:zn,NoSQLSeachObject:jn,DeleteResponseObject:ei}});var fo=T((DB,jE)=>{"use strict";var XE=VE(),Nb=KE(),ti=p(),JE=require("moment"),ZE=N(),{promisify:pb,callbackify:Ob}=require("util"),Vt=f(),Ib=os(),To=pb(Ib.getTableSchema),So=mt(),{DeleteResponseObject:bb}=QE(),{handleHDBError:pt,hdb_errors:Cb}=V(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:Ot}=Cb,yb="records successfully deleted",Mb=Ob(zE);jE.exports={delete:Mb,deleteRecord:zE,deleteFilesBefore:wb,deleteAuditLogsBefore:Lb};async function wb(e){let t=XE(e,"date");if(t)throw pt(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);if(!JE(e.date,JE.ISO_8601).isValid())throw pt(new Error,ri.INVALID_DATE,Ot.BAD_REQUEST,Vt.LOG_LEVELS.ERROR,ri.INVALID_DATE,!0);let s=ti.checkSchemaTableExist(e.schema,e.table);if(s)throw pt(new Error,s,Ot.NOT_FOUND,Vt.LOG_LEVELS.ERROR,s,!0);let n=await So.deleteRecordsBefore(e);if(await To(e.schema,e.table),ZE.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(wb,"deleteFilesBefore");async function Lb(e){let t=XE(e,"timestamp");if(t)throw pt(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw pt(new Error,ri.INVALID_VALUE("Timestamp"),Ot.BAD_REQUEST,Vt.LOG_LEVELS.ERROR,ri.INVALID_VALUE("Timestamp"),!0);let r=ti.checkSchemaTableExist(e.schema,e.table);if(r)throw pt(new Error,r,Ot.NOT_FOUND,Vt.LOG_LEVELS.ERROR,r,!0);let s=await So.deleteAuditLogsBefore(e);return await To(e.schema,e.table),ZE.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Lb,"deleteAuditLogsBefore");async function zE(e){let t=Nb(e);if(t)throw pt(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r=ti.checkSchemaTableExist(e.schema,e.table);if(r)throw pt(new Error,r,Ot.NOT_FOUND,Vt.LOG_LEVELS.ERROR,r,!0);try{await To(e.schema,e.table);let s=await So.deleteRecords(e);return ti.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${yb}`),s}catch(s){if(s.message===Vt.SEARCH_NOT_FOUND_MESSAGE){let n=new bb;return n.message=Vt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(zE,"deleteRecord")});var td=T((HB,ed)=>{var mo=Pe(),ne={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 Ub(e){return ne.password.presence=!0,ne.username.presence=!0,ne.role.presence=!0,ne.active.presence=!0,mo.validateObject(e,ne)}a(Ub,"addUserValidation");function Db(e){return ne.password.presence=!1,ne.username.presence=!0,ne.role.presence=!1,ne.active.presence=!1,mo.validateObject(e,ne)}a(Db,"alterUserValidation");function Pb(e){return ne.password.presence=!1,ne.username.presence=!0,ne.role.presence=!1,ne.active.presence=!1,mo.validateObject(e,ne)}a(Pb,"dropUserValidation");ed.exports={addUserValidation:Ub,alterUserValidation:Db,dropUserValidation:Pb}});var us=T((GB,Sd)=>{"use strict";var ad="username is required",od="nothing to update, must supply active, role or password to update",_d="password cannot be an empty string",cd="If role is specified, it cannot be empty.",ud="active must be true or false";Sd.exports={addUser:Vb,alterUser:kb,dropUser:$b,userInfo:Kb,listUsers:ni,listUsersExternal:Wb,setUsersToGlobal:cs,findAndValidateUser:Xb,getClusterUser:Zb,USERNAME_REQUIRED:ad,ALTERUSER_NOTHING_TO_UPDATE:od,EMPTY_PASSWORD:_d,EMPTY_ROLE:cd,ACTIVE_BOOLEAN:ud};var ld=_s(),Hb=fo(),Ro=Dn(),Ed=td(),dd=Vn(),go=ls(),pe=p(),hd=require("validate.js"),b=N(),{promisify:No}=require("util"),po=rn(),rd=f(),sd=Ut(),Bb=js(),vB=$(),vb=Wa(),Gb=Ht(),{handleHDBError:We,hdb_errors:qb}=V(),{HTTP_STATUS_CODES:Qe,AUTHENTICATION_ERROR_MSGS:Ao,HDB_ERROR_MSGS:dr}=qb,{UserEventMsg:Oo}=kt(),nd=require("lodash"),Td={username:!0,active:!0,role:!0,password:!0},id=new Map,si=No(dd.searchByValue),Fb=No(dd.searchByHash),xb=No(Hb.delete);async function Vb(e){let t=hd.cleanAttributes(e,Td),r=Ed.addUserValidation(t);if(r)throw We(new Error,r.message,Qe.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 si(s),n=n&&Array.from(n)}catch(c){throw b.error("There was an error searching for a role in add user"),b.error(c),c}if(!n||n.length<1)throw We(new Error,dr.ROLE_NAME_NOT_FOUND(t.role),Qe.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw We(new Error,dr.DUP_ROLES_FOUND(t.role),Qe.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=po.encrypt(t.password)),t.password=Ro.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await ld.insert(i)}catch(c){throw b.error("There was an error searching for a user."),b.error(c),c}b.debug(o);try{await cs()}catch(c){throw b.error("Got an error setting users to global"),b.error(c),c}if(o.skipped_hashes.length===1)throw We(new Error,dr.USER_ALREADY_EXISTS(t.username),Qe.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],go.signalUserChange(new Oo(process.pid)),`${_.username} successfully added`}a(Vb,"addUser");async function kb(e){let t=hd.cleanAttributes(e,Td);if(pe.isEmptyOrZeroLength(t.username))throw new Error(ad);if(pe.isEmptyOrZeroLength(t.password)&&pe.isEmptyOrZeroLength(t.role)&&pe.isEmptyOrZeroLength(t.active))throw new Error(od);if(!pe.isEmpty(t.password)&&pe.isEmptyOrZeroLength(t.password.trim()))throw new Error(_d);if(!pe.isEmpty(t.active)&&!pe.isBoolean(t.active))throw new Error(ud);let r=Yb(t.username);if(!pe.isEmpty(t.password)&&!pe.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=po.encrypt(t.password)),t.password=Ro.hash(t.password)),t.role==="")throw new Error(cd);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await si(i)||[])}catch(_){throw b.error("Got an error searching for a role."),b.error(_),_}if(!o||o.length===0){let _=dr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw b.error(_),We(new Error,_,Qe.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let _=dr.ALTER_USER_DUP_ROLES(t.role);throw b.error(_),We(new Error,_,Qe.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await ld.update(s)}catch(i){throw b.error("Error during update."),b.error(i),i}try{await cs()}catch(i){throw b.error("Got an error setting users to global"),b.error(i),i}return go.signalUserChange(new Oo(process.pid)),n}a(kb,"alterUser");function Yb(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Yb,"isClusterUser");async function $b(e){try{let t=Ed.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(pe.isEmpty(global.hdb_users.get(e.username)))throw We(new Error,dr.USER_NOT_EXIST(e.username),Qe.NOT_FOUND,void 0,void 0,!0);let s;try{s=await xb(r)}catch(n){throw b.error("Got an error deleting a user."),b.error(n),n}b.debug(s);try{await cs()}catch(n){throw b.error("Got an error setting users to global."),b.error(n),n}return go.signalUserChange(new Oo(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a($b,"dropUser");async function Kb(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 Fb(r)}catch(n){throw b.error("Got an error searching for a role."),b.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw b.error(r),r}return t}a(Kb,"userInfo");async function Wb(){let e;try{e=await ni()}catch(t){throw b.error("Got an error listing users."),b.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(Wb,"listUsersExternal");async function ni(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await si(e)}catch(o){throw b.error("Got an error searching for roles."),b.error(o),o}let r={};for(let o of t)r[o.id]=nd.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await si(s)}catch(o){throw b.error("Got an error searching for users."),b.error(o),o}let i=new Map;for(let o of n)o=nd.cloneDeep(o),o.role=r[o.role],Qb(o.role),i.set(o.username,o);return(await vb.getLicense()).enterprise?i:Jb(Array.from(i.values()))}catch(e){throw b.error("got an error listing users"),b.error(e),pe.errorizeMessage(e)}return null}a(ni,"listUsers");function Qb(e){try{if(!e){b.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Gb)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){b.error("Got an error trying to set system permissions."),b.error(t)}}a(Qb,"appendSystemTablesToRole");function Jb(e){try{if(b.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1)?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(n.username,n)):r.set(n.username,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(b.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return b.error("error filtering users."),b.error(t),new Map}}a(Jb,"nonEnterpriseFilter");async function cs(){try{let e=await ni();global.hdb_users=e}catch(e){throw b.error(e),e}}a(cs,"setUsersToGlobal");async function Xb(e,t,r=!0){global.hdb_users||await cs();let s=global.hdb_users.get(e);if(!s)throw We(new Error,Ao.GENERIC_AUTH_FAIL,Qe.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw We(new Error,Ao.USER_INACTIVE,Qe.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(id.get(t)===s.password)return n;if(Ro.validate(s.password,t))id.set(t,s.password);else throw We(new Error,Ao.GENERIC_AUTH_FAIL,Qe.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Xb,"findAndValidateUser");async function Zb(){let e=await ni(),t=Bb.getConfigFromFile(rd.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!pe.isEmpty(r)&&r?.role?.role===rd.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=po.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sd.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sd.SERVER_SUFFIX.ADMIN,r}a(Zb,"getClusterUser")});var ii=T((FB,Rd)=>{"use strict";var Yt=N(),Oe=f(),zb=Gl(),fd=os(),jb=lr(),eC=us(),{validateEvent:Ad}=kt(),Es=mt(),tC=require("process"),rC={[Oe.ITC_EVENT_TYPES.SCHEMA]:sC,[Oe.ITC_EVENT_TYPES.USER]:iC};async function sC(e){let t=Ad(e);if(t){Yt.error(t);return}Yt.trace("ITC schemaHandler received schema event:",e),await zb(e.message),await nC(e.message)}a(sC,"schemaHandler");async function nC(e){try{if(Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await jb.describeTable({schema:e.schema,table:e.table});break;default:fd.setSchemaDataToGlobal(md);break}else fd.setSchemaDataToGlobal(md)}catch(t){Yt.error(t)}}a(nC,"syncSchemaMetadata");function md(e){e&&Yt.error(e)}a(md,"handleErrorCallback");async function iC(e){try{Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Es.resetReadTxn(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Ad(e);if(t){Yt.error(t);return}Yt.trace(`ITC userHandler ${Oe.HDB_ITC_CLIENT_PREFIX}${tC.pid} received user event:`,e),await eC.setUsersToGlobal()}catch(t){Yt.error(t)}}a(iC,"userHandler");Rd.exports=rC});var kt=T(($B,Nd)=>{"use strict";var VB=N(),Io=p(),aC=f(),{ITC_ERRORS:ds}=be(),{parentPort:kB,threadId:oC,isMainThread:_C,workerData:YB}=require("worker_threads"),{onMessageFromWorkers:cC,broadcast:uC}=vn();Nd.exports={sendItcEvent:lC,validateEvent:gd,SchemaEventMsg:EC,UserEventMsg:dC};var ai;cC(e=>{ai=ai||ii(),gd(e),ai[e.type]&&ai[e.type](e)});function lC(e){!_C&&e.message&&(e.message.originator=oC),uC(e)}a(lC,"sendItcEvent");function gd(e){if(typeof e!="object")return ds.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Io.isEmpty(e.type))return ds.MISSING_TYPE;if(!e.hasOwnProperty("message")||Io.isEmpty(e.message))return ds.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Io.isEmpty(e.message.originator))return ds.MISSING_ORIGIN;if(aC.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ds.INVALID_EVENT(e.type)}a(gd,"validateEvent");function EC(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(EC,"SchemaEventMsg");function dC(e){this.originator=e}a(dC,"UserEventMsg")});var ls=T((QB,bd)=>{"use strict";var pd=f(),WB=p(),oi=N(),Od=El(),hr,{sendItcEvent:Id}=kt();function hC(e){try{oi.trace("signalSchemaChange called with message:",e),hr=hr||ii();let t=new Od(pd.ITC_EVENT_TYPES.SCHEMA,e);hr.schema(t),Id(t)}catch(t){oi.error(t)}}a(hC,"signalSchemaChange");function TC(e){try{oi.trace("signalUserChange called with message:",e),hr=hr||ii();let t=new Od(pd.ITC_EVENT_TYPES.USER,e);hr.user(t),Id(t)}catch(t){oi.error(t)}}a(TC,"signalUserChange");bd.exports={signalSchemaChange:hC,signalUserChange:TC}});var _i=T((XB,yd)=>{"use strict";var Cd=p(),SC=f(),fC=N(),mC=bn(),AC=In(),RC=ls(),{SchemaEventMsg:gC}=kt(),NC="already exists in";yd.exports=pC;async function pC(e,t,r){if(Cd.isEmptyOrZeroLength(r))return r;let s=[];Cd.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 OC(e,t.schema,t.name,i)})),n}a(pC,"lmdbCheckForNewAttributes");async function OC(e,t,r,s){let n=new AC(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await IC(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(NC))fC.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(OC,"createNewAttribute");async function IC(e){let t;return t=await mC(e),RC.signalSchemaChange(new gC(process.pid,SC.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(IC,"createAttribute")});var Tr=T((zB,Md)=>{"use strict";var ci=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(ci,"LMDBTransactionObject");Md.exports=ci});var Ld=T((ev,wd)=>{"use strict";var bC=Tr(),CC=f().OPERATIONS_ENUM,ui=class extends bC{constructor(t,r,s,n,i=void 0){super(CC.INSERT,r,s,n,i),this.records=t}};a(ui,"LMDBInsertTransactionObject");wd.exports=ui});var Dd=T((rv,Ud)=>{"use strict";var yC=Tr(),MC=f().OPERATIONS_ENUM,li=class extends yC{constructor(t,r,s,n,i,o=void 0){super(MC.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(li,"LMDBUpdateTransactionObject");Ud.exports=li});var Hd=T((nv,Pd)=>{"use strict";var wC=Tr(),LC=f().OPERATIONS_ENUM,Ei=class extends wC{constructor(t,r,s,n,i,o=void 0){super(LC.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(Ei,"LMDBUpsertTransactionObject");Pd.exports=Ei});var vd=T((av,Bd)=>{"use strict";var UC=Tr(),DC=f().OPERATIONS_ENUM,di=class extends UC{constructor(t,r,s,n,i=void 0){super(DC.DELETE,s,n,t,i),this.original_records=r}};a(di,"LMDBDeleteTransactionObject");Bd.exports=di});var hs=T((cv,xd)=>{"use strict";var _v=require("path"),Gd=B(),PC=Ld(),HC=Dd(),BC=Hd(),vC=vd(),Sr=ee(),qd=p(),{CONFIG_PARAMS:GC}=f(),Fd=$();Fd.initSync();var hi=f().OPERATIONS_ENUM,{getTransactionAuditStorePath:qC}=q();xd.exports=FC;async function FC(e,t){if(Fd.get(GC.LOGGING_AUDITLOG)===!1)return;let r=qC(e.schema,e.table),s=await Gd.openEnvironment(r,e.table,!0),n=xC(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Gd.initializeDBIs(s,Sr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Sr.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),qd.isEmpty(n.user_name)||s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Sr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(FC,"writeTransaction");function xC(e,t){let r=qd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===hi.INSERT)return new PC(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hi.UPDATE)return new HC(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hi.UPSERT)return new BC(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hi.DELETE)return new vC(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(xC,"createTransactionObject")});var bo=T((Ev,Vd)=>{"use strict";var VC=Cn(),lv=Mn(),Ts=f(),kC=Ln(),YC=ir().insertRecords,$C=B(),KC=N(),WC=_i(),{getSchemaPath:QC}=q(),JC=hs();Vd.exports=XC;async function XC(e){try{let{schema_table:t,attributes:r}=VC(e);kC(e,r,t.hash_attribute),e.schema!==Ts.SYSTEM_SCHEMA_NAME&&(r.includes(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ts.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ts.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await WC(e.hdb_auth_header,t,r),n=QC(e.schema,e.table),i=await $C.openEnvironment(n,e.table),o=await YC(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await JC(e,o)}catch(_){KC.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(XC,"lmdbCreateRecords")});var $d=T((hv,Yd)=>{"use strict";var kd=f(),ZC=bo(),zC=Mn(),jC=require("fs-extra"),{getSchemaPath:ey}=q();Yd.exports=ty;async function ty(e){let t=[{name:e.schema,createddate:Date.now()}],r=new zC(kd.SYSTEM_SCHEMA_NAME,kd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await ZC(r),await jC.mkdirp(ey(e.schema))}a(ty,"lmdbCreateSchema")});var Wd=T((Sv,Kd)=>{"use strict";var Ti=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Ti,"DeleteRecordsResponseObject");Kd.exports=Ti});var Mo=T((gv,Xd)=>{"use strict";var Qd=B(),Co=Dt(),yo=be().LMDB_ERRORS_ENUM,ry=ee(),Jd=N(),mv=p(),sy=require("lmdb"),ny=Wd(),iy=f(),{OVERFLOW_MARKER:Av,MAX_SEARCH_KEY_LENGTH:Rv}=ry,ay=iy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function oy(e,t,r,s){if(Co.validateEnv(e),t===void 0)throw new Error(yo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yo.IDS_REQUIRED):new Error(yo.IDS_MUST_BE_ITERABLE);try{let n=Qd.listDBIs(e);Qd.initializeDBIs(e,t,n);let i=new ny,o,_=[],c=[];for(let h=0,d=r.length;h<d;h++)try{o=r[h];let A=e.dbis[t].get(o);if(!A||s&&A[ay]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,sy.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let M=0;M<n.length;M++){let W=n[M];if(!A.hasOwnProperty(W)||W===t)continue;let x=e.dbis[W],F=A[W];if(F!=null)try{let Xe=Co.getIndexedValues(F);if(Xe)for(let Bs=0,M_=Xe.length;Bs<M_;Bs++)x.remove(Xe[Bs],o)}catch{Jd.warn(`cannot delete from attribute: ${W}, ${F}:${o}`)}}});_.push(R),c.push(o),i.original_records.push(A)}catch(A){Jd.warn(A),i.skipped.push(o)}let u=[],l=await Promise.all(_);for(let h=0,d=l.length;h<d;h++)l[h]===!0?i.deleted.push(c[h]):(i.skipped.push(c[h]),u.push(h));let E=0;for(let h=0;h<u.length;h++){let d=u[h];i.original_records.splice(d-E,1),E++}return i.txn_time=Co.getNextMonotonicTime(),i}catch(n){throw n}}a(oy,"deleteRecords");Xd.exports={deleteRecords:oy}});var Ss=T((pv,zd)=>{"use strict";var fr=p(),_y=Mo(),cy=B(),{getSchemaPath:uy}=q(),ly=hs(),Ey=N();zd.exports=dy;async function dy(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(fr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fr.isEmptyOrZeroLength(e.hash_values)&&!fr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];fr.isEmpty(c)||e.hash_values.push(c)}}if(fr.isEmptyOrZeroLength(e.hash_values))return Zd([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=uy(e.schema,e.table),i=await cy.openEnvironment(n,e.table),o=await _y.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await ly(e,o)}catch(_){Ey.error(`unable to write transaction due to ${_.message}`)}return Zd(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(dy,"lmdbDeleteRecords");function Zd(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(Zd,"createDeleteResponse")});var fs=T((bv,rh)=>{var jd=require("lodash"),eh=Pe(),D=require("joi"),hy=p(),{hdb_schema_table:Fe,checkValidTable:th}=ar(),{handleHDBError:Ty,hdb_errors:Sy}=V(),{HTTP_STATUS_CODES:fy}=Sy,Iv=D.object({schema:Fe,table:Fe,hash_values:D.array().min(0).items(D.alternatives(D.string(),D.number())).required(),get_attributes:D.array().min(1).items(Fe).required()}),my=D.object({schema:Fe,table:Fe,search_attribute:Fe,search_value:D.any().required(),get_attributes:D.array().min(1).items(Fe).required(),desc:D.bool(),limit:D.number().integer().min(1),offset:D.number().integer().min(0)}),Ay=D.object({schema:Fe,table:Fe,operator:D.string().valid("and","or").default("and").lowercase(),offset:D.number().integer().min(0),limit:D.number().integer().min(1),get_attributes:D.array().min(1).items(Fe).required(),conditions:D.array().min(1).items(D.object({search_attribute:Fe,search_type:D.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:D.when("search_type",{switch:[{is:"equals",then:D.any()},{is:"between",then:D.array().items(D.alternatives([D.string(),D.number()])).length(2)}],otherwise:D.alternatives(D.string(),D.number())}).required()})).required()});rh.exports=function(e,t){let r=null;switch(t){case"value":r=eh.validateBySchema(e,my);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(th("schema",e.schema)),i(th("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=eh.validateBySchema(e,Ay);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=hy.checkGlobalSchemaTable(e.schema,e.table);if(n)return Ty(new Error,n,fy.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=jd.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!jd.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var wo=T((yv,sh)=>{"use strict";var Ry=B(),gy=fs(),{getSchemaPath:Ny}=q();sh.exports=py;function py(e){let t=gy(e,"hashes");if(t)throw t;let r=Ny(e.schema,e.table);return Ry.openEnvironment(r,e.table)}a(py,"initialize")});var Lo=T((wv,nh)=>{"use strict";var Oy=Ft(),Iy=wo();nh.exports=by;async function by(e){let t=await Iy(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Oy.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(by,"lmdbGetDataByHash")});var fi=T((Uv,ih)=>{"use strict";var Si=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Si,"SearchByHashObject");ih.exports=Si});var oh=T((Hv,ah)=>{"use strict";var Pv=fi(),Cy=Ft(),yy=wo();ah.exports=My;async function My(e){let t=await yy(e),r=global.hdb_schema[e.schema][e.table];return Cy.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(My,"lmdbSearchByHash")});var at=T((vv,_h)=>{"use strict";var mi=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=_,this.reverse=c,this.limit=u,this.offset=l}};a(mi,"SearchObject");_h.exports=mi});var Ai=T((qv,hh)=>{"use strict";var ie=Ft(),wy=B(),Ly=p(),g=ee(),$t=f(),Uy=Ht(),ch=be().LMDB_ERRORS_ENUM,{compareKeys:mr}=require("ordered-binary"),{getSchemaPath:Dy}=q(),ot=$t.SEARCH_WILDCARDS;async function Py(e,t,r){let s;e.schema===$t.SYSTEM_SCHEMA_NAME?s=Uy[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dh(e,s.hash_attribute,r,t);return lh(e,n,s.hash_attribute,r)}a(Py,"prepSearch");async function lh(e,t,r,s){let n=Dy(e.schema,e.table),i=await wy.openEnvironment(n,e.table),o=Eh(i,e,t,r),_=o.transaction||i;if([g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,g.SEARCH_TYPES.SEARCH_ALL,g.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(By(e,r)===!1){let l=e.search_attribute;if(l===r)return s?uh(o,()=>!0):o.map(h=>({[r]:h.key}));let E=a(h=>({[r]:h.value,[l]:h.key}),"toObject");return s?uh(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?ie.batchSearchByHashToMap(_,r,e.get_attributes,u):ie.batchSearchByHash(_,r,e.get_attributes,u)}a(lh,"executeSearch");function Eh(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case g.SEARCH_TYPES.EQUALS:n=ie.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.CONTAINS:n=ie.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.ENDS_WITH:case g.SEARCH_TYPES._ENDS_WITH:n=ie.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.STARTS_WITH:case g.SEARCH_TYPES._STARTS_WITH:n=ie.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ie.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ie.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case g.SEARCH_TYPES.SEARCH_ALL:return ie.searchAll(e,s,t.get_attributes,o,_,c);case g.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ie.searchAllToMap(e,s,t.get_attributes,o,_,c);case g.SEARCH_TYPES.BETWEEN:n=ie.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case g.SEARCH_TYPES.GREATER_THAN:case g.SEARCH_TYPES._GREATER_THAN:n=ie.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.GREATER_THAN_EQUAL:case g.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ie.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.LESS_THAN:case g.SEARCH_TYPES._LESS_THAN:n=ie.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case g.SEARCH_TYPES.LESS_THAN_EQUAL:case g.SEARCH_TYPES._LESS_THAN_EQUAL:n=ie.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(Eh,"searchByType");function Hy(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case g.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case g.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case g.SEARCH_TYPES.ENDS_WITH:case g.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case g.SEARCH_TYPES.STARTS_WITH:case g.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case g.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return mr(i,s[0])>=0&&mr(i,s[1])<=0};case g.SEARCH_TYPES.GREATER_THAN:case g.SEARCH_TYPES._GREATER_THAN:return n=>mr(n[r],s)>0;case g.SEARCH_TYPES.GREATER_THAN_EQUAL:case g.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>mr(n[r],s)>=0;case g.SEARCH_TYPES.LESS_THAN:case g.SEARCH_TYPES._LESS_THAN:return n=>mr(n[r],s)<0;case g.SEARCH_TYPES.LESS_THAN_EQUAL:case g.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>mr(n[r],s)<=0;default:return Object.create(null)}}a(Hy,"filterByType");function uh(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(uh,"createMapFromIterable");function By(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(By,"checkToFetchMore");function dh(e,t,r,s){if(Ly.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),ot.indexOf(n)>-1)return r===!0?g.SEARCH_TYPES.SEARCH_ALL_TO_MAP:g.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ot[0])<0&&n.indexOf(ot[1])<0)return _===!0?r===!0?g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:g.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:g.SEARCH_TYPES.EQUALS;if(ot.indexOf(i)>=0&&ot.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),g.SEARCH_TYPES.CONTAINS;if(ot.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),g.SEARCH_TYPES.ENDS_WITH;if(ot.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),g.SEARCH_TYPES.STARTS_WITH;if(n.includes(ot[0])||n.includes(ot[1]))return g.SEARCH_TYPES.EQUALS;throw new Error(ch.UNKNOWN_SEARCH_TYPE)}else switch(s){case $t.VALUE_SEARCH_COMPARATORS.BETWEEN:return g.SEARCH_TYPES.BETWEEN;case $t.VALUE_SEARCH_COMPARATORS.GREATER:return g.SEARCH_TYPES.GREATER_THAN;case $t.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return g.SEARCH_TYPES.GREATER_THAN_EQUAL;case $t.VALUE_SEARCH_COMPARATORS.LESS:return g.SEARCH_TYPES.LESS_THAN;case $t.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return g.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ch.UNKNOWN_SEARCH_TYPE)}}a(dh,"createSearchTypeFromSearchObject");hh.exports={executeSearch:lh,createSearchTypeFromSearchObject:dh,prepSearch:Py,searchByType:Eh,filterByType:Hy}});var Sh=T((Vv,Th)=>{"use strict";var xv=at(),vy=fs(),Gy=p(),qy=f(),Fy=Ai();Th.exports=xy;function xy(e,t){if(!Gy.isEmpty(t)&&qy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vy(e,"value");if(s)throw s;let n=!0;return Fy.prepSearch(e,t,n)}a(xy,"lmdbGetDataByValue")});var Ar=T(($v,fh)=>{"use strict";var Yv=at(),Vy=fs(),ky=p(),Yy=f(),$y=Ai();fh.exports=Ky;async function Ky(e,t){if(!ky.isEmpty(t)&&Yy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Vy(e,"value");if(s)throw s;return $y.prepSearch(e,t,!1)}a(Ky,"lmdbSearchByValue")});var Ah=T((Qv,mh)=>{"use strict";var Wv=ee(),Ri=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Ri,"SearchByConditionsObject");var gi=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(gi,"SearchCondition");var Ni=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ni,"SortAttribute");mh.exports={SearchByConditionsObject:Ri,SearchCondition:gi,SortAttribute:Ni}});var Oh=T((Zv,ph)=>{"use strict";var Xv=Ah().SearchByConditionsObject,Wy=at(),Qy=fs(),Uo=Ft(),pi=ee(),Nh=Ai(),Jy=uo(),Xy=require("lodash"),{getSchemaPath:Zy}=q(),Rh=B(),{handleHDBError:zy,hdb_errors:jy}=V(),{HTTP_STATUS_CODES:eM}=jy,tM=1e8;ph.exports=rM;async function rM(e){let t=Qy(e,"conditions");if(t)throw zy(t,t.message,eM.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=Zy(e.schema,e.table),s=await Rh.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Rh.openDBI(s,u.search_attribute);let i=Xy.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===pi.SEARCH_TYPES.EQUALS?u.estimated_count=Uo.count(s,u.search_attribute,u.search_value):l===pi.SEARCH_TYPES.CONTAINS||l===pi.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=tM}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let _=await gh(o,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(Nh.filterByType),E=l.length,h=Uo.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(d=>u.get(d,{transaction:o,lazy:!0})),E>0&&(c=c.filter(d=>{for(let A=0;A<E;A++)if(!l[A](d))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(d=>Jy.parseRow(d,h))}else{for(let E=1;E<i.length;E++){let h=i[E],d=await gh(o,e,h,n.hash_attribute);_=_.concat(d)}let u=new Set,l=e.offset||0;_=_.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),c=Uo.batchSearchByHash(o,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{o.done()},c}a(rM,"lmdbSearchByConditions");async function gh(e,t,r,s){let n=new Wy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===pi.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Nh.searchByType(e,n,i,s).map(o=>o.value)}a(gh,"executeConditionSearch")});var ms=T((jv,Ih)=>{"use strict";var sM=f().OPERATIONS_ENUM,Oi=class{constructor(t,r,s,n=void 0){this.operation=sM.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Oi,"DeleteObject");Ih.exports=Oi});var Do=T((tG,Dh)=>{"use strict";var Mh=at(),wh=ms(),Lh=Ar(),Uh=Ss(),le=f(),bh=p(),Ch=B(),{getTransactionAuditStorePath:nM,getSchemaPath:iM}=q(),yh=N();Dh.exports=aM;async function aM(e){try{if(bh.isEmpty(global.hdb_schema[e.schema])||bh.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await oM(e),await _M(e);let t=iM(e.schema,e.table);try{await Ch.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")yh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=nM(e.schema,e.table);await Ch.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")yh.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(aM,"lmdbDropTable");async function oM(e){let t=new Mh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Lh(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 wh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Uh(n)}a(oM,"deleteAttributesFromSystem");async function _M(e){let t=new Mh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,le.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Lh(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 wh(le.SYSTEM_SCHEMA_NAME,le.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Uh(n)}catch(i){throw i}}a(_M,"dropTableFromSystem")});var Hh=T((sG,Ph)=>{"use strict";var cM=require("fs-extra"),uM=at(),lM=fi(),EM=ms(),dM=Do(),hM=Ss(),TM=Lo(),SM=Ar(),_t=f(),{getSchemaPath:fM}=q(),{handleHDBError:mM,hdb_errors:AM}=V(),{HDB_ERROR_MSGS:RM,HTTP_STATUS_CODES:gM}=AM;Ph.exports=NM;async function NM(e){let t;try{t=await pM(e.schema);let r=new uM(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_t.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[_t.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await SM(r));for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await dM(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new EM(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await hM(n);let i=fM(t);await cM.remove(i)}catch(r){throw r}}a(NM,"lmdbDropSchema");async function pM(e){let t=new lM(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[_t.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await TM(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw mM(new Error,RM.SCHEMA_NOT_FOUND(e),gM.NOT_FOUND,void 0,void 0,!0);return s}a(pM,"validateDropSchema")});var Po=T((iG,Bh)=>{"use strict";var Ii=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Ii,"CreateTableObject");Bh.exports=Ii});var Gh=T((_G,vh)=>{"use strict";var OM=require("fs-extra"),bi=B(),{getTransactionAuditStorePath:IM}=q(),Ho=ee(),oG=Po();vh.exports=bM;async function bM(e){let t;try{let r=IM(e.schema,e.table);await OM.mkdirp(r),t=await bi.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{bi.createDBI(t,Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bi.createDBI(t,Ho.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bi.createDBI(t,Ho.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(bM,"createTransactionsAuditEnvironment")});var Vh=T((uG,xh)=>{"use strict";var Bo=f(),qh=B(),CM=ir(),{getSystemSchemaPath:yM,getSchemaPath:MM}=q(),wM=Ht(),LM=bn(),vo=In(),UM=N(),DM=Gh(),qo=wM.hdb_table,Fh=[];for(let e=0;e<qo.attributes.length;e++)Fh.push(qo.attributes[e].attribute);xh.exports=PM;async function PM(e,t){let r=MM(t.schema,t.table),s=new vo(t.schema,t.table,Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new vo(t.schema,t.table,Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vo(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await qh.createEnvironment(r,t.table),e!==void 0){let o=await qh.openEnvironment(yM(),Bo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await CM.insertRecords(o,qo.hash_attribute,Fh,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Go(s),await Go(n),await Go(i)}await DM(t)}catch(o){throw o}}a(PM,"lmdbCreateTable");async function Go(e){try{await LM(e)}catch(t){UM.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Go,"createAttribute")});var Yh=T((EG,kh)=>{"use strict";var HM=Cn(),BM=Ln(),vM=_i(),As=f(),GM=ir().updateRecords,qM=B(),{getSchemaPath:FM}=q(),xM=hs(),VM=N();kh.exports=kM;async function kM(e){try{let{schema_table:t,attributes:r}=HM(e);BM(e,r,t.hash_attribute),e.schema!==As.SYSTEM_SCHEMA_NAME&&(r.includes(As.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(As.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(As.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(As.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vM(e.hdb_auth_header,t,r),n=FM(e.schema,e.table),i=await qM.openEnvironment(n,e.table),o=await GM(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await xM(e,o)}catch(_){VM.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(kM,"lmdbUpdateRecords")});var Kh=T((hG,$h)=>{"use strict";var YM=f().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=YM.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ci,"UpsertObject");$h.exports=Ci});var Qh=T((fG,Wh)=>{"use strict";var SG=Kh(),$M=Cn(),KM=Ln(),WM=_i(),Rs=f(),QM=ir().upsertRecords,JM=B(),{getSchemaPath:XM}=q(),ZM=hs(),zM=N(),{handleHDBError:jM,hdb_errors:ew}=V();Wh.exports=tw;async function tw(e){let t;try{t=$M(e)}catch(c){throw jM(c,c.message,ew.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;KM(e,s,r.hash_attribute),e.schema!==Rs.SYSTEM_SCHEMA_NAME&&(s.includes(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await WM(e.hdb_auth_header,r,s),i=XM(e.schema,e.table),o=await JM.openEnvironment(i,e.table),_=await QM(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await ZM(e,_)}catch(c){zM.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(tw,"lmdbUpsertRecords")});var eT=T((AG,jh)=>{"use strict";var rw=at(),Jh=p(),Xh=N(),sw=Ar(),Zh=f(),nw=Mo().deleteRecords,iw=B(),{getSchemaPath:aw}=q(),{promisify:ow}=require("util"),_w=ow(setTimeout),zh=1e4,cw=10;jh.exports=uw;async function uw(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jh.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 rw(e.schema,e.table,Zh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await sw(n,Zh.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw Xh.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return Jh.isEmptyOrZeroLength(s)?(Xh.trace("No records found to delete"),{message:"No records found to delete"}):await lw(e,s,t)}a(uw,"lmdbDeleteRecordsBefore");async function lw(e,t,r){let s=aw(e.schema,e.table),n=await iw.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=zh){let c=t.slice(o,o+zh),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await nw(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 _w(cw)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(lw,"chunkDeletes")});var rT=T((gG,tT)=>{"use strict";var yi=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(yi,"DeleteBeforeObject");tT.exports=yi});var nT=T((pG,sT)=>{"use strict";var Mi=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Mi,"DeleteAuditLogsBeforeResults");sT.exports=Mi});var oT=T((bG,aT)=>{"use strict";var Fo=B(),{getTransactionAuditStorePath:Ew}=q(),IG=rT(),gs=ee(),dw=p(),iT=nT(),hw=require("util").promisify,Tw=hw(setTimeout),Sw=1e4,fw=100;aT.exports=mw;async function mw(e){let t=Ew(e.schema,e.table),r=await Fo.openEnvironment(t,e.table,!0),s=Fo.listDBIs(r);Fo.initializeDBIs(r,gs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new iT;do n=await Aw(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 Tw(fw);while(n.transactions_deleted>0);return i}a(mw,"deleteAuditLogsBefore");async function Aw(e,t){let r=new iT;try{let s=e.dbis[gs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[gs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];dw.isEmpty(_)||(n=e.dbis[gs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[gs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Sw)break}return await n,r}catch(s){throw s}}a(Aw,"deleteTransactions")});var cT=T((yG,_T)=>{"use strict";var wi=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(wi,"DropAttributeObject");_T.exports=wi});var lT=T((LG,uT)=>{"use strict";var Rw=at(),gw=ms(),wG=cT(),Je=f(),Nw=p(),xo=B(),pw=Ht(),Ow=Ar(),Iw=Ss(),{getSchemaPath:bw}=q();uT.exports=Cw;async function Cw(e,t=!0){let r;e.schema===Je.SYSTEM_SCHEMA_NAME?r=pw[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Mw(e),n=bw(e.schema,e.table),i=await xo.openEnvironment(n,e.table);return t===!0&&await yw(e,i,r.hash_attribute),xo.dropDBI(i,e.attribute),s}a(Cw,"lmdbDropAttribute");async function yw(e,t,r){let s=xo.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(o,u,c)}await n}a(yw,"removeAttributeFromAllObjects");async function Mw(e){let t=new Rw(Je.SYSTEM_SCHEMA_NAME,Je.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await Ow(t)).filter(o=>o[Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Nw.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Je.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new gw(Je.SYSTEM_SCHEMA_NAME,Je.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Iw(i)}a(Mw,"dropAttributeFromSystem")});var fT=T((PG,ST)=>{"use strict";var Vo=B(),Rr=ee(),DG=Dt(),ko=f(),ET=p(),{getTransactionAuditStorePath:ww}=q(),Lw=Ft(),Li=Tr(),Uw=N();ST.exports=Dw;async function Dw(e){let t=ww(e.schema,e.table),r=await Vo.openEnvironment(t,e.table,!0),s=Vo.listDBIs(r);Vo.initializeDBIs(r,Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case ko.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return dT(r,e.search_values);case ko.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Hw(r,e.search_values,n);case ko.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Pw(r,e.search_values);default:return dT(r)}}a(Dw,"readAuditLog");function dT(e,t=[0,Date.now()]){ET.isEmpty(t[0])&&(t[0]=0),ET.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Li,n))}a(dT,"searchTransactionsByTimestamp");function Pw(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[Rr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,TT(e,i))}return Object.fromEntries(r)}a(Pw,"searchTransactionsByUsername");function Hw(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=Lw.equals(e,Rr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let h=Number(E);s.has(h)?s.get(h).push(u.toString()):s.set(h,[u.toString()])}}let n=Array.from(s.keys()),i=TT(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);hT(c,"records",r,l,o),hT(c,"original_records",r,l,o)}return Object.fromEntries(o)}a(Hw,"searchTransactionsByHashValues");function hT(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new Li(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new Li(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(hT,"loopRecords");function TT(e,t){let r=[];try{let s=e.dbis[Rr.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 Li,i);r.push(o)}}catch(i){Uw.warn(i)}return r}catch(s){throw s}}a(TT,"batchSearchTransactions")});var AT=T((BG,mT)=>{"use strict";var{getSchemaPath:Bw}=q(),vw=B();mT.exports={writeTransaction:Gw};async function Gw(e,t,r){let s=Bw(e,t);return(await vw.openEnvironment(s,t)).transaction(r)}a(Gw,"writeTransaction")});var pT=T((GG,NT)=>{"use strict";var{getSchemaPath:RT}=q(),gT=B();NT.exports={flush:qw,resetReadTxn:Fw};async function qw(e,t){return(await gT.openEnvironment(RT(e,t),t.toString())).flushed}a(qw,"flush");async function Fw(e,t){try{(await gT.openEnvironment(RT(e,t),t.toString())).resetReadTxn()}catch{}}a(Fw,"resetReadTxn")});var bT=T((FG,IT)=>{"use strict";var xw=N(),{handleHDBError:Vw}=V(),kw=pa(),Yw=bn(),$w=bo(),Kw=$d(),Ww=Ss(),Qw=Lo(),Jw=oh(),Xw=Sh(),Zw=Ar(),zw=Oh(),jw=Hh(),eL=Vh(),tL=Yh(),rL=Qh(),sL=eT(),nL=oT(),iL=Do(),aL=lT(),oL=fT(),_L=AT(),OT=pT(),Ui=class extends kw{async searchByConditions(t){return zw(t)}async getDataByHash(t){return await Qw(t)}async searchByHash(t){return await Jw(t)}async getDataByValue(t,r){return await Xw(t,r)}async searchByValue(t){return await Zw(t)}async createSchema(t){return await Kw(t)}async dropSchema(t){return await jw(t)}async createTable(t,r){return await eL(t,r)}async dropTable(t){return await iL(t)}async createAttribute(t){return await Yw(t)}async createRecords(t){return await $w(t)}async updateRecords(t){return await tL(t)}async upsertRecords(t){try{return await rL(t)}catch(r){throw Vw(r,null,null,xw.ERR,r)}}async deleteRecords(t){return await Ww(t)}async deleteRecordsBefore(t){return await sL(t)}async dropAttribute(t){return await aL(t)}async deleteAuditLogsBefore(t){return await nL(t)}async readAuditLog(t){return await oL(t)}writeTransaction(t,r,s){return _L.writeTransaction(t,r,s)}flush(t,r){return OT.flush(t,r)}resetReadTxn(t,r){return OT.resetReadTxn(t,r)}};a(Ui,"LMDBBridge");IT.exports=Ui});var mt=T((VG,yT)=>{"use strict";var cL=bT(),uL=pa(),lL=$();lL.initSync();var CT;function EL(){return CT instanceof uL?CT:new cL}a(EL,"getBridge");yT.exports=EL()});var wT=T((YG,MT)=>{"use strict";var dL=mt();MT.exports={writeTransaction:hL};function hL(e,t,r){return dL.writeTransaction(e,t,r)}a(hL,"writeTransaction")});var Yo=T((KG,TL)=>{TL.exports={name:"harperdb",version:"4.1.3",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.3",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.21.0","fastify-plugin":"~4.5.1","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.6",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.18.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var Ls=T((tq,QT)=>{"use strict";var X=$();X.initSync();var SL=require("fs-extra"),fL=require("semver"),bs=require("path"),{monotonicFactory:mL}=require("ulidx"),Jo=mL(),AL=require("util"),UT=require("child_process"),RL=AL.promisify(UT.exec),gL=UT.spawn,L=Ut(),P=f(),Di=p(),It=N(),Pi=rn(),NL=wT(),Ns=js(),{encode:Wo,decode:Xo}=require("msgpackr"),{isEmpty:Kt}=Di,DT=us(),PT=12e10,{connect:pL,StorageType:HT,RetentionPolicy:BT,AckPolicy:Zo,DeliverPolicy:Cs,DiscardPolicy:OL,NatsConnection:WG,JetStreamManager:QG,JetStreamClient:JG,StringCodec:XG,JSONCodec:IL,createInbox:zo,StreamSource:ZG,headers:bL,toJsMsg:vT,nuid:zG,JetStreamOptions:jG,ErrorCode:LT,nanos:eq}=require("nats"),{PACKAGE_ROOT:CL}=f(),yL=Yo(),GT=IL(),ML="clustering",wL=yL.engines[L.NATS_SERVER_NAME],LL=bs.join(CL,"dependencies"),Qo=bs.join(LL,`${process.platform}-${process.arch}`,L.NATS_BINARY_NAME),$o,Ko,ps,Os,Is,xe;QT.exports={runCommand:qT,checkNATSServerInstalled:UL,createConnection:jo,getConnection:Hi,getJetStreamManager:ys,getJetStream:FT,getNATSReferences:Ie,getServerList:PL,createLocalStream:e_,listStreams:xT,deleteLocalStream:HL,getServerConfig:Ms,listRemoteStreams:BL,viewStream:vL,viewStreamIterator:GL,publishToStream:qL,createWorkQueueStream:FL,addSourceToWorkStream:kT,request:xL,removeSourceFromWorkStream:$T,reloadNATS:t_,reloadNATSHub:VL,reloadNATSLeaf:kL,extractServerName:YT,requestErrorHandler:YL,updateWorkStream:$L,createLocalTableStream:KT,createTableStreams:KL,purgeTableStream:WT,purgeSchemaTableStreams:WL,getStreamInfo:QL,updateLocalStreams:XL,closeConnection:DL,getJsmServerName:ws,addNatsMsgHeader:VT};async function qT(e,t=void 0){let{stdout:r,stderr:s}=await RL(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
7
  `,"")}a(qT,"runCommand");async function UL(){try{await SL.access(Qo)}catch{return!1}let e=await qT(`${Qo} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return fL.eq(t,wL)}a(UL,"checkNATSServerInstalled");async function jo(e,t,r,s=!0,n="127.0.0.1"){return pL({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:X.get(P.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:X.get(P.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:X.get(P.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(jo,"createConnection");async function DL(){xe&&(await xe.drain(),xe=void 0)}a(DL,"closeConnection");async function Hi(){if(!xe){let e=await DT.getClusterUser();if(Kt(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=X.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);xe=await jo(t,e.username,e.decrypt_hash)}return xe}a(Hi,"getConnection");async function ys(){if(Os)return Os;Kt(xe)&&await Hi();let{domain:e}=Ms(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Kt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Os=await xe.jetstreamManager({domain:e}),Os}a(ys,"getJetStreamManager");async function FT(){if(Is)return Is;Kt(xe)&&await Hi();let{domain:e}=Ms(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Kt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Is=xe.jetstream({domain:e}),Is}a(FT,"getJetStream");async function Ie(){let e=xe||await Hi(),t=Os||await ys(),r=Is||await FT();return{connection:e,jsm:t,js:r}}a(Ie,"getNATSReferences");async function PL(e){let t=X.get(P.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await DT.getClusterUser(),n=await jo(t,r,s),i=zo(),o=n.subscribe(i),_=[],c,u=(async()=>{for await(let l of o){let E=GT.decode(l.data);E.response_time=Date.now()-c,_.push(E)}})();return c=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Di.async_set_timeout(e),await o.drain(),await n.close(),await u,_}a(PL,"getServerList");async function e_(e,t){let{jsm:r}=await Ie(),s=X.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=X.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=X.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:HT.File,retention:BT.Limits,subjects:t,discard:OL.Old,duplicate_window:PT,max_msgs:n,max_bytes:i,max_age:s})}a(e_,"createLocalStream");async function xT(){let{jsm:e}=await Ie(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(xT,"listStreams");async function HL(e){let{jsm:t}=await Ie();await t.streams.delete(e)}a(HL,"deleteLocalStream");async function BL(e){let{connection:t}=await Ie(),r=[],s=zo(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(GT.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(BL,"listRemoteStreams");async function vL(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ie(),i=Jo(),o=[],_={ack_policy:Zo.None,durable_name:i,deliver_subject:i,deliver_policy:Cs.All};t&&(_.deliver_policy=Cs.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let l of u){let E=vT(l),h=Xo(E.data),d={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:h};E.headers&&(d.origin=E.headers.get(L.MSG_HEADERS.ORIGIN),d.nats_msg_id=E.headers.get(L.MSG_HEADERS.NATS_MSG_ID)),o.push(d),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(vL,"viewStream");async function*GL(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ie(),i=Jo(),o={ack_policy:Zo.None,durable_name:i,deliver_subject:i,deliver_policy:Cs.All};t&&(o.deliver_policy=Cs.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let _={timeout:2e3};r&&(_.max=r);let c=await n.subscribe(i,_);for await(let u of c){let l=vT(u),E=Xo(l.data);E[0]||(E=[E]);for(let h of E){let d={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:h};l.headers&&(d.origin=l.headers.get(L.MSG_HEADERS.ORIGIN),d.nats_msg_id=l.headers.get(L.MSG_HEADERS.NATS_MSG_ID)),yield d}c.getPending()===1&&l.info.pending===0&&c.stop()}await s.consumers.delete(e,i)}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return[];throw _}}a(GL,"viewStreamIterator");async function qL(e,t,r,s){It.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;X.get(P.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(L.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=VT(s,r);let{js:i}=await Ie(),o=await ws(),_=`${e}.${o}`;try{It.trace(`publishToStream publishing to subject: ${_}, data:`,s),n&&await i.publish(_,Wo(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")It.trace(`publishToStream creating stream: ${t}`),await e_(t,[_]),n&&await i.publish(_,Wo(s),{headers:r});else throw c}}a(qL,"publishToStream");function VT(e,t){t===void 0&&(t=bL());let r=X.get(P.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(L.MSG_HEADERS.NATS_MSG_ID)){let s=Di.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Jo()}`;t.append(L.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(L.MSG_HEADERS.ORIGIN)||t.append(L.MSG_HEADERS.ORIGIN,r),t}a(VT,"addNatsMsgHeader");function Ms(e){e=e.toLowerCase();let t=bs.join(X.get(P.CONFIG_PARAMS.ROOTPATH),ML);if(e===P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Kt(Ko)&&(Ko={port:Ns.getConfigFromFile(P.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ns.getConfigFromFile(P.CONFIG_PARAMS.CLUSTERING_NODENAME)+L.SERVER_SUFFIX.HUB,config_file:L.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:bs.join(t,L.PID_FILES.HUB),hdb_nats_path:t}),Ko;if(e===P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Kt($o)&&($o={port:Ns.getConfigFromFile(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ns.getConfigFromFile(P.CONFIG_PARAMS.CLUSTERING_NODENAME)+L.SERVER_SUFFIX.LEAF,config_file:L.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ns.getConfigFromFile(P.CONFIG_PARAMS.CLUSTERING_NODENAME)+L.SERVER_SUFFIX.LEAF,pid_file_path:bs.join(t,L.PID_FILES.LEAF),hdb_nats_path:t}),$o;It.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ms,"getServerConfig");async function FL(e){let{jsm:t}=await Ie(),r=await ws();try{await t.streams.add({name:e.stream_name,storage:HT.File,retention:BT.Workqueue,duplicate_window:PT,subjects:[`${L.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:Zo.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Cs.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(FL,"createWorkQueueStream");async function kT(e,t,r){let{jsm:s}=await Ie(),n=await s.streams.info(t),i=YT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Pi.createNatsTableStreamName(_,c),l=i===e,E,h,d=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,M=n.config.sources.length;R<M;R++)if(E=n.config.sources[R],h=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){d=!0;break}if(d===!0){if(E.opt_start_time===o)return;n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${L.SUBJECT_PREFIXES.TXN}.>`};l||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(kT,"addSourceToWorkStream");function YT(e){return e.split(".")[1]}a(YT,"extractServerName");async function $T(e,t,r){let{schema:s,table:n}=r,i=Pi.createNatsTableStreamName(s,n),{jsm:o}=await Ie(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config)}a($T,"removeSourceFromWorkStream");async function xL(e,t,r=2e3,s=zo()){if(!Di.isObject(t))throw new Error("data param must be an object");let n=Wo(t),{connection:i}=await Ie(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return Xo(_.data)}a(xL,"request");function t_(e){return new Promise(async(t,r)=>{let s=gL(Qo,["--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(t_,"reloadNATS");async function VL(){let{pid_file_path:e}=Ms(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await t_(e)}a(VL,"reloadNATSHub");async function kL(){let{pid_file_path:e}=Ms(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await t_(e)}a(kL,"reloadNATSLeaf");function YL(e,t,r){let s;switch(e.code){case LT.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case LT.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(YL,"requestErrorHandler");async function $L(e,t){let r=t+L.SERVER_SUFFIX.LEAF;await NL.writeTransaction(P.SYSTEM_SCHEMA_NAME,P.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await kT(r,L.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await $T(r,L.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a($L,"updateWorkStream");async function KT(e,t){let r=Pi.createNatsTableStreamName(e,t),s=await ws(),n=JL(e,t,s);await e_(r,[n])}a(KT,"createLocalTableStream");async function KL(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await KT(s,n)}}a(KL,"createTableStreams");async function WT(e,t){if(X.get(P.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Pi.createNatsTableStreamName(e,t),{jsm:s}=await Ie();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")It.warn(r);else throw r}}a(WT,"purgeTableStream");async function WL(e,t){if(X.get(P.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await WT(e,t[r])}a(WL,"purgeSchemaTableStreams");async function QL(e){return(await ys()).streams.info(e)}a(QL,"getStreamInfo");function JL(e,t,r){return`${L.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(JL,"createSubjectName");async function ws(){if(ps)return ps;if(ps=(await ys())?.nc?.info?.server_name,ps===void 0)throw new Error("Unable to get jetstream manager server name");return ps}a(ws,"getJsmServerName");async function XL(){let e=await ys(),t=await ws(),r=await xT();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=ZL(s),_=i.split(".");if(!(_[_.length-1]===t&&!o)){if(n.name===L.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${L.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;It.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===L.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${L.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;It.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(L.WORK_QUEUE_CONSUMER_NAMES.stream_name,L.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${L.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");It.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(XL,"updateLocalStreams");function ZL(e){let{config:t}=e,r=!1;if(t.name===L.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===L.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=X.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=X.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=X.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(ZL,"updateStreamLimits")});var jT=T((sq,zT)=>{"use strict";var ZT=require("joi"),{string:Us,boolean:JT,array:zL}=ZT.types(),XT=f(),jL=Pe();zT.exports=eU;function eU(e){let t=ZT.object({operation:Us.valid(XT.OPERATIONS_ENUM.ADD_NODE,XT.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Us.required(),subscriptions:zL.items({schema:Us.required(),table:Us.required(),hash_attribute:Us.optional(),subscribe:JT.required(),publish:JT.required()}).min(1).required()});return jL.validateBySchema(e,t)}a(eU,"updateRemoteSourceValidator")});var tS=T((iq,eS)=>{var tU=Pe(),rU={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};eS.exports=function(e){return tU.validateObject(e,rU)}});var r_=T((aq,rS)=>{"use strict";var sU=f().OPERATIONS_ENUM,Bi=class{constructor(t,r,s,n=void 0){this.operation=sU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Bi,"UpdateObject");rS.exports=Bi});var nS=T((_q,sS)=>{"use strict";var nU={OPERATION:"operation",REFRESH:"refresh"},vi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(vi,"JWTTokens");var Gi=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Gi,"JWTRSAKeys");sS.exports={JWTTokens:vi,TOKEN_TYPE_ENUM:nU,JWTRSAKeys:Gi}});var cS=T((uq,_S)=>{"use strict";var Ps=require("jsonwebtoken"),s_=require("fs-extra"),n_=p(),Ue=f(),{handleHDBError:Ee,hdb_errors:iU}=V(),{HTTP_STATUS_CODES:de,AUTHENTICATION_ERROR_MSGS:he}=iU,Ds=N(),iS=Dn(),o_=us(),aU=_s().update,oU=r_(),_U=ls(),{UserEventMsg:cU}=kt(),bt=$();bt.initSync();var i_=require("path"),{JWTTokens:uU,JWTRSAKeys:lU,TOKEN_TYPE_ENUM:qi}=nS(),EU=bt.get(Ue.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?bt.get(Ue.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",dU=bt.get(Ue.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?bt.get(Ue.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Fi="RS256",a_;_S.exports={createTokens:hU,validateOperationToken:SU,refreshOperationToken:TU,validateRefreshToken:oS};async function hU(e){if(n_.isEmpty(e)||typeof e!="object")throw Ee(new Error,he.INVALID_AUTH_OBJECT,de.BAD_REQUEST,void 0,void 0,!0);if(n_.isEmpty(e.username))throw Ee(new Error,he.USERNAME_REQUIRED,de.BAD_REQUEST,void 0,void 0,!0);if(n_.isEmpty(e.password))throw Ee(new Error,he.PASSWORD_REQUIRED,de.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await o_.findAndValidateUser(e.username,e.password),!t)throw Ee(new Error,he.INVALID_CREDENTIALS,de.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw Ds.error(h),Ee(new Error,he.INVALID_CREDENTIALS,de.UNAUTHORIZED,void 0,void 0,!0)}let r=await xi(),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 aS(i,r.private_key,r.passphrase),_=await Ps.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:dU,algorithm:Fi,subject:qi.REFRESH}),c=iS.hash(_),u=new oU(Ue.SYSTEM_SCHEMA_NAME,Ue.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await aU(u)}catch(h){Ds.error(h),E=h}if(E!==void 0||l.skipped_hashes.length>0)throw Ee(new Error,he.REFRESH_TOKEN_SAVE_FAILED,de.INTERNAL_SERVER_ERROR);return _U.signalUserChange(new cU(process.pid)),new uU(o,_)}a(hU,"createTokens");async function aS(e,t,r){return await Ps.sign(e,{key:t,passphrase:r},{expiresIn:EU,algorithm:Fi,subject:qi.OPERATION})}a(aS,"signOperationToken");async function xi(){if(a_===void 0)try{let e=i_.join(bt.getHdbBasePath(),Ue.LICENSE_KEY_DIR_NAME,Ue.JWT_ENUM.JWT_PASSPHRASE_NAME),t=i_.join(bt.getHdbBasePath(),Ue.LICENSE_KEY_DIR_NAME,Ue.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=i_.join(bt.getHdbBasePath(),Ue.LICENSE_KEY_DIR_NAME,Ue.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await s_.readFile(e)).toString(),n=(await s_.readFile(t)).toString(),i=(await s_.readFile(r)).toString();a_=new lU(i,n,s)}catch(e){throw Ds.error(e),Ee(new Error,he.NO_ENCRYPTION_KEYS,de.INTERNAL_SERVER_ERROR)}return a_}a(xi,"getJWTRSAKeys");async function TU(e){if(!e)throw Ee(new Error,he.INVALID_BODY,de.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ee(new Error,he.REFRESH_TOKEN_REQUIRED,de.BAD_REQUEST,void 0,void 0,!0);await oS(e.refresh_token);let t=await xi(),r=await Ps.decode(e.refresh_token);return{operation_token:await aS({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(TU,"refreshOperationToken");async function SU(e){try{let t=await xi(),r=await Ps.verify(e,t.public_key,{algorithms:Fi,subject:qi.OPERATION});return await o_.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ds.warn(t),t.name&&t.name==="TokenExpiredError"?Ee(new Error,he.TOKEN_EXPIRED,de.FORBIDDEN):Ee(new Error,he.INVALID_TOKEN,de.UNAUTHORIZED)}}a(SU,"validateOperationToken");async function oS(e){let t;try{let r=await xi(),s=await Ps.verify(e,r.public_key,{algorithms:Fi,subject:qi.REFRESH});t=await o_.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ds.warn(r),r.name&&r.name==="TokenExpiredError"?Ee(new Error,he.TOKEN_EXPIRED,de.FORBIDDEN):Ee(new Error,he.INVALID_TOKEN,de.UNAUTHORIZED)}if(!iS.validate(t.refresh_token,e))throw Ee(new Error,he.INVALID_TOKEN,de.UNAUTHORIZED);return t}a(oS,"validateRefreshToken")});var dS=T((dq,ES)=>{"use strict";var fU=tS(),gr=require("passport"),mU=require("passport-local").Strategy,AU=require("passport-http").BasicStrategy,RU=require("util"),gU=us(),lS=RU.callbackify(gU.findAndValidateUser),Eq=be(),NU=f(),uS=cS();gr.use(new mU(function(e,t,r){lS(e,t,r)}));gr.use(new AU(function(e,t,r){lS(e,t,r)}));gr.serializeUser(function(e,t){t(null,e)});gr.deserializeUser(function(e,t){t(null,e)});function pU(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":gr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===NU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?uS.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):uS.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:gr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(pU,"authorize");function OU(e,t){let r=fU(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(OU,"checkPermissions");ES.exports={authorize:pU,checkPermissions:OU}});var Yi=T((Tq,hS)=>{"use strict";var Vi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Vi,"Node");var ki=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(ki,"NodeSubscription");hS.exports={Node:Vi,NodeSubscription:ki}});var SS=T((fq,TS)=>{"use strict";var IU=f().OPERATIONS_ENUM,$i=class{constructor(t,r,s,n=void 0){this.operation=IU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a($i,"UpsertObject");TS.exports=$i});var mS=T((Aq,fS)=>{"use strict";var Ki=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Ki,"RemotePayloadObject");var Wi=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(Wi,"RemotePayloadSubscription");fS.exports={RemotePayloadObject:Ki,RemotePayloadSubscription:Wi}});var RS=T((gq,AS)=>{"use strict";var Qi=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(Qi,"TableSizeObject");AS.exports=Qi});var NS=T((pq,gS)=>{"use strict";var bU=RS(),CU=ee(),Nr=B(),yU=N(),{getSchemaPath:MU,getTransactionAuditStorePath:wU}=q();gS.exports=LU;async function LU(e){let t=new bU;try{let r=MU(e.schema,e.name),s=await Nr.openEnvironment(r,e.name),n=Nr.statDBI(s,e.hash_attribute),i=wU(e.schema,e.name),o=await Nr.openEnvironment(i,e.name,!0),_=Nr.statDBI(o,CU.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Nr.environmentDataSize(r,e.name),u=await Nr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){yU.warn(`unable to stat table dbi due to ${r}`)}return t}a(LU,"lmdbGetTableSize")});var OS=T((Iq,pS)=>{"use strict";var Ji=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(Ji,"SystemInformationObject");pS.exports=Ji});var MS=T((Cq,yS)=>{"use strict";var UU=require("fs-extra"),DU=require("path"),ae=require("systeminformation"),Ct=N(),__=f(),PU=NS(),bS=lr(),{getThreadInfo:IS}=vn(),CS=$();CS.initSync();var HU=OS(),{openEnvironment:BU}=B(),{getSchemaPath:vU}=q(),Xi;yS.exports={getHDBProcessInfo:E_,getNetworkInfo:h_,getDiskInfo:d_,getMemoryInfo:l_,getCPUInfo:u_,getTimeInfo:c_,getSystemInformation:T_,systemInformation:GU,getTableSize:S_,getMetrics:f_};function c_(){return ae.time()}a(c_,"getTimeInfo");async function u_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...l}=await ae.cpu();l.cpu_speed=await ae.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:h,raw_currentload_irq:d,raw_currentload_nice:A,raw_currentload_system:R,raw_currentload_user:M,cpus:W,...x}=await ae.currentLoad();return x.cpus=[],W.forEach(F=>{let{raw_load:Xe,raw_load_idle:Bs,raw_load_irq:M_,raw_load_nice:dP,raw_load_system:hP,raw_load_user:TP,...Ef}=F;x.cpus.push(Ef)}),l.current_load=x,l}catch(e){return Ct.error(`error in getCPUInfo: ${e}`),{}}}a(u_,"getCPUInfo");async function l_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ae.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ct.error(`error in getMemoryInfo: ${e}`),{}}}a(l_,"getMemoryInfo");async function E_(){let e={core:[],clustering:[]};try{let t=await ae.processes(),r;try{r=Number.parseInt(await UU.readFile(DU.join(CS.get(__.CONFIG_PARAMS.ROOTPATH),__.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===__.NODE_ERROR_CODES.ENOENT)Ct.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}return t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)}),e}catch(t){return Ct.error(`error in getHDBProcessInfo: ${t}`),e}}a(E_,"getHDBProcessInfo");async function d_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ae.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ae.fsStats();return e.read_write=u,e.size=await ae.fsSize(),e}catch(t){return Ct.error(`error in getDiskInfo: ${t}`),e}}a(d_,"getDiskInfo");async function h_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ae.networkInterfaceDefault(),e.latency=await ae.inetChecksite("google.com"),(await ae.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...h}=s;e.interfaces.push(h)}),(await ae.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e}catch(t){return Ct.error(`error in getNetworkInfo: ${t}`),e}}a(h_,"getNetworkInfo");async function T_(){if(Xi!==void 0)return Xi;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ae.osInfo();e=_;let c=await ae.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Xi=e,Xi}catch(t){return Ct.error(`error in getSystemInformation: ${t}`),e}}a(T_,"getSystemInformation");async function S_(){let e=[],t=await bS.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await PU(s));return e}a(S_,"getTableSize");async function f_(){let e=await bS.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=vU(r,n),_=(await BU(i,n)).getStats();s[n]={puts:_.puts,deletes:_.deletes,txns:_.txns,pageFlushes:_.pageFlushes,writes:_.writes,pagesWritten:_.pagesWritten,timeDuringTxns:_.timeDuringTxns,timeStartTxns:_.timeStartTxns,timePageFlushes:_.timePageFlushes,timeSync:_.timeSync}}catch(i){Ct.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(f_,"getMetrics");async function GU(e){let t=new HU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await T_(),t.time=c_(),t.cpu=await u_(),t.memory=await l_(),t.disk=await d_(),t.network=await h_(),t.harperdb_processes=await E_(),t.table_size=await S_(),t.metrics=await f_(),t.threads=await IS(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await T_();break;case"time":t.time=c_();break;case"cpu":t.cpu=await u_();break;case"memory":t.memory=await l_();break;case"disk":t.disk=await d_();break;case"network":t.network=await h_();break;case"harperdb_processes":t.harperdb_processes=await E_();break;case"table_size":t.table_size=await S_();break;case"database_metrics":case"metrics":t.metrics=await f_();break;case"threads":t.threads=await IS();break;default:break}return t}a(GU,"systemInformation")});var LS=T((Lq,wS)=>{"use strict";var Mq=require("fs-extra"),wq=N();wS.exports={version:qU,printVersion:xU,nodeVersion:FU};var yt=Yo();function qU(){if(yt)return yt.version}a(qU,"version");function FU(){if(yt&&yt.engines&&yt.engines["preferred-node"])return yt.engines["preferred-node"]}a(FU,"nodeVersion");function xU(){yt&&console.log(`HarperDB Version ${yt.version}`)}a(xU,"printVersion")});var Zi=T((Hq,HS)=>{"use strict";var VU=_s(),m_=p(),A_=require("util"),Wt=f(),US=$();US.initSync();var kU=dS(),DS=Vn(),{Node:Dq,NodeSubscription:Pq}=Yi(),YU=fi(),$U=SS(),{RemotePayloadObject:KU,RemotePayloadSubscription:WU}=mS(),{handleHDBError:QU,hdb_errors:JU}=V(),{HTTP_STATUS_CODES:XU,HDB_ERROR_MSGS:ZU}=JU,zU=at(),jU=MS(),eD=LS(),tD=A_.promisify(kU.authorize),rD=A_.promisify(DS.searchByHash),sD=A_.promisify(DS.searchByValue);HS.exports={authHeaderToUser:nD,isEmpty:iD,getNodeRecord:aD,upsertNodeRecord:oD,buildNodePayloads:_D,checkClusteringEnabled:cD,getAllNodeRecords:uD,getSystemInfo:lD,reverseSubscription:PS};async function nD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await tD(t,null),e}a(nD,"authHeaderToUser");function iD(e){return e==null}a(iD,"isEmpty");async function aD(e){let t=new YU(Wt.SYSTEM_SCHEMA_NAME,Wt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return rD(t)}a(aD,"getNodeRecord");async function oD(e){let t=new $U(Wt.SYSTEM_SCHEMA_NAME,Wt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return VU.upsert(t)}a(oD,"upsertNodeRecord");function PS(e){if(m_.isEmpty(e.subscribe)||m_.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(PS,"reverseSubscription");function _D(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,l=m_.getTableHashAttribute(c,u),{subscribe:E,publish:h}=PS(_),d=new WU(c,u,l,h,E,_.start_time);n.push(d)}return new KU(r,t,n,s)}a(_D,"buildNodePayloads");function cD(){if(!US.get(Wt.CONFIG_PARAMS.CLUSTERING_ENABLED))throw QU(new Error,ZU.CLUSTERING_NOT_ENABLED,XU.BAD_REQUEST,void 0,void 0,!0)}a(cD,"checkClusteringEnabled");async function uD(){let e=new zU(Wt.SYSTEM_SCHEMA_NAME,Wt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await sD(e))}a(uD,"getAllNodeRecords");async function lD(){let e=await jU.getSystemInformation();return{hdb_version:eD.version(),node_version:e.node_version,platform:e.platform}}a(lD,"getSystemInfo")});var GS=T((vq,vS)=>{"use strict";var g_=lr(),{hdb_errors:R_}=V();vS.exports={checkSchemaExists:BS,checkSchemaTableExists:ED,schema_describe:g_};async function BS(e){if(!global.hdb_schema[e])try{let t=await g_.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return R_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(BS,"checkSchemaExists");async function ED(e,t){let r=await BS(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await g_.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return R_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return R_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(ED,"checkSchemaTableExists")});var kS=T((Fq,VS)=>{"use strict";var pr=Nn(),Qt=GS(),dD=N(),hD=require("uuid").v4,qq=require("clone"),Or=ls(),Jt=f(),TD=require("util"),Xt=mt(),{handleHDBError:Te,hdb_errors:SD}=V(),{HDB_ERROR_MSGS:zi,HTTP_STATUS_CODES:Se}=SD,{SchemaEventMsg:Ir}=kt(),qS=Ls();VS.exports={createSchema:fD,createSchemaStructure:FS,createTable:mD,createTableStructure:xS,createAttribute:pD,dropSchema:AD,dropTable:RD,dropAttribute:gD};async function fD(e){try{let t=await FS(e);return Or.signalSchemaChange(new Ir(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(fD,"createSchema");async function FS(e){let t=pr.schema_object(e);if(t)throw Te(t,t.message,Se.BAD_REQUEST,void 0,void 0,!0);if(!await Qt.checkSchemaExists(e.schema))throw Te(new Error,zi.SCHEMA_EXISTS_ERR(e.schema),Se.BAD_REQUEST,Jt.LOG_LEVELS.ERROR,zi.SCHEMA_EXISTS_ERR(e.schema),!0);return await Xt.createSchema(e),`schema '${e.schema}' successfully created`}a(FS,"createSchemaStructure");async function mD(e){let t=await xS(e);return Or.signalSchemaChange(new Ir(process.pid,e.operation,e.schema,e.table)),t}a(mD,"createTable");async function xS(e){let t=pr.create_table_object(e);if(t)throw Te(t,t.message,Se.BAD_REQUEST,void 0,void 0,!0);pr.validateTableResidence(e.residence);let r=await Qt.checkSchemaExists(e.schema);if(r)throw Te(new Error,r,Se.NOT_FOUND,Jt.LOG_LEVELS.ERROR,r,!0);if(!await Qt.checkSchemaTableExists(e.schema,e.table))throw Te(new Error,zi.TABLE_EXISTS_ERR(e.schema,e.table),Se.BAD_REQUEST,Jt.LOG_LEVELS.ERROR,zi.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:hD(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Xt.createTable(n,e);else throw Te(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Se.BAD_REQUEST);else await Xt.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(xS,"createTableStructure");async function AD(e){let t=pr.schema_object(e);if(t)throw Te(t,t.message,Se.BAD_REQUEST,void 0,void 0,!0);let r=await Qt.checkSchemaExists(e.schema);if(r)throw Te(new Error,r,Se.NOT_FOUND,Jt.LOG_LEVELS.ERROR,r,!0);let s=await Qt.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Xt.dropSchema(e),Or.signalSchemaChange(new Ir(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await qS.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(AD,"dropSchema");async function RD(e){let t=pr.table_object(e);if(t)throw Te(t,t.message,Se.BAD_REQUEST,void 0,void 0,!0);let r=await Qt.checkSchemaTableExists(e.schema,e.table);if(r)throw Te(new Error,r,Se.NOT_FOUND,Jt.LOG_LEVELS.ERROR,r,!0);return await Xt.dropTable(e),Or.signalSchemaChange(new Ir(process.pid,e.operation,e.schema,e.table)),await qS.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(RD,"dropTable");async function gD(e){let t=pr.attribute_object(e);if(t)throw Te(t,t.message,Se.BAD_REQUEST,void 0,void 0,!0);let r=await Qt.checkSchemaTableExists(e.schema,e.table);if(r)throw Te(new Error,r,Se.NOT_FOUND,Jt.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Te(new Error,"You cannot drop a hash attribute",Se.BAD_REQUEST,void 0,void 0,!0);if(Jt.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Te(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Se.BAD_REQUEST,void 0,void 0,!0);try{return await Xt.dropAttribute(e),ND(e),Or.signalSchemaChange(new Ir(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw dD.error(`Got an error deleting attribute ${TD.inspect(e)}.`),s}}a(gD,"dropAttribute");function ND(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(ND,"dropAttributeFromGlobal");async function pD(e){return await Xt.createAttribute(e),Or.signalSchemaChange(new Ir(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(pD,"createAttribute")});var Hs=T((Vq,YS)=>{"use strict";var ji=class{constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};a(ji,"UpdateRemoteResponseObject");YS.exports=ji});var JS=T((Yq,QS)=>{"use strict";var OD=jT(),Zt=N(),N_=Ut(),ID=f(),p_=Zi(),$S=Ls(),KS=kS(),bD=Po(),{Node:CD,NodeSubscription:WS}=Yi(),O_=Hs(),I_=p(),yD=$(),{cloneDeep:MD}=require("lodash");QS.exports=wD;async function wD(e){try{let t=OD(e);if(t)return Zt.error(`Validation error in updateRemoteSource: ${t.message}`),new O_(N_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=MD(await p_.getNodeRecord(s)),_=!I_.isEmptyOrZeroLength(o);o=_?o[0]:o,_&&Zt.trace(`Existing record found for ${s}, updating records subscriptions`);for(let u=0,l=r.length;u<l;u++){let E=r[u],h=E.schema,d=E.table;if(I_.doesSchemaExist(h)||(Zt.trace(`updateRemoteSource creating schema: ${h}`),await KS.createSchema({operation:"create_schema",schema:h})),!I_.doesTableExist(h,d)){Zt.trace(`updateRemoteSource creating table: ${d} in schema: ${h}`);let A=new bD(h,d,E.hash_attribute);await KS.createTable(A),Zt.trace(`Creating local stream for ${h}.${d}`),await $S.createLocalTableStream(h,d)}if(await $S.updateWorkStream(E,s),_){let A=!1;for(let R=0,M=o.subscriptions.length;R<M;R++){let W=o.subscriptions[R];if(W.schema===h&&W.table===d){W.publish=E.publish,W.subscribe=E.subscribe,A=!0;break}}A||o.subscriptions.push(new WS(h,d,E.publish,E.subscribe))}else i.push(new WS(h,d,E.publish,E.subscribe))}_||(o=new CD(s,i,void 0),Zt.trace(`No record found for ${s}, creating a new one`));let c=Object.create({});return Object.assign(c,o),c.system_info=n,await p_.upsertNodeRecord(c),new O_(N_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${yD.get(ID.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await p_.getSystemInfo())}catch(t){Zt.error(t);let r=t.message?t.message:t;return new O_(N_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(wD,"updateRemoteSource")});var jS=T((Kq,zS)=>{"use strict";var ZS=require("joi"),{string:XS}=ZS.types(),LD=f(),UD=Pe();zS.exports=DD;function DD(e){let t=ZS.object({operation:XS.valid(LD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:XS.required()});return UD.validateBySchema(e,t)}a(DD,"removeRemoteSourceValidator")});var tf=T((Qq,ef)=>{"use strict";var PD=jS(),ea=N(),ta=Ut(),b_=f(),HD=Zi(),BD=p(),vD=Ls(),GD=$(),ra=Hs(),{NodeSubscription:qD}=Yi(),FD=ms(),xD=fo(),VD=GD.get(b_.CONFIG_PARAMS.CLUSTERING_NODENAME);ef.exports=kD;async function kD(e){try{let t=PD(e);if(t)return ea.error(`Validation error in removeRemoteSource: ${t.message}`),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await HD.getNodeRecord(r);if(BD.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return ea.error(i),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let _=s.subscriptions[i];ea.trace(`remove remote source removing subscription: ${_.schema}.${_.table} for node: ${r}`);let c=new qD(_.schema,_.table,!1,!1);await vD.updateWorkStream(c,r)}let n=new FD(b_.SYSTEM_SCHEMA_NAME,b_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xD.deleteRecord(n),new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${VD} successfully removed node '${r}'.`)}catch(t){ea.error(t);let r=t.message?t.message:t;return new ra(ta.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(kD,"removeRemoteSource")});var of=T((Xq,af)=>{"use strict";var sa=N(),na=f(),rf=Ut(),sf=$(),YD=p(),nf=Hs(),$D=Zi(),KD=r_(),WD=_s();af.exports=QD;async function QD(e){try{sa.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=YD.ms_to_time(t),s=new JD(sf.get(na.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),sf.get(na.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await $D.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new KD(na.SYSTEM_SCHEMA_NAME,na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await WD.update(i)}catch(n){sa.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return sa.trace("getRemoteSourceConfig response:",s),new nf(rf.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){sa.error(t);let r=t.message?t.message:t;return new nf(rf.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(QD,"getRemoteSourceConfig");function JD(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(JD,"ConfigResponseObject")});var lf=T((zq,uf)=>{"use strict";var _f=$();_f.initSync();var cf=Ls(),Cr=N(),br=f(),C_=Ut(),XD=JS(),ZD=tf(),zD=of(),jD=Hs(),{encode:eP,decode:tP}=require("msgpackr"),rP=os(),sP=lr(),nP=require("util"),iP=f(),{isMainThread:aP,parentPort:oP}=require("worker_threads");vn();var _P=nP.promisify(rP.setSchemaDataToGlobal),y_=_f.get(br.CONFIG_PARAMS.CLUSTERING_NODENAME);uf.exports=cP;async function cP(){try{Cr.notify("Starting reply service."),await _P();let e=await cf.getConnection(),t=`${y_}.__request__`,r=e.subscribe(t,{queue:y_});await uP(r)}catch(e){Cr.error(e)}}a(cP,"initialize");async function uP(e){for await(let t of e){let r=tP(t.data);Cr.trace("Received request:",r);let s;switch(r.operation){case br.OPERATIONS_ENUM.ADD_NODE:case br.OPERATIONS_ENUM.UPDATE_NODE:s=await XD(r);break;case br.OPERATIONS_ENUM.REMOVE_NODE:s=await ZD(r);break;case br.OPERATIONS_ENUM.CLUSTER_STATUS:s=await zD(r);break;case br.OPERATIONS_ENUM.DESCRIBE_ALL:s=await lP();break;default:let n=`node '${y_}' reply service received unrecognized request operation`;Cr.error(n),s=new jD(C_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}Cr.trace(s),t.respond(eP(s))}}a(uP,"handleRequest");async function lP(){try{return{status:C_.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await sP.describeAll()}}catch(e){return Cr.error(e),{status:C_.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(lP,"getRemoteDescribeAll");aP||oP.on("message",async e=>{let{type:t}=e;t===iP.ITC_EVENT_TYPES.SHUTDOWN&&cf.closeConnection()})});var EP=lf();(async()=>{try{await EP()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();