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,7 +2,7 @@
2
2
  `,oU={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},cU=["*","%"],_U="unauthorized_access",uU="func_val",lU={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},EU={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},dU={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"},hU={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},fU={HTTP:"http"},SU={STOPPED:"stopped",ONLINE:"online"},TU="3.x.x";rf.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:Kh,HDB_SUPPORT_URL:Qh,HDB_PRICING_URL:$C,SUPPORT_HELP_MSG:YC,LICENSE_HELP_MSG:Jh,HDB_PROC_NAME:$h,HDB_PROC_DESCRIPTOR:yu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Fa,CLUSTERING_HUB_PROC_DESCRIPTOR:qa,SYSTEM_SCHEMA_NAME:uy,HASH_FOLDER_NAME:ly,HDB_HOME_DIR_NAME:Ey,UPDATE_FILE_NAME:Sy,LICENSE_KEY_DIR_NAME:hy,BOOT_PROPS_FILE_NAME:fy,JOB_TYPE_ENUM:Yy,JOB_STATUS_ENUM:Hy,SYSTEM_TABLE_NAMES:Ly,SYSTEM_TABLE_HASH_ATTRIBUTES:My,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:qy,S3_BUCKET_AUTH_KEYS:Fy,VALID_SQL_OPS_ENUM:Gy,GEO_CONVERSION_ENUM:Vy,HDB_SETTINGS_NAMES:Zh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:ky,SERVICE_ACTIONS_ENUM:xy,CLUSTER_MESSAGE_TYPE_ENUM:Ky,CLUSTER_CONNECTION_DIRECTION_ENUM:Wy,CLUSTER_EVENTS_DEFS_ENUM:Xy,PERIOD_REGEX:ZC,DOUBLE_PERIOD_REGEX:jC,UNICODE_PERIOD:ey,FORWARD_SLASH_REGEX:ty,UNICODE_FORWARD_SLASH:ry,ESCAPED_FORWARD_SLASH_REGEX:sy,ESCAPED_PERIOD_REGEX:ny,ESCAPED_DOUBLE_PERIOD_REGEX:iy,REG_KEY_FILE_NAME:vy,RESTART_TIMEOUT_MS:Ry,HDB_FILE_PERMISSIONS:Ay,SCHEMA_DIR_NAME:Oy,TRANSACTIONS_DIR_NAME:Ny,LIMIT_COUNT_NAME:Iy,ID_ATTRIBUTE_STRING:by,INSERT_MODULE_ENUM:yy,UPGRADE_JSON_FIELD_NAMES_ENUM:Uy,RESTART_CODE:Ty,RESTART_CODE_NUM:my,CLUSTER_OPERATIONS:$n,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Py,HDB_INTERNAL_SC_CHANNEL_PREFIX:it,INTERNAL_SC_CHANNELS:Dy,CLUSTERING_MESSAGE_TYPES:nU,HDB_FILE_SUFFIX:dy,BLOB_FOLDER_NAME:py,HDB_TRASH_DIR:gy,ORIGINATOR_SET_VALUE:iU,LICENSE_VALUES:Jy,RAM_ALLOCATION_ENUM:zy,STORAGE_TYPES_ENUM:Qy,TIME_STAMP_NAMES_ENUM:ef,TIME_STAMP_NAMES:tU,PERMS_UPDATE_RELEASE_TIMESTAMP:rU,SEARCH_NOT_FOUND_MESSAGE:KC,SEARCH_ATTRIBUTE_NOT_FOUND:WC,LICENSE_ROLE_DENIED_RESPONSE:QC,LICENSE_MAX_CONNS_REACHED:JC,BASIC_LICENSE_MAX_NON_CU_ROLES:Wh,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:kC,VALUE_SEARCH_COMPARATORS:tf,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:sU,LICENSE_FILE_NAME:By,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Zy,NEW_LINE:aU,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:XC,MOMENT_DAYS_TAG:ay,API_TURNOVER_SEC:oy,LOOPBACK:zC,CODE_EXTENSION:Ha,WILDCARD_SEARCH_VALUE:cy,NODE_ERROR_CODES:jy,JAVASCRIPT_EXTENSION:kh,PERMS_CRUD_ENUM:oU,UNAUTHORIZED_PERMISSION_NAME:_U,SEARCH_WILDCARDS:cU,FUNC_VAL:uU,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:lU,JWT_ENUM:EU,CLUSTERING_FLAG:eU,ITC_EVENT_TYPES:dU,CUSTOM_FUNCTION_PROC_NAME:Yh,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ba,SERVICES:hU,THREAD_TYPES:fU,MEM_SETTING_KEY:_y,HDB_RESTART_SCRIPT:yC,PROCESS_DESCRIPTORS:PC,SERVICE_SERVERS:FC,SERVICE_SERVERS_CWD:Cu,PROCESS_DESCRIPTORS_VALIDATE:HC,LAUNCH_SERVICE_SCRIPTS:GC,LOG_LEVELS:BC,PROCESS_NAME_ENV_PROP:wy,LOG_NAMES:vC,PM2_PROCESS_STATUSES:SU,CONFIG_PARAM_MAP:jh,CONFIG_PARAMS:S,HDB_CONFIG_FILE:bC,HDB_DEFAULT_CONFIG_FILE:wC,ROLE_TYPES_ENUM:xC,BOOT_PROP_PARAMS:zh,INSTALL_PROMPTS:Cy,HDB_ROOT_DIR_NAME:CC,CLUSTERING_PROCESSES:qC,FOREGROUND_PID_FILE:MC,PACKAGE_ROOT:Dr,PRE_4_0_0_VERSION:TU,SCHEMAS_PARAM_CONFIG:$y,HDB_PID_FILE:DC}});var Uu=f((W3,af)=>{"use strict";var sf=require("minimist");af.exports=mU;function mU(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=nf(process.env),s=nf(sf(process.argv))):(r=process.env,s=sf(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(mU,"assignCMDENVVariables");function nf(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(nf,"objKeysToLowerCase")});var I=f((J3,mf)=>{"use strict";var js=require("fs-extra"),{workerData:RU,threadId:AU}=require("worker_threads"),Pr=require("path"),_f=require("yaml"),uf=require("properties-reader"),pe=T(),of=Uu(),pU=require("os"),{PACKAGE_ROOT:Mu}=T(),lf={};for(let e in console)lf[e]=console[e];var $e={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ef={STDOUT:"stdOut",STDERR:"stdErr"},gU=Pr.join(Mu,"logs"),OU=Pr.join(Mu,"config/yaml/",pe.HDB_DEFAULT_CONFIG_FILE),NU=1e4,ur,lr,ke,Ga,xa,Va,Kn,Yn;Yn===void 0&&df();mf.exports={notify:Sf,fatal:Tf,error:Wn,warn:Bu,info:ka,debug:vu,trace:Pu,setLogLevel:LU,log_level:ke,loggerWithTag:IU,suppressLogging:bU,initLogSettings:df,setupConsoleLogging:hf,logCustomLevel:yU,closeLogFile:Du,getLogFilePath:()=>Va,OUTPUTS:Ef};function df(e=!1){try{if(Yn===void 0||e){Du();let t=UU();Yn=uf(t);let r=of(["ROOTPATH"]);({level:ke,config_log_path:xa,to_file:ur,to_stream:lr}=MU(r.ROOTPATH?Pr.join(r.ROOTPATH,pe.HDB_CONFIG_FILE):Yn.get("settings_path"))),Ga=pe.LOG_NAMES.HDB,Va=Pr.join(xa,Ga)}}catch(t){if(Yn=void 0,t.code===pe.NODE_ERROR_CODES.ENOENT){let r=of(Object.keys(pe.CONFIG_PARAM_MAP),!0);for(let o in r){let c=pe.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let _=r[o];if(c===pe.CONFIG_PARAMS.LOGGING_LEVEL){ke=_;continue}if(c===pe.CONFIG_PARAMS.LOGGING_STDSTREAMS){lr=_;continue}c===pe.CONFIG_PARAMS.LOGGING_FILE&&(ur=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=DU();ur=ur===void 0?n:ur,ur=cf(ur),lr=lr===void 0?i:lr,lr=cf(lr),ke=ke===void 0?s:ke,xa=gU,Ga=pe.LOG_NAMES.INSTALL,Va=Pr.join(xa,Ga);return}throw Wn("Error initializing log settings"),Wn(t),t}hf()}a(df,"initLogSettings");var Lu=!0;function hf(){Zs("error",Wn),Zs("warn",Bu),Zs("log",ka),Zs("info",ka),Zs("debug",vu),Zs("trace",Pu)}a(hf,"setupConsoleLogging");function Zs(e,t){console[e]=function(...r){if(Lu&&t(...r),!/PM2 log:|App \[/.test(r[0]))return lf[e](...r)}}a(Zs,"logConsole");function IU(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Sf),fatal:r(Tf),error:r(Wn),warn:r(Bu),info:r(ka),debug:r(vu),trace:r(Pu)};function r(s){return function(...n){return s(t,...n)}}}a(IU,"loggerWithTag");function bU(e){try{Lu=!1,e()}finally{Lu=!0}}a(bU,"suppressLogging");var wU=RU?.name?.replace(/ /g,"-")||"main";function Er(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),o.unshift(_||wU+"/"+AU);c<n;c++){let u=t[c];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
3
  `}a(Er,"createLogRecord");function Qn(e){ur&&ff(e),lr&&process.stdout.write(e)}a(Qn,"logStdOut");function $a(e){ur&&ff(e),lr&&process.stderr.write(e)}a($a,"logStdErr");function ff(e){CU(),js.appendFileSync(Kn,e)}a(ff,"logToFile");function Du(){try{js.closeSync(Kn)}catch{}Kn=null}a(Du,"closeLogFile");function CU(){Kn||(Kn=js.openSync(Va,"a"),setTimeout(()=>{Du()},NU).unref())}a(CU,"openLogFile");function ka(...e){$e[ke]<=$e.info&&Qn(Er("info",e))}a(ka,"info");function Pu(...e){$e[ke]<=$e.trace&&Qn(Er("trace",e))}a(Pu,"trace");function Wn(...e){$e[ke]<=$e.error&&$a(Er("error",e))}a(Wn,"error");function vu(...e){$e[ke]<=$e.debug&&Qn(Er("debug",e))}a(vu,"debug");function Sf(...e){$e[ke]<=$e.notify&&Qn(Er("notify",e))}a(Sf,"notify");function Tf(...e){$e[ke]<=$e.fatal&&$a(Er("fatal",e))}a(Tf,"fatal");function Bu(...e){$e[ke]<=$e.warn&&$a(Er("warn",e))}a(Bu,"warn");function yU(e,t,...r){t===Ef.STDERR?$a(Er(e,r)):Qn(Er(e,r))}a(yU,"logCustomLevel");function UU(){let e;try{e=pU.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Pr.join(e,pe.HDB_HOME_DIR_NAME,pe.BOOT_PROPS_FILE_NAME);return js.existsSync(t)||(t=Pr.join(Mu,"utility/hdb_boot_properties.file")),t}a(UU,"getPropsFilePath");function LU(e){ke=e}a(LU,"setLogLevel");function cf(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(cf,"autoCastBoolean");function MU(e){try{if(e.includes("config/settings.js")){let o=uf(e);return{level:o.get(pe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Pr.dirname(o.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(pe.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=_f.parseDocument(js.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===pe.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(MU,"getLogConfig");function DU(){try{let e=_f.parseDocument(js.readFileSync(OU,"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(DU,"getDefaultConfig")});var Af=f((X3,Rf)=>{"use strict";var PU=require("util"),vU=require("path"),BU=require("child_process"),HU=PU.promisify(BU.execFile),qU=1e3*1e3*10;Rf.exports={findPs:FU};async function FU(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await HU("ps",["wwxo",`pid,${r}`],{maxBuffer:qU});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:vU.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(FU,"findPs")});var Le=f((j3,gf)=>{"use strict";var GU="__dbis__",xU="__environment_name__",VU="__dbi_defintion__",kU={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"},$U=["__createdtime__","__updatedtime__"],YU="\uFFFF",pf={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},KU=Object.values(pf);gf.exports={INTERNAL_DBIS_NAME:GU,DBI_DEFINITION_NAME:VU,SEARCH_TYPES:kU,TIMESTAMP_NAMES:$U,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:xU,TRANSACTIONS_DBI_NAMES_ENUM:pf,TRANSACTIONS_DBIS:KU,OVERFLOW_MARKER:YU}});var at=f((eZ,Lf)=>{"use strict";var Of=T(),Nf=Le(),If={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},bf=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),wf={500:bf("There was an error processing your request."),400:"Invalid request"},WU=wf[If.INTERNAL_SERVER_ERROR],QU={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.`},JU={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},zU={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"},XU={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 ${Nf.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Nf.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"},ZU={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Of.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 ${Of.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"},Cf={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"},jU={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."},eL={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`},tL={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"},rL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},sL={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`},yf={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.`},Uf={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}`},nL={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."},iL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},aL={...Cf,...zU,...QU,...jU,...eL,...tL,...rL,...sL,...ZU,...yf,...Uf,...nL,...iL,...JU};Lf.exports={CHECK_LOGS_WRAPPER:bf,HDB_ERROR_MSGS:aL,DEFAULT_ERROR_MSGS:wf,DEFAULT_ERROR_RESP:WU,HTTP_STATUS_CODES:If,LMDB_ERRORS_ENUM:XU,AUTHENTICATION_ERROR_MSGS:Cf,VALIDATION_ERROR_MSGS:yf,ITC_ERRORS:Uf}});var y=f((rZ,Pf)=>{"use strict";var en=at(),oL=I(),cL=T(),Jn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Mf),this.http_resp_code=s||en.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(en.DEFAULT_ERROR_MSGS[s]?en.DEFAULT_ERROR_MSGS[s]:en.DEFAULT_ERROR_MSGS[en.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&&oL[n](i)}};a(Jn,"HdbError");function Mf(e,t,r,s=cL.LOG_LEVELS.ERROR,n=null,i=!1){if(Df(e))return e;let o=new Jn(e,t,r,s,n);return i&&delete o.stack,o}a(Mf,"handleHDBError");function Df(e){return e.__proto__.constructor.name===Jn.name}a(Df,"isHDBError");Pf.exports={isHDBError:Df,handleHDBError:Mf,hdb_errors:en}});var b=f((iZ,Qf)=>{"use strict";var Es=require("path"),_L=require("fs-extra"),De=I(),vf=require("fs-extra"),zn=require("os"),uL=require("net"),lL=require("recursive-iterator"),Me=T(),Ff=Af(),Bf=require("papaparse"),Ya=require("moment"),{inspect:EL}=require("util"),Hf=require("is-number"),nZ=require("lodash"),{hdb_errors:Ka}=y(),Gf=require("util").promisify(setTimeout),dL=100,hL=5,fL="",SL=4,qf={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qf.exports={isEmpty:ot,isEmptyOrZeroLength:Kt,arrayHasEmptyValues:RL,arrayHasEmptyOrZeroLengthValues:AL,buildFolderPath:pL,isBoolean:xf,errorizeMessage:TL,stripFileExtension:OL,autoCast:NL,autoCastJSON:Vf,autoCastJSONDeep:Hu,removeDir:IL,compareVersions:bL,isCompatibleDataVersion:wL,escapeRawValue:CL,unescapeValue:yL,stringifyProps:UL,timeoutPromise:ML,isClusterOperation:PL,getClusterUser:BL,checkGlobalSchemaTable:vL,getHomeDir:$f,getPropsFilePath:LL,promisifyPapaParse:HL,removeBOM:Yf,createEventPromise:qL,checkProcessRunning:FL,checkSchemaTableExist:GL,checkSchemaExists:Kf,checkTableExists:Wf,getStartOfTomorrowInSeconds:xL,getLimitKey:VL,isObject:gL,isNotEmptyAndHasValue:mL,autoCasterIsNumberCheck:kf,backtickASTSchemaItems:kL,isPortTaken:DL,stopProcess:$L,createForkArgs:YL,autoCastBoolean:KL,async_set_timeout:Gf,getTableHashAttribute:WL,doesSchemaExist:QL,doesTableExist:JL,stringifyObj:zL,ms_to_time:XL,changeExtension:ZL,PACKAGE_ROOT:Me.PACKAGE_ROOT};function TL(e){return e instanceof Error?e:new Error(e)}a(TL,"errorizeMessage");function ot(e){return e==null}a(ot,"isEmpty");function mL(e){return!ot(e)&&(e||e===0||e===""||xf(e))}a(mL,"isNotEmptyAndHasValue");function Kt(e){return ot(e)||e.length===0||e.size===0}a(Kt,"isEmptyOrZeroLength");function RL(e){if(ot(e))return!0;for(let t=0;t<e.length;t++)if(ot(e[t]))return!0;return!1}a(RL,"arrayHasEmptyValues");function AL(e){if(Kt(e))return!0;for(let t=0;t<e.length;t++)if(Kt(e[t]))return!0;return!1}a(AL,"arrayHasEmptyOrZeroLengthValues");function pL(...e){try{return e.join(Es.sep)}catch{console.error(e)}}a(pL,"buildFolderPath");function xf(e){return ot(e)?!1:e===!0||e===!1}a(xf,"isBoolean");function gL(e){return ot(e)?!1:typeof e=="object"}a(gL,"isObject");function OL(e){return Kt(e)?fL:e.slice(0,-SL)}a(OL,"stripFileExtension");function NL(e){return ot(e)||e===""||typeof e!="string"?e:qf[e]!==void 0?qf[e]:kf(e)===!0?Number(e):e}a(NL,"autoCast");function Vf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Vf,"autoCastJSON");function Hu(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=Hu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=Hu(r);s!==r&&(e[t]=s)}return e}else return Vf(e)}a(Hu,"autoCastJSONDeep");function kf(e){if(e.startsWith("0.")&&Hf(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Hf(e))}a(kf,"autoCasterIsNumberCheck");async function IL(e){if(Kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await vf.emptyDir(e),await vf.remove(e)}catch(t){throw De.error(`Error removing files in ${e} -- ${t}`),t}}a(IL,"removeDir");function bL(e,t){if(Kt(e)){De.info("Invalid current version sent as parameter.");return}if(Kt(t)){De.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(bL,"compareVersions");function wL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(wL,"isCompatibleDataVersion");function CL(e){if(ot(e))return e;let t=String(e);return t==="."?Me.UNICODE_PERIOD:t===".."?Me.UNICODE_PERIOD+Me.UNICODE_PERIOD:t.replace(Me.FORWARD_SLASH_REGEX,Me.UNICODE_FORWARD_SLASH)}a(CL,"escapeRawValue");function yL(e){if(ot(e))return e;let t=String(e);return t===Me.UNICODE_PERIOD?".":t===Me.UNICODE_PERIOD+Me.UNICODE_PERIOD?"..":String(e).replace(Me.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(yL,"unescapeValue");function UL(e,t){if(ot(e))return De.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+zn.EOL}!Kt(s)&&s[0]===";"?r+=" "+s+n+zn.EOL:Kt(s)||(r+=s+"="+n+zn.EOL)}catch{De.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(UL,"stringifyProps");function $f(){let e;try{e=zn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a($f,"getHomeDir");function LL(){let e=Es.join($f(),Me.HDB_HOME_DIR_NAME,Me.BOOT_PROPS_FILE_NAME);return _L.existsSync(e)||(e=Es.join(__dirname,"../","hdb_boot_properties.file")),e}a(LL,"getPropsFilePath");function ML(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ML,"timeoutPromise");async function DL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=uL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(DL,"isPortTaken");function PL(e){try{return Me.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){De.error(`Error checking operation against cluster ops ${t}`)}return!1}a(PL,"isClusterOperation");function vL(e,t){if(!global.hdb_schema[e])return Ka.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ka.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(vL,"checkGlobalSchemaTable");function BL(e,t){if(ot(t)){De.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ot(e)||Kt(e)){De.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){De.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){De.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(BL,"getClusterUser");function HL(){Bf.parsePromise=function(e,t){return new Promise(function(r,s){Bf.parse(e,{header:!0,transformHeader:Yf,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(HL,"promisifyPapaParse");function Yf(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Yf,"removeBOM");function qL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;De.info(`Got cluster status event response: ${EL(n)}`);try{i.cancel()}catch{De.error("Error trying to cancel timeout.")}s(n)})})}a(qL,"createEventPromise");async function FL(e){let t=!0,r=0;do await Gf(dL*r++),(await Ff.findPs(e)).length>0&&(t=!1);while(t&&r<hL);if(t)throw new Error(`process ${e} was not started`)}a(FL,"checkProcessRunning");function GL(e,t){let r=Kf(e);if(r)return r;let s=Wf(e,t);if(s)return s}a(GL,"checkSchemaTableExist");function Kf(e){if(!global.hdb_schema[e])return Ka.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kf,"checkSchemaExists");function Wf(e,t){if(!global.hdb_schema[e][t])return Ka.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wf,"checkTableExists");function xL(){let e=Ya().utc().add(1,Me.MOMENT_DAYS_TAG).startOf(Me.MOMENT_DAYS_TAG).unix(),t=Ya().utc().unix();return e-t}a(xL,"getStartOfTomorrowInSeconds");function VL(){return Ya().utc().format("DD-MM-YYYY")}a(VL,"getLimitKey");function kL(e){try{let t=new lL(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){De.error("Got an error back ticking items."),De.error(t)}}a(kL,"backtickASTSchemaItems");async function $L(e){let t=zn.userInfo();(await Ff.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),De.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a($L,"stopProcess");function YL(e){return[e]}a(YL,"createForkArgs");function KL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(KL,"autoCastBoolean");function WL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(WL,"getTableHashAttribute");function QL(e){return global?.hdb_schema?.[e]!==void 0}a(QL,"doesSchemaExist");function JL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(JL,"doesTableExist");function zL(e){try{return JSON.stringify(e)}catch{return e}}a(zL,"stringifyObj");function XL(e){let t=Ya.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(XL,"ms_to_time");function ZL(e,t){let r=Es.basename(e,Es.extname(e));return Es.join(Es.dirname(e),r+t)}a(ZL,"changeExtension")});var zf=f((oZ,Jf)=>{"use strict";var jL={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))},eM="certificate.pem",tM="privateKey.pem",rM="ca.pem";Jf.exports={CERTIFICATE_VALUES:jL,CERTIFICATE_PEM_NAME:eM,PRIVATEKEY_PEM_NAME:tM,CA_PEM_NAME:rM}});var re=f((cZ,Xf)=>{"use strict";var Ye=require("validate.js");Ye.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ye.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ye.validators.type.checks={Object:function(e){return Ye.isObject(e)&&!Ye.isArray(e)},Array:Ye.isArray,Integer:Ye.isInteger,Number:Ye.isNumber,String:Ye.isString,Date:Ye.isDate,Boolean:function(e){return typeof e=="boolean"}};Ye.validators.hasValidFileExt=function(e,t){return Ye.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};Xf.exports={validateObject:sM,validateObjectAsync:nM,validateBySchema:iM};function sM(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ye(e,t,{format:"flat"});return r?new Error(r):null}a(sM,"validateObject");async function nM(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ye.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(nM,"validateObjectAsync");function iM(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(iM,"validateBySchema")});var Fu=f((lZ,tS)=>{"use strict";var aM=require("fs-extra"),v=require("joi"),oM=require("os"),{boolean:se,string:dr,number:vt,array:qu}=v.types(),{totalmem:Zf}=require("os"),Xn=require("path"),cM=I(),Qa=b(),uZ=zf(),_M=T(),uM=re(),jf="log",lM="custom_functions",EM="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dM="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hM="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",fM="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SM="rootPath config parameter is undefined",TM="clustering.enabled config parameter is undefined",ds=vt.min(0).required(),Ja=qu.items({host:dr.required(),port:ds}).empty(null),vr;tS.exports={configValidator:mM,routesValidator:NM,route_constraints:Ja};function mM(e){if(vr=e.rootPath,Qa.isEmpty(vr))throw SM;let t=se.required(),r=v.valid("production","development").required(),s=vt.min(1).max(1e3).empty(null).default(OM),n=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wa),i=v.custom(RM).messages({"any.custom":"{:#label} {:#error}"}),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=v.string().empty(null).default(Wa),_=v.custom(AM).empty(null).default(Wa),u=e.clustering?.enabled;if(Qa.isEmpty(u))throw TM;let l;return u===!0?l=v.object({enabled:t,hubServer:v.object({cluster:v.object({name:v.required().empty(null),network:v.object({port:ds,routes:Ja}).required()}).required(),leafNodes:v.object({network:v.object({port:ds}).required()}).required(),network:v.object({port:ds}).required()}).required(),leafServer:v.object({network:v.object({port:ds,routes:Ja}).required(),streams:v.object({maxAge:vt.min(120).allow(null).optional(),maxBytes:vt.min(1).allow(null).optional(),maxMsgs:vt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:v.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:se.optional(),tls:v.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:se.required(),verify:se.optional()}),user:dr.optional().empty(null)}).required():l=v.object({enabled:t,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:se.required()})}).required(),v.object({clustering:l,customFunctions:v.object({enabled:t,network:v.object({cors:se.required(),corsAccessList:qu.required(),headersTimeout:vt.min(1).required(),https:se.required(),keepAliveTimeout:vt.min(1).required(),port:ds,timeout:vt.min(1).required()}),nodeEnv:r,root:n,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:v.object({enabled:t}).required(),logging:v.object({file:se.required(),level:v.valid("notify","fatal","error","warn","info","debug","trace"),rotation:v.object({enabled:se.optional(),compress:se.optional(),interval:dr.custom(gM).optional().empty(null),maxSize:dr.custom(pM).optional().empty(null),path:dr.optional().empty(null).default(Wa)}).required(),root:n,stdStreams:se.required(),auditLog:se.required()}).required(),operationsApi:v.object({authentication:v.object({operationTokenTimeout:v.required(),refreshTokenTimeout:v.required()}).required(),foreground:se.required(),network:v.object({cors:se.required(),corsAccessList:qu.required(),headersTimeout:vt.min(1).required(),https:se.required(),keepAliveTimeout:vt.min(1).required(),port:ds,timeout:vt.min(1).required()}).required(),nodeEnv:r,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:v.object({threads:s}).required(),storage:v.object({writeAsync:se.required(),overlappingSync:se.optional(),caching:se.optional(),compression:se.optional(),noReadAhead:se.optional(),path:_,prefetchWrites:se.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(mM,"configValidator");function eS(e){return aM.existsSync(e)?null:`Specified path ${e} does not exist.`}a(eS,"doesPathExist");function RM(e,t){if(e===null)return;let r=eS(e);return r?t.message(r):e}a(RM,"validatePemFile");function AM(e,t){v.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=eS(e);if(r)return t.message(r)}a(AM,"validatePath");function pM(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EM);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(hM):e}a(pM,"validateRotationMaxSize");function gM(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(dM);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(fM):e}a(gM,"validateRotationInterval");function OM(e,t){let r=t.state.path.join("."),s=oM.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Zf();return i=Math.round(Math.min(i,Zf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),cM.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(OM,"setDefaultThreads");function Wa(e,t){if(!Qa.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Qa.isEmpty(vr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Xn.join(vr,lM);case"logging.root":return Xn.join(vr,jf);case"clustering.leafServer.streams.path":return Xn.join(vr,"clustering","leaf");case"storage.path":return Xn.join(vr,_M.SCHEMA_DIR_NAME);case"logging.rotation.path":return Xn.join(vr,jf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wa,"setDefaultRoot");function NM(e){let t=v.object({routes:Ja});return uM.validateBySchema({routes:e},t)}a(NM,"routesValidator")});var fr=f((dZ,lS)=>{"use strict";var pt=T(),ct=b(),me=I(),{configValidator:IM,routesValidator:rS}=Fu(),At=require("fs-extra"),bM=require("yaml"),Wt=require("path"),wM=require("is-number"),nS=require("properties-reader"),CM=require("lodash"),{handleHDBError:yM}=y(),{HTTP_STATUS_CODES:UM,HDB_ERROR_MSGS:za}=at(),LM=require("minimist"),{SCHEMAS_PARAM_CONFIG:Zn,CONFIG_PARAMS:Br,CONFIG_PARAM_MAP:hr}=pt,MM="Unable to get config value because config is uninitialized",DM="Config successfully initialized",PM="Error backing up config file",vM="Empty parameter sent to getConfigValue",iS=Wt.join(pt.PACKAGE_ROOT,"config","yaml",pt.HDB_DEFAULT_CONFIG_FILE),BM="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sS={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"},Xa,Ne;lS.exports={createConfigFile:HM,getDefaultConfig:qM,getConfigValue:oS,initConfig:cS,flattenConfig:hs,updateConfigValue:_S,updateConfigObject:GM,getConfiguration:kM,setConfiguration:$M,readConfigFile:ku,getClusteringRoutes:YM,initOldConfig:uS,getConfigFromFile:KM};function HM(e){let t=tn(iS);Xa=hs(t.toJSON());let r;for(let o in e){let c=hr[o.toLowerCase()];if(c===Br.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=Gu(c,e[o]);try{t.setIn([..._],u)}catch(l){me.error(l)}}}r&&aS(t,r),Vu(t);let s=t.toJSON();Ne=hs(s);let n=t.getIn(["rootPath"]),i=Wt.join(n,pt.HDB_CONFIG_FILE);At.createFileSync(i),At.writeFileSync(i,String(t)),me.trace(`Config file written to ${i}`)}a(HM,"createConfigFile");function aS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ct.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Zn.TABLES))for(let i in s[n][Zn.TABLES])for(let o in s[n][Zn.TABLES][i]){let c=s[n][Zn.TABLES][i][o],_=[Br.SCHEMAS,n,Zn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Br.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){me.error("Error parsing schemas CLI/env config arguments",s)}}a(aS,"setSchemasConfig");function qM(e){if(Xa===void 0){let r=tn(iS);Xa=hs(r.toJSON())}let t=hr[e.toLowerCase()];if(t!==void 0)return Xa[t.toLowerCase()]}a(qM,"getDefaultConfig");function oS(e){if(ct.isEmpty(e)){me.error(vM);return}if(Ne===void 0){me.trace(MM);return}let t=hr[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(oS,"getConfigValue");function xu(e){let t=LM(process.argv);return t.ROOTPATH?Wt.join(t.ROOTPATH,pt.HDB_CONFIG_FILE):nS(e).get(pt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(xu,"getConfigFilePath");function cS(e=!1){if(Ne===void 0||e){let t=ct.getPropsFilePath();try{At.accessSync(t,At.constants.F_OK|At.constants.R_OK)}catch(i){throw me.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=xu(t),s;if(r.includes("config/settings.js"))try{uS(r);return}catch(i){if(i.code!==pt.NODE_ERROR_CODES.ENOENT)throw i}try{s=tn(r)}catch(i){if(i.code===pt.NODE_ERROR_CODES.ENOENT){me.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 me.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FM(s,r),Vu(s);let n=s.toJSON();if(Ne=hs(n),Ne.logging_rotation_rotate)for(let i in sS)Ne[i]&&me.error(`Config ${sS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);me.trace(DM)}}a(cS,"initConfig");function FM(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Wt.join(r,pt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Wt.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Wt.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(me.trace("Updating config file with missing config params"),At.writeFileSync(t,String(e)))}a(FM,"checkForUpdatedConfig");function Vu(e){let t=e.toJSON(),r=IM(t);if(r.error)throw za.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(Vu,"validateConfig");function GM(e,t){Ne===void 0&&(Ne={});let r=hr[e.toLowerCase()];if(r===void 0){me.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(GM,"updateConfigObject");function _S(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&cS();let i=oS(hr.hdb_root),o=Wt.join(i,pt.HDB_CONFIG_FILE),c=tn(o),_;if(r===void 0&&e.toLowerCase()===Br.SCHEMAS)_=t;else if(r===void 0){let E=hr[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=Gu(E,t);c.setIn([...d],h)}else for(let E in r){let d=hr[E.toLowerCase()];if(d===Br.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),m=Gu(d,r[E]);try{c.setIn([...h],m)}catch(R){me.error(R)}}}_&&aS(c,_),Vu(c);let u=c.getIn(["rootPath"]),l=Wt.join(u,pt.HDB_CONFIG_FILE);s===!0&&xM(o,u),At.writeFileSync(l,String(c)),n&&(Ne=hs(c.toJSON())),me.trace(`Config parameter: ${e} updated with value: ${t}`)}a(_S,"updateConfigValue");function xM(e,t){try{let r=Wt.join(t,"backup",`${pt.HDB_CONFIG_FILE}.bak`);At.copySync(e,r),me.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){me.error(PM),me.error(r)}}a(xM,"backupConfigFile");var VM=["schemas"];function hs(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!VM.includes(r)){let s=hs(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(hs,"flattenConfig");function Gu(e,t){if(e===Br.CLUSTERING_NODENAME||e===Br.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(wM(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ct.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 ct.autoCast(t)}a(Gu,"castConfigValue");function kM(){let e=ct.getPropsFilePath(),t=xu(e);return tn(t).toJSON()}a(kM,"getConfiguration");async function $M(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return _S(void 0,void 0,n,!0),BM}catch(i){throw typeof i=="string"||i instanceof String?yM(i,i,UM.BAD_REQUEST,void 0,void 0,!0):i}}a($M,"setConfiguration");function ku(){let e=ct.getPropsFilePath();try{At.accessSync(e,At.constants.F_OK|At.constants.R_OK)}catch(s){throw me.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=xu(e);return tn(t).toJSON()}a(ku,"readConfigFile");function tn(e){return bM.parseDocument(At.readFileSync(e,"utf8"),{simpleKeys:!0})}a(tn,"parseYamlDoc");function YM(){let e=ku(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ct.isEmptyOrZeroLength(t)?[]:t;let r=rS(t);if(r)throw za.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ct.isEmptyOrZeroLength(s)?[]:s;let n=rS(s);if(n)throw za.CONFIG_VALIDATION(n.message);if(!ct.isEmptyOrZeroLength(s)&&!ct.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ct.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw za.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(YM,"getClusteringRoutes");function uS(e){let t=nS(e);Ne={};for(let r in hr){let s=t.get(r.toUpperCase());if(ct.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=hr[r].toLowerCase();n===Br.LOGGING_ROOT?Ne[n]=Wt.dirname(s):Ne[n]=s}return Ne}a(uS,"initOldConfig");function KM(e){let t=ku();return CM.get(t,e.replaceAll("_","."))}a(KM,"getConfigFromFile")});var U=f((fZ,dS)=>{"use strict";var $u=require("fs-extra"),Qt=require("path"),WM=require("os"),QM=require("properties-reader"),jn=I(),rn=b(),L=T(),Za=fr(),JM="Error initializing environment manager",ja="BOOT_PROPS_FILE_PATH",ES=!1,zM={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Sr={};dS.exports={BOOT_PROPS_FILE_PATH:ja,getHdbBasePath:XM,setHdbBasePath:ZM,get:jM,initSync:tD,setProperty:k,initTestEnvironment:rD};function XM(){return Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(XM,"getHdbBasePath");function ZM(e){Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ZM,"setHdbBasePath");function jM(e){let t=Za.getConfigValue(e);return t===void 0?Sr[e]:t}a(jM,"get");function k(e,t){zM[e]&&(Sr[e]=t),Za.updateConfigObject(e,t)}a(k,"setProperty");function eD(){let e;try{e=rn.getPropsFilePath(),$u.accessSync(e,$u.constants.F_OK|$u.constants.R_OK),ES=!0;let t=QM(e);return Sr[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Sr[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Sr[ja]=e,!0}catch{return jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(eD,"doesPropFileExist");function tD(e=!1){try{(ES||eD())&&(Za.initConfig(e),Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Za.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jn.error(JM),jn.error(t),console.error(t),process.exit(1)}}a(tD,"initSync");function rD(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Qt.join(__dirname,"../../","unitTests");Sr[ja]=Qt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,WM.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qt.join(_,"envDir","log")),k(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Qt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,rn.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,rn.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rn.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,rn.isEmpty(i)?!1:i),k(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Qt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rn.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ja}. Please check your boot props and settings files`;jn.fatal(r),jn.error(t)}}a(rD,"initTestEnvironment")});var to=f((TZ,SS)=>{"use strict";var{Readable:sD}=require("stream"),nD=1e4;SS.exports={streamAsJSON(e){return new eo({value:e})}};var eo=class extends sD{constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),hS)}catch(n){yield hS(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);fS(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>nD?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return fS(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};a(eo,"JSONStream");function hS(e){return console.error(e),JSON.stringify(e.toString())}a(hS,"handleError");function fS(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(fS,"when")});var ei=f((RZ,iD)=>{iD.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 Yu=f((AZ,TS)=>{var aD=require("fastify-plugin");TS.exports=aD(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var fs=f((pZ,oD)=>{oD.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 US=f((OZ,yS)=>{"use strict";var Ku=require("recursive-iterator"),cD=require("alasql"),Wu=require("clone"),mS=b(),{handleHDBError:RS,hdb_errors:_D}=y(),{HDB_ERROR_MSGS:AS,HTTP_STATUS_CODES:pS}=_D,uD=["DISTINCT_ARRAY"],gS=Symbol("validateTables"),Qu=Symbol("validateTable"),gZ=Symbol("getAllColumns"),OS=Symbol("validateAllColumns"),ro=Symbol("findColumn"),NS=Symbol("validateOrderBy"),ti=Symbol("validateSegment"),Ju=Symbol("validateColumn"),IS=Symbol("setColumnsForTable"),bS=Symbol("checkColumnsForAsterisk"),wS=Symbol("validateGroupBy"),CS=Symbol("hasColumns"),so=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[gS](),this[bS](),this[OS]()}[gS](){if(this[CS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Qu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Qu](t.table)})}}[CS](){let t=!1,r=new Ku(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Qu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw RS(new Error,AS.SCHEMA_NOT_FOUND(t.databaseid),pS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw RS(new Error,AS.TABLE_NOT_FOUND(t.databaseid,t.tableid),pS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Wu(s);n.table=Wu(t),this.attributes.push(n)})}[ro](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)}[bS](){let t=new Ku(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[IS](r.tableid)}[IS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new cD.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[OS](){this[ti](this.statement.columns,!1),this[ti](this.statement.joins,!1),this[ti](this.statement.where,!1),this[wS](this.statement.group,!1),this[ti](this.statement.order,!0)}[ti](t,r){if(!t)return;let s=new Ku(t),n=[];for(let{node:i,path:o}of s)!mS.isEmpty(i)&&!mS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[NS](i):n.push(this[Ju](i)));return n}[wS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&uD.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Wu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ro](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[ro](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[NS](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[Ju](t)}[Ju](t){let r=this[ro](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(so,"SelectValidator");yS.exports=so});var zu=f((IZ,LS)=>{"use strict";var no=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(no,"BridgeMethods");LS.exports=no});var Ss=f((yZ,HS)=>{"use strict";var MS=at().LMDB_ERRORS_ENUM,wZ=require("lmdb"),lD=Le(),CZ=require("buffer").Buffer,{OVERFLOW_MARKER:DS,MAX_SEARCH_KEY_LENGTH:io}=lD,PS=["number","string","symbol","boolean","bigint"];function ED(e){if(e=e?.database||e,!e)throw new Error(MS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(MS.INVALID_ENVIRONMENT)}a(ED,"validateEnv");function dD(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(dD,"stringifyData");function hD(e){return e instanceof Date?e.valueOf():e}a(hD,"convertKeyValueToWrite");function fD(e){if(e==null)return;if(PS.includes(typeof e))return e.length>io?[e.slice(0,io)+DS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];PS.includes(typeof n)&&(n.length>io?t.push(n.slice(0,io)+DS):t.push(n))}}return t}a(fD,"getIndexedValues");var ao=0,vS=0;function BS(){vS=Date.now()-performance.now()}a(BS,"adjustStartTime");BS();var SD=6e4;setInterval(BS,SD).unref();function TD(){let e=performance.now()+vS;return e>ao?(ao=e,e):(ao+=488e-6,ao)}a(TD,"getNextMonotonicTime");HS.exports={validateEnv:ED,stringifyData:dD,convertKeyValueToWrite:hD,getNextMonotonicTime:TD,getIndexedValues:fD}});var FS=f((LZ,qS)=>{"use strict";var oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(oo,"DBIDefinition");qS.exports=oo});var VS=f((DZ,xS)=>{"use strict";var Xu=U(),GS=T();Xu.initSync();var mD=Xu.get(GS.CONFIG_PARAMS.STORAGE_COMPRESSION),RD=Xu.get(GS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,co=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=mD&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=RD&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(co,"OpenDBIObject");xS.exports=co});var YS=f((vZ,$S)=>{"use strict";var sn=U(),ri=T();sn.initSync();var AD=sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kS=sn.get(ri.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),pD=sn.get(ri.CONFIG_PARAMS.STORAGE_NOREADAHEAD),_o=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=AD,kS!==void 0&&(this.overlappingSync=kS),this.noReadAhead=pD}};a(_o,"OpenEnvironmentObject");$S.exports=_o});var z=f((HZ,ZS)=>{"use strict";var Zu=require("lmdb"),gt=require("fs-extra"),Bt=require("path"),lo=Ss(),KS=I(),Ie=at().LMDB_ERRORS_ENUM,Eo=FS(),ju=VS(),WS=YS(),Hr=Le(),Ht=Hr.INTERNAL_DBIS_NAME,QS=Hr.DBI_DEFINITION_NAME,gD="data.mdb",OD="lock.mdb",si=".mdb",ND="-lock",uo=class{constructor(t,r,s=!1){this.dbi=Ot(t,r),this.key_type=this.dbi[Hr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Hr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Zu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(uo,"TransactionCursor");function el(e,t){if(e===void 0)throw new Error(Ie.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ie.ENV_NAME_REQUIRED)}a(el,"pathEnvNameValidation");async function tl(e,t,r=!0){try{await gt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ie.INVALID_BASE_PATH):s}try{let s=Bt.join(e,t+si);return await gt.access(s,gt.constants.R_OK|gt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await gt.access(Bt.join(e,t,gD),gt.constants.R_OK|gt.constants.F_OK),Bt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ie.INVALID_ENVIRONMENT)}else throw new Error(Ie.INVALID_ENVIRONMENT);throw s}}a(tl,"validateEnvironmentPath");function ho(e,t){if(lo.validateEnv(e),t===void 0)throw new Error(Ie.DBI_NAME_REQUIRED)}a(ho,"validateEnvDBIName");async function ID(e,t,r=!1,s=!1){el(e,t),t=t.toString();try{return await tl(e,t,s),rl(e,t,r)}catch(n){if(n.message===Ie.INVALID_ENVIRONMENT){let i=Bt.join(e,t);await gt.mkdirp(s?i:e);let o=new WS(s?i:i+si,!1),c=Zu.open(o);c.dbis=Object.create(null);let _=new ju(!1);c.openDB(Ht,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=sl(e,t,r);return c[Hr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(ID,"createEnvironment");async function bD(e,t,r,s=!0){let n=await rl(e,t);if(r===void 0)throw new Error(Ie.DESTINATION_PATH_REQUIRED);try{await gt.access(Bt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(bD,"copyEnvironment");async function rl(e,t,r=!1){el(e,t),t=t.toString();let s=sl(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 tl(e,t),i=Bt.join(e,t+si),o=n!=i,c=new WS(n,o),_=Zu.open(c);_.dbis=Object.create(null);let u=zS(_);for(let l=0;l<u.length;l++)Ot(_,u[l]);return _[Hr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(rl,"openEnvironment");async function wD(e,t,r=!1){el(e,t),t=t.toString();let s=Bt.join(e,t+si),n=await tl(e,t);if(global.lmdb_map!==void 0){let i=sl(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await JS(o),delete global.lmdb_map[i]}}await gt.remove(n),await gt.remove(n===s?n+ND:Bt.join(Bt.dirname(n),OD))}a(wD,"deleteEnvironment");async function JS(e){lo.validateEnv(e);let t=e[Hr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(JS,"closeEnvironment");function sl(e,t,r=!1){let n=`${Bt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(sl,"getCachedEnvironmentName");function CD(e){lo.validateEnv(e);let t=Object.create(null),r=Ot(e,Ht);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ht)try{t[s]=Object.assign(new Eo,n)}catch{KS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(CD,"listDBIDefinitions");function zS(e){lo.validateEnv(e);let t=[],r=Ot(e,Ht);for(let{key:s}of r.getRange({start:!1}))s!==Ht&&t.push(s);return t}a(zS,"listDBIs");function yD(e,t){let s=Ot(e,Ht).getEntry(t),n=new Eo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{KS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(yD,"getDBIDefinition");function XS(e,t,r,s=!1){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ot(e,t)}catch(n){if(n.message===Ie.DBI_DOES_NOT_EXIST){let i=new ju(r,s===!0),o=e.openDB(t,i),c=new Eo(r===!0,s);return o[QS]=c,Ot(e,Ht).putSync(t,c),e.dbis[t]=o,o}throw n}}a(XS,"createDBI");function Ot(e,t){if(ho(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ht?r=yD(e,t):r=new Eo,r===void 0)throw new Error(Ie.DBI_DOES_NOT_EXIST);let s;try{let n=new ju(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(Ie.DBI_DOES_NOT_EXIST):n}return s[QS]=r,e.dbis[t]=s,s}a(Ot,"openDBI");function UD(e,t){ho(e,t),t=t.toString();let r=Ot(e,t),s=r.getStats();return r[Hr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(UD,"statDBI");async function LD(e,t){try{let r=Bt.join(e,t+si);return(await gt.stat(r)).size}catch{throw new Error(Ie.INVALID_ENVIRONMENT)}}a(LD,"environmentDataSize");function MD(e,t){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_DROP_INTERNAL_DBIS_NAME);Ot(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ot(e,Ht).removeSync(t)}a(MD,"dropDBI");function DD(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ot(e,n)}catch(i){if(i.message===Ie.DBI_DOES_NOT_EXIST)XS(e,n,n!==t,n===t);else throw i}}}a(DD,"initializeDBIs");ZS.exports={openDBI:Ot,openEnvironment:rl,createEnvironment:ID,listDBIs:zS,listDBIDefinitions:CD,createDBI:XS,dropDBI:MD,statDBI:UD,deleteEnvironment:wD,initializeDBIs:DD,TransactionCursor:uo,environmentDataSize:LD,copyEnvironment:bD,closeEnvironment:JS}});var eT=f((FZ,jS)=>{"use strict";var fo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(fo,"InsertRecordsResponseObject");jS.exports=fo});var rT=f((xZ,tT)=>{"use strict";var So=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(So,"UpdateRecordsResponseObject");tT.exports=So});var nT=f((kZ,sT)=>{"use strict";var To=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(To,"UpsertRecordsResponseObject");sT.exports=To});var nn=f((QZ,oT)=>{"use strict";var PD=z(),vD=eT(),BD=rT(),HD=nT(),Jt=Ss(),ni=at().LMDB_ERRORS_ENUM,qD=Le(),Tr=T(),FD=b(),GD=require("uuid"),YZ=require("lmdb"),{handleHDBError:xD,hdb_errors:VD}=y(),{OVERFLOW_MARKER:KZ,MAX_SEARCH_KEY_LENGTH:WZ}=qD,iT=U();iT.initSync();var mo=iT.get(Tr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nl=Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ts=Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new vD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];aT(u,!0,n);let l=$D(e,t,r,u),E=u[t];o.push(l),c.push(E)}return al(o,c,s,i,n)}a(kD,"insertRecords");function $D(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Tr.FUNC_VAL],s[o]=c)}let _=Jt.getIndexedValues(c),u=e.dbis[o];if(_){mo&&u.prefetch(_.map(l=>({key:l,value:n})),Ro);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}mo&&e.dbis[t].prefetch([n],Ro),e.dbis[t].put(n,s,s[Ts])})}a($D,"insertRecord");function YD(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(YD,"removeSkippedRecords");function aT(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ts]))&&(e[Ts]=r||(r=Jt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[nl]))&&(e[nl]=r||Jt.getNextMonotonicTime()):delete e[nl]}a(aT,"setTimestamps");function il(e,t,r){r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),PD.initializeDBIs(e,t,r)}a(il,"initializeTransaction");async function KD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new BD,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=ol(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return al(c,_,s,i,n,o)}a(KD,"updateRecords");async function WD(e,t,r,s,n=Jt.getNextMonotonicTime()){try{cl(e,t,r,s)}catch(_){throw xD(_,_.message,VD.HTTP_STATUS_CODES.BAD_REQUEST)}il(e,t,r);let i=new HD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;FD.isEmpty(u[t])?(l=GD.v4(),u[t]=l):l=u[t];let E=ol(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return al(o,c,s,i,n)}a(WD,"upsertRecords");async function al(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Jt.getNextMonotonicTime(),YD(r,i),s}a(al,"finalizeWrite");function ol(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(aT(r,!l,o),Number.isInteger(r[Ts])&&u[Ts]>r[Ts])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],g=e.dbis[m];if(g===void 0)continue;let H=u[m];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][Tr.FUNC_VAL],r[m]=R)}if(R===H)continue;let x=Jt.getIndexedValues(H);if(x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.remove(x[q],s)}if(x=Jt.getIndexedValues(R),x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[Ts])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:ol(e,t,r,s,n,i,o))}a(ol,"updateUpsertRecord");function QD(e,t,r){if(Jt.validateEnv(e),t===void 0)throw new Error(ni.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ni.WRITE_ATTRIBUTES_REQUIRED):new Error(ni.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(QD,"validateBasic");function cl(e,t,r,s){if(QD(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ni.RECORDS_REQUIRED):new Error(ni.RECORDS_MUST_BE_ARRAY)}a(cl,"validateWrite");function Ro(){}a(Ro,"noop");oT.exports={insertRecords:kD,updateRecords:KD,upsertRecords:WD}});var j=f((zZ,dT)=>{"use strict";var _i=T(),JD=b(),Ke=U(),ui=require("path"),zD=require("minimist"),cT=require("fs-extra"),_T=require("lodash");Ke.initSync();var{CONFIG_PARAMS:qr,SCHEMAS_PARAM_CONFIG:ii,SYSTEM_SCHEMA_NAME:Ao}=_i,ai,oi,ci;function uT(){if(ai!==void 0)return ai;if(Ke.getHdbBasePath()!==void 0)return ai=Ke.get(qr.STORAGE_PATH)||ui.join(Ke.getHdbBasePath(),_i.SCHEMA_DIR_NAME),ai}a(uT,"getBaseSchemaPath");function lT(){if(oi!==void 0)return oi;if(Ke.getHdbBasePath()!==void 0)return oi=ET(Ao),oi}a(lT,"getSystemSchemaPath");function XD(){if(ci!==void 0)return ci;if(Ke.getHdbBasePath()!==void 0)return ci=Ke.get(_i.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ui.join(Ke.getHdbBasePath(),_i.TRANSACTIONS_DIR_NAME),ci}a(XD,"getTransactionAuditStoreBasePath");function ZD(e,t){let r=Ke.get(qr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ui.join(XD(),e.toString())}a(ZD,"getTransactionAuditStorePath");function ET(e,t){e=e.toString(),t=t&&t.toString();let r=Ke.get(_i.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ui.join(uT(),e)}a(ET,"getSchemaPath");function jD(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,zD(process.argv));let s=r[qr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!JD.isObject(s))throw o;i=s}for(let o of i){let c=o[Ao];if(!c)continue;let _=Ke.get(qr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[ii.PATH];if(u)return _T.set(_,[Ao,ii.TABLES,t,ii.PATH],u),Ke.setProperty(qr.SCHEMAS,_),u;let l=c?.[ii.PATH];if(l)return _T.set(_,[Ao,ii.PATH],l),Ke.setProperty(qr.SCHEMAS,_),l}}let n=r[qr.STORAGE_PATH.toUpperCase()];if(n){if(!cT.pathExistsSync(n))throw new Error(n+" does not exist");let i=ui.join(n,e);return cT.mkdirsSync(i),Ke.setProperty(qr.STORAGE_PATH,n),i}return lT()}a(jD,"initSystemSchemaPaths");function eP(){ai=void 0,oi=void 0,ci=void 0}a(eP,"resetPaths");dT.exports={getBaseSchemaPath:uT,getSystemSchemaPath:lT,getTransactionAuditStorePath:ZD,getSchemaPath:ET,initSystemSchemaPaths:jD,resetPaths:eP}});var zt=f((ZZ,ST)=>{"use strict";var fT=b(),hT=T(),go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,_l=require("joi"),po={schema_format:{pattern:go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tP=_l.alternatives(_l.string().min(1).max(po.schema_length.maximum).pattern(go).messages({"string.pattern.base":"{:#label} "+po.schema_format.message}),_l.number()).required();function rP(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>po.schema_length.maximum?`'${e}' maximum of 250 characters`:go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(rP,"checkValidTable");function sP(e,t){return fT.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(sP,"validateSchemaExists");function nP(e,t){let r=t.state.ancestors[0].schema;return fT.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(nP,"validateTableExists");function iP(e,t){return e.toLowerCase()===hT.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${hT.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(iP,"validateSchemaName");ST.exports={common_validators:po,schema_regex:go,hdb_schema_table:tP,validateSchemaExists:sP,validateTableExists:nP,validateSchemaName:iP,checkValidTable:rP}});var Oo=f((e2,TT)=>{var{common_validators:Fr}=zt(),li=re(),qt="is required",X={schema:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},table:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},hash_attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length}};function Ei(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(Ei,"makeAttributesStrings");function aP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence=!1,X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(aP,"schema_object");function oP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(oP,"table_object");function cP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence={message:qt},li.validateObject(e,X)}a(cP,"create_table_object");function _P(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence={message:qt},X.hash_attribute.presence=!1,li.validateObject(e,X)}a(_P,"attribute_object");function uP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(uP,"describe_table");function lP(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(lP,"validateTableResidence");TT.exports={schema_object:aP,create_table_object:cP,table_object:oP,attribute_object:_P,describe_table:uP,validateTableResidence:lP}});var RT=f((r2,mT)=>{"use strict";var EP=require("uuid"),No=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||EP.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(No,"CreateAttributeObject");mT.exports=No});var bo=f((n2,AT)=>{"use strict";var dP=RT(),Io=class extends dP{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Io,"LMDBCreateAttributeObject");AT.exports=Io});var gT=f((a2,pT)=>{"use strict";pT.exports=fP;var hP="inserted";function fP(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===hP?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fP,"returnObject")});var wo=f((c2,wT)=>{"use strict";var SP=T(),ul=z(),TP=nn(),{getSystemSchemaPath:mP,getSchemaPath:RP}=j(),AP=fs(),pP=Oo(),gP=bo(),OP=gT(),{handleHDBError:OT,hdb_errors:IT}=y(),NT=b(),{HTTP_STATUS_CODES:NP}=IT,ll=AP.hdb_attribute,bT=[];for(let e=0;e<ll.attributes.length;e++)bT.push(ll.attributes[e].attribute);var IP="inserted";wT.exports=bP;async function bP(e){let t=pP.attribute_object(e);if(t)throw OT(new Error,t.message,IT.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&NT.checkGlobalSchemaTable(e.schema,e.table);if(r)throw OT(new Error,r,NP.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NT.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 gP(e.schema,e.table,e.attribute,e.id);try{let i=await ul.openEnvironment(RP(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}`);ul.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await ul.openEnvironment(mP(),SP.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await TP.insertRecords(o,ll.hash_attribute,bT,[n]);return OP(IP,c,{records:[n]},_)}catch(i){throw i}}a(bP,"lmdbCreateAttribute")});var dl=f((u2,yT)=>{var{hdb_schema_table:CT}=zt(),wP=re(),El=require("joi"),CP={undefined:"undefined",null:"null"},yP=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||CP[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"),UP=El.object({schema:CT,table:CT,records:El.array().items(El.object().custom(yP)).required()});yT.exports=function(e){return wP.validateBySchema(e,UP)}});var Co=f((d2,LT)=>{"use strict";var mr=b(),UT=I(),E2=dl();LT.exports=LP;function LP(e){if(mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mr.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(mr.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&&mr.isEmptyOrZeroLength(o[r]))throw UT.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(!mr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw UT.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`);!mr.isEmpty(o[r])&&o[r]!==""&&s.has(mr.autoCast(o[r]))&&(o.skip=!0),s.add(mr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(LP,"insertUpdateValidate")});var di=f((f2,MT)=>{"use strict";var MP=T().OPERATIONS_ENUM,yo=class{constructor(t,r,s,n,i=void 0){this.operation=MP.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(yo,"InsertObject");MT.exports=yo});var Lo=f((m2,DT)=>{"use strict";var T2=di(),Uo=T(),fl=b(),hl=I(),DP=require("uuid"),{handleHDBError:hi,hdb_errors:PP}=y(),{HDB_ERROR_MSGS:fi,HTTP_STATUS_CODES:Si}=PP;DT.exports=vP;function vP(e,t,r){for(let n=0;n<t.length;n++)BP(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];HP(i,r,e.operation)}}a(vP,"processRows");function BP(e){if(Buffer.byteLength(String(e))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hi(new Error,fi.ATTR_NAME_LENGTH_ERR(e),Si.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(e)||fl.isEmpty(e.trim()))throw hi(new Error,fi.ATTR_NAME_NULLISH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(BP,"validateAttribute");function HP(e,t,r){if(!e.hasOwnProperty(t)||fl.isEmptyOrZeroLength(e[t])){if(r===Uo.OPERATIONS_ENUM.INSERT||r===Uo.OPERATIONS_ENUM.UPSERT){e[t]=DP.v4();return}throw hl.error("Update transaction aborted due to record with no hash value:",e),hi(new Error,fi.RECORD_MISSING_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hl.error(e),hi(new Error,fi.HASH_VAL_LENGTH_ERR,Si.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw hl.error(e),hi(new Error,fi.INVALID_FORWARD_SLASH_IN_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(HP,"validateHash")});var vT=f((A2,PT)=>{"use strict";var Mo=class{constructor(t,r){this.type=t,this.message=r}};a(Mo,"ITCEventObject");PT.exports=Mo});var Do=f((g2,qT)=>{var qP=require("crypto"),BT=9;function FP(e){let t=xP(BT),r=HT(e+t);return t+r}a(FP,"createHash");function GP(e,t){let r=e.substr(0,BT),s=r+HT(t+r);return e===s}a(GP,"validateHash");function xP(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(xP,"generateSalt");function HT(e){return qP.createHash("md5").update(e).digest("hex")}a(HT,"md5");qT.exports={hash:FP,validate:GP}});var GT=f((N2,FT)=>{"use strict";var Gr=T(),Ti=class{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ti,"BaseLicense");var Po=class extends Ti{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Po,"ExtendedLicense");FT.exports={BaseLicense:Ti,ExtendedLicense:Po}});var ms=f((b2,KT)=>{"use strict";var on=require("fs-extra"),xT=Do(),VT=require("crypto"),VP=require("moment"),kP=require("uuid").v4,Pe=I(),Tl=require("path"),$P=b(),_t=T(),YP=GT().ExtendedLicense,an="invalid license key format",KP="061183",WP="mofi25",QP="aes-256-cbc",JP=16,zP=32,kT=U();kT.initSync();var Sl;KT.exports={validateLicense:$T,generateFingerPrint:ZP,licenseSearch:YT,getLicense:tv};function ml(){return Tl.join(kT.getHdbBasePath(),_t.LICENSE_KEY_DIR_NAME,_t.LICENSE_FILE_NAME)}a(ml,"getLicenseDirPath");function XP(){let e=ml();return Tl.join(e,_t.LICENSE_FILE_NAME)}a(XP,"getLicenseFilePath");function Rl(){let e=ml();return Tl.join(e,_t.REG_KEY_FILE_NAME)}a(Rl,"getFingerPrintFilePath");async function ZP(){let e=Rl();try{return await on.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await jP();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(ZP,"generateFingerPrint");async function jP(){let e=kP(),t=xT.hash(e),r=Rl();try{await on.mkdirp(ml()),await on.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(jP,"writeFingerprint");function $T(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:_t.STORAGE_TYPES_ENUM.LMDB,api_call:_t.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:_t.RAM_ALLOCATION_ENUM.DEFAULT,version:_t.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=Rl(),n=!1;try{n=on.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=on.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(WP),c=o[1];c=Buffer.concat([Buffer.from(c)],JP);let _=Buffer.concat([Buffer.from(i)],zP),u=VT.createDecipheriv(QP,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=ev(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(an),Pe.error(an),new Error(an)}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(an),Pe.error(an),new Error(an)}else r.exp_date=l;r.exp_date<VP().valueOf()&&(r.valid_date=!1),xT.validate(o[1],`${KP}${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||Pe.error("Invalid licence"),r}a($T,"validateLicense");function ev(e,t){try{let r=VT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(ev,"checkOldLicense");function YT(){let e=new YP;e.api_call=0;let t=[];try{t=on.readFileSync(XP(),"utf-8").split(_t.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if($P.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$T(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){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=_t.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=_t.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT),Sl=e,e}a(YT,"licenseSearch");async function tv(){return Sl||await YT(),Sl}a(tv,"getLicense")});var cn=f((C2,Il)=>{"use strict";var{Worker:rv,MessageChannel:sv,parentPort:Rr,isMainThread:JT,threadId:nv,workerData:iv}=require("worker_threads"),{PACKAGE_ROOT:av}=T(),{join:ov,isAbsolute:cv,extname:_v}=require("path"),{totalmem:WT}=require("os"),Ol=T(),zT=U(),uv=ms(),vo=I(),lv=T();zT.initSync();var Ev=zT.get(Ol.CONFIG_PARAMS.HTTP_THREADS)||1,dv=1024*1024,xr=[],Rs=[],hv=50,XT=1e4,ZT="restart",jT="request_thread_info",em="resource_report",tm="thread_info",rm="added-port",Al;Il.exports={startWorker:pl,restartWorkers:Nl,shutdownWorkers:Sv,workers:xr,setMonitorListener:pv,onMessageFromWorkers:Tv,broadcast:mv};function pl(e,t={}){let s=uv.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||WT();n=Math.min(n,WT());let i=Math.min(Math.max(Math.floor(n/dv/(1+Ev/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of Rs){let{port1:l,port2:E}=new sv;u.postMessage({type:rm,port:l},[l]),c.push(E)}_v(e)||(e+=".js");let _=new rv(cv(e)?e:ov(av,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Bo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{pl(e,t)},_.on("error",u=>{console.error("Worker error:",u),vo.error("Worker error:",u)}),_.on("exit",u=>{xr.splice(xr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<hv?(t.unexpectedRestarts=_.unexpectedRestarts+1,pl(e,t)):vo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===ZT&&Nl(u.workerType),u.type===jT&&Rv(_),u.type===em&&Av(_,u)}),xr.push(_),Ov(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(pl,"startWorker");var fv=[Ol.THREAD_TYPES.HTTP];async function Nl(e=null,t=2,r=!0){if(JT){t<1&&(t=t*xr.length);let s=[];for(let n of xr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=fv.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),XT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Rr.postMessage({type:ZT,workerType:e})}a(Nl,"restartWorkers");function Sv(e){return Nl(e,1/0,!1)}a(Sv,"shutdownWorkers");var sm=[];function Tv(e){sm.push(e)}a(Tv,"onMessageFromWorkers");function mv(e){for(let t of Rs)try{t.postMessage(e)}catch(r){vo.error("Unable to send message to worker",r)}}a(mv,"broadcast");function Rv(e){e.postMessage({type:tm,workers:nm()})}a(Rv,"sendThreadInfo");function nm(){let e=Date.now();return xr.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(nm,"getChildWorkerInfo");function Av(e,t){e.resources=t,e.resources.updated=Date.now()}a(Av,"recordResourceReport");var gl;function pv(e){gl=e}a(pv,"setMonitorListener");var gv=1e3,QT=!1;function Ov(){QT||(QT=!0,setInterval(()=>{for(let e of xr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}gl&&gl()},gv).unref())}a(Ov,"startMonitoring");var Nv=1e3;if(Rr){Bo(Rr);for(let e of iv.addPorts)Bo(e);setInterval(()=>{let e=process.memoryUsage();Rr.postMessage({type:em,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Nv).unref(),Al=a(()=>new Promise((e,t)=>{Rr.on("message",r),Rr.postMessage({type:jT});function r(s){s.type===tm&&(Rr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Al=nm;Il.exports.getThreadInfo=Al;function Bo(e,t){Rs.push(e),e.on("message",r=>{if(r.type===rm)Bo(r.port);else for(let s of sm)s(r)}).on("close",()=>{Rs.splice(Rs.indexOf(e),1)}).on("exit",()=>{Rs.splice(Rs.indexOf(e),1)}),t||e.unref()}a(Bo,"addPort");JT||Rr.on("message",async e=>{let{type:t}=e;t===lv.ITC_EVENT_TYPES.SHUTDOWN&&(Rr.unref(),setTimeout(()=>{vo.warn("Thread did not voluntarily terminate",nv),process.exit(0)},XT).unref())})});var om=f((U2,am)=>{"use strict";var bl=z(),Iv=I(),im=at().LMDB_ERRORS_ENUM;am.exports=bv;async function bv(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await bl.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==im.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await bl.closeEnvironment(global.lmdb_map[s]),await bl.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==im.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){Iv.error(t)}}a(bv,"cleanLMDBMap")});var It=f((M2,um)=>{"use strict";var qo=dl(),Nt=b(),wv=require("util"),Fo=Xt(),Cv=Ar(),wl=I(),{handleHDBError:Vr,hdb_errors:yv}=y(),{HTTP_STATUS_CODES:As}=yv,Uv=wv.promisify(Cv.getTableSchema),Lv="updated",cm="inserted",_m="upserted";um.exports={insert:Dv,update:Pv,upsert:vv,validation:Mv,flush:Bv};async function Mv(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.");let t=await Uv(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw wl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw wl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Mv,"validation");async function Dv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);let s=await Fo.createRecords(e);return Ho(cm,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Dv,"insertData");async function Pv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);let s=await Fo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Ho(Lv,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(Pv,"updateData");async function vv(e){if(e.operation!=="upsert")throw Vr(new Error,"invalid operation, must be upsert",As.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);try{let s=await Fo.upsertRecords(e);return Ho(_m,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Vr(s,null,null,wl.ERR,n)}}a(vv,"upsertData");function Ho(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===cm?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===_m?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Bv(e){return Fo.flush(e.schema,e.table)}a(Bv,"flush")});var yl=f((P2,dm)=>{var Hv=re(),Cl=require("joi"),{hdb_schema_table:lm}=zt(),Em={schema:lm,table:lm},qv={date:Cl.date().iso().required()},Fv={timestamp:Cl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};dm.exports=function(e,t){let r=t==="timestamp"?{...Em,...Fv}:{...Em,...qv},s=Cl.object(r);return Hv.validateBySchema(e,s)}});var Tm=f((v2,Sm)=>{var Gv=re(),hm=require("joi"),{hdb_schema_table:fm}=zt(),xv=hm.object({schema:fm,table:fm,hash_values:hm.array().required()});Sm.exports=function(e){return Gv.validateBySchema(e,xv)}});var Rm=f((B2,mm)=>{"use strict";var Go=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Go,"InsertObject");var xo=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(xo,"NoSQLSeachObject");var Vo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vo,"DeleteResponseObject");mm.exports={InsertObject:Go,NoSQLSeachObject:xo,DeleteResponseObject:Vo}});var gs=f((q2,Nm)=>{"use strict";var pm=yl(),Vv=Tm(),ko=b(),Am=require("moment"),gm=I(),{promisify:kv,callbackify:$v}=require("util"),ps=T(),Yv=Ar(),Ul=kv(Yv.getTableSchema),Ll=Xt(),{DeleteResponseObject:Kv}=Rm(),{handleHDBError:kr,hdb_errors:Wv}=y(),{HDB_ERROR_MSGS:$o,HTTP_STATUS_CODES:$r}=Wv,Qv="records successfully deleted",Jv=$v(Om);Nm.exports={delete:Jv,deleteRecord:Om,deleteFilesBefore:zv,deleteAuditLogsBefore:Xv};async function zv(e){let t=pm(e,"date");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(!Am(e.date,Am.ISO_8601).isValid())throw kr(new Error,$o.INVALID_DATE,$r.BAD_REQUEST,ps.LOG_LEVELS.ERROR,$o.INVALID_DATE,!0);let s=ko.checkSchemaTableExist(e.schema,e.table);if(s)throw kr(new Error,s,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,s,!0);let n=await Ll.deleteRecordsBefore(e);if(await Ul(e.schema,e.table),gm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(zv,"deleteFilesBefore");async function Xv(e){let t=pm(e,"timestamp");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw kr(new Error,$o.INVALID_VALUE("Timestamp"),$r.BAD_REQUEST,ps.LOG_LEVELS.ERROR,$o.INVALID_VALUE("Timestamp"),!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);let s=await Ll.deleteAuditLogsBefore(e);return await Ul(e.schema,e.table),gm.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Xv,"deleteAuditLogsBefore");async function Om(e){let t=Vv(e);if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);try{await Ul(e.schema,e.table);let s=await Ll.deleteRecords(e);return ko.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Qv}`),s}catch(s){if(s.message===ps.SEARCH_NOT_FOUND_MESSAGE){let n=new Kv;return n.message=ps.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Om,"deleteRecord")});var bm=f((G2,Im)=>{var Ml=re(),ve={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 Zv(e){return ve.password.presence=!0,ve.username.presence=!0,ve.role.presence=!0,ve.active.presence=!0,Ml.validateObject(e,ve)}a(Zv,"addUserValidation");function jv(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(jv,"alterUserValidation");function eB(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(eB,"dropUserValidation");Im.exports={addUserValidation:Zv,alterUserValidation:jv,dropUserValidation:eB}});var Yr=f((V2,Um)=>{"use strict";var mi=require("crypto"),Cm="aes-256-cbc",tB=32,rB=16,Dl=64,ym=32,sB=Dl+ym,wm=new Map;Um.exports={encrypt:nB,decrypt:iB,createNatsTableStreamName:aB};function nB(e){let t=mi.randomBytes(tB),r=mi.randomBytes(rB),s=mi.createCipheriv(Cm,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(nB,"encrypt");function iB(e){let t=e.substr(0,Dl),r=e.substr(Dl,ym),s=e.substr(sB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=mi.createDecipheriv(Cm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(iB,"decrypt");function aB(e,t){let r=`${e}.${t}`,s=wm.get(r);return s||(s=mi.createHash("md5").update(`${e}.${t}`).digest("hex"),wm.set(r,s)),s}a(aB,"createNatsTableStreamName")});var le=f((Y2,Mm)=>{"use strict";var{platform:$2}=require("os"),oB="nats-server.zip",Pl="nats-server",cB=process.platform==="win32"?`${Pl}.exe`:Pl,vl="HDB",_B=/^[^\s.,*>]+$/,Lm="__request__",uB=a(e=>`${e}.${Lm}`,"REQUEST_SUBJECT"),lB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},EB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},dB={HUB:"hub.pid",LEAF:"leaf.pid"},hB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},fB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:vl,deliver_subject:"__HDB__.WORKQUEUE"},SB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:vl,deliver_subject:"HDB.SCHEMAQUEUE"},TB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:vl,deliver_subject:"HDB.USERQUEUE"},mB={SUCCESS:"success",ERROR:"error"},RB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},AB={TXN:"txn",MSGID:"msgid"},_n={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},pB={[_n.ERR]:1,[_n.WRN]:2,[_n.INF]:3,[_n.DBG]:4,[_n.TRC]:5},gB={debug:"-D",trace:"-DVV"};Mm.exports={NATS_SERVER_ZIP:oB,NATS_SERVER_NAME:Pl,NATS_BINARY_NAME:cB,PID_FILES:dB,NATS_CONFIG_FILES:EB,SERVER_SUFFIX:hB,WORK_QUEUE_CONSUMER_NAMES:fB,SCHEMA_QUEUE_CONSUMER_NAMES:SB,USER_QUEUE_CONSUMER_NAMES:TB,NATS_TERM_CONSTRAINTS_RX:_B,REQUEST_SUFFIX:Lm,UPDATE_REMOTE_RESPONSE_STATUSES:mB,CLUSTER_STATUS_STATUSES:RB,REQUEST_SUBJECT:uB,SUBJECT_PREFIXES:AB,MSG_HEADERS:lB,LOG_LEVELS:_n,LOG_LEVEL_FLAGS:gB,LOG_LEVEL_HIERARCHY:pB}});var er=f((Q2,Wm)=>{"use strict";var Hm="username is required",qm="nothing to update, must supply active, role or password to update",Fm="password cannot be an empty string",Gm="If role is specified, it cannot be empty.",xm="active must be true or false";Wm.exports={addUser:UB,alterUser:LB,dropUser:DB,userInfo:PB,listUsers:Ko,listUsersExternal:vB,setUsersToGlobal:Ri,findAndValidateUser:qB,getClusterUser:FB,USERNAME_REQUIRED:Hm,ALTERUSER_NOTHING_TO_UPDATE:qm,EMPTY_PASSWORD:Fm,EMPTY_ROLE:Gm,ACTIVE_BOOLEAN:xm};var Vm=It(),OB=gs(),Hl=Do(),km=bm(),$m=bt(),ql=ln(),ut=b(),Ym=require("validate.js"),D=I(),{promisify:Fl}=require("util"),Gl=Yr(),Dm=T(),Pm=le(),NB=fr(),W2=U(),IB=ms(),bB=fs(),{handleHDBError:Zt,hdb_errors:wB}=y(),{HTTP_STATUS_CODES:jt,AUTHENTICATION_ERROR_MSGS:Bl,HDB_ERROR_MSGS:un}=wB,{UserEventMsg:xl}=Kr(),vm=require("lodash"),Km={username:!0,active:!0,role:!0,password:!0},Bm=new Map,Yo=Fl($m.searchByValue),CB=Fl($m.searchByHash),yB=Fl(OB.delete);async function UB(e){let t=Ym.cleanAttributes(e,Km),r=km.addUserValidation(t);if(r)throw Zt(new Error,r.message,jt.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 Yo(s),n=n&&Array.from(n)}catch(_){throw D.error("There was an error searching for a role in add user"),D.error(_),_}if(!n||n.length<1)throw Zt(new Error,un.ROLE_NAME_NOT_FOUND(t.role),jt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Zt(new Error,un.DUP_ROLES_FOUND(t.role),jt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Vm.insert(i)}catch(_){throw D.error("There was an error searching for a user."),D.error(_),_}D.debug(o);try{await Ri()}catch(_){throw D.error("Got an error setting users to global"),D.error(_),_}if(o.skipped_hashes.length===1)throw Zt(new Error,un.USER_ALREADY_EXISTS(t.username),jt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ql.signalUserChange(new xl(process.pid)),`${c.username} successfully added`}a(UB,"addUser");async function LB(e){let t=Ym.cleanAttributes(e,Km);if(ut.isEmptyOrZeroLength(t.username))throw new Error(Hm);if(ut.isEmptyOrZeroLength(t.password)&&ut.isEmptyOrZeroLength(t.role)&&ut.isEmptyOrZeroLength(t.active))throw new Error(qm);if(!ut.isEmpty(t.password)&&ut.isEmptyOrZeroLength(t.password.trim()))throw new Error(Fm);if(!ut.isEmpty(t.active)&&!ut.isBoolean(t.active))throw new Error(xm);let r=MB(t.username);if(!ut.isEmpty(t.password)&&!ut.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password)),t.role==="")throw new Error(Gm);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 Yo(i)||[])}catch(c){throw D.error("Got an error searching for a role."),D.error(c),c}if(!o||o.length===0){let c=un.ALTER_USER_ROLE_NOT_FOUND(t.role);throw D.error(c),Zt(new Error,c,jt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=un.ALTER_USER_DUP_ROLES(t.role);throw D.error(c),Zt(new Error,c,jt.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 Vm.update(s)}catch(i){throw D.error("Error during update."),D.error(i),i}try{await Ri()}catch(i){throw D.error("Got an error setting users to global"),D.error(i),i}return ql.signalUserChange(new xl(process.pid)),n}a(LB,"alterUser");function MB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(MB,"isClusterUser");async function DB(e){try{let t=km.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ut.isEmpty(global.hdb_users.get(e.username)))throw Zt(new Error,un.USER_NOT_EXIST(e.username),jt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yB(r)}catch(n){throw D.error("Got an error deleting a user."),D.error(n),n}D.debug(s);try{await Ri()}catch(n){throw D.error("Got an error setting users to global."),D.error(n),n}return ql.signalUserChange(new xl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DB,"dropUser");async function PB(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 CB(r)}catch(n){throw D.error("Got an error searching for a role."),D.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw D.error(r),r}return t}a(PB,"userInfo");async function vB(){let e;try{e=await Ko()}catch(t){throw D.error("Got an error listing users."),D.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(vB,"listUsersExternal");async function Ko(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Yo(e)}catch(o){throw D.error("Got an error searching for roles."),D.error(o),o}let r={};for(let o of t)r[o.id]=vm.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 Yo(s)}catch(o){throw D.error("Got an error searching for users."),D.error(o),o}let i=new Map;for(let o of n)o=vm.cloneDeep(o),o.role=r[o.role],BB(o.role),i.set(o.username,o);return(await IB.getLicense()).enterprise?i:HB(Array.from(i.values()))}catch(e){throw D.error("got an error listing users"),D.error(e),ut.errorizeMessage(e)}return null}a(Ko,"listUsers");function BB(e){try{if(!e){D.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(bB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){D.error("Got an error trying to set system permissions."),D.error(t)}}a(BB,"appendSystemTablesToRole");function HB(e){try{if(D.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?(D.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return D.error("error filtering users."),D.error(t),new Map}}a(HB,"nonEnterpriseFilter");async function Ri(){try{let e=await Ko();global.hdb_users=e}catch(e){throw D.error(e),e}}a(Ri,"setUsersToGlobal");async function qB(e,t,r=!0){global.hdb_users||await Ri();let s=global.hdb_users.get(e);if(!s)throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Zt(new Error,Bl.USER_INACTIVE,jt.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(Bm.get(t)===s.password)return n;if(Hl.validate(s.password,t))Bm.set(t,s.password);else throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qB,"findAndValidateUser");async function FB(){let e=await Ko(),t=NB.getConfigFromFile(Dm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ut.isEmpty(r)&&r?.role?.role===Dm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Pm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Pm.SERVER_SUFFIX.ADMIN,r}a(FB,"getClusterUser")});var Wo=f((z2,Xm)=>{"use strict";var Os=I(),lt=T(),GB=om(),Qm=Ar(),xB=Ns(),VB=er(),{validateEvent:zm}=Kr(),Ai=Xt(),kB=require("process"),$B={[lt.ITC_EVENT_TYPES.SCHEMA]:YB,[lt.ITC_EVENT_TYPES.USER]:WB};async function YB(e){let t=zm(e);if(t){Os.error(t);return}Os.trace("ITC schemaHandler received schema event:",e),await GB(e.message),await KB(e.message)}a(YB,"schemaHandler");async function KB(e){try{if(Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.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 xB.describeTable({schema:e.schema,table:e.table});break;default:Qm.setSchemaDataToGlobal(Jm);break}else Qm.setSchemaDataToGlobal(Jm)}catch(t){Os.error(t)}}a(KB,"syncSchemaMetadata");function Jm(e){e&&Os.error(e)}a(Jm,"handleErrorCallback");async function WB(e){try{Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=zm(e);if(t){Os.error(t);return}Os.trace(`ITC userHandler ${lt.HDB_ITC_CLIENT_PREFIX}${kB.pid} received user event:`,e),await VB.setUsersToGlobal()}catch(t){Os.error(t)}}a(WB,"userHandler");Xm.exports=$B});var Kr=f((t4,jm)=>{"use strict";var Z2=I(),Vl=b(),QB=T(),{ITC_ERRORS:pi}=at(),{parentPort:j2,threadId:JB,isMainThread:zB,workerData:e4}=require("worker_threads"),{onMessageFromWorkers:XB,broadcast:ZB}=cn();jm.exports={sendItcEvent:jB,validateEvent:Zm,SchemaEventMsg:eH,UserEventMsg:tH};var Qo;XB(e=>{Qo=Qo||Wo(),Zm(e),Qo[e.type]&&Qo[e.type](e)});function jB(e){!zB&&e.message&&(e.message.originator=JB),ZB(e)}a(jB,"sendItcEvent");function Zm(e){if(typeof e!="object")return pi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Vl.isEmpty(e.type))return pi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Vl.isEmpty(e.message))return pi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Vl.isEmpty(e.message.originator))return pi.MISSING_ORIGIN;if(QB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return pi.INVALID_EVENT(e.type)}a(Zm,"validateEvent");function eH(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(eH,"SchemaEventMsg");function tH(e){this.originator=e}a(tH,"UserEventMsg")});var ln=f((n4,sR)=>{"use strict";var eR=T(),s4=b(),Jo=I(),tR=vT(),En,{sendItcEvent:rR}=Kr();function rH(e){try{Jo.trace("signalSchemaChange called with message:",e),En=En||Wo();let t=new tR(eR.ITC_EVENT_TYPES.SCHEMA,e);En.schema(t),rR(t)}catch(t){Jo.error(t)}}a(rH,"signalSchemaChange");function sH(e){try{Jo.trace("signalUserChange called with message:",e),En=En||Wo();let t=new tR(eR.ITC_EVENT_TYPES.USER,e);En.user(t),rR(t)}catch(t){Jo.error(t)}}a(sH,"signalUserChange");sR.exports={signalSchemaChange:rH,signalUserChange:sH}});var zo=f((a4,iR)=>{"use strict";var nR=b(),nH=T(),iH=I(),aH=wo(),oH=bo(),cH=ln(),{SchemaEventMsg:_H}=Kr(),uH="already exists in";iR.exports=lH;async function lH(e,t,r){if(nR.isEmptyOrZeroLength(r))return r;let s=[];nR.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 EH(e,t.schema,t.name,i)})),n}a(lH,"lmdbCheckForNewAttributes");async function EH(e,t,r,s){let n=new oH(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await dH(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(uH))iH.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(EH,"createNewAttribute");async function dH(e){let t;return t=await aH(e),cH.signalSchemaChange(new _H(process.pid,nH.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(dH,"createAttribute")});var dn=f((c4,aR)=>{"use strict";var Xo=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(Xo,"LMDBTransactionObject");aR.exports=Xo});var cR=f((u4,oR)=>{"use strict";var hH=dn(),fH=T().OPERATIONS_ENUM,Zo=class extends hH{constructor(t,r,s,n,i=void 0){super(fH.INSERT,r,s,n,i),this.records=t}};a(Zo,"LMDBInsertTransactionObject");oR.exports=Zo});var uR=f((E4,_R)=>{"use strict";var SH=dn(),TH=T().OPERATIONS_ENUM,jo=class extends SH{constructor(t,r,s,n,i,o=void 0){super(TH.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(jo,"LMDBUpdateTransactionObject");_R.exports=jo});var ER=f((h4,lR)=>{"use strict";var mH=dn(),RH=T().OPERATIONS_ENUM,ec=class extends mH{constructor(t,r,s,n,i,o=void 0){super(RH.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(ec,"LMDBUpsertTransactionObject");lR.exports=ec});var hR=f((S4,dR)=>{"use strict";var AH=dn(),pH=T().OPERATIONS_ENUM,tc=class extends AH{constructor(t,r,s,n,i=void 0){super(pH.DELETE,s,n,t,i),this.original_records=r}};a(tc,"LMDBDeleteTransactionObject");dR.exports=tc});var gi=f((R4,mR)=>{"use strict";var m4=require("path"),fR=z(),gH=cR(),OH=uR(),NH=ER(),IH=hR(),hn=Le(),SR=b(),{CONFIG_PARAMS:bH}=T(),TR=U();TR.initSync();var rc=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:wH}=j();mR.exports=CH;async function CH(e,t){if(TR.get(bH.LOGGING_AUDITLOG)===!1)return;let r=wH(e.schema,e.table),s=await fR.openEnvironment(r,e.table,!0),n=yH(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){fR.initializeDBIs(s,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),SR.isEmpty(n.user_name)||s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(CH,"writeTransaction");function yH(e,t){let r=SR.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===rc.INSERT)return new gH(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPDATE)return new OH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPSERT)return new NH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.DELETE)return new IH(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yH,"createTransactionObject")});var kl=f((g4,RR)=>{"use strict";var UH=Co(),p4=di(),Oi=T(),LH=Lo(),MH=nn().insertRecords,DH=z(),PH=I(),vH=zo(),{getSchemaPath:BH}=j(),HH=gi();RR.exports=qH;async function qH(e){try{let{schema_table:t,attributes:r}=UH(e);LH(e,r,t.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(r.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vH(e.hdb_auth_header,t,r),n=BH(e.schema,e.table),i=await DH.openEnvironment(n,e.table),o=await MH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await HH(e,o)}catch(c){PH.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(qH,"lmdbCreateRecords")});var gR=f((N4,pR)=>{"use strict";var AR=T(),FH=kl(),GH=di(),xH=require("fs-extra"),{getSchemaPath:VH}=j();pR.exports=kH;async function kH(e){let t=[{name:e.schema,createddate:Date.now()}],r=new GH(AR.SYSTEM_SCHEMA_NAME,AR.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await FH(r),await xH.mkdirp(VH(e.schema))}a(kH,"lmdbCreateSchema")});var NR=f((b4,OR)=>{"use strict";var sc=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(sc,"DeleteRecordsResponseObject");OR.exports=sc});var Kl=f((L4,wR)=>{"use strict";var IR=z(),$l=Ss(),Yl=at().LMDB_ERRORS_ENUM,$H=Le(),bR=I(),C4=b(),YH=require("lmdb"),KH=NR(),WH=T(),{OVERFLOW_MARKER:y4,MAX_SEARCH_KEY_LENGTH:U4}=$H,QH=WH.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function JH(e,t,r,s){if($l.validateEnv(e),t===void 0)throw new Error(Yl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Yl.IDS_REQUIRED):new Error(Yl.IDS_MUST_BE_ITERABLE);try{let n=IR.listDBIs(e);IR.initializeDBIs(e,t,n);let i=new KH,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let m=e.dbis[t].get(o);if(!m||s&&m[QH]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,YH.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!m.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=m[H];if(q!=null)try{let Ue=$l.getIndexedValues(q);if(Ue)for(let M=0,$=Ue.length;M<$;M++)x.remove(Ue[M],o)}catch{bR.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(m)}catch(m){bR.warn(m),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=$l.getNextMonotonicTime(),i}catch(n){throw n}}a(JH,"deleteRecords");wR.exports={deleteRecords:JH}});var Ni=f((D4,yR)=>{"use strict";var fn=b(),zH=Kl(),XH=z(),{getSchemaPath:ZH}=j(),jH=gi(),eq=I();yR.exports=tq;async function tq(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(fn.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fn.isEmptyOrZeroLength(e.hash_values)&&!fn.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];fn.isEmpty(_)||e.hash_values.push(_)}}if(fn.isEmptyOrZeroLength(e.hash_values))return CR([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fn.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=ZH(e.schema,e.table),i=await XH.openEnvironment(n,e.table),o=await zH.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await jH(e,o)}catch(c){eq.error(`unable to write transaction due to ${c.message}`)}return CR(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(tq,"lmdbDeleteRecords");function CR(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(CR,"createDeleteResponse")});var Ql=f((B4,UR)=>{"use strict";var rq=T(),v4=Ss();function Wl(e,t){let r=Object.create(null);if(t.length===1&&rq.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(Wl,"parseRow");function sq(e,t,r,s){let n=Wl(r,e);s.push(n)}a(sq,"searchAll");function nq(e,t,r,s){let n=Wl(r,e);s[t]=n}a(nq,"searchAllToMap");function iq(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(iq,"iterateDBI");function Is(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(Is,"pushResults");function aq(e,t,r,s,n,i){t.toString().endsWith(e)&&Is(t,r,s,n,i)}a(aq,"endsWith");function oq(e,t,r,s,n,i){t.toString().includes(e)&&Is(t,r,s,n,i)}a(oq,"contains");function cq(e,t,r,s,n,i){t>e&&Is(t,r,s,n,i)}a(cq,"greaterThanCompare");function _q(e,t,r,s,n,i){t>=e&&Is(t,r,s,n,i)}a(_q,"greaterThanEqualCompare");function uq(e,t,r,s,n,i){t<e&&Is(t,r,s,n,i)}a(uq,"lessThanCompare");function lq(e,t,r,s,n,i){t<=e&&Is(t,r,s,n,i)}a(lq,"lessThanEqualCompare");UR.exports={parseRow:Wl,searchAll:sq,searchAllToMap:nq,iterateDBI:iq,endsWith:aq,contains:oq,greaterThanCompare:cq,greaterThanEqualCompare:_q,lessThanCompare:uq,lessThanEqualCompare:lq,pushResults:Is}});var ws=f((x4,HR)=>{"use strict";var Wr=z(),q4=I(),Et=Ss(),nc=Le(),ce=at().LMDB_ERRORS_ENUM,F4=b(),Eq=T(),ic=Ql(),{parseRow:dq}=ic,G4=require("lmdb"),{OVERFLOW_MARKER:LR,MAX_SEARCH_KEY_LENGTH:hq}=nc;function MR(e,t,r,s=!1,n=void 0,i=void 0){return bs(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(MR,"iterateFullIndex");function Ii(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return bs(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(Ii,"iterateRangeBetween");function bs(e,t,r,s){let n=e.database||e,i=Wr.openDBI(n,r);i[nc.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wr.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(bs,"setupTransaction");function DR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(LR)){if(!n)if(r)n=Wr.openDBI(e,r);else{let _=Wr.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Wr.openDBI(e,_[u]),!n[nc.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(DR,"getOverflowCheck");function fq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return bs(e,t,t,(o,c,_)=>(ac(r),r=bi(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>dq(u.value,r))))}a(fq,"searchAll");function Sq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);ac(r),r=bi(e.database||e,r);let o=new Map;for(let{key:c,value:_}of MR(e,t,t,s,n,i))o.set(c,ic.parseRow(_,r));return o}a(Sq,"searchAllToMap");function Tq(e,t,r=!1,s=void 0,n=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=MR(e,void 0,t,r,s,n),c=o.transaction,_=DR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(Tq,"iterateDBI");function mq(e,t){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Wr.statDBI(e,t).entryCount}a(mq,"countAll");function Rq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),bs(e,t,r,(c,_,u,l)=>(s=Et.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(Rq,"equals");function Aq(e,t,r){return Qr(e,t,r),Wr.openDBI(e,t).getValuesCount(r)}a(Aq,"count");function pq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),bs(e,null,r,(c,_)=>{s=Et.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,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(pq,"startsWith");function gq(e,t,r,s,n=!1,i=void 0,o=void 0){return PR(e,t,r,s,n,i,o,!0)}a(gq,"endsWith");function PR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Qr(e,r,s),bs(e,null,r,(_,u,l,E)=>{let d=DR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let m=h.toString();return m.endsWith(LR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?m.endsWith(s):m.includes(s))?u[nc.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(PR,"contains");function Oq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!0,!1)}a(Oq,"greaterThan");function Nq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!1,!1)}a(Nq,"greaterThanEqual");function Iq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!0)}a(Iq,"lessThan");function bq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!1)}a(bq,"lessThanEqual");function wq(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Et.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=Et.convertKeyValueToWrite(s),n=Et.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ii(e,t,r,s,n,i,o,c)}a(wq,"between");function Cq(e,t,r,s){Et.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),r=bi(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ic.parseRow(c,r)),o}a(Cq,"searchByHash");function yq(e,t,r){Et.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(yq,"checkHashExists");function Uq(e,t,r,s,n=[]){return BR(e,t,r,s,n),vR(e,t,r,s,n).map(i=>i[1])}a(Uq,"batchSearchByHash");function Lq(e,t,r,s,n=[]){BR(e,t,r,s,n);let i=new Map;for(let[o,c]of vR(e,t,r,s,n))i.set(o,c);return i}a(Lq,"batchSearchByHashToMap");function vR(e,t,r,s,n=[]){return bs(e,t,t,(i,o,c)=>{r=bi(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ic.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(vR,"batchHashSearch");function BR(e,t,r,s,n){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(BR,"initializeBatchSearchByHash");function ac(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ac,"validateFetchAttributes");function Qr(e,t,r){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>hq)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Qr,"validateComparisonFunctions");function bi(e,t){return t.length===1&&Eq.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wr.listDBIs(e)),t}a(bi,"setGetWholeRowAttributes");HR.exports={searchAll:fq,searchAllToMap:Sq,count:Aq,countAll:mq,equals:Rq,startsWith:pq,endsWith:gq,contains:PR,searchByHash:Cq,setGetWholeRowAttributes:bi,batchSearchByHash:Uq,batchSearchByHashToMap:Lq,checkHashExists:yq,iterateDBI:Tq,greaterThan:Oq,greaterThanEqual:Nq,lessThan:Iq,lessThanEqual:bq,between:wq}});var wi=f(($4,xR)=>{var qR=require("lodash"),FR=re(),W=require("joi"),Mq=b(),{hdb_schema_table:Ft,checkValidTable:GR}=zt(),{handleHDBError:Dq,hdb_errors:Pq}=y(),{HTTP_STATUS_CODES:vq}=Pq,k4=W.object({schema:Ft,table:Ft,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(Ft).required()}),Bq=W.object({schema:Ft,table:Ft,search_attribute:Ft,search_value:W.any().required(),get_attributes:W.array().min(1).items(Ft).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),Hq=W.object({schema:Ft,table:Ft,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(Ft).required(),conditions:W.array().min(1).items(W.object({search_attribute:Ft,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});xR.exports=function(e,t){let r=null;switch(t){case"value":r=FR.validateBySchema(e,Bq);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(GR("schema",e.schema)),i(GR("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=FR.validateBySchema(e,Hq);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Mq.checkGlobalSchemaTable(e.schema,e.table);if(n)return Dq(new Error,n,vq.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=qR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!qR.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Jl=f((K4,VR)=>{"use strict";var qq=z(),Fq=wi(),{getSchemaPath:Gq}=j();VR.exports=xq;function xq(e){let t=Fq(e,"hashes");if(t)throw t;let r=Gq(e.schema,e.table);return qq.openEnvironment(r,e.table)}a(xq,"initialize")});var zl=f((Q4,kR)=>{"use strict";var Vq=ws(),kq=Jl();kR.exports=$q;async function $q(e){let t=await kq(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Vq.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a($q,"lmdbGetDataByHash")});var Sn=f((z4,$R)=>{"use strict";var oc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(oc,"SearchByHashObject");$R.exports=oc});var KR=f((j4,YR)=>{"use strict";var Z4=Sn(),Yq=ws(),Kq=Jl();YR.exports=Wq;async function Wq(e){let t=await Kq(e),r=global.hdb_schema[e.schema][e.table];return Yq.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Wq,"lmdbSearchByHash")});var Gt=f((t5,WR)=>{"use strict";var cc=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(cc,"SearchObject");WR.exports=cc});var _c=f((s5,jR)=>{"use strict";var Be=ws(),Qq=z(),Jq=b(),C=Le(),Cs=T(),zq=fs(),QR=at().LMDB_ERRORS_ENUM,{compareKeys:Tn}=require("ordered-binary"),{getSchemaPath:Xq}=j(),pr=Cs.SEARCH_WILDCARDS;async function Zq(e,t,r){let s;e.schema===Cs.SYSTEM_SCHEMA_NAME?s=zq[e.table]:s=global.hdb_schema[e.schema][e.table];let n=ZR(e,s.hash_attribute,r,t);return zR(e,n,s.hash_attribute,r)}a(Zq,"prepSearch");async function zR(e,t,r,s){let n=Xq(e.schema,e.table),i=await Qq.openEnvironment(n,e.table),o=XR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(eF(e,r)===!1){let l=e.search_attribute;if(l===r)return s?JR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?JR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Be.batchSearchByHashToMap(c,r,e.get_attributes,u):Be.batchSearchByHash(c,r,e.get_attributes,u)}a(zR,"executeSearch");function XR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=Be.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=Be.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=Be.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=Be.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Be.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Be.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return Be.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Be.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=Be.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=Be.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Be.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=Be.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=Be.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(XR,"searchByType");function jq(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Tn(i,s[0])>=0&&Tn(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>Tn(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Tn(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>Tn(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Tn(n[r],s)<=0;default:return Object.create(null)}}a(jq,"filterByType");function JR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(JR,"createMapFromIterable");function eF(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(eF,"checkToFetchMore");function ZR(e,t,r,s){if(Jq.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),pr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(pr[0])<0&&n.indexOf(pr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(pr.indexOf(i)>=0&&pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(pr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(pr[0])||n.includes(pr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(QR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Cs.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Cs.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Cs.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Cs.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Cs.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QR.UNKNOWN_SEARCH_TYPE)}}a(ZR,"createSearchTypeFromSearchObject");jR.exports={executeSearch:zR,createSearchTypeFromSearchObject:ZR,prepSearch:Zq,searchByType:XR,filterByType:jq}});var tA=f((a5,eA)=>{"use strict";var i5=Gt(),tF=wi(),rF=b(),sF=T(),nF=_c();eA.exports=iF;function iF(e,t){if(!rF.isEmpty(t)&&sF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=tF(e,"value");if(s)throw s;let n=!0;return nF.prepSearch(e,t,n)}a(iF,"lmdbGetDataByValue")});var mn=f((_5,rA)=>{"use strict";var c5=Gt(),aF=wi(),oF=b(),cF=T(),_F=_c();rA.exports=uF;async function uF(e,t){if(!oF.isEmpty(t)&&cF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aF(e,"value");if(s)throw s;return _F.prepSearch(e,t,!1)}a(uF,"lmdbSearchByValue")});var nA=f((E5,sA)=>{"use strict";var l5=Le(),uc=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(uc,"SearchByConditionsObject");var lc=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(lc,"SearchCondition");var Ec=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ec,"SortAttribute");sA.exports={SearchByConditionsObject:uc,SearchCondition:lc,SortAttribute:Ec}});var _A=f((f5,cA)=>{"use strict";var h5=nA().SearchByConditionsObject,lF=Gt(),EF=wi(),Xl=ws(),dc=Le(),oA=_c(),dF=Ql(),hF=require("lodash"),{getSchemaPath:fF}=j(),iA=z(),{handleHDBError:SF,hdb_errors:TF}=y(),{HTTP_STATUS_CODES:mF}=TF,RF=1e8;cA.exports=AF;async function AF(e){let t=EF(e,"conditions");if(t)throw SF(t,t.message,mF.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=fF(e.schema,e.table),s=await iA.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)iA.openDBI(s,u.search_attribute);let i=hF.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===dc.SEARCH_TYPES.EQUALS?u.estimated_count=Xl.count(s,u.search_attribute,u.search_value):l===dc.SEARCH_TYPES.CONTAINS||l===dc.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=RF}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await aA(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(oA.filterByType),E=l.length,d=Xl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let m=0;m<E;m++)if(!l[m](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>dF.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await aA(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Xl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(AF,"lmdbSearchByConditions");async function aA(e,t,r,s){let n=new lF(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===dc.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,oA.searchByType(e,n,i,s).map(o=>o.value)}a(aA,"executeConditionSearch")});var Ci=f((T5,uA)=>{"use strict";var pF=T().OPERATIONS_ENUM,hc=class{constructor(t,r,s,n=void 0){this.operation=pF.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(hc,"DeleteObject");uA.exports=hc});var Zl=f((R5,mA)=>{"use strict";var hA=Gt(),fA=Ci(),SA=mn(),TA=Ni(),We=T(),lA=b(),EA=z(),{getTransactionAuditStorePath:gF,getSchemaPath:OF}=j(),dA=I();mA.exports=NF;async function NF(e){try{if(lA.isEmpty(global.hdb_schema[e.schema])||lA.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await IF(e),await bF(e);let t=OF(e.schema,e.table);try{await EA.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")dA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gF(e.schema,e.table);await EA.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")dA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(NF,"lmdbDropTable");async function IF(e){let t=new hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await SA(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 fA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await TA(n)}a(IF,"deleteAttributesFromSystem");async function bF(e){let t=new hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await SA(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 fA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await TA(n)}catch(i){throw i}}a(bF,"dropTableFromSystem")});var AA=f((p5,RA)=>{"use strict";var wF=require("fs-extra"),CF=Gt(),yF=Sn(),UF=Ci(),LF=Zl(),MF=Ni(),DF=zl(),PF=mn(),gr=T(),{getSchemaPath:vF}=j(),{handleHDBError:BF,hdb_errors:HF}=y(),{HDB_ERROR_MSGS:qF,HTTP_STATUS_CODES:FF}=HF;RA.exports=GF;async function GF(e){let t;try{t=await xF(e.schema);let r=new CF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await PF(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await LF(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new UF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await MF(n);let i=vF(t);await wF.remove(i)}catch(r){throw r}}a(GF,"lmdbDropSchema");async function xF(e){let t=new yF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await DF(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw BF(new Error,qF.SCHEMA_NOT_FOUND(e),FF.NOT_FOUND,void 0,void 0,!0);return s}a(xF,"validateDropSchema")});var jl=f((O5,pA)=>{"use strict";var fc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(fc,"CreateTableObject");pA.exports=fc});var OA=f((b5,gA)=>{"use strict";var VF=require("fs-extra"),Sc=z(),{getTransactionAuditStorePath:kF}=j(),eE=Le(),I5=jl();gA.exports=$F;async function $F(e){let t;try{let r=kF(e.schema,e.table);await VF.mkdirp(r),t=await Sc.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{Sc.createDBI(t,eE.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Sc.createDBI(t,eE.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Sc.createDBI(t,eE.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($F,"createTransactionsAuditEnvironment")});var wA=f((C5,bA)=>{"use strict";var tE=T(),NA=z(),YF=nn(),{getSystemSchemaPath:KF,getSchemaPath:WF}=j(),QF=fs(),JF=wo(),rE=bo(),zF=I(),XF=OA(),nE=QF.hdb_table,IA=[];for(let e=0;e<nE.attributes.length;e++)IA.push(nE.attributes[e].attribute);bA.exports=ZF;async function ZF(e,t){let r=WF(t.schema,t.table),s=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new rE(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await NA.createEnvironment(r,t.table),e!==void 0){let o=await NA.openEnvironment(KF(),tE.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YF.insertRecords(o,nE.hash_attribute,IA,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await sE(s),await sE(n),await sE(i)}await XF(t)}catch(o){throw o}}a(ZF,"lmdbCreateTable");async function sE(e){try{await JF(e)}catch(t){zF.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(sE,"createAttribute")});var yA=f((U5,CA)=>{"use strict";var jF=Co(),eG=Lo(),tG=zo(),yi=T(),rG=nn().updateRecords,sG=z(),{getSchemaPath:nG}=j(),iG=gi(),aG=I();CA.exports=oG;async function oG(e){try{let{schema_table:t,attributes:r}=jF(e);eG(e,r,t.hash_attribute),e.schema!==yi.SYSTEM_SCHEMA_NAME&&(r.includes(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await tG(e.hdb_auth_header,t,r),n=nG(e.schema,e.table),i=await sG.openEnvironment(n,e.table),o=await rG(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iG(e,o)}catch(c){aG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(oG,"lmdbUpdateRecords")});var LA=f((M5,UA)=>{"use strict";var cG=T().OPERATIONS_ENUM,Tc=class{constructor(t,r,s,n=void 0){this.operation=cG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Tc,"UpsertObject");UA.exports=Tc});var DA=f((v5,MA)=>{"use strict";var P5=LA(),_G=Co(),uG=Lo(),lG=zo(),Ui=T(),EG=nn().upsertRecords,dG=z(),{getSchemaPath:hG}=j(),fG=gi(),SG=I(),{handleHDBError:TG,hdb_errors:mG}=y();MA.exports=RG;async function RG(e){let t;try{t=_G(e)}catch(_){throw TG(_,_.message,mG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;uG(e,s,r.hash_attribute),e.schema!==Ui.SYSTEM_SCHEMA_NAME&&(s.includes(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await lG(e.hdb_auth_header,r,s),i=hG(e.schema,e.table),o=await dG.openEnvironment(i,e.table),c=await EG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await fG(e,c)}catch(_){SG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(RG,"lmdbUpsertRecords")});var FA=f((H5,qA)=>{"use strict";var AG=Gt(),PA=b(),vA=I(),pG=mn(),BA=T(),gG=Kl().deleteRecords,OG=z(),{getSchemaPath:NG}=j(),{promisify:IG}=require("util"),bG=IG(setTimeout),HA=1e4,wG=10;qA.exports=CG;async function CG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(PA.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 AG(e.schema,e.table,BA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await pG(n,BA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw vA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return PA.isEmptyOrZeroLength(s)?(vA.trace("No records found to delete"),{message:"No records found to delete"}):await yG(e,s,t)}a(CG,"lmdbDeleteRecordsBefore");async function yG(e,t,r){let s=NG(e.schema,e.table),n=await OG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=HA){let _=t.slice(o,o+HA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await gG(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 bG(wG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(yG,"chunkDeletes")});var xA=f((F5,GA)=>{"use strict";var mc=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(mc,"DeleteBeforeObject");GA.exports=mc});var kA=f((x5,VA)=>{"use strict";var Rc=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Rc,"DeleteAuditLogsBeforeResults");VA.exports=Rc});var KA=f(($5,YA)=>{"use strict";var iE=z(),{getTransactionAuditStorePath:UG}=j(),k5=xA(),Li=Le(),LG=b(),$A=kA(),MG=require("util").promisify,DG=MG(setTimeout),PG=1e4,vG=100;YA.exports=BG;async function BG(e){let t=UG(e.schema,e.table),r=await iE.openEnvironment(t,e.table,!0),s=iE.listDBIs(r);iE.initializeDBIs(r,Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new $A;do n=await HG(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 DG(vG);while(n.transactions_deleted>0);return i}a(BG,"deleteAuditLogsBefore");async function HG(e,t){let r=new $A;try{let s=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];LG.isEmpty(c)||(n=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>PG)break}return await n,r}catch(s){throw s}}a(HG,"deleteTransactions")});var QA=f((K5,WA)=>{"use strict";var Ac=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Ac,"DropAttributeObject");WA.exports=Ac});var zA=f((J5,JA)=>{"use strict";var qG=Gt(),FG=Ci(),Q5=QA(),tr=T(),GG=b(),aE=z(),xG=fs(),VG=mn(),kG=Ni(),{getSchemaPath:$G}=j();JA.exports=YG;async function YG(e,t=!0){let r;e.schema===tr.SYSTEM_SCHEMA_NAME?r=xG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await WG(e),n=$G(e.schema,e.table),i=await aE.openEnvironment(n,e.table);return t===!0&&await KG(e,i,r.hash_attribute),aE.dropDBI(i,e.attribute),s}a(YG,"lmdbDropAttribute");async function KG(e,t,r){let s=aE.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(KG,"removeAttributeFromAllObjects");async function WG(e){let t=new qG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await VG(t)).filter(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(GG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new FG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return kG(i)}a(WG,"dropAttributeFromSystem")});var rp=f((Z5,tp)=>{"use strict";var oE=z(),Rn=Le(),X5=Ss(),cE=T(),XA=b(),{getTransactionAuditStorePath:QG}=j(),JG=ws(),pc=dn(),zG=I();tp.exports=XG;async function XG(e){let t=QG(e.schema,e.table),r=await oE.openEnvironment(t,e.table,!0),s=oE.listDBIs(r);oE.initializeDBIs(r,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ZA(r,e.search_values);case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,jG(r,e.search_values,n);case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return ZG(r,e.search_values);default:return ZA(r)}}a(XG,"readAuditLog");function ZA(e,t=[0,Date.now()]){XA.isEmpty(t[0])&&(t[0]=0),XA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Rn.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 pc,n))}a(ZA,"searchTransactionsByTimestamp");function ZG(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[Rn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,ep(e,i))}return Object.fromEntries(r)}a(ZG,"searchTransactionsByUsername");function jG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=JG.equals(e,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=ep(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);jA(_,"records",r,l,o),jA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(jG,"searchTransactionsByHashValues");function jA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new pc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new pc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(jA,"loopRecords");function ep(e,t){let r=[];try{let s=e.dbis[Rn.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 pc,i);r.push(o)}}catch(i){zG.warn(i)}return r}catch(s){throw s}}a(ep,"batchSearchTransactions")});var np=f((ej,sp)=>{"use strict";var{getSchemaPath:e0}=j(),t0=z();sp.exports={writeTransaction:r0};async function r0(e,t,r){let s=e0(e,t);return(await t0.openEnvironment(s,t)).transaction(r)}a(r0,"writeTransaction")});var cp=f((rj,op)=>{"use strict";var{getSchemaPath:ip}=j(),ap=z();op.exports={flush:s0,resetReadTxn:n0};async function s0(e,t){return(await ap.openEnvironment(ip(e,t),t.toString())).flushed}a(s0,"flush");async function n0(e,t){try{(await ap.openEnvironment(ip(e,t),t.toString())).resetReadTxn()}catch{}}a(n0,"resetReadTxn")});var lp=f((nj,up)=>{"use strict";var i0=I(),{handleHDBError:a0}=y(),o0=zu(),c0=wo(),_0=kl(),u0=gR(),l0=Ni(),E0=zl(),d0=KR(),h0=tA(),f0=mn(),S0=_A(),T0=AA(),m0=wA(),R0=yA(),A0=DA(),p0=FA(),g0=KA(),O0=Zl(),N0=zA(),I0=rp(),b0=np(),_p=cp(),gc=class extends o0{async searchByConditions(t){return S0(t)}async getDataByHash(t){return await E0(t)}async searchByHash(t){return await d0(t)}async getDataByValue(t,r){return await h0(t,r)}async searchByValue(t){return await f0(t)}async createSchema(t){return await u0(t)}async dropSchema(t){return await T0(t)}async createTable(t,r){return await m0(t,r)}async dropTable(t){return await O0(t)}async createAttribute(t){return await c0(t)}async createRecords(t){return await _0(t)}async updateRecords(t){return await R0(t)}async upsertRecords(t){try{return await A0(t)}catch(r){throw a0(r,null,null,i0.ERR,r)}}async deleteRecords(t){return await l0(t)}async deleteRecordsBefore(t){return await p0(t)}async dropAttribute(t){return await N0(t)}async deleteAuditLogsBefore(t){return await g0(t)}async readAuditLog(t){return await I0(t)}writeTransaction(t,r,s){return b0.writeTransaction(t,r,s)}flush(t,r){return _p.flush(t,r)}resetReadTxn(t,r){return _p.resetReadTxn(t,r)}};a(gc,"LMDBBridge");up.exports=gc});var Xt=f((aj,dp)=>{"use strict";var w0=lp(),C0=zu(),y0=U();y0.initSync();var Ep;function U0(){return Ep instanceof C0?Ep:new w0}a(U0,"getBridge");dp.exports=U0()});var Tp=f((cj,Sp)=>{"use strict";var hp=require("lodash"),Mi=require("mathjs"),L0=require("jsonata"),fp=b();Sp.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hp.uniqWith(e,hp.isEqual):e,searchJSON:M0,mad:Di.bind(null,Mi.mad),mean:Di.bind(null,Mi.mean),mode:Di.bind(null,Mi.mode),prod:Di.bind(null,Mi.prod),median:Di.bind(null,Mi.median)};function Di(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(Di,"aggregateFunction");function M0(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(fp.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fp.isEmpty(this.__ala__.res[r])){let s=L0(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(M0,"searchJSON")});var Rp=f((uj,mp)=>{"use strict";var Ee=require("moment"),_E="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ee.suppressDeprecationWarnings=!0;mp.exports={current_date:()=>Ee().utc().format("YYYY-MM-DD"),current_time:()=>Ee().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ee(e).utc().format("YYYY");case"month":return Ee(e).utc().format("MM");case"day":return Ee(e).utc().format("DD");case"hour":return Ee(e).utc().format("HH");case"minute":return Ee(e).utc().format("mm");case"second":return Ee(e).utc().format("ss");case"millisecond":return Ee(e).utc().format("SSS");default:break}},date:e=>Ee(e).utc().format(_E),date_format:(e,t)=>Ee(e).utc().format(t),date_add:(e,t,r)=>Ee(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ee(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Ee(e).utc(),n=Ee(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Ee().utc().valueOf(),get_server_time:()=>Ee().format(_E),offset_utc:(e,t)=>Ee(e).utc().utcOffset(t).format(_E)}});var Op=f((lj,gp)=>{"use strict";var D0=require("@turf/area"),P0=require("@turf/length"),v0=require("@turf/circle"),B0=require("@turf/difference"),H0=require("@turf/distance"),q0=require("@turf/boolean-contains"),F0=require("@turf/boolean-equal"),G0=require("@turf/boolean-disjoint"),x0=require("@turf/helpers"),Ap=T(),F=b();gp.exports={geoArea:V0,geoLength:k0,geoCircle:$0,geoDifference:Y0,geoDistance:pp,geoNear:K0,geoContains:W0,geoEqual:Q0,geoCrosses:J0,geoConvert:z0};var uE="geo1 is required",lE="geo2 is required";function V0(e){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),D0.default(e)}a(V0,"geoArea");function k0(e,t){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),P0.default(e,{units:t||"kilometers"})}a(k0,"geoLength");function $0(e,t,r){if(F.isEmpty(e))throw new Error("point is required");if(F.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),v0.default(e,t,{units:r||"kilometers"})}a($0,"geoCircle");function Y0(e,t){if(F.isEmpty(e))throw new Error("poly1 is required");if(F.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),B0(e,t)}a(Y0,"geoDifference");function pp(e,t,r){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),H0.default(e,t,{units:r||"kilometers"})}a(pp,"geoDistance");function K0(e,t,r,s){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");if(F.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return pp(e,t,s)<=r}a(K0,"geoNear");function W0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),q0.default(e,t)}a(W0,"geoContains");function Q0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),F0.default(e,t)}a(Q0,"geoEqual");function J0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),!G0.default(e,t)}a(J0,"geoCrosses");function z0(e,t,r){if(F.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(F.isEmpty(t))throw new Error("geo_type is required");if(F.isEmpty(Ap.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ap.GEO_CONVERSION_ENUM).join(",")}`);return x0[t](e,r)}a(z0,"geoConvert")});var Oc=f((dj,Np)=>{var ys=Tp(),dt=Rp(),rr=Op();Np.exports=e=>{e.aggr.mad=e.aggr.MAD=ys.mad,e.aggr.mean=e.aggr.MEAN=ys.mean,e.aggr.mode=e.aggr.MODE=ys.mode,e.aggr.prod=e.aggr.PROD=ys.prod,e.aggr.median=e.aggr.MEDIAN=ys.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ys.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ys.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=dt.current_date,e.fn.current_time=e.fn.CURRENT_TIME=dt.current_time,e.fn.extract=e.fn.EXTRACT=dt.extract,e.fn.date=e.fn.DATE=dt.date,e.fn.date_format=e.fn.DATE_FORMAT=dt.date_format,e.fn.date_add=e.fn.DATE_ADD=dt.date_add,e.fn.date_sub=e.fn.DATE_SUB=dt.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=dt.date_diff,e.fn.now=e.fn.NOW=dt.now,e.fn.offset_utc=e.fn.OFFSET_UTC=dt.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=dt.get_server_time,e.fn.getdate=e.fn.GETDATE=dt.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=dt.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rr.geoNear}});var wp=f((hj,bp)=>{"use strict";var Pi=require("lodash"),be=require("alasql");be.options.cache=!1;var X0=Oc(),Ip=require("clone"),Nc=require("recursive-iterator"),P=I(),B=b(),An=Xt(),Z0=T(),{hdb_errors:j0}=y(),ex="IS NULL",xt="There was a problem performing this search. Please check the logs and try again.";X0(be);var Ic=class{constructor(t,r){if(B.isEmpty(t))throw P.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(),B.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!B.isEmptyOrZeroLength(s))return P.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw P.error("Error thrown from checkEmptySQL in SQLSearch class method search."),P.error(s),new Error(xt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw P.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),P.error(s),new Error(xt)}if(Object.keys(this.data).length===0)return P.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw P.error("Error thrown from processJoins in SQLSearch class method search."),P.error(s),new Error(xt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw P.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),P.error(s),new Error(xt)}try{return t=await this._finalSQL(),t}catch(s){throw P.error("Error thrown from finalSQL in SQLSearch class method search."),P.error(s),new Error(xt)}}_getColumns(){let t=new Nc(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(Ip(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Pi.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(B.isEmpty(this.statement.where)){P.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Nc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!B.isEmpty(r)&&r.right)if(B.isNotEmptyAndHasValue(r.right.value)){let s=B.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new be.yy.LogicValue({value:s}):r.right instanceof be.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new be.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=B.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new be.yy.LogicValue({value:i}):s instanceof be.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new be.yy.NumValue({value:i}))});if(t){P.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Nc(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(!B.isEmpty(Z0.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(B.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(B.isEmptyOrZeroLength(r.left.columnid)||B.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(B.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!B.isEmpty(r.right.value)||!B.isEmpty(r.left.value)?s.add(B.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from)&&B.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&&Pi.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(B.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);B.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(B.isEmptyOrZeroLength(this.all_table_attributes)&&!B.isEmptyOrZeroLength(this.columns.columns))return t;if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await be.promise(r)}catch(r){throw P.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),P.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(Ip(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(B.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(ex)>-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=Pi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!B.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await An.getDataByHash(c);for(let E of c.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 P.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await An.getDataByValue(E);for(let[h,m]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}else if(!B.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await An.getDataByValue(c,h.operation);if(_)for(let[R]of m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(R)));else for(let[R,g]of m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(R)))}}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),P.error(l),new Error(xt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await An.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(E)))}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),P.error(l),new Error(xt)}}}_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 be.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 be.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new be.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 be.yy.FuncValue:new be.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(h,n);d=await be.promise(m,t),t=null}catch(h){throw P.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),P.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Pi.difference(m,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Nc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Pi.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 P.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),P.error(i),new Error(xt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await An.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let m=0;m<u;m++){let R=n.columns[m],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw P.error("Error thrown from getDataByHash function in SQLSearch class method getData."),P.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();P.trace(`Final SQL: ${n}`),s=await be.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),P.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw P.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),P.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 P.error(j0.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),P.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await An.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw P.error("There was an error when processing this SQL operation. Check your logs"),P.error(o),new Error(xt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ic,"SQLSearch");bp.exports=Ic});var bt=f((Sj,yp)=>{"use strict";var tx=US();yp.exports={searchByConditions:ix,searchByHash:ax,searchByValue:ox,search:cx};var EE=Xt(),Cp=require("util"),rx=Cp.callbackify(EE.searchByHash),sx=Cp.callbackify(EE.searchByValue),nx=wp();async function ix(e){return EE.searchByConditions(e)}a(ix,"searchByConditions");function ax(e,t){try{rx(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ax,"searchByHash");function ox(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),sx(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ox,"searchByValue");function cx(e,t){try{let r=new tx(e);r.validate(),new nx(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(cx,"search")});var Ns=f((mj,Hp)=>{"use strict";var Lp=bt(),Jr=I(),Mp=Oo(),_x=require("lodash"),ux=Yr(),Dp=b(),{promisify:Pp}=require("util"),Z=T(),{handleHDBError:bc,hdb_errors:lx}=y(),{HDB_ERROR_MSGS:wc,HTTP_STATUS_CODES:vp}=lx,Ex=U();Ex.initSync();var Up=z(),dx=ws(),{getSchemaPath:hx}=j(),vi=Pp(Lp.searchByValue),fx=Pp(Lp.searchByHash),pn="name",Bp="hash_attribute",dE="schema",Sx="schema_table",Tx="attribute";Hp.exports={describeAll:mx,describeTable:Cc,describeSchema:Ax};async function mx(e){try{let t=Dp.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:pn,search_value:Z.WILDCARD_SEARCH_VALUE,get_attributes:[pn]},i=await vi(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Z.ID_ATTRIBUTE_STRING,search_value:Z.WILDCARD_SEARCH_VALUE,get_attributes:[Bp,Z.ID_ATTRIBUTE_STRING,pn,dE]},u=await vi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Cc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Cc({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Jr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Jr.error("Got an error in describeAll"),Jr.error(t),bc(new Error,wc.DESCRIBE_ALL_ERR)}}a(mx,"describeAll");async function Cc(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=Mp.describe_table(e);if(o)throw o;if(r===Z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Z.SYSTEM_SCHEMA_NAME][s];let c={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:pn,search_value:s,hash_values:[],get_attributes:[Z.WILDCARD_SEARCH_VALUE]},_=Array.from(await vi(c));if(!_||_.length===0)throw bc(new Error,wc.TABLE_NOT_FOUND(e.schema,e.table),vp.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw bc(new Error,wc.INVALID_TABLE_ERR(i));let l={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Sx,search_value:r+"."+s,get_attributes:[Tx]},E=Array.from(await vi(l));E=_x.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=Rx(n)),i.attributes=E,i.clustering_stream_name=ux.createNatsTableStreamName(u.schema,u.name);try{let d=hx(i.schema,i.name),h=await Up.openEnvironment(d,i.name),m=Up.statDBI(h,i.hash_attribute);i.record_count=m.entryCount;for(let{key:R}of dx.lessThan(h,i.hash_attribute,Z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Jr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Jr.error(`There was an error getting attributes for table '${u.name}'`),Jr.error(l)}return i}a(Cc,"descTable");function Rx(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Rx,"getAttrsByPerms");async function Ax(e){let t=Mp.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:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:dE,search_value:s,hash_values:[],get_attributes:[Bp,Z.ID_ATTRIBUTE_STRING,pn,dE]},i=Array.from(await vi(n));if(i&&i.length<1){let o={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[pn]},c=Array.from(await fx(o));if(c&&c.length<1)throw bc(new Error,wc.SCHEMA_NOT_FOUND(e.schema),vp.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),Dp.isEmpty(_)||_.describe){let u=await Cc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Jr.error(`Error describing schema table '${e.schema}.${c}'`),Jr.error(_)}})),o}}a(Ax,"describeSchema")});var Ar=f((Aj,Vp)=>{var gn=fs(),{callbackify:Gp,promisify:px}=require("util");Vp.exports={setSchemaDataToGlobal:qp,getTableSchema:Nx,getSystemSchema:bx,setSchemaDataToGlobalAsync:px(qp)};var xp=Ns(),gx=Gp(xp.describeAll),Ox=Gp(xp.describeTable);function qp(e){gx(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=gn),global.hdb_schema=r,e(null,null)})}a(qp,"setSchemaDataToGlobal");function Fp(e,t){return e==="system"?gn[t]:global.hdb_schema[e][t]}a(Fp,"returnSchema");function Nx(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Ix(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,Fp(e,t))}):r(null,Fp(e,t))}a(Nx,"getTableSchema");function Ix(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=gn:global.hdb_schema={system:gn},r();return}Ox(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:gn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Ix,"setTableDataToGlobal");function bx(){return gn}a(bx,"getSystemSchema")});var yc=f((gj,kp)=>{"use strict";var wx=Xt();kp.exports={writeTransaction:Cx};function Cx(e,t,r){return wx.writeTransaction(e,t,r)}a(Cx,"writeTransaction")});var He=f((Mj,og)=>{"use strict";var ge=U();ge.initSync();var yx=require("fs-extra"),Ux=require("semver"),Gi=require("path"),{monotonicFactory:Lx}=require("ulidx"),mE=Lx(),Mx=require("util"),Yp=require("child_process"),Dx=Mx.promisify(Yp.exec),Px=Yp.spawn,V=le(),Q=T(),Uc=b(),zr=I(),Lc=Yr(),vx=yc(),Bi=fr(),{encode:SE,decode:RE}=require("msgpackr"),{isEmpty:Us}=Uc,Kp=er(),Wp=12e10,{connect:Bx,StorageType:Qp,RetentionPolicy:Jp,AckPolicy:AE,DeliverPolicy:xi,DiscardPolicy:Hx,NatsConnection:Nj,JetStreamManager:Ij,JetStreamClient:bj,StringCodec:wj,JSONCodec:qx,createInbox:pE,StreamSource:Cj,headers:Fx,toJsMsg:zp,nuid:yj,JetStreamOptions:Uj,ErrorCode:$p,nanos:Lj}=require("nats"),{PACKAGE_ROOT:Gx}=T(),xx=ei(),Xp=qx(),Vx="clustering",kx=xx.engines[V.NATS_SERVER_NAME],$x=Gi.join(Gx,"dependencies"),TE=Gi.join($x,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),hE,fE,Hi,qi,Fi,Vt;og.exports={runCommand:Zp,checkNATSServerInstalled:Yx,createConnection:gE,getConnection:Mc,getJetStreamManager:Vi,getJetStream:jp,getNATSReferences:ht,getServerList:Wx,createLocalStream:OE,listStreams:eg,deleteLocalStream:Qx,getServerConfig:ki,listRemoteStreams:Jx,viewStream:zx,viewStreamIterator:Xx,publishToStream:Zx,createWorkQueueStream:jx,addSourceToWorkStream:rg,request:eV,removeSourceFromWorkStream:ng,reloadNATS:NE,reloadNATSHub:tV,reloadNATSLeaf:rV,extractServerName:sg,requestErrorHandler:sV,updateWorkStream:nV,createLocalTableStream:ig,createTableStreams:iV,purgeTableStream:ag,purgeSchemaTableStreams:aV,getStreamInfo:oV,updateLocalStreams:_V,closeConnection:Kx,getJsmServerName:$i,addNatsMsgHeader:tg};async function Zp(e,t=void 0){let{stdout:r,stderr:s}=await Dx(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 me.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FM(s,r),Vu(s);let n=s.toJSON();if(Ne=hs(n),Ne.logging_rotation_rotate)for(let i in sS)Ne[i]&&me.error(`Config ${sS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);me.trace(DM)}}a(cS,"initConfig");function FM(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Wt.join(r,pt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Wt.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Wt.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(me.trace("Updating config file with missing config params"),At.writeFileSync(t,String(e)))}a(FM,"checkForUpdatedConfig");function Vu(e){let t=e.toJSON(),r=IM(t);if(r.error)throw za.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(Vu,"validateConfig");function GM(e,t){Ne===void 0&&(Ne={});let r=hr[e.toLowerCase()];if(r===void 0){me.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(GM,"updateConfigObject");function _S(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&cS();let i=oS(hr.hdb_root),o=Wt.join(i,pt.HDB_CONFIG_FILE),c=tn(o),_;if(r===void 0&&e.toLowerCase()===Br.SCHEMAS)_=t;else if(r===void 0){let E=hr[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=Gu(E,t);c.setIn([...d],h)}else for(let E in r){let d=hr[E.toLowerCase()];if(d===Br.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),m=Gu(d,r[E]);try{c.setIn([...h],m)}catch(R){me.error(R)}}}_&&aS(c,_),Vu(c);let u=c.getIn(["rootPath"]),l=Wt.join(u,pt.HDB_CONFIG_FILE);s===!0&&xM(o,u),At.writeFileSync(l,String(c)),n&&(Ne=hs(c.toJSON())),me.trace(`Config parameter: ${e} updated with value: ${t}`)}a(_S,"updateConfigValue");function xM(e,t){try{let r=Wt.join(t,"backup",`${pt.HDB_CONFIG_FILE}.bak`);At.copySync(e,r),me.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){me.error(PM),me.error(r)}}a(xM,"backupConfigFile");var VM=["schemas"];function hs(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!VM.includes(r)){let s=hs(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(hs,"flattenConfig");function Gu(e,t){if(e===Br.CLUSTERING_NODENAME||e===Br.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(wM(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ct.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 ct.autoCast(t)}a(Gu,"castConfigValue");function kM(){let e=ct.getPropsFilePath(),t=xu(e);return tn(t).toJSON()}a(kM,"getConfiguration");async function $M(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return _S(void 0,void 0,n,!0),BM}catch(i){throw typeof i=="string"||i instanceof String?yM(i,i,UM.BAD_REQUEST,void 0,void 0,!0):i}}a($M,"setConfiguration");function ku(){let e=ct.getPropsFilePath();try{At.accessSync(e,At.constants.F_OK|At.constants.R_OK)}catch(s){throw me.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=xu(e);return tn(t).toJSON()}a(ku,"readConfigFile");function tn(e){return bM.parseDocument(At.readFileSync(e,"utf8"),{simpleKeys:!0})}a(tn,"parseYamlDoc");function YM(){let e=ku(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ct.isEmptyOrZeroLength(t)?[]:t;let r=rS(t);if(r)throw za.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ct.isEmptyOrZeroLength(s)?[]:s;let n=rS(s);if(n)throw za.CONFIG_VALIDATION(n.message);if(!ct.isEmptyOrZeroLength(s)&&!ct.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ct.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw za.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(YM,"getClusteringRoutes");function uS(e){let t=nS(e);Ne={};for(let r in hr){let s=t.get(r.toUpperCase());if(ct.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=hr[r].toLowerCase();n===Br.LOGGING_ROOT?Ne[n]=Wt.dirname(s):Ne[n]=s}return Ne}a(uS,"initOldConfig");function KM(e){let t=ku();return CM.get(t,e.replaceAll("_","."))}a(KM,"getConfigFromFile")});var U=f((fZ,dS)=>{"use strict";var $u=require("fs-extra"),Qt=require("path"),WM=require("os"),QM=require("properties-reader"),jn=I(),rn=b(),L=T(),Za=fr(),JM="Error initializing environment manager",ja="BOOT_PROPS_FILE_PATH",ES=!1,zM={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Sr={};dS.exports={BOOT_PROPS_FILE_PATH:ja,getHdbBasePath:XM,setHdbBasePath:ZM,get:jM,initSync:tD,setProperty:k,initTestEnvironment:rD};function XM(){return Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(XM,"getHdbBasePath");function ZM(e){Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ZM,"setHdbBasePath");function jM(e){let t=Za.getConfigValue(e);return t===void 0?Sr[e]:t}a(jM,"get");function k(e,t){zM[e]&&(Sr[e]=t),Za.updateConfigObject(e,t)}a(k,"setProperty");function eD(){let e;try{e=rn.getPropsFilePath(),$u.accessSync(e,$u.constants.F_OK|$u.constants.R_OK),ES=!0;let t=QM(e);return Sr[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Sr[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Sr[ja]=e,!0}catch{return jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(eD,"doesPropFileExist");function tD(e=!1){try{(ES||eD())&&(Za.initConfig(e),Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Za.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jn.error(JM),jn.error(t),console.error(t),process.exit(1)}}a(tD,"initSync");function rD(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Qt.join(__dirname,"../../","unitTests");Sr[ja]=Qt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,WM.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qt.join(_,"envDir","log")),k(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Qt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,rn.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,rn.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rn.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,rn.isEmpty(i)?!1:i),k(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Qt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rn.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ja}. Please check your boot props and settings files`;jn.fatal(r),jn.error(t)}}a(rD,"initTestEnvironment")});var to=f((TZ,SS)=>{"use strict";var{Readable:sD}=require("stream"),nD=1e4;SS.exports={streamAsJSON(e){return new eo({value:e})}};var eo=class extends sD{constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),hS)}catch(n){yield hS(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);fS(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>nD?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return fS(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};a(eo,"JSONStream");function hS(e){return console.error(e),JSON.stringify(e.toString())}a(hS,"handleError");function fS(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(fS,"when")});var ei=f((RZ,iD)=>{iD.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 Yu=f((AZ,TS)=>{var aD=require("fastify-plugin");TS.exports=aD(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var fs=f((pZ,oD)=>{oD.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 US=f((OZ,yS)=>{"use strict";var Ku=require("recursive-iterator"),cD=require("alasql"),Wu=require("clone"),mS=b(),{handleHDBError:RS,hdb_errors:_D}=y(),{HDB_ERROR_MSGS:AS,HTTP_STATUS_CODES:pS}=_D,uD=["DISTINCT_ARRAY"],gS=Symbol("validateTables"),Qu=Symbol("validateTable"),gZ=Symbol("getAllColumns"),OS=Symbol("validateAllColumns"),ro=Symbol("findColumn"),NS=Symbol("validateOrderBy"),ti=Symbol("validateSegment"),Ju=Symbol("validateColumn"),IS=Symbol("setColumnsForTable"),bS=Symbol("checkColumnsForAsterisk"),wS=Symbol("validateGroupBy"),CS=Symbol("hasColumns"),so=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[gS](),this[bS](),this[OS]()}[gS](){if(this[CS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Qu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Qu](t.table)})}}[CS](){let t=!1,r=new Ku(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Qu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw RS(new Error,AS.SCHEMA_NOT_FOUND(t.databaseid),pS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw RS(new Error,AS.TABLE_NOT_FOUND(t.databaseid,t.tableid),pS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Wu(s);n.table=Wu(t),this.attributes.push(n)})}[ro](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)}[bS](){let t=new Ku(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[IS](r.tableid)}[IS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new cD.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[OS](){this[ti](this.statement.columns,!1),this[ti](this.statement.joins,!1),this[ti](this.statement.where,!1),this[wS](this.statement.group,!1),this[ti](this.statement.order,!0)}[ti](t,r){if(!t)return;let s=new Ku(t),n=[];for(let{node:i,path:o}of s)!mS.isEmpty(i)&&!mS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[NS](i):n.push(this[Ju](i)));return n}[wS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&uD.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Wu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ro](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[ro](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[NS](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[Ju](t)}[Ju](t){let r=this[ro](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(so,"SelectValidator");yS.exports=so});var zu=f((IZ,LS)=>{"use strict";var no=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(no,"BridgeMethods");LS.exports=no});var Ss=f((yZ,HS)=>{"use strict";var MS=at().LMDB_ERRORS_ENUM,wZ=require("lmdb"),lD=Le(),CZ=require("buffer").Buffer,{OVERFLOW_MARKER:DS,MAX_SEARCH_KEY_LENGTH:io}=lD,PS=["number","string","symbol","boolean","bigint"];function ED(e){if(e=e?.database||e,!e)throw new Error(MS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(MS.INVALID_ENVIRONMENT)}a(ED,"validateEnv");function dD(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(dD,"stringifyData");function hD(e){return e instanceof Date?e.valueOf():e}a(hD,"convertKeyValueToWrite");function fD(e){if(e==null)return;if(PS.includes(typeof e))return e.length>io?[e.slice(0,io)+DS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];PS.includes(typeof n)&&(n.length>io?t.push(n.slice(0,io)+DS):t.push(n))}}return t}a(fD,"getIndexedValues");var ao=0,vS=0;function BS(){vS=Date.now()-performance.now()}a(BS,"adjustStartTime");BS();var SD=6e4;setInterval(BS,SD).unref();function TD(){let e=performance.now()+vS;return e>ao?(ao=e,e):(ao+=488e-6,ao)}a(TD,"getNextMonotonicTime");HS.exports={validateEnv:ED,stringifyData:dD,convertKeyValueToWrite:hD,getNextMonotonicTime:TD,getIndexedValues:fD}});var FS=f((LZ,qS)=>{"use strict";var oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(oo,"DBIDefinition");qS.exports=oo});var VS=f((DZ,xS)=>{"use strict";var Xu=U(),GS=T();Xu.initSync();var mD=Xu.get(GS.CONFIG_PARAMS.STORAGE_COMPRESSION),RD=Xu.get(GS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,co=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=mD&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=RD&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(co,"OpenDBIObject");xS.exports=co});var YS=f((vZ,$S)=>{"use strict";var sn=U(),ri=T();sn.initSync();var AD=sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kS=sn.get(ri.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),pD=sn.get(ri.CONFIG_PARAMS.STORAGE_NOREADAHEAD),_o=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=AD,kS!==void 0&&(this.overlappingSync=kS),this.noReadAhead=pD}};a(_o,"OpenEnvironmentObject");$S.exports=_o});var z=f((HZ,ZS)=>{"use strict";var Zu=require("lmdb"),gt=require("fs-extra"),Bt=require("path"),lo=Ss(),KS=I(),Ie=at().LMDB_ERRORS_ENUM,Eo=FS(),ju=VS(),WS=YS(),Hr=Le(),Ht=Hr.INTERNAL_DBIS_NAME,QS=Hr.DBI_DEFINITION_NAME,gD="data.mdb",OD="lock.mdb",si=".mdb",ND="-lock",uo=class{constructor(t,r,s=!1){this.dbi=Ot(t,r),this.key_type=this.dbi[Hr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Hr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Zu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(uo,"TransactionCursor");function el(e,t){if(e===void 0)throw new Error(Ie.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ie.ENV_NAME_REQUIRED)}a(el,"pathEnvNameValidation");async function tl(e,t,r=!0){try{await gt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ie.INVALID_BASE_PATH):s}try{let s=Bt.join(e,t+si);return await gt.access(s,gt.constants.R_OK|gt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await gt.access(Bt.join(e,t,gD),gt.constants.R_OK|gt.constants.F_OK),Bt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ie.INVALID_ENVIRONMENT)}else throw new Error(Ie.INVALID_ENVIRONMENT);throw s}}a(tl,"validateEnvironmentPath");function ho(e,t){if(lo.validateEnv(e),t===void 0)throw new Error(Ie.DBI_NAME_REQUIRED)}a(ho,"validateEnvDBIName");async function ID(e,t,r=!1,s=!1){el(e,t),t=t.toString();try{return await tl(e,t,s),rl(e,t,r)}catch(n){if(n.message===Ie.INVALID_ENVIRONMENT){let i=Bt.join(e,t);await gt.mkdirp(s?i:e);let o=new WS(s?i:i+si,!1),c=Zu.open(o);c.dbis=Object.create(null);let _=new ju(!1);c.openDB(Ht,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=sl(e,t,r);return c[Hr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(ID,"createEnvironment");async function bD(e,t,r,s=!0){let n=await rl(e,t);if(r===void 0)throw new Error(Ie.DESTINATION_PATH_REQUIRED);try{await gt.access(Bt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(bD,"copyEnvironment");async function rl(e,t,r=!1){el(e,t),t=t.toString();let s=sl(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 tl(e,t),i=Bt.join(e,t+si),o=n!=i,c=new WS(n,o),_=Zu.open(c);_.dbis=Object.create(null);let u=zS(_);for(let l=0;l<u.length;l++)Ot(_,u[l]);return _[Hr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(rl,"openEnvironment");async function wD(e,t,r=!1){el(e,t),t=t.toString();let s=Bt.join(e,t+si),n=await tl(e,t);if(global.lmdb_map!==void 0){let i=sl(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await JS(o),delete global.lmdb_map[i]}}await gt.remove(n),await gt.remove(n===s?n+ND:Bt.join(Bt.dirname(n),OD))}a(wD,"deleteEnvironment");async function JS(e){lo.validateEnv(e);let t=e[Hr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(JS,"closeEnvironment");function sl(e,t,r=!1){let n=`${Bt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(sl,"getCachedEnvironmentName");function CD(e){lo.validateEnv(e);let t=Object.create(null),r=Ot(e,Ht);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ht)try{t[s]=Object.assign(new Eo,n)}catch{KS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(CD,"listDBIDefinitions");function zS(e){lo.validateEnv(e);let t=[],r=Ot(e,Ht);for(let{key:s}of r.getRange({start:!1}))s!==Ht&&t.push(s);return t}a(zS,"listDBIs");function yD(e,t){let s=Ot(e,Ht).getEntry(t),n=new Eo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{KS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(yD,"getDBIDefinition");function XS(e,t,r,s=!1){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ot(e,t)}catch(n){if(n.message===Ie.DBI_DOES_NOT_EXIST){let i=new ju(r,s===!0),o=e.openDB(t,i),c=new Eo(r===!0,s);return o[QS]=c,Ot(e,Ht).putSync(t,c),e.dbis[t]=o,o}throw n}}a(XS,"createDBI");function Ot(e,t){if(ho(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ht?r=yD(e,t):r=new Eo,r===void 0)throw new Error(Ie.DBI_DOES_NOT_EXIST);let s;try{let n=new ju(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(Ie.DBI_DOES_NOT_EXIST):n}return s[QS]=r,e.dbis[t]=s,s}a(Ot,"openDBI");function UD(e,t){ho(e,t),t=t.toString();let r=Ot(e,t),s=r.getStats();return r[Hr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(UD,"statDBI");async function LD(e,t){try{let r=Bt.join(e,t+si);return(await gt.stat(r)).size}catch{throw new Error(Ie.INVALID_ENVIRONMENT)}}a(LD,"environmentDataSize");function MD(e,t){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_DROP_INTERNAL_DBIS_NAME);Ot(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ot(e,Ht).removeSync(t)}a(MD,"dropDBI");function DD(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ot(e,n)}catch(i){if(i.message===Ie.DBI_DOES_NOT_EXIST)XS(e,n,n!==t,n===t);else throw i}}}a(DD,"initializeDBIs");ZS.exports={openDBI:Ot,openEnvironment:rl,createEnvironment:ID,listDBIs:zS,listDBIDefinitions:CD,createDBI:XS,dropDBI:MD,statDBI:UD,deleteEnvironment:wD,initializeDBIs:DD,TransactionCursor:uo,environmentDataSize:LD,copyEnvironment:bD,closeEnvironment:JS}});var eT=f((FZ,jS)=>{"use strict";var fo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(fo,"InsertRecordsResponseObject");jS.exports=fo});var rT=f((xZ,tT)=>{"use strict";var So=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(So,"UpdateRecordsResponseObject");tT.exports=So});var nT=f((kZ,sT)=>{"use strict";var To=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(To,"UpsertRecordsResponseObject");sT.exports=To});var nn=f((QZ,oT)=>{"use strict";var PD=z(),vD=eT(),BD=rT(),HD=nT(),Jt=Ss(),ni=at().LMDB_ERRORS_ENUM,qD=Le(),Tr=T(),FD=b(),GD=require("uuid"),YZ=require("lmdb"),{handleHDBError:xD,hdb_errors:VD}=y(),{OVERFLOW_MARKER:KZ,MAX_SEARCH_KEY_LENGTH:WZ}=qD,iT=U();iT.initSync();var mo=iT.get(Tr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nl=Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ts=Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new vD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];aT(u,!0,n);let l=$D(e,t,r,u),E=u[t];o.push(l),c.push(E)}return al(o,c,s,i,n)}a(kD,"insertRecords");function $D(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Tr.FUNC_VAL],s[o]=c)}let _=Jt.getIndexedValues(c),u=e.dbis[o];if(_){mo&&u.prefetch(_.map(l=>({key:l,value:n})),Ro);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}mo&&e.dbis[t].prefetch([n],Ro),e.dbis[t].put(n,s,s[Ts])})}a($D,"insertRecord");function YD(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(YD,"removeSkippedRecords");function aT(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ts]))&&(e[Ts]=r||(r=Jt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[nl]))&&(e[nl]=r||Jt.getNextMonotonicTime()):delete e[nl]}a(aT,"setTimestamps");function il(e,t,r){r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),PD.initializeDBIs(e,t,r)}a(il,"initializeTransaction");async function KD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new BD,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=ol(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return al(c,_,s,i,n,o)}a(KD,"updateRecords");async function WD(e,t,r,s,n=Jt.getNextMonotonicTime()){try{cl(e,t,r,s)}catch(_){throw xD(_,_.message,VD.HTTP_STATUS_CODES.BAD_REQUEST)}il(e,t,r);let i=new HD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;FD.isEmpty(u[t])?(l=GD.v4(),u[t]=l):l=u[t];let E=ol(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return al(o,c,s,i,n)}a(WD,"upsertRecords");async function al(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Jt.getNextMonotonicTime(),YD(r,i),s}a(al,"finalizeWrite");function ol(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(aT(r,!l,o),Number.isInteger(r[Ts])&&u[Ts]>r[Ts])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],g=e.dbis[m];if(g===void 0)continue;let H=u[m];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][Tr.FUNC_VAL],r[m]=R)}if(R===H)continue;let x=Jt.getIndexedValues(H);if(x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.remove(x[q],s)}if(x=Jt.getIndexedValues(R),x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[Ts])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:ol(e,t,r,s,n,i,o))}a(ol,"updateUpsertRecord");function QD(e,t,r){if(Jt.validateEnv(e),t===void 0)throw new Error(ni.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ni.WRITE_ATTRIBUTES_REQUIRED):new Error(ni.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(QD,"validateBasic");function cl(e,t,r,s){if(QD(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ni.RECORDS_REQUIRED):new Error(ni.RECORDS_MUST_BE_ARRAY)}a(cl,"validateWrite");function Ro(){}a(Ro,"noop");oT.exports={insertRecords:kD,updateRecords:KD,upsertRecords:WD}});var j=f((zZ,dT)=>{"use strict";var _i=T(),JD=b(),Ke=U(),ui=require("path"),zD=require("minimist"),cT=require("fs-extra"),_T=require("lodash");Ke.initSync();var{CONFIG_PARAMS:qr,SCHEMAS_PARAM_CONFIG:ii,SYSTEM_SCHEMA_NAME:Ao}=_i,ai,oi,ci;function uT(){if(ai!==void 0)return ai;if(Ke.getHdbBasePath()!==void 0)return ai=Ke.get(qr.STORAGE_PATH)||ui.join(Ke.getHdbBasePath(),_i.SCHEMA_DIR_NAME),ai}a(uT,"getBaseSchemaPath");function lT(){if(oi!==void 0)return oi;if(Ke.getHdbBasePath()!==void 0)return oi=ET(Ao),oi}a(lT,"getSystemSchemaPath");function XD(){if(ci!==void 0)return ci;if(Ke.getHdbBasePath()!==void 0)return ci=Ke.get(_i.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ui.join(Ke.getHdbBasePath(),_i.TRANSACTIONS_DIR_NAME),ci}a(XD,"getTransactionAuditStoreBasePath");function ZD(e,t){let r=Ke.get(qr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ui.join(XD(),e.toString())}a(ZD,"getTransactionAuditStorePath");function ET(e,t){e=e.toString(),t=t&&t.toString();let r=Ke.get(_i.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ui.join(uT(),e)}a(ET,"getSchemaPath");function jD(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,zD(process.argv));let s=r[qr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!JD.isObject(s))throw o;i=s}for(let o of i){let c=o[Ao];if(!c)continue;let _=Ke.get(qr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[ii.PATH];if(u)return _T.set(_,[Ao,ii.TABLES,t,ii.PATH],u),Ke.setProperty(qr.SCHEMAS,_),u;let l=c?.[ii.PATH];if(l)return _T.set(_,[Ao,ii.PATH],l),Ke.setProperty(qr.SCHEMAS,_),l}}let n=r[qr.STORAGE_PATH.toUpperCase()];if(n){if(!cT.pathExistsSync(n))throw new Error(n+" does not exist");let i=ui.join(n,e);return cT.mkdirsSync(i),Ke.setProperty(qr.STORAGE_PATH,n),i}return lT()}a(jD,"initSystemSchemaPaths");function eP(){ai=void 0,oi=void 0,ci=void 0}a(eP,"resetPaths");dT.exports={getBaseSchemaPath:uT,getSystemSchemaPath:lT,getTransactionAuditStorePath:ZD,getSchemaPath:ET,initSystemSchemaPaths:jD,resetPaths:eP}});var zt=f((ZZ,ST)=>{"use strict";var fT=b(),hT=T(),go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,_l=require("joi"),po={schema_format:{pattern:go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tP=_l.alternatives(_l.string().min(1).max(po.schema_length.maximum).pattern(go).messages({"string.pattern.base":"{:#label} "+po.schema_format.message}),_l.number()).required();function rP(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>po.schema_length.maximum?`'${e}' maximum of 250 characters`:go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(rP,"checkValidTable");function sP(e,t){return fT.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(sP,"validateSchemaExists");function nP(e,t){let r=t.state.ancestors[0].schema;return fT.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(nP,"validateTableExists");function iP(e,t){return e.toLowerCase()===hT.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${hT.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(iP,"validateSchemaName");ST.exports={common_validators:po,schema_regex:go,hdb_schema_table:tP,validateSchemaExists:sP,validateTableExists:nP,validateSchemaName:iP,checkValidTable:rP}});var Oo=f((e2,TT)=>{var{common_validators:Fr}=zt(),li=re(),qt="is required",X={schema:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},table:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},hash_attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length}};function Ei(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(Ei,"makeAttributesStrings");function aP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence=!1,X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(aP,"schema_object");function oP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(oP,"table_object");function cP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence={message:qt},li.validateObject(e,X)}a(cP,"create_table_object");function _P(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence={message:qt},X.hash_attribute.presence=!1,li.validateObject(e,X)}a(_P,"attribute_object");function uP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(uP,"describe_table");function lP(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(lP,"validateTableResidence");TT.exports={schema_object:aP,create_table_object:cP,table_object:oP,attribute_object:_P,describe_table:uP,validateTableResidence:lP}});var RT=f((r2,mT)=>{"use strict";var EP=require("uuid"),No=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||EP.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(No,"CreateAttributeObject");mT.exports=No});var bo=f((n2,AT)=>{"use strict";var dP=RT(),Io=class extends dP{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Io,"LMDBCreateAttributeObject");AT.exports=Io});var gT=f((a2,pT)=>{"use strict";pT.exports=fP;var hP="inserted";function fP(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===hP?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fP,"returnObject")});var wo=f((c2,wT)=>{"use strict";var SP=T(),ul=z(),TP=nn(),{getSystemSchemaPath:mP,getSchemaPath:RP}=j(),AP=fs(),pP=Oo(),gP=bo(),OP=gT(),{handleHDBError:OT,hdb_errors:IT}=y(),NT=b(),{HTTP_STATUS_CODES:NP}=IT,ll=AP.hdb_attribute,bT=[];for(let e=0;e<ll.attributes.length;e++)bT.push(ll.attributes[e].attribute);var IP="inserted";wT.exports=bP;async function bP(e){let t=pP.attribute_object(e);if(t)throw OT(new Error,t.message,IT.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&NT.checkGlobalSchemaTable(e.schema,e.table);if(r)throw OT(new Error,r,NP.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NT.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 gP(e.schema,e.table,e.attribute,e.id);try{let i=await ul.openEnvironment(RP(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}`);ul.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await ul.openEnvironment(mP(),SP.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await TP.insertRecords(o,ll.hash_attribute,bT,[n]);return OP(IP,c,{records:[n]},_)}catch(i){throw i}}a(bP,"lmdbCreateAttribute")});var dl=f((u2,yT)=>{var{hdb_schema_table:CT}=zt(),wP=re(),El=require("joi"),CP={undefined:"undefined",null:"null"},yP=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||CP[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"),UP=El.object({schema:CT,table:CT,records:El.array().items(El.object().custom(yP)).required()});yT.exports=function(e){return wP.validateBySchema(e,UP)}});var Co=f((d2,LT)=>{"use strict";var mr=b(),UT=I(),E2=dl();LT.exports=LP;function LP(e){if(mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mr.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(mr.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&&mr.isEmptyOrZeroLength(o[r]))throw UT.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(!mr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw UT.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`);!mr.isEmpty(o[r])&&o[r]!==""&&s.has(mr.autoCast(o[r]))&&(o.skip=!0),s.add(mr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(LP,"insertUpdateValidate")});var di=f((f2,MT)=>{"use strict";var MP=T().OPERATIONS_ENUM,yo=class{constructor(t,r,s,n,i=void 0){this.operation=MP.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(yo,"InsertObject");MT.exports=yo});var Lo=f((m2,DT)=>{"use strict";var T2=di(),Uo=T(),fl=b(),hl=I(),DP=require("uuid"),{handleHDBError:hi,hdb_errors:PP}=y(),{HDB_ERROR_MSGS:fi,HTTP_STATUS_CODES:Si}=PP;DT.exports=vP;function vP(e,t,r){for(let n=0;n<t.length;n++)BP(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];HP(i,r,e.operation)}}a(vP,"processRows");function BP(e){if(Buffer.byteLength(String(e))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hi(new Error,fi.ATTR_NAME_LENGTH_ERR(e),Si.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(e)||fl.isEmpty(e.trim()))throw hi(new Error,fi.ATTR_NAME_NULLISH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(BP,"validateAttribute");function HP(e,t,r){if(!e.hasOwnProperty(t)||fl.isEmptyOrZeroLength(e[t])){if(r===Uo.OPERATIONS_ENUM.INSERT||r===Uo.OPERATIONS_ENUM.UPSERT){e[t]=DP.v4();return}throw hl.error("Update transaction aborted due to record with no hash value:",e),hi(new Error,fi.RECORD_MISSING_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hl.error(e),hi(new Error,fi.HASH_VAL_LENGTH_ERR,Si.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw hl.error(e),hi(new Error,fi.INVALID_FORWARD_SLASH_IN_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(HP,"validateHash")});var vT=f((A2,PT)=>{"use strict";var Mo=class{constructor(t,r){this.type=t,this.message=r}};a(Mo,"ITCEventObject");PT.exports=Mo});var Do=f((g2,qT)=>{var qP=require("crypto"),BT=9;function FP(e){let t=xP(BT),r=HT(e+t);return t+r}a(FP,"createHash");function GP(e,t){let r=e.substr(0,BT),s=r+HT(t+r);return e===s}a(GP,"validateHash");function xP(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(xP,"generateSalt");function HT(e){return qP.createHash("md5").update(e).digest("hex")}a(HT,"md5");qT.exports={hash:FP,validate:GP}});var GT=f((N2,FT)=>{"use strict";var Gr=T(),Ti=class{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ti,"BaseLicense");var Po=class extends Ti{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Po,"ExtendedLicense");FT.exports={BaseLicense:Ti,ExtendedLicense:Po}});var ms=f((b2,KT)=>{"use strict";var on=require("fs-extra"),xT=Do(),VT=require("crypto"),VP=require("moment"),kP=require("uuid").v4,Pe=I(),Tl=require("path"),$P=b(),_t=T(),YP=GT().ExtendedLicense,an="invalid license key format",KP="061183",WP="mofi25",QP="aes-256-cbc",JP=16,zP=32,kT=U();kT.initSync();var Sl;KT.exports={validateLicense:$T,generateFingerPrint:ZP,licenseSearch:YT,getLicense:tv};function ml(){return Tl.join(kT.getHdbBasePath(),_t.LICENSE_KEY_DIR_NAME,_t.LICENSE_FILE_NAME)}a(ml,"getLicenseDirPath");function XP(){let e=ml();return Tl.join(e,_t.LICENSE_FILE_NAME)}a(XP,"getLicenseFilePath");function Rl(){let e=ml();return Tl.join(e,_t.REG_KEY_FILE_NAME)}a(Rl,"getFingerPrintFilePath");async function ZP(){let e=Rl();try{return await on.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await jP();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(ZP,"generateFingerPrint");async function jP(){let e=kP(),t=xT.hash(e),r=Rl();try{await on.mkdirp(ml()),await on.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(jP,"writeFingerprint");function $T(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:_t.STORAGE_TYPES_ENUM.LMDB,api_call:_t.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:_t.RAM_ALLOCATION_ENUM.DEFAULT,version:_t.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=Rl(),n=!1;try{n=on.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=on.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(WP),c=o[1];c=Buffer.concat([Buffer.from(c)],JP);let _=Buffer.concat([Buffer.from(i)],zP),u=VT.createDecipheriv(QP,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=ev(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(an),Pe.error(an),new Error(an)}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(an),Pe.error(an),new Error(an)}else r.exp_date=l;r.exp_date<VP().valueOf()&&(r.valid_date=!1),xT.validate(o[1],`${KP}${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||Pe.error("Invalid licence"),r}a($T,"validateLicense");function ev(e,t){try{let r=VT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(ev,"checkOldLicense");function YT(){let e=new YP;e.api_call=0;let t=[];try{t=on.readFileSync(XP(),"utf-8").split(_t.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if($P.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$T(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){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=_t.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=_t.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT),Sl=e,e}a(YT,"licenseSearch");async function tv(){return Sl||await YT(),Sl}a(tv,"getLicense")});var cn=f((C2,Il)=>{"use strict";var{Worker:rv,MessageChannel:sv,parentPort:Rr,isMainThread:JT,threadId:nv,workerData:iv}=require("worker_threads"),{PACKAGE_ROOT:av}=T(),{join:ov,isAbsolute:cv,extname:_v}=require("path"),{totalmem:WT}=require("os"),Ol=T(),zT=U(),uv=ms(),vo=I(),lv=T();zT.initSync();var Ev=zT.get(Ol.CONFIG_PARAMS.HTTP_THREADS)||1,dv=1024*1024,xr=[],Rs=[],hv=50,XT=1e4,ZT="restart",jT="request_thread_info",em="resource_report",tm="thread_info",rm="added-port",Al;Il.exports={startWorker:pl,restartWorkers:Nl,shutdownWorkers:Sv,workers:xr,setMonitorListener:pv,onMessageFromWorkers:Tv,broadcast:mv};function pl(e,t={}){let s=uv.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||WT();n=Math.min(n,WT());let i=Math.min(Math.max(Math.floor(n/dv/(1+Ev/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of Rs){let{port1:l,port2:E}=new sv;u.postMessage({type:rm,port:l},[l]),c.push(E)}_v(e)||(e+=".js");let _=new rv(cv(e)?e:ov(av,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Bo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{pl(e,t)},_.on("error",u=>{console.error("Worker error:",u),vo.error("Worker error:",u)}),_.on("exit",u=>{xr.splice(xr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<hv?(t.unexpectedRestarts=_.unexpectedRestarts+1,pl(e,t)):vo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===ZT&&Nl(u.workerType),u.type===jT&&Rv(_),u.type===em&&Av(_,u)}),xr.push(_),Ov(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(pl,"startWorker");var fv=[Ol.THREAD_TYPES.HTTP];async function Nl(e=null,t=2,r=!0){if(JT){t<1&&(t=t*xr.length);let s=[];for(let n of xr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=fv.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),XT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Rr.postMessage({type:ZT,workerType:e})}a(Nl,"restartWorkers");function Sv(e){return Nl(e,1/0,!1)}a(Sv,"shutdownWorkers");var sm=[];function Tv(e){sm.push(e)}a(Tv,"onMessageFromWorkers");function mv(e){for(let t of Rs)try{t.postMessage(e)}catch(r){vo.error("Unable to send message to worker",r)}}a(mv,"broadcast");function Rv(e){e.postMessage({type:tm,workers:nm()})}a(Rv,"sendThreadInfo");function nm(){let e=Date.now();return xr.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(nm,"getChildWorkerInfo");function Av(e,t){e.resources=t,e.resources.updated=Date.now()}a(Av,"recordResourceReport");var gl;function pv(e){gl=e}a(pv,"setMonitorListener");var gv=1e3,QT=!1;function Ov(){QT||(QT=!0,setInterval(()=>{for(let e of xr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}gl&&gl()},gv).unref())}a(Ov,"startMonitoring");var Nv=1e3;if(Rr){Bo(Rr);for(let e of iv.addPorts)Bo(e);setInterval(()=>{let e=process.memoryUsage();Rr.postMessage({type:em,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Nv).unref(),Al=a(()=>new Promise((e,t)=>{Rr.on("message",r),Rr.postMessage({type:jT});function r(s){s.type===tm&&(Rr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Al=nm;Il.exports.getThreadInfo=Al;function Bo(e,t){Rs.push(e),e.on("message",r=>{if(r.type===rm)Bo(r.port);else for(let s of sm)s(r)}).on("close",()=>{Rs.splice(Rs.indexOf(e),1)}).on("exit",()=>{Rs.splice(Rs.indexOf(e),1)}),t||e.unref()}a(Bo,"addPort");JT||Rr.on("message",async e=>{let{type:t}=e;t===lv.ITC_EVENT_TYPES.SHUTDOWN&&(Rr.unref(),setTimeout(()=>{vo.warn("Thread did not voluntarily terminate",nv),process.exit(0)},XT).unref())})});var om=f((U2,am)=>{"use strict";var bl=z(),Iv=I(),im=at().LMDB_ERRORS_ENUM;am.exports=bv;async function bv(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await bl.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==im.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await bl.closeEnvironment(global.lmdb_map[s]),await bl.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==im.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){Iv.error(t)}}a(bv,"cleanLMDBMap")});var It=f((M2,um)=>{"use strict";var qo=dl(),Nt=b(),wv=require("util"),Fo=Xt(),Cv=Ar(),wl=I(),{handleHDBError:Vr,hdb_errors:yv}=y(),{HTTP_STATUS_CODES:As}=yv,Uv=wv.promisify(Cv.getTableSchema),Lv="updated",cm="inserted",_m="upserted";um.exports={insert:Dv,update:Pv,upsert:vv,validation:Mv,flush:Bv};async function Mv(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.");let t=await Uv(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw wl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw wl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Mv,"validation");async function Dv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);let s=await Fo.createRecords(e);return Ho(cm,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Dv,"insertData");async function Pv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);let s=await Fo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Ho(Lv,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(Pv,"updateData");async function vv(e){if(e.operation!=="upsert")throw Vr(new Error,"invalid operation, must be upsert",As.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);try{let s=await Fo.upsertRecords(e);return Ho(_m,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Vr(s,null,null,wl.ERR,n)}}a(vv,"upsertData");function Ho(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===cm?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===_m?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Bv(e){return Fo.flush(e.schema,e.table)}a(Bv,"flush")});var yl=f((P2,dm)=>{var Hv=re(),Cl=require("joi"),{hdb_schema_table:lm}=zt(),Em={schema:lm,table:lm},qv={date:Cl.date().iso().required()},Fv={timestamp:Cl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};dm.exports=function(e,t){let r=t==="timestamp"?{...Em,...Fv}:{...Em,...qv},s=Cl.object(r);return Hv.validateBySchema(e,s)}});var Tm=f((v2,Sm)=>{var Gv=re(),hm=require("joi"),{hdb_schema_table:fm}=zt(),xv=hm.object({schema:fm,table:fm,hash_values:hm.array().required()});Sm.exports=function(e){return Gv.validateBySchema(e,xv)}});var Rm=f((B2,mm)=>{"use strict";var Go=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Go,"InsertObject");var xo=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(xo,"NoSQLSeachObject");var Vo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vo,"DeleteResponseObject");mm.exports={InsertObject:Go,NoSQLSeachObject:xo,DeleteResponseObject:Vo}});var gs=f((q2,Nm)=>{"use strict";var pm=yl(),Vv=Tm(),ko=b(),Am=require("moment"),gm=I(),{promisify:kv,callbackify:$v}=require("util"),ps=T(),Yv=Ar(),Ul=kv(Yv.getTableSchema),Ll=Xt(),{DeleteResponseObject:Kv}=Rm(),{handleHDBError:kr,hdb_errors:Wv}=y(),{HDB_ERROR_MSGS:$o,HTTP_STATUS_CODES:$r}=Wv,Qv="records successfully deleted",Jv=$v(Om);Nm.exports={delete:Jv,deleteRecord:Om,deleteFilesBefore:zv,deleteAuditLogsBefore:Xv};async function zv(e){let t=pm(e,"date");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(!Am(e.date,Am.ISO_8601).isValid())throw kr(new Error,$o.INVALID_DATE,$r.BAD_REQUEST,ps.LOG_LEVELS.ERROR,$o.INVALID_DATE,!0);let s=ko.checkSchemaTableExist(e.schema,e.table);if(s)throw kr(new Error,s,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,s,!0);let n=await Ll.deleteRecordsBefore(e);if(await Ul(e.schema,e.table),gm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(zv,"deleteFilesBefore");async function Xv(e){let t=pm(e,"timestamp");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw kr(new Error,$o.INVALID_VALUE("Timestamp"),$r.BAD_REQUEST,ps.LOG_LEVELS.ERROR,$o.INVALID_VALUE("Timestamp"),!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);let s=await Ll.deleteAuditLogsBefore(e);return await Ul(e.schema,e.table),gm.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Xv,"deleteAuditLogsBefore");async function Om(e){let t=Vv(e);if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);try{await Ul(e.schema,e.table);let s=await Ll.deleteRecords(e);return ko.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Qv}`),s}catch(s){if(s.message===ps.SEARCH_NOT_FOUND_MESSAGE){let n=new Kv;return n.message=ps.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Om,"deleteRecord")});var bm=f((G2,Im)=>{var Ml=re(),ve={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 Zv(e){return ve.password.presence=!0,ve.username.presence=!0,ve.role.presence=!0,ve.active.presence=!0,Ml.validateObject(e,ve)}a(Zv,"addUserValidation");function jv(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(jv,"alterUserValidation");function eB(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(eB,"dropUserValidation");Im.exports={addUserValidation:Zv,alterUserValidation:jv,dropUserValidation:eB}});var Yr=f((V2,Um)=>{"use strict";var mi=require("crypto"),Cm="aes-256-cbc",tB=32,rB=16,Dl=64,ym=32,sB=Dl+ym,wm=new Map;Um.exports={encrypt:nB,decrypt:iB,createNatsTableStreamName:aB};function nB(e){let t=mi.randomBytes(tB),r=mi.randomBytes(rB),s=mi.createCipheriv(Cm,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(nB,"encrypt");function iB(e){let t=e.substr(0,Dl),r=e.substr(Dl,ym),s=e.substr(sB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=mi.createDecipheriv(Cm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(iB,"decrypt");function aB(e,t){let r=`${e}.${t}`,s=wm.get(r);return s||(s=mi.createHash("md5").update(`${e}.${t}`).digest("hex"),wm.set(r,s)),s}a(aB,"createNatsTableStreamName")});var le=f((Y2,Mm)=>{"use strict";var{platform:$2}=require("os"),oB="nats-server.zip",Pl="nats-server",cB=process.platform==="win32"?`${Pl}.exe`:Pl,vl="HDB",_B=/^[^\s.,*>]+$/,Lm="__request__",uB=a(e=>`${e}.${Lm}`,"REQUEST_SUBJECT"),lB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},EB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},dB={HUB:"hub.pid",LEAF:"leaf.pid"},hB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},fB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:vl,deliver_subject:"__HDB__.WORKQUEUE"},SB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:vl,deliver_subject:"HDB.SCHEMAQUEUE"},TB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:vl,deliver_subject:"HDB.USERQUEUE"},mB={SUCCESS:"success",ERROR:"error"},RB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},AB={TXN:"txn",MSGID:"msgid"},_n={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},pB={[_n.ERR]:1,[_n.WRN]:2,[_n.INF]:3,[_n.DBG]:4,[_n.TRC]:5},gB={debug:"-D",trace:"-DVV"};Mm.exports={NATS_SERVER_ZIP:oB,NATS_SERVER_NAME:Pl,NATS_BINARY_NAME:cB,PID_FILES:dB,NATS_CONFIG_FILES:EB,SERVER_SUFFIX:hB,WORK_QUEUE_CONSUMER_NAMES:fB,SCHEMA_QUEUE_CONSUMER_NAMES:SB,USER_QUEUE_CONSUMER_NAMES:TB,NATS_TERM_CONSTRAINTS_RX:_B,REQUEST_SUFFIX:Lm,UPDATE_REMOTE_RESPONSE_STATUSES:mB,CLUSTER_STATUS_STATUSES:RB,REQUEST_SUBJECT:uB,SUBJECT_PREFIXES:AB,MSG_HEADERS:lB,LOG_LEVELS:_n,LOG_LEVEL_FLAGS:gB,LOG_LEVEL_HIERARCHY:pB}});var er=f((Q2,Wm)=>{"use strict";var Hm="username is required",qm="nothing to update, must supply active, role or password to update",Fm="password cannot be an empty string",Gm="If role is specified, it cannot be empty.",xm="active must be true or false";Wm.exports={addUser:UB,alterUser:LB,dropUser:DB,userInfo:PB,listUsers:Ko,listUsersExternal:vB,setUsersToGlobal:Ri,findAndValidateUser:qB,getClusterUser:FB,USERNAME_REQUIRED:Hm,ALTERUSER_NOTHING_TO_UPDATE:qm,EMPTY_PASSWORD:Fm,EMPTY_ROLE:Gm,ACTIVE_BOOLEAN:xm};var Vm=It(),OB=gs(),Hl=Do(),km=bm(),$m=bt(),ql=ln(),ut=b(),Ym=require("validate.js"),D=I(),{promisify:Fl}=require("util"),Gl=Yr(),Dm=T(),Pm=le(),NB=fr(),W2=U(),IB=ms(),bB=fs(),{handleHDBError:Zt,hdb_errors:wB}=y(),{HTTP_STATUS_CODES:jt,AUTHENTICATION_ERROR_MSGS:Bl,HDB_ERROR_MSGS:un}=wB,{UserEventMsg:xl}=Kr(),vm=require("lodash"),Km={username:!0,active:!0,role:!0,password:!0},Bm=new Map,Yo=Fl($m.searchByValue),CB=Fl($m.searchByHash),yB=Fl(OB.delete);async function UB(e){let t=Ym.cleanAttributes(e,Km),r=km.addUserValidation(t);if(r)throw Zt(new Error,r.message,jt.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 Yo(s),n=n&&Array.from(n)}catch(_){throw D.error("There was an error searching for a role in add user"),D.error(_),_}if(!n||n.length<1)throw Zt(new Error,un.ROLE_NAME_NOT_FOUND(t.role),jt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Zt(new Error,un.DUP_ROLES_FOUND(t.role),jt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Vm.insert(i)}catch(_){throw D.error("There was an error searching for a user."),D.error(_),_}D.debug(o);try{await Ri()}catch(_){throw D.error("Got an error setting users to global"),D.error(_),_}if(o.skipped_hashes.length===1)throw Zt(new Error,un.USER_ALREADY_EXISTS(t.username),jt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ql.signalUserChange(new xl(process.pid)),`${c.username} successfully added`}a(UB,"addUser");async function LB(e){let t=Ym.cleanAttributes(e,Km);if(ut.isEmptyOrZeroLength(t.username))throw new Error(Hm);if(ut.isEmptyOrZeroLength(t.password)&&ut.isEmptyOrZeroLength(t.role)&&ut.isEmptyOrZeroLength(t.active))throw new Error(qm);if(!ut.isEmpty(t.password)&&ut.isEmptyOrZeroLength(t.password.trim()))throw new Error(Fm);if(!ut.isEmpty(t.active)&&!ut.isBoolean(t.active))throw new Error(xm);let r=MB(t.username);if(!ut.isEmpty(t.password)&&!ut.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password)),t.role==="")throw new Error(Gm);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 Yo(i)||[])}catch(c){throw D.error("Got an error searching for a role."),D.error(c),c}if(!o||o.length===0){let c=un.ALTER_USER_ROLE_NOT_FOUND(t.role);throw D.error(c),Zt(new Error,c,jt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=un.ALTER_USER_DUP_ROLES(t.role);throw D.error(c),Zt(new Error,c,jt.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 Vm.update(s)}catch(i){throw D.error("Error during update."),D.error(i),i}try{await Ri()}catch(i){throw D.error("Got an error setting users to global"),D.error(i),i}return ql.signalUserChange(new xl(process.pid)),n}a(LB,"alterUser");function MB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(MB,"isClusterUser");async function DB(e){try{let t=km.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ut.isEmpty(global.hdb_users.get(e.username)))throw Zt(new Error,un.USER_NOT_EXIST(e.username),jt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yB(r)}catch(n){throw D.error("Got an error deleting a user."),D.error(n),n}D.debug(s);try{await Ri()}catch(n){throw D.error("Got an error setting users to global."),D.error(n),n}return ql.signalUserChange(new xl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DB,"dropUser");async function PB(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 CB(r)}catch(n){throw D.error("Got an error searching for a role."),D.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw D.error(r),r}return t}a(PB,"userInfo");async function vB(){let e;try{e=await Ko()}catch(t){throw D.error("Got an error listing users."),D.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(vB,"listUsersExternal");async function Ko(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Yo(e)}catch(o){throw D.error("Got an error searching for roles."),D.error(o),o}let r={};for(let o of t)r[o.id]=vm.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 Yo(s)}catch(o){throw D.error("Got an error searching for users."),D.error(o),o}let i=new Map;for(let o of n)o=vm.cloneDeep(o),o.role=r[o.role],BB(o.role),i.set(o.username,o);return(await IB.getLicense()).enterprise?i:HB(Array.from(i.values()))}catch(e){throw D.error("got an error listing users"),D.error(e),ut.errorizeMessage(e)}return null}a(Ko,"listUsers");function BB(e){try{if(!e){D.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(bB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){D.error("Got an error trying to set system permissions."),D.error(t)}}a(BB,"appendSystemTablesToRole");function HB(e){try{if(D.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?(D.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return D.error("error filtering users."),D.error(t),new Map}}a(HB,"nonEnterpriseFilter");async function Ri(){try{let e=await Ko();global.hdb_users=e}catch(e){throw D.error(e),e}}a(Ri,"setUsersToGlobal");async function qB(e,t,r=!0){global.hdb_users||await Ri();let s=global.hdb_users.get(e);if(!s)throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Zt(new Error,Bl.USER_INACTIVE,jt.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(Bm.get(t)===s.password)return n;if(Hl.validate(s.password,t))Bm.set(t,s.password);else throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qB,"findAndValidateUser");async function FB(){let e=await Ko(),t=NB.getConfigFromFile(Dm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ut.isEmpty(r)&&r?.role?.role===Dm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Pm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Pm.SERVER_SUFFIX.ADMIN,r}a(FB,"getClusterUser")});var Wo=f((z2,Xm)=>{"use strict";var Os=I(),lt=T(),GB=om(),Qm=Ar(),xB=Ns(),VB=er(),{validateEvent:zm}=Kr(),Ai=Xt(),kB=require("process"),$B={[lt.ITC_EVENT_TYPES.SCHEMA]:YB,[lt.ITC_EVENT_TYPES.USER]:WB};async function YB(e){let t=zm(e);if(t){Os.error(t);return}Os.trace("ITC schemaHandler received schema event:",e),await GB(e.message),await KB(e.message)}a(YB,"schemaHandler");async function KB(e){try{if(Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.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 xB.describeTable({schema:e.schema,table:e.table});break;default:Qm.setSchemaDataToGlobal(Jm);break}else Qm.setSchemaDataToGlobal(Jm)}catch(t){Os.error(t)}}a(KB,"syncSchemaMetadata");function Jm(e){e&&Os.error(e)}a(Jm,"handleErrorCallback");async function WB(e){try{Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=zm(e);if(t){Os.error(t);return}Os.trace(`ITC userHandler ${lt.HDB_ITC_CLIENT_PREFIX}${kB.pid} received user event:`,e),await VB.setUsersToGlobal()}catch(t){Os.error(t)}}a(WB,"userHandler");Xm.exports=$B});var Kr=f((t4,jm)=>{"use strict";var Z2=I(),Vl=b(),QB=T(),{ITC_ERRORS:pi}=at(),{parentPort:j2,threadId:JB,isMainThread:zB,workerData:e4}=require("worker_threads"),{onMessageFromWorkers:XB,broadcast:ZB}=cn();jm.exports={sendItcEvent:jB,validateEvent:Zm,SchemaEventMsg:eH,UserEventMsg:tH};var Qo;XB(e=>{Qo=Qo||Wo(),Zm(e),Qo[e.type]&&Qo[e.type](e)});function jB(e){!zB&&e.message&&(e.message.originator=JB),ZB(e)}a(jB,"sendItcEvent");function Zm(e){if(typeof e!="object")return pi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Vl.isEmpty(e.type))return pi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Vl.isEmpty(e.message))return pi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Vl.isEmpty(e.message.originator))return pi.MISSING_ORIGIN;if(QB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return pi.INVALID_EVENT(e.type)}a(Zm,"validateEvent");function eH(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(eH,"SchemaEventMsg");function tH(e){this.originator=e}a(tH,"UserEventMsg")});var ln=f((n4,sR)=>{"use strict";var eR=T(),s4=b(),Jo=I(),tR=vT(),En,{sendItcEvent:rR}=Kr();function rH(e){try{Jo.trace("signalSchemaChange called with message:",e),En=En||Wo();let t=new tR(eR.ITC_EVENT_TYPES.SCHEMA,e);En.schema(t),rR(t)}catch(t){Jo.error(t)}}a(rH,"signalSchemaChange");function sH(e){try{Jo.trace("signalUserChange called with message:",e),En=En||Wo();let t=new tR(eR.ITC_EVENT_TYPES.USER,e);En.user(t),rR(t)}catch(t){Jo.error(t)}}a(sH,"signalUserChange");sR.exports={signalSchemaChange:rH,signalUserChange:sH}});var zo=f((a4,iR)=>{"use strict";var nR=b(),nH=T(),iH=I(),aH=wo(),oH=bo(),cH=ln(),{SchemaEventMsg:_H}=Kr(),uH="already exists in";iR.exports=lH;async function lH(e,t,r){if(nR.isEmptyOrZeroLength(r))return r;let s=[];nR.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 EH(e,t.schema,t.name,i)})),n}a(lH,"lmdbCheckForNewAttributes");async function EH(e,t,r,s){let n=new oH(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await dH(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(uH))iH.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(EH,"createNewAttribute");async function dH(e){let t;return t=await aH(e),cH.signalSchemaChange(new _H(process.pid,nH.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(dH,"createAttribute")});var dn=f((c4,aR)=>{"use strict";var Xo=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(Xo,"LMDBTransactionObject");aR.exports=Xo});var cR=f((u4,oR)=>{"use strict";var hH=dn(),fH=T().OPERATIONS_ENUM,Zo=class extends hH{constructor(t,r,s,n,i=void 0){super(fH.INSERT,r,s,n,i),this.records=t}};a(Zo,"LMDBInsertTransactionObject");oR.exports=Zo});var uR=f((E4,_R)=>{"use strict";var SH=dn(),TH=T().OPERATIONS_ENUM,jo=class extends SH{constructor(t,r,s,n,i,o=void 0){super(TH.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(jo,"LMDBUpdateTransactionObject");_R.exports=jo});var ER=f((h4,lR)=>{"use strict";var mH=dn(),RH=T().OPERATIONS_ENUM,ec=class extends mH{constructor(t,r,s,n,i,o=void 0){super(RH.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(ec,"LMDBUpsertTransactionObject");lR.exports=ec});var hR=f((S4,dR)=>{"use strict";var AH=dn(),pH=T().OPERATIONS_ENUM,tc=class extends AH{constructor(t,r,s,n,i=void 0){super(pH.DELETE,s,n,t,i),this.original_records=r}};a(tc,"LMDBDeleteTransactionObject");dR.exports=tc});var gi=f((R4,mR)=>{"use strict";var m4=require("path"),fR=z(),gH=cR(),OH=uR(),NH=ER(),IH=hR(),hn=Le(),SR=b(),{CONFIG_PARAMS:bH}=T(),TR=U();TR.initSync();var rc=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:wH}=j();mR.exports=CH;async function CH(e,t){if(TR.get(bH.LOGGING_AUDITLOG)===!1)return;let r=wH(e.schema,e.table),s=await fR.openEnvironment(r,e.table,!0),n=yH(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){fR.initializeDBIs(s,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),SR.isEmpty(n.user_name)||s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(CH,"writeTransaction");function yH(e,t){let r=SR.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===rc.INSERT)return new gH(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPDATE)return new OH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPSERT)return new NH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.DELETE)return new IH(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yH,"createTransactionObject")});var kl=f((g4,RR)=>{"use strict";var UH=Co(),p4=di(),Oi=T(),LH=Lo(),MH=nn().insertRecords,DH=z(),PH=I(),vH=zo(),{getSchemaPath:BH}=j(),HH=gi();RR.exports=qH;async function qH(e){try{let{schema_table:t,attributes:r}=UH(e);LH(e,r,t.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(r.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vH(e.hdb_auth_header,t,r),n=BH(e.schema,e.table),i=await DH.openEnvironment(n,e.table),o=await MH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await HH(e,o)}catch(c){PH.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(qH,"lmdbCreateRecords")});var gR=f((N4,pR)=>{"use strict";var AR=T(),FH=kl(),GH=di(),xH=require("fs-extra"),{getSchemaPath:VH}=j();pR.exports=kH;async function kH(e){let t=[{name:e.schema,createddate:Date.now()}],r=new GH(AR.SYSTEM_SCHEMA_NAME,AR.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await FH(r),await xH.mkdirp(VH(e.schema))}a(kH,"lmdbCreateSchema")});var NR=f((b4,OR)=>{"use strict";var sc=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(sc,"DeleteRecordsResponseObject");OR.exports=sc});var Kl=f((L4,wR)=>{"use strict";var IR=z(),$l=Ss(),Yl=at().LMDB_ERRORS_ENUM,$H=Le(),bR=I(),C4=b(),YH=require("lmdb"),KH=NR(),WH=T(),{OVERFLOW_MARKER:y4,MAX_SEARCH_KEY_LENGTH:U4}=$H,QH=WH.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function JH(e,t,r,s){if($l.validateEnv(e),t===void 0)throw new Error(Yl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Yl.IDS_REQUIRED):new Error(Yl.IDS_MUST_BE_ITERABLE);try{let n=IR.listDBIs(e);IR.initializeDBIs(e,t,n);let i=new KH,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let m=e.dbis[t].get(o);if(!m||s&&m[QH]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,YH.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!m.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=m[H];if(q!=null)try{let Ue=$l.getIndexedValues(q);if(Ue)for(let M=0,$=Ue.length;M<$;M++)x.remove(Ue[M],o)}catch{bR.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(m)}catch(m){bR.warn(m),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=$l.getNextMonotonicTime(),i}catch(n){throw n}}a(JH,"deleteRecords");wR.exports={deleteRecords:JH}});var Ni=f((D4,yR)=>{"use strict";var fn=b(),zH=Kl(),XH=z(),{getSchemaPath:ZH}=j(),jH=gi(),eq=I();yR.exports=tq;async function tq(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(fn.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fn.isEmptyOrZeroLength(e.hash_values)&&!fn.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];fn.isEmpty(_)||e.hash_values.push(_)}}if(fn.isEmptyOrZeroLength(e.hash_values))return CR([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fn.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=ZH(e.schema,e.table),i=await XH.openEnvironment(n,e.table),o=await zH.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await jH(e,o)}catch(c){eq.error(`unable to write transaction due to ${c.message}`)}return CR(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(tq,"lmdbDeleteRecords");function CR(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(CR,"createDeleteResponse")});var Ql=f((B4,UR)=>{"use strict";var rq=T(),v4=Ss();function Wl(e,t){let r=Object.create(null);if(t.length===1&&rq.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(Wl,"parseRow");function sq(e,t,r,s){let n=Wl(r,e);s.push(n)}a(sq,"searchAll");function nq(e,t,r,s){let n=Wl(r,e);s[t]=n}a(nq,"searchAllToMap");function iq(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(iq,"iterateDBI");function Is(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(Is,"pushResults");function aq(e,t,r,s,n,i){t.toString().endsWith(e)&&Is(t,r,s,n,i)}a(aq,"endsWith");function oq(e,t,r,s,n,i){t.toString().includes(e)&&Is(t,r,s,n,i)}a(oq,"contains");function cq(e,t,r,s,n,i){t>e&&Is(t,r,s,n,i)}a(cq,"greaterThanCompare");function _q(e,t,r,s,n,i){t>=e&&Is(t,r,s,n,i)}a(_q,"greaterThanEqualCompare");function uq(e,t,r,s,n,i){t<e&&Is(t,r,s,n,i)}a(uq,"lessThanCompare");function lq(e,t,r,s,n,i){t<=e&&Is(t,r,s,n,i)}a(lq,"lessThanEqualCompare");UR.exports={parseRow:Wl,searchAll:sq,searchAllToMap:nq,iterateDBI:iq,endsWith:aq,contains:oq,greaterThanCompare:cq,greaterThanEqualCompare:_q,lessThanCompare:uq,lessThanEqualCompare:lq,pushResults:Is}});var ws=f((x4,HR)=>{"use strict";var Wr=z(),q4=I(),Et=Ss(),nc=Le(),ce=at().LMDB_ERRORS_ENUM,F4=b(),Eq=T(),ic=Ql(),{parseRow:dq}=ic,G4=require("lmdb"),{OVERFLOW_MARKER:LR,MAX_SEARCH_KEY_LENGTH:hq}=nc;function MR(e,t,r,s=!1,n=void 0,i=void 0){return bs(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(MR,"iterateFullIndex");function Ii(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return bs(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(Ii,"iterateRangeBetween");function bs(e,t,r,s){let n=e.database||e,i=Wr.openDBI(n,r);i[nc.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wr.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(bs,"setupTransaction");function DR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(LR)){if(!n)if(r)n=Wr.openDBI(e,r);else{let _=Wr.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Wr.openDBI(e,_[u]),!n[nc.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(DR,"getOverflowCheck");function fq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return bs(e,t,t,(o,c,_)=>(ac(r),r=bi(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>dq(u.value,r))))}a(fq,"searchAll");function Sq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);ac(r),r=bi(e.database||e,r);let o=new Map;for(let{key:c,value:_}of MR(e,t,t,s,n,i))o.set(c,ic.parseRow(_,r));return o}a(Sq,"searchAllToMap");function Tq(e,t,r=!1,s=void 0,n=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=MR(e,void 0,t,r,s,n),c=o.transaction,_=DR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(Tq,"iterateDBI");function mq(e,t){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Wr.statDBI(e,t).entryCount}a(mq,"countAll");function Rq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),bs(e,t,r,(c,_,u,l)=>(s=Et.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(E=>({key:s,value:E}))))}a(Rq,"equals");function Aq(e,t,r){return Qr(e,t,r),Wr.openDBI(e,t).getValuesCount(r)}a(Aq,"count");function pq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),bs(e,null,r,(c,_)=>{s=Et.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,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(pq,"startsWith");function gq(e,t,r,s,n=!1,i=void 0,o=void 0){return PR(e,t,r,s,n,i,o,!0)}a(gq,"endsWith");function PR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Qr(e,r,s),bs(e,null,r,(_,u,l,E)=>{let d=DR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let m=h.toString();return m.endsWith(LR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?m.endsWith(s):m.includes(s))?u[nc.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(PR,"contains");function Oq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!0,!1)}a(Oq,"greaterThan");function Nq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!1,!1)}a(Nq,"greaterThanEqual");function Iq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!0)}a(Iq,"lessThan");function bq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!1)}a(bq,"lessThanEqual");function wq(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Et.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=Et.convertKeyValueToWrite(s),n=Et.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ii(e,t,r,s,n,i,o,c)}a(wq,"between");function Cq(e,t,r,s){Et.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),r=bi(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ic.parseRow(c,r)),o}a(Cq,"searchByHash");function yq(e,t,r){Et.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(yq,"checkHashExists");function Uq(e,t,r,s,n=[]){return BR(e,t,r,s,n),vR(e,t,r,s,n).map(i=>i[1])}a(Uq,"batchSearchByHash");function Lq(e,t,r,s,n=[]){BR(e,t,r,s,n);let i=new Map;for(let[o,c]of vR(e,t,r,s,n))i.set(o,c);return i}a(Lq,"batchSearchByHashToMap");function vR(e,t,r,s,n=[]){return bs(e,t,t,(i,o,c)=>{r=bi(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ic.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(vR,"batchHashSearch");function BR(e,t,r,s,n){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(BR,"initializeBatchSearchByHash");function ac(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ac,"validateFetchAttributes");function Qr(e,t,r){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>hq)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Qr,"validateComparisonFunctions");function bi(e,t){return t.length===1&&Eq.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wr.listDBIs(e)),t}a(bi,"setGetWholeRowAttributes");HR.exports={searchAll:fq,searchAllToMap:Sq,count:Aq,countAll:mq,equals:Rq,startsWith:pq,endsWith:gq,contains:PR,searchByHash:Cq,setGetWholeRowAttributes:bi,batchSearchByHash:Uq,batchSearchByHashToMap:Lq,checkHashExists:yq,iterateDBI:Tq,greaterThan:Oq,greaterThanEqual:Nq,lessThan:Iq,lessThanEqual:bq,between:wq}});var wi=f(($4,xR)=>{var qR=require("lodash"),FR=re(),W=require("joi"),Mq=b(),{hdb_schema_table:Ft,checkValidTable:GR}=zt(),{handleHDBError:Dq,hdb_errors:Pq}=y(),{HTTP_STATUS_CODES:vq}=Pq,k4=W.object({schema:Ft,table:Ft,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(Ft).required()}),Bq=W.object({schema:Ft,table:Ft,search_attribute:Ft,search_value:W.any().required(),get_attributes:W.array().min(1).items(Ft).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),Hq=W.object({schema:Ft,table:Ft,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(Ft).required(),conditions:W.array().min(1).items(W.object({search_attribute:Ft,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});xR.exports=function(e,t){let r=null;switch(t){case"value":r=FR.validateBySchema(e,Bq);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(GR("schema",e.schema)),i(GR("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=FR.validateBySchema(e,Hq);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Mq.checkGlobalSchemaTable(e.schema,e.table);if(n)return Dq(new Error,n,vq.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=qR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!qR.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Jl=f((K4,VR)=>{"use strict";var qq=z(),Fq=wi(),{getSchemaPath:Gq}=j();VR.exports=xq;function xq(e){let t=Fq(e,"hashes");if(t)throw t;let r=Gq(e.schema,e.table);return qq.openEnvironment(r,e.table)}a(xq,"initialize")});var zl=f((Q4,kR)=>{"use strict";var Vq=ws(),kq=Jl();kR.exports=$q;async function $q(e){let t=await kq(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Vq.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a($q,"lmdbGetDataByHash")});var Sn=f((z4,$R)=>{"use strict";var oc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(oc,"SearchByHashObject");$R.exports=oc});var KR=f((j4,YR)=>{"use strict";var Z4=Sn(),Yq=ws(),Kq=Jl();YR.exports=Wq;async function Wq(e){let t=await Kq(e),r=global.hdb_schema[e.schema][e.table];return Yq.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Wq,"lmdbSearchByHash")});var Gt=f((t5,WR)=>{"use strict";var cc=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(cc,"SearchObject");WR.exports=cc});var _c=f((s5,jR)=>{"use strict";var Be=ws(),Qq=z(),Jq=b(),C=Le(),Cs=T(),zq=fs(),QR=at().LMDB_ERRORS_ENUM,{compareKeys:Tn}=require("ordered-binary"),{getSchemaPath:Xq}=j(),pr=Cs.SEARCH_WILDCARDS;async function Zq(e,t,r){let s;e.schema===Cs.SYSTEM_SCHEMA_NAME?s=zq[e.table]:s=global.hdb_schema[e.schema][e.table];let n=ZR(e,s.hash_attribute,r,t);return zR(e,n,s.hash_attribute,r)}a(Zq,"prepSearch");async function zR(e,t,r,s){let n=Xq(e.schema,e.table),i=await Qq.openEnvironment(n,e.table),o=XR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(eF(e,r)===!1){let l=e.search_attribute;if(l===r)return s?JR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?JR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Be.batchSearchByHashToMap(c,r,e.get_attributes,u):Be.batchSearchByHash(c,r,e.get_attributes,u)}a(zR,"executeSearch");function XR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=Be.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=Be.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=Be.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=Be.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Be.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Be.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return Be.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Be.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=Be.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=Be.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Be.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=Be.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=Be.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(XR,"searchByType");function jq(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Tn(i,s[0])>=0&&Tn(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>Tn(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Tn(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>Tn(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Tn(n[r],s)<=0;default:return Object.create(null)}}a(jq,"filterByType");function JR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(JR,"createMapFromIterable");function eF(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(eF,"checkToFetchMore");function ZR(e,t,r,s){if(Jq.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),pr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(pr[0])<0&&n.indexOf(pr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(pr.indexOf(i)>=0&&pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(pr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(pr[0])||n.includes(pr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(QR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Cs.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Cs.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Cs.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Cs.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Cs.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QR.UNKNOWN_SEARCH_TYPE)}}a(ZR,"createSearchTypeFromSearchObject");jR.exports={executeSearch:zR,createSearchTypeFromSearchObject:ZR,prepSearch:Zq,searchByType:XR,filterByType:jq}});var tA=f((a5,eA)=>{"use strict";var i5=Gt(),tF=wi(),rF=b(),sF=T(),nF=_c();eA.exports=iF;function iF(e,t){if(!rF.isEmpty(t)&&sF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=tF(e,"value");if(s)throw s;let n=!0;return nF.prepSearch(e,t,n)}a(iF,"lmdbGetDataByValue")});var mn=f((_5,rA)=>{"use strict";var c5=Gt(),aF=wi(),oF=b(),cF=T(),_F=_c();rA.exports=uF;async function uF(e,t){if(!oF.isEmpty(t)&&cF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aF(e,"value");if(s)throw s;return _F.prepSearch(e,t,!1)}a(uF,"lmdbSearchByValue")});var nA=f((E5,sA)=>{"use strict";var l5=Le(),uc=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(uc,"SearchByConditionsObject");var lc=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(lc,"SearchCondition");var Ec=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ec,"SortAttribute");sA.exports={SearchByConditionsObject:uc,SearchCondition:lc,SortAttribute:Ec}});var _A=f((f5,cA)=>{"use strict";var h5=nA().SearchByConditionsObject,lF=Gt(),EF=wi(),Xl=ws(),dc=Le(),oA=_c(),dF=Ql(),hF=require("lodash"),{getSchemaPath:fF}=j(),iA=z(),{handleHDBError:SF,hdb_errors:TF}=y(),{HTTP_STATUS_CODES:mF}=TF,RF=1e8;cA.exports=AF;async function AF(e){let t=EF(e,"conditions");if(t)throw SF(t,t.message,mF.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=fF(e.schema,e.table),s=await iA.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)iA.openDBI(s,u.search_attribute);let i=hF.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===dc.SEARCH_TYPES.EQUALS?u.estimated_count=Xl.count(s,u.search_attribute,u.search_value):l===dc.SEARCH_TYPES.CONTAINS||l===dc.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=RF}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await aA(o,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(oA.filterByType),E=l.length,d=Xl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let m=0;m<E;m++)if(!l[m](h))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(h=>dF.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await aA(o,e,d,n.hash_attribute);c=c.concat(h)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Xl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(AF,"lmdbSearchByConditions");async function aA(e,t,r,s){let n=new lF(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===dc.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,oA.searchByType(e,n,i,s).map(o=>o.value)}a(aA,"executeConditionSearch")});var Ci=f((T5,uA)=>{"use strict";var pF=T().OPERATIONS_ENUM,hc=class{constructor(t,r,s,n=void 0){this.operation=pF.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(hc,"DeleteObject");uA.exports=hc});var Zl=f((R5,mA)=>{"use strict";var hA=Gt(),fA=Ci(),SA=mn(),TA=Ni(),We=T(),lA=b(),EA=z(),{getTransactionAuditStorePath:gF,getSchemaPath:OF}=j(),dA=I();mA.exports=NF;async function NF(e){try{if(lA.isEmpty(global.hdb_schema[e.schema])||lA.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await IF(e),await bF(e);let t=OF(e.schema,e.table);try{await EA.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")dA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gF(e.schema,e.table);await EA.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")dA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(NF,"lmdbDropTable");async function IF(e){let t=new hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await SA(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 fA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await TA(n)}a(IF,"deleteAttributesFromSystem");async function bF(e){let t=new hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await SA(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 fA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await TA(n)}catch(i){throw i}}a(bF,"dropTableFromSystem")});var AA=f((p5,RA)=>{"use strict";var wF=require("fs-extra"),CF=Gt(),yF=Sn(),UF=Ci(),LF=Zl(),MF=Ni(),DF=zl(),PF=mn(),gr=T(),{getSchemaPath:vF}=j(),{handleHDBError:BF,hdb_errors:HF}=y(),{HDB_ERROR_MSGS:qF,HTTP_STATUS_CODES:FF}=HF;RA.exports=GF;async function GF(e){let t;try{t=await xF(e.schema);let r=new CF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await PF(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await LF(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new UF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await MF(n);let i=vF(t);await wF.remove(i)}catch(r){throw r}}a(GF,"lmdbDropSchema");async function xF(e){let t=new yF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await DF(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw BF(new Error,qF.SCHEMA_NOT_FOUND(e),FF.NOT_FOUND,void 0,void 0,!0);return s}a(xF,"validateDropSchema")});var jl=f((O5,pA)=>{"use strict";var fc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(fc,"CreateTableObject");pA.exports=fc});var OA=f((b5,gA)=>{"use strict";var VF=require("fs-extra"),Sc=z(),{getTransactionAuditStorePath:kF}=j(),eE=Le(),I5=jl();gA.exports=$F;async function $F(e){let t;try{let r=kF(e.schema,e.table);await VF.mkdirp(r),t=await Sc.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{Sc.createDBI(t,eE.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Sc.createDBI(t,eE.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Sc.createDBI(t,eE.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($F,"createTransactionsAuditEnvironment")});var wA=f((C5,bA)=>{"use strict";var tE=T(),NA=z(),YF=nn(),{getSystemSchemaPath:KF,getSchemaPath:WF}=j(),QF=fs(),JF=wo(),rE=bo(),zF=I(),XF=OA(),nE=QF.hdb_table,IA=[];for(let e=0;e<nE.attributes.length;e++)IA.push(nE.attributes[e].attribute);bA.exports=ZF;async function ZF(e,t){let r=WF(t.schema,t.table),s=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new rE(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await NA.createEnvironment(r,t.table),e!==void 0){let o=await NA.openEnvironment(KF(),tE.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YF.insertRecords(o,nE.hash_attribute,IA,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await sE(s),await sE(n),await sE(i)}await XF(t)}catch(o){throw o}}a(ZF,"lmdbCreateTable");async function sE(e){try{await JF(e)}catch(t){zF.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(sE,"createAttribute")});var yA=f((U5,CA)=>{"use strict";var jF=Co(),eG=Lo(),tG=zo(),yi=T(),rG=nn().updateRecords,sG=z(),{getSchemaPath:nG}=j(),iG=gi(),aG=I();CA.exports=oG;async function oG(e){try{let{schema_table:t,attributes:r}=jF(e);eG(e,r,t.hash_attribute),e.schema!==yi.SYSTEM_SCHEMA_NAME&&(r.includes(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await tG(e.hdb_auth_header,t,r),n=nG(e.schema,e.table),i=await sG.openEnvironment(n,e.table),o=await rG(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iG(e,o)}catch(c){aG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(oG,"lmdbUpdateRecords")});var LA=f((M5,UA)=>{"use strict";var cG=T().OPERATIONS_ENUM,Tc=class{constructor(t,r,s,n=void 0){this.operation=cG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Tc,"UpsertObject");UA.exports=Tc});var DA=f((v5,MA)=>{"use strict";var P5=LA(),_G=Co(),uG=Lo(),lG=zo(),Ui=T(),EG=nn().upsertRecords,dG=z(),{getSchemaPath:hG}=j(),fG=gi(),SG=I(),{handleHDBError:TG,hdb_errors:mG}=y();MA.exports=RG;async function RG(e){let t;try{t=_G(e)}catch(_){throw TG(_,_.message,mG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;uG(e,s,r.hash_attribute),e.schema!==Ui.SYSTEM_SCHEMA_NAME&&(s.includes(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await lG(e.hdb_auth_header,r,s),i=hG(e.schema,e.table),o=await dG.openEnvironment(i,e.table),c=await EG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await fG(e,c)}catch(_){SG.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(RG,"lmdbUpsertRecords")});var FA=f((H5,qA)=>{"use strict";var AG=Gt(),PA=b(),vA=I(),pG=mn(),BA=T(),gG=Kl().deleteRecords,OG=z(),{getSchemaPath:NG}=j(),{promisify:IG}=require("util"),bG=IG(setTimeout),HA=1e4,wG=10;qA.exports=CG;async function CG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(PA.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 AG(e.schema,e.table,BA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await pG(n,BA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw vA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return PA.isEmptyOrZeroLength(s)?(vA.trace("No records found to delete"),{message:"No records found to delete"}):await yG(e,s,t)}a(CG,"lmdbDeleteRecordsBefore");async function yG(e,t,r){let s=NG(e.schema,e.table),n=await OG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=HA){let _=t.slice(o,o+HA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await gG(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 bG(wG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(yG,"chunkDeletes")});var xA=f((F5,GA)=>{"use strict";var mc=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(mc,"DeleteBeforeObject");GA.exports=mc});var kA=f((x5,VA)=>{"use strict";var Rc=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Rc,"DeleteAuditLogsBeforeResults");VA.exports=Rc});var KA=f(($5,YA)=>{"use strict";var iE=z(),{getTransactionAuditStorePath:UG}=j(),k5=xA(),Li=Le(),LG=b(),$A=kA(),MG=require("util").promisify,DG=MG(setTimeout),PG=1e4,vG=100;YA.exports=BG;async function BG(e){let t=UG(e.schema,e.table),r=await iE.openEnvironment(t,e.table,!0),s=iE.listDBIs(r);iE.initializeDBIs(r,Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new $A;do n=await HG(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 DG(vG);while(n.transactions_deleted>0);return i}a(BG,"deleteAuditLogsBefore");async function HG(e,t){let r=new $A;try{let s=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];LG.isEmpty(c)||(n=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>PG)break}return await n,r}catch(s){throw s}}a(HG,"deleteTransactions")});var QA=f((K5,WA)=>{"use strict";var Ac=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Ac,"DropAttributeObject");WA.exports=Ac});var zA=f((J5,JA)=>{"use strict";var qG=Gt(),FG=Ci(),Q5=QA(),tr=T(),GG=b(),aE=z(),xG=fs(),VG=mn(),kG=Ni(),{getSchemaPath:$G}=j();JA.exports=YG;async function YG(e,t=!0){let r;e.schema===tr.SYSTEM_SCHEMA_NAME?r=xG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await WG(e),n=$G(e.schema,e.table),i=await aE.openEnvironment(n,e.table);return t===!0&&await KG(e,i,r.hash_attribute),aE.dropDBI(i,e.attribute),s}a(YG,"lmdbDropAttribute");async function KG(e,t,r){let s=aE.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(KG,"removeAttributeFromAllObjects");async function WG(e){let t=new qG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await VG(t)).filter(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(GG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new FG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return kG(i)}a(WG,"dropAttributeFromSystem")});var rp=f((Z5,tp)=>{"use strict";var oE=z(),Rn=Le(),X5=Ss(),cE=T(),XA=b(),{getTransactionAuditStorePath:QG}=j(),JG=ws(),pc=dn(),zG=I();tp.exports=XG;async function XG(e){let t=QG(e.schema,e.table),r=await oE.openEnvironment(t,e.table,!0),s=oE.listDBIs(r);oE.initializeDBIs(r,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ZA(r,e.search_values);case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,jG(r,e.search_values,n);case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return ZG(r,e.search_values);default:return ZA(r)}}a(XG,"readAuditLog");function ZA(e,t=[0,Date.now()]){XA.isEmpty(t[0])&&(t[0]=0),XA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Rn.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 pc,n))}a(ZA,"searchTransactionsByTimestamp");function ZG(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[Rn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,ep(e,i))}return Object.fromEntries(r)}a(ZG,"searchTransactionsByUsername");function jG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=JG.equals(e,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=ep(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);jA(_,"records",r,l,o),jA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(jG,"searchTransactionsByHashValues");function jA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new pc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new pc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(jA,"loopRecords");function ep(e,t){let r=[];try{let s=e.dbis[Rn.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 pc,i);r.push(o)}}catch(i){zG.warn(i)}return r}catch(s){throw s}}a(ep,"batchSearchTransactions")});var np=f((ej,sp)=>{"use strict";var{getSchemaPath:e0}=j(),t0=z();sp.exports={writeTransaction:r0};async function r0(e,t,r){let s=e0(e,t);return(await t0.openEnvironment(s,t)).transaction(r)}a(r0,"writeTransaction")});var cp=f((rj,op)=>{"use strict";var{getSchemaPath:ip}=j(),ap=z();op.exports={flush:s0,resetReadTxn:n0};async function s0(e,t){return(await ap.openEnvironment(ip(e,t),t.toString())).flushed}a(s0,"flush");async function n0(e,t){try{(await ap.openEnvironment(ip(e,t),t.toString())).resetReadTxn()}catch{}}a(n0,"resetReadTxn")});var lp=f((nj,up)=>{"use strict";var i0=I(),{handleHDBError:a0}=y(),o0=zu(),c0=wo(),_0=kl(),u0=gR(),l0=Ni(),E0=zl(),d0=KR(),h0=tA(),f0=mn(),S0=_A(),T0=AA(),m0=wA(),R0=yA(),A0=DA(),p0=FA(),g0=KA(),O0=Zl(),N0=zA(),I0=rp(),b0=np(),_p=cp(),gc=class extends o0{async searchByConditions(t){return S0(t)}async getDataByHash(t){return await E0(t)}async searchByHash(t){return await d0(t)}async getDataByValue(t,r){return await h0(t,r)}async searchByValue(t){return await f0(t)}async createSchema(t){return await u0(t)}async dropSchema(t){return await T0(t)}async createTable(t,r){return await m0(t,r)}async dropTable(t){return await O0(t)}async createAttribute(t){return await c0(t)}async createRecords(t){return await _0(t)}async updateRecords(t){return await R0(t)}async upsertRecords(t){try{return await A0(t)}catch(r){throw a0(r,null,null,i0.ERR,r)}}async deleteRecords(t){return await l0(t)}async deleteRecordsBefore(t){return await p0(t)}async dropAttribute(t){return await N0(t)}async deleteAuditLogsBefore(t){return await g0(t)}async readAuditLog(t){return await I0(t)}writeTransaction(t,r,s){return b0.writeTransaction(t,r,s)}flush(t,r){return _p.flush(t,r)}resetReadTxn(t,r){return _p.resetReadTxn(t,r)}};a(gc,"LMDBBridge");up.exports=gc});var Xt=f((aj,dp)=>{"use strict";var w0=lp(),C0=zu(),y0=U();y0.initSync();var Ep;function U0(){return Ep instanceof C0?Ep:new w0}a(U0,"getBridge");dp.exports=U0()});var Tp=f((cj,Sp)=>{"use strict";var hp=require("lodash"),Mi=require("mathjs"),L0=require("jsonata"),fp=b();Sp.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hp.uniqWith(e,hp.isEqual):e,searchJSON:M0,mad:Di.bind(null,Mi.mad),mean:Di.bind(null,Mi.mean),mode:Di.bind(null,Mi.mode),prod:Di.bind(null,Mi.prod),median:Di.bind(null,Mi.median)};function Di(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(Di,"aggregateFunction");function M0(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(fp.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fp.isEmpty(this.__ala__.res[r])){let s=L0(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(M0,"searchJSON")});var Rp=f((uj,mp)=>{"use strict";var Ee=require("moment"),_E="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ee.suppressDeprecationWarnings=!0;mp.exports={current_date:()=>Ee().utc().format("YYYY-MM-DD"),current_time:()=>Ee().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ee(e).utc().format("YYYY");case"month":return Ee(e).utc().format("MM");case"day":return Ee(e).utc().format("DD");case"hour":return Ee(e).utc().format("HH");case"minute":return Ee(e).utc().format("mm");case"second":return Ee(e).utc().format("ss");case"millisecond":return Ee(e).utc().format("SSS");default:break}},date:e=>Ee(e).utc().format(_E),date_format:(e,t)=>Ee(e).utc().format(t),date_add:(e,t,r)=>Ee(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ee(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Ee(e).utc(),n=Ee(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Ee().utc().valueOf(),get_server_time:()=>Ee().format(_E),offset_utc:(e,t)=>Ee(e).utc().utcOffset(t).format(_E)}});var Op=f((lj,gp)=>{"use strict";var D0=require("@turf/area"),P0=require("@turf/length"),v0=require("@turf/circle"),B0=require("@turf/difference"),H0=require("@turf/distance"),q0=require("@turf/boolean-contains"),F0=require("@turf/boolean-equal"),G0=require("@turf/boolean-disjoint"),x0=require("@turf/helpers"),Ap=T(),F=b();gp.exports={geoArea:V0,geoLength:k0,geoCircle:$0,geoDifference:Y0,geoDistance:pp,geoNear:K0,geoContains:W0,geoEqual:Q0,geoCrosses:J0,geoConvert:z0};var uE="geo1 is required",lE="geo2 is required";function V0(e){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),D0.default(e)}a(V0,"geoArea");function k0(e,t){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),P0.default(e,{units:t||"kilometers"})}a(k0,"geoLength");function $0(e,t,r){if(F.isEmpty(e))throw new Error("point is required");if(F.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),v0.default(e,t,{units:r||"kilometers"})}a($0,"geoCircle");function Y0(e,t){if(F.isEmpty(e))throw new Error("poly1 is required");if(F.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),B0(e,t)}a(Y0,"geoDifference");function pp(e,t,r){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),H0.default(e,t,{units:r||"kilometers"})}a(pp,"geoDistance");function K0(e,t,r,s){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");if(F.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return pp(e,t,s)<=r}a(K0,"geoNear");function W0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),q0.default(e,t)}a(W0,"geoContains");function Q0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),F0.default(e,t)}a(Q0,"geoEqual");function J0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),!G0.default(e,t)}a(J0,"geoCrosses");function z0(e,t,r){if(F.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(F.isEmpty(t))throw new Error("geo_type is required");if(F.isEmpty(Ap.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ap.GEO_CONVERSION_ENUM).join(",")}`);return x0[t](e,r)}a(z0,"geoConvert")});var Oc=f((dj,Np)=>{var ys=Tp(),dt=Rp(),rr=Op();Np.exports=e=>{e.aggr.mad=e.aggr.MAD=ys.mad,e.aggr.mean=e.aggr.MEAN=ys.mean,e.aggr.mode=e.aggr.MODE=ys.mode,e.aggr.prod=e.aggr.PROD=ys.prod,e.aggr.median=e.aggr.MEDIAN=ys.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ys.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ys.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=dt.current_date,e.fn.current_time=e.fn.CURRENT_TIME=dt.current_time,e.fn.extract=e.fn.EXTRACT=dt.extract,e.fn.date=e.fn.DATE=dt.date,e.fn.date_format=e.fn.DATE_FORMAT=dt.date_format,e.fn.date_add=e.fn.DATE_ADD=dt.date_add,e.fn.date_sub=e.fn.DATE_SUB=dt.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=dt.date_diff,e.fn.now=e.fn.NOW=dt.now,e.fn.offset_utc=e.fn.OFFSET_UTC=dt.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=dt.get_server_time,e.fn.getdate=e.fn.GETDATE=dt.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=dt.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rr.geoNear}});var wp=f((hj,bp)=>{"use strict";var Pi=require("lodash"),be=require("alasql");be.options.cache=!1;var X0=Oc(),Ip=require("clone"),Nc=require("recursive-iterator"),P=I(),B=b(),An=Xt(),Z0=T(),{hdb_errors:j0}=y(),ex="IS NULL",xt="There was a problem performing this search. Please check the logs and try again.";X0(be);var Ic=class{constructor(t,r){if(B.isEmpty(t))throw P.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(),B.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!B.isEmptyOrZeroLength(s))return P.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw P.error("Error thrown from checkEmptySQL in SQLSearch class method search."),P.error(s),new Error(xt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw P.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),P.error(s),new Error(xt)}if(Object.keys(this.data).length===0)return P.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw P.error("Error thrown from processJoins in SQLSearch class method search."),P.error(s),new Error(xt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw P.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),P.error(s),new Error(xt)}try{return t=await this._finalSQL(),t}catch(s){throw P.error("Error thrown from finalSQL in SQLSearch class method search."),P.error(s),new Error(xt)}}_getColumns(){let t=new Nc(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(Ip(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Pi.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(B.isEmpty(this.statement.where)){P.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Nc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!B.isEmpty(r)&&r.right)if(B.isNotEmptyAndHasValue(r.right.value)){let s=B.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new be.yy.LogicValue({value:s}):r.right instanceof be.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new be.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=B.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new be.yy.LogicValue({value:i}):s instanceof be.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new be.yy.NumValue({value:i}))});if(t){P.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Nc(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(!B.isEmpty(Z0.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(B.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(B.isEmptyOrZeroLength(r.left.columnid)||B.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(B.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!B.isEmpty(r.right.value)||!B.isEmpty(r.left.value)?s.add(B.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from)&&B.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&&Pi.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(B.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);B.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(B.isEmptyOrZeroLength(this.all_table_attributes)&&!B.isEmptyOrZeroLength(this.columns.columns))return t;if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await be.promise(r)}catch(r){throw P.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),P.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(Ip(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(B.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(ex)>-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=Pi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!B.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await An.getDataByHash(c);for(let E of c.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 P.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await An.getDataByValue(E);for(let[h,m]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}else if(!B.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await An.getDataByValue(c,h.operation);if(_)for(let[R]of m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(R)));else for(let[R,g]of m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(R)))}}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),P.error(l),new Error(xt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await An.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(E)))}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),P.error(l),new Error(xt)}}}_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 be.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 be.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new be.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 be.yy.FuncValue:new be.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(h,n);d=await be.promise(m,t),t=null}catch(h){throw P.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),P.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Pi.difference(m,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Nc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Pi.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 P.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),P.error(i),new Error(xt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await An.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let m=0;m<u;m++){let R=n.columns[m],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw P.error("Error thrown from getDataByHash function in SQLSearch class method getData."),P.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();P.trace(`Final SQL: ${n}`),s=await be.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),P.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw P.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),P.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 P.error(j0.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),P.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await An.getDataByValue(i);for(let[c,_]of o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(o){throw P.error("There was an error when processing this SQL operation. Check your logs"),P.error(o),new Error(xt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ic,"SQLSearch");bp.exports=Ic});var bt=f((Sj,yp)=>{"use strict";var tx=US();yp.exports={searchByConditions:ix,searchByHash:ax,searchByValue:ox,search:cx};var EE=Xt(),Cp=require("util"),rx=Cp.callbackify(EE.searchByHash),sx=Cp.callbackify(EE.searchByValue),nx=wp();async function ix(e){return EE.searchByConditions(e)}a(ix,"searchByConditions");function ax(e,t){try{rx(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ax,"searchByHash");function ox(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),sx(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ox,"searchByValue");function cx(e,t){try{let r=new tx(e);r.validate(),new nx(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(cx,"search")});var Ns=f((mj,Hp)=>{"use strict";var Lp=bt(),Jr=I(),Mp=Oo(),_x=require("lodash"),ux=Yr(),Dp=b(),{promisify:Pp}=require("util"),Z=T(),{handleHDBError:bc,hdb_errors:lx}=y(),{HDB_ERROR_MSGS:wc,HTTP_STATUS_CODES:vp}=lx,Ex=U();Ex.initSync();var Up=z(),dx=ws(),{getSchemaPath:hx}=j(),vi=Pp(Lp.searchByValue),fx=Pp(Lp.searchByHash),pn="name",Bp="hash_attribute",dE="schema",Sx="schema_table",Tx="attribute";Hp.exports={describeAll:mx,describeTable:Cc,describeSchema:Ax};async function mx(e){try{let t=Dp.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:pn,search_value:Z.WILDCARD_SEARCH_VALUE,get_attributes:[pn]},i=await vi(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Z.ID_ATTRIBUTE_STRING,search_value:Z.WILDCARD_SEARCH_VALUE,get_attributes:[Bp,Z.ID_ATTRIBUTE_STRING,pn,dE]},u=await vi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Cc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Cc({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Jr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Jr.error("Got an error in describeAll"),Jr.error(t),bc(new Error,wc.DESCRIBE_ALL_ERR)}}a(mx,"describeAll");async function Cc(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=Mp.describe_table(e);if(o)throw o;if(r===Z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Z.SYSTEM_SCHEMA_NAME][s];let c={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:pn,search_value:s,hash_values:[],get_attributes:[Z.WILDCARD_SEARCH_VALUE]},_=Array.from(await vi(c));if(!_||_.length===0)throw bc(new Error,wc.TABLE_NOT_FOUND(e.schema,e.table),vp.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw bc(new Error,wc.INVALID_TABLE_ERR(i));let l={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:Sx,search_value:r+"."+s,get_attributes:[Tx]},E=Array.from(await vi(l));E=_x.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=Rx(n)),i.attributes=E,i.clustering_stream_name=ux.createNatsTableStreamName(u.schema,u.name);try{let d=hx(i.schema,i.name),h=await Up.openEnvironment(d,i.name),m=Up.statDBI(h,i.hash_attribute);i.record_count=m.entryCount;for(let{key:R}of dx.lessThan(h,i.hash_attribute,Z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Jr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Jr.error(`There was an error getting attributes for table '${u.name}'`),Jr.error(l)}return i}a(Cc,"descTable");function Rx(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Rx,"getAttrsByPerms");async function Ax(e){let t=Mp.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:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:dE,search_value:s,hash_values:[],get_attributes:[Bp,Z.ID_ATTRIBUTE_STRING,pn,dE]},i=Array.from(await vi(n));if(i&&i.length<1){let o={schema:Z.SYSTEM_SCHEMA_NAME,table:Z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[pn]},c=Array.from(await fx(o));if(c&&c.length<1)throw bc(new Error,wc.SCHEMA_NOT_FOUND(e.schema),vp.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),Dp.isEmpty(_)||_.describe){let u=await Cc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Jr.error(`Error describing schema table '${e.schema}.${c}'`),Jr.error(_)}})),o}}a(Ax,"describeSchema")});var Ar=f((Aj,Vp)=>{var gn=fs(),{callbackify:Gp,promisify:px}=require("util");Vp.exports={setSchemaDataToGlobal:qp,getTableSchema:Nx,getSystemSchema:bx,setSchemaDataToGlobalAsync:px(qp)};var xp=Ns(),gx=Gp(xp.describeAll),Ox=Gp(xp.describeTable);function qp(e){gx(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=gn),global.hdb_schema=r,e(null,null)})}a(qp,"setSchemaDataToGlobal");function Fp(e,t){return e==="system"?gn[t]:global.hdb_schema[e][t]}a(Fp,"returnSchema");function Nx(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Ix(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,Fp(e,t))}):r(null,Fp(e,t))}a(Nx,"getTableSchema");function Ix(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=gn:global.hdb_schema={system:gn},r();return}Ox(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:gn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Ix,"setTableDataToGlobal");function bx(){return gn}a(bx,"getSystemSchema")});var yc=f((gj,kp)=>{"use strict";var wx=Xt();kp.exports={writeTransaction:Cx};function Cx(e,t,r){return wx.writeTransaction(e,t,r)}a(Cx,"writeTransaction")});var He=f((Mj,og)=>{"use strict";var ge=U();ge.initSync();var yx=require("fs-extra"),Ux=require("semver"),Gi=require("path"),{monotonicFactory:Lx}=require("ulidx"),mE=Lx(),Mx=require("util"),Yp=require("child_process"),Dx=Mx.promisify(Yp.exec),Px=Yp.spawn,V=le(),Q=T(),Uc=b(),zr=I(),Lc=Yr(),vx=yc(),Bi=fr(),{encode:SE,decode:RE}=require("msgpackr"),{isEmpty:Us}=Uc,Kp=er(),Wp=12e10,{connect:Bx,StorageType:Qp,RetentionPolicy:Jp,AckPolicy:AE,DeliverPolicy:xi,DiscardPolicy:Hx,NatsConnection:Nj,JetStreamManager:Ij,JetStreamClient:bj,StringCodec:wj,JSONCodec:qx,createInbox:pE,StreamSource:Cj,headers:Fx,toJsMsg:zp,nuid:yj,JetStreamOptions:Uj,ErrorCode:$p,nanos:Lj}=require("nats"),{PACKAGE_ROOT:Gx}=T(),xx=ei(),Xp=qx(),Vx="clustering",kx=xx.engines[V.NATS_SERVER_NAME],$x=Gi.join(Gx,"dependencies"),TE=Gi.join($x,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),hE,fE,Hi,qi,Fi,Vt;og.exports={runCommand:Zp,checkNATSServerInstalled:Yx,createConnection:gE,getConnection:Mc,getJetStreamManager:Vi,getJetStream:jp,getNATSReferences:ht,getServerList:Wx,createLocalStream:OE,listStreams:eg,deleteLocalStream:Qx,getServerConfig:ki,listRemoteStreams:Jx,viewStream:zx,viewStreamIterator:Xx,publishToStream:Zx,createWorkQueueStream:jx,addSourceToWorkStream:rg,request:eV,removeSourceFromWorkStream:ng,reloadNATS:NE,reloadNATSHub:tV,reloadNATSLeaf:rV,extractServerName:sg,requestErrorHandler:sV,updateWorkStream:nV,createLocalTableStream:ig,createTableStreams:iV,purgeTableStream:ag,purgeSchemaTableStreams:aV,getStreamInfo:oV,updateLocalStreams:_V,closeConnection:Kx,getJsmServerName:$i,addNatsMsgHeader:tg};async function Zp(e,t=void 0){let{stdout:r,stderr:s}=await Dx(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
7
  `,"")}a(Zp,"runCommand");async function Yx(){try{await yx.access(TE)}catch{return!1}let e=await Zp(`${TE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Ux.eq(t,kx)}a(Yx,"checkNATSServerInstalled");async function gE(e,t,r,s=!0,n="127.0.0.1"){return Bx({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(gE,"createConnection");async function Kx(){Vt&&(await Vt.drain(),Vt=void 0)}a(Kx,"closeConnection");async function Mc(){if(!Vt){let e=await Kp.getClusterUser();if(Us(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Vt=await gE(t,e.username,e.decrypt_hash)}return Vt}a(Mc,"getConnection");async function Vi(){if(qi)return qi;Us(Vt)&&await Mc();let{domain:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Us(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qi=await Vt.jetstreamManager({domain:e}),qi}a(Vi,"getJetStreamManager");async function jp(){if(Fi)return Fi;Us(Vt)&&await Mc();let{domain:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Us(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Fi=Vt.jetstream({domain:e}),Fi}a(jp,"getJetStream");async function ht(){let e=Vt||await Mc(),t=qi||await Vi(),r=Fi||await jp();return{connection:e,jsm:t,js:r}}a(ht,"getNATSReferences");async function Wx(e){let t=ge.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Kp.getClusterUser(),n=await gE(t,r,s),i=pE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=Xp.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=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 Uc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a(Wx,"getServerList");async function OE(e,t){let{jsm:r}=await ht(),s=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Qp.File,retention:Jp.Limits,subjects:t,discard:Hx.Old,duplicate_window:Wp,max_msgs:n,max_bytes:i,max_age:s})}a(OE,"createLocalStream");async function eg(){let{jsm:e}=await ht(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(eg,"listStreams");async function Qx(e){let{jsm:t}=await ht();await t.streams.delete(e)}a(Qx,"deleteLocalStream");async function Jx(e){let{connection:t}=await ht(),r=[],s=pE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Xp.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(Jx,"listRemoteStreams");async function zx(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ht(),i=mE(),o=[],c={ack_policy:AE.None,durable_name:i,deliver_subject:i,deliver_policy:xi.All};t&&(c.deliver_policy=xi.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=zp(l),d=RE(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(h.origin=E.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(zx,"viewStream");async function*Xx(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ht(),i=mE(),o={ack_policy:AE.None,durable_name:i,deliver_subject:i,deliver_policy:xi.All};t&&(o.deliver_policy=xi.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=zp(u),E=RE(l.data);E[0]||(E=[E]);for(let d of E){let h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(h.origin=l.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),yield h}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}a(Xx,"viewStreamIterator");async function Zx(e,t,r,s){zr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;ge.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=tg(s,r);let{js:i}=await ht(),o=await $i(),c=`${e}.${o}`;try{zr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,SE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")zr.trace(`publishToStream creating stream: ${t}`),await OE(t,[c]),n&&await i.publish(c,SE(s),{headers:r});else throw _}}a(Zx,"publishToStream");function tg(e,t){t===void 0&&(t=Fx());let r=ge.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Uc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${mE()}`;t.append(V.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(V.MSG_HEADERS.ORIGIN)||t.append(V.MSG_HEADERS.ORIGIN,r),t}a(tg,"addNatsMsgHeader");function ki(e){e=e.toLowerCase();let t=Gi.join(ge.get(Q.CONFIG_PARAMS.ROOTPATH),Vx);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Us(fE)&&(fE={port:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Gi.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),fE;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Us(hE)&&(hE={port:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Gi.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),hE;zr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ki,"getServerConfig");async function jx(e){let{jsm:t}=await ht(),r=await $i();try{await t.streams.add({name:e.stream_name,storage:Qp.File,retention:Jp.Workqueue,duplicate_window:Wp,subjects:[`${V.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:AE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:xi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(jx,"createWorkQueueStream");async function rg(e,t,r){let{jsm:s}=await ht(),n=await s.streams.info(t),i=sg(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Lc.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,g=n.config.sources.length;R<g;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(rg,"addSourceToWorkStream");function sg(e){return e.split(".")[1]}a(sg,"extractServerName");async function ng(e,t,r){let{schema:s,table:n}=r,i=Lc.createNatsTableStreamName(s,n),{jsm:o}=await ht(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config)}a(ng,"removeSourceFromWorkStream");async function eV(e,t,r=2e3,s=pE()){if(!Uc.isObject(t))throw new Error("data param must be an object");let n=SE(t),{connection:i}=await ht(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return RE(c.data)}a(eV,"request");function NE(e){return new Promise(async(t,r)=>{let s=Px(TE,["--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(NE,"reloadNATS");async function tV(){let{pid_file_path:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await NE(e)}a(tV,"reloadNATSHub");async function rV(){let{pid_file_path:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await NE(e)}a(rV,"reloadNATSLeaf");function sV(e,t,r){let s;switch(e.code){case $p.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case $p.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(sV,"requestErrorHandler");async function nV(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await vx.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await rg(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await ng(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(nV,"updateWorkStream");async function ig(e,t){let r=Lc.createNatsTableStreamName(e,t),s=await $i(),n=cV(e,t,s);await OE(r,[n])}a(ig,"createLocalTableStream");async function iV(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await ig(s,n)}}a(iV,"createTableStreams");async function ag(e,t){if(ge.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Lc.createNatsTableStreamName(e,t),{jsm:s}=await ht();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")zr.warn(r);else throw r}}a(ag,"purgeTableStream");async function aV(e,t){if(ge.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await ag(e,t[r])}a(aV,"purgeSchemaTableStreams");async function oV(e){return(await Vi()).streams.info(e)}a(oV,"getStreamInfo");function cV(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(cV,"createSubjectName");async function $i(){if(Hi)return Hi;if(Hi=(await Vi())?.nc?.info?.server_name,Hi===void 0)throw new Error("Unable to get jetstream manager server name");return Hi}a($i,"getJsmServerName");async function _V(){let e=await Vi(),t=await $i(),r=await eg();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=uV(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;zr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;zr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");zr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(_V,"updateLocalStreams");function uV(e){let{config:t}=e,r=!1;if(t.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=ge.get(Q.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(uV,"updateStreamLimits")});var IE=f((Pj,cg)=>{"use strict";var Dc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Dc,"ClusteringOriginObject");cg.exports=Dc});var Yi=f((Bj,_g)=>{"use strict";var lV=b(),bE=U(),Xr=T(),EV=le(),dV=He(),sr=I(),hV=IE(),fV=Yr();bE.initSync();_g.exports={postOperationHandler:TV};async function Pc(e,t,r,s){if(e.schema===Xr.SYSTEM_SCHEMA_NAME)return;let n=SV(e,t,r);n&&(sr.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await dV.publishToStream(`${EV.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,fV.createNatsTableStreamName(e.schema,e.table),s,n))}a(Pc,"sendOperationTransaction");function SV(e,t,r){if(lV.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Xr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(SV,"convertCRUDOperationToTransaction");async function TV(e,t,r){if(!bE.get(Xr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;sr.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=bE.get(Xr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new hV(t.txn_time,s,n);switch(e.operation){case Xr.OPERATIONS_ENUM.INSERT:try{await Pc(e,t.inserted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for insert."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.DELETE:try{await Pc(e,t.deleted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for delete."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.UPDATE:try{await Pc(e,t.update_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for update."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.UPSERT:try{await Pc(e,t.upserted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for upsert."),sr.error(o)}break;default:break}return t}a(TV,"postOperationHandler")});var hg=f((qj,dg)=>{"use strict";var mV=bt(),RV=Ar(),ug=I(),lg=It(),AV=yc(),pV=require("clone"),CE=require("alasql"),gV=Oc(),Eg=require("util"),OV=Eg.promisify(RV.getTableSchema),NV=Eg.promisify(mV.search),IV=T(),wE=b(),bV=Yi();gV(CE);dg.exports={update:CV};var wV="There was a problem performing this update. Please check the logs and try again.";async function CV({statement:e,hdb_user:t}){let r=await OV(e.table.databaseid,e.table.tableid),s=yV(e.columns);wE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=pV(n),c=wE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=CE.parse(_).statements[0],l=await AV.writeTransaction(r.schema,r.name,async()=>{let E=await NV(u),d=UV(s,E);return LV(o,d,t)});return await lg.flush({schema:r.schema,table:r.name}),l}a(CV,"update");function yV(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=CE.compile(`SELECT ${r.expression.toString()} AS [${IV.FUNC_VAL}] FROM ?`)}),t}catch(t){throw ug.error(t),new Error(wV)}}a(yV,"createUpdateRecord");function UV(e,t){return wE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(UV,"buildUpdateRecords");async function LV(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await lg.update(s);await bV.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){ug.error(`Error delete new_attributes from update response: ${i}`)}return n}a(LV,"updateRecords")});var Sg=f((Gj,fg)=>{var MV=require("alasql"),DV=bt(),PV=I(),vV=Xt(),UE=require("util"),yE=b(),BV=T(),HV=Ar(),qV=yc(),FV=Yi(),GV=It(),xV="record",VV="successfully deleted",kV=UE.callbackify(WV),$V=UE.promisify(DV.search),YV=UE.promisify(HV.getTableSchema);fg.exports={convertDelete:kV};function KV(e){return`${e.deleted_hashes.length} ${xV}${e.deleted_hashes.length===1?"":"s"} ${VV}`}a(KV,"generateReturnMessage");async function WV({statement:e,hdb_user:t}){let r=await YV(e.table.databaseid,e.table.tableid);yE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=yE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=MV.parse(o).statements[0],_={operation:BV.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await qV.writeTransaction(r.schema,r.name,async()=>(_.records=await $V(c),vV.deleteRecords(_)));return await GV.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await FV.postOperationHandler(_,u),yE.isEmptyOrZeroLength(u.message)&&(u.message=KV(u)),delete u.txn_time,u}catch(u){throw PV.error(u),u.hdb_code?u.message:u}}a(WV,"convertDelete")});var Rg=f((Vj,mg)=>{"use strict";var ME=Ns(),{hdb_errors:LE}=y();mg.exports={checkSchemaExists:Tg,checkSchemaTableExists:QV,schema_describe:ME};async function Tg(e){if(!global.hdb_schema[e])try{let t=await ME.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return LE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(Tg,"checkSchemaExists");async function QV(e,t){let r=await Tg(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await ME.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return LE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return LE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(QV,"checkSchemaTableExists")});var Bc=f((Yj,Og)=>{"use strict";var On=Oo(),Ls=Rg(),JV=I(),zV=require("uuid").v4,$j=require("clone"),Nn=ln(),Ms=T(),XV=require("util"),Ds=Xt(),{handleHDBError:Qe,hdb_errors:ZV}=y(),{HDB_ERROR_MSGS:vc,HTTP_STATUS_CODES:Je}=ZV,{SchemaEventMsg:In}=Kr(),Ag=He();Og.exports={createSchema:jV,createSchemaStructure:pg,createTable:ek,createTableStructure:gg,createAttribute:ik,dropSchema:tk,dropTable:rk,dropAttribute:sk};async function jV(e){try{let t=await pg(e);return Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(jV,"createSchema");async function pg(e){let t=On.schema_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);if(!await Ls.checkSchemaExists(e.schema))throw Qe(new Error,vc.SCHEMA_EXISTS_ERR(e.schema),Je.BAD_REQUEST,Ms.LOG_LEVELS.ERROR,vc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ds.createSchema(e),`schema '${e.schema}' successfully created`}a(pg,"createSchemaStructure");async function ek(e){let t=await gg(e);return Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table)),t}a(ek,"createTable");async function gg(e){let t=On.create_table_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);On.validateTableResidence(e.residence);let r=await Ls.checkSchemaExists(e.schema);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);if(!await Ls.checkSchemaTableExists(e.schema,e.table))throw Qe(new Error,vc.TABLE_EXISTS_ERR(e.schema,e.table),Je.BAD_REQUEST,Ms.LOG_LEVELS.ERROR,vc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ds.createTable(n,e);else throw Qe(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Je.BAD_REQUEST);else await Ds.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(gg,"createTableStructure");async function tk(e){let t=On.schema_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Ls.checkSchemaExists(e.schema);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);let s=await Ls.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ds.dropSchema(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Ag.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(tk,"dropSchema");async function rk(e){let t=On.table_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Ls.checkSchemaTableExists(e.schema,e.table);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);return await Ds.dropTable(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table)),await Ag.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(rk,"dropTable");async function sk(e){let t=On.attribute_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Ls.checkSchemaTableExists(e.schema,e.table);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qe(new Error,"You cannot drop a hash attribute",Je.BAD_REQUEST,void 0,void 0,!0);if(Ms.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qe(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Je.BAD_REQUEST,void 0,void 0,!0);try{return await Ds.dropAttribute(e),nk(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw JV.error(`Got an error deleting attribute ${XV.inspect(e)}.`),s}}a(sk,"dropAttribute");function nk(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(nk,"dropAttributeFromGlobal");async function ik(e){return await Ds.createAttribute(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(ik,"createAttribute")});var Ig=f((Wj,Ng)=>{"use strict";var{OPERATIONS_ENUM:ak}=T(),Hc=class{constructor(t,r,s=void 0,n=void 0){this.operation=ak.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Hc,"ReadAuditLogObject");Ng.exports=Hc});var DE=f((zj,Ug)=>{"use strict";var ok=Xt(),Jj=Ig(),qc=b(),Fc=T(),ck=U(),{handleHDBError:bg,hdb_errors:_k}=y(),{HDB_ERROR_MSGS:wg,HTTP_STATUS_CODES:Cg}=_k,uk=Object.values(Fc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),yg="To use this operation audit log must be enabled in harperdb-config.yaml";Ug.exports=lk;async function lk(e){if(qc.isEmpty(e.schema))throw new Error(wg.SCHEMA_REQUIRED_ERR);if(qc.isEmpty(e.table))throw new Error(wg.TABLE_REQUIRED_ERR);if(!ck.get(Fc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bg(new Error,yg,Cg.BAD_REQUEST,Fc.LOG_LEVELS.ERROR,yg,!0);let t=qc.checkSchemaTableExist(e.schema,e.table);if(t)throw bg(new Error,t,Cg.NOT_FOUND,Fc.LOG_LEVELS.ERROR,t,!0);if(!qc.isEmpty(e.search_type)&&uk.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await ok.readAuditLog(e)}a(lk,"readAuditLog")});var Bg=f((Zj,vg)=>{var Zr=require("validate.js"),Mg=re(),bn=T(),{handleHDBError:Ek,hdb_errors:dk}=y(),{HDB_ERROR_MSGS:_e,HTTP_STATUS_CODES:hk}=dk,PE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),fk={STRUCTURE_USER:"structure_user"},Lg=Object.values(bn.ROLE_TYPES_ENUM),Sk="attribute_permissions",Tk="attribute_name",{PERMS_CRUD_ENUM:wn}=bn,mk=[Sk,...Object.values(wn)],Dg=[wn.READ,wn.INSERT,wn.UPDATE],Rk=[Tk,...Dg];function Ak(e){let t=PE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Pg(e,t)}a(Ak,"addRoleValidation");function pk(e){let t=PE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Pg(e,t)}a(pk,"alterRoleValidation");function gk(e){let t=PE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Mg.validateObject(e,t)}a(gk,"dropRoleValidation");var Ok=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Pg(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Ok.includes(s[o])||n.push(s[o]);n.length>0&&de(_e.INVALID_ROLE_JSON_KEYS(n),r);let i=Mg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{de(o,r)}),e.permission){let o=Nk(e);o&&de(o,r),Lg.forEach(c=>{e.permission[c]&&!Zr.isBoolean(e.permission[c])&&de(_e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Lg.indexOf(o)<0){if(o===fk.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||de(_e.SCHEMA_NOT_FOUND(E),r)}continue}de(_e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){de(_e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){de(_e.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{mk.includes(l)||de(_e.INVALID_PERM_KEY(l),r,o,_)}),Object.values(wn).forEach(l=>{Zr.isDefined(u[l])?Zr.isBoolean(u[l])||de(_e.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):de(_e.TABLE_PERM_MISSING(l),r,o,_)}),Zr.isDefined(u.attribute_permissions)){if(!Zr.isArray(u.attribute_permissions)){de(_e.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{de(_e.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!Rk.includes(R)&&R!==wn.DELETE&&de(_e.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Zr.isDefined(h.attribute_name)){de(_e.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=h.attribute_name;if(!l.includes(m)){de(_e.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}Dg.forEach(R=>{Zr.isDefined(h[R])?Zr.isBoolean(h[R])||de(_e.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):de(_e.ATTR_PERM_MISSING(R,m),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;de(_e.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return Ik(r)}a(Pg,"customValidate");vg.exports={addRoleValidation:Ak,alterRoleValidation:pk,dropRoleValidation:gk};function Nk(e){let{operation:t,permission:r}=e;if(t===bn.OPERATIONS_ENUM.ADD_ROLE||t===bn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return _e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?bn.ROLE_TYPES_ENUM.SUPER_USER:bn.ROLE_TYPES_ENUM.CLUSTER_USER;return _e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Nk,"validateNoSUPerms");function Ik(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:_e.ROLE_PERMS_ERROR,...e};return Ek(new Error,s,hk.BAD_REQUEST)}else return null}a(Ik,"generateRolePermResponse");function de(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(de,"addPermError")});var VE=f((e8,Vg)=>{"use strict";var Hg=It(),qg=bt(),bk=gs(),HE=Bg(),qE=ln(),wk=require("uuid").v4,FE=require("util"),Ck=ms(),Or=T(),Fg=b(),GE=FE.promisify(qg.searchByValue),yk=FE.promisify(qg.searchByHash),Uk=FE.promisify(bk.delete),Lk=Gt(),Mk=Sn(),{hdb_errors:Dk,handleHDBError:Ki}=y(),{HDB_ERROR_MSGS:Gg,HTTP_STATUS_CODES:vE}=Dk,{UserEventMsg:xE}=Kr();Vg.exports={addRole:Pk,alterRole:Bk,dropRole:Hk,listRoles:xg};function BE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(BE,"scrubRoleDetails");async function Pk(e){let t=HE.addRoleValidation(e);if(t)throw t;if(!(await Ck.getLicense()).enterprise){let o=await xg();if(vk(e,o))throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Or.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_NON_CU_ROLES+Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Or.SUPPORT_HELP_MSG}`)}e=BE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await GE(s)||[])}catch(o){throw Ki(o)}if(n&&n.length>0)throw Ki(new Error,Gg.ROLE_ALREADY_EXISTS(e.role),vE.CONFLICT,void 0,void 0,!0);e.id||(e.id=wk());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Hg.insert(i),qE.signalUserChange(new xE(process.pid)),e=BE(e),e}a(Pk,"addRole");function vk(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!Fg.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(vk,"checkClusterUserRole");async function Bk(e){let t=HE.alterRoleValidation(e);if(t)throw t;e=BE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await Hg.update(r)}catch(s){throw Ki(s)}return qE.signalUserChange(new xE(process.pid)),e}a(Bk,"alterRole");async function Hk(e){let t=HE.dropRoleValidation(e);if(t)throw Ki(new Error,t,vE.BAD_REQUEST,void 0,void 0,!0);let r=new Mk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await yk(r));if(s.length===0)throw Ki(new Error,Gg.ROLE_NOT_FOUND,vE.NOT_FOUND,void 0,void 0,!0);let n=new Lk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await GE(n)),o=!1;if(Fg.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Uk(c),qE.signalUserChange(new xE(process.pid)),`${s[0].role} successfully deleted`}a(Hk,"dropRole");async function xg(){return GE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(xg,"listRoles")});var Kg=f((r8,Yg)=>{"use strict";var qk=U(),jr=require("joi"),Fk=re(),kg=require("moment"),Gk=require("fs-extra"),kE=require("path"),xk=require("lodash"),Wi=T(),{LOG_LEVELS:Ps}=T(),Vk="YYYY-MM-DD hh:mm:ss",kk=kE.resolve(__dirname,"../logs");Yg.exports=function(e){return Fk.validateBySchema(e,$k)};var $k=jr.object({from:jr.custom($g),until:jr.custom($g),level:jr.valid(Ps.NOTIFY,Ps.FATAL,Ps.ERROR,Ps.WARN,Ps.INFO,Ps.DEBUG,Ps.TRACE),order:jr.valid("asc","desc"),limit:jr.number().min(1),start:jr.number().min(0),log_name:jr.custom(Yk)});function $g(e,t){if(kg(e,kg.ISO_8601).format(Vk)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($g,"validateDatetime");function Yk(e,t){if(xk.invert(Wi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=qk.get(Wi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Wi.LOG_NAMES.HDB:e,i=n===Wi.LOG_NAMES.INSTALL?kE.join(kk,Wi.LOG_NAMES.INSTALL):kE.join(s,n);return Gk.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Yk,"validateReadLogPath")});var YE=f((n8,Wg)=>{"use strict";var Gc=T(),Kk=I(),Wk=U(),Qk=Kg(),$E=require("path"),Jk=require("fs-extra"),{once:zk}=require("events"),{handleHDBError:Xk,hdb_errors:Zk}=y(),{PACKAGE_ROOT:jk}=T(),e$=$E.join(jk,"logs"),t$=1e3;Wg.exports=r$;async function r$(e){let t=Qk(e);if(t)throw Xk(t,t.message,Zk.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Wk.get(Gc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Gc.LOG_NAMES.HDB:e.log_name,n=s===Gc.LOG_NAMES.INSTALL?$E.join(e$,Gc.LOG_NAMES.INSTALL):$E.join(r,s),i=Jk.createReadStream(n);i.on("error",M=>{Kk.error(M)});let o=e.level!==void 0,c=o?e.level:void 0,_=e.from!==void 0,u=_?new Date(e.from):void 0,l=e.until!==void 0,E=l?new Date(e.until):void 0,d=e.limit===void 0?t$:e.limit,h=e.order===void 0?void 0:e.order,m=e.start===void 0?0:e.start,R=m+d,g=0,H=[],x="",q;i.on("data",M=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;M=x+M;let ue=0,oe;for(;(oe=$.exec(M))&&!i.destroyed;){q&&(q.message=M.slice(ue,oe.index),Ue(q));let[kn,ls,Mr]=oe,va=Mr.split("] ["),pC=va[0],gC=va[1];va.splice(0,2),q={timestamp:ls,thread:pC,level:gC,tags:va,message:""},ue=oe.index+kn.length}x=M.slice(ue)}),i.on("end",M=>{i.destroyed||q&&(q.message=x.trim(),Ue(q))}),i.resume();function Ue(M){let $,ue,oe;switch(!0){case(o&&_&&l):$=new Date(M.timestamp),ue=new Date(u),oe=new Date(E),M.level===c&&$>=ue&&$<=oe&&g<m?g++:M.level===c&&$>=ue&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(M.timestamp),ue=new Date(u),M.level===c&&$>=ue&&g<m?g++:M.level===c&&$>=ue&&(es(M,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(M.timestamp),oe=new Date(E),M.level===c&&$<=oe&&g<m?g++:M.level===c&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(M.timestamp),ue=new Date(u),oe=new Date(E),$>=ue&&$<=oe&&g<m?g++:$>=ue&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case o:M.level===c&&g<m?g++:M.level===c&&(es(M,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(M.timestamp),ue=new Date(u),$>=ue&&g<m?g++:$>=ue&&g>=m&&(es(M,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(M.timestamp),oe=new Date(E),$<=oe&&g<m?g++:$<=oe&&g>=m&&(es(M,h,H),g++,g===R&&i.destroy());break;default:g<m?g++:(es(M,h,H),g++,g===R&&i.destroy())}}return a(Ue,"onLogMessage"),await zk(i,"close"),H}a(r$,"readLog");function es(e,t,r){t==="desc"?s$(e,r):t==="asc"?n$(e,r):r.push(e)}a(es,"pushLineToResult");function s$(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(s$,"insertDescending");function n$(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(n$,"insertAscending")});var Vc=f((c8,zg)=>{"use strict";var KE=require("joi"),{string:xc,boolean:Qg,date:i$}=KE.types(),a$=re(),{validateSchemaExists:a8,validateTableExists:o8,validateSchemaName:o$}=zt(),c$=T(),_$=le(),u$=U(),l$=xc.invalid(u$.get(c$.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(_$.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),Jg={operation:xc.valid("add_node","update_node"),node_name:l$,subscriptions:KE.array().items({table:xc.required(),schema:xc.custom(o$).required(),subscribe:Qg.required(),publish:Qg.required().custom(d$),start_time:i$.iso()}).min(1).required()};function E$(e){return a$.validateBySchema(e,KE.object(Jg))}a(E$,"addUpdateNodeValidator");function d$(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(d$,"checkForFalsy");zg.exports={addUpdateNodeValidator:E$,validation_schema:Jg}});var Zg=f((u8,Xg)=>{var h$=re(),f$={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Xg.exports=function(e){return h$.validateObject(e,f$)}});var WE=f((l8,jg)=>{"use strict";var S$=T().OPERATIONS_ENUM,kc=class{constructor(t,r,s,n=void 0){this.operation=S$.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(kc,"UpdateObject");jg.exports=kc});var tO=f((d8,eO)=>{"use strict";var T$={OPERATION:"operation",REFRESH:"refresh"},$c=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a($c,"JWTTokens");var Yc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Yc,"JWTRSAKeys");eO.exports={JWTTokens:$c,TOKEN_TYPE_ENUM:T$,JWTRSAKeys:Yc}});var Jc=f((f8,iO)=>{"use strict";var Ji=require("jsonwebtoken"),QE=require("fs-extra"),JE=b(),wt=T(),{handleHDBError:ze,hdb_errors:m$}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=m$,Qi=I(),rO=Do(),ZE=er(),R$=It().update,A$=WE(),p$=ln(),{UserEventMsg:g$}=Kr(),ts=U();ts.initSync();var zE=require("path"),{JWTTokens:O$,JWTRSAKeys:N$,TOKEN_TYPE_ENUM:Kc}=tO(),I$=ts.get(wt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ts.get(wt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",b$=ts.get(wt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ts.get(wt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Wc="RS256",XE;iO.exports={createTokens:w$,validateOperationToken:y$,refreshOperationToken:C$,validateRefreshToken:nO};async function w$(e){if(JE.isEmpty(e)||typeof e!="object")throw ze(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(JE.isEmpty(e.username))throw ze(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(JE.isEmpty(e.password))throw ze(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ZE.findAndValidateUser(e.username,e.password),!t)throw ze(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Qi.error(d),ze(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Qc(),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 sO(i,r.private_key,r.passphrase),c=await Ji.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:b$,algorithm:Wc,subject:Kc.REFRESH}),_=rO.hash(c),u=new A$(wt.SYSTEM_SCHEMA_NAME,wt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await R$(u)}catch(d){Qi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw ze(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return p$.signalUserChange(new g$(process.pid)),new O$(o,c)}a(w$,"createTokens");async function sO(e,t,r){return await Ji.sign(e,{key:t,passphrase:r},{expiresIn:I$,algorithm:Wc,subject:Kc.OPERATION})}a(sO,"signOperationToken");async function Qc(){if(XE===void 0)try{let e=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await QE.readFile(e)).toString(),n=(await QE.readFile(t)).toString(),i=(await QE.readFile(r)).toString();XE=new N$(i,n,s)}catch(e){throw Qi.error(e),ze(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return XE}a(Qc,"getJWTRSAKeys");async function C$(e){if(!e)throw ze(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ze(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await nO(e.refresh_token);let t=await Qc(),r=await Ji.decode(e.refresh_token);return{operation_token:await sO({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(C$,"refreshOperationToken");async function y$(e){try{let t=await Qc(),r=await Ji.verify(e,t.public_key,{algorithms:Wc,subject:Kc.OPERATION});return await ZE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Qi.warn(t),t.name&&t.name==="TokenExpiredError"?ze(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(y$,"validateOperationToken");async function nO(e){let t;try{let r=await Qc(),s=await Ji.verify(e,r.public_key,{algorithms:Wc,subject:Kc.REFRESH});t=await ZE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Qi.warn(r),r.name&&r.name==="TokenExpiredError"?ze(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!rO.validate(t.refresh_token,e))throw ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(nO,"validateRefreshToken")});var jE=f((m8,cO)=>{"use strict";var U$=Zg(),Cn=require("passport"),L$=require("passport-local").Strategy,M$=require("passport-http").BasicStrategy,D$=require("util"),P$=er(),oO=D$.callbackify(P$.findAndValidateUser),T8=at(),v$=T(),aO=Jc();Cn.use(new L$(function(e,t,r){oO(e,t,r)}));Cn.use(new M$(function(e,t,r){oO(e,t,r)}));Cn.serializeUser(function(e,t){t(null,e)});Cn.deserializeUser(function(e,t){t(null,e)});function B$(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Cn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===v$.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?aO.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):aO.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Cn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(B$,"authorize");function H$(e,t){let r=U$(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(H$,"checkPermissions");cO.exports={authorize:B$,checkPermissions:H$}});var yn=f((A8,_O)=>{"use strict";var zc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(zc,"Node");var Xc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Xc,"NodeSubscription");_O.exports={Node:zc,NodeSubscription:Xc}});var lO=f((g8,uO)=>{"use strict";var q$=T().OPERATIONS_ENUM,Zc=class{constructor(t,r,s,n=void 0){this.operation=q$.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Zc,"UpsertObject");uO.exports=Zc});var zi=f((N8,EO)=>{"use strict";var jc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(jc,"RemotePayloadObject");var e_=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(e_,"RemotePayloadSubscription");EO.exports={RemotePayloadObject:jc,RemotePayloadSubscription:e_}});var hO=f((b8,dO)=>{"use strict";var t_=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(t_,"TableSizeObject");dO.exports=t_});var SO=f((C8,fO)=>{"use strict";var F$=hO(),G$=Le(),Un=z(),x$=I(),{getSchemaPath:V$,getTransactionAuditStorePath:k$}=j();fO.exports=$$;async function $$(e){let t=new F$;try{let r=V$(e.schema,e.name),s=await Un.openEnvironment(r,e.name),n=Un.statDBI(s,e.hash_attribute),i=k$(e.schema,e.name),o=await Un.openEnvironment(i,e.name,!0),c=Un.statDBI(o,G$.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Un.environmentDataSize(r,e.name),u=await Un.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){x$.warn(`unable to stat table dbi due to ${r}`)}return t}a($$,"lmdbGetTableSize")});var mO=f((U8,TO)=>{"use strict";var r_=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(r_,"SystemInformationObject");TO.exports=r_});var Ln=f((M8,gO)=>{"use strict";var Y$=require("fs-extra"),K$=require("path"),qe=require("systeminformation"),rs=I(),ed=T(),W$=SO(),AO=Ns(),{getThreadInfo:RO}=cn(),pO=U();pO.initSync();var Q$=mO(),{openEnvironment:J$}=z(),{getSchemaPath:z$}=j(),s_;gO.exports={getHDBProcessInfo:nd,getNetworkInfo:ad,getDiskInfo:id,getMemoryInfo:sd,getCPUInfo:rd,getTimeInfo:td,getSystemInformation:od,systemInformation:X$,getTableSize:cd,getMetrics:_d};function td(){return qe.time()}a(td,"getTimeInfo");async function rd(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await qe.cpu();l.cpu_speed=await qe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await qe.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:Ue,raw_load_idle:M,raw_load_irq:$,raw_load_nice:ue,raw_load_system:oe,raw_load_user:kn,...ls}=q;x.cpus.push(ls)}),l.current_load=x,l}catch(e){return rs.error(`error in getCPUInfo: ${e}`),{}}}a(rd,"getCPUInfo");async function sd(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await qe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return rs.error(`error in getMemoryInfo: ${e}`),{}}}a(sd,"getMemoryInfo");async function nd(){let e={core:[],clustering:[]};try{let t=await qe.processes(),r;try{r=Number.parseInt(await Y$.readFile(K$.join(pO.get(ed.CONFIG_PARAMS.ROOTPATH),ed.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===ed.NODE_ERROR_CODES.ENOENT)rs.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 rs.error(`error in getHDBProcessInfo: ${t}`),e}}a(nd,"getHDBProcessInfo");async function id(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await qe.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await qe.fsStats();return e.read_write=u,e.size=await qe.fsSize(),e}catch(t){return rs.error(`error in getDiskInfo: ${t}`),e}}a(id,"getDiskInfo");async function ad(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await qe.networkInterfaceDefault(),e.latency=await qe.inetChecksite("google.com"),(await qe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await qe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return rs.error(`error in getNetworkInfo: ${t}`),e}}a(ad,"getNetworkInfo");async function od(){if(s_!==void 0)return s_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await qe.osInfo();e=c;let _=await qe.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,s_=e,s_}catch(t){return rs.error(`error in getSystemInformation: ${t}`),e}}a(od,"getSystemInformation");async function cd(){let e=[],t=await AO.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await W$(s));return e}a(cd,"getTableSize");async function _d(){let e=await AO.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=z$(r,n),c=(await J$(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){rs.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(_d,"getMetrics");async function X$(e){let t=new Q$;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await od(),t.time=td(),t.cpu=await rd(),t.memory=await sd(),t.disk=await id(),t.network=await ad(),t.harperdb_processes=await nd(),t.table_size=await cd(),t.metrics=await _d(),t.threads=await RO(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await od();break;case"time":t.time=td();break;case"cpu":t.cpu=await rd();break;case"memory":t.memory=await sd();break;case"disk":t.disk=await id();break;case"network":t.network=await ad();break;case"harperdb_processes":t.harperdb_processes=await nd();break;case"table_size":t.table_size=await cd();break;case"database_metrics":case"metrics":t.metrics=await _d();break;case"threads":t.threads=await RO();break;default:break}return t}a(X$,"systemInformation")});var ud=f((B8,OO)=>{"use strict";var P8=require("fs-extra"),v8=I();OO.exports={version:Z$,printVersion:eY,nodeVersion:j$};var ss=ei();function Z$(){if(ss)return ss.version}a(Z$,"version");function j$(){if(ss&&ss.engines&&ss.engines["preferred-node"])return ss.engines["preferred-node"]}a(j$,"nodeVersion");function eY(){ss&&console.log(`HarperDB Version ${ss.version}`)}a(eY,"printVersion")});var Nr=f((G8,wO)=>{"use strict";var tY=It(),ld=b(),Ed=require("util"),vs=T(),NO=U();NO.initSync();var rY=jE(),IO=bt(),{Node:q8,NodeSubscription:F8}=yn(),sY=Sn(),nY=lO(),{RemotePayloadObject:iY,RemotePayloadSubscription:aY}=zi(),{handleHDBError:oY,hdb_errors:cY}=y(),{HTTP_STATUS_CODES:_Y,HDB_ERROR_MSGS:uY}=cY,lY=Gt(),EY=Ln(),dY=ud(),hY=Ed.promisify(rY.authorize),fY=Ed.promisify(IO.searchByHash),SY=Ed.promisify(IO.searchByValue);wO.exports={authHeaderToUser:TY,isEmpty:mY,getNodeRecord:RY,upsertNodeRecord:AY,buildNodePayloads:pY,checkClusteringEnabled:gY,getAllNodeRecords:OY,getSystemInfo:NY,reverseSubscription:bO};async function TY(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await hY(t,null),e}a(TY,"authHeaderToUser");function mY(e){return e==null}a(mY,"isEmpty");async function RY(e){let t=new sY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return fY(t)}a(RY,"getNodeRecord");async function AY(e){let t=new nY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return tY.upsert(t)}a(AY,"upsertNodeRecord");function bO(e){if(ld.isEmpty(e.subscribe)||ld.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(bO,"reverseSubscription");function pY(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=ld.getTableHashAttribute(_,u),{subscribe:E,publish:d}=bO(c),h=new aY(_,u,l,d,E,c.start_time);n.push(h)}return new iY(r,t,n,s)}a(pY,"buildNodePayloads");function gY(){if(!NO.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oY(new Error,uY.CLUSTERING_NOT_ENABLED,_Y.BAD_REQUEST,void 0,void 0,!0)}a(gY,"checkClusteringEnabled");async function OY(){let e=new lY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await SY(e))}a(OY,"getAllNodeRecords");async function NY(){let e=await EY.getSystemInformation();return{hdb_version:dY.version(),node_version:e.node_version,platform:e.platform}}a(NY,"getSystemInfo")});var hd=f((V8,DO)=>{"use strict";var dd=He(),CO=b(),yO=le(),IY=T(),n_=I(),UO=Bc(),bY=jl(),{RemotePayloadObject:wY}=zi(),{handleHDBError:LO,hdb_errors:CY}=y(),{HTTP_STATUS_CODES:MO}=CY,{NodeSubscription:yY}=yn();DO.exports=UY;async function UY(e,t){let r;try{r=await dd.request(`${t}.${yO.REQUEST_SUFFIX}`,new wY(IY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=dd.requestErrorHandler(o,"add_node",t);throw LO(new Error,c,MO.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===yO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw LO(new Error,o,MO.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=CO.doesSchemaExist(c),l=s[c]!==void 0,E=CO.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(n_.trace(`addNode creating schema: ${c}`),await UO.createSchema({operation:"create_schema",schema:c})),!E&&d){n_.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new bY(c,_,s[c][_].hash_attribute);await UO.createTable(m)}await dd.createLocalTableStream(c,_);let h=new yY(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(UY,"reviewSubscriptions")});var o_=f(($8,BO)=>{"use strict";var{handleHDBError:i_,hdb_errors:LY}=y(),{HTTP_STATUS_CODES:a_}=LY,{addUpdateNodeValidator:MY}=Vc(),Xi=I(),vO=T(),PO=le(),DY=b(),fd=He(),Zi=Nr(),PY=U(),vY=hd(),{Node:BY,NodeSubscription:HY}=yn(),qY="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",FY="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",GY=PY.get(vO.CONFIG_PARAMS.CLUSTERING_NODENAME);BO.exports=xY;async function xY(e,t=!1){Xi.trace("addNode called with:",e),Zi.checkClusteringEnabled();let r=MY(e);if(r)throw i_(r,r.message,a_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Zi.getNodeRecord(s);if(!DY.isEmptyOrZeroLength(E))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,a_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await vY(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=qY,o;let c=Zi.buildNodePayloads(n,GY,vO.OPERATIONS_ENUM.ADD_NODE,await Zi.getSystemInfo());Xi.trace("addNode sending remote payload:",c);let _;try{_=await fd.request(`${s}.${PO.REQUEST_SUFFIX}`,c)}catch(E){Xi.error(`addNode received error from request: ${E}`);let d=fd.requestErrorHandler(E,"add_node",s);throw i_(new Error,d,a_.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===PO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw i_(new Error,E,a_.INTERNAL_SERVER_ERROR,"error",E)}Xi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];Xi.trace("Add node updating work stream for node:",s,"subscriptions:",h),await fd.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new HY(h.schema,h.table,h.publish,h.subscribe))}let l=new BY(s,u,_.system_info);return await Zi.upsertNodeRecord(l),i.length>0?o.message=FY:o.message=`Successfully added '${s}' to manifest`,o}a(xY,"addNode")});var Td=f((K8,FO)=>{"use strict";var{handleHDBError:c_,hdb_errors:VY}=y(),{HTTP_STATUS_CODES:__}=VY,{addUpdateNodeValidator:kY}=Vc(),ji=I(),qO=T(),HO=le(),$Y=b(),Sd=He(),ea=Nr(),YY=U(),{cloneDeep:KY}=require("lodash"),WY=hd(),{NodeSubscription:QY}=yn(),JY="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",zY="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",XY=YY.get(qO.CONFIG_PARAMS.CLUSTERING_NODENAME);FO.exports=ZY;async function ZY(e){ji.trace("updateNode called with:",e),ea.checkClusteringEnabled();let t=kY(e);if(t)throw c_(t,t.message,__.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=KY(await ea.getNodeRecord(r));if($Y.isEmptyOrZeroLength(s))throw c_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,__.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await WY(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=JY,o;let c=ea.buildNodePayloads(n,XY,qO.OPERATIONS_ENUM.UPDATE_NODE,await ea.getSystemInfo());ji.trace("updateNode sending remote payload:",c);let _;try{_=await Sd.request(`${r}.${HO.REQUEST_SUFFIX}`,c)}catch(u){ji.error(`updateNode received error from request: ${u}`);let l=Sd.requestErrorHandler(u,"update_node",r);throw c_(new Error,l,__.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===HO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw c_(new Error,u,__.INTERNAL_SERVER_ERROR,"error",u)}ji.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];ji.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await Sd.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await jY(s[0],n,_.system_info),i.length>0?o.message=zY:o.message=`Successfully updated '${r}'`,o}a(ZY,"updateNode");async function jY(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new QY(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ea.upsertNodeRecord(s)}a(jY,"updateNodeTable")});var $O=f((Q8,kO)=>{"use strict";var VO=require("joi"),{string:GO}=VO.types(),eK=re(),xO=T(),tK=U(),rK=le();kO.exports=sK;function sK(e){let t=GO.invalid(tK.get(xO.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(rK.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=VO.object({operation:GO.valid(xO.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return eK.validateBySchema(e,r)}a(sK,"removeNodeValidator")});var l_=f((z8,zO)=>{"use strict";var{handleHDBError:YO,hdb_errors:nK}=y(),{HTTP_STATUS_CODES:KO}=nK,iK=$O(),ta=I(),WO=Nr(),aK=b(),u_=T(),QO=le(),JO=He(),oK=U(),{RemotePayloadObject:cK}=zi(),{NodeSubscription:_K}=yn(),uK=Ci(),lK=gs(),EK=oK.get(u_.CONFIG_PARAMS.CLUSTERING_NODENAME);zO.exports=dK;async function dK(e){ta.trace("removeNode called with:",e),WO.checkClusteringEnabled();let t=iK(e);if(t)throw YO(t,t.message,KO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await WO.getNodeRecord(r);if(aK.isEmptyOrZeroLength(s))throw YO(new Error,`Node '${r}' was not found.`,KO.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new cK(u_.OPERATIONS_ENUM.REMOVE_NODE,EK,[]),i,o=!1;try{i=await JO.request(`${r}.${QO.REQUEST_SUFFIX}`,n),ta.trace("Remove node reply from remote node:",r,i)}catch(_){ta.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];ta.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new _K(l.schema,l.table,!1,!1);await JO.updateWorkStream(E,r)}let c=new uK(u_.SYSTEM_SCHEMA_NAME,u_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await lK.deleteRecord(c),i?.status===QO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ta.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(dK,"removeNode")});var jO=f((Z8,ZO)=>{"use strict";var XO=require("joi"),{string:hK,array:fK}=XO.types(),SK=re(),TK=Vc();ZO.exports=mK;function mK(e){let t=XO.object({operation:hK.valid("configure_cluster").required(),connections:fK.items(TK.validation_schema).required()});return SK.validateBySchema(e,t)}a(mK,"configureClusterValidator")});var md=f((e6,nN)=>{"use strict";var RK=T(),E_=I(),AK=b(),pK=l_(),gK=o_(),eN=Nr(),OK=jO(),{handleHDBError:tN,hdb_errors:NK}=y(),{HTTP_STATUS_CODES:rN}=NK,IK="Configure cluster complete.",bK="Failed to configure the cluster. Check the logs for more details.",wK="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";nN.exports=CK;async function CK(e){E_.trace("configure cluster called with:",e),eN.checkClusteringEnabled();let t=OK(e);if(t)throw tN(t,t.message,rN.BAD_REQUEST,void 0,void 0,!0);let r=await eN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(sN(pK,{operation:RK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);E_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(sN(gK,h,h.node_name))}let c=await Promise.allSettled(i);E_.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let m=E[d];m.status==="rejected"&&(E_.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(AK.isEmptyOrZeroLength(_))return{message:IK,connections:u};if(l)return{message:wK,failed_nodes:_,connections:u};throw tN(new Error,bK,rN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(CK,"configureCluster");async function sN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(sN,"functionWrapper")});var aN=f((r6,iN)=>{"use strict";var d_=require("joi"),yK=re(),{validateSchemaExists:UK,validateTableExists:LK,validateSchemaName:MK}=zt(),DK=d_.object({operation:d_.string().valid("purge_stream"),schema:d_.string().custom(UK).custom(MK).required(),table:d_.string().custom(LK).required()});function PK(e){return yK.validateBySchema(e,DK)}a(PK,"purgeStreamValidator");iN.exports=PK});var Rd=f((n6,oN)=>{"use strict";var{handleHDBError:vK,hdb_errors:BK}=y(),{HTTP_STATUS_CODES:HK}=BK,qK=aN(),FK=He(),GK=Nr();oN.exports=xK;async function xK(e){let t=qK(e);if(t)throw vK(t,t.message,HK.BAD_REQUEST,void 0,void 0,!0);GK.checkClusteringEnabled();let{schema:r,table:s}=e;return await FK.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(xK,"purgeStream")});var gd=f((a6,dN)=>{"use strict";var pd=Nr(),VK=He(),uN=U(),h_=T(),Bs=le(),kK=b(),Ad=I(),{RemotePayloadObject:$K}=zi(),{ErrorCode:cN}=require("nats"),_N=uN.get(h_.CONFIG_PARAMS.CLUSTERING_ENABLED),lN=uN.get(h_.CONFIG_PARAMS.CLUSTERING_NODENAME);dN.exports={clusterStatus:YK,buildNodeStatus:EN};async function YK(){let e={node_name:lN,is_enabled:_N,connections:[]};if(!_N)return e;let t=await pd.getAllNodeRecords();if(kK.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(EN(t[s],e.connections));return await Promise.allSettled(r),e}a(YK,"clusterStatus");async function EN(e,t){let r=e.name,s=new $K(h_.OPERATIONS_ENUM.CLUSTER_STATUS,lN,void 0,await pd.getSystemInfo()),n,i,o=Bs.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await VK.request(Bs.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Bs.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Bs.CLUSTER_STATUS_STATUSES.CLOSED,Ad.error(`Error getting node status from ${r} `,n))}catch(_){Ad.warn(`Error getting node status from ${r}`,_),_.code===cN.NoResponders?o=Bs.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===cN.Timeout?o=Bs.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Bs.CLUSTER_STATUS_STATUSES.CLOSED}let c=new KK(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==h_.PRE_4_0_0_VERSION&&await pd.upsertNodeRecord(_)}catch(_){Ad.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(EN,"buildNodeStatus");function KK(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(KK,"NodeStatusObject")});var Nd=f((c6,hN)=>{"use strict";var{handleHDBError:WK,hdb_errors:QK}=y(),{HTTP_STATUS_CODES:JK}=QK,zK=He(),XK=Nr(),Od=b(),f_=require("joi"),ZK=re(),jK=2e3,eW=f_.object({timeout:f_.number().min(1),connected_nodes:f_.boolean(),routes:f_.boolean()});hN.exports=tW;async function tW(e){XK.checkClusteringEnabled();let t=ZK.validateBySchema(e,eW);if(t)throw WK(t,t.message,JK.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||Od.autoCastBoolean(s),o=n===void 0||Od.autoCastBoolean(n),c={nodes:[]},_=await zK.getServerList(r??jK),u={};if(i)for(let l=0,E=_.length;l<E;l++){let d=_[l].statsz;d&&(u[_[l].server.name]=d.routes)}for(let l=0,E=_.length;l<E;l++){if(_[l].statsz)continue;let d=_[l].server,h=_[l].data;if(d.name.endsWith("-hub")){let m={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(m.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(m.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:Od.autoCast(R.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(tW,"clusterNetwork")});var mN=f((u6,TN)=>{"use strict";var Id=require("joi"),fN=re(),{route_constraints:SN}=Fu();TN.exports={setRoutesValidator:rW,deleteRoutesValidator:sW};function rW(e){let t=Id.object({server:Id.valid("hub","leaf").required(),routes:SN.required()});return fN.validateBySchema(e,t)}a(rW,"setRoutesValidator");function sW(e){let t=Id.object({routes:SN.required()});return fN.validateBySchema(e,t)}a(sW,"deleteRoutesValidator")});var wd=f((E6,gN)=>{"use strict";var Hs=fr(),bd=b(),S_=T(),RN=mN(),{handleHDBError:AN,hdb_errors:nW}=y(),{HTTP_STATUS_CODES:pN}=nW,iW="cluster routes successfully set",aW="cluster routes successfully deleted";gN.exports={setRoutes:oW,getRoutes:cW,deleteRoutes:_W};function oW(e){let t=RN.setRoutesValidator(e);if(t)throw AN(t,t.message,pN.BAD_REQUEST,void 0,void 0,!0);let r=Hs.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=bd.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:iW,set:o,skipped:i}}a(oW,"setRoutes");function cW(){let e=Hs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(cW,"getRoutes");function _W(e){let t=RN.deleteRoutesValidator(e);if(t)throw AN(t,t.message,pN.BAD_REQUEST,void 0,void 0,!0);let r=Hs.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,m=s.length;h<m;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let m=0,R=n.length;m<R;m++){let g=n[m];if(E.host===g.host&&E.port===g.port){n.splice(m,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=bd.isEmptyOrZeroLength(s)?null:s,Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=bd.isEmptyOrZeroLength(n)?null:n,Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:aW,deleted:i,skipped:o}}a(_W,"deleteRoutes")});var NN=f((h6,ON)=>{"use strict";var ra=require("alasql"),qs=require("recursive-iterator"),kt=I(),uW=b(),sa=T(),T_=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,EW(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>sa.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!sa.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][sa.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=lW(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!sa.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new ra.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(T_,"sql_statement_bucket");function lW(e){return e.filter(t=>t[sa.PERMS_CRUD_ENUM.READ])}a(lW,"filterReadRestrictedAttrs");function EW(e,t,r,s,n){dW(e,t,r,s,n)}a(EW,"interpretAST");function na(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(na,"addSchemaTableToMap");function dW(e,t,r,s,n){if(!e){kt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ra.yy.Insert?TW(e,t,r):e instanceof ra.yy.Select?hW(e,t,r,s,n):e instanceof ra.yy.Update?fW(e,t,r):e instanceof ra.yy.Delete?SW(e,t,r):kt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(dW,"getRecordAttributesAST");function hW(e,t,r,s,n){if(!e){kt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(uW.isEmptyOrZeroLength(i)){kt.error("No schema specified");return}e.from.forEach(c=>{na(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),na(c.table,t,r,s,n)});let o=new qs(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{kt.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new qs(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{kt.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new qs(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{kt.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new qs(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{kt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(hW,"getSelectAttributes");function fW(e,t,r){if(!e){kt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new qs(e.columns),n=e.table.databaseid;na(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Cd(e.table.tableid,n,i.columnid,t,r)}a(fW,"getUpdateAttributes");function SW(e,t,r){if(!e){kt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new qs(e.where),n=e.table.databaseid;na(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Cd(e.table.tableid,n,i.columnid,t,r)}a(SW,"getDeleteAttributes");function TW(e,t,r){if(!e){kt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new qs(e.columns),n=e.into.databaseid;na(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&Cd(e.into.tableid,n,i.columnid,t,r)}a(TW,"getInsertAttributes");function Cd(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(Cd,"pushAttribute");ON.exports=T_});var wN=f((S6,bN)=>{var mW=require("os"),IN=U();bN.exports={checkPermission:RW};function RW(){if(mW.userInfo().username!==IN.get("install_user"))throw new Error(`Error: Must execute as ${IN.get("install_user")}`)}a(RW,"checkPermission")});var Ud=f((m6,MN)=>{var R_=ms(),CN=require("chalk"),nr=I(),yN=wN(),UN=require("prompt"),{promisify:AW}=require("util"),m_=T(),pW=require("fs-extra"),gW=require("path"),OW=b(),NW=ud(),LN=U();LN.initSync();var IW=require("moment"),bW=AW(UN.get),wW=gW.join(LN.getHdbBasePath(),m_.LICENSE_KEY_DIR_NAME,m_.LICENSE_FILE_NAME,m_.LICENSE_FILE_NAME);MN.exports={getFingerprint:yW,setLicense:CW,parseLicense:yd,register:UW,getRegistrationInfo:MW};async function CW(e){if(e&&e.key&&e.company){try{nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await yd(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw nr.error(r),nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(CW,"setLicense");async function yW(){try{yN.checkPermission()}catch(t){throw nr.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await R_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw nr.error(r),nr.error(t),new Error(r)}return e}a(yW,"getFingerprint");async function yd(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=R_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{nr.info("writing license to disk"),await pW.writeFile(wW,JSON.stringify({license_key:e,company:t}))}catch(s){throw nr.error("Failed to write License"),s}return"Registration successful."}a(yd,"parseLicense");async function UW(){let e=await LW();return yd(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(UW,"register");async function LW(){try{yN.checkPermission()}catch(s){return console.error(s.message)}let e=await R_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:CN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:CN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{UN.start()}catch(s){nr.error(s)}let r;try{r=await bW(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(LW,"promptForRegistration");async function MW(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await R_.getLicense()}catch(r){throw nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(OW.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=NW.version(),e.storage_type=m_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=IW.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(MW,"getRegistrationInfo")});var PN=f((A6,DN)=>{"use strict";var DW=le(),A_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,m){this.port=t,o===null&&(o=void 0),this.server_name=r+DW.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_}},this.accounts={SYS:{users:h},HDB:{users:m}},this.system_account="SYS"}};a(A_,"HubConfigObject");DN.exports=A_});var HN=f((g6,BN)=>{"use strict";var vN=le(),p_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+vN.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+vN.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(p_,"LeafConfigObject");BN.exports=p_});var FN=f((N6,qN)=>{"use strict";var g_=class{constructor(t,r){this.user=t,this.password=r}};a(g_,"HdbUserObject");qN.exports=g_});var xN=f((b6,GN)=>{"use strict";var PW=le(),O_=class{constructor(t,r){this.user=t+PW.SERVER_SUFFIX.ADMIN,this.password=r}};a(O_,"SysUserObject");GN.exports=O_});var Dd=f((C6,$N)=>{"use strict";var ia=require("path"),w_=require("fs-extra"),vW=PN(),BW=HN(),HW=FN(),qW=xN(),Ld=er(),Mn=b(),je=fr(),b_=T(),N_=le(),{CONFIG_PARAMS:he}=b_,oa=I(),C_=U(),VN=Yr(),Md=He(),aa="clustering",FW=1e4,kN=5;$N.exports={generateNatsConfig:GW,removeNatsConfig:xW};async function GW(e=!1,t=void 0){C_.initSync();let r=C_.get(he.ROOTPATH),s=ia.join(r,aa,N_.PID_FILES.HUB),n=ia.join(r,aa,N_.PID_FILES.LEAF),i=je.getConfigFromFile(he.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ia.join(r,aa,N_.NATS_CONFIG_FILES.HUB_SERVER),c=ia.join(r,aa,N_.NATS_CONFIG_FILES.LEAF_SERVER),_=je.getConfigFromFile(he.CLUSTERING_TLS_CERTIFICATE),u=je.getConfigFromFile(he.CLUSTERING_TLS_PRIVATEKEY),l=je.getConfigFromFile(he.CLUSTERING_TLS_CERT_AUTH),E=je.getConfigFromFile(he.CLUSTERING_TLS_INSECURE),d=je.getConfigFromFile(he.CLUSTERING_TLS_VERIFY),h=je.getConfigFromFile(he.CLUSTERING_NODENAME),m=je.getConfigFromFile(he.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Md.checkNATSServerInstalled()||y_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await Ld.listUsers(),g=je.getConfigFromFile(he.CLUSTERING_USER),H=await Ld.getClusterUser();(Mn.isEmpty(H)||H.active!==!0)&&y_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await I_(he.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await I_(he.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await I_(he.CLUSTERING_HUBSERVER_NETWORK_PORT),await I_(he.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[ls,Mr]of R.entries())Mr.role.role===b_.ROLE_TYPES_ENUM.CLUSTER_USER&&Mr.active&&(x.push(new qW(Mr.username,VN.decrypt(Mr.hash))),q.push(new HW(Mr.username,VN.decrypt(Mr.hash))));let Ue=[],{hub_routes:M}=je.getClusteringRoutes();if(!Mn.isEmptyOrZeroLength(M))for(let ls of M)Ue.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${ls.host}:${ls.port}`);let $=new vW(je.getConfigFromFile(he.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,m,je.getConfigFromFile(he.CLUSTERING_HUBSERVER_CLUSTER_NAME),je.getConfigFromFile(he.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ue,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=Mn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===b_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await w_.writeJson(o,$),oa.trace(`Hub server config written to ${o}`));let ue=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${m}`,oe=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${m}`,kn=new BW(je.getConfigFromFile(he.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ue],[oe],x,q,_,u,l,E);l==null&&delete kn.tls.ca_file,(t===void 0||t===b_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await w_.writeJson(c,kn),oa.trace(`Leaf server config written to ${c}`))}a(GW,"generateNatsConfig");async function I_(e){let t=C_.get(e);return Mn.isEmpty(t)&&y_(`port undefined for '${e}'`),await Mn.isPortTaken(t)&&y_(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(I_,"isPortAvailable");function y_(e){let t=`Error generating clustering config: ${e}`;oa.error(t),console.error(t),process.exit(1)}a(y_,"generateNatsConfigError");async function xW(e){let{port:t,config_file:r}=Md.getServerConfig(e),{username:s,decrypt_hash:n}=await Ld.getClusterUser(),i=0,o=500;for(;i<kN;){try{let u=await Md.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){oa.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=kN)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Mn.async_set_timeout(o*i)}let c="0".repeat(FW),_=ia.join(C_.get(he.ROOTPATH),aa,r);await w_.writeFile(_,c),await w_.remove(_),oa.notify(e,"started.")}a(xW,"removeNatsConfig")});var zN=f((U6,JN)=>{"use strict";var ft=U(),VW=ms(),G=T(),ca=le(),Ir=require("path"),{PACKAGE_ROOT:U_}=T(),YN=U(),Dn="/dev/null",kW=Ir.join(U_,"launchServiceScripts"),KN=Ir.join(U_,"utility/scripts"),$W=Ir.join(KN,G.HDB_RESTART_SCRIPT),WN=Ir.resolve(U_,"dependencies",`${process.platform}-${process.arch}`,ca.NATS_BINARY_NAME);function QN(){let t=VW.licenseSearch().ram_allocation||G.RAM_ALLOCATION_ENUM.DEFAULT,r=G.MEM_SETTING_KEY+t;return{name:G.PROCESS_DESCRIPTORS.HDB,script:G.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:U_}}a(QN,"generateMainServerConfig");var YW=9930;function KW(){ft.initSync(!0);let e=ft.get(G.CONFIG_PARAMS.ROOTPATH),t=Ir.join(e,"clustering",ca.NATS_CONFIG_FILES.HUB_SERVER),r=Ir.join(ft.get(G.HDB_SETTINGS_NAMES.LOG_PATH_KEY),G.LOG_NAMES.HDB),s=YN.get(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ca.LOG_LEVEL_FLAGS[ft.get(G.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:G.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==YW?"-"+s:""),script:WN,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Dn,i.error_file=Dn),i}a(KW,"generateNatsHubServerConfig");var WW=9940;function QW(){ft.initSync(!0);let e=ft.get(G.CONFIG_PARAMS.ROOTPATH),t=Ir.join(e,"clustering",ca.NATS_CONFIG_FILES.LEAF_SERVER),r=Ir.join(ft.get(G.HDB_SETTINGS_NAMES.LOG_PATH_KEY),G.LOG_NAMES.HDB),s=YN.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ca.LOG_LEVEL_FLAGS[ft.get(G.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==WW?"-"+s:""),script:WN,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Dn,i.error_file=Dn),i}a(QW,"generateNatsLeafServerConfig");function JW(){ft.initSync();let e=Ir.join(ft.get(G.CONFIG_PARAMS.LOGGING_ROOT),G.LOG_NAMES.HDB),t={name:G.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:G.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:kW,autorestart:!1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Dn,t.error_file=Dn),t}a(JW,"generateClusteringUpgradeV4ServiceConfig");function zW(){return{...{name:G.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:KN},script:$W}}a(zW,"generateRestart");function XW(){return{apps:[QN()]}}a(XW,"generateAllServiceConfigs");JN.exports={generateAllServiceConfigs:XW,generateMainServerConfig:QN,generateRestart:zW,generateNatsHubServerConfig:KW,generateNatsLeafServerConfig:QW,generateClusteringUpgradeV4ServiceConfig:JW}});var lI=f((q6,uI)=>{"use strict";var Y=T(),ZN=b(),_a=Dd(),L_=He(),ir=le(),K=require("pm2"),ns=zN(),M_=U(),br=I(),ZW=Nr(),{startWorker:Pd,onMessageFromWorkers:jW}=cn(),M6=Ln(),e1=require("util"),jN=require("child_process"),{execFile:t1}=jN,D6=e1.promisify(jN.exec),P6=require("systeminformation");uI.exports={enterPM2Mode:r1,start:Fs,stop:vd,reload:eI,restart:tI,list:Bd,describe:Hd,connect:wr,kill:o1,startAllServices:c1,startService:qd,getUniqueServicesList:sI,restartAllServices:_1,isServiceRegistered:nI,reloadStopStart:iI,restartHdb:rI,deleteProcess:i1,startClusteringProcesses:cI,startClusteringThreads:_I,isHdbRestartRunning:a1,isClusteringRunning:l1,stopClustering:u1,reloadClustering:E1};var{PACKAGE_ROOT:v6}=T(),B6=T(),{loggerWithTag:H6}=br,ua=!1;jW(e=>{e.type==="restart"&&M_.initSync(!0)});function r1(){ua=!0}a(r1,"enterPM2Mode");function wr(){return new Promise((e,t)=>{K.connect((r,s)=>{br.setupConsoleLogging(),r&&t(r),e(s)})})}a(wr,"connect");var et,s1=10,XN;function Fs(e){if(ua)return n1(e);let t=t1(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=et.indexOf(t);i>-1&&et.splice(i,1),!XN&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<s1&&Fs(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=M_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&ir.LOG_LEVEL_HIERARCHY[i]>=ir.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===ir.LOG_LEVELS.ERR||u===ir.LOG_LEVELS.WRN?br.OUTPUTS.STDERR:br.OUTPUTS.STDOUT;br.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=ir.LOG_LEVELS[E]}if(ir.LOG_LEVEL_HIERARCHY[i]>=ir.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===ir.LOG_LEVELS.ERR||u===ir.LOG_LEVELS.WRN?br.OUTPUTS.STDERR:br.OUTPUTS.STDOUT;br.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!et){et=[];let n=a(()=>{XN=!0,et&&(et.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}et.push(t)}a(Fs,"start");function n1(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(n1,"startWithPM2");function vd(e){if(!ua){for(let t of et||[])t.name===e&&(et.splice(et.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.stop(e,async(s,n)=>{s&&(K.disconnect(),r(s)),K.delete(e,(i,o)=>{i&&(K.disconnect(),r(s)),K.disconnect(),t(o)})})})}a(vd,"stop");function eI(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(eI,"reload");function tI(e){if(!ua)for(let t of et||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(tI,"restart");function i1(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(i1,"deleteProcess");async function rI(){await Fs(ns.generateRestart())}a(rI,"restartHdb");async function a1(){let e=await Bd();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(a1,"isHdbRestartRunning");function Bd(){return new Promise(async(e,t)=>{try{await wr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(Bd,"list");function Hd(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(Hd,"describe");function o1(){if(!ua){for(let e of et||[])e.kill();et=[];return}return new Promise(async(e,t)=>{try{await wr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(o1,"kill");async function c1(){try{await cI(),await _I(),await Fs(ns.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(c1,"startAllServices");async function qd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ns.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ns.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ns.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ns.generateNatsHubServerConfig(),await Fs(t),await _a.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ns.generateNatsLeafServerConfig(),await Fs(t),await _a.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ns.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Fs(t)}catch(t){throw K.disconnect(),t}}a(qd,"startService");async function sI(){try{let e=await Bd(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw K.disconnect(),e}}a(sI,"getUniqueServicesList");async function _1(e=[]){try{let t=!1,r=await sI();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Y.PROCESS_DESCRIPTORS.HDB?t=!0:await tI(o))}t&&await iI(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(_1,"restartAllServices");async function nI(e){return et?.find(t=>t.name===e)?!0:!ZN.isEmptyOrZeroLength(await Hd(e))}a(nI,"isServiceRegistered");async function iI(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?M_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):M_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Hd(e),s=ZN.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await vd(e),await qd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await rI():await eI(e)}a(iI,"reloadStopStart");var aI,oI;async function cI(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await qd(t)}}a(cI,"startClusteringProcesses");async function _I(){aI=Pd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),oI=Pd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await L_.createWorkQueueStream(ir.WORK_QUEUE_CONSUMER_NAMES),await L_.updateLocalStreams();let e=await ZW.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){br.info("Starting clustering upgrade 4.0.0 process"),Pd(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(_I,"startClusteringThreads");async function u1(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await aI.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await oI.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await vd(t)}}a(u1,"stopClustering");async function l1(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await nI(t)===!1)return!1}return!0}a(l1,"isClusteringRunning");async function E1(){await _a.generateNatsConfig(!0),await L_.reloadNATSHub(),await L_.reloadNATSLeaf(),await _a.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _a.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(E1,"reloadClustering")});var Yd=f((G6,TI)=>{"use strict";var d1=require("minimist"),{isMainThread:xd,parentPort:hI}=require("worker_threads"),ne=T(),{PROCESS_DESCRIPTORS_VALIDATE:la}=ne,ar=I(),Vd=b(),D_=Dd(),Pn=He(),Fd=le(),fI=fr(),or=lI(),EI=Ln(),h1=Uu(),{restartWorkers:P_,onMessageFromWorkers:f1}=cn(),{handleHDBError:S1,hdb_errors:T1}=y(),{HTTP_STATUS_CODES:m1}=T1,v_=U();v_.initSync();var Ea=`Restarting HarperDB. This may take up to ${ne.RESTART_TIMEOUT_MS/1e3} seconds.`,R1="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",dI="Clustering is not enabled so cannot be restarted",A1="Invalid service",Gs,$t;TI.exports={restart:SI,restartService:kd};xd&&f1(e=>{e.type===ne.ITC_EVENT_TYPES.RESTART&&(e.workerType?kd({service:e.workerType}):SI({operation:"restart"}))});async function SI(e){$t=Object.keys(e).length===0,Gs=await or.isServiceRegistered(ne.HDB_PROC_DESCRIPTOR);let t=d1(process.argv);if(t.service){await kd(t);return}if($t&&!Gs){console.error(R1);return}if($t&&console.log(Ea),Gs){or.enterPM2Mode(),ar.notify(Ea);let r=h1(Object.keys(ne.CONFIG_PARAM_MAP),!0);return Vd.isEmptyOrZeroLength(Object.keys(r))||fI.updateConfigValue(void 0,void 0,r,!0,!0),g1(),Ea}return xd?(ar.notify(Ea),await $d(),setTimeout(()=>{P_()},50)):hI.postMessage({type:ne.ITC_EVENT_TYPES.RESTART}),Ea}a(SI,"restart");async function kd(e){let{service:t}=e;if(ne.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw S1(new Error,A1,m1.BAD_REQUEST,void 0,void 0,!0);if(Gs=await or.isServiceRegistered(ne.HDB_PROC_DESCRIPTOR),!xd)return hI.postMessage({type:ne.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case la.clustering:if(!v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dI;break}$t&&console.log("Restarting clustering"),ar.notify("Restarting clustering"),await $d();break;case la.clustering_config:case la["clustering config"]:if(!v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dI;break}$t&&console.log("Restarting clustering_config"),ar.notify("Restarting clustering_config"),await or.reloadClustering();break;case"custom_functions":case"custom functions":case la.harperdb:case la.http_workers:if($t&&!Gs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}$t&&console.log("Restarting http_workers"),ar.notify("Restarting http_workers"),Gs?await or.restart(ne.HDB_PROC_DESCRIPTOR):setTimeout(()=>{P_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ar.error(r),$t&&console.error(r),r):`Restarting ${t}`}a(kd,"restartService");async function p1(){await Pn.publishToStream(`${Fd.SUBJECT_PREFIXES.TXN}.${Fd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Fd.WORK_QUEUE_CONSUMER_NAMES.stream_name,Pn.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(p1,"postDummyNatsMsg");async function g1(){await $d(),await or.restart(ne.HDB_PROC_DESCRIPTOR),await Vd.async_set_timeout(2e3),v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Gd(),$t&&(await Pn.closeConnection(),process.exit(0))}a(g1,"restartPM2Mode");async function $d(){if(!fI.getConfigFromFile(ne.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await EI.getHDBProcessInfo()).clustering.length===0)ar.trace("Clustering not running, restart will start clustering services"),await D_.generateNatsConfig(!0),await or.startClusteringProcesses(),await or.startClusteringThreads(),await Gd(),$t&&await Pn.closeConnection();else{await p1(),await D_.generateNatsConfig(!0),Gs?(ar.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await or.restart(ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await or.restart(ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await EI.getHDBProcessInfo()).clustering.forEach(n=>{ar.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Vd.async_set_timeout(3e3),await Gd(),await Pn.updateLocalStreams(),$t&&await Pn.closeConnection(),ar.trace("Restart clustering restarting ingest and reply service threads");let t=P_(ne.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=P_(ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a($d,"restartClustering");async function Gd(){await D_.removeNatsConfig(ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await D_.removeNatsConfig(ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Gd,"removeNatsConfig")});var CI=f((k6,wI)=>{"use strict";var V6=require("lodash"),Fe=T(),{handleHDBError:mI,hdb_errors:O1}=y(),{HDB_ERROR_MSGS:N1,HTTP_STATUS_CODES:I1}=O1,Kd=I();wI.exports={getRolePermissions:w1};var xs=Object.create(null),b1=a(e=>({key:e,perms:{}}),"perms_template_obj"),gI=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),OI=a((e=!1,t=!1,r=!1,s=!1)=>({[Fe.PERMS_CRUD_ENUM.READ]:e,[Fe.PERMS_CRUD_ENUM.INSERT]:t,[Fe.PERMS_CRUD_ENUM.UPDATE]:r,[Fe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Wd=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...OI(t,r,s,n)}),"table_perms_template"),RI=a((e,t=OI())=>({attribute_name:e,describe:bI(t),[da]:t[da],[Qd]:t[Qd],[Jd]:t[Jd]}),"attr_perms_template"),AI=a((e,t=!1)=>({attribute_name:e,describe:t,[da]:t}),"timestamp_attr_perms_template"),{READ:da,INSERT:Qd,UPDATE:Jd}=Fe.PERMS_CRUD_ENUM,NI=Object.values(Fe.PERMS_CRUD_ENUM),II=[da,Qd,Jd];function w1(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Fe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(xs[t]&&xs[t].key===s)return xs[t].perms;let n=C1(e,r);return xs[t]?xs[t].key=s:xs[t]=b1(s),xs[t].perms=n,n}catch(r){if(!e[Fe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Fe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Fe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw Kd.error(s),Kd.debug(r),mI(new Error,N1.OUTDATED_PERMS_TRANSLATION_ERROR,I1.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
8
8
  ${r.stack}`;throw Kd.error(s),mI(new Error)}}}a(w1,"getRolePermissions");function C1(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Fe.SYSTEM_SCHEMA_NAME]=s[Fe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=y1(t[i]);return}r[i]=gI(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=U1(c,_);r[i].describe||NI.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Wd()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Wd()})}),r}a(C1,"translateRolePermissions");function y1(e){let t=gI(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Wd(!0,!0,!0,!0,!0)}),t}a(y1,"createStructureUserPermissions");function U1(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return Fe.TIME_STAMP_NAMES.includes(E)&&(d=AI(E,l[da])),u[E]=d,u},{}),o=t[Fe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=RI(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=bI(l),n.attribute_permissions.push(l),c||L1(l,_)}else if(u!==o){let l;Fe.TIME_STAMP_NAMES.includes(u)?l=AI(u):l=RI(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=pI(n),n}else return e.describe=pI(e),e}a(U1,"getTableAttrPerms");function pI(e){return NI.filter(t=>e[t]).length>0}a(pI,"getSchemaTableDescribePerm");function bI(e){return II.filter(t=>e[t]).length>0}a(bI,"getAttributeDescribePerm");function L1(e,t){II.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(L1,"checkForHashPerms")});var vI=f((Y6,PI)=>{"use strict";var fe=require("joi"),yI=require("fs-extra"),UI=require("path"),vn=re(),LI=U(),MI=T(),DI=I(),{hdb_errors:M1}=y(),{HDB_ERROR_MSGS:tt}=M1,is=/^[a-zA-Z0-9-_]+$/;PI.exports={getDropCustomFunctionValidator:P1,setCustomFunctionValidator:v1,addCustomFunctionProjectValidator:B1,dropCustomFunctionProjectValidator:H1,packageCustomFunctionProjectValidator:q1,deployCustomFunctionProjectValidator:F1};function ha(e,t,r){try{let s=LI.get(MI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=UI.join(s,t);return yI.existsSync(n)?e?t:r.message(tt.PROJECT_EXISTS):e?r.message(tt.NO_PROJECT):t}catch(s){return DI.error(s),r.message(tt.VALIDATION_ERR)}}a(ha,"checkProjectExists");function D1(e,t,r,s){try{let n=LI.get(MI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=UI.join(n,e,t,r+".js");return yI.existsSync(i)?r:s.message(tt.NO_FILE)}catch(n){return DI.error(n),s.message(tt.VALIDATION_ERR)}}a(D1,"checkFileExists");function P1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(is).custom(D1.bind(null,e.project,e.type)).required().messages({"string.pattern.base":tt.BAD_FILE_NAME})});return vn.validateBySchema(e,t)}a(P1,"getDropCustomFunctionValidator");function v1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(is).required().messages({"string.pattern.base":tt.BAD_FILE_NAME}),function_content:fe.string().required()});return vn.validateBySchema(e,t)}a(v1,"setCustomFunctionValidator");function B1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!1)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME})});return vn.validateBySchema(e,t)}a(B1,"addCustomFunctionProjectValidator");function H1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME})});return vn.validateBySchema(e,t)}a(H1,"dropCustomFunctionProjectValidator");function q1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),skip_node_modules:fe.boolean()});return vn.validateBySchema(e,t)}a(q1,"packageCustomFunctionProjectValidator");function F1(e){let t=fe.object({project:fe.string().pattern(is).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),payload:fe.string().required().messages({"string.pattern.base":tt.BAD_PACKAGE})});return vn.validateBySchema(e,t)}a(F1,"deployCustomFunctionProjectValidator")});var eh=f((W6,qI)=>{"use strict";var we=require("fs-extra"),zd=require("fast-glob"),te=require("path"),BI=require("tar-fs"),HI=require("uuid").v4,Xd=require("normalize-path"),Vs=vI(),Oe=I(),St=T(),Tt=U(),{PACKAGE_ROOT:G1}=T(),{handleHDBError:Ge,hdb_errors:x1}=y(),{HDB_ERROR_MSGS:as,HTTP_STATUS_CODES:xe}=x1,V1=te.join(G1,"custom_function_template"),Zd=te.join(Tt.get(St.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function jd(){let e=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,as.NOT_ENABLED,xe.BAD_REQUEST,void 0,void 0,!0)}a(jd,"isCFEnabled");function k1(){Oe.trace("getting custom api status");let e={};try{e={is_enabled:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,as.FUNCTION_STATUS,xe.INTERNAL_SERVER_ERROR,Oe.ERR,t)}return e}a(k1,"customFunctionsStatus");function $1(){Oe.trace("getting custom api endpoints");let e={},t=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{zd.sync(Xd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:zd.sync(Xd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:zd.sync(Xd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,as.GET_FUNCTIONS,xe.INTERNAL_SERVER_ERROR,Oe.ERR,r)}return e}a($1,"getCustomFunctions");function Y1(e){e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("getting custom api endpoint file content");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=te.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,as.GET_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,c)}}a(Y1,"getCustomFunction");function K1(e){jd(),e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("setting custom function file content");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(te.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,as.SET_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,c)}}a(K1,"setCustomFunction");function W1(e){e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("dropping custom function file");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(te.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,as.DROP_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,o)}}a(W1,"dropCustomFunction");function Q1(e){jd(),e.project&&(e.project=te.parse(e.project).name);let t=Vs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("adding custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=te.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(V1,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,as.ADD_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,n)}}a(Q1,"addCustomFunctionProject");function J1(e){e.project&&(e.project=te.parse(e.project).name);let t=Vs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("dropping custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=te.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,as.DROP_FUNCTION_PROJECT,xe.INTERNAL_SERVER_ERROR,Oe.ERR,n)}}a(J1,"dropCustomFunctionProject");async function z1(e){e.project&&(e.project=te.parse(e.project).name);let t=Vs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("packaging custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=te.join(r,s),i=HI();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Oe.error(l),l}we.ensureDirSync(Zd);let c=te.join(Zd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(te.join(n,"node_modules"))}),BI.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(z1,"packageCustomFunctionProject");async function X1(e){jd(),e.project&&(e.project=te.parse(e.project).name);let t=Vs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("deploying custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=te.join(r,s);await we.ensureDir(i);let o,c;do o=te.join(Zd,HI()+".tar"),c=await we.pathExists(o);while(c);await we.outputFile(o,n,{encoding:"base64"});let _=we.createReadStream(o);return _.pipe(BI.extract(i)),await new Promise(u=>_.on("end",u)),await we.unlink(o),`Successfully deployed project: ${s}`}a(X1,"deployCustomFunctionProject");qI.exports={customFunctionsStatus:k1,getCustomFunctions:$1,getCustomFunction:Y1,setCustomFunction:K1,dropCustomFunction:W1,addCustomFunctionProject:Q1,dropCustomFunctionProject:J1,packageCustomFunctionProject:z1,deployCustomFunctionProject:X1}});var th=f((J6,GI)=>{"use strict";var cr=require("joi"),FI=re();GI.exports={readTransactionLogValidator:Z1,deleteTransactionLogsBeforeValidator:j1};function Z1(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),from:cr.date().timestamp(),to:cr.date().timestamp(),limit:cr.number().min(1)});return FI.validateBySchema(e,t)}a(Z1,"readTransactionLogValidator");function j1(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),timestamp:cr.date().timestamp().required()});return FI.validateBySchema(e,t)}a(j1,"deleteTransactionLogsBeforeValidator")});var H_=f((X6,YI)=>{"use strict";var rh=T(),B_=He(),xI=b(),VI=U(),kI=Yr(),{handleHDBError:Bn,hdb_errors:eQ}=y(),{HTTP_STATUS_CODES:Hn}=eQ,{readTransactionLogValidator:tQ,deleteTransactionLogsBeforeValidator:rQ}=th(),$I="This operation relies on clustering and cannot run with it disable.",sQ="Logs successfully deleted from transaction log.",nQ="All logs successfully deleted from transaction log.";YI.exports={readTransactionLog:iQ,deleteTransactionLogsBefore:aQ};async function*iQ(e){let t=tQ(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!VI.get(rh.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bn(new Error,$I,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=xI.checkSchemaTableExist(r,s);if(n)throw Bn(new Error,n,Hn.NOT_FOUND,void 0,void 0,!0);let i=kI.createNatsTableStreamName(r,s),o=await B_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let _=Math.floor(c?.nats_timestamp/1e6);if(e.to&&_>e.to)break;let u={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:_,records:c?.entry?.records};c?.entry?.operation===rh.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(iQ,"readTransactionLog");async function aQ(e){let t=rQ(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!VI.get(rh.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bn(new Error,$I,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=xI.checkSchemaTableExist(r,s);if(i)throw Bn(new Error,i,Hn.NOT_FOUND,void 0,void 0,!0);let o=kI.createNatsTableStreamName(r,s),{jsm:c}=await B_.getNATSReferences(),_=await B_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=sQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=nQ):E=(await B_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(aQ,"deleteTransactionLogsBefore")});var nh=f((j6,tb)=>{"use strict";var q_=require("joi"),F_=require("path"),KI=require("fs-extra"),{exec:oQ}=require("child_process"),cQ=require("util"),WI=cQ.promisify(oQ),_Q=T(),{handleHDBError:qn,hdb_errors:uQ}=y(),{HTTP_STATUS_CODES:Fn}=uQ,QI=U(),lQ=re(),G_=I();QI.initSync();var sh=QI.get(_Q.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),JI="npm install --omit=dev --json",EQ=`${JI} --dry-run`;tb.exports={installModules:dQ,auditModules:hQ};async function zI(e,t=void 0){let{stdout:r,stderr:s}=await WI(e,{cwd:t});if(s)throw new Error(s.replace(`